C 64
Wettbewerb: Terminalprogramm

Terminalprogramm der Spitzenklasse

Eine harte Nuß haben wir unseren Lesern mit diesem Wettbewerb zu knacken gegeben. Trotzdem erreichten uns viele Einsendungen als Anwärter auf den ersten Preis.

Peter Falk konnte mit seinem Programm »Super Term 64« diesen Wettbewerb für sich entscheiden. Besonders erwähnenswert ist neben der Leistung dieses Programmes der übersichtliche und gut durchschaubare Programmierstil.

Der Autor: »Ich habe bei dem Terminal-Programm einerseits darauf Wert gelegt, daß es möglichst komfortabel und benutzerfreundlich ist, andererseits war mir aber auch ein großer Terminal-Speicher sehr wichtig. Deswegen habe ich auf unnötige »Verzierungen« verzichtet. So kann man bei den Übertragungs-Parametern zum Beispiel nur Baudrate, Datenbits und Stop-Bits in begrenztem Umfang ändern. Ich habe jedoch die Erfahrung gemacht, daß man bei allen Mailboxen eine einwandfreie Verbindung hat, wenn man die Normalparameter (300 Baud, 7 Bit, 1 Stop-Bit) benutzt. Der C 64 empfängt nämlich auch dann richtig, wenn er zum Beispiel auf 7 Datenbit eingestellt ist und die Gegenstelle mit 8 Bit sendet. Nur wenn man auch Steuerzeichen übertragen will, muß man auf 8 Datenbit umstellen.

Der große Terminal-Speicher wurde unter anderem dadurch erreicht, daß der gesamte vom ROM überlagerte RAM genutzt wird, indem das Betriebssystem beim Zugriff auf den RAM mit einer Assembler-Routine abgeschaltet wird. Weitere Maschinen-Routinen werden für das Laden von Daten in den Terminal-Speicher und für das Listen des Directorys benutzt. Sie werden alle über DATA-Zeilen im Lader eingelesen, so daß sie nachher keinen Speicherplatz mehr verbrauchen.

Bei der Programm-Übertragung nach der »Teleterm-Norm« können natürlich die selben Fehler auftreten wie bei Teleterm, nämlich dann, wenn sich zwei Übertragungsfehler in einem Block gegenseitig aufheben. Trotzdem ist die Übertragungs-Routine etwas sicherer als bei Teleterm. Am Anfang der Übertragung kann man die Länge einer Übertragungseinheit einstellen (bei Teleterm: »Programmsatzlänge«). Bei einer guten Verbindung kann sie ruhig auf 256 Byte gestellt werden; die Übertragung ist dann etwas schneller.«

Ladeprogramm

Nachdem man den Lader geladen und mit RUN gestartet hat, werden die Funktionstasten-Belegungen von der Diskette geladen, soweit sie schon vorhanden sind. Ansonsten wird der F-Tasten-Speicher gelöscht. Danach erscheint ein Menü, in dem man zwischen dem Terminal-Programm und dem Editor wählen kann. Wenn man 1 oder 2 gedrückt hat, wird das jeweilige Programm geladen und automatisch gestartet.

In die ersten Programmzeilen des Laders kann man individuelle Parameter schreiben. So kann man in Zeile 90 Hintergrund- und Rahmenfarbe eingeben (Schriftfarbe muß schwarz bleiben), in Zeile 110 den Preis für eine Telefon-Gebühreneinheit ändern und in den Zeilen 30 und 40 kann man Parameter zur Druckeranpassung eingeben (Sekundäradresse und maximal fünf sonstige Parameter).

In den Zeilen 350 bis 580 werden die Assembler-Routinen für Speicherzugriff, LOAD und Directory eingelesen.

Die vorhandenen Druckerparameter sind für einen Epson-Drucker mit Görlitz-Interface zugeschnitten (Sekundäradresse: 0, Parameter: »chr$(27)"t"«, also 27, 32, 84).

Terminalprogramm

Das Terminal-Programm muß mit dem Lader geladen werden, damit es funktionstüchtig ist. Im folgenden werden die einzelnen Menüpunkte erklärt:

1. Kommunizieren

Nachdem man 1 gedrückt hat, muß man eingeben, ob die Gegenstelle mit oder ohne Echo arbeitet. Danach wird man gefragt, ob man eine Berechnung der Telefongebühren wünscht. Wenn ja, dann müssen die Gebührenzone und der Gebührentarif (vor oder nach 18 Uhr plus Wochenende) eingegeben werden. Nachdem man die Verbindung hergestellt hat (was ja durchaus etwas länger dauern kann!), startet man den Terminal-Modus mit einem Tastendruck (die ←-Taste führt ins Menü zurück). Im Terminal-Modus wird nun eine Help-Liste ausgegeben, in der alle Funktionen aufgeführt sind, die man über »Commodore«-Taste ansprechen kann. »Commodore S« bewirkt, daß alle empfangenen Zeichen in den Terminal-Speicher geschrieben werden, der eine Größe von 46000 Byte hat. Auf ein automatisches Abspeichern habe ich wegen der Time-Out-Regelung der meisten Mailboxen verzichtet. Außerdem muß man schon ganz schön lange telefonieren, um den Speicher voll zu bekommen.

»Commodore E« beendet den Speichervorgang wieder.

»Commodore A« bewirkt, daß der Inhalt des Terminal-Speichers ausgesendet wird. So kann man zum Beispiel vorher abgefaßte Briefe übertragen. Abbruch mit ’←’. Auch Basic-Programme, die in einer Sequenz vorliegen, können so übertragen werden. Diese Prozedur reagiert auf die Steuerzeichen

»Commodore L« löscht den Terminal-Speicher.

»Commodore B« gibt an, wieviele Bytes im Speicher schon belegt und wieviele noch frei sind.

»Commodore G« zeigt die Zeit und die Gebühren an, die schon »vertelefoniert« sind.

»Commodore H« gibt die angezeigte Help-Liste nochmals aus.

»Commodore P« bietet eine Besonderheit: In diesem Modus ist es möglich Basic- und Maschinen-Programme zu übertragen und zwar nach der »TELETERM-Norm«. Man kann sich jetzt also Programme aus Mailboxen holen, die eine Teleterm-Box besitzen (zum Beispiel K.I.S., R.T.C., MHB etc.) oder man kann Programme unter Freunden und Bekannten austauschen, ohne Teleterm benutzen zu müssen. Es ist so eine weitgehend fehlerlose Übertragung von Programmen möglich.

Statt »Commodore £« und »1« bei Teleterm muß man hier »Commodore P« und »E« für empfangen drücken.

»Commodore ↑« unterbricht den Terminal-Modus, das heißt man kann jetzt alle Menüpunkte anwählen, ohne daß die eingestellten Parameter und die Gebühren verloren gehen. Man kann so also auch während man mit einer Mailbox kommuniziert, die anderen Menüpunkte ausführen.

»Commodore ←« beendet den Terminal-Modus. Hier werden jetzt die Zeit und die Gebühren angezeigt und abgespeichert, und dann der Gesamtbetrag angezeigt.

2. Daten speichern

Hier wird der Inhalt des Terminal-Speichers auf Diskette gespeichert. Man muß dafür den Namen angeben, unter dem abgespeichert werden soll.

RETURN bewirkt den Rücksprung ins Menüs.

3. Entspricht Punkt 2, nur daß hier geladen wird.

4. Daten ausgeben

Unter diesem Menüpunkt wird der Inhalt des Terminal-Speichers auf dem Bildschirm oder dem Drucker ausgegeben.

SPACE hält die Ausgabe an. Sie kann dann mit einer beliebigen Taste fortgesetzt werden.

5. Funktionstasten

Hier kann man sich eine Übersicht der F-Tasten-Belegungen ausgeben lassen und sie gegebenenfalls ändern und abspeichern.

6. Parameter ändern

Die Baudrate und die Anzahl der Daten- und Stop-Bits können hier verändert werden.

7. Gebühren ansehen

Wenn man mit der Gebühren-Berechnung arbeitet, kann man hier den abgespeicherten Gesamtbetrag abrufen und die Gebühren am Ablesetag löschen.

8. Diskbefehle

Unter diesem Punkt kann man Befehle wie zum Beispiel Validate, Scratch, Rename etc. der Floppy übermitteln. Mit dem Dollarzeichen kann man das Inhaltsverzeichnis auflisten.

Editor-Programm

Mit dem Editor kann man Anzeigen oder Briefe, die man in Mailboxen schreiben will, erstellen. Der Text wird nach dem Erstellen sofort in den Terminal-Speicher geschrieben, so daß er nicht erst auf Diskette gespeichert zu werden braucht, bevor man das Terminal-Programm lädt. Der Speicherplatz für Variablen ist deswegen nur so groß, daß der Editor maximal 100 Zeilen aufnehmen kann.

Wenn man den Menüpunkt 1 anwählt, wird man zuerst gefragt, ob der Terminal-Speicher gelöscht werden soll. Antwortet man mit »ja«, so kann man einen neuen Text schreiben. Ansonsten wird der Inhalt des Terminal-Speichers in den Editor übertragen. Hier kann man nun seinen Text eingeben und mit den Cursor-Tasten frei editieren. Man muß allerdings in jeder Zeile, die übernommen werden soll, RETURN drücken. Wenn der Cursor am Anfang einer Zeile steht, kann man vor dieser Zeile mit CTRL-I (Insert) eine Zeile einfügen und mit CTRL-D (Delete) kann man die Zeile löschen. Wenn die maximale Anzahl von 100 Zeilen erreicht ist, wechselt die Rahmenfarbe in Rot und es wird keine weitere Zeile mehr übernommen.

Die ←-Taste führt ins Menü zurück, nachdem der Text in den Terminal-Speicher geschrieben wurde.

Die anderen Menüpunkte entsprechen denen des Terminal-Programms.

