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