1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
|
(* ------------------- VERSION 66 vom 06.03.86 -------------------- *)
PACKET texter errors and common DEFINES
only command line,
skip input,
char pos move,
begin of this char,
number chars,
display and pause,
report text processing error,
report text processing warning:
(* Programm zur zentralen Haltung aller Fehlermeldungen der Textkosmetik
Autor: Rainer Hahn
Stand: 1.7.1 Febr. 1984
1.7.3 Juli "
1.7.4 Febr. 1985
*)
LET escape = ""27"";
TEXT VAR fehlerdummy;
BOOL PROC only command line (TEXT CONST zeile):
INT VAR anfang, ende;
LET kommando zeichen = "#";
IF pos (zeile, kommando zeichen) = 1
THEN ende := pos (zeile, kommando zeichen, 2);
IF ende > 0
THEN zaehle kommandos durch;
LEAVE only command line WITH richtiges kommandoende
FI
FI;
FALSE.
zaehle kommandos durch:
WHILE ende + 1 = pos (zeile, kommando zeichen, ende +1) REP
anfang := pos (zeile, kommando zeichen, ende + 1);
ende := pos (zeile, kommando zeichen, anfang + 1)
END REP.
richtiges kommandoende:
ende > 0 AND
(ende = length (zeile) OR (ende = length (zeile) - 1 AND absatzzeile)).
absatzzeile:
(zeile SUB length (zeile)) = " ".
END PROC only command line;
PROC skip input:
REP
TEXT CONST zeichen :: incharety;
IF zeichen = escape
THEN errorstop ("Abbruch durch ESC")
FI
UNTIL zeichen = "" END REP
END PROC skip input;
PROC char pos move (TEXT CONST ein text, INT VAR zpos, INT CONST richtung):
zpos INCR richtung;
IF within kanji (ein text, zpos)
THEN zpos INCR richtung
FI
END PROC char pos move;
PROC begin of this char (TEXT CONST ein text, INT VAR zpos):
IF zpos < 1 OR zpos > length (ein text)
THEN display and pause (7)
ELSE suche zeichenposition
FI.
suche zeichenposition:
IF within kanji (ein text, zpos)
THEN zpos DECR 1
FI.
END PROC begin of this char;
INT PROC number chars (TEXT CONST ein text, INT CONST von pos, bis pos):
INT VAR index :: von pos, anz :: 0;
WHILE index <= bis pos REP
IF index > length (ein text) OR index > bis pos
THEN display and pause (5); LEAVE number chars WITH 0
FI;
IF is kanji esc (ein text SUB index)
THEN index INCR 2
ELSE index INCR 1
FI;
anz INCR 1
END REP;
anz
END PROC number chars;
PROC display and pause (INT CONST nr):
line ; put ("LINER ERROR"); put (nr); pause
END PROC display and pause;
PROC report text processing error (INT CONST error nr,
INT CONST line nr,
TEXT VAR message,
TEXT CONST addition):
einfache meldung aufbauen;
meldung in fehlerdatei ausgeben.
einfache meldung aufbauen:
message := "FEHLER Zeile ";
message CAT text (line nr);
message CAT ": ";
message CAT simple message;
message CAT " ";
message CAT addition.
meldung in fehlerdatei ausgeben:
note (message);
note line;
fehlerdummy := " >>> ";
fehlerdummy CAT zusatz;
note (fehlerdummy);
note line.
simple message:
SELECT error nr OF
CASE 1: "Unbekannter Schriftyp ignoriert:"
CASE 2: "#-Zeichen fehlt"
CASE 3: "foot in Fußnote (ignoriert)"
CASE 4: "cm-Angabe fehlt (REAL) (ignoriert):"
CASE 5: "INT-Parameter erwartet (ignoriert):"
CASE 6: "(versuchte) Trennung in Macro-Text"
CASE 7: "ie-Anweisung fehlt bei Seitenende"
CASE 8: "Unbekannte Anweisung (ignoriert):"
CASE 9: "Nicht kompilierbares Programm:"
CASE 10: "Einrückung (Leerzeichen am Zeilenanfang) zu groß"
CASE 11: "Anweisung hier nicht erlaubt (ignoriert):"
CASE 12: "Tabellen-Position liegt innerhalb eines b pos:"
CASE 13: "free-Wert > Textteil der Seite (ignoriert)"
CASE 14: "Mehr als 1 Zeichen in pagenr (ignoriert)"
CASE 15: "Macro innerhalb eines Macros definiert (ignoriert):"
CASE 16: "Mehr als drei Seitenzeichen"
CASE 17: "Mehr als zehn Zeilen im Index"
CASE 18: "Index Parameter inkorrekt (ignoriert): "
CASE 19: "Hinter Anweisung darf nichts mehr stehen (ignoriert):"
CASE 20: "Doppelter Index ignoriert:"
CASE 21: "ib(..) fehlt:"
CASE 22: "Inkorrekte Anweisung:"
CASE 23: "2 Byte Zeichen ohne zweites Zeichen am Zeilenende"
CASE 24: "free-Wert größer Seitenlänge (ignoriert):"
CASE 25: "Seitenende in head, bottom oder foot-Bereich plaziert"
CASE 26: "Anzahl columns < 2 ignoriert"
CASE 27: "INT-Parameter <= 0 ignoriert:"
CASE 28: "Kein Textzeichen vor oder hinter b"
CASE 29: "Nochmaliges columns ohne columns end (ignoriert)"
CASE 30: "set count-Parameter inkorrekt (ignoriert):"
CASE 31: "end ohne vorangehendes head, bottom oder foot"
CASE 32: "Max. Anzahl von Tabellen-Positionen überschritten"
CASE 33: "Macro-Aufruf oder -Definition in einem Macro (ignoriert):"
CASE 34: "counter nicht initialisiert (ignoriert):"
CASE 35: "store counter Kennung bereits vorhanden (ignoriert):"
CASE 36: "Spaltenbreite > limit"
CASE 37: "Zentimeter-Angabe in limit = 0 (ignoriert)"
CASE 38: "Zentimeter-Angabe inkorrekt (ignoriert):"
CASE 39: "Zentimeter-Angabe > als eingestelltes limit (ignoriert):"
CASE 40: "Makro-Definition (ignoriert):"
CASE 41: "Nochmaliges table ohne table end (ignoriert)"
CASE 42: "pos bereits hier gesetzt (ignoriert):"
CASE 43: "Druckposition (pos) nicht vorhanden:"
CASE 44: "Text breiter als Spalte bei:"
CASE 45: "rpos überschreibt vorherige Spalte bei:"
CASE 46: "cpos überschreibt vorherige Spalte bei:"
CASE 47: "dpos überschreibt vorherige Spalte bei:"
CASE 48: "Geblockter Text breiter als Spalte bei:"
CASE 49: "table end fehlt"
CASE 50: "Zentrierzeichen für dpos fehlt bei:"
CASE 51: "e-Anweisung ohne vorangehendes d oder u"
CASE 52: "fehlendes e auf dieser Zeile"
CASE 53: "Wort mit Exponent oder Index zu lang"
CASE 54: "Modifikation bereits angeschaltet bei on:"
CASE 55: "Modifikation nicht angeschaltet bei off:"
CASE 56: "Index bereits angeschaltet bei ib:"
CASE 57: "Index nicht angeschaltet bei ie:"
CASE 58: "Inkorrekte direkte Drucker-Anweisung (TEXT-Denoter):"
CASE 59: "tableend ohne vorangehendes table"
CASE 60: "put counter fehlt für:"
CASE 61: "store counter fehlt für:"
OTHERWISE ""
ENDSELECT.
zusatz:
SELECT error nr OF
CASE 1: "type-Anweisung korrigieren"
CASE 2: "Bitte Einfügen"
CASE 3: "Geschachtelte Fußnoten sind nicht möglich"
CASE 4: "Beispiel: limit(16.0)"
CASE 5: "Beispiele: page(4), pagenr(""%"",4)"
CASE 6: "Trennung erscheint nicht im Ausdruck!"
CASE 7: "Index in Indexdatei ggf. vervollständigen"
CASE 10: "für Zeilenbreite (limit): Leerzeichen entfernen"
CASE 11: "(In head-, bottom- und foot-Bereichen)"
CASE 13: "Parameterwert verkleinern"
CASE 14: "Beispiel: pagenr(""$"",5)"
CASE 15: "Macros kontrollieren und ggf. neu laden"
CASE 16: "sind z.Z. nicht zugelassen"
CASE 17: "ie(..) vergessen?"
CASE 18: "1.Parameter gibt die Index-Nummer (1-10) an. Beispiel: ie(9)"
CASE 19: "Anweisung muß alleine oder am Zeilenende stehen"
CASE 24: "in einem head, bottom oder foot-Bereich"
CASE 25: "Vor oder hinter den Bereich plazieren"
CASE 26: "1.Parameter in columns korrigieren"
CASE 27: "Beispiel: page(20)"
CASE 29: "page und columnsend vorher einfügen"
CASE 30: "Beispiele: setcount(0); setcount(27)"
CASE 31: "end ggf. entfernen"
CASE 34: "Bitte set counter einfuegen"
CASE 37: "Muß positiv sein"
CASE 38: "Beispiel: limit(16.0)"
CASE 40: "pos-Anweisungen vor table plazieren"
CASE 41: "tableend vergessen?"
CASE 42: "Bitte pos-Anweisungen überprüfen"
CASE 43: "in clear pos-Anweisung"
CASE 48: "Ggf. lineform über die Spalte"
CASE 49: "Bitte vor Dateiende einfügen"
CASE 51, 52: "Bitte u und d-Anweisungen kontrollieren"
CASE 53: "e-Anweisung vergessen?"
CASE 54, 55, 56, 57: "Anweisung in angegebener Zeilennummer überprüfen"
CASE 60: "Bitte store counter Anweisungen überprüfen"
OTHERWISE "Bitte Korrigieren"
END SELECT.
END PROC report text processing error;
PROC report text processing warning (INT CONST error nr,
INT CONST line nr,
TEXT VAR message,
TEXT CONST addition):
einfache meldung aufbauen;
meldung in fehlerdatei ausgeben.
einfache meldung aufbauen:
message := "WARNUNG Zeile ";
message CAT text (line nr);
message CAT ": ";
message CAT simple message;
message CAT " ";
message CAT addition.
meldung in fehlerdatei ausgeben:
note (message);
note line;
fehlerdummy := " >>> ";
fehlerdummy CAT zusatz;
note (fehlerdummy);
note line.
simple message:
SELECT error nr OF
CASE 1, 2: ""
CASE 3: "Nicht referenziert:"
CASE 4: "Ziel-Referenz fehlt:"
CASE 5: "Modifikation bei Dateiende nicht ausgeschaltet:"
CASE 6: "Index bei Dateiende nicht ausgeschaltet:"
CASE 7: "Nicht getrenntes Wort zu lang für Zeilenbreite:"
CASE 8: "Umschaltung auf gleichen Schrifttyp:"
CASE 9: "Kennzeichen schon vorhanden (Duplikat ignoriert):"
CASE 10: "Tabellenzeile breiter als limit"
CASE 11: "Mehr Spalten als Tabellen-Positionen bei:"
CASE 12: "Überschreibung nach"
CASE 13: "Leerzeichen vor:"
CASE 14: "Weniger Spalten als Tabellen-Positionen"
CASE 15: "counter mit dieser Kennung bereits initialisiert:"
OTHERWISE ""
ENDSELECT.
zusatz:
SELECT error nr OF
CASE 3: "topage oder value fehlt"
CASE 4: "goalpage oder value fehlt"
CASE 7: "Bitte nachträglich trennen!"
CASE 8: "Schrifttyp wurde darum nicht verändert!"
CASE 9: "count und goalpage überprüfen"
CASE 12: "Bitte fehlende Leerzeichen einfügen"
CASE 13: "erzeugt ggf. zusätzliche Leerzeile"
OTHERWISE "Bitte überprüfen"
END SELECT.
END PROC report text processing warning;
END PACKET texter errors and common;
|