?login_element?

Subversion Repositories NedoOS

Rev

Rev 1386 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download

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