-
Notifications
You must be signed in to change notification settings - Fork 11
/
Copy pathJOURN04.bc
231 lines (231 loc) · 9.37 KB
/
JOURN04.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
1000 A=500:GOTO20:REM BASICODE-3 JOURNAL 4
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 (3)"
25010 DATA
25020 DATA".RFunktionen"
25030 DATA"!!Funktionen geben in Abhaengigkeit von ein,"
25040 DATA"zwei oder drei Argumenten einen Wert zurueck,"
25050 DATA"der einer Variablen zugewiesen oder ausgegeben"
25060 DATA"werden kann oder Teil eines Ausdrucks wird."
25070 DATA"Bei der Verwendung von Funktionen in"
25080 DATA"BASICODE-Programmen existieren bestimmte"
25090 DATA"Beschraenkungen. Unterschieden werden"
25100 DATA"!! - numerische Funktionen,"
25110 DATA"! - Zeichenkettenfunktionen und"
25120 DATA"! - Hybridfunktionen (Typwandlung)."
25130 DATA".P0","Numerische Funktionen"
25140 DATA"!!Die Standard-Funktionen"
25150 DATA"!! - ABS, INT, SGN, EXP, SQR,"
25160 DATA"! COS, SIN, TAN, ATN"
25170 DATA"!!koennen wie ueblich verwendet werden."
25180 DATA"!!LOG(argument) gibt den natuerlichen"
25190 DATA"Logarithmus zur Basis e (= 2.718...) zurueck."
25200 DATA"!Einzelne BASIC-Dialekte geben ueber LOG als"
25210 DATA"Wert der Funktion den Logarithmus zur Basis 10."
25220 DATA"Es wird zwischen LOG und LN unterschieden."
25230 DATA"Der Bascoder gleicht dies aus."
25240 DATA"!!Fuer die Winkelfunktionen ist das Argument im"
25250 DATA"Bogenmass anzugeben.",".P0"
25260 DATA"Die numerischen Funktionen"
25270 DATA"!! - MEM oder"
25280 DATA"! - FRE(parameter)"
25290 DATA"!!zur Angabe des freien Speicherplatzes duerfen"
25300 DATA"in BASICODE nicht verwendet werden. Dazu dient"
25310 DATA"allein die Subroutine # 270 mit gleichzeitiger"
25320 DATA"'garbage collection' und die Abfrage des Wertes"
25330 DATA"der Variablen FR."
25340 DATA"!!Die Bildung von Pseudozufallszahlen geschieht"
25350 DATA"in BASICODE-Programmen allein ueber die"
25360 DATA"Subroutine # 260 und die Variable RV."
25370 DATA"Funktionsaufrufe oder Kommandos wie:"
25380 DATA"!! - RND(parameter),"
25390 DATA"! - RANDOMIZE, RAND"
25400 DATA"!!sind nicht zugelassen."
25410 DATA".P0"
25420 DATA"Neben den eingebauten Standardfunktionen"
25430 DATA"koennen auch vom Benutzer definierte Funktionen"
25440 DATA"nach ihrer Definition mit DEF FNname verwendet"
25450 DATA"werden (vergl. Teil 4, Vereinbarungen)."
25460 DATA".P0"
25470 DATA"Zeichenkettenfunktionen"
25480 DATA"!!Sie geben als Wert eine Stringkonstante"
25490 DATA"zurueck; dazu gehoeren:"
25500 DATA"!! - LEFT$(A$, M), )"
25510 DATA"! - RIGHT$(A$, M), ( vergleich"
25520 DATA"! - MID$(A$, M, N) ( 'stringfunkt.'"
25530 DATA"! und )"
25540 DATA"! - MID$(A$, N). )"
25550 DATA"!!Der numerische Ausdruck (M, N) kann einen Wert"
25560 DATA"von 1 ... 255 annehmen; der Wert '0' fuehrt zu"
25570 DATA"einer Fehlermeldung."
25580 DATA"!!Zeichenkettenfunktionen durch den Benutzer"
25590 DATA"zu definieren, ist in BASICODE-Programmen nicht"
25600 DATA"moeglich.",".P0"
25610 DATA"Hybridfunktionen"
25620 DATA"!!Damit sollen hier Funktionen bezeichnet"
25630 DATA"werden, die einen numerischen in einen"
25640 DATA"alphanumerischen Wert und umgekehrt umwandeln."
25650 DATA"Diese Funktionen koennen auch in Ausdruecken"
25660 DATA"des entsprechenden Typs verwendet werden."
25670 DATA"!!In BASICODE-Programmen sind erlaubt:"
25680 DATA"!! - LEN(A$) gibt die Laenge der"
25690 DATA"! Zeichenkette (Zeichenzahl)"
25700 DATA"! zurueck."
25710 DATA"!! - ASC(A$) ergibt eine Zahl gleich"
25720 DATA"! dem ASCII-Wert des ersten"
25730 DATA"! Zeichens von A$.",".P0"
25740 DATA
25750 DATA" - CHR$(A) das Zeichen, entsprechend"
25760 DATA"! dem ASCII-Wert von A wird"
25770 DATA"! angezeigt."
25780 DATA
25790 DATA"!!Bei der Verwendung der Funktionen ASC und CHR$"
25800 DATA"(der Umkehrfunktion von ASC) ist Vorsicht"
25810 DATA"geboten, da manche Computer den Zeichensatz"
25820 DATA"abweichend vom ASCII kodieren (z.B. C64)."
25830 DATA".P0"
25840 DATA"Die in BASIC-Dialekten ueblichen Funktionen"
25850 DATA"VAL(A$) und STR$(A) fuehren eine Typwandlung"
25860 DATA"aus, d.h. es werden Zeichenketten mit ihrem"
25870 DATA"numerischen Wert und numerische Werte als"
25880 DATA"Zeichenketten dargestellt."
25890 DATA"!!Da die VAL(A$)-Funktion in unterschiedlichen"
25900 DATA"Dialekten unterschiedliche Wirkungen hat, ist"
25910 DATA"sicherzustellen, das A$ rein numerisch ist."
25920 DATA"!!Die Funktion STR$(A) ist in BASICODE verboten;"
25930 DATA"an ihrer Stelle ist die Subroutine # 300 mit den"
25940 DATA"Variablen SR bzw. SR$ aufzurufen."
25950 DATA".P0"
25960 DATA".RLogische Ausdruecke"
25970 DATA"!!Die Bildung logischer Werte ('wahr' oder"
25980 DATA"'falsch') geschieht bei verschiedenen Computern"
25990 DATA"unterschiedlich. So wird 'wahr' durch '+1' oder"
26000 DATA"'-1' dargestellt, 'falsch' meistens durch '0'."
26010 DATA"!Um die Portabilitaet der Programme zu sichern,"
26020 DATA"gelten fuer BASICODE-Programme hinsichtlich der"
26030 DATA"Anwendung einige Begrenzungen:"
26040 DATA"!! - Logische Werte duerfen nicht Teil"
26050 DATA"! arithmetischer Operationen sein,"
26060 DATA"!! z.B. A=3*(C=B),",".P0"
26070 DATA" - Vergleiche, die 'wahr' oder 'falsch'"
26080 DATA"! ergeben, sind in Klammern zu setzen,"
26090 DATA"! um die Abarbeitungsfolge"
26100 DATA"! zu gewaehrleisten:"
26110 DATA"!! richtig: A=(B=C)"
26120 DATA"! falsch: A=B=C"
26130 DATA"!! - Die logischen Operatoren AND und OR"
26140 DATA"! duerfen in BASICODE nicht zur"
26150 DATA"! bitweisen Verknuepfung von Zahlen,"
26160 DATA"! z.B. A=5 AND 7"
26170 DATA"! verwendet werden."
26180 DATA".P0"
26190 DATA"Es gilt, dass logische Ausdruecke"
26200 DATA"nur in der Form"
26210 DATA"!! IF logischer ausdruck THEN anweisung,"
26220 DATA"! IF logischer ausdruck THEN zeilennr."
26230 DATA"!!verwendet werden duerfen (vergl. Teil 5)."
26240 DATA".P10","Das war das","!!"
26250 DATA".C**************************"
26260 DATA".C* *"
26270 DATA".C* BASICODE-3 Journal *"
26280 DATA".C* Nummer 4 *"
26290 DATA".C* 21. Maerz 1990 *"
26300 DATA".C* *"
26310 DATA".C**************************",".E"
30000 REM
30010 REM Grundlagen von BASICODE
30020 REM -- Teil 3 --
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 900321