(Peter Falk/rg)
|
10 rem written by peter falk
20 :
30 poke840,0:rem sekundaer-adresse
40 poke841,27:poke842,32:poke843,84:poke844,0:poke845,0:rem drucker-parameter
50 :
60 poke 55,79:poke 56,60:rem speicher-
70 poke643,79:poke644,60:rem grenze
80 clr                  :rem auf 15439
90 poke838,6:poke839,15:rem farben
100 poke53280,peek(838):poke53281,peek(839)
110 g%=100*0.23:poke828,g%:rem gebuehren-einheit
120 print"{blk}{clr}{down}";chr$(14);chr$(8)
130 gosub350:gosub600:poke650,128
140 poke832,80:rem pufferanfang
150 poke833,60:rem bei 15440
160 print"{clr}{down}{down}     *******************************"
170 print"     *                             *"
180 print"     *   S U P E R - T E R M  64   *"
190 print"     *   {CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}   *"
200 print"     *                             *"
210 print"     *    Written by Peter Falk    *"
220 print"     *                             *"
230 print"     *    (c) 64'er  1985          *"
240 print"     *                             *"
250 print"     *******************************"
260 print"{down}{down}        (1) - Terminalprogramm{down}"
270 print"        (2) - Editor{down}{down}"
280 print"        (0) - Programm beenden"
290 getq$:ifq$<>"0"andq$<>"1"andq$<>"2"then290
300 ifq$="0"thenend
310 print"{down}{down}              Loading..."
320 ifq$="1"thenload"terminal",8
330 ifq$="2"thenload"editor",8
340 :
350 rem * peek+poke fuer ueberl. ram *
360 data165,20,72,165,21,72,32,247,183,120,165,1,41,252,133,1,160,0,177,20
370 data168,165,1,9,3,133,1,88,104,133,21,104,133,20,76,162,179,32,253,174
380 data32,138,173,32,247,183,32,253,174,32,158,183,120,169,52,133,1,138,160
390 data0,145,20,169,55,133,1,88,96
400 fori=698to765:reada:pokei,a:next
410 poke785,186:poke786,2
420 :
430 rem * load *
440 data160,0,169,8,32,180,255,169,98,32,150,255,173,64,3,133,174,173,65
450 data3,133,175,32,19,238,145,174,230,174,208,2,230,175,169,208,197,175
460 data208,8,169,0,133,174,169,224,133,175,165,175,240,4,36,144,80,223
470 data165,174,141,64,3,165,175,141,65,3,32,171,255,96,0
480 fori=848to917:reada:pokei,a:next
490 :
500 rem * directory *
510 data169,36,133,251,169,251,133,187,169,0,133,188,169,1,133,183,169,8
520 data133,186,169,96,133,185,32,213,243,165,186,32,180,255,165,185,32,150
530 data255,169,0,133,144,160,3,132,251,32,165,255,133,252,164,144,208,47
540 data32,165,255,164,144,208,40,164,251,136,208,233,166,252,32,205,189
550 data169,32,32,210,255,32,165,255,166,144,208,18,170,240,6,32,210,255
560 data76,226,3,169,13,32,210,255,160,2,208,198,32,66,246,96
570 fori=918to1022:reada:pokei,a:next
580 return
590 :
600 rem * f-tasten laden *
610 open1,8,2,"f-tasten,s,r"
620 open2,8,15
630 input#2,f
640 iff=0thenprint"{down}{down}{down}  Die Funktionstasten werden geladen."
650 print"{down}{down}{down}            Bitte warten..."
660 iff=0then700
670 fors=54000to54559
680 sys735,s,13:next
690 goto720
700 fors=54000to54559
710 get#1,a$:sys735,s,asc(a$):next
720 close1:close2
730 return
 10 REM WRITTEN BY PETER FALK 
 20 : 
 30 POKE 840,0:REM SEKUNDAER-ADRESSE 
 40 POKE 841,27:POKE 842,32:POKE 843,84:POKE 844,0:POKE 845,0:REM DRUCKER-PARAMETER 
 50 : 
 60 POKE 55,79:POKE 56,60:REM SPEICHER- 
 70 POKE 643,79:POKE 644,60:REM GRENZE 
 80 CLR                  :REM AUF 15439 
 90 POKE 838,6:POKE 839,15:REM FARBEN 
 100 POKE 53280,PEEK (838):POKE 53281,PEEK (839) 
 110 G%=100*0.23:POKE 828,G%:REM GEBUEHREN-EINHEIT 
 120 PRINT"{BLACK,CLR,DOWN}";CHR$ (14);CHR$ (8) 
 130 GOSUB 350:GOSUB 600:POKE 650,128 
 140 POKE 832,80:REM PUFFERANFANG 
 150 POKE 833,60:REM BEI 15440 
 160 PRINT"{CLR,2DOWN,5SPACE}*******************************" 
 170 PRINT"{5SPACE}*{29SPACE}*" 
 180 PRINT"{5SPACE}*{3SPACE}S U P E R - T E R M{2SPACE}64{3SPACE}*" 
 190 PRINT"{5SPACE}*{3SPACE}YYYYYYYYYYYYYYYYYYYYYYY{3SPACE}*" 
 200 PRINT"{5SPACE}*{29SPACE}*" 
 210 PRINT"{5SPACE}*{4SPACE}WRITTEN BY PETER FALK{4SPACE}*" 
 220 PRINT"{5SPACE}*{29SPACE}*" 
 230 PRINT"{5SPACE}*{4SPACE}(C) 64'ER{2SPACE}1985{10SPACE}*" 
 240 PRINT"{5SPACE}*{29SPACE}*" 
 250 PRINT"{5SPACE}*******************************" 
 260 PRINT"{2DOWN,8SPACE}(1) - TERMINALPROGRAMM{DOWN}" 
 270 PRINT"{8SPACE}(2) - EDITOR{2DOWN}" 
 280 PRINT"{8SPACE}(0) - PROGRAMM BEENDEN" 
 290 GET Q$:IF Q$<>"0"AND Q$<>"1"AND Q$<>"2" THEN290 
 300 IF Q$="0" THENEND 
 310 PRINT"{2DOWN,14SPACE}LOADING..." 
 320 IF Q$="1" THENLOAD "TERMINAL",8 
 330 IF Q$="2" THENLOAD "EDITOR",8 
 340 : 
 350 REM * PEEK+POKE FUER UEBERL. RAM * 
 360 DATA 165,20,72,165,21,72,32,247,183,120,165,1,41,252,133,1,160,0,177,20 
 370 DATA 168,165,1,9,3,133,1,88,104,133,21,104,133,20,76,162,179,32,253,174 
 380 DATA 32,138,173,32,247,183,32,253,174,32,158,183,120,169,52,133,1,138,160 
 390 DATA 0,145,20,169,55,133,1,88,96 
 400 FOR I=698 TO765:READ A:POKE I,A:NEXT 
 410 POKE 785,186:POKE 786,2 
 420 : 
 430 REM * LOAD * 
 440 DATA 160,0,169,8,32,180,255,169,98,32,150,255,173,64,3,133,174,173,65 
 450 DATA 3,133,175,32,19,238,145,174,230,174,208,2,230,175,169,208,197,175 
 460 DATA 208,8,169,0,133,174,169,224,133,175,165,175,240,4,36,144,80,223 
 470 DATA 165,174,141,64,3,165,175,141,65,3,32,171,255,96,0 
 480 FOR I=848 TO917:READ A:POKE I,A:NEXT 
 490 : 
 500 REM * DIRECTORY * 
 510 DATA 169,36,133,251,169,251,133,187,169,0,133,188,169,1,133,183,169,8 
 520 DATA 133,186,169,96,133,185,32,213,243,165,186,32,180,255,165,185,32,150 
 530 DATA 255,169,0,133,144,160,3,132,251,32,165,255,133,252,164,144,208,47 
 540 DATA 32,165,255,164,144,208,40,164,251,136,208,233,166,252,32,205,189 
 550 DATA 169,32,32,210,255,32,165,255,166,144,208,18,170,240,6,32,210,255 
 560 DATA 76,226,3,169,13,32,210,255,160,2,208,198,32,66,246,96 
 570 FOR I=918 TO1022:READ A:POKE I,A:NEXT 
 580 RETURN 
 590 : 
 600 REM * F-TASTEN LADEN * 
 610 OPEN 1,8,2,"F-TASTEN,S,R" 
 620 OPEN 2,8,15 
 630 INPUT#2,F 
 640 IF F=0 THENPRINT"{3DOWN,2SPACE}DIE FUNKTIONSTASTEN WERDEN GELADEN." 
 650 PRINT"{3DOWN,12SPACE}BITTE WARTEN..." 
 660 IF F=0 THEN700 
 670 FOR S=54000 TO54559 
 680 SYS 735,S,13:NEXT 
 690 GOTO 720 
 700 FOR S=54000 TO54559 
 710 GET #1,A$:SYS 735,S,ASC (A$):NEXT 
 720 CLOSE 1:CLOSE 2 
 730 RETURN 
