[Back to DIRS SWAG index]  [Back to Main SWAG index]  [Original]

{$M 4000, 0, 0}
program Directory_Of_Executables;
uses DOS, CRT;

var DirInfo : SearchRec;
    Files : Array[0..255] of String[40];
    Size, Date, Time : String[10];
    StrVar, SV : String;
    Index, last : Integer;
    TotalSize : LongInt;
    done : boolean;
    Dir : DirStr;
    Path : String;

function LeadingZero(w : Word) : String;
var
  s : String;
begin
  Str(w:0,s);
  if Length(s) = 1 then
    s := '0' + s;
  LeadingZero := s;
end;
function Commas (S : String) : String;
var Num, Cnt, e : Integer;
begin
  Val(S, Num, e);
  If (e <> 0) or (Length(S) <= 3) then exit;
  Cnt := Length(S);
  For e := Cnt downto 3 do
    If (e / 3) = (e div 3) then Insert(',', S, e);
  COmmas := S;
end;

function RightJustify(S : String; N : Integer) : String;
var cnt : Integer;
begin
  While Length(S) < N do S := ' ' + S;
  RightJustify := S;
end;

function ExpandFName (s: String) : String;
begin
     while Pos('.', s) < 9 do insert(' ', s, Pos('.', s));
     s[9] := ' ';
     ExpandFName := s;
end;

begin
     If ParamCount > 1 then Path := ParamStr(1) else Path := '';
     last := 0; totalsize := 0; index := 1;
     FindFirst(Path + '*.EXE', Archive, DirInfo);
     While DosError = 0 do
       begin
            Str(DirInfo.Size, Size); {Size := Commas(Size);}
            Files[Index] := ExpandFName(DirInfo.Name);
            While Length(Files[Index]) < 22
                  do Files[Index] := Files[Index] + ' ';
            Files[Index] := Files[Index] + RightJustify(Size, 8) + '  ';
            Files[Index] := Files[Index] + Date + '  ' + Time;
            inc(Index);
            Totalsize := TotalSize + DirInfo.Size;
            Inc(last);
            FindNext(DirInfo);
       end;
     FindFirst(Path + '*.BAT', Archive, DirInfo);
     While DosError = 0 do
       begin
            Str(DirInfo.Size, Size);
            Files[Index] := ExpandFName(DirInfo.Name);
            While Length(Files[Index]) < 22
                  do Files[Index] := Files[Index] + ' ';
            Files[Index] := Files[Index] +RightJustify(Size, 8) + '  ';
            Files[Index] := Files[Index] + Date + '  ' + Time;
            inc(Index);
            Totalsize := TotalSize + DirInfo.Size;
            Inc(last);
            FindNext(DirInfo);
       end;
     FindFirst(Path + '*.COM', Archive, DirInfo);
     While DosError = 0 do
       begin
            Str(DirInfo.Size, Size);
            Files[Index] := ExpandFName(DirInfo.Name);
            While Length(Files[Index]) < 22
                  do Files[Index] := Files[Index] + ' ';
            Files[Index] := Files[Index] + RightJustify(Size, 8) + '  ';
            Files[Index] := Files[Index] + Date + '  ' + Time;
            inc(Index);
            Totalsize := TotalSize + DirInfo.Size;
            Inc(last);
            FindNext(DirInfo);
       end;
     repeat
       done := True;
       For Index := 1 to last - 1 do
         if files[index] > files[index + 1] then
           begin
                files[0] := files[index]; files[index] := files[index + 1];
                files[index + 1] := files[0]; Done := False;
           end;
     until done;
     writeln;
     for index := 1 to last do
       begin
         writeln(files[index]);
         if (index / 23) = Trunc(index /  23) then
            begin
                 WriteLn('Press any key to continue...');
                 if readkey = #0 then readkey;
            end;
       end;
     writeln;
     WriteLn('Directory of Executables ', Path);
     Str(last, StrVar);
     While Length(StrVar) < 9 do StrVar := ' ' + StrVar;
     StrVar := StrVar + ' file(s)  ';
     Str(TotalSize, SV);
     StrVar := StrVar + SV;
     While Length(StrVar) < 32 do Insert(' ', StrVar, 19);
     StrVar := StrVar + ' used';
     WriteLn(StrVar);
     Str(DiskFree(0), StrVar);
     While Length(StrVar) < 32 do StrVar := ' ' + StrVar;
     WriteLn(StrVar, ' bytes free');
     Str(DiskSize(0), StrVar);
     While Length(StrVar) < 32 do StrVar := ' ' + StrVar;
     WriteLn(StrVar, ' bytes capacity');
end.

[Back to DIRS SWAG index]  [Back to Main SWAG index]  [Original]