-
Notifications
You must be signed in to change notification settings - Fork 11
/
Copy pathJOURN06.bc
252 lines (252 loc) · 10.3 KB
/
JOURN06.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
1000 A=500:GOTO20:REM BASICODE-3 JOURNAL 6
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 (5)"
25010 DATA
25020 DATA".RProgrammsteuerungsanweisungen"
25030 DATA"!!Mit diesen Anweisungen ist es moeglich, ein"
25040 DATA"Programm nicht in der Folge der Zeilennummern"
25050 DATA"abzuarbeiten, sondern den Programmlauf in einer"
25060 DATA"bestimmten Zeile fortzusetzen oder zu beenden."
25070 DATA"!Dazu gehoeren:"
25080 DATA"!! - GOTO, ON ... GOTO,"
25090 DATA"! - IF ... THEN,"
25100 DATA"! - FOR ... NEXT,"
25110 DATA"! - Aufruf von Unterprogrammen"
25120 DATA"! (GOSUB, ON ... GOSUB),"
25130 DATA"! - unterbrechen bzw. beenden des"
25140 DATA"! Programms (STOP, END)."
25150 DATA".P0"
25160 DATA"GOTO Zeilennummer"
25170 DATA"!!ON Variable GOTO Zn1,Zn2,..."
25180 DATA"!ON Ausdruck GOTO Zn1,Zn2,..."
25190 DATA"!!Damit wird das Programm mit den Anweisungen"
25200 DATA"der angegebenen Zeilennummer fortgesetzt."
25210 DATA"Das Sprungziel darf nur eine im Programm"
25220 DATA"vorhandene Zeilennummer sein. Verboten sind"
25230 DATA"!! - Spruenge zu BASICODE-Subroutinen,"
25240 DATA"! Ausnahme: GOTO 20 - Zeile # 1000,"
25250 DATA"! GOTO 950 - Programmende,"
25260 DATA"! GOTO 1000 - RUN im Progr."
25270 DATA"! - Sprunganweisungen folgender Form:"
25280 DATA"! A=2000 : GOTO A"
25290 DATA".P0"
25300 DATA"Sorgfalt ist geboten, wenn der Sprung aufgrund"
25310 DATA"des Wertes einer Variablen oder eines Ausdrucks"
25320 DATA"ausgefuehrt werden soll (ON ... GOTO ...,"
25330 DATA"computed GOTO)."
25340 DATA"!Der Wert der Variablen bzw. des Ausdrucks muss"
25350 DATA"ganzzahlig sein. Sofern der BASIC-Interpreter"
25360 DATA"dies nicht ueberwacht, ist die INT-Funktion zu"
25370 DATA"verwenden. Ist der ganzzahlige Wert kleiner als"
25380 DATA"1 oder groesser als die Anzahl der Zeilennumern"
25390 DATA"(Sprungziele), so wird die naechstfolgende"
25400 DATA"Anweisung ausgefuehrt."
25410 DATA"!So darf 'K' nur folgende Werte annehmen:"
25420 DATA"!! ON K GOTO 2000,3000,4000"
25430 DATA"! K=1, 2, 3"
25440 DATA"!! ON K-10 GOTO 5000,6000,7000"
25450 DATA"! K=11, 12, 13"
25460 DATA"!!Es ist deshalb sinnvoll, den Wert von 'K' vor"
25470 DATA"einer solchen Anweisung durch das Programm"
25480 DATA"pruefen zu lassen."
25490 DATA".P0"
25500 DATA"IF log. Ausdruck THEN Zeilennummer"
25510 DATA"!IF log. Ausdruck THEN Anweisung"
25520 DATA"!!Die in BASICODE zugelassene einfache"
25530 DATA"IF-Anweisung bewirkt, dass das Programm mit der"
25540 DATA"folgenden Anweisung (Zeile) fortgesetzt wird,"
25550 DATA"falls der logische Ausdruck 'falsch' ist; ist er"
25560 DATA"'wahr', wird die nach THEN folgende Anweisung"
25570 DATA"ausgefuehrt."
25580 DATA"!!Die zweiseitig bedingte IF-Anweisung der Form"
25590 DATA"!!IF log.Ausdruck THEN Anweisung ELSE Anweisung"
25600 DATA"!!ist in BASICODE nicht zugelassen."
25610 DATA"!!An Stelle des Ausdrucks kann auch eine"
25620 DATA"logische Variable eingesetzt werden, womit"
25630 DATA"folgende Konstruktion moeglich wird:"
25640 DATA"!! A=(B=3)"
25650 DATA"! IF A THEN ..."
25660 DATA"!!Fuer die Lesbarkeit eines Programms ist es"
25670 DATA"jedoch besser, wenn der logische Ausdruck hinter"
25680 DATA"IF explizit angegeben wird."
25690 DATA"!!Soll aufgrund des Wertes eines log. Ausdrucks"
25700 DATA"ein Sprung (GOTO) zu einer anderen Programmzeile"
25710 DATA"ausgefuehrt werden, muss die Anweisung folgende"
25720 DATA"Form haben:"
25730 DATA"!! IF log. Ausdruck THEN Zeilennummer"
25740 DATA"!!Nicht zugelassen sind:"
25750 DATA"!! IF log. Ausdruck THEN GOTO Zeilennummer"
25760 DATA"! IF log. Ausdruck GOTO Zeilennummer"
25770 DATA"!!Der Aufruf eines Unterprogramms mit GOSUB wird"
25780 DATA"wie eine Anweisung behandelt:"
25790 DATA"!! IF log. Ausdruck THEN GOSUB Zeilennummer"
25800 DATA"! IF log. Ausdruck THEN PRINT ..."
25810 DATA"! IF log. Ausdruck THEN Variable=Wert"
25820 DATA".P0"
25830 DATA"FOR ... TO ... NEXT"
25840 DATA"!!Die aus BASIC bekannte Schleifenkonstruktion"
25850 DATA"!! FOR Llaufvariable = Anfang TO Grenze"
25860 DATA"! (STEP Schrittweite)"
25870 DATA"!! Schleifeninhalt"
25880 DATA"!! NEXT Laufvariable"
25890 DATA"!!kann in BASICODE uneingeschraenkt verwendet"
25900 DATA"werden.",".P0"
25910 DATA"Zu beachten ist, dass hinter NEXT die"
25920 DATA"zugehoerige Laufvariable angegeben wird; dies"
25930 DATA"gilt vor allem fuer verschachtelte Schleifen."
25940 DATA"Die Angabe von zwei oder mehr Laufvariablen"
25950 DATA"ist unzulaessig:"
25960 DATA"!! FOR A=1 TO 10"
25970 DATA"! FOR B=1 TO 10"
25980 DATA"!! Schleifeninhalt"
25990 DATA"!! NEXT B"
26000 DATA"! NEXT A"
26010 DATA" (nicht NEXT B,A !)"
26020 DATA".P0"
26030 DATA"Unterprogramme (Subroutinen)"
26040 DATA"!!Unterprogramme haben in BASICODE-Programmen"
26050 DATA"eine besondere Bedeutung:"
26060 DATA"!! - sie stellen die BASICODE-Routinen"
26070 DATA"! dar, die die Portabilitaet der"
26080 DATA"! Programme moeglich machen"
26090 DATA"! - in BASICODE-Programmen sind sie"
26100 DATA"! die Programm-Module, die fuer ein"
26110 DATA"! strukturiertes Programmieren not-"
26120 DATA"! wendig sind.",".P0"
26130 DATA"Der Aufruf eines Unterprogramms erfolgt mit"
26140 DATA"!! GOSUB Zeilennummer"
26150 DATA"!!Zum berechneten GOSUB (ON ... GOSUB ...)"
26160 DATA"s.o. die Ausfuehrungen zu ON ... GOTO ... !"
26170 DATA"!!Jedes Unterprogramm ist mit RETURN"
26180 DATA"abzuschliessen.",".P0"
26190 DATA"Beenden des Programms"
26200 DATA"!!Zum Unterbrechen bzw. zum Beenden des"
26210 DATA"Programms dienen in den BASIC-Dialekten die"
26220 DATA"Anweisungen STOP und END; in BASICODE-Programmen"
26230 DATA"ist deren Verwendung verboten. Das Programm ist"
26240 DATA"mit dem unbedingten Sprung"
26250 DATA"!! 'GOTO 950' zu beenden."
26260 DATA".P0"
26270 DATA".RREM-Anweisungen"
26280 DATA"!!Die Funktion der REM-Anweisung ist bekannt;"
26290 DATA"mit ihr koennen Anmerkungen, Hinweise,"
26300 DATA"Kennzeichnung von Abschnitten in einem Programm"
26310 DATA"untergebracht werden. Sie erscheinen jedoch nur"
26320 DATA"im Listing des Programms. Beim Programmlauf"
26330 DATA"werden sie vom Interpreter ueberlesen."
26340 DATA"!Das BASICODE-System geht in seiner Konzeption"
26350 DATA"von einer Nutzung der Programme durch andere"
26360 DATA"aus, so dass sich der Zweck von Erlaeuterungen"
26370 DATA"allein schon daraus ergibt. Ausserdem wird der"
26380 DATA"Autor des Programms nach einiger Zeit fuer"
26390 DATA"Erlaeuterungen selbst dankbar sein!",".P0"
26400 DATA"!Gegen die Verwendung von REM-Anweisungen wird"
26410 DATA"! - der Bedarf an Speicherplatz und"
26420 DATA"! - eine Verlaengerung der Laufzeit"
26430 DATA"!angefuehrt. Beide Gruende gelten aber nur in"
26440 DATA"besonderen Faellen."
26450 DATA".P10","Das war das","!!"
26460 DATA".C**************************"
26470 DATA".C* *"
26480 DATA".C* BASICODE-3 Journal *"
26490 DATA".C* Nummer 6 *"
26500 DATA".C* 11. Mai 1990 *"
26510 DATA".C* *"
26520 DATA".C**************************",".E"
30000 REM
30010 REM Grundlagen von BASICODE
30020 REM -- Teil 5 --
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-spezial 900511