home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* DBTREE.PAS *)
- (* Darstellung der UP-Verzweigungen in dBASE *)
- (* (c) 1991 Lutz Froehlich & TOOLBOX *)
- (* ------------------------------------------------------ *)
- {$A+,B-,D+,E+,F-,I+,L+,N-,O-,R+,S+,V-}
- {$M 16384,0,655360}
-
- PROGRAM DBTree;
-
- USES Crt, Printer;
-
- CONST
- maxg = 25; { Maximale Anzahl von Unterprogrammen }
-
- TYPE
- Zeiger = ^Knoten;
- Knoten = RECORD
- prn : STRING [8];
- next : ARRAY [1..maxg] OF Zeiger;
- END;
-
- VAR
- aus : CHAR;
- wuna : STRING[8];
- pfad, dname : STRING[66];
- rfile, ausei : TEXT;
- puffer : ARRAY [1..16384] OF CHAR;
- root : Zeiger;
- erueck : STRING [80];
- pau, pau1 : BYTE;
- rootb : BOOLEAN;
-
- PROCEDURE baum(VAR kn : Zeiger);
- { Rekursive Prozedur zum Durchsuchen der Programme }
- VAR
- oname : STRING [66];
- zeile : STRING;
- h : Zeiger;
- i, j, k : INTEGER;
- zlen : BYTE ABSOLUTE zeile;
- BEGIN
- oname := pfad + kn^.prn + '.PRG';
- Assign(rfile, oname);
- i := 1;
- {$I-}
- Reset(rfile);
- {$I+}
- IF IOResult <> 0 THEN
- kn^.prn := '????????'
- ELSE BEGIN
- WHILE NOT EoF(rfile) DO BEGIN
- ReadLn(rfile,zeile);
- FOR j := 1 TO zlen DO
- zeile[j] := UpCase(zeile[j]);
- j := 1;
- WHILE (j < zlen) AND (zeile[j] = ' ') DO j := j + 1;
- IF (Copy(zeile, j, 3) = 'DO ') AND
- (Copy(zeile,j+3, 4) <> 'WHIL') AND
- (Copy(zeile,j+3,4) <> 'CASE') AND
- (Copy(zeile,j+3,1) <> '&') THEN BEGIN
- New(h);
- kn^.next[i] := h;
- k := j+3;
- WHILE (k < j+11) AND (zeile[k] <> ' ') DO
- k := k + 1;
- k := k - j - 3;
- h^.prn := Copy(zeile, j+3, k);
- i := i + 1;
- END;
- END;
- Close(rfile);
- END;
- IF i > 1 THEN
- FOR j := 1 TO i-1 DO baum(kn^.next[j]);
- FOR j := i TO maxg DO kn^.next[j] := NIL;
- END;
-
- PROCEDURE druck(VAR dr : Zeiger; VAR weg : BOOLEAN);
- { Rekursive Prozedur zum Darstellen der Baumstruktur }
- VAR
- i : INTEGER;
- h : Zeiger;
- we : BOOLEAN;
- BEGIN
- i := 1;
- erueck := erueck + ' '; (* 4 blanks *)
- IF weg THEN
- erueck := erueck + '└'
- ELSE
- erueck := erueck + '├';
- WriteLn(ausei, erueck + '───' + dr^.prn + '.PRG');
- pau := pau - 1;
- IF pau = 0 THEN BEGIN
- ReadLn;
- pau := pau1;
- END;
- erueck := Copy(erueck, 1, Length(erueck) - 1);
- IF weg THEN
- erueck := erueck + ' '
- ELSE
- erueck := erueck + '│';
- WHILE dr^.next[i] <> NIL DO BEGIN
- h := dr^.next[i];
- we := (dr^.next[i+1] = NIL);
- druck(h, we);
- i := i + 1;
- END;
- erueck := Copy(erueck, 1, Length(erueck) - 5);
- END;
-
- BEGIN
- WriteLn;
- WriteLn('Darstellung der UP-Verzweigungen in dBase');
- WriteLn('-----------------------------------------');
- WriteLn;
- Write('Ausgabe auf (D)rucker oder (B)ildschirm ? : ');
- ReadLn(aus);
- Write('Laufwerk und Pfad der Programme : ');
- ReadLn(pfad);
- Write('Name des Wurzelprogramms (ohne .PRG) : ');
- ReadLn(wuna);
- dname := pfad + wuna + '.PRG';
- Assign(rfile, dname);
- {$I-}
- Reset(rfile);
- {$I+}
- IF IOResult <> 0 THEN BEGIN
- WriteLn('Datei ', dname, ' nicht gefunden!');
- Halt(1);
- END ELSE
- Close(rfile);
- New(root);
- root^.prn := wuna;
- baum(root);
- erueck := '';
- IF UpCase(aus) = 'D' THEN BEGIN
- pau1 := 55;
- Assign(ausei, 'PRN');
- END ELSE BEGIN
- pau1 := 22;
- Assign(ausei, 'CON');
- END;
- Rewrite(ausei);
- rootb := TRUE;
- pau := pau1;
- druck(root, rootb);
- Close(ausei);
- END.
- (* ------------------------------------------------------ *)
- (* Ende von DBTREE.PAS *)