-
Notifications
You must be signed in to change notification settings - Fork 11
/
Copy pathJOURN11.bc
285 lines (285 loc) · 12.1 KB
/
JOURN11.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
1000 A=500:GOTO20:REM BASICODE-3 JOURNAL 11
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 GOSUB1410: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:GOTO1220
1100 PRINT:PRINT"Wieviel Leerzeichen"
1110 INPUT"am Zeilenanfang ";HL
1120 PRINT:PRINT"Wieviel Text-Zeichen"
1130 INPUT"auf jeder Zeile ";I:HR=HL+I-1
1140 PRINT:PRINT"Wieviel Text-Zeilen"
1150 INPUT"auf jeder Seite ";VR:VR=VR-3
1160 PRINT"(E) Endlospapier oder "
1170 PRINT"(L) Lose Blaetter (E/L) ";
1180 GOSUB210:IFIN=76 THENVL=-1:GOTO1220
1190 IFIN<>69 THEN GOSUB250:GOTO1160
1200 PRINT:PRINT"Wieviel Leerzeilen"
1210 INPUT"am Seitenende ";VL:VR=VR+VL
1220 MM$="":IFHL>0 THENMM$=LEFT$(S$,HL)
1230 GOSUB1380:M$=MM$:AL=VL:IFSC=2 THEN GOSUB1360
1240 IFLEN(R$)>HR-HL THEN GOSUB1820
1250 GOSUB1440:IFR$<>"" THENR$=R$+" "
1260 R$=R$+D$:GOTO1240
1270 IFSC=2 THENSR$=M$+SR$:GOSUB350:GOSUB360:GOTO1290
1280 GOSUB120:PRINTM$;SR$;:VE=VE+1:HO=0:GOSUB110:HL=0
1290 M$=MM$:AL=AL+1:IFAL<=VR THENRETURN
1300 IFSC=1 THEN1380
1310 IFVL>=0 THENFORI=1 TOVL:GOSUB360:NEXTI:GOTO1350
1320 PRINT"Neues Blatt in Drucker einlegen"
1330 PRINT"druecke dann RETURN/ENTER"
1340 GOSUB210:IFIN<>13 THEN1340
1350 AL=VL
1360 SR$=LEFT$(S$,(HR-HL-LEN(T$))/2)+T$:GOSUB1270
1370 SR$="":GOSUB1270:AL=VL:RETURN
1380 HO=3:VE=VT:GOSUB110
1390 SR$="Weiter: druecke <RETURN/ENTER>":GOSUB150
1400 GOSUB210:IFIN<>13 THEN1400
1410 GOSUB100:AL=VL:SR$=T$
1420 PRINTLEFT$(S$,(HT-LEN(SR$))/2-3);:GOSUB150
1430 PRINT:PRINT:RETURN
1440 READD$
1450 IFD$="" THEN1440
1460 IFLEFT$(D$,1)="." THEN1530
1470 IFLEFT$(D$,1)<>">" THEN1490
1480 D$=LEFT$(S$,23-LEN(R$))+MID$(D$,2):RETURN
1490 IFLEFT$(D$,1)<>"!" THENRETURN
1500 IFD$="!" THEND$="":GOTO1520
1510 D$=MID$(D$,2)
1520 GOSUB1760:GOTO1450
1530 IFD$<>".E" THEN1580
1540 J=1:GOSUB1760:T$="E N D E"
1550 SR$="":GOSUB1270:GOSUB1270:SR$=T$:GOSUB1270:T$=""
1560 SR$="":GOSUB1270:IFAL<>VL THEN1560
1570 GOTO950
1580 DD$=MID$(D$,2,1):D$=MID$(D$,3)
1590 IFDD$<>"R" THEN1640
1600 IFSC=2 THENRETURN
1610 IFLEN(R$)+6+LEN(D$)>=HR-HL THENSR$=R$:GOSUB1270:R$=""
1620 PRINTM$;R$;:SR$=D$:GOSUB150:M$=""
1630 HL=HL+LEN(R$)+LEN(D$)+6:R$="":GOTO1440
1640 IFDD$<>"M" THEN1670
1650 I=VAL(D$):MM$="":IFI+HL=0 THEN1440
1660 MM$=LEFT$(S$,I+HL):GOTO1440
1670 IFDD$="P" THENJ=VAL(D$):GOSUB1760:GOSUB1780:GOTO1440
1680 IFDD$="T" THENT$=D$:J=10:GOSUB1760:GOSUB1780:GOTO1600
1690 IFDD$="Q" THENR$=R$+CHR$(34)+D$:GOTO1440
1700 IFDD$<>"F" THEN1730
1710 J=VAL(D$):GOSUB1760
1720 J=J-1:IFJ>-1 THENSR$="":GOSUB1270:GOTO1720
1730 IFDD$<>"C" THEN1750
1740 SR$=LEFT$(S$,(HR-HL-LEN(D$))/2)+D$:GOSUB1270
1750 GOTO1440
1760 GOSUB1820:SR$=R$:GOSUB1270:R$="":J=J-1
1770 RETURN
1780 IF(SC=1)OR(AL+J>VR)THEN1800
1790 SR$="":GOSUB1270:GOSUB1270:RETURN
1800 IFAL<>VL THENSR$="":GOSUB1270:GOTO1800
1810 RETURN
1820 K=HR-HL+1-LEN(M$)
1830 IFLEN(R$)<=K THENRETURN
1840 IFMID$(R$,K,1)=" " THEN1870
1850 K=K-1:IFK>0 THEN1840
1860 SR$="":GOTO1880
1870 SR$=LEFT$(R$,K-1):R$=MID$(R$,K+1)
1880 GOSUB1270:GOTO1820
1890 REM
1900 REM UEBERSETZTE VERSION
1910 REM
1920 REM COMPUTER-BULLETIN NO.40 (11/89)
1930 REM STICHTING BASICODE, EINDHOVEN
1940 REM
25000 DATA"Programmieren in BASICODE (8)"
25010 DATA".RSignalton - Subroutine # 250"
25020 DATA"!!Diese Subroutine gibt ein akustisches Signal"
25030 DATA"(entspricht ASCII 7 - BEL). Damit kann - sofern"
25040 DATA"erforderlich - die Aufmerksamkeit auf einen"
25050 DATA"bestimmten Schritt im Programm gelenkt werden."
25060 DATA"!Allerdings ist das Signal nur von kurzer Dauer."
25070 DATA"Oft ist es notwendig, das Signal andauern zu"
25080 DATA"lassen, um dann den Programmlauf nach"
25090 DATA"Betaetigen einer Taste verzweigen oder enden"
25100 DATA"zu lassen."
25110 DATA".P0"
25120 DATA".RZufallszahlen - Subroutine # 260"
25130 DATA"!!Hiermit wird der Zufallszahlengenerator"
25140 DATA"des Computers aufgerufen; in RV werden dann"
25150 DATA"Pseudozufallszahlen im Bereich","!! 0 <= RV < 1"
25160 DATA"!!zurueckgegeben. In der Regel werden nur"
25170 DATA"ganzzahlige Werte benoetigt, die durch Rechnung"
25180 DATA"gewonnen werden koennen."
25190 DATA".P0"
25200 DATA".RFreier Arbeitsspeicher","!"
25210 DATA".R - Subroutine 270"
25220 DATA"!!Man kann davon ausgehen, dass BASICODE-"
25230 DATA"Programme eine Laenge von max. 18 KByte haben"
25240 DATA"koennen, in Einzelfaellen auch mehr. Infolge der"
25250 DATA"Uebertragung der einzelnen Zeichen und der"
25260 DATA"rechnerinternen Umwandlung in 'Token' ist die"
25270 DATA"im Computer gespeicherte Programmlaenge kuerzer."
25280 DATA"Im Computer ist ein freier Arbeitsspeicher"
25290 DATA"von mind. 16 KByte erforderlich.",".P0"
25300 DATA"Der nach Laden des Bascoders freie Speicherplatz"
25310 DATA"(in Bytes) kann im Direkt-Modus mit"
25320 DATA"!! GOSUB 270:PRINT FR"
25330 DATA"!!abgefragt werden. Die Wiederholung nach dem"
25340 DATA"Laden des Programms und die Bildung der"
25350 DATA"Differenz ergibt die computer- spezifische"
25360 DATA"Programmlaenge (in Bytes)."
25370 DATA".P0"
25380 DATA".RVariablen SR und SR$"
25390 DATA"!!In BASICODE-3-Programmen und -Subroutinen"
25400 DATA"kommen den Variablen SR und SR$ besondere"
25410 DATA"Aufgaben zu:"
25420 DATA"!! - Wandeln einer numerischen in eine"
25430 DATA"! Stringvariable,"
25440 DATA"! - Formatieren der Ausgabe numerischer"
25450 DATA"! Daten,"
25460 DATA"! - Wandeln von Klein- in Grossbuch-"
25470 DATA"! staben,"
25480 DATA"! - Ausgabe ueber den Drucker,"
25490 DATA"! - Schreiben eines sequentiellen Files"
25500 DATA"! auf Cassette oder Diskette,"
25510 DATA"! - Textausgabe im grafischen Betrieb."
25520 DATA"!!Die freie Verwendung dieser Namen in einem"
25530 DATA"Programm ist nicht erlaubt."
25540 DATA".P0"
25550 DATA".RTypwandlung - Subroutine # 300"
25560 DATA"!!Die Subroutine # 300 entspricht der in BASIC"
25570 DATA"vorhandenen Funktion STR$(x), mit der numerische"
25580 DATA"in Stringvariable gewandelt werden koennen."
25590 DATA"Damit werden die Leerraeume vor und hinter"
25600 DATA"numerischen Daten unterdrueckt:"
25610 DATA"!! A$=STR$(A) wird ersetzt durch:"
25620 DATA"!! SR=A:GOSUB 300:A$=SR$"
25630 DATA".P0"
25640 DATA".RFormatieren numerischer Daten","!"
25650 DATA".R - Subroutine # 310"
25660 DATA"!!Zahlen werden in BASICODE - je nach Groesse"
25670 DATA"und Computer - mit 6 bzw. 9 Stellen oder in"
25680 DATA"wissenschaftlicher Notation ('E-Format')"
25690 DATA"angezeigt. Manche Computer (PC's) erlauben die"
25700 DATA"Darstellung in 'doppelter' Genauigkeit (bis zu"
25710 DATA"18 gueltige Ziffern)."
25720 DATA"!Die Subroutine # 310 aehnelt der 'PRINT USING'"
25730 DATA"- Anweisung mancher BASIC-Dialekte, die jedoch"
25740 DATA"vielfaeltiger eingesetzt werden kann als die"
25750 DATA"Subroutine 310. In BASICODE-3 ist nur das"
25760 DATA"Formatieren der Ausgabe numerischer Werte"
25770 DATA"- ueber Bildschirm oder Drucker - moeglich."
25780 DATA".P0"
25790 DATA"Die formatierte Ausgabe des Wertes der"
25800 DATA"numerischen Variablen A erfolgt ueber die"
25810 DATA"Variablen SR$, CT und CN. Dabei bedeuten:"
25820 DATA"!! SR numerische Variable, deren Wert"
25830 DATA"! in SR$ formatiert dargestellt"
25840 DATA"! werden soll,"
25850 DATA"!! CT Anzahl der Zeichen, die in SR$"
25860 DATA"! enthalten sind (einschl. Dezimal-"
25870 DATA"! punkt und Vorzeichen),"
25880 DATA"!! CN Anzahl der Nachkommastellen."
25890 DATA"!!Diese Variablen sind vor dem Aufruf der"
25900 DATA"Subroutine # 310 zu belegen:"
25910 DATA".P0"
25920 DATA"Die Zeichenkette SR$ kann maximal nur neun"
25930 DATA"Ziffern enthalten, d.h. dass CT begrenzt ist:"
25940 DATA"!! 1 - Vorzeichen,"
25950 DATA"! + vk - Anzahl der Vorkommastellen,"
25960 DATA"! + 1 - Dezimalpunkt,"
25970 DATA"! + CN - Anzahl der Nachkommastellen,"
25980 DATA"! ---------------------------------"
25990 DATA"! CT - Anzahl der Zeichen"
26000 DATA"!!In Abhaengigkeit von der Groesse der"
26010 DATA"darzustellenden Zahl gilt:"
26020 DATA"!! vk + CN <= 9 (ohne fuehrende Null"
26030 DATA"! falls SR < 1)",".P0"
26040 DATA"Mit der Subroutine # 310 ist es nicht moeglich,"
26050 DATA"Zahlen im wissenschaftl. Format darzustellen."
26060 DATA"!Kann die Zahl nicht im vorausbestimmten Format"
26070 DATA"angezeigt werden, enthaelt SR$ Sterne ('*')."
26080 DATA"Ggf. wird die Zahl auf CN Stellen gerundet. Die"
26090 DATA"Werte der Variablen CT, CN und SR werden mit"
26100 DATA"dem Aufruf der Subroutine nicht veraendert."
26110 DATA"!!Beim Programmieren sind die Werte fuer CT"
26120 DATA"und CN sorgfaeltig zu bestimmen, z.B.:"
26130 DATA"!! - Ganze Zahlen (-1E8 ... +1E8):"
26140 DATA"! CT=11"
26150 DATA"!! - SR < 1 (Vorzeichen, fuehrende Null,"
26160 DATA"! Dezimalpunkt, neun Nachkommastellen):"
26170 DATA"! CT=12, CN=9",".P0"
26180 DATA"Der Variablen CT kann ein Wert bis zu 20"
26190 DATA"zugewiesen werden; dies fuehrt zu einer"
26200 DATA"Positionierung der Ausgabe in der Zeile. Besser"
26210 DATA"ist es, die Subroutine # 110 zu benutzen."
26220 DATA".P0"
26230 DATA".RKlein- -> Grossbuchstaben","!"
26240 DATA".R - Subroutine # 330"
26250 DATA"!!Dieses Unterprogramm aendert alle in der"
26260 DATA"Zeichenkette SR$ vorhandenen Kleinbuchstaben"
26270 DATA"in Grossbuchstaben, indem der ASCII-Wert der"
26280 DATA"Zeichen im Bereich 96 ... 128 um 32 vermindert"
26290 DATA"wird. Aus ASCII 97 ('a') wird ASCII 65 ('A')."
26300 DATA"Da das Alphabet die ASCII-Werte 97 ... 122"
26310 DATA"umfasst, werden auch die Sonderzeichen im"
26320 DATA"Bereich 123 ... 126 gewandelt."
26330 DATA"!!Die Zeichen der urspruenglichen Zeichenkette"
26340 DATA"werden nicht geaendert."
26350 DATA".P0"
26360 DATA".RAusgabe ueber den Drucker","!"
26370 DATA".R - Subroutinen # 350, 360","!"
26380 DATA"!!Grundsaetzlich kann davon ausgegangen werden,"
26390 DATA"dass neben der Ausgabe ueber den Bildschirm auch"
26400 DATA"ein Ausdruck auf Papier (Erlaeuterungen,Tabellen"
26410 DATA" usw.) sinnvoll ist. Das Programm soll also die"
26420 DATA"Wahl unter beiden Moeglichkeiten lassen."
26430 DATA".P0"
26440 DATA"Der Drucker wird ueber die Subroutinen # 350"
26450 DATA"bzw. # 360 - und nur ueber diese - angesprochen."
26460 DATA"Die Anweisung 'GOSUB 350' entspricht der"
26470 DATA"Anweisung 'PRINT SR$;' - bei einer Ausgabe ueber"
26480 DATA"den Bildschirm."
26490 DATA"!Vorher ist der Inhalt der auszugebenden"
26500 DATA"Variablen der Variablen SR$ zuzuweisen. Dies"
26510 DATA"geschieht fuer"
26520 DATA"!! Zeichenkettenvariable (z.B. A$):"
26530 DATA"!! SR$=A$:GOSUB 350 oder"
26540 DATA"! SR$='abcde':GOSUB 350"
26550 DATA"!! numerische Variable (z.B. A):"
26560 DATA"!! SR=A:GOSUB 300 (oder GOSUB 310)"
26570 DATA"! (Wandlung in Stringvariable SR$)"
26580 DATA"! GOSUB 350"
26590 DATA".P0"
26600 DATA"Der Ausdruck erfolgt ohne Wagenruecklauf und"
26610 DATA"Zeilenvorschub; die Druckzeile wird nicht"
26620 DATA"abgeschlossen. Die bewirkt die Subroutine # 360;"
26630 DATA"mit dieser Anweisung ist jede Anweisungsfolge"
26640 DATA"zum Ausdruck einer Zeile zu beenden."
26650 DATA"!!Wird die Anweisung 'GOSUB 360' allein benutzt,"
26660 DATA"erfolgt der Ausdruck einer Leerzeile (dies"
26670 DATA"entspricht 'PRINT' bei einer Ausgabe ueber den"
26680 DATA"Bildschirm)."
26690 DATA".P10","Das war das","!!"
26700 DATA".C****************************"
26710 DATA".C* *"
26720 DATA".C* BASICODE-3 Journal *"
26730 DATA".C* Nummer 11 *"
26740 DATA".C* 11. Juli 1990 *"
26750 DATA".C* *"
26760 DATA".C****************************",".E"
30000 REM
30010 REM Grundlagen von BASICODE
30020 REM -- Teil 8 --
32000 REM -------------------------
32010 REM FRIEDRICH DORMEIER
32020 REM
32030 REM D-1000 BERLIN 39
32040 REM
32050 REM C64/C128 - 2/1990
32060 REM -------------------------
32070 REM
32080 REM Erstausstrahlung: DS-Kultur
32090 REM-spezial 900711