-
Notifications
You must be signed in to change notification settings - Fork 11
/
10_Texteditor.bc2
405 lines (404 loc) · 10.6 KB
/
10_Texteditor.bc2
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
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
1000 A=7500:GOTO20:REM***BASIC-TEXT-EDITOR***
1010 REM
1020 REM (C) HEIKE UND MANFRED FILLINGER , 8.4.1983
1030 REM UEBERARBEITET FUER BASICODE-2 12.5.84
1040 REM
1050 REM KONSTANTEN
1060 GZ=200:REM MAXIMALE TEXTZEILENZAHL
1070 ZM=1:REM KLEINSTE ZEILENZAHL
1080 TA=8:REM TAB-WEITE
1090 GOSUB20000:REM STEUERZEICHEN
1100 DIMT$(200)
1110 REM
1120 REM VARIABLEN
1130 REM Z....AKTUELLE ZEILENNUMMER
1140 REM ZM...ERSTE FREIE ZEILENNUMMER
1150 REM ZV...ZEILENNUMMER IM SCHIEBEBEREICH
1160 REM
1170 REM T$().TEXTSPEICHER
1180 REM
1190 REM N1...ZEILENZEIGER UNTEN
1200 REM N2...ZEILENZEIGER OBEN
1210 REM N3...ZEILENZEIGER NACH
1220 REM P1...ERSTE POSITION
1230 REM P2...LETZTE POSITION
1240 REM N1$..URTEXT
1250 REM N2$..NEUTEXT
1260 REM
1270 REM B$,BB$,C$,CC$,KY$..TEXTPUFFER
1280 REM I,II,J,K,P,..LAUFVARIABLEN
1290 REM TL...TEXTLAENGE
1300 REM
1310 REM RA$..KENNZEICHEN F. RANDAUSGLEICH
1320 REM B....KENNZEICHEN F. BLANK
1330 REM BD...BLANK-DIFFERENZ B. RANDAUSGLEICH
1340 REM L,Z$,ZZ$..ZEICHENVERVIELFACHER
1350 REM
1360 GOSUB100
1370 PRINT"*** BASIC-TEXT-EDITOR ***"
1380 REM
2000 REM---CONTROL-MODUL---
2010 REM
2020 GOSUB250
2030 PRINT"C";ZM;TAB(5)">>";
2040 C$="":INPUTC$
2050 IFC$="" THENN1=ZM:GOTO3040
2060 IFLEFT$(C$,1)="I" THENZ=N1:GOTO3000
2070 IFC$="LIST" THENGOSUB15050:GOTO4000
2080 IFC$="LLIST" THENGOSUB15050:GOTO4070
2090 SJ=1
2100 IFC$="PRINT" THENGOSUB15050:GOTO4140
2110 IFC$="LPRINT" THENGOSUB15050:GOTO4190
2120 IFC$="DELETE" THENGOSUB15050:GOTO5000
2130 IFC$="CSAVE" THEN6000
2140 IFC$="CLOAD" THEN6160
2150 IFC$="CLOAD?" THEN6290
2160 IFC$="HELP" THEN7000
2170 IF(C$="CHANGE") OR(C$="C") THENGOSUB15110:GOTO8000
2180 IFC$="FORMAT" THEN9000
2190 IFC$="COPY" THEN10000
2200 IFC$="MOVE" THEN11000
2210 IFLEFT$(C$,2)="EX" THENEND
2220 PRINT"UNZULAESSIGES KOMMANDO !"
2230 PRINT"BEFEHLE IN GROSSBUCHSTABEN SCHREIBEN !"
2240 GOTO2000
2250 PRINT"DER";T;".";M;".";J;"IST UNZULAESSIG"
2260 PRINT
2270 GOTO2000
2280 REM
3000 REM---EINGABE-MODUL---
3010 REM
3020 GOSUB15010
3030 REM
3040 Z=N1
3050 GOSUB15250
3060 PRINT"I";Z;TAB(5)">>";
3070 GOSUB15400
3080 IFC$="" THENZM=Z:GOSUB15330:GOTO2000
3090 T$(Z)=C$:Z=Z+1
3100 IFZ=ZV THENPRINT"TEXTSPEICHER VOLL !"
3110 GOTO3060
4000 REM---AUSGABE-MODUL---
4010 REM
4020 REM LIST
4030 FORI=N1 TON2
4040 PRINTI;TAB(4)":";T$(I)
4050 NEXTI
4060 GOTO2000
4070 REM LLIST
4080 FORI=N1 TON2
4090 SR=I:CT=4:CN=0:GOSUB310
4100 SR$=SR$+":"+T$(I)
4110 GOSUB350:GOSUB360
4120 NEXTI
4130 GOTO2000
4140 REM PRINT
4150 FORI=N1 TON2
4160 PRINTT$(I)
4170 NEXTI
4180 GOTO2000
4190 REM LPRINT
4200 FORI=N1 TON2
4210 SR$=T$(I):GOSUB350:GOSUB360
4220 NEXTI
4230 GOTO2000
5000 REM---DELETE-MODUL---
5010 REM
5020 IFN2=NM THENZM=ZM-1:GOTO2000
5030 ZV=N1
5040 FORI=N2+1 TOZM
5050 T$(ZV)=T$(I)
5060 ZV=ZV+1
5070 NEXTI
5080 ZM=ZM-(N2-N1+1):GOTO2000
6000 REM---KASSETTEN-MODUL---
6010 REM
6020 REM CSAVE
6030 SR=ZM:GOSUB300
6040 PRINT"DATEINAME :";:INPUTDN$
6050 GOSUB21000
6060 S1$=SR$:S2$=""
6070 GOSUB21300
6080 FORI=1 TOZM STEP2
6090 S1$=T$(I)
6100 IFI<ZM THENS2$=T$(I+1)
6110 GOSUB21300
6120 S2$=""
6130 NEXTI
6140 GOSUB21700
6150 GOTO2000
6160 REM CLOAD
6170 PRINT"DATEINAME :";:INPUTDN$
6180 GOSUB21200
6190 GOSUB21500
6200 ZV=VAL(S1$)
6210 FORI=ZM TOZM+ZV-1 STEP2
6220 GOSUB21500
6230 T$(I)=S1$
6240 T$(I+1)=S2$
6250 NEXTI
6260 GOSUB21700
6270 ZM=ZM+ZV-1
6280 GOTO2000
6290 REM CLOAD?
6300 PRINT"DATEINAME :";:INPUTDN$
6310 GOSUB21200
6320 GOSUB21500
6330 IFVAL(S1$)<>ZM THEN6430
6340 I=-1
6350 I=I+2
6360 GOSUB21500
6370 IFT$(I)<>S1$ THEN6430
6380 IFI+1>ZM THEN6400
6390 IFT$(I+1)<>S2$ THEN6430
6400 IFNOT(I>=ZM-1) THEN6350
6410 GOSUB21700
6420 GOTO2000
6430 PRINT"LESEFEHLER !"
6440 GOSUB21700
6450 GOTO2000
7000 REM---KURZANLEITUNGS-MODUL 'HELP'---
7010 REM
7020 GOSUB100
7030 PRINT"LIST : SCHREIBT TEXT MIT ZEILENNR."
7040 PRINT"LLIST : DRUCKT TEXT MIT ZEILENNR."
7050 PRINT"PRINT : SCHREIBT TEXT OHNE ZEILENNR."
7060 PRINT"LPRINT : DRUCKT TEXT OHNE ZEILENNR."
7070 PRINT"DELETE : LOESCHT TEXTZEILEN"
7080 PRINT"(C)HANGE: AUSTAUSCH VON ZEICHEN BZW ZK."
7090 PRINT"FORMAT : TEXTFORMATIERUNG"
7100 PRINT"COPY : KOPIERT TEXTZEILEN IM TEXT"
7110 PRINT"MOVE : VERSCHIEBT TEXTZEILEN IM TEXT"
7120 PRINT"CSAVE : SCHREIBT TEXT AUF KASSETTE"
7130 PRINT"CLOAD : LIEST TEXT VON KASSETTE"
7140 PRINT"CLOAD? : KONTROLL-LESEN"
7150 PRINT"I... : EINGABE-MODUS AB TEXTZEILE :..."
7160 PRINT"RETURN : WECHSEL ZWISCHEN C-/I-MODUS"
7170 PRINT
7180 GOTO2000
8000 REM---CHANGE-MODUL---
8010 REM
8020 FORI=N1 TON2
8030 PRINT:PRINT"<";I;">";
8040 J=1:C$="":P=1
8050 GOSUB8150
8060 IFJ=0 THEN8110
8070 IFJ<>0 THENPRINT"*";
8080 C$=C$+MID$(T$(I),P,J-P)+N2$
8090 J=J+LEN(N1$):P=J
8100 GOTO8050
8110 T$(I)=C$+MID$(T$(I),P,LEN(T$(I))-P+1)
8120 NEXTI
8130 PRINT
8140 GOTO2000
8150 REM INSTRING
8160 FORJ=J TOLEN(T$(I))-LEN(N1$)+1
8170 IFN1$=MID$(T$(I),J,LEN(N1$)) THENRETURN
8180 NEXTJ
8190 J=0:RETURN
9000 REM---FORMAT-MODUL---
9010 REM
9020 GOSUB15050:PRINT"ERSTE POS.";:INPUTP1
9030 PRINT"LETZTE POS.";:INPUTP2
9040 IFP2>132 THEN9360
9050 IF(P1+10)>P2 THEN9360
9060 IF(P1<1) OR(P2<1) THEN9360
9070 PRINT"MIT RECHTEN RANDAUSGLEICH (J/N)";:INPUTRA$
9080 GOSUB15250:L=P1-1:Z$=" ":GOSUB15580
9090 T$(N1)=ZZ$
9100 N2=ZV+N2-N1:Z=N1
9110 FORI=ZV TON2
9120 CC$="":PRINT"<";Z;">":Z=Z+1
9130 FORP=1 TOLEN(T$(I))
9140 C$=MID$(T$(I),P,1)
9150 IFC$<>" " THENCC$=CC$+C$
9160 IF(C$=" ") OR(P=LEN(T$(I))) THENGOSUB9240
9170 NEXTP
9180 NEXTI
9190 ZV=I
9200 IFLEN(T$(N1))<P2 THENGOSUB9390
9210 ZM=N1+1
9220 GOSUB15330
9230 GOTO2000
9240 REM ABLAGE AB N1
9250 IFCC$="" THENRETURN
9260 TL=LEN(T$(N1))
9270 IF(TL>P1-1) AND(TL+LEN(CC$)+1<=P2) THEN9340
9280 IF(TL=P1-1) AND(TL+LEN(CC$)<=P2) THEN9350
9290 GOSUB9390
9300 N1=N1+1:L=P1-1:Z$=" ":GOSUB15580
9310 T$(N1)=ZZ$
9320 T$(N1)=T$(N1)+CC$:CC$=""
9330 RETURN
9340 T$(N1)=T$(N1)+" "+CC$:CC$="":RETURN
9350 T$(N1)=T$(N1)+CC$:CC$="":RETURN
9360 REM PARAM.-FEHLER
9370 PRINT"PARAMETER UNZULAESSIG"
9380 GOTO2000
9390 REM RECHTER RANDAUSGLEICH
9400 IFRA$<>"J" THENRETURN
9410 IF(RIGHT$(T$(N1),1)=" ") AND(LEN(T$(N1))>1) THEN9560
9420 B=0:BB$=""
9430 BD=P2-LEN(T$(N1))
9440 IFBD=0 THENRETURN
9450 FORK=1 TOLEN(T$(N1))
9460 B$=MID$(T$(N1),K,1)
9470 BB$=BB$+B$
9480 IF(B$=" ") AND(K>P1) THENB=1
9490 IF(B$=" ") AND(BD>0) AND(K>P1) THENBB$=BB$+" "
9500 IF(B$=" ") AND(BD>0) AND(K>P1) THENBD=BD-1
9510 NEXTK
9520 IFB=0 THENRETURN
9530 T$(N1)=BB$
9540 IFBD>0 THENBB$="":GOTO9450
9550 RETURN
9560 T$(N1)=LEFT$(T$(N1),LEN(T$(N1))-1):GOTO9410
10000 REM---COPY-MODUL---
10010 REM
10020 GOSUB15170
10030 GOSUB15250:J=N3
10040 FORI=N1 TON1+N2-N3+1
10050 T$(I)=T$(J)
10060 J=J+1
10070 NEXTI
10080 ZM=I-1
10090 GOSUB15330
10100 GOTO2000
11000 REM---MOVE-MODUL---
11010 REM
11020 GOSUB15170
11030 GOSUB15250:J=N3
11040 FORI=N1 TON1+N2-N3+1
11050 T$(I)=T$(J)
11060 J=J+1
11070 NEXTI
11080 ZM=I-1
11090 GOSUB15330
11100 IFN1<N2 THENN2=N2+ZM-GZ:N3=N3+ZM-GZ
11110 N1=N3
11120 ZV=N1
11130 FORI=N2+1 TOZM
11140 T$(ZV)=T$(I)
11150 ZV=ZV+1
11160 NEXTI
11170 ZM=ZM-(N2-N1+1)
11180 GOTO2000
15000 REM---ZENTRALES UNTERPROGRAMM-MODUL---
15010 REM I-PARAMETER
15020 N1=VAL(RIGHT$(C$,LEN(C$)-1))
15030 IFN1>ZM THENN1=ZM
15040 RETURN
15050 REM 2-PARAMETER
15060 PRINT"VON ZEILE";:INPUTN1
15065 PRINT"BIS ZEILE";:INPUTN2
15070 IF(N2>(ZM-1)) OR(N2<1) THENN2=ZM-1
15080 IFN1<1 THENN1=1
15090 IFN1>N2 THENN1=N2
15100 RETURN
15110 REM 2+2 -PARAMETER
15120 GOSUB15050
15130 PRINT"URTEXT : ";:GOSUB15400:N1$=C$
15140 PRINT
15150 PRINT"NEUTEXT: ";:GOSUB15400:N2$=C$
15160 RETURN
15170 REM 3 PARAMETER
15180 GOSUB15050
15190 N3=N1
15200 PRINT"NACH ZEILE";:INPUTN1
15210 IF(N1>N3) AND(N1<=2) THEN15240
15220 IFN1<=N3 THENN2=GZ-(ZM-N2):N3=GZ-(ZM-N3)
15230 RETURN
15240 PRINT"PARAMETERFEHLER":GOTO2000
15250 REM LUECKE AUFBAUEN
15260 ZV=GZ
15270 FORI=ZM TON1 STEP-1
15280 T$(ZV)=T$(I)
15290 ZV=ZV-1
15300 NEXTI
15310 ZV=ZV+1
15320 RETURN
15330 REM ANFUEGEN
15340 FORI=ZV TOGZ
15350 T$(ZM)=T$(I)
15360 ZM=ZM+1
15370 NEXTI
15380 ZM=ZM-1
15390 RETURN
15400 REM TASTATUR ABFRAGEN
15410 C$=""
15420 REM
15430 GOSUB210:KY$=IN$
15440 IF(LEN(C$)<=0) AND(KY$=BS$) THEN15430
15450 IFKY$=BS$ THENGOSUB15510
15460 IFKY$=TB$ THENGOSUB15530
15470 IFKY$>=" " THENC$=C$+KY$:PRINTKY$;:GOTO15430
15480 IFKY$<>WR$ THEN15430
15490 PRINTKY$;
15500 RETURN
15510 IFLEN(C$)>1 THENC$=LEFT$(C$,LEN(C$)-1):GOTO15570
15520 C$="":PRINTKY$;:RETURN
15530 REM TAB
15535 JJ=INT(LEN(C$)/TA)
15540 IF(JJ=LEN(C$)/TA AND(KY$<>TB$) THENRETURN
15550 C$=C$+" ":PRINT" ";:KY$=""
15560 GOTO15540
15570 PRINTKY$;:RETURN
15580 REM ZEICHENVERVIELFACHER
15590 ZZ$="":IFL<1 THENRETURN
15600 FORII=1 TOL
15610 ZZ$=ZZ$+Z$
15620 NEXTII
15630 RETURN
20000 REM STEUERZEICHEN F. C 64
20010 BS$=CHR$(20):REM BACK-SPACE
20020 TB$=CHR$(29):REM TABULATOR
20030 WR$=CHR$(13):REM WAGENRUECKLAUF
20040 RETURN
20050 REM DIE IN DEN ZEILEN 20010-20030 VERWENDETEN
20060 REM STEUERZEICHEN GELTEN FUER DEN C64
20070 REM FUER DEN TRS-80 Z.B. LAUTEN DIESE (8),(9),(13).
20080 REM
20090 REM
20100 REM
21000 REM DATEIVERWALTUNG
21010 REM GILT FUER C64
21100 REM DATEI OEFFNEN ZUM SCHREIBEN
21110 REM OPEN 1,1,1,DN$:RETURN
21200 REM DATEI OEFFNEN ZUM LESEN
21210 REM OPEN 1,1,0,DN$:RETURN
21300 QP$=S1$:GOSUB21400:S1$=QZ$:QP$=S2$:GOSUB21400
21310 S2$=QZ$
21320 REM DATEN (S1$,S2$) AUF KASSETTE SCHREIBEN
21330 REM PRINT#1,S1$:REM PRINT#1,S2$:RETURN
21400 REM UMWANDELN VON DOPPELPUNKT,KOMMA
21410 REM ANFUEHRUNGSZEICHEN USW.
21420 QZ$="":IFQP$="" THENQP$=" "
21430 FORQP=1 TOLEN(QP$)
21440 QQ$=MID$(QP$,QP,1):IFQQ$=" " THENQQ$=CHR$(252)
21450 IFQQ$="," THENQQ$=CHR$(250)
21460 IFQQ$=CHR$(34) THENQQ$=CHR$(253)
21470 IFQQ$=":" THENQQ$=CHR$(251)
21480 QZ$=QZ$+QQ$:NEXTQP:RETURN
21500 REM DATEN (S1$,S2$) VON KASSETTE LESEN
21510 REM INPUT#1,S1$:REM INPUT#1,S2$
21520 QP$=S1$:GOSUB21600:S1$=QZ$:QP$=S2$
21530 GOSUB21600:S2$=QZ$:RETURN
21600 REM UMWANDELN VON DOPPELPUNKT,KOMMA
21610 REM ANFUEHRUNGSZEICHEN USW.
21620 QZ$="":IFOP$="" THENOP$=" "
21630 FORQP=1 TOLEN(QP$)
21640 QQ$=MID$(QP$,QP,1):IFQQ$=CHR$(252) THENQQ$=" "
21650 IFQQ$=CHR$(250) THENQQ$=","
21660 IFQQ$=CHR$(251) THENQQ$=":"
21670 IFQQ$=CHR$(253) THENQQ$=CHR$(34)
21680 QZ$=QZ$+QQ$
21690 NEXTQP:RETURN
21700 REM DATEI SCHLIESSEN
21710 REM CLOSE 1:RETURN
30000 REM HINWEIS
30010 REM IM I-MODUS IST DER CURSOR AUSGESCHALTET.
30020 REM DIESER KANN DURCH EINE ENTSPRECHENDE
30030 REM ANWEISUNG IN ZEILE 15420 WIEDER
30040 REM EINGESCHALTET WERDEN.
30050 REM (BEI TRS-80 :PRINT CHR$(14); ).
30060 REM