Listing »Lader«.
|
10 clr
20 dim ze$(100)
30 sg=peek(832)+peek(833)*256
40 print:print"{blk}{clr}{down}"
50 print"        {CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}"
60 print"        {rvon}  ** EDITOR-MENUE **  "
70 print"        {CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{down}{down}{down}"
80 print"       (1) - Text schreiben/editieren{down}"
90 print"       (2) - Text speichern{down}"
100 print"       (3) - Text laden{down}"
110 print"       (4) - Text ausgeben{down}"
120 print"       (5) - Diskbefehle{down}"
130 print"       (6) - Puffer loeschen{down}{down}"
140 print"       (7) - Terminal-Programm"
150 get q$:if q$="" then 150
160 on val(q$) goto 210,1930,2140,1650,2540,2430,190
170 if q$="0" then gosub 2370:end
180 goto 150
190 gosub 2370:load"terminal",8
200 :
210 rem ** text schreiben **
220 print"{clr}":gosub 2300
230 print"{down}{down}{down}        Puffer loeschen (j/n)?"
240 get q$:if q$<>"j" and q$<>"n" then 240
250 print"{clr}"
260 if q$="j" then max=0:goto 320
270 gosub 1370:print"{clr}"
280 for nr=0 to 22
290 print ze$(nr)
300 next nr
310 print"{home}"
320 nr=0
330 gosub 1030
340 get q$:if q$="" or q$="{home}" or q$="{clr}" then 340
350 if q$="_" then max=max-1:gosub 1490:goto 40
360 gosub 1080
370 if asc(q$)>31 and asc(q$)<128 then 460
380 if (q$="{left}" or q$=chr$(20)) and pos(0)=0 then 330
390 if q$="{rght}" and pos(0)=38 then 330
400 if q$="{up}" then gosub 1220:goto 330
410 if q$="{down}" then gosub 1300:goto 330
420 if q$=chr$(13) or q$=chr$(141) then 490
430 if q$="{inst}" and peek(1024+38+peek(214)*40)<>32 then 330
440 if q$="{ensh}" and pos(0)=0 then gosub 680:goto 330
450 if q$="{CTRL-D}" and pos(0)=0 then gosub 860:goto 330
460 print q$;:poke 212,0
470 if pos(0)<39 then 330
480 :
490 rem * einlesen *
500 if nr=100 then print"{up}":goto 330
510 print chr$(13);"{up}";:poke 211,0
520 ze$(nr)=""
530 open 1,3
540 for x=1 to 39
550 get#1,e$
560 ze$(nr)=ze$(nr)+e$
570 next x
580 close 1
590 n=39
600 if mid$(ze$(nr),n,1)<>" " then 620
610 n=n-1:if n>0 then 600
620 ze$(nr)=left$(ze$(nr),n)
630 nr=nr+1:if nr>max then max=nr
640 print
650 if nr=100 then poke 53280,2
660 goto 330
670 :
680 rem * insert *
690 if max=100 then return
700 z=peek(214):n=nr
710 for x=peek(214) to 23
720 print"                                       ";chr$(20);" ":next x
730 poke 214,z+1:print"{up}"
740 e=nr+22-z:if e>max then e=max
750 for n=nr to e
760 print ze$(n)
770 next n
780 poke 214,z:print"{up}"
790 for z=max to nr step-1
800 ze$(z+1)=ze$(z)
810 next z
820 max=max+1
830 ze$(nr)=""
840 return
850 :
860 rem * delete *
870 if max=0 then return
880 z=peek(214)
890 for x=peek(214) to 23
900 print"                                       ";chr$(20);" ":next x
910 poke 214,z:print"{up}"
920 e=nr+24-z:if e>max then e=max
930 for n=nr+1 to e
940 print ze$(n)
950 next n
960 poke 214,z:print"{up}"
970 max=max-1
980 for z=nr to max
990 ze$(z)=ze$(z+1)
1000 next z
1010 return
1020 :
1030 rem * cursor ein *
1040 p=peek(209)+peek(210)*256+peek(211)
1050 if peek(p)<128 then poke p,peek(p)+128:poke 54272+p,0
1060 return
1070 :
1080 rem * cursor aus *
1090 p=peek(209)+peek(210)*256+peek(211)
1100 if peek(p)>127 then poke p,peek(p)-128
1110 return
1120 :
1130 rem * zurueckblaettern *
1140 print"{clr}"
1150 nr=nr-22:if nr<0 then nr=0
1160 for z=nr to nr+22
1170 print ze$(z)
1180 next z
1190 print"{home}"
1200 return
1210 :
1220 rem * cursor up *
1230 if nr=100 then poke 53280,peek(838)
1240 if peek(214)=1 and nr>0 then gosub 1130:return
1250 if peek(214)=1 then return
1260 print"{up}";
1270 nr=nr-1
1280 return
1290 :
1300 rem * cursor down *
1310 if nr=max then return
1320 if peek(214)>23 then print ze$(nr):nr=nr+1:return
1330 print"{down}";
1340 nr=nr+1
1350 return
1360 :
1370 rem * speicher-->variable *
1380 print"{clr}{down}{down}{down}{down}{down}         Einen Moment bitte..."
1390 nr=0:ze$(0)=""
1400 for sz=15440 to sg
1410 e=usr(sz)
1420 if e=13 then nr=nr+1:ze$(nr)="":goto 1450
1430 if len(ze$(nr))=39 then nr=nr+1:ze$(nr)=""
1440 ze$(nr)=ze$(nr)+chr$(e)
1450 if nr<100 then next sz
1460 if nr=100 then print"{down}{down}{down}{down}        Achtung, Text zu lang !!!":wait 198,255
1470 max=nr:poke 198,0:return
1480 :
1490 rem * variable-->speicher *
1500 poke 53280,peek(838)
1510 print"{clr}{down}{down}{down}{down}{down}         Einen Moment bitte...{down}{down}"
1520 sg=15440
1530 for nr=0 to max
1540 if ze$(nr)="" then 1590
1550 for z=1 to len(ze$(nr))
1560 q$=mid$(ze$(nr),z,1)
1570 poke sg,asc(q$):sg=sg+1
1580 next z:ze$(nr)=""
1590 poke sg,13:sg=sg+1
1600 next nr
1610 sg=sg-1
1620 gosub 2300:wait 198,255
1630 return
1640 :
1650 rem ** daten ausgeben **
1660 print"{clr}"
1670 gosub 2300
1680 if sg=15440 then 40
1690 print"{down}'F1' = Bildschirm"
1700 print"'F3' = Drucker"
1710 print"'F5' = Hardcopy{down}"
1720 wait 198,255
1730 d=0
1740 for sz=15440 to sg
1750 if peek(198)=0 then 1830
1760 get b$
1770 if b$=" " then wait 198,255:get b$
1780 if b$="_" then poke 53280,6:close 1:goto 40
1790 if b$="{f3}" and d=0 then z=peek(840):poke 53280,2
1800 if b$="{f3}"andd=0thenopen1,4,z:forz=841to845:print#1,chr$(peek(z));:next:d=1
1810 if b$="{f1}" then d=0:close 1:poke 53280,peek(838)
1820 if b$="{f5}" then gosub 2720
1830 c$=chr$(usr(sz))
1840 print c$;
1850 if d then print#1,c$;
1860 if sz=53247 then sz=57343
1870 next sz
1880 close 1:poke 53280,peek(838)
1890 get b$:if b$="" then 1890
1900 if b$="{f5}" then gosub 2720
1910 goto 40
1920 :
1930 rem ** daten speichern **
1940 print"{clr}"
1950 gosub 2300
1960 if sg=15440 then 40
1970 dn$=""
1980 input"{down}{down}Dateiname ";dn$
1990 if dn$="" then 40
2000 open 1,8,2,dn$+",s,w"
2010 gosub 2660
2020 print#1,chr$(usr(15440));
2030 if st<>0 then 2100
2040 cmd 1
2050 for sz=15441 to sg
2060 print chr$(usr(sz));
2070 if sz=53247 then sz=57343
2080 next sz
2090 print#1,"";
2100 close 1:close 15
2110 if val(b$)<>0 then wait 198,255
2120 goto 40
2130 :
2140 rem *** daten laden ***
2150 dn$=""
2160 input"{clr}{down}{down}{down}Dateiname ";dn$
2170 if dn$="" then 40
2180 sg=15440
2190 open 1,8,2,dn$+",s,r"
2200 gosub 2660
2210 if val(b$)<>0 then 2250
2220 poke 144,0:poke 832,80:poke 833,60
2230 sys 848:rem load-routine
2240 sg=peek(832)+peek(833)*256-1
2250 close 1:close 15
2260 if sg=-1 then print"{down}{down}Achtung, Puffer voll !!!{down}{down}":sg=65535
2270 gosub 2300:wait 198,255
2280 goto 40
2290 :
2300 rem ** speichergrenze **
2310 if sg<53248 then by=sg-15440
2320 if sg>57343 then by=sg-15440-4095
2330 print:print"Bytes belegt:";by
2340 print"Bytes frei  :";46000-by
2350 return
2360 :
2370 rem ** lo/hi-berechnung **
2380 lo=sg-int(sg/256)*256
2390 hi=int(sg/256)
2400 poke 832,lo:poke 833,hi
2410 return
2420 :
2430 rem ** puffer loeschen **
2440 print"{clr}{down}{down}"
2450 input"Puffer loeschen (j/n)";q$
2460 if q$<>"j" and q$<>"n" then 2450
2470 print"{down}"
2480 if q$="n" then gosub 2300:wait 198,255:goto 40
2490 sg=15440
2500 gosub 2300
2510 wait 198,255
2520 goto 40
2530 :
2540 rem ** diskbefehle **
2550 print"{clr}{down}{down}'$' = Directory{down}{down}"
2560 print spc(13) chr$(34);:poke 212,0:print"{up}"
2570 poke 198,1:poke 631,29
2580 input"Diskbefehl ";b$
2590 if b$="$" then print:sys 918:wait 198,255:goto 40
2600 open 15,8,15
2610 print#15,b$
2620 gosub 2680
2630 close 15
2640 wait 198,255:goto 40
2650 :
2660 rem ** diskstatus **
2670 open 15,8,15
2680 input#15,b$,c$
2690 print"{down}{down}Diskstatus: "b$;" ";c$;"{down}"
2700 return
2710 :
2720 rem * hardcopy *
2730 d=0:close 1:z=peek(840):open 1,4,z
2740 for z=841 to 845:print#1,chr$(peek(z));:next
2750 open 2,3
2760 print"{home}";
2770 print#1
2780 for z=1 to 25
2790 for sp=1 to 40
2800 get#2,e$:print#1,e$;
2810 next sp
2820 next z
2830 print#1:close 1:close 2
2840 return
 10 CLR 
 20 DIM ZE$(100) 
 30 SG=PEEK (832)+PEEK (833)*256 
 40 PRINT:PRINT"{BLACK,CLR,DOWN}" 
 50 PRINT"{8SPACE}PPPPPPPPPPPPPPPPPPPPPP" 
 60 PRINT"{8SPACE,RVSON,2SPACE}** EDITOR-MENUE **{2SPACE}" 
 70 PRINT"{8SPACE}YYYYYYYYYYYYYYYYYYYYYY{3DOWN}" 
 80 PRINT"{7SPACE}(1) - TEXT SCHREIBEN/EDITIEREN{DOWN}" 
 90 PRINT"{7SPACE}(2) - TEXT SPEICHERN{DOWN}" 
 100 PRINT"{7SPACE}(3) - TEXT LADEN{DOWN}" 
 110 PRINT"{7SPACE}(4) - TEXT AUSGEBEN{DOWN}" 
 120 PRINT"{7SPACE}(5) - DISKBEFEHLE{DOWN}" 
 130 PRINT"{7SPACE}(6) - PUFFER LOESCHEN{2DOWN}" 
 140 PRINT"{7SPACE}(7) - TERMINAL-PROGRAMM" 
 150 GET Q$:IF Q$=""  THEN 150 
 160 ON VAL (Q$) GOTO 210,1930,2140,1650,2540,2430,190 
 170 IF Q$="0"  THEN GOSUB 2370:END 
 180 GOTO 150 
 190 GOSUB 2370:LOAD "TERMINAL",8 
 200 : 
 210 REM ** TEXT SCHREIBEN ** 
 220 PRINT"{CLR}":GOSUB 2300 
 230 PRINT"{3DOWN,8SPACE}PUFFER LOESCHEN (J/N)?" 
 240 GET Q$:IF Q$<>"J" AND Q$<>"N"  THEN 240 
 250 PRINT"{CLR}" 
 260 IF Q$="J"  THEN MAX=0:GOTO 320 
 270 GOSUB 1370:PRINT"{CLR}" 
 280 FOR NR=0  TO 22 
 290 PRINT ZE$(NR) 
 300 NEXT NR 
 310 PRINT"{HOME}" 
 320 NR=0 
 330 GOSUB 1030 
 340 GET Q$:IF Q$="" OR Q$="{HOME}" OR Q$="{CLR}"  THEN 340 
 350 IF Q$="←"  THEN MAX=MAX-1:GOSUB 1490:GOTO 40 
 360 GOSUB 1080 
 370 IF ASC (Q$)>31 AND ASC (Q$)<128  THEN 460 
 380 IF (Q$="{LEFT}" OR Q$=CHR$ (20)) AND POS (0)=0  THEN 330 
 390 IF Q$="{RIGHT}" AND POS (0)=38  THEN 330 
 400 IF Q$="{UP}"  THEN GOSUB 1220:GOTO 330 
 410 IF Q$="{DOWN}"  THEN GOSUB 1300:GOTO 330 
 420 IF Q$=CHR$ (13) OR Q$=CHR$ (141)  THEN 490 
 430 IF Q$="{INST}" AND PEEK (1024+38+PEEK (214)*40)<>32  THEN 330 
 440 IF Q$="{CTRL-I}" AND POS (0)=0  THEN GOSUB 680:GOTO 330 
 450 IF Q$="{CTRL-D}" AND POS (0)=0  THEN GOSUB 860:GOTO 330 
 460 PRINT Q$;:POKE 212,0 
 470 IF POS (0)<39  THEN 330 
 480 : 
 490 REM * EINLESEN * 
 500 IF NR=100  THEN PRINT"{UP}":GOTO 330 
 510 PRINT CHR$ (13);"{UP}";:POKE 211,0 
 520 ZE$(NR)="" 
 530 OPEN 1,3 
 540 FOR X=1  TO 39 
 550 GET #1,E$ 
 560 ZE$(NR)=ZE$(NR)+E$ 
 570 NEXT X 
 580 CLOSE 1 
 590 N=39 
 600 IF MID$ (ZE$(NR),N,1)<>" "  THEN 620 
 610 N=N-1:IF N>0  THEN 600 
 620 ZE$(NR)=LEFT$ (ZE$(NR),N) 
 630 NR=NR+1:IF NR>MAX  THEN MAX=NR 
 640 PRINT 
 650 IF NR=100  THEN POKE 53280,2 
 660 GOTO 330 
 670 : 
 680 REM * INSERT * 
 690 IF MAX=100  THEN RETURN 
 700 Z=PEEK (214):N=NR 
 710 FOR X=PEEK (214)  TO 23 
 720 PRINT"{39SPACE}";CHR$ (20);" ":NEXT X 
 730 POKE 214,Z+1:PRINT"{UP}" 
 740 E=NR+22-Z:IF E>MAX  THEN E=MAX 
 750 FOR N=NR  TO E 
 760 PRINT ZE$(N) 
 770 NEXT N 
 780 POKE 214,Z:PRINT"{UP}" 
 790 FOR Z=MAX  TO NR STEP -1 
 800 ZE$(Z+1)=ZE$(Z) 
 810 NEXT Z 
 820 MAX=MAX+1 
 830 ZE$(NR)="" 
 840 RETURN 
 850 : 
 860 REM * DELETE * 
 870 IF MAX=0  THEN RETURN 
 880 Z=PEEK (214) 
 890 FOR X=PEEK (214)  TO 23 
 900 PRINT"{39SPACE}";CHR$ (20);" ":NEXT X 
 910 POKE 214,Z:PRINT"{UP}" 
 920 E=NR+24-Z:IF E>MAX  THEN E=MAX 
 930 FOR N=NR+1  TO E 
 940 PRINT ZE$(N) 
 950 NEXT N 
 960 POKE 214,Z:PRINT"{UP}" 
 970 MAX=MAX-1 
 980 FOR Z=NR  TO MAX 
 990 ZE$(Z)=ZE$(Z+1) 
 1000 NEXT Z 
 1010 RETURN 
 1020 : 
 1030 REM * CURSOR EIN * 
 1040 P=PEEK (209)+PEEK (210)*256+PEEK (211) 
 1050 IF PEEK (P)<128  THEN POKE P,PEEK (P)+128:POKE 54272+P,0 
 1060 RETURN 
 1070 : 
 1080 REM * CURSOR AUS * 
 1090 P=PEEK (209)+PEEK (210)*256+PEEK (211) 
 1100 IF PEEK (P)>127  THEN POKE P,PEEK (P)-128 
 1110 RETURN 
 1120 : 
 1130 REM * ZURUECKBLAETTERN * 
 1140 PRINT"{CLR}" 
 1150 NR=NR-22:IF NR<0  THEN NR=0 
 1160 FOR Z=NR  TO NR+22 
 1170 PRINT ZE$(Z) 
 1180 NEXT Z 
 1190 PRINT"{HOME}" 
 1200 RETURN 
 1210 : 
 1220 REM * CURSOR UP * 
 1230 IF NR=100  THEN POKE 53280,PEEK (838) 
 1240 IF PEEK (214)=1 AND NR>0  THEN GOSUB 1130:RETURN 
 1250 IF PEEK (214)=1  THEN RETURN 
 1260 PRINT"{UP}"; 
 1270 NR=NR-1 
 1280 RETURN 
 1290 : 
 1300 REM * CURSOR DOWN * 
 1310 IF NR=MAX  THEN RETURN 
 1320 IF PEEK (214)>23  THEN PRINT ZE$(NR):NR=NR+1:RETURN 
 1330 PRINT"{DOWN}"; 
 1340 NR=NR+1 
 1350 RETURN 
 1360 : 
 1370 REM * SPEICHER-->VARIABLE * 
 1380 PRINT"{CLR,5DOWN,9SPACE}EINEN MOMENT BITTE..." 
 1390 NR=0:ZE$(0)="" 
 1400 FOR SZ=15440  TO SG 
 1410 E=USR (SZ) 
 1420 IF E=13  THEN NR=NR+1:ZE$(NR)="":GOTO 1450 
 1430 IF LEN (ZE$(NR))=39  THEN NR=NR+1:ZE$(NR)="" 
 1440 ZE$(NR)=ZE$(NR)+CHR$ (E) 
 1450 IF NR<100  THEN NEXT SZ 
 1460 IF NR=100  THEN PRINT"{4DOWN,8SPACE}ACHTUNG, TEXT ZU LANG !!!":WAIT 198,255 
 1470 MAX=NR:POKE 198,0:RETURN 
 1480 : 
 1490 REM * VARIABLE-->SPEICHER * 
 1500 POKE 53280,PEEK (838) 
 1510 PRINT"{CLR,5DOWN,9SPACE}EINEN MOMENT BITTE...{2DOWN}" 
 1520 SG=15440 
 1530 FOR NR=0  TO MAX 
 1540 IF ZE$(NR)=""  THEN 1590 
 1550 FOR Z=1  TO LEN (ZE$(NR)) 
 1560 Q$=MID$ (ZE$(NR),Z,1) 
 1570 POKE SG,ASC (Q$):SG=SG+1 
 1580 NEXT Z:ZE$(NR)="" 
 1590 POKE SG,13:SG=SG+1 
 1600 NEXT NR 
 1610 SG=SG-1 
 1620 GOSUB 2300:WAIT 198,255 
 1630 RETURN 
 1640 : 
 1650 REM ** DATEN AUSGEBEN ** 
 1660 PRINT"{CLR}" 
 1670 GOSUB 2300 
 1680 IF SG=15440  THEN 40 
 1690 PRINT"{DOWN}'F1' = BILDSCHIRM" 
 1700 PRINT"'F3' = DRUCKER" 
 1710 PRINT"'F5' = HARDCOPY{DOWN}" 
 1720 WAIT 198,255 
 1730 D=0 
 1740 FOR SZ=15440  TO SG 
 1750 IF PEEK (198)=0  THEN 1830 
 1760 GET B$ 
 1770 IF B$=" "  THEN WAIT 198,255:GET B$ 
 1780 IF B$="←"  THEN POKE 53280,6:CLOSE 1:GOTO 40 
 1790 IF B$="{F3}" AND D=0  THEN Z=PEEK (840):POKE 53280,2 
 1800 IF B$="{F3}"AND D=0 THENOPEN 1,4,Z:FOR Z=841 TO845:PRINT#1,CHR$ (PEEK (Z));:NEXT :D=1 
 1810 IF B$="{F1}"  THEN D=0:CLOSE 1:POKE 53280,PEEK (838) 
 1820 IF B$="{F5}"  THEN GOSUB 2720 
 1830 C$=CHR$ (USR (SZ)) 
 1840 PRINT C$; 
 1850 IF D  THEN PRINT#1,C$; 
 1860 IF SZ=53247  THEN SZ=57343 
 1870 NEXT SZ 
 1880 CLOSE 1:POKE 53280,PEEK (838) 
 1890 GET B$:IF B$=""  THEN 1890 
 1900 IF B$="{F5}"  THEN GOSUB 2720 
 1910 GOTO 40 
 1920 : 
 1930 REM ** DATEN SPEICHERN ** 
 1940 PRINT"{CLR}" 
 1950 GOSUB 2300 
 1960 IF SG=15440  THEN 40 
 1970 DN$="" 
 1980 INPUT"{2DOWN}DATEINAME ";DN$ 
 1990 IF DN$=""  THEN 40 
 2000 OPEN 1,8,2,DN$+",S,W" 
 2010 GOSUB 2660 
 2020 PRINT#1,CHR$ (USR (15440)); 
 2030 IF ST<>0  THEN 2100 
 2040 CMD 1 
 2050 FOR SZ=15441  TO SG 
 2060 PRINT CHR$ (USR (SZ)); 
 2070 IF SZ=53247  THEN SZ=57343 
 2080 NEXT SZ 
 2090 PRINT#1,""; 
 2100 CLOSE 1:CLOSE 15 
 2110 IF VAL (B$)<>0  THEN WAIT 198,255 
 2120 GOTO 40 
 2130 : 
 2140 REM *** DATEN LADEN *** 
 2150 DN$="" 
 2160 INPUT"{CLR,3DOWN}DATEINAME ";DN$ 
 2170 IF DN$=""  THEN 40 
 2180 SG=15440 
 2190 OPEN 1,8,2,DN$+",S,R" 
 2200 GOSUB 2660 
 2210 IF VAL (B$)<>0  THEN 2250 
 2220 POKE 144,0:POKE 832,80:POKE 833,60 
 2230 SYS 848:REM LOAD-ROUTINE 
 2240 SG=PEEK (832)+PEEK (833)*256-1 
 2250 CLOSE 1:CLOSE 15 
 2260 IF SG=-1  THEN PRINT"{2DOWN}ACHTUNG, PUFFER VOLL !!!{2DOWN}":SG=65535 
 2270 GOSUB 2300:WAIT 198,255 
 2280 GOTO 40 
 2290 : 
 2300 REM ** SPEICHERGRENZE ** 
 2310 IF SG<53248  THEN BY=SG-15440 
 2320 IF SG>57343  THEN BY=SG-15440-4095 
 2330 PRINT:PRINT"BYTES BELEGT:";BY 
 2340 PRINT"BYTES FREI{2SPACE}:";46000-BY 
 2350 RETURN 
 2360 : 
 2370 REM ** LO/HI-BERECHNUNG ** 
 2380 LO=SG-INT (SG/256)*256 
 2390 HI=INT (SG/256) 
 2400 POKE 832,LO:POKE 833,HI 
 2410 RETURN 
 2420 : 
 2430 REM ** PUFFER LOESCHEN ** 
 2440 PRINT"{CLR,2DOWN}" 
 2450 INPUT"PUFFER LOESCHEN (J/N)";Q$ 
 2460 IF Q$<>"J" AND Q$<>"N"  THEN 2450 
 2470 PRINT"{DOWN}" 
 2480 IF Q$="N"  THEN GOSUB 2300:WAIT 198,255:GOTO 40 
 2490 SG=15440 
 2500 GOSUB 2300 
 2510 WAIT 198,255 
 2520 GOTO 40 
 2530 : 
 2540 REM ** DISKBEFEHLE ** 
 2550 PRINT"{CLR,2DOWN}'$' = DIRECTORY{2DOWN}" 
 2560 PRINT SPC( 13) CHR$ (34);:POKE 212,0:PRINT"{UP}" 
 2570 POKE 198,1:POKE 631,29 
 2580 INPUT"DISKBEFEHL ";B$ 
 2590 IF B$="$"  THEN PRINT:SYS 918:WAIT 198,255:GOTO 40 
 2600 OPEN 15,8,15 
 2610 PRINT#15,B$ 
 2620 GOSUB 2680 
 2630 CLOSE 15 
 2640 WAIT 198,255:GOTO 40 
 2650 : 
 2660 REM ** DISKSTATUS ** 
 2670 OPEN 15,8,15 
 2680 INPUT#15,B$,C$ 
 2690 PRINT"{2DOWN}DISKSTATUS: "B$;" ";C$;"{DOWN}" 
 2700 RETURN 
 2710 : 
 2720 REM * HARDCOPY * 
 2730 D=0:CLOSE 1:Z=PEEK (840):OPEN 1,4,Z 
 2740 FOR Z=841  TO 845:PRINT#1,CHR$ (PEEK (Z));:NEXT 
 2750 OPEN 2,3 
 2760 PRINT"{HOME}"; 
 2770 PRINT#1 
 2780 FOR Z=1  TO 25 
 2790 FOR SP=1  TO 40 
 2800 GET #2,E$:PRINT#1,E$; 
 2810 NEXT SP 
 2820 NEXT Z 
 2830 PRINT#1:CLOSE 1:CLOSE 2 
 2840 RETURN 
