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