home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* TREE.PAS *)
- (* Sichtbarmachen von Baumstrukturen *)
- (* (c) 1989 by Manfred Jahn & TOOLBOX *)
- (* ------------------------------------------------------ *)
- PROGRAM Tree;
- USES Crt, Dos;
-
- CONST levels = 12;
- maxdirs = 255;
- TYPE
- string66 = STRING[66];
- string12 = STRING[12];
- entryrec = RECORD
- pathname : string66;
- lastname : string12;
- leader : string12;
- END;
- entryarray = ARRAY[1..maxdirs] OF entryrec;
-
- VAR
- lw : STRING[3];
- elements : 1..maxdirs;
- T : entryarray;
-
- PROCEDURE Initial(VAR x1 : entryrec);
- BEGIN
- x1.pathname := lw;
- x1.lastname := lw;
- x1.leader := '';
- END;
-
- PROCEDURE GetDirs(path : STRING; prefix : string12;
- VAR X : entryarray);
- VAR dir: searchrec;
- BEGIN
- FindFirst(path + '*.*', directory, dir);
- WHILE DosError = 0 DO BEGIN
- IF (dir.attr AND directory) > 0 THEN BEGIN
- IF dir.name[1]<>'.' THEN BEGIN
- Inc(elements);
- X[elements].pathname := path + dir.name;
- X[elements].lastname := dir.name;
- X[elements].leader := prefix + 't';
- GetDirs(path + dir.name + '\', prefix + 'b', X);
- END;
- END;
- FindNext(dir);
- END;
- END; { GetDirs }
-
- PROCEDURE ArrangeDirs(VAR X : entryarray);
- VAR a, i : INTEGER;
- bi, tl : BOOLEAN;
- c : CHAR;
- BEGIN
- FOR a := 1 TO elements DO
- FOR i := 1 TO 13 - Length(X[a].leader) DO
- X[a].leader := X[a].leader + '0';
- bi := FALSE; tl := TRUE;
- IF elements > 1 THEN
- FOR i := 1 TO 12 DO BEGIN
- a := elements + 1;
- REPEAT
- Dec(a);
- c := X[a].leader[i];
- IF bi THEN
- IF c='b' THEN c := 'i';
- IF tl AND (c = 't') THEN BEGIN
- c := 'l'; bi := TRUE; tl := FALSE;
- END;
- IF c = '0' THEN BEGIN
- bi := FALSE; tl := TRUE;
- END;
- X[a].leader[i] := c;
- UNTIL a = 1;
- END;
- END; { ArrangeDirs }
-
- PROCEDURE ListDirs(VAR X: entryarray);
- VAR a, i: INTEGER;
- BEGIN
- WriteLn(elements, ' Einträge gefunden.');
- WriteLn;
- WriteLn('Katalogbaum Pfadnamen ');
- WriteLn('----------------------------------------');
- FOR a := 1 TO elements DO BEGIN
- FOR i:=1 TO levels DO
- CASE X[a].leader[i] OF
- 'b': Write(' '); { = 2 Blanks }
- 'i': Write('│ '); { = #179, Blank }
- 't': Write('├─'); { = #195, #196 }
- 'l': Write('└─'); { = #192, #196 }
- END;
- Write(X[a].lastname);
- GotoXY(30, WhereY);
- WriteLn(X[a].pathname);
- END;
- END; { ListDirs }
-
- BEGIN
- ClrScr;
- Write('Welches Laufwerk? - '); ReadLn(lw);
- lw := UpCase(lw[1]) + ':\';
- elements := 1;
- initial(T[1]);
- getdirs(lw, '', T);
- arrangedirs(T);
- listdirs(T);
- END.
- (* ------------------------------------------------------ *)
- (* Ende von TREE.PAS *)