?login_element?

Subversion Repositories NedoOS

Rev

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

  1. #include "../_sdk/io.h"
  2. #include "../_sdk/str.h"
  3.  
  4. VAR BYTE psystrk[0x900];
  5. #define BUFSECTORS 0x10
  6. #define BUFSIZE (UINT)(BUFSECTORS*0x100)
  7. VAR BYTE buf[BUFSIZE];
  8.  
  9. FUNC UINT copybody(UINT from, UINT to, BYTE count) // TODO ъюяшЁютрэшх эр Єю цх ьхёЄю эх фхырЄ№, эю фы  ¤Єюую эрфю т√ўшёышЄ№ ёыхфє■∙шщ ёхъЄюЁ!
  10. {
  11. VAR UINT nextrdsector;
  12. VAR UINT nextwrsector;
  13. VAR BYTE wrsectors;
  14.   nextrdsector = from;
  15.   nextwrsector = to;
  16.   WHILE (count > 0x00) {
  17.     IF (count >= BUFSECTORS) {
  18.       wrsectors = BUFSECTORS;
  19.     }ELSE {
  20.       wrsectors = count;
  21.     };
  22.     nextrdsector = readsectors((PBYTE)buf, nextrdsector, wrsectors);
  23.     nextwrsector = writesectors((PBYTE)buf, nextwrsector, wrsectors);
  24.     count = count - wrsectors;
  25.   };
  26. RETURN nextwrsector;
  27. }
  28.  
  29. PROC movedisk()
  30. {
  31. VAR UINT wasfreeplace; //
  32. VAR UINT freeplace; //ъєфр яш°хь Єхыю Їрщыр
  33. VAR PBYTE curfiledesc; //юЄъєфр ўшЄрхь фхёъЁшяЄюЁ
  34. VAR PBYTE freefiledesc; //ъєфр яш°хь фхёъЁшяЄюЁ
  35. VAR UINT nfreesectors;
  36. VAR BYTE nfiles;
  37. VAR BYTE count;
  38.   //ўшЄрхь ёшёЄхьэє■ фюЁюцъє
  39.   readsectors((PBYTE)psystrk, 0x0000, 0x09);
  40.   nfiles = 0x00; //psystrk[0x8e4];
  41.   nfreesectors = *(PUINT)(&psystrk[0x8e5]);
  42.   //эрўрыю ётюсюфэюую ьхёЄр = 0x0100
  43.   freeplace = 0x0100;
  44.   freefiledesc = (PBYTE)psystrk;
  45.   //Єхъє∙шщ Їрщыют√щ фхёъЁшяЄюЁ = &psystrk[0x0000]
  46.   curfiledesc = (PBYTE)psystrk;
  47.   loop:
  48.     //ш∙хь эхєфры╕ээ√щ Їрщы
  49.     IF (*(PBYTE)curfiledesc == 0x00) goto quit;
  50.     count = curfiledesc[0x0d]; //ЁрчьхЁ т ёхъЄюЁрї
  51.     IF (*(PBYTE)curfiledesc == 0x01) {
  52.       nfreesectors = nfreesectors + (UINT)count;
  53.       goto next;
  54.     };
  55.     //яхЁхсЁрё√трхь Єхыю Їрщыр т эрўрыю яєёЄюую ьхёЄр
  56.     wasfreeplace = freeplace;
  57.     freeplace = copybody(*(PUINT)(&curfiledesc[0x0e]), freeplace, count);
  58.     //ъюЁЁхъЄшЁєхь фшЁхъЄюЁш■
  59.     memcopy(curfiledesc, 14, freefiledesc);
  60.     POKE *(PUINT)(&freefiledesc[0x0e]) = wasfreeplace;
  61.     freefiledesc = &freefiledesc[16];
  62.     INC nfiles;
  63.     next:
  64.     //яхЁхїюфшь ъ ёыхфє■∙хьє фхъёЁшяЄюЁє
  65.     curfiledesc = &curfiledesc[16];
  66.     //яютЄюЁ хь фю 0
  67.   goto loop;
  68.   quit:
  69.  
  70.   WHILE (freefiledesc[0] != 0x00) {
  71.     freefiledesc[0] = 0x00; //end of directory
  72.     freefiledesc = &freefiledesc[16];
  73.   };
  74.  
  75.   //ъюЁЁхъЄшЁєхь ёшёЄхьэ√щ ёхъЄюЁ
  76.   POKE *(PUINT)(&psystrk[0x8e1]) = freeplace;
  77.   psystrk[0x8e4] = nfiles; //number of files
  78.   POKE *(PUINT)(&psystrk[0x8e5]) = nfreesectors;
  79.   psystrk[0x8f4] = 0x00; //number of erased files
  80.   //яш°хь ёшёЄхьэє■ фюЁюцъє
  81.   writesectors((PBYTE)psystrk, 0x0000, 0x09);
  82. }
  83.