home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* DIRUNIT.PAS *)
- (* (c) 1989 Achim Bergmeister & TOOLBOX *)
- (* ------------------------------------------------------ *)
- UNIT DirUnit;
-
- INTERFACE
-
- USES Crt, Dos;
-
- TYPE
- s12 = STRING[12];
- s30 = STRING[30];
- zeilen = ARRAY [1..200] OF s30;
-
- PROCEDURE Dir(VAR zeile : zeilen; VAR zaehler : INTEGER;
- VAR summe : LONGINT; msk : s12);
-
- IMPLEMENTATION
-
- PROCEDURE Dir(VAR zeile : zeilen; VAR zaehler : INTEGER;
- VAR summe : LONGINT; msk : s12);
- VAR
- srec : SearchRec;
- nix : BOOLEAN;
- i : INTEGER;
- pfad : STRING[80];
-
- PROCEDURE QS(links, rechts : INTEGER; VAR dat : zeilen);
- VAR
- i, j : INTEGER; x, y : s30;
- BEGIN
- i := links; j := rechts;
- x := dat[(links + rechts) DIV 2];
- REPEAT
- WHILE dat[i] < x DO Inc(i);
- WHILE x < dat[j] DO Dec(j);
- IF i <= j THEN BEGIN
- y := dat[i]; dat[i] := dat[j];
- dat[j] := y; Inc(i); Dec(j);
- END;
- UNTIL i > j;
- IF links < j THEN qs(links, j, dat);
- IF links < rechts THEN qs(i, rechts, dat);
- END;
-
- PROCEDURE Einlesen(eintrag : SearchRec; x : INTEGER);
- VAR
- dt : DateTime;
- d1, d2, d3 : STRING[2];
- ppos, i : INTEGER;
- suffix : STRING[3];
- dummy : STRING[7];
- BEGIN
- WITH eintrag DO BEGIN
- ppos := Pos('.', name);
- IF ppos <> 0 THEN BEGIN
- suffix := copy(name, ppos+1, Length(name) - ppos);
- Delete(name, ppos, 1+Length(name)-ppos);
- END ELSE suffix := '';
- zeile[x] := name;
- FOR i := Length(name) TO 7 DO
- zeile[x] := zeile[x] + ' ';
- zeile[x] := zeile[x] + '.' + suffix;
- FOR i := Length(suffix) TO 3 DO
- zeile[x] := zeile[x] + ' ';
- IF (attr AND directory) <> 0 THEN
- zeile[x] := ' ' + zeile[x] + ' <DIR> '
- ELSE BEGIN
- summe := summe + size;
- str(size, dummy);
- WHILE Length(dummy) < 7 DO dummy := ' ' + dummy;
- zeile[x] := zeile[x] + dummy;
- UnpackTime(time, dt);
- WITH dt DO BEGIN
- Str(day, d1);
- IF Length(d1) < 2 THEN d1 := '0' + d1;
- Str(month, d2);
- IF Length(d2) < 2 THEN d2 := '0' + d2;
- Str(year MOD 100, d3);
- END;
- zeile[x] := zeile[x] + ' ' + d1 + '.' + d2 +
- '.' + d3;
- END;
- END;
- END;
-
- BEGIN { Dir }
- nix := TRUE; zaehler := 1; summe := 0;
- FOR i := 1 TO 200 DO zeile[i] := '';
- FindFirst(msk, $31, srec);
- WHILE DosError = 0 DO BEGIN
- einlesen(srec, zaehler);
- FindNext(srec);
- nix := FALSE;
- Inc(zaehler);
- END;
- IF nix THEN zeile[1] := 'Leeres Verzeichnis';
- qs(1, zaehler, zeile);
- IF msk = '*.*' THEN BEGIN
- GetDir(0, pfad);
- IF Length(pfad) = 3 THEN BEGIN
- FOR i := 2 TO zaehler DO zeile[i-1] := zeile[i];
- Dec(zaehler, 1);
- END ELSE BEGIN
- FOR i := 3 TO zaehler DO zeile[i-2] := zeile[i];
- Dec(zaehler, 2);
- END;
- END;
- FOR i := 1 TO zaehler DO
- IF Copy(zeile[i], 1, 1) = ' ' THEN
- zeile[i] := Copy(zeile[i],2,Length(zeile[i])-1)+' ';
- END;
-
- END.
- (* ------------------------------------------------------ *)
- (* Ende von DIRUNIT.PAS *)