?login_element?

Subversion Repositories NedoOS

Rev

Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <oscalls.h>
  5. #include <osfs.h>
  6. #include <intrz80.h>
  7. #include <terminal.c>
  8.  
  9.         unsigned char trdBuf[8192];
  10.         unsigned char fileName[256];
  11.         struct diskOp readParam;
  12.         unsigned char argLng;
  13. void interface (void)
  14. {
  15. char fnPos;
  16.         fnPos = (41-9-argLng)/2 + 20;
  17.         BOX(20, 5, 41, 1, 47);
  18.     ATRIB(34);
  19.         AT (21,5);
  20.         printf("WRTRD2 Make floppy disk from TRD images");
  21.         BOX(20, 6, 41, 6, 44);
  22.         ATRIB(37);
  23.         AT (fnPos,7);
  24.         printf("filename:");
  25.         printf(fileName);
  26.         AT (23,9);
  27.         printf("[.................................]");
  28.         AT (34,11);
  29.         printf("[ESC - Exit]");
  30. }
  31.  
  32. void pBar( char procent)
  33. {
  34. float lng;
  35. char cycle;
  36. AT (24,9);
  37. lng = (float)33 / (float)100 * (float)procent;
  38. for (cycle = 0; cycle < lng; cycle++)
  39. {
  40.         putchar(219);
  41. }
  42. }
  43.  
  44. C_task main (int argc, char *argv[])
  45. {
  46.         unsigned int cycle;
  47.         unsigned long secTmp;
  48.         unsigned int result;
  49.         unsigned char argPos;
  50.         char prgPrc;
  51.         unsigned char key;
  52.  
  53.  
  54.         FILE *fp1;
  55.         os_initstdio();
  56.         if (argc < 2)
  57.         {
  58.                 argv[1] = "noname.trd\0";
  59.         }
  60.        
  61.         argPos =0;
  62.         fileName[255] = '\0';
  63.        
  64. while (argv[1][argPos] != '\0')
  65.         {
  66.         fileName[argPos] = argv[1][argPos];
  67.         argPos++;
  68.         }      
  69.         argLng = strlen(fileName);
  70.         interface();
  71.         fp1 = OS_OPENHANDLE(argv[1], 0x80);
  72.     if (((int)fp1) & 0xff)
  73.     {
  74.       printf (argv[1]);
  75.           printf(" opening error\r\n");
  76.           exit(0);
  77.         }
  78.         readParam.drive         = 0;
  79.         readParam.BufAdr        = &trdBuf;
  80.         readParam.sector        = 0;
  81.         readParam.count         = 32;
  82.        
  83.        
  84.        
  85.         for (cycle = 0; cycle < 80; cycle++)
  86.         {
  87.         secTmp = cycle * (unsigned long)8192/256;
  88.         readParam.sector = secTmp;
  89.         OS_READHANDLE(trdBuf, fp1, 8192);
  90.         result = OS_WRITESECTORS (&readParam);
  91.         prgPrc = cycle * 1.25;
  92.         if (prgPrc % 5 == 0)    pBar(prgPrc);
  93.         key = _low_level_get();
  94.         }
  95.                 if (key == 27)
  96.         {
  97.                 OS_CLOSEHANDLE(fp1);
  98.                 exit(0);
  99.         }
  100.         OS_CLOSEHANDLE(fp1);
  101.         return 0;
  102. }  
  103.  
  104. /*Если количество параметров неопределённо (printf(...) и т.п.), то все параметры передаются через стек. Иначе первый параметр передаётся в E, DE, CDE или BCDE, в зависимости от разрядности значения. Если первый и второй параметры не шире 16 бит каждый, то второй параметр передаётся в регистрах B или BC, иначе через стек. Возвращаемое значение из функции передаётся в регистрах A (L при банкинге), HL, CHL или BCHL, в зависимости от разрядности значения.
  105. Сохранять надо ix и iy обязательно.
  106. DE и  BC сохранять если они не юзаются в качестве параметров
  107. */
  108.