4
How you can use unit linklist.
7
Changed to use printf in amigalib.
10
nils.sjoholm@mailbox.swipnet
13
uses Amigados, exec, strings, linklist,pastoc, amigalib;
15
CONST BufferSize = 2048;
18
VAR ExData : pExAllData;
31
PROCEDURE CleanUp(TheMsg : STRING; ErrCode : INTEGER);
33
IF EAC <> NIL THEN FreeDosObject(DOS_EXALLCONTROL,EAC);
34
IF MyLock <> 0 THEN UnLock(MyLock);
35
IF ExData <> NIL THEN ExecFreeMem(ExData,BufferSize);
36
IF DirList <> NIL THEN DestroyList(DirList);
37
IF FileList <> NIL THEN DestroyList(FileList);
38
IF Buffer <> NIL THEN StrDispose(Buffer);
39
IF TheMsg <> '' THEN WriteLN(TheMsg);
45
Write(CSI, '1m', 'DirDemo'#10,CSI,'0m', 'For FPC Pascal USAGE: DirDemo ThePath'#10);
50
Buffer := StrAlloc(255);
51
IF ParamCount <> 1 then Usage;
52
TheDir := ParamStr(1);
57
EAC := AllocDosObject(DOS_EXALLCONTROL,NIL);
58
IF EAC = NIL THEN CleanUp('No AllocDosObject',10);
60
ExData := AllocMem(BufferSize,0);
61
EAC^.eac_LastKey := 0;
62
EAC^.eac_MatchString := NIL;
63
EAC^.eac_MatchFunc := NIL;
64
MyLock:=Lock(pas2c(TheDir),SHARED_LOCK);
65
IF MyLock=0 THEN CleanUp('No lock on directory',10);
68
AnyMore := ExAll(MyLock,ExData,BufferSize,ED_SIZE,EAC);
71
FOR i := 1 TO EAC^.eac_Entries DO BEGIN
72
IF PData^.ed_Type >= 0 THEN BEGIN
73
tempnode := AddNewNode(DirList,PData^.ed_Name);
75
tempnode := AddNewNode(FileList,PData^.ed_Name);
76
tempnode^.ln_Size := PData^.ed_Size;
78
PData := PData^.ed_Next;
80
UNTIL (AnyMore=FALSE) AND (temp=ERROR_NO_MORE_ENTRIES);
87
WriteLN('Directory of: "', TheDir,'"');
88
tempnode := GetFirstNode(DirList);
90
FOR i := 1 TO NodesInList(DirList) DO BEGIN
91
printf('%-30s <DIR>'#10,[long(GetNodeData(tempnode))]);
92
tempnode := GetNextNode(tempnode);
95
tempnode := GetFirstNode(FileList);
96
FOR i := 1 TO NodesInList(FileList) DO BEGIN
97
printf('%-30s%7ld'#10 ,[long(GetNodeData(tempnode)),tempnode^.ln_Size]);
98
TotalSize := TotalSize + tempnode^.ln_Size;
99
tempnode := GetNextNode(tempnode);
102
WriteLN('The total size is ',TotalSize,' Byte.');