home *** CD-ROM | disk | FTP | other *** search
- PROGRAM dir;
-
- {$i-,u-,c-}
-
- TYPE
- registers=RECORD
- ax,bx,cx,dx,bp,si,di,ds,es,flags:INTEGER;
- END;
-
- char80arr=ARRAY[1..80] OF CHAR;
- string80=STRING[80];
-
- VAR
- dta:ARRAY[1..43] OF Byte;
- dtaseg,
- dtaofs,
- setdtaseg,
- setdtaofs,
- error,
- i,j,
- att,option:INTEGER;
- regs:registers;
- buffer,
- namr:string80;
- mask:char80arr;
-
- PROCEDURE setdta(segment,offset:INTEGER;VAR error:INTEGER);
-
- BEGIN
- regs.ax:=$1a00;
- regs.ds:=segment;
- regs.dx:=offset;
- MSDos(regs);
- error:=regs.ax AND $ff;
- END;
-
- PROCEDURE getcurrentdta(VAR segment,offset:INTEGER; VAR error:INTEGER);
-
- BEGIN
- regs.ax:=$2f00;
- MSDos(regs);
- segment:=regs.es;
- offset:=regs.bx;
- error:=regs.ax AND $ff;
- END;
-
- PROCEDURE getoption(VAR option:INTEGER);
- VAR
- ch:CHAR;
-
- BEGIN
- ch:='?';
- option:=1;
- WHILE (ch='?') DO
- BEGIN
- WRITE('File option to use, [?] for list :');
- READLN(ch);
- WRITELN;
- CASE(ch) OF
- '1':option :=1;
- '2':option :=7;
- '3':option :=8;
- '4':option :=16;
- '5':option :=22;
- '6':option :=31;
- '?':BEGIN
- LowVideo;
- WRITELN('FIle options are : ');
- WRITELN;
- WRITELN('[1] for standard files [default].');
- WRITELN('[2] for system or hidden files');
- WRITELN(' and standard files');
- WRITELN('[3] for volume label');
- WRITELN('[4] for directories and standard files');
- WRITELN('[5] for directories,hidden or system');
- WRITELN(' files and standard files');
- WRITELN('[6] same as 5, but with volume');
- WRITELN(' label included');
- WRITELN;
- NormVideo
- END;
- ELSE
- option :=1;
- END; {case}
- END;
- END;
-
- PROCEDURE getfirst(mask:char80arr;VAR namr:string80;segment,offset:INTEGER;
- option:INTEGER; VAR error:INTEGER);
-
- VAR
- i:INTEGER;
-
- BEGIN
- error:=0;
- regs.ax:=$4e00;
- regs.ds:=Seg(mask);
- regs.dx:=Ofs(mask);
- regs.cx:=option;
- MSDos(regs);
- error:=regs.ax AND $ff;
- i:=1;
- REPEAT
- namr[i]:=CHR(Mem[segment:offset+29+i]);
- i:=i+1;
- UNTIL (NOT(namr[i-1] IN [' '..'~']));
- att:=Mem[segment:offset+21];
- namr[0]:=CHR(i-1);
- END;
-
- PROCEDURE getnextentry(VAR namr:string80; segment,offset:INTEGER;
- option:INTEGER;VAR error:INTEGER);
-
- VAR
- i:INTEGER;
-
- BEGIN
- error:=0;
- regs.ax:=$4f00;
- regs.cx:=option;
- MSDos(regs);
- error:=regs.ax AND $ff;
- i:=1;
- REPEAT
- namr[i]:=CHR(Mem[segment:offset+29+i]);
- i:=i+1;
- UNTIL (NOT(namr[i-1] IN [' '..'~']));
- att:=Mem[segment:offset+21];
- namr[0]:=CHR(i-1);
- END;
-
- BEGIN
- FOR i:=1 TO 21 DO dta[i]:=0;
- FOR i:=1 TO 80 DO
- BEGIN
- mask[i]:=CHR(0);
- namr[i]:=CHR(0);
- END;
- namr[0]:=CHR(0);
- WRITELN('QDL version @.0A');
- WRITELN;
- getcurrentdta(dtaseg,dtaofs,error);
- IF (error<>0 ) THEN
- BEGIN
- WRITELN('unable to get current dta');
- WRITELN('program aborting');
- HALT;
- END;
- setdtaseg:=Seg(dta);
- setdtaofs:=Ofs(dta);
- setdta(setdtaseg,setdtaofs,error);
- IF (error<>0) THEN
- BEGIN
- WRITELN('Cannot reset dta');
- WRITELN('Program aborting');
- HALT;
- END;
- error:=0;
- buffer[0]:=CHR(0);
- getoption(option);
- IF (option<>8) THEN
- BEGIN
- WRITE('file mask :');
- READLN(buffer);
- WRITELN;
- END;
- IF (LENGTH(buffer)=0 ) THEN
- buffer:='????????.???';
- FOR i:=1 TO LENGTH(buffer) DO
- mask[i]:=buffer[i];
- getfirst(mask,namr,setdtaseg,setdtaofs,option,error);
- IF (error=0) THEN
- BEGIN
- IF (option <> 8) THEN
- BEGIN
- WRITELN('Directory of : ',buffer);
- WRITELN;
- END;
- IF option<>16 THEN
- WRITELN(namr)
- ELSE
- IF att=16 THEN
- WRITELN(namr);
- END
- ELSE
- IF option=8 THEN
- WRITELN('Volume label not found')
- ELSE
- WRITELN('File ''', buffer, ''' not found.');
- WHILE (error=0) DO
- BEGIN
- getnextentry(namr,setdtaseg,setdtaofs,option,error);
- IF (error=0) THEN
- BEGIN
- IF option<>16 THEN
- BEGIN
- WRITE(namr);
- IF att=16 THEN WRITELN (' <DIR> ') ELSE WRITELN
- END
- ELSE
- IF att=16 THEN
- WRITELN(namr);
- END;
- END;
- setdta(dtaseg,dtaofs,error);
- END.