home *** CD-ROM | disk | FTP | other *** search
- Program QDL ;
- {$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, 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
- Writeln('File options are:');
- Writeln;
- Writeln('[1] for standard files [default]');
- Writeln('[2] for system or hidden files');
- Writeln('[3] for volume label');
- Writeln('[4] for directories');
- Writeln('[5] for directories, hidden, system,or standard files');
- Writeln('[6] same as [5] but includes volume label');
- Writeln;
- END;
- else option := 1;
- END;
- 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 [' '..'~']));
- 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 [' '..'~']));
- 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 2.00A');
- 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
- Writeln('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;
- 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 Writeln (namr);
- END;
- SetDTA (DTAseg, DTAofs, error);
- END.
-
-
-
- t╞a&áæ