-
Notifications
You must be signed in to change notification settings - Fork 11
/
Copy pathJOURN05.bc
323 lines (323 loc) · 13.9 KB
/
JOURN05.bc
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
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
1000 A=500:GOTO20:REM BASICODE-3 Journal 5
1010 HT=HO:VT=VE:S$="":FORI=1 TOHT:S$=S$+" ":NEXTI
1020 HL=0:HR=HT:VL=2:VR=VT-2:R$="":READT$
1030 GOSUB1340:HO=(HT-LEN(SR$)-6)/2:VE=0:GOSUB110
1040 GOSUB150:PRINT:PRINT:PRINT
1050 PRINT"Ausdruck ueber"
1060 PRINT:PRINT" - 1 den Bildschirm,"
1070 PRINT" - 2 den Drucker."
1080 PRINT:PRINT"Welche Nummer ?";:GOSUB210
1090 SC=IN-48:PRINTSC:IFSC<>2 THENSC=1:GOTO1180
1100 PRINT:PRINT"Wieviel Leerzeichen "
1110 PRINT"am Zeilenanfang ";:INPUTHL
1120 PRINT:PRINT"Wieviel Text-Zeichen "
1130 PRINT"auf jeder Zeile ";:INPUTI:HR=HL+I-1
1140 PRINT:PRINT"Wieviel Leer-Zeilen "
1150 PRINT"am Seitenende ";:INPUTVL
1160 PRINT:PRINT"Wieviel Text-Zeilen "
1170 PRINT"auf jeder Seite ";:INPUTVR:VR=VR+VL-3
1180 MM$="":IFHL>0 THENMM$=LEFT$(S$,HL)
1190 GOSUB1310:M$=MM$:AL=VL:IFSC=2 THEN GOSUB1290
1200 IFLEN(R$)>HR-HL THEN GOSUB1730
1210 GOSUB1370:IFR$<>"" THENR$=R$+" "
1220 R$=R$+D$:GOTO1200
1230 IFSC=2 THENSR$=M$+SR$:GOSUB350:GOSUB360:GOTO1250
1240 GOSUB120:PRINTM$;SR$;:VE=VE+1:HO=0:GOSUB110:HL=0
1250 M$=MM$:AL=AL+1:IFAL<=VR THENRETURN
1260 IFSC=1 THEN1310
1270 IFVL>0 THENFORI=1 TOVL:GOSUB360:NEXTI
1280 AL=VL
1290 SR$=LEFT$(S$,(HR-HL-LEN(T$))/2)+T$:GOSUB1230
1300 SR$="":GOSUB1230:AL=VL:RETURN
1310 HO=0:VE=VT:GOSUB110
1320 SR$="WEITER: druecke <RETURN/ENTER>":GOSUB150
1330 GOSUB210:IFIN<>13 THEN1330
1340 GOSUB100:AL=VL:SR$=T$
1350 PRINTLEFT$(S$,(HT-LEN(SR$))/2-3);:GOSUB150
1360 PRINT:PRINT:RETURN
1370 READD$
1380 IFD$="" THEN1370
1390 IFLEFT$(D$,1)="." THEN1440
1400 IFLEFT$(D$,1)<>"!" THENRETURN
1410 IFD$="!" THEND$="":GOTO1430
1420 D$=RIGHT$(D$,LEN(D$)-1)
1430 GOSUB1670:GOTO1380
1440 IFD$<>".E" THEN1490
1450 J=1:GOSUB1670:T$="E N D E"
1460 SR$="":GOSUB1230:GOSUB1230:SR$=T$:GOSUB1230:T$=""
1470 SR$="":GOSUB1230:IFAL<>VL THEN1470
1480 GOTO950
1490 DD$=MID$(D$,2,1):D$=RIGHT$(D$,LEN(D$)-2)
1500 IFDD$<>"R" THEN1550
1510 IFSC=2 THENRETURN
1520 IFLEN(R$)+6+LEN(D$)>=HR-HL THENSR$=R$:GOSUB1230:R$=""
1530 PRINTM$;R$;:SR$=D$:GOSUB150:M$=""
1540 HL=HL+LEN(R$)+LEN(D$)+6:R$="":GOTO1370
1550 IFDD$<>"M" THEN1580
1560 I=VAL(D$):MM$="":IFI+HL=0 THEN1370
1570 MM$=LEFT$(S$,I+HL):GOTO1370
1580 IFDD$="P" THENJ=VAL(D$):GOSUB1670:GOSUB1690:GOTO1370
1590 IFDD$="T" THENT$=D$:J=10:GOSUB1670:GOSUB1690:GOTO1510
1600 IFDD$="Q" THENR$=R$+CHR$(34)+D$:GOTO1370
1610 IFDD$<>"F" THEN1640
1620 J=VAL(D$):GOSUB1670
1630 J=J-1:IFJ>-1 THENSR$="":GOSUB1230:GOTO1630
1640 IFDD$<>"C" THEN1660
1650 SR$=LEFT$(S$,(HR-HL-LEN(D$))/2)+D$:GOSUB1230
1660 GOTO1370
1670 GOSUB1730:SR$=R$:GOSUB1230:R$="":J=J-1
1680 RETURN
1690 IF(SC=1)OR(AL+J>VR) THEN1710
1700 SR$="":GOSUB1230:GOSUB1230:RETURN
1710 IFAL<>VL THENSR$="":GOSUB1230:GOTO1710
1720 RETURN
1730 K=HR-HL+1-LEN(M$)
1740 IFLEN(R$)<=K THENRETURN
1750 IFMID$(R$,K,1)=" " THEN1780
1760 K=K-1:IFK>0 THEN1750
1770 SR$="":GOTO1790
1780 SR$=LEFT$(R$,K-1):R$=RIGHT$(R$,LEN(R$)-K)
1790 GOSUB1230:GOTO1730
1800 REM
1810 REM UEBERSETZTE VERSION:
1820 REM
1830 REM COMPUTER-BULLETIN NO.32 (7/89)
1840 REM STICHTING BASICODE, EINDHOVEN
1850 REM
25000 DATA"Progr. in BASICODE (4)"
25010 DATA
25020 DATA"BASICODE baut auf BASIC auf. Bei der zugrunde"
25030 DATA"liegenden Konzeption - Portabilitaet der"
25040 DATA"Programme - musste ein Kompromiss ueber den in"
25050 DATA"BASIC nutzbaren Sprachumfang gefunden werden."
25060 DATA"Dies umso mehr als zwischen den BASIC-Dialekten"
25070 DATA"der in das System eingebundenen Computer"
25080 DATA"erhebliche Unterschiede bestehen. Das Resultat"
25090 DATA"war eine Art Minimal-BASIC (vergl. Teil (2)),"
25100 DATA"das zwar die ueblichen BASIC-Anweisungen,"
25110 DATA"-Funktionen und -Operatoren einschliesst,"
25120 DATA"aber fuer sie eine u.U. vom Gewohnten"
25130 DATA"abweichende, bestimmte Syntax vorschreibt."
25140 DATA".P0"
25150 DATA".RVereinbarungen"
25160 DATA"!!Unmittelbar am Anfang des Programms sind"
25170 DATA"benoetigte Variablen-Felder zu dimensionieren"
25180 DATA"und Funktionen zu definieren (DIM, DEF FNname)."
25190 DATA"!!DIM Variable (ganze Zahl)"
25200 DATA"!DIM Variable (ganze Zahl, ganze Zahl)"
25210 DATA"!!Damit wird eine Feldvariable dimensioniert:"
25220 DATA"! - eindimensional (Liste) oder"
25230 DATA"! - zweidimensional (Tabelle)."
25240 DATA"!!Variablenfelder mit mehr als zwei Dimensionen"
25250 DATA"sind nicht erlaubt. Felder sind auch dann zu"
25260 DATA"dimensionieren, wenn sie nur bis zu 10 oder 11"
25270 DATA"Elemente enthalten. Man kann nicht voraussetzen,"
25280 DATA"dass automatisch beim erstmaligen Aufruf"
25290 DATA"einer Feldvariablen ein Feld dimensioniert"
25300 DATA"wird. Der Name kennzeichnet das Feld; endet er"
25310 DATA"mit '$' so werden Zeichenketten erwartet."
25320 DATA"Mit der DIM-Anweisung wird fuer die"
25330 DATA"Feldvariable Speicherplatz reserviert, u.U. ist"
25340 DATA"die Dimensionierung zu ueberpruefen und der"
25350 DATA"Groesse des Arbeitsspeichers anzupassen."
25360 DATA"!!Die Zaehlung der Elemente beginnt mit '0'"
25370 DATA"(Null). Mit DIM A$(3) bzw. DIM B(4,4) werden"
25380 DATA"Felder mit 4 bzw. 25 Elementen dimensioniert."
25390 DATA"!Mit einer DIM-Anweisung koennen auch mehrere"
25400 DATA"Felder dimensioniert werden, z.B."
25410 DATA"!! DIM A(10), B$(5,5), ...",".P0"
25420 DATA"Im Programm ist zu vermeiden, dass Felder"
25430 DATA"ein zweites Mal dimensioniert werden."
25440 DATA"Dies kann bei Rueckspruengen auftreten und"
25450 DATA"fuehrt zu einer Fehlermeldung bzw. zum Abbruch"
25480 DATA"des Programms."
25490 DATA".P0"
25500 DATA"DEF FN(name) = arithm. Ausdruck"
25510 DATA
25520 DATA"!!Hiermit koennen arithmetische Funktioen fuer"
25530 DATA"die Verwendung im Programm definiert werden."
25540 DATA"Parameter- und Ergebnisbereich umfassen"
25550 DATA"Gleitkomma- (real-) Zahlen.",".P0"
25560 DATA"Fuer BASICODE-3-Programme gelten folgende"
25570 DATA"Beschraenkungen:"
25580 DATA"!! - Als Name der Funktion darf nur ein"
25590 DATA"! fuer eine numerische Variable"
25600 DATA"! erlaubter Name gebraucht werden."
25610 DATA"! - Die Funktionsdefinition darf nur"
25620 DATA"! eine Programmzeile (max. 60 Zeichen)"
25630 DATA"! ausfuellen."
25640 DATA"! - Erlaubt sind nur numerische oder"
25650 DATA"! logische Funktionen."
25660 DATA"! (Vorsicht bei Verwendung logischer"
25670 DATA"! Werte in arithmetischen Operationen!)"
25680 DATA"! - Die Funktion muss vor ihrem ersten"
25690 DATA"! Aufruf definiert worden sein."
25700 DATA".P0"
25710 DATA".RDaten im Programm"
25720 DATA"!!Es ist selbstverstaendlich, dass zu einem"
25730 DATA"Programm auch die zu verarbeitenden Daten"
25740 DATA"gehoeren.","!Fuer BASICODE-3-Programme gibt"
25750 DATA"es folgende Moeglichkeiten:"
25760 DATA"!! - als Teil des Programms:"
25770 DATA"! * Wertzuweisung (LET),"
25780 DATA"! * Datenliste (DATA, READ, RESTORE),"
25790 DATA"! - interaktive Eingabe (INPUT),"
25800 DATA"! - Zugriff auf externe Speicher,"
25810 DATA"! (Subroutinen # 500, 540, 580)"
25820 DATA"!!LET Variable = Wert"
25830 DATA"! (Gleitkommazahl oder Zeichenkette)"
25840 DATA"!!Im allgemeinen erlauben es die BASIC-Dialekte"
25850 DATA"LET wegzulassen; die Verwendung ist optional."
25860 DATA"Fuer das Sinclair-Spectrum-BASIC wird die"
25870 DATA"Wertzuweisung mit diesem Schluesselwort vom"
25880 DATA"Uebersetzungsprogramm ergaenzt. Allerdings macht"
25890 DATA"LET in einer Programm-Zeile den Unterschied"
25900 DATA"zwischen Wertzuweisung und logischem Vergleich"
25910 DATA"deutlich."
25920 DATA".P0"
25930 DATA"DATA Konstante, Konstante, ..."
25940 DATA"!READ Variable, Variable, ..."
25950 DATA"!RESTORE"
25960 DATA"!!"
25970 DATA"Mit den Anweisungen DATA und READ werden"
25980 DATA"numerischen oder String-Variablen Werte"
25990 DATA"aus einer Konstanten-Liste zugewiesen."
26000 DATA"Fuer DATA-Zeilen gilt:"
26010 DATA"!! - Konstanten sind mit einem Komma zu"
26020 DATA"! trennen."
26030 DATA"! - Zeichenketten (strings) sind in"
26040 DATA"! Anfuehrungszeichen zu setzen."
26050 DATA"! - Die Numerierung der DATA-Zeilen im"
26060 DATA"! Programm beginnt bei # 25000."
26070 DATA"! - In der DATA-Zeile duerfen nach der"
26080 DATA"! Datenliste keine weiteren Anweisungen"
26090 DATA"! (auch kein REM) folgen!"
26100 DATA".P0"
26110 DATA"Die READ-Anweisung enthaelt die Variablen,"
26120 DATA"denen die Daten zugewiesen werden sollen."
26130 DATA"Auf die Gleichheit des Typs von Variablen und"
26140 DATA"Daten ist zu achten."
26150 DATA"!!Beispiel:"
26160 DATA"!! nnnnn READ A,B,C$,D$"
26170 DATA"! 25000 DATA 100,200,"
26180 DATA".QHallo",".Q,",".QBASICODE",".Q "
26190 DATA"!!Hinter READ koennen mehrere Variablen - "
26200 DATA"getrennt durch Kommata - aufgefuehrt werden."
26210 DATA".P0"
26220 DATA"Nach jedem Lesen (READ) eines Datenelementes"
26230 DATA"stellt der Computer intern einen Zeiger auf das"
26240 DATA"naechste Element weiter. Mit der Anweisung"
26250 DATA"RESTORE wird der Zeiger auf das erste Element"
26260 DATA"der Datenliste zurueckgesetzt. Der in den"
26270 DATA"DATA-Zeilen erfasste Bestand wird von"
26275 DATA"Beginn an erneut gelesen."
26280 DATA"!Die Form 'RESTORE zeilennummer', mit der der"
26290 DATA"Zeiger auf einen bestimmten Teil der Datenliste"
26300 DATA"gesetzt wird, ist in BASICODE-3 verboten."
26310 DATA".P0"
26320 DATA"INPUT Variable"
26330 DATA"!INPUT ",".QZeichenkette",".Q ","; Variable"
26340 DATA"!!Nach der INPUT-Anweisung wartet der Computer"
26350 DATA"auf ueber die Tastatur einzugebende Daten,"
26360 DATA"die der bezeichneten Variablen zugewiesen"
26370 DATA"werden. Die Eingabe muss dem Typ der Variablen"
26380 DATA"entsprechen (numerisch oder Zeichenkette)."
26390 DATA"!Die nach INPUT angezeigte Zeichenkette kann"
26400 DATA"einen Benutzerhinweis (prompt) enthalten. Nach"
26410 DATA"INPUT darf nur eine Variable folgen; fuer"
26420 DATA"mehrere Variablen ist die INPUT-Anweisung zu"
26430 DATA"wiederholen. 'Komma' oder 'Doppelpunkt' duerfen"
26440 DATA"nicht eingegeben werden."
26450 DATA"!Mit der Subroutine # 110 kann die Eingabe auf"
26460 DATA"dem Bildschirm plaziert werden."
26470 DATA".P0"
26480 DATA"BASICODE-Subroutinen # 500, 540, 580"
26490 DATA"!!Ueber die Unterprogamme # 500, 540, 580 ist es"
26500 DATA"moeglich, Daten aus sequentiellen Files zu"
26510 DATA"lesen, die auf Cassette oder Diskette extern"
26520 DATA"gespeichert sind (siehe weiter unten)."
26530 DATA".P0"
26540 DATA".RAusgabe der Daten"
26550 DATA"!!Daten als Ergebnis des Laufs eines Programms"
26560 DATA"koennen mit folgenden Anweisungen bzw."
26570 DATA"Unterprogrammen ausgegeben werden:"
26580 DATA"!! - Bildschirm (PRINT),"
26590 DATA"! - Drucker"
26600 DATA"! (Subroutinen # 350, 360),"
26610 DATA"! - Speicherung auf Cassette oder"
26620 DATA"! Diskette"
26630 DATA"! (Subroutinen # 500, 560, 580).",".P0"
26640 DATA"PRINT Konstante"
26650 DATA"!PRINT Variable"
26660 DATA"!PRINT Ausdruck"
26670 DATA"!!Konstanten, Variablen und Ausdruecke koennen"
26680 DATA"numerisch (Zahlen, arithmetische Ausdruecke)"
26690 DATA"oder Zeichenketten sein. Zeichenkonstante"
26700 DATA"sind in Anfuehrungszeichen zu setzen."
26710 DATA"!Steuerbefehle (Kontrollzeichen) duerfen nicht"
26720 DATA"ueber eine PRINT-Anweisung uebertragen werden."
26730 DATA"Eine 'leere' PRINT-Anweisung bewirkt die Ausgabe"
26740 DATA"einer Leerzeile."
26750 DATA"!Sollen Anfuehrungszeichen in einer Zeichenkette"
26760 DATA"ausgegeben werden, so geht dies nur ueber den"
26770 DATA"Ausdruck des ASCII-Zeichencodes (# 34), d.h."
26780 DATA"PRINT CHR$(34)."
26790 DATA".P0"
26800 DATA"BASIC-Dialekte erlauben in Verbindung mit der"
26810 DATA"PRINT-Anweisung die"
26820 DATA"! - Positionierung (LOCATE, PRINT AT),"
26830 DATA"! - Tabellierung (SPC(), TAB()),"
26840 DATA"! Komma als Trennzeichen (delimiter)"
26850 DATA"! - und die Formatierung (PRINT USING)"
26860 DATA"!der Ausgabe. In BASICODE-3-Programmen muss die"
26870 DATA"Positionierung und Tabellierung der Ausgabe"
26880 DATA"ueber die Subroutinen # 110, die Formatierung"
26890 DATA"ueber die Subroutine # 310 durchgefuehrt werden."
26900 DATA"!!Obwohl die Anweisung PRINT TAB() zugelassen"
26910 DATA"ist, muss von ihrer Anwendung abgeraten werden,"
26920 DATA"da zwischen BASIC-Dialekten Unterschiede bei der"
26930 DATA"Verwendung des Argumentes zu TAB bestehen (0 ..."
26940 DATA"oder 1 ...)."
26950 DATA".P0"
26960 DATA"Zugelassen und vorgeschrieben ist als"
26970 DATA"Trennzeichen nach einer PRINT-Anweisung das"
26980 DATA"Semikolon (;), das 'Wagenruecklauf' (CR) und"
26990 DATA"Linefeed (LF) unterdrueckt. Ausserdem ist die"
27000 DATA"Verwendung als Trennzeichen der Elemente einer"
27010 DATA"Ausgabeliste vorgeschrieben.","!!Beispiele:"
27020 DATA"!! PRINT A;B;C$;D$"
27030 DATA"! PRINT",".QHallo ",".Q;",".QOtto",".Q "
27040 DATA"!!Im ersten Beispiel dienen die Semikolons als"
27050 DATA"Trennzeichen, im zweiten als Trennzeichen und"
27060 DATA"zur Unterdrueckung des Ruecklaufs (CR und LF) am"
27070 DATA"Zeilenende.",".P0"
27080 DATA"BASICODE-Subroutinen # 350, 360"
27090 DATA"!!Ueber diese Unterprogramme koenen Daten und"
27100 DATA"Konstanten (Zahlen und Zeichenketten) nach"
27110 DATA"Zuweisung zur Variablen SR$ ueber einen Drucker"
27120 DATA"ausgegeben werden."
27130 DATA"!!BASICODE-Subroutinen # 500, 560, 580"
27140 DATA"!!Hiermit ist eine Speicherung von Daten auf"
27150 DATA"externen Medien (Cassette oder Diskette)"
27160 DATA"moeglich (siehe weiter unten)."
27170 DATA".P10","Das war das","!!"
27180 DATA".C*************************"
27190 DATA".C* *"
27200 DATA".C* BASICODE-3 Journal *"
27210 DATA".C* Nummer 5 *"
27220 DATA".C* 26. April 1990 *"
27230 DATA".C* *"
27240 DATA".C*************************",".E"
30000 REM
30010 REM Grundlagen von BASICODE
30020 REM -- Teil 4 --
32000 REM --------------------
32010 REM FRIEDRICH DORMEIER
32020 REM
32030 REM D-1000 BERLIN 39
32040 REM
32050 REM 12/1989 - C64/C128
32060 REM --------------------
32070 REM
32080 REM Erstausstrahlung: Radio DDR
32090 REM 900426