Nazwy: ORYG: 012345678901234567890123456789 <DIR> (30 znaków) AMOS: *01234567890123456789012345678 <DIR> (po odjęciu gwiazdki 29)
@groovebox, post #1
@asman, post #7
@cholok, post #8
@groovebox, post #10
'zaalokowanie pamieci dla struktury FileInfoBlock ' ' d0 = rozmiar struktury FileInfoBlock ktora wynosi 260 bajtow ' d1 = type pamieci w tym przypadku dowolna (MEMF_PUBLIC) ' ' AllocMem ma przesuniecie -198 (exec.library) ' ' zwraca adres niezerowy jesli udalo sie zaalokowac ' zero jak sie nie udalo, ja z lenistwa nie sprawdzam tego ' a powinienem ' Dreg(0)=260 Dreg(1)=1 _FILE_INFO_BLOCK=Execall(-198) 'robimy lock na katalogu ' ' d1 - adres stringa zakonczonego zerem ' (tu mam nadzieje ze amos konczy zerem zmienna A$) ' ' d2 - tryb dostepu, w tym przypadku wystarczy ACCESS_READ czyli -1 ' ' Lock ma przesuniece -84 (dos.library) ' ' zwraca zero jesli sie nie udalo (na przyklad nie istnieje plik/katalog ' a jak sie udalo to zwraca wartosc niezerowa ktora pozniej uzywamy ' A$="work:srcAmos/a" Dreg(1)=Varptr(A$) Dreg(2)=-2 _LOCK=Doscall(-84) If _LOCK<>0 ' robimy examine na locku ' ' d1 - lock, ktory otrzymalismy od Lock ' d2 - adres file info block ' ' Examine ma przesuniecie -102 (dos.library) ' Dreg(1)=_LOCK Dreg(2)=_FILE_INFO_BLOCK _RESULT=Doscall(-102) Print "examine:"; Print _RESULT If _RESULT<>0 ' tu na przyklad sprawdzamy z kim mamy do czynienia, jesli jest -1 ' to jest to katalog, w przeciwnym razie plik Print "dir entry"; Print Leek(_FILE_INFO_BLOCK+4); Print ' robimy ExNext na Examine by dowiedziec sie co jeszcze mamy w ' w katalogu ' ' d1 - lock ' d2 - ten sam file info block co w examine ' ' ExNext ma przesuniecie -108 (dos.library) ' ' zwraca zero jesli blad, trzeba uzyc IoErr by poznac szczegoly ' bledu Dreg(1)=_LOCK Dreg(2)=_FILE_INFO_BLOCK _R2=Doscall(-108) Print "exnext:"; Print _R2 'to trzeba sprawdzac jesli _R2 bylo zerem 'jesli w katalogu nie ma innych podkatalogow i plikow to zwraca 'AmigaDOS errorcode 232 - no more entries in directory _IOERR=Doscall(-132) Print _IOERR ' czytamy z pola fib_FileName nazwe ' ' _FIB_NAME=_FILE_INFO_BLOCK+8 For I=0 To 106 A=Peek(_FIB_NAME+I) Exit If A=0 Print Chr$(A); Next I Print End If ' robimy unlock ' d1 - lock ' Unlock ma przesuniece -90 ' nic nie zwraca, stad zdupna zmienna _VOID Dreg(1)=_LOCK _VOID=Doscall(-90) End If 'zwolnienie pamieci struktur FileInfoBlock ' ' A1 - adres, ktory zworcil AllocMem ' D0 - ilosc bajtow ktore rezerwowalismy ' ' FreeMem ma przesuniece -210 ' nie zwraca nic ' Areg(1)=_FILE_INFO_BLOCK Dreg(0)=260 _VOID_=Execall(-210)
@asman, post #11