1 REM Ins{nd av Bo Kullmar <1789> 1985-01-06 10.27.56
2 ! +++++++++++++++++++++++++++++++++++
3 ! Program .... ABCTERM.800
4 ! Utg}va 2.4 1985-01-06
5 ! av (c) Bo Kullmar
8 ! Ins{nt av Bo Kullmar, medl 1789.
9 ! +++++++++++++++++++++++++++++++++++
80 EXTEND : INTEGER
100 COMMON Parv24$=16,Parpr$=15,Dimbuff,Pf(32),Pf$(32)=81,Meny$(32)=14
110 COMMON Logginnr,Medlemsnr,L|senord$=5,Prom.,Duplex$=11,Enh$=4
120 COMMON Pftkn$(32)=1,Tscreen$=2048,Curpos,]ter,Dator$=8,Inifil$=16,Pfpekare
130 COMMON R|d$=1,Gul$=1,Bl}$=1,Gr|n$=1,Cyan$=1,Magneta$=1,Dubel$=1
300 DIM In$=80,Pftext$=1000,F1$=16,F2$=16,Rad$=160,Dummy$=160,Filslut$=2,Rubrik$=20
740 IF Prom.=7.21 THEN Z=FNPf721
745 DIM Screen$=0 : POKE VAROOT(Screen$),0,8,0,120,0,8
750 IF (Prom.=7.21 OR Prom.=7.2) AND NOT ]ter THEN Z=FNDimbuff
760 ON ERROR GOTO 10000
780 Rubrik$=CHR$(12)+Gul$+Dubel$+'ABCTERM'
790 Filslut$='/*' ! Filslut f|r ABCFIL
800 V24=1
820 IF ]ter THEN Z=FNPrintscreen : ]ter=0 : GOTO 1015
830 IF Dator$='' THEN CHAIN 'START.BAC'
840 Err200abc806$='Du m}ste f|rst ladda terminalrutinen med en systemskiva!'
1000 Z=FNMeny
1010 ! POKE 65413%,0%,0% ! CTRL-C st{ngs av
1015 Z$=FNDuplex$
1020 OPEN Parv24$ AS FILE V24
1030 ! *** Huvudloop
1040 INPUT #V24,Rad$
1050 IF Rad$='SYNK' THEN Z=FNGetfil : GOTO 1040
1060 IF Rad$='SENDFIL' THEN Z=FNSendfil : GOTO 1040
1070 ; R|d$ Rad$
1080 IF LEN(Rad$)=0 THEN 11100 ELSE 1040
2000 DEF FNMeny LOCAL T1,T2,T3,Dat$=32
2010 T1=22 : T2=40 : T3=60
2020 ; Rubrik$ : ; : ;
2030 ; Gul$ 'Meny:' TAB(T1) '+SHIFT:' TAB(T2) '+CTRL:' TAB(T3) '+SHIFT+CTRL' : ;
2040 ; Cyan$ 'Pf 1 ' Meny$(1) TAB(T1) Meny$(9) TAB(T2) Meny$(17) TAB(T3) Meny$(25)
2050 ; Cyan$ 'Pf 2 ' Meny$(2) TAB(T1) Meny$(10) TAB(T2) Meny$(18) TAB(T3) Meny$(26)
2060 ; Cyan$ 'Pf 3 ' Meny$(3) TAB(T1) Meny$(11) TAB(T2) Meny$(19) TAB(T3) Meny$(27)
2070 ; Cyan$ 'Pf 4 ' Meny$(4) TAB(T1) Meny$(12) TAB(T2) Meny$(20) TAB(T3) Meny$(28)
2080 ; Cyan$ 'Pf 5 ' Meny$(5) TAB(T1) Meny$(13) TAB(T2) Meny$(21) TAB(T3) Meny$(29)
2090 ; Cyan$ 'Pf 6 ' Meny$(6) TAB(T1) Meny$(14) TAB(T2) Meny$(22) TAB(T3) Meny$(30)
2100 ; Cyan$ 'Pf 7 ' Meny$(7) TAB(T1) Meny$(15) TAB(T2) Meny$(23) TAB(T3) Meny$(31)
2110 ; Cyan$ 'Pf 8 ' Meny$(8) TAB(T1) Meny$(16) TAB(T2) Meny$(24) TAB(T3) Meny$(32)
2120 ;
2125 IF Prom.<>7.1 THEN Dat$='Mottagnings/s{ndningshastighet, ' ELSE Dat$='\verf|ringshastighet, '
2130 ; : ; Gul$ Dat$ FNHast$ FNDuplex$
2140 ;
2145 ; Gul$ 'Terminalmode!'
2150 RETURN 0
2160 FNEND
3000 DEF FNGetfil
3010 ON ERROR GOTO 3340
3020 POKE 65506,0 : ; : ; R|d$ 'Local mode!'
3050 ; Gul$ ' ****** Mottaga fil ******' : ;
3060 ; Gul$ 'Filnamn vid MONITORN: '; : INPUT LINE F1$ : ;
3070 F1$=LEFT$(F1$,LEN(F1$)-2)
3080 ; Gul$ 'Filnamn h{r: '; : INPUT ''F2$
3090 IF F2$='' THEN F2$=F1$ : ; CUR(PEEK(-173)-1,14) F2$
3100 ; #V24,'Hejsan'
3110 INPUT #V24,Rad$
3120 IF Rad$<>'SYNK' THEN 3100
3130 Z=FNDelay(100.)
3140 ; #V24,'SYNKSVAR'
3150 Z=FNDelay(200.)
3160 ; #V24,F1$
3170 INPUT LINE #V24,Rad$ : Rad$=LEFT$(Rad$,LEN(Rad$)-2)
3180 IF Rad$<>'OPENED' THEN ; R|d$ Rad$ : ; : Z=FNDelay(2000.) : GOTO 3330
3190 PREPARE F2$ AS FILE 2 : I=0
3200 WHILE -1
3210 Z=FNDelay(100.)
3220 ; #V24,'>'
3230 INPUT LINE #V24,Rad$
3240 IF LEFT$(Rad$,2)=Filslut$ THEN 3290
3250 ; #2,Rad$; : ; Rad$; : I=I+1
3270 POKE -173,PEEK(-173)-1
3280 WEND
3290 CLOSE 2
3300 ; : ; Gul$ 'Antal rader =' I : ;
3310 ; CHR$(7,7,7); : POKE -30,0
3320 ; #V24,'Tack!'
3330 RETURN 0
3340 ; R|d$ ' FEL NR' ERRCODE ', ABCFIL STOPPAS!'
3350 RETURN 0
3360 FNEND
4000 DEF FNSendfil
4010 POKE 65348,0 : POKE 65506,0 : ;
4030 ; R|d$ 'Local mode'
4050 ; Gul$ ' ****** S{nda fil ******' : ;
4060 ; Gul$ 'Filnamn h{r: '; : INPUT ''F2$
4070 ; Gul$ 'Lagras vid MONITORN'
4080 ; Gul$ 'under filnamn: '; : INPUT LINE F1$ : ;
4090 F1$=LEFT$(F1$,LEN(F1$)-2)
4100 IF F1$='' THEN F1$=F2$ : ; CUR(PEEK(-173)-1,16) F1$
4110 OPEN F2$ AS FILE 2
4120 ; #V24,'Hejsan'
4130 INPUT #V24,Rad$
4140 IF Rad$<>'SENDFIL' THEN 4120
4150 Z=FNDelay(100.)
4160 ; #V24,'SYNKSVAR'
4170 Z=FNDelay(200.)
4180 ; #V24,F1$
4190 ON ERROR GOTO 4280 : I=0
4200 WHILE -1
4210 INPUT LINE #V24,Dummy$
4220 INPUT LINE #2,Rad$ : Rad$=LEFT$(Rad$,LEN(Rad$)-2)
4240 POKE -173,PEEK(-173)-1
4250 Z=FNDelay(100.)
4260 ; #V24,Rad$ : ; Rad$ : I=I+1
4270 WEND
4280 IF ERRCODE=34 THEN RESUME 4330
4290 IF ERRCODE THEN RESUME 4300
4300 ; CHR$(7,7,7);R|d$ 'Fel nr' ERRCODE
4310 ; #V24,'FILSLUT, ERROR NR' ERRCODE '(ABC800)!'
4320 ; R|d$ 'Jag s{nder filslutsm{rke nu!'
4330 Z=FNDelay(100.)
4340 ; #V24,Filslut$
4350 CLOSE 2 : ;
4370 ; Gul$ 'Antal rader =' I : ;
4380 Z=FNDelay(1000.)
4390 ; CHR$(7,7,7); : POKE -30,0
4400 ; #V24,'Tack!'
4410 RETURN 0
4420 FNEND
5000 DEF FNDuplex$ LOCAL De$=2
5010 De$=MID$(Parv24$,10,1)
5020 IF INSTR(1,'ABCDIJKL',De$)<>0 THEN Duplex$='full duplex'
5030 IF INSTR(1,'EFGHMNOP',De$)<>0 THEN Duplex$='halv duplex'
5040 RETURN Duplex$
5130 FNEND
5140 DEF FNHast$ LOCAL I,Mottag$=5,S{nd$=5
5145 DATA 75,110,300,600,1200,2400,4800,9600,19200
5150 I=0 : RESTORE 5145
5160 WHILE I<9
5170 READ Hast$(I)
5180 I=I+1
5190 WEND
5200 IF Prom.=7.1 THEN RETURN Hast$(VAL(MID$(Parv24$,14,1)))+' bps, '
5210 Mottag$=Hast$(VAL(MID$(Parv24$,14,1)))
5220 S{nd$=Hast$(VAL(MID$(Parv24$,15,1)))
5230 RETURN Mottag$+' / '+S{nd$+' bps, '
5240 FNEND
7000 DEF FNDumpa(Fil$) LOCAL Dummy$=1,Tpar$=16
7010 ON ERROR GOTO 7260
7020 CLOSE V24
7030 Hast=VAL(MID$(Parv24$,14,1))
7035 F|rdr|ning.=VAL(MID$(Parv24$,15,1))
7037 IF F|rdr|ning.<=2 THEN F|rdr|jning.=100. ELSE F|rdr|jning.=0.
7040 IF Hast<=3 THEN Bytes=1
7050 IF Hast=4 THEN Bytes=2
7060 IF Hast=5 THEN Bytes=20 ! 1200 bps
7070 IF Hast=6 THEN Bytes=40
7080 IF Hast=7 THEN Bytes=80
7090 IF Hast=8 THEN Bytes=160
7100 IF Hast=9 THEN Bytes=320
7110 Tpar$=Parv24$ : MID$(Tpar$,5,1)='V' : MID$(Tpar$,6,1)='A'
7130 OPEN Tpar$ AS FILE V24
7140 PREPARE Fil$ AS FILE 8
7150 Z=FNPrintscreen
7160 Dummy$=FNPos$(1)
7170 IF PEEK2(PEEK2(65500)+6)>Bytes THEN ; FNInchr$;
7180 IF SYS(5)=128 THEN Dummy$=FNInkey$
7200 IF ASCII(Dummy$)=199 THEN 7220
7210 GOTO 7160
7220 Pr=0 : CLOSE V24,8
7230 OPEN Parv24$ AS FILE V24
7240 RETURN 0
7250 ; RED 'Local mode!'
7260 IF ERRCODE=21 THEN ; RED 'Felaktigt filnamn!' : RESUME 7320
7270 IF ERRCODE=41 THEN ; RED 'Skivan full, dumpningen avbryts!' : RESUME 7220
7280 IF ERRCODE=42 THEN ; RED 'Enhete ej klar!' : RESUME 7320
7290 IF ERRCODE=36 THEN ; RED 'Checksummafel vid skrivning, dumpningen avbryts!' : RESUME 7220
7300 IF ERRCODE=53 THEN RESUME 7220
7310 ; RED 'Fel nr ' ERRCODE ', dumpningen avbryts!' : RESUME 7220
7320 IF Pr THEN RETURN Z=FNDumpapr ELSE RETURN Z=FNDumpafil(-1)
7330 FNEND
7340 DEF FNInchr$ LOCAL Dummy$=1,Buffert$=400,Bytes
7350 Bytes=PEEK2(PEEK2(65500)+6)
7360 Dummy$=FNPos$(0)
7370 GET #V24,Buffert$ COUNT Bytes
7380 ; #8,Buffert$;
7390 RETURN Buffert$
7400 FNEND
7410 DEF FNInkey$ LOCAL Dummy$=1
7420 ; FNInchr$;
7430 A=SYS(6)
7440 GET Dummy$
7450 IF ASCII(Dummy$)=199 THEN RETURN Dummy$
7460 IF Duplex$='halv duplex' THEN ; Dummy$; : ; #8,Dummy$;
7470 ; #V24,Dummy$;
7480 IF Duplex$='full duplex' Dummy=FNDelay(F|rdr|jning.) : ; FNInchr$;
7490 RETURN Dummy$
7500 FNEND
7510 DEF FNPos$(Sl{ckt) LOCAL Minne
7520 OUT 56,10
7530 OUT 57,40-32*Sl{ckt
7540 Minne=30720+PEEK(65363)*80+PEEK(65362)
7550 OUT 56,14
7560 OUT 57,SWAP%(Minne)
7570 OUT 56,15
7580 OUT 57,Minne
7590 RETURN ''
7600 FNEND
7610 DEF FNDumpapr
7620 Z=FNSavescreen
7630 ; YEL 'Dumpa text till skrivare!' : ;
7640 ; YEL 'Avbryt med Pf 8!' : Z=FNDelay(1000.)
7650 Z=FNDumpa(Parpr$)
7660 RETURN 0
7670 FNEND
7680 DEF FNDumpafil(Err)
7685 ON ERROR GOTO 7755
7690 IF NOT Err THEN Z=FNSavescreen
7700 ; RED 'Local Mode!' : ;
7710 ; YEL 'Dumpa inkommande text till fil!'
7720 ; YEL 'Avbryt med Pf 8!'
7730 ; YEL; : INPUT 'Ange filnamn! 'Fil$
7740 Z=FNDumpa(Fil$)
7750 RETURN 0
7755 Z=FNPrintscreen : RESUME 7750
7760 FNEND
9000 DEF FNDelay(Y.) LOCAL I.
9010 WHILE I.191 AND Pf<200 THEN RESUME 10100
10070 IF Pf>207 AND Pf<216 THEN RESUME 10110
10080 IF Pf>223 AND Pf<232 THEN RESUME 10120
10090 IF Pf>239 AND Pf<248 THEN RESUME 10130 ELSE RESUME 11010
10100 ON Pf-191 GOTO 10140,10215,10225,10235,10245,10255,10265,10275
10110 ON Pf-207 GOTO 10310,10320,10330,10340,10350,10360,10370,10380
10120 ON Pf-223 GOTO 10410,10420,10430,10440,10450,10460,10470,10480
10130 ON Pf-239 GOTO 10510,10520,10530,10540,10550,10560,10570,10580
10140 ON Pf(1) GOTO 11010,10210,11030,11040,11050,11060,11070,11080,11010,11100
10210 ; #V24,Pf$(1); : IF Duplex$='halv duplex' THEN ; FNEcho$(Pf$(1));
10212 GOTO 1040
10215 ON Pf(2) GOTO 11010,10220,11030,11040,11050,11060,11070,11080,11010,11100
10220 ; #V24,Pf$(2); : IF Duplex$='halv duplex' THEN ; FNEcho$(Pf$(2));
10222 GOTO 1040
10225 ON Pf(3) GOTO 11010,10230,11030,11040,11050,11060,11070,11080,11010,11100
10230 ; #V24,Pf$(3); : IF Duplex$='halv duplex' THEN ; FNEcho$(Pf$(3));
10232 GOTO 1040
10235 ON Pf(4) GOTO 11010,10240,11030,11040,11050,11060,11070,11080,11010,11100
10240 ; #V24,Pf$(4); : IF Duplex$='halv duplex' THEN ; FNEcho$(Pf$(4));
10242 GOTO 1040
10245 ON Pf(5) GOTO 11010,10250,11030,11040,11050,11060,11070,11080,11010,11100
10250 ; #V24,Pf$(5); : IF Duplex$='halv duplex' THEN ; FNEcho$(Pf$(5));
10252 GOTO 1040
10255 ON Pf(6) GOTO 11010,10260,11030,11040,11050,11060,11070,11080,11010,11100
10260 ; #V24,Pf$(6); : IF Duplex$='halv duplex' THEN ; FNEcho$(Pf$(6));
10262 GOTO 1040
10265 ON Pf(7) GOTO 11010,10270,11030,11040,11050,11060,11070,11080,11010,11100
10270 ; #V24,Pf$(7); : IF Duplex$='halv duplex' THEN ; FNEcho$(Pf$(7));
10272 GOTO 1040
10275 ON Pf(8) GOTO 11010,10280,11030,11040,11050,11060,11070,11080,11010,11100
10280 ; #V24,Pf$(8); : IF Duplex$='halv duplex' THEN ; FNEcho$(Pf$(8));
10282 GOTO 1040
10310 ON Pf(9) GOTO 11010,10315,11030,11040,11050,11060,11070,11080,11010,11100
10315 ; #V24,Pf$(9); : IF Duplex$='halv duplex' THEN ; FNEcho$(Pf$(9));
10317 GOTO 1040
10320 ON Pf(10) GOTO 11010,10325,11030,11040,11050,11060,11070,11080,11010,11100
10325 ; #V24,Pf$(10); : IF Duplex$='halv duplex' THEN ; FNEcho$(Pf$(10));
10327 GOTO 1040
10330 ON Pf(11) GOTO 11010,10335,11030,11040,11050,11060,11070,11080,11010,11100
10335 ; #V24,Pf$(11); : IF Duplex$='halv duplex' THEN ; FNEcho$(Pf$(11));
10337 GOTO 1040
10340 ON Pf(12) GOTO 11010,10345,11030,11040,11050,11060,11070,11080,11010,11100
10345 ; #V24,Pf$(12); : IF Duplex$='halv duplex' THEN ; FNEcho$(Pf$(12));
10347 GOTO 1040
10350 ON Pf(13) GOTO 11010,10355,11030,11040,11050,11060,11070,11080,11010,11100
10355 ; #V24,Pf$(13); : IF Duplex$='halv duplex' THEN ; FNEcho$(Pf$(13));
10357 GOTO 1040
10360 ON Pf(14) GOTO 11010,10365,11030,11040,11050,11060,11070,11080,11010,11100
10365 ; #V24,Pf$(14); : IF Duplex$='halv duplex' THEN ; FNEcho$(Pf$(14));
10367 GOTO 1040
10370 ON Pf(15) GOTO 11010,10375,11030,11040,11050,11060,11070,11080,11010,11100
10375 ; #V24,Pf$(15); : IF Duplex$='halv duplex' THEN ; FNEcho$(Pf$(15));
10377 GOTO 1040
10380 ON Pf(16) GOTO 11010,10385,11030,11040,11050,11060,11070,11080,11010,11100
10385 ; #V24,Pf$(16); : IF Duplex$='halv duplex' THEN ; FNEcho$(Pf$(16));
10387 GOTO 1040
10410 ON Pf(17) GOTO 11010,10415,11030,11040,11050,11060,11070,11080,11010,11100
10415 ; #V24,Pf$(17); : IF Duplex$='halv duplex' THEN ; FNEcho$(Pf$(17));
10417 GOTO 1040
10420 ON Pf(18) GOTO 11010,10425,11030,11040,11050,11060,11070,11080,11010,11100
10425 ; #V24,Pf$(18); : IF Duplex$='halv duplex' THEN ; FNEcho$(Pf$(18));
10427 GOTO 1040
10430 ON Pf(19) GOTO 11010,10435,11030,11040,11050,11060,11070,11080,11010,11100
10435 ; #V24,Pf$(19); : IF Duplex$='halv duplex' THEN ; FNEcho$(Pf$(19));
10437 GOTO 1040
10440 ON Pf(20) GOTO 11010,10445,11030,11040,11050,11060,11070,11080,11010,11100
10445 ; #V24,Pf$(20); : IF Duplex$='halv duplex' THEN ; FNEcho$(Pf$(20));
10447 GOTO 1040
10450 ON Pf(21) GOTO 11010,10455,11030,11040,11050,11060,11070,11080,11010,11100
10455 ; #V24,Pf$(21); : IF Duplex$='halv duplex' THEN ; FNEcho$(Pf$(21));
10457 GOTO 1040
10460 ON Pf(22) GOTO 11010,10465,11030,11040,11050,11060,11070,11080,11010,11100
10465 ; #V24,Pf$(22); : IF Duplex$='halv duplex' THEN ; FNEcho$(Pf$(22));
10467 GOTO 1040
10470 ON Pf(23) GOTO 11010,10475,11030,11040,11050,11060,11070,11080,11010,11100
10475 ; #V24,Pf$(23); : IF Duplex$='halv duplex' THEN ; FNEcho$(Pf$(23));
10477 GOTO 1040
10480 ON Pf(24) GOTO 11010,10485,11030,11040,11050,11060,11070,11080,11010,11100
10485 ; #V24,Pf$(24); : IF Duplex$='halv duplex' THEN ; FNEcho$(Pf$(24));
10487 GOTO 1040
10510 ON Pf(25) GOTO 11010,10515,11030,11040,11050,11060,11070,11080,11010,11100
10515 ; #V24,Pf$(25); : IF Duplex$='halv duplex' THEN ; FNEcho$(Pf$(25));
10517 GOTO 1040
10520 ON Pf(26) GOTO 11010,10525,11030,11040,11050,11060,11070,11080,11010,11100
10525 ; #V24,Pf$(26); : IF Duplex$='halv duplex' THEN ; FNEcho$(Pf$(26));
10527 GOTO 1050
10530 ON Pf(27) GOTO 11010,10535,11030,11040,11050,11060,11070,11080,11010,11100
10535 ; #V24,Pf$(27); : IF Duplex$='halv duplex' THEN ; FNEcho$(Pf$(27));
10537 GOTO 1040
10540 ON Pf(28) GOTO 11010,10545,11030,11040,11050,11060,11070,11080,11010,11100
10545 ; #V24,Pf$(28); : IF Duplex$='halv duplex' THEN ; FNEcho$(Pf$(28));
10547 GOTO 1040
10550 ON Pf(29) GOTO 11010,10555,11030,11040,11050,11060,11070,11080,11010,11100
10555 ; #V24,Pf$(29); : IF Duplex$='halv duplex' THEN ; FNEcho$(Pf$(29));
10557 GOTO 1040
10560 ON Pf(30) GOTO 11010,10565,11030,11040,11050,11060,11070,11080,11010,11100
10565 ; #V24,Pf$(30); : IF Duplex$='halv duplex' THEN ; FNEcho$(Pf$(30));
10567 GOTO 1040
10570 ON Pf(31) GOTO 11010,10575,11030,11040,11050,11060,11070,11080,11010,11100
10575 ; #V24,Pf$(31); : IF Duplex$='halv duplex' THEN ; FNEcho$(Pf$(31));
10577 GOTO 1040
10580 ON Pf(32) GOTO 11010,10585,11030,11040,11050,11060,11070,11080,11010,11100
10585 ; #V24,Pf$(32); : IF Duplex$='halv duplex' THEN ; FNEcho$(Pf$(32));
10587 GOTO 1040
11010 ; CHR$(7) R|d$ 'Denna tangent saknar funktion!' : GOTO 1040
11030 Z=FNMeny : GOTO 1040
11040 Z=FNSavescreen
11045 ; Gul$ 'Programmet SETUP.BAC laddas och exikveras!' : CHAIN Enh$+'SETUP.BAC'
11050 Z=FNDumpafil(0) : GOTO 1040
11060 Z=FNDumpapr : GOTO 1040
11070 Z=FNSend : GOTO 1040
11080 Z=FNHardcopy : GOTO 1040
11100 POKE 65413,35,255 ! CTRL-C s{tts p} ingen
11105 IF Prom.=7.21 THEN POKE PEEK2(65500)+8,Pfpekare,SWAP%(Pfpekare)
11110 END
12000 DEF FNHardcopy LOCAL Max,Adress,Teck
12010 ! Om 40 tkn, s} antas det att det {r en ABC800 C, 40 tkn mode f|r
12020 ! ABC802 och ABC806 kr{ver en annan rutin som avl{ser vart annat tkn!
12030 PREPARE Parpr$ AS FILE 9
12040 Max=PEEK(-172)
12050 IF Max=80 THEN ; #9,LEFT$(Screen$,1920) : GOTO 12160
12060 FOR I=0 TO 23
12070 ; #9,TAB(20);
12080 Adress=31744+I*128-I/8*984
12090 FOR Y=Adress TO Adress+Max-1
12100 Teck=PEEK(Y)
12110 IF Teck<32 THEN Teck=32
12120 ; #9,CHR$(Teck);
12130 NEXT Y
12140 ; #9
12150 NEXT I
12160 CLOSE 9 : RETURN 0
12170 FNEND
13000 DEF FNSend LOCAL Tpar$=16
13010 ON ERROR GOTO 13220
13020 Z=FNSavescreen
13030 ; RED 'Local mode! Avbryt i f|rtid med en Pf-tanget!' : ;
13040 ; YEL 'S{nda fil med XON/XOFF!'
13050 ; YEL; : INPUT 'Ange filnamn h{r! 'Fil$
13060 CLOSE V24 : Nomore=0
13070 Tpar$=Parv24$ : MID$(Tpar$,5,2)='VA'
13080 Z=FNPrintscreen
13090 OPEN Tpar$ AS FILE V24
13100 OPEN Fil$ AS FILE 8
13110 ON ERROR GOTO 13220
13120 WHILE NOT Nomore
13130 Rad$=FNGetasc$
13140 ; #V24,Rad$;
13150 ; Rad$;
13160 WEND
13170 CLOSE V24,8
13180 Z=FNSavescreen : ; 'F|rdr|jning f|r att undvika felaktigt eco!';
13190 Z=FNDelay(1500.) : Z=FNPrintscreen
13200 OPEN Parv24$ AS FILE V24
13210 RETURN 0
13220 IF ERRCODE=34 THEN RESUME 13170
13230 IF ERRCODE=21 THEN RESUME 13250
13240 IF ERRCODE=53 THEN RESUME 13170
13250 ; RED 'Local mode!' : ;
13260 ; RED 'Filen finns ej!' : GOTO 13050
13270 FNEND
13280 DEF FNGetasc$ LOCAL Sp,St$=80
13290 Nomore=0
13300 IF LEN(Inline$) GOTO 13330
13310 ON ERROR GOTO 13390
13320 INPUT LINE #8,Inline$
13330 !
13340 ON ERROR GOTO
13350 Sp=PEEK2(PEEK2(65500)+4)-1
13360 IF LEN(Inline$)<=Sp THEN St$=Inline$ : Inline$='' ELSE St$=LEFT$(Inline$,Sp) : Inline$=RIGHT$(Inline$,Sp+1)
13370 RETURN St$
13380 Nomore=-1 : RETURN ''
13390 RESUME 13380
13400 FNEND
14300 DEF FNDimbuff
14305 IF Dimbuff>SYS(4)-1500 THEN Dimbuff=SYS(4)-1500
14310 DIM Buffert$=Dimbuff
14315 Pfpekare=PEEK2(PEEK2(65500)+8)
14320 POKE PEEK2(65500)+2,VAROOT(Buffert$),SWAP%(VAROOT(Buffert$))
14330 RETURN 0
14340 FNEND
14500 DEF FNPf721
14505 Pftext$=''
14510 FOR I=1 TO 32
14520 IF Pf(I)=2 THEN Pftext$=Pftext$+Pftkn$(I)+Pf$(I)
14530 NEXT I
14540 Pftext$=Pftext$+CHR$(255)
14550 POKE PEEK2(65500)+8,VAROOT(Pftext$),SWAP%(VAROOT(Pftext$))
14560 RETURN 0
14570 FNEND
15000 DEF FNEcho$(Str{ng$) LOCAL L{ngd,I,Tecken$=2,Tecken,Uts$=200
15010 L{ngd=LEN(Str{ng$)
15020 I=1
15030 WHILE I<=L{ngd
15040 Tecken$=MID$(Str{ng$,I,1)
15050 Tecken=ASCII(Tecken$)
15060 IF Tecken=0 THEN Tecken$=CHR$(94,64)
15070 IF (Tecken>0 AND Tecken<31) AND Tecken<>13 THEN Tecken$=CHR$(94,Tecken+64)
15080 IF Tecken=31 THEN Tecken$=CHR$(94,95)
15090 IF Tecken=13 THEN Tecken$=CHR$(13,10)
15100 Uts$=Uts$+Tecken$
15110 I=I+1
15120 WEND
15130 RETURN Uts$
15140 FNEND