home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* DBBAUM.PAS *)
- (* (c) 1990 Michael Winter & TOOLBOX *)
- (* ------------------------------------------------------ *)
- PROGRAM DBBaum;
-
- {$M 65520,0,655360, $S-, $R-}
-
- USES Crt, Dos;
-
- CONST
- zeilmax = 53; { max. Zeilenanzahl auf Ausdruck }
- tab = 65; { Position des Kommentarausgedrus }
- maxanz = 20; { max. aufrufbare Unterprogramme }
-
-
- VAR
- abtiefe, laenge, seiten, zeilen, spaces, y : INTEGER;
- haupt : STRING;
- ok : BOOLEAN;
- baumzeile : TEXT;
- j, m, t, w : WORD;
-
- PROCEDURE Kopf;
- VAR
- dir : STRING;
- BEGIN
- GetDir(0, dir);
- IF seiten > 1 THEN WriteLn(baumzeile, chr(12));
- zeilen := 0;
- WriteLn(baumzeile, chr(18)); { Schmalschrift aus }
- WriteLn(baumzeile, 'DBBAUM / ', t, '.', m, '.', j,
- ' Programm-, Unterprogrammstruktur ');
- Write (baumzeile, ' Michael Winter & TOOLBOX ',
- ' ');
- WriteLn(baumzeile, ' Seite: ', seiten:3);
- WriteLn(baumzeile, '---------------------------------',
- '---------------------------------',
- '---------------------');
- Inc(seiten);
- WriteLn(baumzeile, ' ');
- WriteLn(baumzeile, dir);
- WriteLn(baumzeile, chr(15)); { Schmalschrift ein }
- END;
-
- PROCEDURE MakeTree(VAR prog : STRING);
- VAR
- zeile, datum : STRING;
- gefunden : ARRAY [0..maxanz] OF STRING;
- datei : text;
- anzahl,
- zaehler,
- position, x : INTEGER;
-
- PROCEDURE QuickSort(l, r : INTEGER);
- VAR
- i, k : INTEGER;
- a, b : STRING;
- BEGIN
- i := l; k := r; a := gefunden[(l + r) DIV 2];
- REPEAT
- WHILE gefunden[i] < a DO i := i + 1;
- WHILE a < gefunden[k] DO k := k - 1;
- IF i <= k THEN BEGIN
- b := gefunden[i];
- gefunden[i] := gefunden[k];
- gefunden[k] := b;
- i := i + 1; k := k - 1;
- END;
- UNTIL i > k;
- IF l < k THEN QuickSort(l, k);
- IF i < r THEN QuickSort(i, r);
- END;
-
- BEGIN
- laenge := 0;
- spaces := spaces + 3;
- GotoXY(2,24);
- Write('Stufe : ', spaces DIV 3:3, ' ',
- prog,' ');
- GotoXY(60,24); Write('lesen... ');
- FOR x := 1 TO spaces DO Write(baumzeile, chr(32));
- Write(baumzeile, Copy(prog, 1, Length(prog) - 4), ' ');
- Inc(zeilen);
- anzahl := 0;
- zaehler := 0;
- FOR x := 0 TO maxanz DO gefunden[x] := '';
- Assign(datei, prog);
- Reset(datei);
- WHILE NOT EOF(datei) OR (zeile = 'RETURN') DO BEGIN
- Inc(zaehler);
- ReadLn(datei, zeile);
- IF (Pos('DO ', zeile) > 0) OR
- (Pos('do ', zeile) > 0) OR
- (Pos('dO ', zeile) > 0) OR
- (Pos('Do ', zeile) > 0) THEN BEGIN
- FOR x := 1 TO Length(zeile) DO
- zeile[x] := UpCase(zeile[x]);
- END;
- IF zaehler = 2 THEN BEGIN
- datum := zeile;
- laenge := laenge + Length(zeile);
- END;
- IF zaehler = 5 THEN BEGIN
- laenge := Length(zeile);
- FOR x := 1 TO tab - spaces - Length(prog) DO
- Write(baumzeile, '.');
- Write(baumzeile, zeile, ' ', datum, ' ');
- END;
- IF zaehler = 8 THEN BEGIN
- laenge := laenge + Length(zeile);
- IF laenge + tab > 158 THEN
- zeile := Copy(zeile, 1, 158 - tab);
- WriteLn(baumzeile, zeile);
- END;
- IF (Pos('DO ', zeile) > 0) AND
- (Pos('CASE', zeile) = 0) AND
- (Pos('WHILE', zeile) = 0) AND
- (Pos('ENDDO', zeile) = 0) THEN BEGIN
- position := Pos('DO ', zeile) + 3;
- gefunden[anzahl] := Copy(zeile, position,
- Length(zeile)-position+1) +
- '.PRG';
- Inc(anzahl);
- IF anzahl > 30 THEN BEGIN
- ClrScr;
- WriteLn('Zu viele Unterprogramme werden von ',
- prog, ' aufgerufen !');
- Halt(5);
- END;
- END;
- END;
- IF zeilen = zeilmax THEN Kopf;
- Close(datei);
- GotoXY(60,24); Write('sortieren... ');
- IF (anzahl > 0) AND (spaces DIV 3 > abtiefe) THEN
- QuickSort(0, anzahl - 1);
- IF anzahl > 0 THEN
- FOR x := 0 TO anzahl - 1 DO
- IF gefunden[x] <> gefunden[x+1] THEN
- MakeTree(gefunden[x]);
- spaces := spaces - 3;
- END;
-
- BEGIN
- GetDate(j, m, t, w);
- ok := FALSE;
- spaces := -3;
- zeilen := 0;
- seiten := 1;
- REPEAT
- ClrScr;
- GotoXY(15,15);
- WriteLn('Ausgabedatei => BAUM.DOK');
- GotoXY(20,5);
- WriteLn('Programmaufbaubaum für dBASE-III-Programme');
- GotoXy(2,10);
- Write('Geben Sie bitte den Namen des ',
- 'Hauptprogramms ein : ');
- ReadLn(haupt);
- IF (haupt = '') OR
- (haupt = 'ENDE') OR
- (haupt = 'ende') THEN BEGIN
- ClrScr;
- Halt(0);
- END;
- FOR y := 1 TO Length(haupt) DO
- haupt[y] := UpCase(haupt[y]);
- IF (Length(haupt) <= 12) AND
- (Pos('PRG', haupt) = Length(haupt) - 2) AND
- (Pos('.', haupt) <> 0) THEN
- ok:=TRUE;
- UNTIL ok;
- GotoXY(5,19);
- Write(' Ab welcher Stufe den Baum sortieren : ');
- ReadLn(abtiefe);
- Assign(baumzeile, 'BAUM.DOK');
- Rewrite(baumzeile);
- Kopf;
- MakeTree(haupt);
- WriteLn(baumzeile, Chr(18), Chr(12));
- { Schmalschrift aus, Seitenvorschub }
- Close(baumzeile);
- ClrScr;
- END.
- (* ------------------------------------------------------ *)
- (* Ende von DBBAUM.PAS *)