-
Notifications
You must be signed in to change notification settings - Fork 11
/
Copy pathJOURN03.bc
294 lines (294 loc) · 12.2 KB
/
JOURN03.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
1000 A=500:GOTO20:REM BASICODE-3 JOURNAL 3
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 (2)"
25010 DATA".RVariable"
25020 DATA"!!Wie in allen BASIC-Dialekten sind numerische"
25030 DATA"und String-Variable zugelassen."
25040 DATA"!!Fuer numerische Variablen gilt:"
25050 DATA"! - Typ 'real',"
25060 DATA"! - einfache Genauigkeit"
25070 DATA"! (6 gueltige Ziffern),"
25080 DATA"! - Integer-Variable sind nicht erlaubt."
25090 DATA"!!Eine Stringvariable wird durch den Zusatz '$'"
25100 DATA"nach dem Namen gekennzeichnet; sie kann 255"
25110 DATA"Zeichen lang sein."
25120 DATA".P0"
25130 DATA"Logische Werte werden je nach Computer"
25140 DATA"unterschiedlich repraesentiert (z.B."
25150 DATA"'wahr' => '+1' oder '-1'). Eine logische"
25160 DATA"Variable darf deshalb nicht Gegenstand"
25170 DATA"arithmetischer Operationen sein."
25180 DATA".P0"
25190 DATA"Variablennamen sind maximal zwei Zeichen lang:"
25200 DATA"! - Buchstabe, Buchstabe,"
25210 DATA"! - Buchstabe, Ziffer."
25220 DATA"!!Ausgeschlossen ist der Gebrauch von"
25230 DATA"Variablennamen,"
25240 DATA"! - die mit dem Buchstaben 'O' beginnen;"
25250 DATA"! diese sind den BASICODE-Standard-"
25260 DATA"! Routinen vorbehalten,"
25270 DATA"! - die BASIC-Schluesselwoerter oder"
25280 DATA"! Systemvariable darstellen:"
25290 DATA"! AS, AT, DI, DI$, DO, DO$, DS, DS$,"
25300 DATA"! EI, EI$, EL, ER, FN, GO, GO$, GR, HC,"
25310 DATA"! IF, LN, MA, MP, PI, SQ, SQ$, ST, ST$,"
25320 DATA"! TI, TI$, TO, TO$,"
25330 DATA"! - die Teil von BASICODE-Subroutinen"
25340 DATA"! sind."
25350 DATA".P0"
25360 DATA"Folgende Variablen werden ueber die BASICODE-"
25370 DATA"Unterprogramme aufgerufen oder ihnen uebergeben"
25380 DATA"und haben eine festgelegte Bedeutung:"
25390 DATA"!! HO,VE - Cursor-Positionierung"
25400 DATA"! Textbetrieb"
25410 DATA"! (# 110, 120)"
25420 DATA"! - Auslesen des Textschirms"
25430 DATA"! (# 220)"
25440 DATA"! - Cursor-Positionierung"
25450 DATA"! Grafik-Betrieb"
25460 DATA"! (# 620 ... 650)"
25470 DATA"!! IN, IN$ - Tastaturabfrage"
25480 DATA"! - (# 200, 210, 450)"
25490 DATA"!! IN - Auslesen Textschirm (# 220)"
25500 DATA"! - Status-Variable externe"
25510 DATA"! Speicher (# 540, 550, 560)",".P0"
25520 DATA" IN$ - Lesen von externen Speichern"
25530 DATA"! (# 550)"
25540 DATA"!! SR, SR$ - Bilden einer Stringvariablen"
25550 DATA"! (# 300, 310)"
25560 DATA"!! SR$ - String-Ausgabe auf"
25570 DATA"! Bildschirm (# 150, 650)"
25580 DATA"! - Drucker (# 350)"
25590 DATA"! - Externe Speicher (# 560)"
25600 DATA"! - Klein- => Gross-Buchstaben"
25610 DATA"! (# 330)"
25620 DATA"!! CN - Formatierung numerischer"
25630 DATA"! Ausgaben (# 310)"
25640 DATA"! - Zeichenfarbe bei grafischem"
25650 DATA"! Betrieb (# 620, 630, 650)"
25660 DATA"!! CT - Formatierung numerischer"
25670 DATA"! Ausgaben (# 310)",".P0"
25680 DATA" NF, NF$ - Externes Speichern von"
25690 DATA"! Daten-Files (# 500 ... 580)"
25700 DATA"!! FR - Freier Speicherplatz (# 270)"
25710 DATA"! - Wirksamkeit der Stop-Taste"
25720 DATA"! (# 280)"
25730 DATA"!! SD - Warte-Routine (# 450)"
25740 DATA"! - Musik (# 400)"
25750 DATA"!! SP, SV - Musik (# 400)"
25760 DATA"!! RV - Zufallsvariable (# 260)"
25770 DATA"!! HG, VG - Grafischer Cursor,"
25780 DATA"! Bildpunkte"
25790 DATA"! (# 620, 630, 650)"
25800 DATA".P0"
25810 DATA"Abweichend vom Umgang mit Variablen, der auf"
25820 DATA"manchem Computer moeglich ist, sind in BASICODE"
25830 DATA"Variable vor ihrem Aufruf im Programm zu"
25840 DATA"deklarieren und zu initialisieren, d.h. es ist"
25850 DATA"allen im Programm verwendeten Variablen ein Wert"
25860 DATA"zuzuweisen. Die Variablen HO, VE, HG, VG und SV"
25870 DATA"werden durch den Sprung nach Zeile # 20"
25880 DATA"initialisiert. Man kann nicht davon ausgehen,"
25890 DATA"dass den anderen bei ihrem Aufruf implizit der"
25900 DATA"Wert '0' oder 'leer' zugewiesen wird."
25910 DATA".P0"
25920 DATA".RFeldvariable"
25930 DATA"!!Vor Gebrauch in einem Programm sind Felder"
25940 DATA"(arrays) zu dimensionieren. Zugelassen sind ein-"
25950 DATA"oder zwei-dimensionale Felder (Listen oder"
25960 DATA"Tabellen). Mit der Dimensionierung werden"
25970 DATA"gleichzeitig die Elemente auf '0' bzw. 'leer'"
25980 DATA"gesetzt. Es kann nicht davon ausgegangen werden,"
25990 DATA"dass der Aufruf einer Feldvariablen im Programm"
26000 DATA"automatisch ein Feld mit 11 Elementen"
26010 DATA"dimensioniert. Auch Felder mit weniger als 11"
26020 DATA"Elementen sind zu dimensionieren (z.B.DIM A(4))."
26030 DATA"Die Zaehlung der Feldelemente beginnt bei '0'."
26040 DATA".P0"
26050 DATA".RBASIC-Sprachumfang"
26060 DATA"!!Im Vergleich zu manchem BASIC-Dialekt ist der"
26070 DATA"Sprachumfang reduziert. Um die mit BASICODE"
26080 DATA"angestrebte Portabilitaet der Programme zu"
26090 DATA"erreichen, musste die Anzahl der zugelassenen"
26100 DATA"BASIC-Anweisungen und -Operatoren auf den bei"
26110 DATA"allen beteiligten Computern vorhandenen Umfang"
26120 DATA"beschraenkt werden. Erlaubt ist die Verwendung"
26130 DATA"folgender Anweisungen:"
26140 DATA"!! DATA DEF FN DIM FOR GOSUB"
26150 DATA"! GOTO IF INPUT LET NEXT"
26160 DATA"! ON PRINT READ REM RESTORE"
26170 DATA"! RETURN STEP TAB THEN TO",
26180 DATA".P0","Funktionen und Operatoren:"
26190 DATA"!! ABS ASC ATN CHR$ COS"
26200 DATA"! EXP INT LEFT$ LEN LOG"
26210 DATA"! MID$ RIGHT$ SGN SIN SQR"
26220 DATA"! TAN VAL"
26230 DATA"!! AND OR NOT"
26240 DATA"!! ^ Exponentation"
26250 DATA"! * Multiplikation"
26260 DATA"! / Division"
26270 DATA"! + - Addition"
26280 DATA"! - Verkettung (concatenation) von"
26290 DATA"! Stringvariablen"
26300 DATA"! - Subtraktion"
26310 DATA"!! = <> )"
26320 DATA"! < > ( Vergleichsoperatoren"
26330 DATA"! <= >= )",".P0"
26340 DATA"Die Folge der Zeichen der Vergleichsoperatoren"
26350 DATA"'<=', '>=' und '<>' ist vorgeschrieben."
26360 DATA".P0"
26370 DATA".RDer Zeichensatz"
26380 DATA"!!Die in BASICODE verwendbaren Zeichen werden"
26390 DATA"nach ASCII codiert. Zu beachten ist jedoch, dass"
26400 DATA"fuer bestimmte Computer Abweichungen gelten"
26410 DATA"(z.B.Commodore) und dass die Steuerkodes nicht"
26420 DATA"benutzt werden koennen. Die ASC- und CHR$-"
26430 DATA"Funktionen sind daher mit Vorsicht zu verwenden."
26440 DATA"Bei manchen Computern wird eine exakte Beziehung"
26450 DATA"zwischen 'IN' und 'IN$' nicht hergestellt."
26460 DATA"!Bei Aufruf der BASICODE-Subroutinen # 200,"
26470 DATA"# 210, # 220 und # 450 ist dies zu beachten."
26480 DATA".P0"
26490 DATA"Der ASCII gilt in folgenden Bereichen:"
26500 DATA"!! ASCII Zeichen"
26510 DATA"! -------------------------------"
26520 DATA"! 32 Space"
26530 DATA"! 33 ... 47 Sonderzeichen"
26540 DATA"! 48 ... 57 Ziffern"
26550 DATA"! 58 ... 64 Sonderzeichen"
26560 DATA"! 65 ... 90 Gross-Buchstaben"
26570 DATA"! 91 ... 96 Sonderzeichen"
26580 DATA"! 97 ... 122 Klein-Buchstaben"
26590 DATA"! 123 ... 126 Sonderzeichen"
26600 DATA"!!Bei der Darstellung der Sonderzeichen koennen"
26610 DATA"bei einzelnen Computern Unterschiede - je"
26620 DATA"nach implementiertem Zeichensatz - auftreten,"
26630 DATA"(vergl. 'basicode-ascii')",".P0"
26640 DATA"Bei Lauf eines BASICODE-Programmes auf einem"
26650 DATA"Commodore wirkt sich der Unterschied der"
26660 DATA"Codierung zwischen 'echtem' ASCII und CBM-ASCII"
26670 DATA"deutlich aus, wenn es sich um die Kodierung"
26680 DATA"von Gross- und Klein-Buchstaben handelt"
26690 DATA"('cbm-ascii')."
26700 DATA".P0"
26710 DATA"Ausserdem koennen ueber die Variable 'IN'"
26720 DATA"folgende Steuercodes abgefragt werden:"
26730 DATA"!! 13 Carriage Return / Enter (CR)"
26740 DATA"! 28 Cursor nach links"
26750 DATA"! 29 Cursor nach rechts"
26760 DATA"! 30 Cursor nach unten"
26770 DATA"! 31 Cursor nach oben"
26780 DATA"! 127 Links ein Zeichen loeschen (DEL)"
26790 DATA"!!Diese Steuerfunktionen koennen aber in"
26800 DATA"BASICODE-Programmen nicht aufgerufen werden."
26810 DATA"Mit den Unterprogrammen # 200, 210 kann"
26820 DATA"nur der Wert von 'IN' abgefragt werden,"
26830 DATA"der zur Steuerung des Programmlaufs"
26840 DATA"verwendet werden kann."
26850 DATA"!Zur Cursor-Positionierung dient allein die"
26860 DATA"Subroutine # 110 mit den Variablen HO und VE."
26870 DATA".P10","Das war das","!!"
26880 DATA".C**************************"
26890 DATA".C* *"
26900 DATA".C* BASICODE-3 Journal *"
26910 DATA".C* Nummer 3 *"
26920 DATA".C* 7. Maerz 1990 *"
26930 DATA".C* *"
26940 DATA".C**************************",".E"
30000 REM
30010 REM Grundlagen von BASICODE
30020 REM -- Teil 2 --
32000 REM --------------------
32010 REM FRIEDRICH DORMEIER
32020 REM
32030 REM D-1000 BERLIN 39
32040 REM
32050 REM 11/1989 - C64/C128
32060 REM --------------------
32070 REM
32080 REM Erstausstrahlung: Radio DDR
32090 REM 900307