home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CP/M
/
CPM_CDROM.iso
/
simtel
/
sigm
/
vols000
/
vol094
/
dirscan.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
1985-02-09
|
2KB
|
78 lines
program dir_scan;
const
def_fcb = 92; (* default file control block address (5Ch *)
def_dma = 128; (* default direct memory address (80h) *)
type
peek_poke = char;
byteptr = ^peek_poke;
var
(* variant record user to circumvent type conflicts *)
abs_mem_adr : record case Boolean of
true : (i : integer);
false : (p : byteptr);
end;
i,j,return_code : integer;
function dirfrst :integer; external; (* search for first directory entry *)
function dirnext :integer; external; (* search for next entry *)
procedure request_all;
(* filename and filetype are assigned all ?'s, select currently logged drive *)
begin
abs_mem_adr.i:=def_fcb;
abs_mem_adr.p^:=chr(0); (* binary zeros for fcb drive code *)
for i:=1 to 11 do
begin
abs_mem_adr.i:=abs_mem_adr.i + 1;
abs_mem_adr.p^:='?'
end
end;
procedure write_entry(disp: integer);
(* display filename and filetype from dma + (32 X relative displacement *)
begin
abs_mem_adr.i:=def_dma + (disp * 32);
for i:=1 to 8 do
begin
abs_mem_adr.i:=abs_mem_adr.i + 1;
write(abs_mem_adr.p^)
end;
write(' ');
for i:=1 to 3 do
begin
abs_mem_adr.i:=abs_mem_adr.i + 1;
write(abs_mem_adr.p^)
end
end;
(* M A I N P R O G R A M *)
beginè writeln('DIRCTORY LISTING:');
request_all;
return_code:=dirfrst;
if return_code=255 then writeln('**Disk is empty**')
else
begin
j:=1;
while return_code <> 255 do
begin
write_entry(return_code);
write(' ');
j:=j+1;
if j > 4 then
begin
writeln; (* four entries displayed per line *)
j:=1
end; (* end if *)
return_code:=dirnext
end; (* end while *)
end; (* end else *)
end.