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