home *** CD-ROM | disk | FTP | other *** search
- {$R-,S-,I-,D-,T-,F-,V+,B+,N-,L+ }
- {$M 65000,0,0}
-
- program FList; { program to list all the files on a disk to standard output }
- { FList 1.0 }
-
- { this is a very simple, single purpose utility }
- { the source code is provided so you can change }
- { it if you want it to work differently, or }
- { discover a bug }
-
- uses Dos;
-
- type
- PathName = string[64];
-
- var
- StartDir : PathName;
- DiskDrive : char;
- DriveString, Param1 : PathName;
- L, Level, PCount : Integer;
-
- function AddBack(FDir : PathName) : PathName;
- begin
- if FDir[Length(FDir)] = '\' then
- AddBack := FDir
- else
- AddBack := FDir+'\';
- end;
-
- procedure SetDta(var Frec);
- var
- regs : Registers;
- begin
- regs.AH := $1A;
- regs.DX := Ofs(Frec);
- regs.DS := Seg(Frec);
- Intr($21, regs);
- end;
-
- procedure TourDir(FDir : PathName);
- var
- Frec : SearchRec;
- begin
- FindFirst(AddBack(FDir)+'*.*', AnyFile, Frec);
- while DosError = 0 do begin
- with Frec do
- if Name[1] <> '.' then begin
- WriteLn(AddBack(FDir)+Name);
- Inc(Level);
- TourDir(AddBack(FDir)+Name);
- Dec(Level);
- SetDta(Frec);
- end;
- FindNext(Frec);
- end;
- end;
-
- begin
- PCount := ParamCount;
- Param1 := ParamStr(1);
- if (PCount = 1)
- and (pos('?', Param1) > 0) then begin
- writeln;
- writeln('FList version 1.0 6-17-88');
- writeln;
- writeln('Syntax:');
- writeln(' FList [drive] [> list redirection]');
- writeln;
- writeln('Examples:');
- writeln(' flist');
- writeln(' flist d:');
- writeln(' flist c: > a:\files.c');
- writeln(' flist > a:\files.c');
- writeln;
- halt(0);
- end;
- if PCount = 0 then
- GetDir(0, DriveString)
- else
- DriveString := Param1;
- DiskDrive := UpCase(DriveString[1]);
- Level := 0;
- if PCount = 0 then
- TourDir('\')
- else
- TourDir(DiskDrive+':'+'\');
- end.