1 REM Ins{nd av: David Andersson <5201> 1985-10-13 23.41.51 10 REM . SAVE BASTERM 20 REM -------------------------------- 30 REM 1985-09-30 40 REM DAVID ANDERSSON 50 REM MEDL. 5201 60 REM 70 REM TERMINALRUTIN I BASIC 80 REM V24 RUTINER I ASSEMBLY (SOFTSIO) 90 REM -------------------------------- 100 REM 110 REM ANV[NDA VARIABLER; 120 REM A1% A2% A3% A4% A5% A% B1% C1% C2% C% F1% F1$ F2% F% F$ G% G$ 130 REM K1% K1%() K2% K% K%() S1% S2% V1% V1%() V2% V% V%() X1% X% Z% 140 REM 200 REM -- INIT DATA 210 DIM F1$=122% : REM S[ND FIL BUFFERT 220 F1%=0% : REM FILNUMMER, S[ND FIL 230 F2%=0% : REM FILNUMMER, SPELA IN FIL 240 F%=1% : REM STATUS; 1=NORMAL, 2=SPELA IN FIL 250 GOSUB 1000 : REM INIT TABELLER 260 REM -- ADRESS TILL V24 RUTINER 265 REM [NDRA TILL A%=49152% F\R 16K MINNE 270 A%=32768% : IF PEEK(A%)<>195% STOP 280 REM A1%..A5% F\R SNABBARE CALL-SATSER 290 A1%=A%+15% : REM TEST IF INDATA 300 A2%=A%+30% : REM CHAR TO SCREEN AND UPDATE CURSOR 310 A3%=A%+18% : REM GET INDATA 320 A4%=A%+27% : REM GET FROM KEYBOARD 330 A5%=A%+24% : REM SEND DATA 340 REM -- DEFAULT V24 INST[LLNINGAR 350 X1%=1% : REM XON/XOFF=YES 360 S1%=75% : REM S[ND I 75 BAUD 370 S2%=1200% : REM TAEMOT I 1200 BAUD 380 B1%=0% : REM PARITET KOD (7 BIT = DATA OCH 1 BIT = 0) 390 GOSUB 4100 : REM INST[LLNINGAR 400 ; CUR(23%,0%); 500 REM 510 REM -- MAIN PROGRAM 520 REM KOMMENTAR-RADER MED "!!" TAS BORT F\R ATT SNABBA UPP PROGRAMMET 530 C%=1% : REM LOOP STYRNING 540 GOSUB 5000 : REM STARTA V24 INTERUPT 550 Z%=CALL(A2%) : REM T[ND CURSOR 560 REM MAIN LOOP 570 REM !! TESTA OM DATA MOTTAGET 580 IF CALL(A1%)<256% GOTO 650 590 REM !! H[MTA OCH BEHANDLA MOTTAGET DATA, 3 GGR F\R ATT SPARA TID 600 REM !! CALL(A2%,..) SKRIVER P] SK[RMEN OCH UPDATERAR CURSORN 610 V%=CALL(A3%,128%) : Z%=CALL(A2%,V%(V%)) : IF V1%(V%) AND F% GOSUB 2000 620 V%=CALL(A3%,128%) : Z%=CALL(A2%,V%(V%)) : IF V1%(V%) AND F% GOSUB 2000 630 V%=CALL(A3%,128%) : Z%=CALL(A2%,V%(V%)) : IF V1%(V%) AND F% GOSUB 2000 640 REM !! TESTA OM TANGENT NEDTRYCKT 650 K%=CALL(A4%,128%) : IF K%=128% GOTO 730 660 REM !! KLICK I H\GTALAREN 670 OUT 6%,0%,6%,121% 680 REM !! S[ND DATA ENLIGT K%() 690 IF K%(K%) Z%=CALL(A5%,K%(K%)) 700 REM !! EVENTUELL SPECIALBEHANDLING 710 IF K1%(K%) GOSUB 3000 720 REM !! S[NDA TECKEN FR]N FIL 730 IF F1% GOSUB 6000 740 REM !! LOOP UNTIL C%=0 750 IF C% GOTO 560 760 REM END LOOP 770 REM 780 Z%=CALL(A%) : REM ST[NG V24 INTERUPT 790 END 1000 REM ------ INIT TABELLER 1010 REM INDEX I F\LJANDE TABELLER [R ASCII V[RDEN (0..127). 1020 REM INDEX 128 BETYDER ATT INGET TECKEN FINNS TILLG[NGLIGT 1021 REM FR]N V24 ELLER TANGENTBORDET. 1022 REM TABELLER BLIR SNABBARE [N ATT TESTA MED EN MASSA IF-SATSER 1023 REM P] VARJE TECKEN. 1030 DIM V%(128%) : REM OMVANDLA MOTTAGNA ASCII (0=STRUNA I TKN) 1040 DIM V1%(128%) : REM SPECIALBEHANDLA MOTTAGET TKN (1=NORMAL,2=FILE,3=1+2) 1050 DIM K%(128%) : REM OMVANDLA S[NDA TANGENTKODER (0=STRUNTA I TANGENT) 1060 DIM K1%(128%) : REM SPECIALBEHANDLA TANGENTER 1070 FOR V%=0% TO 128% : V%(V%)=V% : V1%(V%)=2% : NEXT V% 1080 FOR K%=0% TO 127% : K%(K%)=K% : K1%(K%)=0% : NEXT K% 1090 REM DATA MOTTAGET ASCII , VISA P] SK[RMEN , SPECIAL BEHANDLA 1100 DATA 0,0,2 1110 DATA 1,0,0 1120 DATA 2,0,0 1130 DATA 3,0,0 1140 DATA 4,0,0 1150 DATA 5,0,0 1160 DATA 6,0,0 1170 DATA 9,32,0 1180 DATA 10,10,3 1190 DATA 11,0,0 1200 DATA 13,13,3 1210 DATA 14,0,0 1220 DATA 15,0,0 1230 DATA 16,0,0 1240 DATA 17,0,0 1250 DATA 18,0,0 1260 DATA 19,0,0 1270 DATA 20,0,0 1280 DATA 21,0,0 1290 DATA 22,0,0 1300 DATA 23,0,0 1310 DATA 24,0,0 1320 DATA 25,0,0 1330 DATA 26,0,0 1340 DATA 27,0,1 1350 DATA 28,0,0 1360 DATA 29,0,0 1370 DATA 30,0,0 1380 DATA 31,0,0 1390 DATA 128,0,0 1400 DATA -1,0,0 1410 REM DATA TANGENT KOD , S[ND ASCII , SPECIAL BEHANDLA 1420 DATA 0,0,1 1430 DATA 1,0,1 1440 DATA -1,0,0 1450 READ V%,V1%,V2% 1460 IF V%>=0% V%(V%)=V1% : V1%(V%)=V2% : GOTO 1450 1470 READ K%,K1%,K2% 1480 IF K%>=0% K%(K%)=K1% : K1%(K%)=K2% : GOTO 1470 1490 RETURN 2000 REM ------ SPECIALBEHANDLA MOTTAGET DATA 2010 REM SPECIALBEHANDLA TECKEN 2020 IF V%=0% IF F2% GOSUB 4800 : REM STOPPA INSPELNING TILL FIL 2030 IF V%=27% GOSUB 2200 : REM KOLLA ESCAPE SEKV 2040 REM SKRIV TECKEN TILL FIL (INGEN KOLL P] ERR 20) 2050 IF F2% THEN IF V%(V%) ONERRORGOTO 4950 : PRINT #F2%CHR$(V%(V%)); : ONERRORGOTO 0 2060 RETURN 2200 REM ------ ESC SEKV (ABC80/800 SEKV F\R CURSOR POSITION) 2210 X%=1000% : REM TIMEOUT 2220 V%=CALL(A%+18%,128%) : IF V%=128% X%=X%-1% : IF X%>0% GOTO 2220 2230 IF V%<>61% OR X%<=0% RETURN 2240 C1%=CALL(A%+18%,128%) : IF C1%=128% X%=X%-1% : IF X%>0% GOTO 2240 2250 C2%=CALL(A%+18%,128%) : IF C2%=128% X%=X%-1% : IF X%>0% GOTO 2250 2260 IF X%<=0% RETURN 2270 ; CHR$(27%,61%,C1%,C2%); 2280 Z%=CALL(A%+30%) : REM SET CURSOR 2290 RETURN 3000 REM ------ SPECIALBEHANDLA TANGENT 3020 IF K%=1% THEN GOSUB 4000 : REM INST[LLNINGAR 3030 IF K%=0% THEN Z%=CALL(A5%,0%) : REM S[ND NULL 3040 RETURN 4000 REM ------ INST[LLNINGAR 4010 C1%=PEEK(65011%) : C2%=PEEK(65012%) : REM KOMIH]G CURSOR POSITION 4020 IF C1%<11% C1%=11% 4030 Z%=CALL(A%) : REM ST[NG V24 INTERUPT 4040 GOSUB 4100 : REM MENY 4050 IF C% GOSUB 5000 : REM STARTA V24 INTERUPT 4060 ; CUR(C1%,C2%); : Z%=CALL(A%+30%) : REM ST[LL TILLBAKA CURSOR POSITION 4080 RETURN 4100 REM ------ INST[LLNINGAR (MENY) 4101 GOSUB 4600 : GOSUB 4800 : REM ST[NG FILER 4105 REM 4110 FOR X%=0% TO 10% : ; CUR(X%,0%)TAB(39%); : NEXT X% 4120 ; CUR(0%,0%)'============== BASTERM ================' 4130 ; '1 MOTTAGNINGS HASTIGHET...'S2% 4140 ; '2 S[ND HASTIGHET..........'S1% 4150 ; '3 XON/XOFF (JA=1).........'X1% 4160 ; '4 PARITET KOD (SPACE=0)...'B1% 4170 ; '5 S[ND FIL................'; : IF F1% ; F$ ELSE ; 4180 ; '6 SPELA IN FIL............'; : IF F2% ; F$ ELSE ; 4190 ; '7 TERMINAL ON LINE (TILLBAKA M. CTRL-A)' 4200 ; '9 AVSLUTA' 4210 ; 4220 ; '======================================='; 4230 ; CUR(9%,1%)'V[LJ SIFFRA'; : GET G$ : G%=ASC(G$)-48% 4240 ; CUR(9%,0%)TAB(39%)CUR(9%,0%); 4250 IF G%=1% ; 'MOTTAGNINGS HASTIGET'; : INPUT S2% 4260 IF G%=2% ; 'S[ND HASTIGHET'; : INPUT S1% 4270 IF G%=3% IF X1% X1%=0% ELSE X1%=1% 4280 IF G%=4% ; 'PARITET KOD (SPACE=0,NONE=4,MM.)'; : INPUT B1% 4290 IF G%=5% GOSUB 4500 4300 IF G%=6% GOSUB 4700 4310 IF G%=7% GOTO 4400 : REM ON LINE 4320 IF G%=9% C%=0% : RETURN 4330 GOTO 4105 4340 RETURN 4400 REM ON LINE 4410 GOSUB 5100 : REM INIT V24 RUTINER 4420 ; CUR(10%,0%)TAB(39%); 4430 Z%=CALL(A%+27%) : REM DUMMY L[S FR]N TANGENTBORDET 4440 RETURN 4500 REM ------ STARTA S[ND FIL F$ 4501 IF F1% OR F2% GOSUB 4600 : GOSUB 4800 4502 ; 'S[ND FIL FR]N VILKEN FIL'; : INPUT F$ : IF F$='' RETURN 4510 ONERRORGOTO 4900 : F1%=1% : F1$='' 4520 OPEN F$ ASFILE F1% 4530 ONERRORGOTO 0 4540 RETURN 4600 REM ------ STOPPA S[ND FIL 4610 IF F1% CLOSE F1% : F1%=0% 4620 RETURN 4700 REM ------ STARTA INSPELNING TILL FIL F$ 4701 IF F1% OR F2% GOSUB 4600 : GOSUB 4800 4702 ; 'SPARA P] FIL, SKAPA NY FIL'; : INPUT F$ : IF F$='' RETURN 4710 ONERRORGOTO 4950 : F2%=1% 4720 PREPARE F$ ASFILE F2% 4730 ONERRORGOTO 0 4740 F%=2% 4750 RETURN 4800 REM ------ STOPPA INSPELNING TILL FIL 4810 IF F2% ONERRORGOTO 4900 : CLOSE F2% : F2%=0% : F%=1% : ONERRORGOTO 0 4820 RETURN 4900 REM ERROR F1% 4910 CLOSE F1% : F1%=0% 4920 IF ERRCODE=34% RETURN 4930 ; : ; '- ERROR'ERRCODE' FILE 'F$;CHR$(7%) 4940 RETURN 4950 REM ERROR F2% 4960 CLOSE F2% : F2%=0% : F%=1% 4970 ; : ; '- ERROR'ERRCODE' FILE 'F$;CHR$(7%) 4980 RETURN 5000 REM ------ STARTA V24 INTERUPT 5010 REM OVERFLOW TECKEN = 127 5020 Z%=CALL(A%+3%,127%+SWAP%(0%)) 5030 RETURN 5100 REM ------ INIT V24 RUTINER 5110 Z%=CALL(A%+12%,X1%) : REM INIT XON/XOFF 5120 Z%=CALL(A%+6%,S1%+B1%*4096%) : REM S[TT MOTTAGN.HASTIGHET OCH PARITET 5130 Z%=CALL(A%+9%,S2%+B1%*4096%) : REM S[TT S[NDHASTIGHET OCH PARITET 5140 RETURN 6000 REM ------ S[ND ETT TECKEN FR]N FIL 6001 REM KOLLA F\RST UTBUFFERTEN 6005 IF CALL(A%+21%)>10% RETURN 6010 IF F1$<>'' GOTO 6100 6020 ONERRORGOTO 4900 6030 INPUTLINE #F1%,F1$ 6040 F1$=LEFT$(F1$,LEN(F1$)-1%) : REM TA BORT LF 6050 ONERRORGOTO 0 6100 K%=ASC(F1$) : F1$=RIGHT$(F1$,2%) 6110 Z%=CALL(A5%,K%) : REM S[ND DATA 6120 RETURN