Listing of PLIST.PAS PAGE 1 1: 0 {***************************************************************************} 2: 0 {* PLIST VERSION 3.6 / 1985.3 von Ulrich Kern *} 3: 0 {***************************************************************************} 4: 0 5: 0 PROGRAM PLIST; {verbesserte Version von TLIST} 6: 0 {$V-} {Kein range-checking bei string-Uebergabe} 7: 0 8: 0 CONST PL : integer = 72; 9: 0 MT : integer = 3; 10: 0 MB : integer = 3; 11: 0 PO : integer = 0; 12: 0 CP : integer = 0; 13: 0 HE : STRING[128] = ''; 14: 0 FO : STRING[128] = ''; 15: 0 16: 0 TYPE line = STRING [128]; 17: 0 linelength = 0..128; 18: 0 filetype = (main, include); 19: 0 PufferZeiger = ^Puffer; 20: 0 Puffer = RECORD 21: 1 Eintrag : line; 22: 1 Naechster : PufferZeiger 23: 1 END; 24: 0 Bez = STRING[20]; 25: 0 26: 0 ZeilenListe = ^ZeilenEintrag; 27: 0 ZeilenEintrag = RECORD 28: 1 Nummer : integer; 29: 1 ZNext : ZeilenListe 30: 1 END; 31: 0 32: 0 IdentList = ^Bezeichner; 33: 0 Bezeichner = RECORD 34: 1 IName : Bez; 35: 1 l,r : IdentList; 36: 1 ZList : ZeilenListe 37: 1 END; 38: 0 39: 0 40: 0 VAR wort, 41: 0 zeile : line; 42: 0 MainFile, 43: 0 InclFile : text; 44: 0 Options : SET OF (Cross,LNummer,RMark,FIncl,AutoBlock,Versch); 45: 0 MainFileName, 46: 0 InclFileName : STRING[14]; 47: 0 SeitenZahl, 48: 0 SpaltenZahl, 49: 0 ZeilenZahl, 50: 0 Zeilennummer, 51: 0 PufferGroesse, 52: 0 Iter : integer; 53: 0 WarteFlag, 54: 0 KommentarFlag, 55: 0 Stringflag, 56: 0 IncludeFlag, 57: 0 AutoBlockFlag, 58: 0 ListFlag, 59: 0 PufferVoll, 60: 0 CaseFlag : boolean; Listing of PLIST.PAS PAGE 2 61: 0 Anfang, p, q : PufferZeiger; 62: 0 CrossList : IdentList; 63: 0 64: 0 {$I PLIST-1.INC} 65: 0 {$I PLIST-2.INC} 66: 0 {$I PLIST-3.INC} 67: 0 {$I PLIST-4.INC} 68: 0 {$I PLIST-5.INC} 69: 0 70: 0 {***************************************************************************} 71: 0 {* Hauptprogramm *} 72: 0 {***************************************************************************} 73: 0 74: 0 BEGIN {Hauptprogramm} 75: 1 76: 1 IncludeFlag:=false; ListFlag:=true; 77: 1 SeitenZahl:=1; StringFlag:=false; 78: 1 KommentarFlag:=false; PufferVoll:=false; 79: 1 CaseFlag:=true; Iter:=0; 80: 1 ClrScr; writeln('PLIST vers. 3.6'); writeln; 81: 1 82: 1 REPEAT 83: 2 write('Geben Sie den Programm-Namen ein oder ? oder RETURN fuer Ende: '); 84: 2 LiesFileName; 85: 2 86: 2 IF MainFileName='?' THEN BEGIN 87: 3 ClrScr; 88: 3 writeln('Um den Ausdruck des Programms zu formatieren, koennen Sie'); 89: 3 writeln('folgende Punktkommandos benuetzen: (Syntax : {.Kommando})'); 90: 3 writeln; 91: 3 writeln('Kommando Wirkung Voreinstellung'); 92: 3 writeln; 93: 3 writeln('PL nn Seitenlaenge ',PL); 94: 3 writeln('MT nn Rand oben ',MT); 95: 3 writeln('MB nn Rand unten ',MB); 96: 3 writeln('PO nn Rand links ',PO); 97: 3 writeln('CP nn Neue Seite bei weniger als n Zeilen ',CP); 98: 3 writeln('PA Neue Seite'); 99: 3 writeln('HE Kopfzeile Listing of ... PAGE #'); 100: 3 writeln('FO Fusszeile (keine)'); 101: 3 writeln('L+/L- Listing ein/aus'); 102: 3 writeln('A+/A- Autoblock ein/aus'); 103: 3 writeln; 104: 3 writeln('Alle Kommandos ausser HE und FO koennen auch in eine Zeile'); 105: 3 writeln('geschrieben werden. Beispiel {.PL 64, MT 8, PO 5}'); 106: 3 writeln('In HE und FO kann # fuer die Seitennummer angegeben werden.'); 107: 3 writeln 108: 3 END 109: 2 110: 2 ELSE IF (MainFileName<>'') AND FileExists(main) THEN BEGIN 111: 3 LiesOptions; Crosslist:=NIL; SeitenZahl:=1; 112: 3 writeln('Listing of ',MainFileName,'.'); 113: 3 HE:='Listing of '+MainFileName 114: 3 +' PAGE #'; 115: 3 ZeilenZahl:=0; 116: 3 ZeilenNummer:=1; 117: 3 WHILE NOT(EOF(MainFile)) OR PufferVoll DO BEGIN 118: 4 IF NOT PufferVoll THEN BEGIN LiesPuffer; p:=Anfang END; 119: 4 zeile:=p^.Eintrag; p:=p^.Naechster; 120: 4 IF p^.Naechster=NIL THEN ClearPuffer; Listing of PLIST.PAS PAGE 3 121: 4 IF AutoBlockFlag AND (PufferGroesse>PL-ZeilenZahl-MB-3) 122: 4 AND (PufferGroesse<=PL-MT-MB-3) THEN NeueSeite; 123: 4 PufferGroesse:=0; 124: 4 IF NOT SonderZeile(zeile) THEN BEGIN 125: 5 IF ZeilenZahl MOD PL = 0 THEN Seitenkopf; 126: 5 IF PL - ZeilenZahl = MB + 3 THEN NeueSeite; 127: 5 IF ListFlag THEN BEGIN drucke(zeile); ZeilenZahl:=ZeilenZahl+1 END; 128: 5 ZeilenNummer:=ZeilenNummer+1; 129: 5 END {if not SonderZeile} 130: 4 END; {while} IF cross IN Options THEN SchreibCrossListe; 131: 3 close(MainFile); 132: 3 END 133: 2 134: 2 ELSE IF MainFileName<>'' THEN writeln('File exisiert nicht.') 135: 2 136: 2 UNTIL MainFileName=''; close(LST); 137: 1 END. Crossreferenz-Liste: Anfang : 61 118 AutoBlock : 44 AutoBlockFlag : 57 121 Bez : 24 34 Bezeichner : 33 CaseFlag : 60 79 ClearPuffer : 120 CP : 12 97 Cross : 44 130 CrossList : 62 111 drucke : 127 Eintrag : 21 FileExists : 110 filetype : 18 FIncl : 44 FO : 14 HE : 13 113 IdentList : 32 35 62 IName : 34 InclFile : 43 InclFileName : 46 include : 18 IncludeFlag : 56 76 Iter : 52 79 KommentarFlag : 54 78 l : 35 LiesFileName : 84 LiesOptions : 111 LiesPuffer : 118 line : 16 21 41 linelength : 17 ListFlag : 58 76 127 LNummer : 44 LST : 136 main : 18 110 MainFile : 42 117 131 Listing of PLIST.PAS PAGE 4 MainFileName : 45 86 110 112 113 134 136 MB : 10 95 121 122 126 MT : 9 94 122 Naechster : 22 NeueSeite : 122 126 Nummer : 28 Options : 44 130 p : 61 118 119 PL : 8 93 121 122 125 126 PLIST : 5 PO : 11 96 Puffer : 20 PufferGroesse : 51 121 122 123 PufferVoll : 59 78 117 118 PufferZeiger : 19 22 61 p^.Eintrag : 119 p^.Naechster : 119 120 q : 61 r : 35 RMark : 44 SchreibCrossListe : 130 Seitenkopf : 125 SeitenZahl : 47 77 111 SonderZeile : 124 SpaltenZahl : 48 Stringflag : 55 77 text : 43 Versch : 44 WarteFlag : 53 wort : 40 zeile : 41 119 124 127 ZeilenEintrag : 27 ZeilenListe : 26 29 36 Zeilennummer : 50 116 128 ZeilenZahl : 49 115 121 125 126 127 ZList : 36 ZNext : 29 ^Bezeichner : 32 ^Puffer : 19 ^ZeilenEintrag : 26