(****************************************************************************) (* PDYNAM 2.0 *) (* Programm zur Analyse der dynamischen Struktur von Pascal-Quelltexten *) (* Version vom Dezember 1986 (c) B. Suckfull und U.K. *) (* fuer Turbo-Pascal ab Version 2.0 *) (****************************************************************************) PROGRAM PDYNAM; CONST FileFettEin = ^B; (* Wordstar *) FileFettAus = ^B; (* Wordstar *) MaxStack = 20; (* maximale StackTiefe *) MaxVersch = 20; (* maximale Verschachtelungstiefe *) TYPE str127 = STRING[127]; (* maximale Bezeichnerlaenge *) RefListe = ^LEintrag; LEintrag = RECORD naechster : RefListe; Name : str127 END; Baum = ^BaumEintrag; BaumEintrag = RECORD links, rechts : Baum; von : RefListe; Name : str127 END; CheckedWords = (pBezeichner,pBEGIN,pCASE,pEND,pEXTERNAL,pFORWARD, pFUNCTION,pPROCEDURE,pPROGRAM,pRECORD,pREPEAT,pUNTIL); ProgStack = RECORD Ptr : integer; Stack : ARRAY[1..MaxStack] OF CheckedWords END; CONST BezNamen : ARRAY[CheckedWords] OF STRING[9] = ('','BEGIN','CASE','END','EXTERNAL','FORWARD', 'FUNCTION','PROCEDURE','PROGRAM','RECORD','REPEAT','UNTIL'); VAR Main, ZielDatei : text; V, Zeile, Seite, MT, MB, PO, PL : integer; InclFlag, WarteFlag : boolean; MainName, InclName, QuellName, ZielName : STRING[20]; LokalListe : Baum; AusgabeDevice : (Bildschirm,Drucker,Datei); ProzListe : ARRAY[0..MaxVersch] OF RECORD Name : str127; Art : CheckedWords; Routinen : Baum END; (*$I PDYNAM-1.INC *) (*$I PDYNAM-2.INC *) (*$I PDYNAM-3.INC *) BEGIN (* Hauptprogramm als Endlosschleife *) REPEAT LokalListe:=NIL; Eingaben; Analyse; close(Main); IF LokalListe<>NIL THEN BEGIN print('Liste der ueberfluessig-nichtlokalen Prozeduren:'); SchreibListe(LokalListe); writeln(ZielDatei) END; close(ZielDatei); LoeschBaum(LokalListe,false); write('FERTIG! ':70); readln UNTIL false END. (* PDYNAM *)