Listing »Editor«.
|
10 rem written by peter falk
20 rem 828=preis einer einheit
30 poke 829,32:rem 7 datenbits
40 poke 830,6:rem 300 baud
50 poke 831,0:rem 1 stopbit
60 rem 832,80:rem (lo) pufferanfang
70 rem 833,60:rem (hi) bei 15440
80 rem 834=gegenstelle duplex
90 rem 835=gebuehren ja/nein
100 rem 836=gebuehren-zone
110 rem 837=gebuehren-tarif
120 rem 838=rahmen-farbe
130 rem 839=hintergrund-farbe
140 rem 840-845=drucker-parameter
150 :
160 rem ** menue **
170 print:print"{clr}{blk}{down}{down}       {CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}"
180 print"       {rvon}  ** TERMINAL-MENUE **  "
190 print"       {CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{down}{down}"
200 print"       (1) - Kommunizieren";a$;"{down}"
210 print"       (2) - Daten speichern{down}"
220 print"       (3) - Daten laden{down}"
230 print"       (4) - Daten ausgeben{down}"
240 print"       (5) - Funktionstasten{down}"
250 print"       (6) - Parameter{down}"
260 print"       (7) - Gebuehren{down}"
270 print"       (8) - Diskbefehle{down}"
280 print"       (9) - Editor laden"
290 get q$:if q$="" then 290
300 if q$="1" and a$="(Fortsetzung)" then a$="":goto 480
310 on val(q$) goto 360,2390,2610,2770,4110,3070,3850,4810,340
320 if q$="0" then end
330 goto 290
340 load"editor",8
350 :
360 rem *** kommunizieren ***
370 input"{clr}{down}{down}  Gegenstelle {rvon}H{rvof}alb- / {rvon}V{rvof}ollduplex   v{left}{left}{left}";q$
380 if q$="v" then poke 834,1
390 if q$="h" then poke 834,0
400 print"{down}{down}  Gebuehren-Berechnung (j/n)?{down}"
410 get q$:if q$<>"j" and q$<>"n" then 410
420 poke 835,0
430 if q$="j" then poke 835,1:gosub 3390
440 print"{down}{down}           Zum Starten Taste !"
450 get q$:if q$="" then 450
460 if q$="_" then 160
470 ti$="000000"
480 baud=peek(830):db=peek(829):sb=peek(831)
490 open 2,2,0,chr$(baud+db+sb)+chr$(0):get#2,q$
500 print"{clr}";
510 gosub 4990
520 gosub 4030
530 dp=-peek(834)
540 gb=-peek(835)
550 get#2,q$:print
560 :
570 gosub 4700
580 get b$:if b$="" then 650
590 gosub 4760
600 if asc(b$)>132 and asc(b$)<141 then gosub 4480:goto 570
610 if peek(653)=2 then 2250
620 gosub 2100
630 :
640 gosub 4700
650 if peek(667)=peek(668) then 580
660 gosub 4760
670 get#2,c$:if c$="" then c$=chr$(0)
680 gosub 2170
690 if not sp then 570
700 poke sg,d:sg=sg+1:if sg=53248 then sg=57344
710 if sg=65536 then poke 53280,peek(838):sp=0:sg=65535
720 goto 570
730 :
740 rem * programm-uebertragung *
750 gosub 3970:close 2:clr
760 baud=peek(830)
770 open 2,2,0,chr$(baud)+chr$(0):get#2,q$
780 input"{clr}{down}{down}{down}Programm-Name:";dn$:if dn$="" then print:close 2:goto 480
790 dim b$(258)
800 open 1,8,15,"m-w"+chr$(7)+chr$(28)+chr$(1)+chr$(15):close 1
810 print"{down}{down}{rvon}S{rvof}enden / {rvon}E{rvof}mpfangen ?"
820 get q$:if q$<>"s" and q$<>"e" then 820
830 if q$="e" then 1440
840 :
850 rem * senden *
860 print"{down}{down}Laenge einer Uebertragungs-Einheit"
870 input"in Bytes (max.256)   80{left}{left}{left}{left}";e
880 if e<1 or e>256 then 860
890 open 1,8,2,dn$+",p,r"
900 gosub 4930
910 if val(b$)<>0 then 1360
920 poke 668,peek(667):poke 198,0
930 print#2,chr$(2);
940 get#2,e$:get q$
950 for w=1 to 100:next
960 if e$="" and q$<>"_" then 930
970 if q$="_" then 1360
980 print"{down}Beginn der Uebertragung.{down}"
990 for w=1 to 250:next
1000 poke 688,peek(667):by=0
1010 :
1020 for z=1 to e
1030 get#1,b$(z):if b$(z)="" then b$(z)=chr$(0)
1040 if st=0 then next z
1050 f=st:if z>e then z=e
1060 for w=1 to 1000:next
1070 su=0:get#2,e$
1080 for x=1 to z
1090 print#2,b$(x);
1100 su=su+asc(b$(x))
1110 next x
1120 if peek(669)<>peek(670) then 1120
1130 poke 668,peek(667)
1140 get q$:if peek(667)=peek(668) and q$<>"_" then 1140
1150 if q$="_" then 1360
1160 get#2,lo$:if lo$="" then lo$=chr$(0)
1170 get q$:if peek(667)=peek(668) and q$<>"_" then 1170
1180 if q$="_" then 1360
1190 get#2,hi$:if hi$="" then hi$=chr$(0)
1200 se=asc(lo$)+256*asc(hi$)
1210 if se<>su then 1300
1220 by=by+z
1230 print" OK.       ";int(by/254)+1;"{left}. BLOCK"
1240 if f<>0 then 1360
1250 print#2,chr$(2);
1260 get q$:if peek(667)=peek(668) and q$<>"_" then 1260
1270 if q$="_" then 1360
1280 goto 1020
1290 :
1300 rem error
1310 print#2,chr$(1);:print" ERROR !"
1320 get q$:if peek(667)=peek(668) and q$<>"_" then 1320
1330 for w=1 to 1000:next
1340 if q$<>"_" then 1070
1350 :
1360 if q$="_" then print"{down}ABBRUCH !{down}"
1370 print#2,chr$(3);
1380 print"{down}Ende der Uebertragung."
1390 close 1:close 15:close 2
1400 print"{down}{down}           Taste druecken !"
1410 wait 198,255:poke 198,0
1420 goto 480
1430 :
1440 rem * empfangen *
1450 open 1,8,2,dn$+",p,w"
1460 gosub 4930
1470 if val(b$)<>0 then 1800
1480 poke 668,peek(667):poke 198,0
1490 print#2,chr$(2);
1500 get#2,e$:get q$
1510 for w=1 to 100:next
1520 if e$="" and q$<>"_" then 1490
1530 if q$="_" then 1800
1540 print"{down}Beginn der Uebertragung.{down}"
1550 for w=1 to 100:next
1560 get#2,e$:poke 668,peek(667):by=0
1570 su=0:z=1
1580 get q$:if peek(667)=peek(668) and q$<>"_" then 1580
1590 if q$="_" then 1800
1600 at=ti
1610 if ti-at>30 then 1660
1620 if peek(667)=peek(668) then 1610
1630 get#2,b$(z):if b$(z)="" then b$(z)=chr$(0)
1640 su=su+asc(b$(z)):z=z+1
1650 if z<258 then 1600
1660 hi=int(su/256):lo=su-256*hi
1670 print#2,chr$(lo);chr$(hi);
1680 get q$:if peek(667)=peek(668) and q$<>"_" then 1680
1690 if q$="_" then 1800
1700 get#2,e$
1710 if e$<>chr$(2)and e$<>chr$(3)then 1870
1720 print#2,chr$(4);
1730 for x=1 to z
1740 print#1,b$(x);
1750 next x
1760 get#2,q$
1770 by=by+z
1780 print" OK.       ";int(by/254)+1;"{left}. BLOCK"
1790 if e$=chr$(2) then 1570
1800 if q$="_" then print"{down}ABBRUCH !{down}"
1810 print"{down}Ende der Uebertragung."
1820 close 1:close 15:close 2
1830 print"{down}{down}           Taste druecken !"
1840 wait 198,255:poke 198,0
1850 goto 480
1860 :
1870 rem error
1880 print" ERROR !"
1890 print#2,chr$(3);
1900 poke 668,peek(667)
1910 goto 1570
1920 :
1930 rem * daten senden *
1940 for sz=15440 to sg
1950 get q$:if q$="_" then print:return
1960 if q$=" " then get e$:if e$<>" " then 1960
1970 for w=1 to 24:next
1980 get#2,c$:if c$=chr$(24) then print:return
1990 if c$<>chr$(19) then 2010
2000 get#2,q$:if q$<>chr$(17) and peek(203)=64 then 2000
2010 sys 62595:rem cia's setzen
2020 b$=chr$(usr(sz)):get#2,c$
2030 if dp then poke 646,0:print b$;
2040 if sz=53247 then sz=57343
2050 gosub 2100
2060 if d=13 then for w=1 to 100:next
2070 next sz
2080 return
2090 :
2100 rem * umformen/senden *
2110 e=0:d=asc(b$):if d>64 and d<91 then e=32
2120 if d=20 then d=8
2130 d=d+e
2140 print#2,chr$(d);:if not dp then poke 646,0:print b$;
2150 return
2160 :
2170 rem * umformen/ausgeben *
2180 e=0:d=asc(c$):if d>64 and d<91 then e=32
2190 if d>96 and d<123then e=-32
2200 if d=8 then d=20
2210 d=d+e
2220 poke646,0:poke199,0:print chr$(d);
2230 return
2240 :
2250 rem * tastatur-auswertung *
2260 e=asc(b$)
2270 if e=174 and sg<65536 then sp=-1:poke 53280,2:goto 570
2280 if e=182 then sg=15440:gosub 3970:goto 570
2290 if e=177 then sp=0:poke 53280,peek(838):goto 570
2300 if e=176 and sg>15440 then gosub 1930:goto 570
2310 if e=165 then gosub 3520:goto 570
2320 if e=191 then gosub 4050:goto 570
2330 if e=175 then 740
2340 ife=95thenpoke53280,peek(838):gosub3970:gosub3520:close2:wait198,1:goto160
2350 ife=222thenpoke53280,peek(838):gosub3970:close2:a$="(Fortsetzung)":goto160
2360 if e=180 then gosub 4990:goto 570
2370 goto 570
2380 :
2390 rem *** daten speichern ***
2400 print"{clr}"
2410 gosub 4030
2420 if sg=15440 then 160
2430 dn$=""
2440 input"{down}{down}Dateiname ";dn$
2450 if dn$="" then 160
2460 open 1,8,2,dn$+",s,w"
2470 gosub 4930
2480 print#1,chr$(usr(15440));
2490 if st<>0 then 2570
2500 cmd 1:a=15441
2510 e=sg:if e>53247 then e=53247
2520 for sz=a to e
2530 print chr$(usr(sz));
2540 next
2550 if e<sg then a=57344:e=sg:goto2520
2560 print#1,"";
2570 close 1:close 15
2580 if val(b$)<>0 then wait 198,255
2590 goto 160
2600 :
2610 rem *** daten laden ***
2620 dn$=""
2630 input"{clr}{down}{down}{down}Dateiname ";dn$
2640 if dn$="" then 160
2650 sg=15440
2660 open 1,8,2,dn$+",s,r"
2670 gosub 4930
2680 if val(b$)<>0 then 2720
2690 poke 144,0:poke 832,80:poke 833,60
2700 sys 848:rem load-routine
2710 sg=peek(832)+peek(833)*256-1
2720 close 1:close 15
2730 if sg=-1 then print"{down}{down}Achtung, Puffer voll !!!{down}{down}":sg=65535
2740 gosub 3970:poke 198,0:wait 198,255
2750 goto 160
2760 :
2770 rem *** daten ausgeben ***
2780 print"{clr}"
2790 gosub 4030
2800 if sg=15440 then 160
2810 print"{down}'F1' = Bildschirm"
2820 print"'F3' = Drucker"
2830 print"'F5' = Hardcopy{down}"
2840 wait 198,255
2850 d=0
2860 for sz=15440 to sg
2870 if peek(198)<>0 then 2980
2880 c$=chr$(usr(sz))
2890 print c$;
2900 if d then print#1,c$;
2910 if sz=53247 then sz=57343
2920 next sz
2930 close 1:poke 53280,peek(838)
2940 get b$:if b$="" then 2940
2950 if b$="{f5}" then gosub 5130
2960 goto 160
2970 :
2980 get b$
2990 if b$=" " then wait 198,255:get b$
3000 if b$="_" then close 1:poke 53280,peek(838):goto 160
3010 if b$="{f3}" and d=0 then e=peek(840):poke 53280,2
3020 if b$="{f3}"andd=0thenopen1,4,e:fore=841to845:print#1,chr$(peek(e));:next:d=1
3030 if b$="{f1}" then d=0:close 1:poke 53280,peek(838)
3040 if b$="{f5}" then gosub 5130
3050 goto 2880
3060 :
3070 rem ** parameter **
3080 print"{clr}{down}{down}"
3090 :
3100 rem baudrate
3110 if peek(830)=3 then baud=110
3120 if peek(830)=5 then baud=150
3130 if peek(830)=6 then baud=300
3140 if peek(830)=7 then baud=600
3150 print spc(22) baud;"{up}"
3160 input"110,150,300,600 Baud ";baud
3170 if baud=110 then poke 830,3
3180 if baud=150 then poke 830,5
3190 if baud=300 then poke 830,6
3200 if baud=600 then poke 830,7
3210 :
3220 rem datenbits
3230 if peek(829)=32 then db=7
3240 if peek(829)=0 then db=8
3250 print"{down}{down}{down}";spc(20) db;"{up}"
3260 input"7 oder 8 Datenbits ";db
3270 if db=7 then poke 829,32
3280 if db=8 then poke 829,0
3290 :
3300 rem stopbits
3310 if peek(831)=0 then sb=1
3320 if peek(831)=128 then sb=2
3330 print"{down}{down}{down}";spc(19) sb;"{up}"
3340 input"1 oder 2 Stopbits ";sb
3350 if sb=1 then poke 831,0
3360 if sb=2 then poke 831,128
3370 goto 160
3380 :
3390 rem ** gebuehren berechnen **
3400 print"{down}  0. Zone: Nahgespraech"
3410 print"{down}  1. Zone: unter 50 KM"
3420 print"{down}  2. Zone: 50 - 100 KM"
3430 print"{down}  3. Zone: ueber 100 KM"
3440 zo=4:input"{down}  Zone 0, 1, 2 oder 3 ";zo
3450 if zo<>0 and zo<>1 and zo<>2 and zo<>3 then 3440
3460 input"{down}  {rvon}N{rvof}ormal- / {rvon}B{rvof}illig-Tarif ";q$
3470 if q$<>"n" and q$<>"b" then 3460
3480 poke 836,zo
3490 poke 837,asc(q$)
3500 return
3510 :
3520 if not gb then return
3530 zo=peek(836)
3540 q$=chr$(peek(837))
3550 zeit=val(left$(ti$,2))*3600+val(mid$(ti$,3,2))*60+val(right$(ti$,2))
3560 if q$="b" then 3620
3570 if zo=0 then betrag=int(zeit/480+1)*peek(828)/100
3580 if zo=1 then betrag=int(zeit/45+1)*peek(828)/100
3590 if zo=2 then betrag=int(zeit/20+1)*peek(828)/100
3600 if zo=3 then betrag=int(zeit/12+1)*peek(828)/100
3610 goto 3650
3620 if zo=0 then betrag=int(zeit/720+1)*peek(828)/100
3630 if zo=1 then betrag=int(zeit/67.5+1)*peek(828)/100
3640 if zo=2 or zo=3 then betrag=int(zeit/38.6+1)*peek(828)/100
3650 print
3660 print"Zeit  =";ti$
3670 print"Betrag=";betrag;"DM"
3680 print
3690 if b$<>"_" then 3830
3700 print"Gebuehren speichern (j/n)?"
3710 get q$
3720 if q$<>"j" and q$<>"n" then 3710
3730 if q$="n" then 3830
3740 open 1,8,2,"gebuehren,s,r"
3750 input#1,gesb
3760 close 1
3770 gesb=gesb+betrag
3780 open 1,8,2,"@:gebuehren,s,w"
3790 print#1,gesb
3800 close 1
3810 print"{down}Gesamtbetrag=";gesb;"DM"
3820 wait 198,255
3830 poke 198,1:return
3840 :
3850 rem ** gebuehren ansehen **
3860 print"{clr}{down}{down}"
3870 input"Gebuehren loeschen   n{left}{left}{left}";q$
3880 if q$<>"j" and q$<>"n" then 3870
3890 if q$="j" then open 1,8,2,"@:gebuehren,s,w":print#1,0:close 1
3900 open 1,8,2,"gebuehren,s,r"
3910 input#1,gesb
3920 close 1
3930 print"{down}{down}Gesamtbetrag=";gesb;"DM"
3940 wait 198,255
3950 goto 160
3960 :
3970 rem ** lo/hi-berechnung **
3980 poke 832,sg-int(sg/256)*256
3990 poke 833,int(sg/256)
4000 gosub 4030
4010 return
4020 :
4030 rem ** speichergrenze **
4040 sg=peek(832)+peek(833)*256
4050 if sg<53248 then by=sg-15440
4060 if sg>57343 then by=sg-15440-4095
4070 print:print"Bytes belegt:";by
4080 print"Bytes frei  :";46000-by
4090 return
4100 :
4110 rem ** funktionstasten **
4120 print"{clr}{down}{down}            FUNKTIONSTASTEN"
4130 print"            {CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{down}"
4140 for ft=0 to 7
4150 print" F";ft+1;":  ";chr$(34);
4160 sz=54000+70*ft
4170 e=usr(sz):if e=13 then 4210
4180 print chr$(e);
4190 sz=sz+1
4200 goto 4170
4210 print
4220 next ft
4230 print"{down}            Aendern (j/n)?"
4240 get q$:if q$<>"j" and q$<>"n" then4240
4250 if q$="n" then 160
4260 print"{home}{down}{down}{down}{down}"
4270 for ft=0 to 7
4280 poke 631,29:poke 198,1
4290 input"{rght}{rght}{rght}{rght}{rght}{rght}";q$
4300 if q$="" then 4370
4310 q$=left$(q$,69)+chr$(13)
4320 sz=54000+70*ft
4330 for sp=1 to len(q$)
4340 sys 735,sz,asc(mid$(q$,sp,1))
4350 sz=sz+1
4360 next sp
4370 next ft
4380 print"{down}            Speichern (j/n)?"
4390 get q$:if q$<>"j" and q$<>"n" then4390
4400 if q$="n" then 160
4410 open 1,8,2,"@:f-tasten,s,w"
4420 for sz=54000 to 54559
4430 print#1,chr$(usr(sz));
4440 next sz
4450 close 1
4460 goto 160
4470 :
4480 rem ** funktionstasten senden **
4490 d=asc(b$)
4500 if d=133 then ft=0
4510 if d=134 then ft=2
4520 if d=135 then ft=4
4530 if d=136 then ft=6
4540 if d=137 then ft=1
4550 if d=138 then ft=3
4560 if d=139 then ft=5
4570 if d=140 then ft=7
4580 sz=54000+70*ft
4590 for w=1 to 30:next
4600 sys 62595
4610 b$=chr$(usr(sz))
4620 get#2,q$
4630 if dp then print b$;
4640 gosub 2100
4650 sz=sz+1
4660 if b$<>chr$(13) then 4590
4670 poke 668,peek(667):get#2,q$
4680 return
4690 :
4700 rem * cursor ein *
4710 e=peek(209)+peek(210)*256+peek(211)
4720 if peek(e)<128 then poke e,peek(e)+128
4730 poke 54272+e,0
4740 return
4750 :
4760 rem * cursor aus *
4770 e=peek(209)+peek(210)*256+peek(211)
4780 if peek(e)>127 then poke e,peek(e)-128
4790 return
4800 :
4810 rem ** diskbefehle **
4820 print"{clr}{down}{down}'$' = Directory{down}{down}"
4830 print spc(13) chr$(34);:poke 212,0:print"{up}"
4840 poke 198,1:poke 631,29
4850 input"Diskbefehl ";b$
4860 if b$="$" then print:sys 918:wait 198,255:goto 160
4870 open 15,8,15
4880 print#15,b$
4890 gosub 4950
4900 close 15
4910 wait 198,255:goto 160
4920 :
4930 rem ** diskstatus **
4940 open 15,8,15
4950 input#15,b$,c$
4960 print"{down}{down}Diskstatus: "b$;" ";c$;"{down}"
4970 return
4980 :
4990 rem * help *
5000 print
5010 print"'C= S':Daten speichern"
5020 print"'C= E':Speichern Ende"
5030 print"'C= A':Daten aussenden"
5040 print"'C= L':Puffer loeschen"
5050 print"'C= G':Gebuehren"
5060 print"'C= B':Bytes frei"
5070 print"'C= P':Prg-Uebertragung"
5080 print"'C= _':Off-line"
5090 print"'C= ^':Unterbrechung"
5100 print"'C= H':Help"
5110 return
5120 :
5130 rem * hardcopy *
5140 d=0:close 1:e=peek(840):open 1,4,e
5150 for e=841 to 845:print#1,chr$(peek(e));:next
5160 open 2,3
5170 print"{home}";
5180 print#1
5190 for z=1 to 25
5200 for sp=1 to 40
5210 get#2,e$:print#1,e$;
5220 next sp
5230 next z
5240 print#1:close 1:close 2
5250 return
 10 REM WRITTEN BY PETER FALK 
 20 REM 828=PREIS EINER EINHEIT 
 30 POKE 829,32:REM 7 DATENBITS 
 40 POKE 830,6:REM 300 BAUD 
 50 POKE 831,0:REM 1 STOPBIT 
 60 REM 832,80:REM (LO) PUFFERANFANG 
 70 REM 833,60:REM (HI) BEI 15440 
 80 REM 834=GEGENSTELLE DUPLEX 
 90 REM 835=GEBUEHREN JA/NEIN 
 100 REM 836=GEBUEHREN-ZONE 
 110 REM 837=GEBUEHREN-TARIF 
 120 REM 838=RAHMEN-FARBE 
 130 REM 839=HINTERGRUND-FARBE 
 140 REM 840-845=DRUCKER-PARAMETER 
 150 : 
 160 REM ** MENUE ** 
 170 PRINT:PRINT"{CLR,BLACK,2DOWN,7SPACE}PPPPPPPPPPPPPPPPPPPPPPPP" 
 180 PRINT"{7SPACE,RVSON,2SPACE}** TERMINAL-MENUE **{2SPACE}" 
 190 PRINT"{7SPACE}YYYYYYYYYYYYYYYYYYYYYYYY{2DOWN}" 
 200 PRINT"{7SPACE}(1) - KOMMUNIZIEREN";A$;"{DOWN}" 
 210 PRINT"{7SPACE}(2) - DATEN SPEICHERN{DOWN}" 
 220 PRINT"{7SPACE}(3) - DATEN LADEN{DOWN}" 
 230 PRINT"{7SPACE}(4) - DATEN AUSGEBEN{DOWN}" 
 240 PRINT"{7SPACE}(5) - FUNKTIONSTASTEN{DOWN}" 
 250 PRINT"{7SPACE}(6) - PARAMETER{DOWN}" 
 260 PRINT"{7SPACE}(7) - GEBUEHREN{DOWN}" 
 270 PRINT"{7SPACE}(8) - DISKBEFEHLE{DOWN}" 
 280 PRINT"{7SPACE}(9) - EDITOR LADEN" 
 290 GET Q$:IF Q$=""  THEN 290 
 300 IF Q$="1" AND A$="(FORTSETZUNG)"  THEN A$="":GOTO 480 
 310 ON VAL (Q$) GOTO 360,2390,2610,2770,4110,3070,3850,4810,340 
 320 IF Q$="0"  THEN END 
 330 GOTO 290 
 340 LOAD "EDITOR",8 
 350 : 
 360 REM *** KOMMUNIZIEREN *** 
 370 INPUT"{CLR,2DOWN,2SPACE}GEGENSTELLE{SPACE,RVSON}H{RVOFF}ALB- /{SPACE,RVSON}V{RVOFF}OLLDUPLEX{SPACE,2SPACE}V{3LEFT}";Q$ 
 380 IF Q$="V"  THEN POKE 834,1 
 390 IF Q$="H"  THEN POKE 834,0 
 400 PRINT"{2DOWN,2SPACE}GEBUEHREN-BERECHNUNG (J/N)?{DOWN}" 
 410 GET Q$:IF Q$<>"J" AND Q$<>"N"  THEN 410 
 420 POKE 835,0 
 430 IF Q$="J"  THEN POKE 835,1:GOSUB 3390 
 440 PRINT"{2DOWN,11SPACE}ZUM STARTEN TASTE !" 
 450 GET Q$:IF Q$=""  THEN 450 
 460 IF Q$="←"  THEN 160 
 470 TI$="000000" 
 480 BAUD=PEEK (830):DB=PEEK (829):SB=PEEK (831) 
 490 OPEN 2,2,0,CHR$ (BAUD+DB+SB)+CHR$ (0):GET #2,Q$ 
 500 PRINT"{CLR}"; 
 510 GOSUB 4990 
 520 GOSUB 4030 
 530 DP=-PEEK (834) 
 540 GB=-PEEK (835) 
 550 GET #2,Q$:PRINT 
 560 : 
 570 GOSUB 4700 
 580 GET B$:IF B$=""  THEN 650 
 590 GOSUB 4760 
 600 IF ASC (B$)>132 AND ASC (B$)<141  THEN GOSUB 4480:GOTO 570 
 610 IF PEEK (653)=2  THEN 2250 
 620 GOSUB 2100 
 630 : 
 640 GOSUB 4700 
 650 IF PEEK (667)=PEEK (668)  THEN 580 
 660 GOSUB 4760 
 670 GET #2,C$:IF C$=""  THEN C$=CHR$ (0) 
 680 GOSUB 2170 
 690 IF NOT SP  THEN 570 
 700 POKE SG,D:SG=SG+1:IF SG=53248  THEN SG=57344 
 710 IF SG=65536  THEN POKE 53280,PEEK (838):SP=0:SG=65535 
 720 GOTO 570 
 730 : 
 740 REM * PROGRAMM-UEBERTRAGUNG * 
 750 GOSUB 3970:CLOSE 2:CLR 
 760 BAUD=PEEK (830) 
 770 OPEN 2,2,0,CHR$ (BAUD)+CHR$ (0):GET #2,Q$ 
 780 INPUT"{CLR,3DOWN}PROGRAMM-NAME:";DN$:IF DN$=""  THEN PRINT:CLOSE 2:GOTO 480 
 790 DIM B$(258) 
 800 OPEN 1,8,15,"M-W"+CHR$ (7)+CHR$ (28)+CHR$ (1)+CHR$ (15):CLOSE 1 
 810 PRINT"{2DOWN,RVSON}S{RVOFF}ENDEN /{SPACE,RVSON}E{RVOFF}MPFANGEN ?" 
 820 GET Q$:IF Q$<>"S" AND Q$<>"E"  THEN 820 
 830 IF Q$="E"  THEN 1440 
 840 : 
 850 REM * SENDEN * 
 860 PRINT"{2DOWN}LAENGE EINER UEBERTRAGUNGS-EINHEIT" 
 870 INPUT"IN BYTES (MAX.256){3SPACE}80{4LEFT}";E 
 880 IF E<1 OR E>256  THEN 860 
 890 OPEN 1,8,2,DN$+",P,R" 
 900 GOSUB 4930 
 910 IF VAL (B$)<>0  THEN 1360 
 920 POKE 668,PEEK (667):POKE 198,0 
 930 PRINT#2,CHR$ (2); 
 940 GET #2,E$:GET Q$ 
 950 FOR W=1  TO 100:NEXT 
 960 IF E$="" AND Q$<>"←"  THEN 930 
 970 IF Q$="←"  THEN 1360 
 980 PRINT"{DOWN}BEGINN DER UEBERTRAGUNG.{DOWN}" 
 990 FOR W=1  TO 250:NEXT 
 1000 POKE 688,PEEK (667):BY=0 
 1010 : 
 1020 FOR Z=1  TO E 
 1030 GET #1,B$(Z):IF B$(Z)=""  THEN B$(Z)=CHR$ (0) 
 1040 IF ST=0  THEN NEXT Z 
 1050 F=ST:IF Z>E  THEN Z=E 
 1060 FOR W=1  TO 1000:NEXT 
 1070 SU=0:GET #2,E$ 
 1080 FOR X=1  TO Z 
 1090 PRINT#2,B$(X); 
 1100 SU=SU+ASC (B$(X)) 
 1110 NEXT X 
 1120 IF PEEK (669)<>PEEK (670)  THEN 1120 
 1130 POKE 668,PEEK (667) 
 1140 GET Q$:IF PEEK (667)=PEEK (668) AND Q$<>"←"  THEN 1140 
 1150 IF Q$="←"  THEN 1360 
 1160 GET #2,LO$:IF LO$=""  THEN LO$=CHR$ (0) 
 1170 GET Q$:IF PEEK (667)=PEEK (668) AND Q$<>"←"  THEN 1170 
 1180 IF Q$="←"  THEN 1360 
 1190 GET #2,HI$:IF HI$=""  THEN HI$=CHR$ (0) 
 1200 SE=ASC (LO$)+256*ASC (HI$) 
 1210 IF SE<>SU  THEN 1300 
 1220 BY=BY+Z 
 1230 PRINT" OK.{7SPACE}";INT (BY/254)+1;"{LEFT}. BLOCK" 
 1240 IF F<>0  THEN 1360 
 1250 PRINT#2,CHR$ (2); 
 1260 GET Q$:IF PEEK (667)=PEEK (668) AND Q$<>"←"  THEN 1260 
 1270 IF Q$="←"  THEN 1360 
 1280 GOTO 1020 
 1290 : 
 1300 REM ERROR 
 1310 PRINT#2,CHR$ (1);:PRINT" ERROR !" 
 1320 GET Q$:IF PEEK (667)=PEEK (668) AND Q$<>"←"  THEN 1320 
 1330 FOR W=1  TO 1000:NEXT 
 1340 IF Q$<>"←"  THEN 1070 
 1350 : 
 1360 IF Q$="←"  THEN PRINT"{DOWN}ABBRUCH !{DOWN}" 
 1370 PRINT#2,CHR$ (3); 
 1380 PRINT"{DOWN}ENDE DER UEBERTRAGUNG." 
 1390 CLOSE 1:CLOSE 15:CLOSE 2 
 1400 PRINT"{2DOWN,11SPACE}TASTE DRUECKEN !" 
 1410 WAIT 198,255:POKE 198,0 
 1420 GOTO 480 
 1430 : 
 1440 REM * EMPFANGEN * 
 1450 OPEN 1,8,2,DN$+",P,W" 
 1460 GOSUB 4930 
 1470 IF VAL (B$)<>0  THEN 1800 
 1480 POKE 668,PEEK (667):POKE 198,0 
 1490 PRINT#2,CHR$ (2); 
 1500 GET #2,E$:GET Q$ 
 1510 FOR W=1  TO 100:NEXT 
 1520 IF E$="" AND Q$<>"←"  THEN 1490 
 1530 IF Q$="←"  THEN 1800 
 1540 PRINT"{DOWN}BEGINN DER UEBERTRAGUNG.{DOWN}" 
 1550 FOR W=1  TO 100:NEXT 
 1560 GET #2,E$:POKE 668,PEEK (667):BY=0 
 1570 SU=0:Z=1 
 1580 GET Q$:IF PEEK (667)=PEEK (668) AND Q$<>"←"  THEN 1580 
 1590 IF Q$="←"  THEN 1800 
 1600 AT=TI 
 1610 IF TI-AT>30  THEN 1660 
 1620 IF PEEK (667)=PEEK (668)  THEN 1610 
 1630 GET #2,B$(Z):IF B$(Z)=""  THEN B$(Z)=CHR$ (0) 
 1640 SU=SU+ASC (B$(Z)):Z=Z+1 
 1650 IF Z<258  THEN 1600 
 1660 HI=INT (SU/256):LO=SU-256*HI 
 1670 PRINT#2,CHR$ (LO);CHR$ (HI); 
 1680 GET Q$:IF PEEK (667)=PEEK (668) AND Q$<>"←"  THEN 1680 
 1690 IF Q$="←"  THEN 1800 
 1700 GET #2,E$ 
 1710 IF E$<>CHR$ (2)AND E$<>CHR$ (3) THEN 1870 
 1720 PRINT#2,CHR$ (4); 
 1730 FOR X=1  TO Z 
 1740 PRINT#1,B$(X); 
 1750 NEXT X 
 1760 GET #2,Q$ 
 1770 BY=BY+Z 
 1780 PRINT" OK.{7SPACE}";INT (BY/254)+1;"{LEFT}. BLOCK" 
 1790 IF E$=CHR$ (2)  THEN 1570 
 1800 IF Q$="←"  THEN PRINT"{DOWN}ABBRUCH !{DOWN}" 
 1810 PRINT"{DOWN}ENDE DER UEBERTRAGUNG." 
 1820 CLOSE 1:CLOSE 15:CLOSE 2 
 1830 PRINT"{2DOWN,11SPACE}TASTE DRUECKEN !" 
 1840 WAIT 198,255:POKE 198,0 
 1850 GOTO 480 
 1860 : 
 1870 REM ERROR 
 1880 PRINT" ERROR !" 
 1890 PRINT#2,CHR$ (3); 
 1900 POKE 668,PEEK (667) 
 1910 GOTO 1570 
 1920 : 
 1930 REM * DATEN SENDEN * 
 1940 FOR SZ=15440  TO SG 
 1950 GET Q$:IF Q$="←"  THEN PRINT:RETURN 
 1960 IF Q$=" "  THEN GET E$:IF E$<>" "  THEN 1960 
 1970 FOR W=1  TO 24:NEXT 
 1980 GET #2,C$:IF C$=CHR$ (24)  THEN PRINT:RETURN 
 1990 IF C$<>CHR$ (19)  THEN 2010 
 2000 GET #2,Q$:IF Q$<>CHR$ (17) AND PEEK (203)=64  THEN 2000 
 2010 SYS 62595:REM CIA'S SETZEN 
 2020 B$=CHR$ (USR (SZ)):GET #2,C$ 
 2030 IF DP  THEN POKE 646,0:PRINT B$; 
 2040 IF SZ=53247  THEN SZ=57343 
 2050 GOSUB 2100 
 2060 IF D=13  THEN FOR W=1  TO 100:NEXT 
 2070 NEXT SZ 
 2080 RETURN 
 2090 : 
 2100 REM * UMFORMEN/SENDEN * 
 2110 E=0:D=ASC (B$):IF D>64 AND D<91  THEN E=32 
 2120 IF D=20  THEN D=8 
 2130 D=D+E 
 2140 PRINT#2,CHR$ (D);:IF NOT DP  THEN POKE 646,0:PRINT B$; 
 2150 RETURN 
 2160 : 
 2170 REM * UMFORMEN/AUSGEBEN * 
 2180 E=0:D=ASC (C$):IF D>64 AND D<91  THEN E=32 
 2190 IF D>96 AND D<123 THEN E=-32 
 2200 IF D=8  THEN D=20 
 2210 D=D+E 
 2220 POKE 646,0:POKE 199,0:PRINT CHR$ (D); 
 2230 RETURN 
 2240 : 
 2250 REM * TASTATUR-AUSWERTUNG * 
 2260 E=ASC (B$) 
 2270 IF E=174 AND SG<65536  THEN SP=-1:POKE 53280,2:GOTO 570 
 2280 IF E=182  THEN SG=15440:GOSUB 3970:GOTO 570 
 2290 IF E=177  THEN SP=0:POKE 53280,PEEK (838):GOTO 570 
 2300 IF E=176 AND SG>15440  THEN GOSUB 1930:GOTO 570 
 2310 IF E=165  THEN GOSUB 3520:GOTO 570 
 2320 IF E=191  THEN GOSUB 4050:GOTO 570 
 2330 IF E=175  THEN 740 
 2340 IF E=95 THENPOKE 53280,PEEK (838):GOSUB 3970:GOSUB 3520:CLOSE 2:WAIT 198,1:GOTO 160 
 2350 IF E=222 THENPOKE 53280,PEEK (838):GOSUB 3970:CLOSE 2:A$="(FORTSETZUNG)":GOTO 160 
 2360 IF E=180  THEN GOSUB 4990:GOTO 570 
 2370 GOTO 570 
 2380 : 
 2390 REM *** DATEN SPEICHERN *** 
 2400 PRINT"{CLR}" 
 2410 GOSUB 4030 
 2420 IF SG=15440  THEN 160 
 2430 DN$="" 
 2440 INPUT"{2DOWN}DATEINAME ";DN$ 
 2450 IF DN$=""  THEN 160 
 2460 OPEN 1,8,2,DN$+",S,W" 
 2470 GOSUB 4930 
 2480 PRINT#1,CHR$ (USR (15440)); 
 2490 IF ST<>0  THEN 2570 
 2500 CMD 1:A=15441 
 2510 E=SG:IF E>53247  THEN E=53247 
 2520 FOR SZ=A  TO E 
 2530 PRINT CHR$ (USR (SZ)); 
 2540 NEXT 
 2550 IF E<SG  THEN A=57344:E=SG:GOTO 2520 
 2560 PRINT#1,""; 
 2570 CLOSE 1:CLOSE 15 
 2580 IF VAL (B$)<>0  THEN WAIT 198,255 
 2590 GOTO 160 
 2600 : 
 2610 REM *** DATEN LADEN *** 
 2620 DN$="" 
 2630 INPUT"{CLR,3DOWN}DATEINAME ";DN$ 
 2640 IF DN$=""  THEN 160 
 2650 SG=15440 
 2660 OPEN 1,8,2,DN$+",S,R" 
 2670 GOSUB 4930 
 2680 IF VAL (B$)<>0  THEN 2720 
 2690 POKE 144,0:POKE 832,80:POKE 833,60 
 2700 SYS 848:REM LOAD-ROUTINE 
 2710 SG=PEEK (832)+PEEK (833)*256-1 
 2720 CLOSE 1:CLOSE 15 
 2730 IF SG=-1  THEN PRINT"{2DOWN}ACHTUNG, PUFFER VOLL !!!{2DOWN}":SG=65535 
 2740 GOSUB 3970:POKE 198,0:WAIT 198,255 
 2750 GOTO 160 
 2760 : 
 2770 REM *** DATEN AUSGEBEN *** 
 2780 PRINT"{CLR}" 
 2790 GOSUB 4030 
 2800 IF SG=15440  THEN 160 
 2810 PRINT"{DOWN}'F1' = BILDSCHIRM" 
 2820 PRINT"'F3' = DRUCKER" 
 2830 PRINT"'F5' = HARDCOPY{DOWN}" 
 2840 WAIT 198,255 
 2850 D=0 
 2860 FOR SZ=15440  TO SG 
 2870 IF PEEK (198)<>0  THEN 2980 
 2880 C$=CHR$ (USR (SZ)) 
 2890 PRINT C$; 
 2900 IF D  THEN PRINT#1,C$; 
 2910 IF SZ=53247  THEN SZ=57343 
 2920 NEXT SZ 
 2930 CLOSE 1:POKE 53280,PEEK (838) 
 2940 GET B$:IF B$=""  THEN 2940 
 2950 IF B$="{F5}"  THEN GOSUB 5130 
 2960 GOTO 160 
 2970 : 
 2980 GET B$ 
 2990 IF B$=" "  THEN WAIT 198,255:GET B$ 
 3000 IF B$="←"  THEN CLOSE 1:POKE 53280,PEEK (838):GOTO 160 
 3010 IF B$="{F3}" AND D=0  THEN E=PEEK (840):POKE 53280,2 
 3020 IF B$="{F3}"AND D=0 THENOPEN 1,4,E:FOR E=841 TO845:PRINT#1,CHR$ (PEEK (E));:NEXT :D=1 
 3030 IF B$="{F1}"  THEN D=0:CLOSE 1:POKE 53280,PEEK (838) 
 3040 IF B$="{F5}"  THEN GOSUB 5130 
 3050 GOTO 2880 
 3060 : 
 3070 REM ** PARAMETER ** 
 3080 PRINT"{CLR,2DOWN}" 
 3090 : 
 3100 REM BAUDRATE 
 3110 IF PEEK (830)=3  THEN BAUD=110 
 3120 IF PEEK (830)=5  THEN BAUD=150 
 3130 IF PEEK (830)=6  THEN BAUD=300 
 3140 IF PEEK (830)=7  THEN BAUD=600 
 3150 PRINT SPC( 22) BAUD;"{UP}" 
 3160 INPUT"110,150,300,600 BAUD ";BAUD 
 3170 IF BAUD=110  THEN POKE 830,3 
 3180 IF BAUD=150  THEN POKE 830,5 
 3190 IF BAUD=300  THEN POKE 830,6 
 3200 IF BAUD=600  THEN POKE 830,7 
 3210 : 
 3220 REM DATENBITS 
 3230 IF PEEK (829)=32  THEN DB=7 
 3240 IF PEEK (829)=0  THEN DB=8 
 3250 PRINT"{3DOWN}";SPC( 20) DB;"{UP}" 
 3260 INPUT"7 ODER 8 DATENBITS ";DB 
 3270 IF DB=7  THEN POKE 829,32 
 3280 IF DB=8  THEN POKE 829,0 
 3290 : 
 3300 REM STOPBITS 
 3310 IF PEEK (831)=0  THEN SB=1 
 3320 IF PEEK (831)=128  THEN SB=2 
 3330 PRINT"{3DOWN}";SPC( 19) SB;"{UP}" 
 3340 INPUT"1 ODER 2 STOPBITS ";SB 
 3350 IF SB=1  THEN POKE 831,0 
 3360 IF SB=2  THEN POKE 831,128 
 3370 GOTO 160 
 3380 : 
 3390 REM ** GEBUEHREN BERECHNEN ** 
 3400 PRINT"{DOWN,2SPACE}0. ZONE: NAHGESPRAECH" 
 3410 PRINT"{DOWN,2SPACE}1. ZONE: UNTER 50 KM" 
 3420 PRINT"{DOWN,2SPACE}2. ZONE: 50 - 100 KM" 
 3430 PRINT"{DOWN,2SPACE}3. ZONE: UEBER 100 KM" 
 3440 ZO=4:INPUT"{DOWN,2SPACE}ZONE 0, 1, 2 ODER 3 ";ZO 
 3450 IF ZO<>0 AND ZO<>1 AND ZO<>2 AND ZO<>3  THEN 3440 
 3460 INPUT"{DOWN,2SPACE,RVSON}N{RVOFF}ORMAL- /{SPACE,RVSON}B{RVOFF}ILLIG-TARIF ";Q$ 
 3470 IF Q$<>"N" AND Q$<>"B"  THEN 3460 
 3480 POKE 836,ZO 
 3490 POKE 837,ASC (Q$) 
 3500 RETURN 
 3510 : 
 3520 IF NOT GB  THEN RETURN 
 3530 ZO=PEEK (836) 
 3540 Q$=CHR$ (PEEK (837)) 
 3550 ZEIT=VAL (LEFT$ (TI$,2))*3600+VAL (MID$ (TI$,3,2))*60+VAL (RIGHT$ (TI$,2)) 
 3560 IF Q$="B"  THEN 3620 
 3570 IF ZO=0  THEN BETRAG=INT (ZEIT/480+1)*PEEK (828)/100 
 3580 IF ZO=1  THEN BETRAG=INT (ZEIT/45+1)*PEEK (828)/100 
 3590 IF ZO=2  THEN BETRAG=INT (ZEIT/20+1)*PEEK (828)/100 
 3600 IF ZO=3  THEN BETRAG=INT (ZEIT/12+1)*PEEK (828)/100 
 3610 GOTO 3650 
 3620 IF ZO=0  THEN BETRAG=INT (ZEIT/720+1)*PEEK (828)/100 
 3630 IF ZO=1  THEN BETRAG=INT (ZEIT/67.5+1)*PEEK (828)/100 
 3640 IF ZO=2 OR ZO=3  THEN BETRAG=INT (ZEIT/38.6+1)*PEEK (828)/100 
 3650 PRINT 
 3660 PRINT"ZEIT{2SPACE}=";TI$ 
 3670 PRINT"BETRAG=";BETRAG;"DM" 
 3680 PRINT 
 3690 IF B$<>"←"  THEN 3830 
 3700 PRINT"GEBUEHREN SPEICHERN (J/N)?" 
 3710 GET Q$ 
 3720 IF Q$<>"J" AND Q$<>"N"  THEN 3710 
 3730 IF Q$="N"  THEN 3830 
 3740 OPEN 1,8,2,"GEBUEHREN,S,R" 
 3750 INPUT#1,GESB 
 3760 CLOSE 1 
 3770 GESB=GESB+BETRAG 
 3780 OPEN 1,8,2,"@:GEBUEHREN,S,W" 
 3790 PRINT#1,GESB 
 3800 CLOSE 1 
 3810 PRINT"{DOWN}GESAMTBETRAG=";GESB;"DM" 
 3820 WAIT 198,255 
 3830 POKE 198,1:RETURN 
 3840 : 
 3850 REM ** GEBUEHREN ANSEHEN ** 
 3860 PRINT"{CLR,2DOWN}" 
 3870 INPUT"GEBUEHREN LOESCHEN{3SPACE}N{3LEFT}";Q$ 
 3880 IF Q$<>"J" AND Q$<>"N"  THEN 3870 
 3890 IF Q$="J"  THEN OPEN 1,8,2,"@:GEBUEHREN,S,W":PRINT#1,0:CLOSE 1 
 3900 OPEN 1,8,2,"GEBUEHREN,S,R" 
 3910 INPUT#1,GESB 
 3920 CLOSE 1 
 3930 PRINT"{2DOWN}GESAMTBETRAG=";GESB;"DM" 
 3940 WAIT 198,255 
 3950 GOTO 160 
 3960 : 
 3970 REM ** LO/HI-BERECHNUNG ** 
 3980 POKE 832,SG-INT (SG/256)*256 
 3990 POKE 833,INT (SG/256) 
 4000 GOSUB 4030 
 4010 RETURN 
 4020 : 
 4030 REM ** SPEICHERGRENZE ** 
 4040 SG=PEEK (832)+PEEK (833)*256 
 4050 IF SG<53248  THEN BY=SG-15440 
 4060 IF SG>57343  THEN BY=SG-15440-4095 
 4070 PRINT:PRINT"BYTES BELEGT:";BY 
 4080 PRINT"BYTES FREI{2SPACE}:";46000-BY 
 4090 RETURN 
 4100 : 
 4110 REM ** FUNKTIONSTASTEN ** 
 4120 PRINT"{CLR,2DOWN,12SPACE}FUNKTIONSTASTEN" 
 4130 PRINT"{12SPACE}YYYYYYYYYYYYYYY{DOWN}" 
 4140 FOR FT=0  TO 7 
 4150 PRINT" F";FT+1;":{2SPACE}";CHR$ (34); 
 4160 SZ=54000+70*FT 
 4170 E=USR (SZ):IF E=13  THEN 4210 
 4180 PRINT CHR$ (E); 
 4190 SZ=SZ+1 
 4200 GOTO 4170 
 4210 PRINT 
 4220 NEXT FT 
 4230 PRINT"{DOWN,12SPACE}AENDERN (J/N)?" 
 4240 GET Q$:IF Q$<>"J" AND Q$<>"N"  THEN4240 
 4250 IF Q$="N"  THEN 160 
 4260 PRINT"{HOME,4DOWN}" 
 4270 FOR FT=0  TO 7 
 4280 POKE 631,29:POKE 198,1 
 4290 INPUT"{6RIGHT}";Q$ 
 4300 IF Q$=""  THEN 4370 
 4310 Q$=LEFT$ (Q$,69)+CHR$ (13) 
 4320 SZ=54000+70*FT 
 4330 FOR SP=1  TO LEN (Q$) 
 4340 SYS 735,SZ,ASC (MID$ (Q$,SP,1)) 
 4350 SZ=SZ+1 
 4360 NEXT SP 
 4370 NEXT FT 
 4380 PRINT"{DOWN,12SPACE}SPEICHERN (J/N)?" 
 4390 GET Q$:IF Q$<>"J" AND Q$<>"N"  THEN4390 
 4400 IF Q$="N"  THEN 160 
 4410 OPEN 1,8,2,"@:F-TASTEN,S,W" 
 4420 FOR SZ=54000  TO 54559 
 4430 PRINT#1,CHR$ (USR (SZ)); 
 4440 NEXT SZ 
 4450 CLOSE 1 
 4460 GOTO 160 
 4470 : 
 4480 REM ** FUNKTIONSTASTEN SENDEN ** 
 4490 D=ASC (B$) 
 4500 IF D=133  THEN FT=0 
 4510 IF D=134  THEN FT=2 
 4520 IF D=135  THEN FT=4 
 4530 IF D=136  THEN FT=6 
 4540 IF D=137  THEN FT=1 
 4550 IF D=138  THEN FT=3 
 4560 IF D=139  THEN FT=5 
 4570 IF D=140  THEN FT=7 
 4580 SZ=54000+70*FT 
 4590 FOR W=1  TO 30:NEXT 
 4600 SYS 62595 
 4610 B$=CHR$ (USR (SZ)) 
 4620 GET #2,Q$ 
 4630 IF DP  THEN PRINT B$; 
 4640 GOSUB 2100 
 4650 SZ=SZ+1 
 4660 IF B$<>CHR$ (13)  THEN 4590 
 4670 POKE 668,PEEK (667):GET #2,Q$ 
 4680 RETURN 
 4690 : 
 4700 REM * CURSOR EIN * 
 4710 E=PEEK (209)+PEEK (210)*256+PEEK (211) 
 4720 IF PEEK (E)<128  THEN POKE E,PEEK (E)+128 
 4730 POKE 54272+E,0 
 4740 RETURN 
 4750 : 
 4760 REM * CURSOR AUS * 
 4770 E=PEEK (209)+PEEK (210)*256+PEEK (211) 
 4780 IF PEEK (E)>127  THEN POKE E,PEEK (E)-128 
 4790 RETURN 
 4800 : 
 4810 REM ** DISKBEFEHLE ** 
 4820 PRINT"{CLR,2DOWN}'$' = DIRECTORY{2DOWN}" 
 4830 PRINT SPC( 13) CHR$ (34);:POKE 212,0:PRINT"{UP}" 
 4840 POKE 198,1:POKE 631,29 
 4850 INPUT"DISKBEFEHL ";B$ 
 4860 IF B$="$"  THEN PRINT:SYS 918:WAIT 198,255:GOTO 160 
 4870 OPEN 15,8,15 
 4880 PRINT#15,B$ 
 4890 GOSUB 4950 
 4900 CLOSE 15 
 4910 WAIT 198,255:GOTO 160 
 4920 : 
 4930 REM ** DISKSTATUS ** 
 4940 OPEN 15,8,15 
 4950 INPUT#15,B$,C$ 
 4960 PRINT"{2DOWN}DISKSTATUS: "B$;" ";C$;"{DOWN}" 
 4970 RETURN 
 4980 : 
 4990 REM * HELP * 
 5000 PRINT 
 5010 PRINT"'C= S':DATEN SPEICHERN" 
 5020 PRINT"'C= E':SPEICHERN ENDE" 
 5030 PRINT"'C= A':DATEN AUSSENDEN" 
 5040 PRINT"'C= L':PUFFER LOESCHEN" 
 5050 PRINT"'C= G':GEBUEHREN" 
 5060 PRINT"'C= B':BYTES FREI" 
 5070 PRINT"'C= P':PRG-UEBERTRAGUNG" 
 5080 PRINT"'C= ←':OFF-LINE" 
 5090 PRINT"'C= ↑':UNTERBRECHUNG" 
 5100 PRINT"'C= H':HELP" 
 5110 RETURN 
 5120 : 
 5130 REM * HARDCOPY * 
 5140 D=0:CLOSE 1:E=PEEK (840):OPEN 1,4,E 
 5150 FOR E=841  TO 845:PRINT#1,CHR$ (PEEK (E));:NEXT 
 5160 OPEN 2,3 
 5170 PRINT"{HOME}"; 
 5180 PRINT#1 
 5190 FOR Z=1  TO 25 
 5200 FOR SP=1  TO 40 
 5210 GET #2,E$:PRINT#1,E$; 
 5220 NEXT SP 
 5230 NEXT Z 
 5240 PRINT#1:CLOSE 1:CLOSE 2 
 5250 RETURN 
Listing »Terminal«.
PDF Diesen Artikel als PDF herunterladen
Mastodon Diesen Artikel auf Mastodon teilen
← Vorheriger ArtikelNächster Artikel →