2 ! ********************************************************************** 3 ! Program T.BAC Utg}va 3.0 1985-11-03 4 ! av Bo Kullmar 5 ! Ins{nd av Bo Kullmar 6 ! F|r ABC800M ABC800C ABC802 ABC806 8 ! Testad p} ABC806 9 ! Kr{ver optionsprom 7.21 eller senare. Tidigare namn: QZ. 10 ! ********************************************************************** 50 ON ERROR GOTO 10000 80 EXTEND : INTEGER 300 DIM Rad$=159,Inline$=159,Buffert$=7000,Pftext$=300,Pf$(32)=50 320 POKE PEEK2(65500)+2,VAROOT(Buffert$),SWAP%(VAROOT(Buffert$)) 500 ! Konstanter: 510 Pf$(1)='' 520 Pf$(2)='' 530 Pf$(3)='' 540 Pf$(5)='' 550 Pf$(8)='Logga' 560 Pf$(16)='DISCONNECT' 600 Rubrik$=CHR$(12)+YEL+DBLE+'ABC-Klubbens monitor' 610 Parv24$='V24:TSA70C72.40E' 620 Filslut$='/*' ! Filslut f|r ABCFIL 630 V24=1 640 Parpr$='PR:VSA30A72.5' ! Parameter f|r printer 650 DIM Screen$=0 : POKE VAROOT(Screen$),0,8,0,120,0,8 700 Pftext$=CHR$(192)+Pf$(1)+CHR$(196)+Pf$(5) 710 Pftext$=Pftext$+CHR$(199)+Pf$(8)+CHR$(13,208)+Pf$(2) 720 Pftext$=Pftext$+CHR$(215)+Pf$(16)+CHR$(13,224)+Pf$(3)+CHR$(255) 735 Pfpekare=PEEK2(PEEK2(65500)+8) 800 Pfpekare=PEEK2(PEEK2(65500)+8) 810 POKE PEEK2(65500)+8,VAROOT(Pftext$),SWAP%(VAROOT(Pftext$)) 1000 ! *** Initiering **** 1010 Z=FNMeny 1020 ! POKE 65413,0,0 ! CTRL-C st{ngs av 1030 OPEN Parv24$ AS FILE V24 1040 ! *** Huvudloop 1050 INPUT #V24,Rad$ 1060 IF Rad$='SYNK' THEN Z=FNGetfil : GOTO 1050 1070 IF Rad$='SENDFIL' THEN Z=FNSendfil : GOTO 1050 1075 IF Rad$='V[XLA' THEN Z=FNBythast : GOTO 1030 1080 ; RED Rad$ 1090 IF LEN(Rad$)=0 THEN 12800 ELSE 1050 2000 DEF FNMeny LOCAL T1,T2,T3 2010 T1=27 : T2=47 : T3=64 2020 ; Rubrik$ : ; : ; 2030 ; YEL 'Meny:' TAB(T1) '+SHIFT:' TAB(T2) '+CTRL:' TAB(T3) '+SHIFT+CTRL' : ; 2040 ; CYA 'Pf 1 ABC-Monitorn' TAB(T1) 'PERMOBAS' TAB(T2) 'Login 2107' TAB(T3) 'Meny' 2050 ; CYA 'Pf 2 [ndr hast/duplex' 2060 ; CYA 'Pf 3 Dumpa Fil' TAB(T1) 'S{nda in fil' 2070 ; CYA 'Pf 4 Dumpa PR:' 2080 ; CYA 'Pf 5 KOM' 2090 ; CYA 'Pf 6 Hardcopy' 2100 ; CYA 'Pf 7' 2110 ; CYA 'Pf 8 ' Pf$(8) TAB(T1) Pf$(16) TAB(T2) 'Avsluta prog' 2120 ; 2130 ; : ; YEL 'S{ndnings/mottagningshastighet, ' FNHast$ FNDuplex$ 2140 ; 2150 ; CYA 'Terminalmode!' 2160 RETURN 0 2170 FNEND 3000 DEF FNGetfil LOCAL Rad$=160,File$=160,I,Ec 3010 ON ERROR GOTO 3290 3020 POKE -30,0 : ; 3030 ; RED 'Local mode!' 3040 ; YEL ' ****** Mottaga fil fr}n monitorn ******' : ; 3050 ; YEL; : INPUT 'Filnamn h{r: 'File$ 3060 WHILE Rad$<>'SYNK' 3070 ; #V24,'Hejsan' 3080 INPUT #V24,Rad$ 3090 WEND 3100 ; #V24,'SYNKSVAR' 3110 ; #V24,File$ 3120 INPUT LINE #V24,Rad$ : Rad$=LEFT$(Rad$,LEN(Rad$)-2) 3130 IF Rad$<>'OPENED' THEN ; RED Rad$ : ; : GOTO 3280 3140 Ec=FNPrepare(File$,2) 3150 IF Ec=21 ; CHR$(7) 'Felaktigt lokalt filnamn! \verf|ringen avbryts!' : ; #V24,'/#' : RETURN 0 3160 WHILE -1 3170 ; #V24 3180 INPUT LINE #V24,Rad$ 3190 IF LEFT$(Rad$,2)=Filslut$ THEN 3240 3200 ; #2,Rad$; : ; Rad$; 3210 POKE -173,PEEK(-173)-1 3220 I=I+1 3230 WEND 3240 CLOSE 2 3250 ; : ; YEL 'Antal rader =' I : ; 3260 ; CHR$(7,7); : POKE -30,0 3270 ; #V24,'Tack!' 3280 RETURN 0 3290 ; RED 'FEL NR' ERRCODE ', ABCFIL STOPPAS!' 3300 RESUME 3280 3310 FNEND 4000 DEF FNSendfil LOCAL Rad$=160,File$=160,I,Ec 4010 POKE -30,0 : ; 4020 ; RED 'Local mode' 4030 ; YEL ' ****** S{nda fil till monitorn ******' : ; 4040 ; YEL 'Avbryt med CR!' 4050 ; YEL; : INPUT 'Filnamn h{r: 'File$ 4060 IF File$='' OPEN 'NUL:' AS FILE 2 : GOTO 4090 4070 Ec=FNOpen(File$,2) 4080 IF Ec=21 ; CHR$(7) 'Filen finns ej!' : GOTO 4050 4090 ; #V24,'Hejsan' 4100 WHILE Rad$<>'SENDFIL' 4110 INPUT #V24,Rad$ 4120 WEND 4130 ; #V24,'SYNKSVAR' 4140 ; #V24,File$ 4150 ON ERROR GOTO 4230 4160 WHILE -1 4170 INPUT LINE #V24,Dummy$ 4180 INPUT LINE #2,Rad$ 4190 POKE -173,PEEK(-173)-1 4200 ; #V24,Rad$; : ; Rad$; 4210 I=I+1 4220 WEND 4230 IF ERRCODE=34 THEN RESUME 4280 4240 IF ERRCODE THEN RESUME 4250 4250 ; CHR$(7,7);RED 'Fel nr' ERRCODE 4260 ; #V24,'Filslut, Fel nr' ERRCODE '(ABC800)!' 4270 ; RED 'Jag s{nder filslutsm{rke nu!' 4280 ; #V24,Filslut$ 4290 CLOSE 2 4300 ; 4310 ; YEL 'Antal rader =' I : ; 4320 ; CHR$(7,7); : POKE -30,0 4330 ; #V24,'Tack!' 4340 RETURN 0 4350 FNEND 6000 DEF FNDuplex$ LOCAL De$=2 6010 De$=MID$(Parv24$,10,1) 6020 IF INSTR(1,'ABCDIJKL',De$)<>0 THEN Duplex$='full duplex' 6030 IF INSTR(1,'EFGHMNOP',De$)<>0 THEN Duplex$='halv duplex' 6040 RETURN Duplex$ 6050 FNEND 6060 DEF FNHast$ LOCAL I,Mottag$=5,S{nd$=5 6070 DATA 75,110,300,600,1200,2400,4800,9600,19200 6080 I=0 : RESTORE 6070 6090 WHILE I<9 6100 READ Hast$(I) 6110 I=I+1 6120 WEND 6130 IF Prom.=7.1 THEN RETURN Hast$(VAL(MID$(Parv24$,14,1)))+' bps, ' 6140 Mottag$=Hast$(VAL(MID$(Parv24$,14,1))) 6150 S{nd$=Hast$(VAL(MID$(Parv24$,15,1))) 6160 RETURN S{nd$+' / '+Mottag$+' bps, ' 6170 FNEND 6180 DEF FNStora$(\$) LOCAL X$=40,A 6190 FOR J=1 TO LEN(\$) 6200 A=ASCII(RIGHT$(\$,J)) 6210 IF A>95 THEN X$=X$+CHR$(A AND 223) ELSE X$=X$+CHR$(A) 6220 NEXT J 6230 RETURN X$ 6240 FNEND 6250 DEF FNNyduplex LOCAL De$=2,D$=1,Dupf$=8,Duph$=8,Pek 6260 De$=MID$(Parv24$,10,1) 6270 IF INSTR(1,'ABCDIJKL',De$)<>0 THEN Duplex$='full duplex' : D$='F' 6280 IF INSTR(1,'EFGHMNOP',De$)<>0 THEN Duplex$='halv duplex' : D$='H' 6290 Dupf$='ABCDIJKL' : Duph$='EFGHMNOP' 6300 IF D$='F' THEN Pek=INSTR(1,Dupf$,De$) ELSE Pek=INSTR(1,Duph$,De$) 6310 ; CHR$(12) YEL DBLE 'Full eller halv duplex' : ; : ; : ; 6320 ; CYA 'V{lj full eller halv duplex, ange F f|r full duplex och H f|r halv duplex' 6330 ; CYA 'V{lj (' D$ ') ! '; : GET Svar$ : Svar$=FNStora$(Svar$) : IF Svar$=CHR$(13) THEN Svar$=D$ 6340 ; Svar$; 6350 IF INSTR(1,'FH',Svar$)=0 THEN ; RED,'Fel val!' : GOTO 6330 6360 IF Svar$='F' THEN MID$(Parv24$,10,1)=MID$(Dupf$,Pek,1) 6370 IF Svar$='H' THEN MID$(Parv24$,10,1)=MID$(Duph$,Pek,1) 6380 RETURN 0 6390 FNEND 6400 DEF FN[ndramottag 6410 ; CHR$(12) YEL DBLE '[ndring av mottagningshastigheten' : ; : ; 6420 ; : Z=FNHastigheter 6430 ; YEL 'V{lj mottagningshastighet'; 6440 De$=MID$(Parv24$,14,1) : ; YEL ' (' De$ ') ! '; : GET Svar$ : IF Svar$=CHR$(13) THEN Svar$=De$ : ; Svar$ 6445 ; Svar$ 6450 IF INSTR(1,'012345678',Svar$)=0 THEN ; ,RED 'Fel val!' : GOTO 6420 6460 MID$(Parv24$,14,1)=Svar$ : RETURN 0 6470 FNEND 6480 DEF FN[ndras{nd 6490 ; CHR$(12) YEL DBLE '[ndring av s{ndningshastigheten' : ; : ; 6500 ; : Z=FNHastigheter : ; YEL 'V{lj s{ndningshastighet'; 6510 De$=MID$(Parv24$,15,1) : ; YEL ' (' De$ ') ! '; : GET Svar$ : IF Svar$=CHR$(13) THEN Svar$=De$ : ; Svar$ 6515 ; Svar$ 6520 IF INSTR(1,'012345678',Svar$)=0 THEN ; ,RED 'Fel val!' : GOTO 6500 6530 MID$(Parv24$,15,1)=Svar$ : RETURN 0 6540 FNEND 6550 DEF FNHastigheter 6560 ; YEL 'M|jliga hastigheter:' : ; 6570 ; CYA 'Val: Hastighet (pbs)' : ; 6580 ; CYA ' 0 75' 6590 ; CYA ' 1 110' 6600 ; CYA ' 2 300' 6610 ; CYA ' 3 600' 6620 ; CYA ' 4 1200' 6630 ; CYA ' 5 2400' 6640 ; CYA ' 6 4800' 6650 ; CYA ' 7 9600' 6660 ; CYA ' 8 19200' : ; 6670 RETURN 0 6680 FNEND 6690 DEF FNValnyparv24 LOCAL Svar$=1 6700 Z=FNSavescreen : CLOSE V24 6710 ; CHR$(12) YEL DBLE '[ndring av hastighet och duplex' : ; : ; 6720 ; CYA 'Vill du {ndra Duplex, S{ndnings eller Mottagningshastighet? '; : GET Svar$ 6730 Svar$=FNStora$(Svar$) : IF INSTR(1,'DSM',Svar$)=0 THEN ; ,RED 'Fel svar!' : GOTO 6720 6740 ; Svar$ 6750 IF Svar$='D' THEN Z=FNNyduplex : GOTO 6780 6760 IF Svar$='M' THEN Z=FN[ndramottag : GOTO 6780 6770 Z=FN[ndras{nd 6780 Z=FNPrintscreen : OPEN Parpr$ AS FILE V24 6790 RETURN 0 6800 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) : IF Bytes>400 Bytes=400 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 8000 DEF FNPrepare(File$,Lu) 8010 ON ERROR GOTO 8040 8020 PREPARE File$ AS FILE Lu : RETURN 0 8030 RETURN ERRCODE 8040 RESUME 8030 8050 FNEND 8100 DEF FNOpen(File$,Lu) 8110 ON ERROR GOTO 8140 8120 OPEN File$ AS FILE Lu : RETURN 0 8130 RETURN ERRCODE 8140 RESUME 8130 8150 FNEND 8200 DEF FNBythast 8210 IF MID$(Parv24$,14,2)='40' THEN MID$(Parv24$,14,2)='22' ELSE MID$(Parv24$,14,2)='40' 8220 RETURN 0 8230 FNEND 9000 DEF FNDelay(Y.) LOCAL I. 9010 WHILE I.191 AND Pf<200 THEN RESUME 10060 10040 IF Pf>207 AND Pf<216 THEN RESUME 10070 10050 IF Pf>223 AND Pf<232 THEN RESUME 10080 10055 IF Pf>239 AND Pf<248 THEN RESUME 10090 ELSE RESUME 10990 10060 ON Pf-191 GOTO 10990,10200,10300,10400,10990,10600,10990,10990 10070 ON Pf-207 GOTO 10990,10990,11300,10990,10990,10990,10990,10990 10080 ON Pf-223 GOTO 10990,10990,10990,10990,10990,10990,10990,12800 10090 ON Pf-239 GOTO 13100,10990,10990,10990,10990,10990,10990,10990 10200 Z=FNValnyparv24 : GOTO 1030 10300 Z=FNDumpafil(0) : GOTO 1050 10400 Z=FNDumpapr : GOTO 1050 10600 Z=FNHardcopy : GOTO 1050 10990 ; CHR$(7);RED 'Denna tangent saknar funktion!' : GOTO 1050 11300 Z=FNSend : GOTO 1030 12800 POKE 65413,35,255 ! CTRL-C s{tts p} igen 12810 POKE PEEK2(65500)+8,Pfpekare,SWAP%(Pfpekare) 12820 END 13100 Z=FNMeny : GOTO 1050 15000 DEF FNHardcopy 15010 PREPARE Parpr$ AS FILE 9 15020 ; #9,LEFT$(Screen$,2000) 15030 CLOSE 9 : RETURN 0 15040 FNEND 16000 DEF FNSend LOCAL Tpar$=16 16010 ON ERROR GOTO 16220 16020 Z=FNSavescreen 16030 ; RED 'Local mode! Avbryt i f|rtid med en Pf-tanget!' : ; 16040 ; YEL 'S{nda fil med XON/XOFF!' 16050 ; YEL; : INPUT 'Ange filnamn h{r! 'Fil$ 16060 CLOSE V24 : Nomore=0 16070 Tpar$=Parv24$ : MID$(Tpar$,5,2)='VA' 16080 Z=FNPrintscreen 16090 OPEN Tpar$ AS FILE V24 16100 OPEN Fil$ AS FILE 8 16110 ON ERROR GOTO 16220 16120 WHILE NOT Nomore 16130 Rad$=FNGetasc$ 16140 ; #V24,Rad$; 16150 ; Rad$; 16160 WEND 16170 CLOSE V24,8 16180 Z=FNSavescreen : ; 'F|rdr|jning f|r att undvika felaktigt eco!'; 16190 Z=FNDelay(1500.) : Z=FNPrintscreen 16200 OPEN Parv24$ AS FILE V24 16210 RETURN 0 16220 IF ERRCODE=34 THEN RESUME 16170 16230 IF ERRCODE=21 THEN RESUME 16270 16240 IF ERRCODE=53 THEN RESUME 16170 16270 ; RED 'Local mode!' : ; 16280 ; RED 'Filen finns ej!' : GOTO 16050 16290 FNEND 16300 DEF FNGetasc$ LOCAL Sp,St$=80 16310 Nomore=0 16320 IF LEN(Inline$) GOTO 16350 16330 ON ERROR GOTO 16410 16340 INPUT LINE #8,Inline$ 16350 ! 16360 ON ERROR GOTO 16370 Sp=PEEK2(PEEK2(65500)+4)-1 16380 IF LEN(Inline$)<=Sp THEN St$=Inline$ : Inline$='' ELSE St$=LEFT$(Inline$,Sp) : Inline$=RIGHT$(Inline$,Sp+1) 16390 RETURN St$ 16400 Nomore=-1 : RETURN '' 16410 RESUME 16400 16420 FNEND