Login

Subversion Repositories NedoOS

Rev

Rev 50 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

#include "../_sdk/io.h"
#include "../_sdk/str.h"

VAR BYTE psystrk[0x900];

FUNC BOOL comparedesc(PCHAR filename, PBYTE desc)
{
VAR CHAR c;
VAR BOOL res;
VAR BYTE i = 0x08;
  res = +FALSE;
  filename = findlastslash(filename);
  loop:
    c = *(PCHAR)filename;
    INC filename;
    IF (c == '.') {
      dot:
      while (i != 0x00) {
        if (*(PCHAR)desc != ' ') {goto quit;};
        INC desc;
        DEC i;
      };
      //desc = (PBYTE)((UINT)desc + (UINT)i);
      res = (*(PCHAR)desc == *(PCHAR)filename);
      goto quit;
    };
    IF (c != *(PCHAR)desc) {goto quit;};
    INC desc;
    DEC i;
    IF (i == 0x00) {
      c = *(PCHAR)filename;
      INC filename;
      IF (c == '.') {goto dot;};
      res = ((c == '\0') && (*(PCHAR)desc == ' ')); //filenam8 (without ext); else filename too long
      goto quit;
    };
    goto loop;
  quit:
RETURN res;
}

PROC main(PCHAR fn)
{
VAR BYTE nerased;
//VAR BYTE nfiles;
VAR PBYTE curfiledesc;
  //ўшЄрхь ёшёЄхьэє■ фюЁюцъє
  readsectors((PBYTE)psystrk, 0x0000, 0x09);
  //nfiles = psystrk[0x8e4];
  nerased = psystrk[0x8f4];
 
  //Єхъє∙шщ Їрщыют√щ фхёъЁшяЄюЁ = &psystrk[0x0000]
  curfiledesc = (PBYTE)psystrk;
  loop:
    //ш∙хь эхєфры╕ээ√щ Їрщы
    IF (*(PBYTE)curfiledesc == 0x00) goto quit;
    IF (comparedesc(fn, curfiledesc)) {
      //ъюЁЁхъЄшЁєхь фшЁхъЄюЁш■
      curfiledesc[0] = 0x01; //erased
      //DEC nfiles;
      INC nerased;
    };
    //яхЁхїюфшь ъ ёыхфє■∙хьє фхъёЁшяЄюЁє
    curfiledesc = &curfiledesc[16];
    //яютЄюЁ хь фю 0
  goto loop;
  quit:

  //ъюЁЁхъЄшЁєхь ёшёЄхьэ√щ ёхъЄюЁ
  //psystrk[0x8e4] = nfiles; //number of files
  psystrk[0x8f4] = nerased; //number of erased files
  //яш°хь ёшёЄхьэє■ фюЁюцъє
  writesectors((PBYTE)psystrk, 0x0000, 0x09);
}