forked from robhagemans/basicode
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathFileKopplung.bc3
214 lines (214 loc) · 9.83 KB
/
FileKopplung.bc3
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
1000 A=255:GOTO 20:REM --FILEKOPPLUNG--
1010 HT=HO:VT=VE:S$="":FOR I=1 TO HT:S$=S$+" ":NEXT I
1020 HL=0:HR=HT:VL=2:VR=VT-2:R$="":READ T$
1030 GOSUB 1410:HO=(HT-LEN (SR$)-6)/2:VE=0:GOSUB 110
1040 GOSUB 150:PRINT :PRINT :PRINT
1050 PRINT "Ausdruck ueber"
1060 PRINT :PRINT " 1 den Bildschirm,"
1070 PRINT " 2 den Drucker"
1080 PRINT :PRINT "Welche Nummer ?";:GOSUB 210
1090 SC=IN-48:PRINT SC:IF SC<> 2 THEN SC=1:GOTO 1220
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 GOSUB 210:IF IN=76 THEN VL=-1:GOTO 1220
1190 IF IN<> 69 THEN GOSUB 250:GOTO 1160
1200 PRINT :PRINT "Wieviel Leerzeilen"
1210 INPUT "am Seitenende ";VL:VR=VR+VL
1220 MM$="":IF HL>0 THEN MM$=LEFT$(S$,HL)
1230 GOSUB 1380:M$=MM$:AL=VL:IF SC=2 THEN GOSUB 1360
1240 IF LEN (R$)>HR-HL THEN GOSUB 1820
1250 GOSUB 1440:IF R$<> "" THEN R$=R$+" "
1260 R$=R$+D$:GOTO 1240
1270 IF SC=2 THEN SR$=M$+SR$:GOSUB 350:GOSUB 360:GOTO 1290
1280 GOSUB 120:PRINT M$;SR$;:VE=VE+1:HO=0:GOSUB 110:HL=0
1290 M$=MM$:AL=AL+1:IF AL<= VR THEN RETURN
1300 IF SC=1 THEN GOTO 1380
1310 IF VL>= 0 THEN FOR I=1 TO VL:GOSUB 360:NEXT I:GOTO 1350
1320 PRINT "Neues Blatt in Drucker einlegen"
1330 PRINT "druecke dann RETURN/ENTER"
1340 GOSUB 210:IF IN<> 13 THEN GOTO 1340
1350 AL=VL
1360 SR$=LEFT$(S$,(HR-HL-LEN (T$))/2)+T$:GOSUB 1270
1370 SR$="":GOSUB 1270:AL=VL:RETURN
1380 HO=3:VE=VT:GOSUB 110
1390 SR$="Weiter: druecke <RETURN/ENTER>":GOSUB 150
1400 GOSUB 210:IF IN<> 13 THEN GOTO 1400
1410 GOSUB 100:AL=VL:SR$=T$
1420 PRINT LEFT$(S$,(HT-LEN (SR$))/2-3);:GOSUB 150
1430 PRINT :PRINT :RETURN
1440 READ D$
1450 IF D$="" THEN GOTO 1440
1460 IF LEFT$(D$,1)="." THEN GOTO 1530
1470 IF LEFT$(D$,1)<> ">" THEN GOTO 1490
1480 D$=LEFT$(S$,23-LEN (R$))+MID$(D$,2):RETURN
1490 IF LEFT$(D$,1)<> "!" THEN RETURN
1500 IF D$="!" THEN D$="":GOTO 1520
1510 D$=MID$(D$,2)
1520 GOSUB 1760:GOTO 1450
1530 IF D$<> ".E" THEN GOTO 1580
1540 J=1:GOSUB 1760:T$="E N D E"
1550 SR$="":GOSUB 1270:GOSUB 1270:SR$=T$:GOSUB 1270:T$=""
1560 SR$="":GOSUB 1270:IF AL<> VL THEN GOTO 1560
1570 GOTO 950
1580 DD$=MID$(D$,2,1):D$=MID$(D$,3)
1590 IF DD$<> "R" THEN GOTO 1640
1600 IF SC=2 THEN RETURN
1610 IF LEN (R$)+6+LEN (D$)>= HR-HL THEN SR$=R$:GOSUB 1270:R$=""
1620 PRINT M$;R$;:SR$=D$:GOSUB 150:M$=""
1630 HL=HL+LEN (R$)+LEN (D$)+6:R$="":GOTO 1440
1640 IF DD$<> "M" THEN GOTO 1670
1650 I=VAL (D$):MM$="":IF I+HL=0 THEN GOTO 1440
1660 MM$=LEFT$(S$,I+HL):GOTO 1440
1670 IF DD$="P" THEN J=VAL (D$):GOSUB 1760:GOSUB 1780:GOTO 1440
1680 IF DD$="T" THEN T$=D$:J=10:GOSUB 1760:GOSUB 1780:GOTO 1600
1690 IF DD$="Q" THEN R$=R$+CHR$ (34)+D$:GOTO 1440
1700 IF DD$<> "F" THEN GOTO 1730
1710 J=VAL (D$):GOSUB 1760
1720 J=J-1:IF J>-1 THEN SR$="":GOSUB 1270:GOTO 1720
1730 IF DD$<> "C" THEN GOTO 1750
1740 SR$=LEFT$(S$,(HR-HL-LEN (D$))/2)+D$:GOSUB 1270
1750 GOTO 1440
1760 GOSUB 1820:SR$=R$:GOSUB 1270:R$="":J=J-1
1770 RETURN
1780 IF (SC=1) OR (AL+J>VR) THEN GOTO 1800
1790 SR$="":GOSUB 1270:GOSUB 1270:RETURN
1800 IF AL<> VL THEN SR$="":GOSUB 1270:GOTO 1800
1810 RETURN
1820 K=HR-HL+1-LEN (M$)
1830 IF LEN (R$)<= K THEN RETURN
1840 IF MID$(R$,K,1)=" " THEN GOTO 1870
1850 K=K-1:IF K>0 THEN GOTO 1840
1860 SR$="":GOTO 1880
1870 SR$=LEFT$(R$,K-1):R$=MID$(R$,K+1)
1880 GOSUB 1270:GOTO 1820
1890 REM
1900 REM ===============================
25000 DATA "Arbeit mit langen Files"
25010 DATA "!Bei einigen Rechnertypen kann es geschehen,"
25020 DATA "dass das Basicode-File sowohl im ASCII- als"
25030 DATA "auch im BASIC-Format gleichzeitig vorhanden"
25040 DATA "sein muessen. Das trifft z.B. fuer den KC"
25050 DATA "compact und die SCHNEIDER CPC zu. Damit ist"
25060 DATA "die maximal verarbeitbare Programmlaenge mit"
25070 DATA "ca.16 Kbyte nur etwa halb so gross wie auf"
25080 DATA "anderen Rechnern mit vergleichbarem"
25090 DATA "Speicherraum.","!!Das ASCII-File wird aber"
25100 DATA "nur waehrend des Ladens oder Savens benutzt."
25110 DATA "Das Programm selbst kann also durchaus die"
25120 DATA "30-KByte-Grenze erreichen oder, je nach RAM-"
25130 DATA "Ausstattung, auch ueberschreiten."
25140 DATA "In diesem Journal sollen Laden und"
25150 DATA "Saven solcher Files kurz beschrieben werden."
25160 DATA ".T 1. Abspeichern (SAVEN)"
25170 DATA "!!Ein im RAM befindliches File wird zuerst"
25180 DATA "als normales BASIC-File abgespeichert"
25190 DATA "(Sicherheitskopie).","!!Danach werden vom"
25200 DATA "File zwei Teile angefertigt, die sich in"
25210 DATA "ihrer Laenge wie 3:2 verhalten, wobei der"
25220 DATA "laengere Teil den Programmbeginn enthaelt."
25230 DATA ".P0","Beispiel:","!!Ein File bestehe aus"
25240 DATA "ca. 800 Zeilen (1000-8000, dazu ca. 100"
25250 DATA "DATA-Zeilen).","!Da DATA-Zeilen oft laenger"
25260 DATA "sind als normale Programmzeilen, wird wie"
25270 DATA "folgt geteilt: 1000-5999 und 6000-Schluss."
25280 DATA "Also werden zuerst alle Zeilen ab 6000"
25290 DATA "geloescht und das verbliebene File im"
25300 DATA "BASICODE-Format abgespeichert. Danach wird"
25310 DATA "unsere Sicherheitskopie erneut eingelesen,"
25320 DATA "diesmal die Zeilen bis 5999 geloescht und"
25330 DATA "wie vorhin im BASICODE-Format abgesavt."
25340 DATA "!!Das war's schon!"
25350 DATA ".T 2. Einlesen (LOAD)"
25360 DATA "!!Das Einlesen ueberlanger Files als Ganzes"
25370 DATA "wird wie ueblich vorgenommen. Sollte die"
25380 DATA "Speichergrenze erreicht werden, bricht der"
25390 DATA "BASCODER das Einlesen ab und uebersetzt den"
25400 DATA "vorhandenen Quellcode in 'sein' BASIC."
25410 DATA "Dieser Teil erhaelt ein definiertes Ende"
25420 DATA "(letzte Zeilennummer notieren!) und wird"
25430 DATA "im computereigenen Format, ggf. im ASCII-"
25440 DATA "Format, auf Kass. oder Disk. abgespeichert."
25450 DATA "!!Nun spult man das BASICODE-File auf den"
25460 DATA "Anfang zurueck, loescht das im RAM noch"
25470 DATA "vorhandene (Teil)programm und liest erneut"
25480 DATA "ein. Diesmal jedoch wird nach den ersten"
25490 DATA "eingelesenen Zeilen das Band bis etwa zu der"
25500 DATA "Stelle vorgespult, an der vorhin die"
25510 DATA "RAM-Grenze erreicht war und setzt das"
25520 DATA "Einlesen normal fort.","!!Ist der zweite"
25530 DATA "Einlesevorgang abgeschlossen, erscheint mit"
25540 DATA "Sicherheit zwar eine Fehlermeldung"
25550 DATA "(Lesefehler), die jedoch ignoriert wird."
25560 DATA "Der Bascoder wird trotzdem zum Uebersetzen"
25570 DATA "aufgefordert. Nach Abschluss dieses Vorganges"
25580 DATA "sind alle Zeilen, deren Nummer kleiner als"
25590 DATA "die vorhin notierte ist, zu loeschen."
25600 DATA "!!Zur Sicherheit wird auch dieses File im"
25610 DATA "computereigenen Format abgespeichert."
25620 DATA ".P0","Der folgende Teil ist vom Sprachumfang"
25630 DATA "des verwendeten BASIC-Interpreters abhaengig."
25640 DATA "!!Erlaubt er ein Einlesen eines Programmes,"
25650 DATA "ohne ein bereits vorhandenes zu loeschen,"
25660 DATA "und ordnet er die neuen Zeilen entsprechend"
25670 DATA "ihrer Nummer ein, kann sofort der vorhin"
25680 DATA "abgelegte erste Teil 'nachgeladen' werden."
25690 DATA "Damit ist das File komplett und kann als"
25700 DATA "Ganzes im computereigenen Format gesavt werden."
25710 DATA "!!Typische Befehle fuer das Mischen von"
25720 DATA "Zeilen sind:","!!- LOAD#1 (KC87)"
25730 DATA "!- MERGE (KC compact)"
25740 DATA ".P0","Setzt Ihr Rechner ein neues Programm"
25750 DATA "an ein vorhandenes ohne Ruecksicht auf"
25760 DATA "Zeilennummern einfach dahinter, so ist"
25770 DATA "zuerst der Programmspeicher komplett zu"
25780 DATA "loeschen (NEW) und danach die einzelnen"
25790 DATA "File-Teile entsprechend ihren Zeilennummern"
25800 DATA "aneinanderzufuegen."
25810 DATA "!!Typische Befehle: CLOAD (KC87)"
25820 DATA ".T 3. Einlesen geteilter BC-Files"
25830 DATA "!!Entscheidend ist, ob der Bascoder vor dem"
25840 DATA "Einlesen eines ASCII-Files ein vorhandenes"
25850 DATA "loescht oder nicht. Davon ist abhaengig, ob"
25860 DATA "im BASICODE- oder erst im BASIC-Format"
25870 DATA "'gemixt' werden kann."
25880 DATA ".P0","3.1. Koppeln im Basicode-Format"
25890 DATA "!!Bedingung ist, dass ein im Speicher"
25900 DATA "befindliches BASICODE- oder ein schon"
25910 DATA "uebersetztes BASIC-File erhalten bleibt."
25920 DATA "!In diesem Falle kann der zweite Programmteil"
25930 DATA "wie ein normales File (nach)geladen werden."
25940 DATA "!!(z.B. beim KC compact)"
25950 DATA "!!Evt. doppelt auftretende Zeilennummern"
25960 DATA "werden ueberschrieben, sodass der letzte"
25970 DATA "eingegebene Inhalt massgebend ist."
25980 DATA ".P0","3.2. Koppeln im BASIC-Format"
25990 DATA "!!Dieses Verfahren wird verwendet, wenn"
26000 DATA "der Programmspeicher vor dem Einlesen eines"
26010 DATA "neuen Files automatisch geloescht wird."
26020 DATA "!!Jedes Teilfile ist einzeln einzulesen,"
26030 DATA "in das rechnerspezifische BASIC zu konvertieren"
26040 DATA "und im computereigenen Format abzuspeichern."
26050 DATA "!Danach ist eine Kopplung beider Programmteile"
26060 DATA "mit den bekannten Befehlen (MERGE, LOAD#1 usw.)"
26070 DATA "im normalen BASIC-Format moeglich."
26080 DATA ".E"
32000 REM *****************************
32010 REM * *
32020 REM * Erstellt auf KC compact *
32030 REM * *
32040 REM * Andreas Garten *
32050 REM * Friedersd. Siedl. 2 *
32060 REM * PULSNITZ *
32070 REM * O-8514 *
32080 REM * *
32090 REM * 24.02.91 *
32100 REM * *
32110 REM *****************************
32120 REM Erstausstrahlung: Deutschlandsender Kultur
32130 REM -spezial 910320