-
Notifications
You must be signed in to change notification settings - Fork 11
/
Copy pathJOURN09.bc
204 lines (204 loc) · 8.25 KB
/
JOURN09.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
1000 A=500:GOTO20:REM BASICODE-3 JOURNAL 9
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"Progr. in BASICODE (7)"
25010 DATA".RTastatur - Subroutine # 200"
25020 DATA"!"
25030 DATA".R - Subroutine # 210"
25040 DATA"!!Zur Abfrage der Tastatur stellt BASICODE-3"
25050 DATA"zwei Routinen zur Verfuegung, die sich in ihrer"
25060 DATA"Wirkung auf den Lauf des Programmes"
25070 DATA"unterscheiden. Sie entsprechen den"
25080 DATA"BASIC-Anweisungen GET und INKEY$ o.ae.",".P0"
25090 DATA"Die Subroutine # 200 registriert, ob waehrend"
25100 DATA"des Programmlaufs - d.h. waehrend der"
25110 DATA"Wirksamkeit dieses Unterprogramms - eine"
25120 DATA"Taste gedrueckt wurde; das Programm laeuft"
25130 DATA"weiter. Im Gegensatz dazu haelt die Subroutine"
25140 DATA"# 210 den Programmlauf bis Tastaturbetaetigung"
25150 DATA"an.",".P0"
25160 DATA"In beiden Faellen wird den Variablen IN und IN$"
25170 DATA"ein Wert zugewiesen:"
25180 DATA"!! IN$ - das der Taste entsprechende"
25190 DATA"! Zeichen (als String) und"
25200 DATA"! IN - 'echter' ASCII-Wert dieses"
25210 DATA"! Zeichens."
25220 DATA"!!Wurde keine Taste betaetigt (Subroutinen"
25230 DATA"# 200, # 450), so haben die Variablen die"
25240 DATA"Werte: IN$=leer; IN=0."
25250 DATA"!!IN kann Werte von 32 ... 95 annehmen; Gross-"
25260 DATA"und Kleinbuchstaben werden durch die gleichen"
25270 DATA"ASCII-Werte repraesentiert (ASCII 65 => 'A' oder"
25280 DATA"'a'). Ausserdem gelten:"
25290 DATA"!! ASCII 13 - Return / Enter,"
25300 DATA"! 29 ... 31 - Cursor-Steuerung,"
25310 DATA"! 127 - Delete."
25320 DATA".P0"
25330 DATA"(Vergl. auch 'Programmieren (2) - Zeichensatz')"
25340 DATA"!!Wurde eine Nicht-ASCII-Taste gedrueckt, wird"
25350 DATA"der Variablen IN eine negative Zahl zugewiesen."
25360 DATA".P0"
25370 DATA"Haeufig wird die Subroutine # 210 angewendet, um"
25380 DATA"durch Betaetigung einer Taste den Programmlauf"
25390 DATA"zu steuern (Menu-Auswahl, Ende des Programms"
25400 DATA"usw.). Als Vorteil stellt sich dar, dass die"
25410 DATA"ASCII-Werte der Variablen IN keinen Unterschied"
25420 DATA"zwischen Klein- und Grossbuchstaben machen. Es"
25430 DATA"genuegt die Abfrage der Variablen IN (I);"
25440 DATA"das durch Tastendruck dargestellte Zeichen muss"
25450 DATA"nicht ueber IN$ abgefragt werden (II)."
25460 DATA"!!In den folgenden Beispielen soll IN bzw. IN$"
25470 DATA"auf 'J/N' (ja/nein) abgefragt werden."
25480 DATA"!!I nn10 GOSUB 210"
25490 DATA"! nn20 IF IN=74 THEN..."
25500 DATA"! nn30 IF IN=78 THEN..."
25510 DATA"! nn40 GOTO nn10"
25520 DATA"!!II nn10 GOSUB 210"
25530 DATA"! nn20 IF (IN$='J')OR(IN$='j') THEN..."
25540 DATA"! nn30 IF (IN$='N')OR(IN$='n') THEN..."
25550 DATA"! nn40 GOTO nn10"
25560 DATA"!!Die Verringerung des Aufwandes ist deutlich."
25570 DATA".P0"
25580 DATA"Eine andere Verwendung der Subroutine # 210"
25590 DATA"ist die Nachbildung der INPUT-Anweisung in der"
25600 DATA"Form, dass auch Anfuehrungszeichen, Doppelpunkt"
25610 DATA"und Komma direkt eingegeben und einer String-"
25620 DATA"Variablen zugewiesen werden koenen."
25630 DATA".P0"
25640 DATA".RWarteroutine - Subroutine # 450"
25650 DATA"!!Diese Subroutine unterbricht den Programmlauf"
25660 DATA"fuer eine vorgegebene Zeitspanne. Durch Druecken"
25670 DATA"einer Taste kann sie abgebrochen werden."
25680 DATA"Sie entspricht der PAUSE- bzw. SLEEP-Anweisung"
25690 DATA"mancher BASIC-Dialekte."
25700 DATA"!!Die Wartezeit ist vor dem Aufruf der Variablen"
25710 DATA"SD zuzuweisen:"
25720 DATA"!! Wartezeit (Sekunden)"
25730 DATA"! SD = --------------------"
25740 DATA"! 0.1",".P0"
25750 DATA"Wird eine Taste gedrueckt, so wird die Routine"
25760 DATA"abgebrochen, den Variablen IN und IN$ werden der"
25770 DATA"ASCII-Wert und das Zeichen uebergeben, die"
25780 DATA"Variable SD enthaelt die Restzeit (in Einheiten"
25790 DATA"von 0.1 Sekunden)."
25800 DATA".P0"
25810 DATA".RSTOP-Taste - Subroutine # 280"
25820 DATA"!!Diese Routine schaltet die Wirksamkeit einer"
25830 DATA"STOP-, BREAK-, ESCAPE-Taste aus, wenn vor ihrem"
25840 DATA"Aufruf der Variablen FR der Wert '1' zugewiesen"
25850 DATA"wurde. Unterbrechen eines laufenden Programms"
25860 DATA"mit Tastendruck ist nicht mehr moeglich."
25870 DATA"!!Wird FR=0 gesetzt, wird nach GOSUB 280 die"
25880 DATA"STOP-Taste wieder aktiviert."
25890 DATA".P10","Das war das","!!"
25900 DATA".C**************************"
25910 DATA".C* *"
25920 DATA".C* BASICODE-3 Journal *"
25930 DATA".C* Nummer 9 *"
25940 DATA".C* 8. Juni 1990 *"
25950 DATA".C* *"
25960 DATA".C**************************",".E"
30000 REM
30010 REM Grundlagen von BASICODE
30020 REM -- Teil 7 --
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 Erstausstrahlung: Radio DDR
32080 REM-spezial 900608