1 REM Ins{nd av Kristoffer Eriksson <5357> 1988-12-12 22.00.55 (KERMIT)
10 ! save VIDEOTXB, 1985-05-03 11.32
20 EXTEND : INTEGER : OPTION BASE 0
30 COMMON K$=36,K2$=93,K22$=93,K3$=32,K4$=320,V24$=16,Login$=160,Alth,Nrh
40 COMMON Skala,Sv{rta,Abc,Fwid,Printer,Vmarg,F{rg$=16,Sparf$=16,Prbak
50 COMMON Prk$(15)=15,Printer$=30,Namn$(19,1)=20,Tele$(19)=160,Chain$=16,Dv$=4
60 Terminal=-1
70 Kdump=247 ! CTRL SH PF8
80 Kff=194 ! PF4
90 Kstop=192 ! PF1
100 Kv{rd=193 ! PF2
110 Kspara=245 ! CTRL SH PF6
120 Kh{mta=195 ! PF4
130 Atra=PEEK2(116)+6
140 IF Abc=0 THEN Z=FNFel(1)
150 !
160 DIM Grafik$=80,Text$=80,Crt$=0,Crt2$=1920,Attr$=1920,Spars$=16
170 Grafik$=" " : Text$=" "
180 POKE VAROOT(Crt$),128,7,0,120,128,7 : Attr$=" "
190 MID$(K$,11,2)=CVT%$(VARPTR(Attr$))
200 MID$(K3$,2,2)=CVT%$(VARPTR(Attr$))
210 Prgr=VARPTR(K2$)
220 !
230 DATA 1,2
240 DATA EPSON,C.ITOH M-1550 S/SC
250 !
260 DATA 27,65,1,13,10,-1
270 DATA 27,65,1,13,10,-1
280 DATA 27,65,9,13,10,-1
290 DATA 27,65,12,-1
300 DATA 27,65,7,13,10,-1
310 DATA 15,-1, 15,-1, 18,-1, 18,14,-1
320 DATA 27,42,0,128,-1, 27,42,1,128,-1
330 DATA 27,64,-1, -1, -1, 3,4,3,3,6,6,-1
340 DATA PR:VSA70A72.55
350 DATA 5,2,1,-1
360 !
370 ! C.ITOH M-1550 S/SC
380 DATA 27,84,48,50,13,10,-1
390 DATA 27,84,48,52,13,10,-1
400 DATA 27,84,49,56,13,10,-1
410 DATA 27,84,50,52,-1
420 DATA 27,84,49,53,13,10,-1
430 DATA 27,78,15,-1, 27,81,15,-1, 27,78,15,-1, 27,78,14,-1
440 DATA 27,78,15,27,83,132,-1, 27,81,15,27,83,132,-1
450 DATA 27,61,48,27,67,80,48,49,50,51,52,53,54,55,-1
460 DATA 48,50,53,49,54,51,52,55,-1, 27,67,-1, 4,4,4,4,8,8,-1
470 DATA PR:VSA70A72.55
480 DATA 5,2,1,0
490 !
500 Z=FNSkalinit
510 IF LEN(V24$) THEN Z=FNKommunicera(V24$,Login$) ELSE Z=FNH{mta
515 IF Prop THEN ; #10 CHR$(12);
520 CLOSE
530 !
540 ON ERROR GOTO 550 : CHAIN Chain$
550 Z=FNFel(2-(ERRCODE<>21))
560 RESUME 540
570 !
580 DEF FNGetv24(M) LOCAL X,Y
590 X=PEEK2(PEEK2(65500)+6) : Y=Y OR X : IF PEEK(65507)=Kstop THEN RETURN -1
600 IF X=0 AND M=1 THEN 590 ELSE IF X THEN GET #4 A$ : A$=CHR$(ASCII(A$) AND 127) : Z=FNDvvis(A$) : IF M=2 THEN 590
610 RETURN Y
620 FNEND
630 DEF FNKommunicera(V24$,Login$) LOCAL T,T3,Buf$=500
640 POKE PEEK2(65500)+2,VAROOT(Buf$),SWAP%(VAROOT(Buf$))
650 Wid=80 : IF Terminal OR Fwid<=40 THEN Wid=40
660 WIDTH Wid
670 ON ERROR GOTO 860
680 IF Abc=806 THEN POKE Atra,0 ! ATTR 0
690 OPEN V24$ AS FILE 1
700 IF Login$="" OR LEN(V24$)<5 THEN 820
710 ; CHR$(12); : Z=FNLine25(5) : ; CUR(0,0);
720 OPEN LEFT$(V24$,4)+"V"+RIGHT$(V24$,6) AS FILE 4
730 FOR I=1 TO LEN(Login$)
740 T=INSTR(1,CHR$(193,195,197,199,209,213,215),MID$(Login$,I,1))
750 IF T=6 THEN Z=FNGetv24(1) : GOTO 780
760 IF T=7 THEN A$=" " : WHILE INSTR(1,CHR$(10,13,3),A$)=0 AND FNGetv24(1)<>-1 : WEND : GOTO 780
770 IF T=0 THEN ; #4 MID$(Login$,I,1); ELSE ; #4 MID$(CHR$(13,24,8,9,3),T,1);
780 FOR J=1 TO 50 : IF FNGetv24(2)>0 THEN J=1
790 NEXT J : IF PEEK(65507)=Kstop THEN I=32760
800 NEXT I
810 !
820 ; CHR$(12);
830 Z=FNLine25(1) : POKE SYS(10)+82,Pos,SWAP%(Pos)
840 ON ERROR GOTO 860 : GET #ABS(SGN(Terminal)) A$
850 ; A$; : GOTO 840
860 IF ERRCODE<>53 THEN RESUME 880 ELSE RESUME 870
870 Pos=PEEK2(SYS(10)+82) : ON FNPf GOTO 830,890
880 Z=FNFel(9)
890 CLOSE
900 POKE PEEK2(65500)+2,0,0 : IF Abc=802 THEN OUT 56,6,57,24
910 RETURN 0
920 FNEND
930 !
940 DEF FNPf LOCAL A,F1
950 IF SYS(5) THEN GET A$
960 F1=PEEK(Atra) : Wid=80 : IF PEEK2(SYS(10)+84)<=40 THEN Wid=40
970 A=INSTR(1,CHR$(Kdump,Kff,Kv{rd,Kspara,Kh{mta,Kstop,192),CHR$(PEEK(65507)))
980 ON A+1 GOTO 990,1020,1020,1000,1000,1000,1120,1120
990 ; CHR$(7); : GOTO 1110
1000 IF Niv} THEN 990 ELSE Niv}=1
1010 Crt2$=Crt$ : IF Abc=806 THEN Z=CALL(VARPTR(K$),0)
1020 ON A GOTO 1030,1040,1060,1070,1080
1030 Z=FNDump : GOTO 1110
1040 IF Prop THEN ; #10 CHR$(12);
1050 GOTO 1110
1060 Z=FNSt{llparm : GOTO 1090
1070 Z=FNSpara : GOTO 1090
1080 Z=FNH{mta
1090 WIDTH Wid : Crt$=Crt2$ : IF Abc=806 THEN POKE Atra,F1 : Z=CALL(VARPTR(K$),1)
1100 Niv}=0
1110 RETURN 1
1120 RETURN 2
1130 FNEND
1140 !
1150 DEF FNDump LOCAL T,T3,Attr1,Attr2
1160 ON ERROR GOTO 1640
1170 IF NOT Prop THEN OPEN Prk$(15) AS FILE 10 : Prop=-1
1180 Z=FNLine25(5) : PUT #10 Prk$(11)
1190 IF Abc=806 THEN 1420
1200 !
1210 ! DUMP ABC 802
1220 FOR I=30720 TO 32600 STEP 80
1230 Grafik$="" : Text$="" : Grafik=0 : Grfinns=0
1240 Attr1=7 : Attr2=1 AND Wid<=40 : Attr$=""
1250 FOR J=I TO I+79 STEP 80/Wid
1260 T=PEEK(J) AND 127 : IF T>=32 THEN 1330
1270 IF T<8 THEN Grafik=0 : Attr1=(Attr1 AND 56) OR (T AND 7) : GOTO 1320
1280 IF T>=16 AND T<=23 THEN Grafik=-1 : Attr1=(Attr1 AND 56) OR (T AND 7) : GOTO 1320
1290 IF T=24 THEN Attr1=(Attr1 AND 56) OR (Attr1 AND 56)/8 : GOTO 1320
1300 IF T=27 THEN Attr1=Attr1 AND 7 : GOTO 1320
1310 IF T=28 THEN Attr1=(Attr1 AND 7) OR (Attr1 AND 7)*8 : GOTO 1320
1320 T=32 : IF NOT Prbak THEN 1340
1330 IF Grafik AND (T AND 96)<>64 OR (T=32 AND Prbak) OR T=127 THEN Text$=Text$+" " : Grafik$=Grafik$+CHR$(T-32) : Grfinns=-1 : GOTO 1350
1340 Text$=Text$+CHR$(T) : Grafik$=Grafik$+CHR$(255)
1350 Attr$=Attr$+CHR$(Attr1,Attr2)
1360 NEXT J
1370 Z=FNSkrivrad
1380 IF SYS(5) THEN GET A$ : IF A$=CHR$(Kstop) THEN I=32600
1390 NEXT I
1400 GOTO 1600
1410 !
1420 ! DUMP ABC 806
1430 FOR I=30720 TO 32600 STEP 80
1440 Grafik$="" : Text$="" : Grfinns=0 : Attr1=7 : Attr2=0 : Attr$=""
1450 FOR J=I TO I+79
1460 T=PEEK(J) : T3=INP(53)
1470 IF (T3 AND 192)=192 IF (T3 AND 56)/8=(T3 AND 7) THEN Attr2=MOD(INSTR(1,CHR$(219,201,210,210,255,237,246),CHR$(T3)),4)
1480 IF Attr2 OR Wid=40 THEN J=J+1 : T3=PEEK(J) : T3=INP(53)
1490 IF T3>0 THEN Attr1=T3 AND 63
1500 Attr$=Attr$+CHR$(Attr1,Attr2)
1510 IF (T AND 96)=0 OR T=127 THEN 1550
1520 IF Attr2=3 THEN T=0 : GOTO 1550
1530 IF Prbak IF T=32 AND Attr1 AND 56 THEN T=0 : GOTO 1550
1540 Text$=Text$+CHR$(T AND 127) : Grafik$=Grafik$+CHR$(255) : GOTO 1560
1550 Grafik$=Grafik$+CHR$(T) : Text$=Text$+" " : Grfinns=-1
1560 NEXT J
1570 Z=FNSkrivrad
1580 IF SYS(5) THEN GET A$ : IF A$=CHR$(Kstop) THEN I=32600
1590 NEXT I
1600 IF Prk$(13)<>"" THEN PUT #10 Prk$(13)+MID$(Prk$(12),8,1)
1610 ; #10 Prk$(5)+SPACE$(Vmarg)+Prk$(Tres)+STRING$(Wid,ASCII("-"))
1620 ; #10
1630 RETURN 0
1640 Z=FNFel(10) : CLOSE 10 : Prop=0 : RESUME 1630
1650 FNEND
1660 !
1670 DEF FNSpara LOCAL T,T3,P.,P2.,Attr1,A1,Attr2,A2,W
1680 W=PEEK(SYS(10)+84)
1690 ; FNHuvud$("Spara sida")
1700 IF Sparf$=Spars$ AND LEN(Sparf$) THEN 1750
1710 Z=FNLine25(4)
1720 Text$="" : IF LEN(Sparf$) THEN Text$=" (RET="+Sparf$+")"
1730 ; CUR(4,0) CYA "Vad ska lagrings-filen heta" Text$ " ? ";
1740 Z=FNGet(16,VAROOT(Sparf$),Sparf$,1) : IF Z<>1 THEN 2130
1750 Sparf$=FNExt$(Sparf$)
1760 IF Sparf$=Spars$ THEN 1850
1770 ON ERROR GOTO 1860 : OPEN Sparf$ AS FILE 11
1780 Z=FNFel(4)
1790 Z=FNJanej(CYA+CUR(6,0)+"Ska den nya bilden ers{tta den/de gamla (svara J) eller l{ggas sist (N)")
1800 IF Z=2 THEN CLOSE 11 : GOTO 1870
1810 IF Z<>3 THEN 1710
1820 GET #11 A$ : WHILE A$=CHR$(40) OR A$=CHR$(80)
1830 POSIT #11,POSIT(11)+4+ASCII(A$)*24 : GET #11 A$
1840 WEND
1850 POSIT #11,POSIT(11)-1 : GOTO 1890
1860 IF ERRCODE<>21 THEN 2090 ELSE RESUME 1870
1870 ON ERROR GOTO 2090 : PREPARE Sparf$ AS FILE 11
1880 !
1890 WIDTH W : Z=FNLine25(7) : Crt$=Crt2$ : IF Abc=806 THEN Z=CALL(VARPTR(K$),1)
1900 ON ERROR GOTO 2090
1910 PUT #11 CHR$(Wid,0,0,0,0)
1920 IF Abc=806 THEN 2000
1930 FOR I=32560 TO 30720 STEP -80
1940 FOR J=I TO I+79 STEP 80/Wid
1950 PUT #11 CHR$(PEEK(J) OR 128 AND PEEK(J)<32)
1960 NEXT J
1970 NEXT I
1980 GOTO 2050
1990 !
2000 POKE VARPTR(K4$),VARPTR(Text$),SWAP%(VARPTR(Text$)),VARPTR(Grafik$),SWAP%(VARPTR(Grafik$))
2010 FOR I=32560 TO 30720 STEP -80
2020 Text$=STRING$(Wid,0)
2030 Z=CALL(VARPTR(K4$)+8,I) : PUT #11 Text$
2040 NEXT I
2050 PUT #11 CHR$(0)
2060 Spars$=Sparf$
2070 RETURN 0
2080 !
2090 RESUME 2100
2100 ; FNHuvud$("Spara sida")
2110 IF ERRCODE=21 THEN Text$=Sparf$ : Z=FNFel(5) : GOTO 1710
2120 Z=FNFel(6) : RETURN 1
2130 WIDTH W : RETURN 0
2140 FNEND
2150 !
2160 DEF FNH{mta LOCAL Fil$=16,W,R,F,P.,H,G,S,A$=1
2170 W=PEEK(SYS(10)+84) : S=SYS(10)+82
2180 Text$="" : Fil$=Spars$
2190 ; FNHuvud$("Visa sparade sidor")
2200 IF LEN(Text$) THEN ; CUR(20,0) YEL "'" Fil$ "' {r slut."
2210 Z=FNLine25(4) : Text$="" : IF LEN(Fil$) THEN Text$=" (RET="+Fil$+")"
2220 ; CUR(4,0) CYA "Vad heter lagrings-filen" Text$ " ? ";
2230 Z=FNGet(16,VAROOT(Fil$),Fil$,1) : IF Z<>1 THEN 2490
2240 Fil$=FNExt$(Fil$) : ON ERROR GOTO 2430
2250 F=12 : IF Fil$=Spars$ THEN F=11 : P.=POSIT(11) : POSIT #F,0. : GOTO 2270
2260 OPEN Fil$ AS FILE F
2270 GET #F A$ : WHILE A$=CHR$(40) OR A$=CHR$(80)
2280 H=6
2290 WIDTH ASCII(A$) : ; CHR$(12); : IF Abc=806 THEN POKE Atra,0
2300 GET #F Text$ COUNT 4
2310 R=23 : WHILE R>=0
2320 GET #F Text$ COUNT ASCII(A$) : ; CUR(0,0) : ; CUR(R,0) Text$;
2330 R=R-1 : WEND : GET #F A$ : ;
2340 Z=FNLine25(H) : ; CUR(0,0); : GET Text$ : R=ASCII(Text$)
2350 IF R=63 THEN H=H XOR 7 : GOTO 2340
2360 IF R=13 THEN POSIT #F,0 : GET #F A$ : GOTO 2390
2370 IF R=Kh{mta THEN ; CHR$(7); : GOTO 2340
2380 IF R<>9 AND R<>32 THEN ON FNPf GOTO 2340,2410
2390 WEND
2400 GOTO 2190
2410 Text$="" : GOTO 2190
2420 !
2430 RESUME 2440
2440 ; FNHuvud$("Visa sparade sidor")
2450 IF ERRCODE=21 THEN Text$=Fil$ : Z=FNFel(5) : GOTO 2210
2460 Z=FNFel(7)
2470 GOTO 2210
2480 !
2490 IF F<>11 THEN CLOSE 12 ELSE POSIT #11,P.
2500 WIDTH W : RETURN 0
2510 FNEND
2520 !
2530 DEF FNExt$(Fil$)=Fil$+LEFT$(".VTX",4 AND INSTR(1,Fil$,".")=0)
2540 !
2550 DEF FNDvvis(T0$) LOCAL R,S,T$=1
2560 S=SYS(10)+83
2570 IF Esc THEN T$=CHR$(ASCII(T0$) AND 31 OR 128) : GOTO 2590 ELSE T$=T0$
2580 ON INSTR(1,CHR$(10,11,12,27,30),T$)+1 GOTO 2590,2670,2690,2710,2720,2730
2590 IF PEEK(S-1)<40 THEN 2610
2600 IF PEEK(S)>=23 THEN ; CUR(0,0); ELSE ; CHR$(13,10);
2610 IF ASCII(T$)=9 THEN POKE S-1,PEEK(S-1)+1 ELSE ; T$;
2620 Esc=0 : IF Abc<>806 THEN RETURN 0
2630 R=30720+PEEK(S)*80+2*PEEK(S-1) : Z=PEEK(R) : Z=INP(53)
2640 IF Z=246 OR Z=255 THEN POKE S+7,PEEK(S+7) AND 249 OR 2*(Z=246)+4
2650 Z=PEEK(R+1) : IF INP(53)<>0 THEN POKE S+6,INP(53)
2660 RETURN 0
2670 R=PEEK(S)+1 : IF R>23 THEN R=0
2680 GOTO 2700
2690 R=PEEK(S)-1 : IF R<0 THEN R=23
2700 POKE S,R : RETURN 0
2710 ; CHR$(12); : Z=FNLine25(5) : ; CUR(0,0); : RETURN 0
2720 Esc=-1 : RETURN 0
2730 ; CUR(0,0); : RETURN 0
2740 FNEND
2750 !
2760 DEF FNV{lj(R,K,D,S,Antal,Start,P$) LOCAL Galt,Alt,Gt$=1,Fr
2770 Z=FNLine25(2)
2780 Fr=R+D*Antal-(D=1)
2790 ; CUR(Fr,K) CYA CUR(Fr,K) "Vilket alternativ ?";
2800 Alt=Start-1
2810 ; CUR(R+D*Galt,K-LEN(P$)) SPACE$(LEN(P$));
2820 ; CUR(R+D*Alt,K-LEN(P$)) P$ CUR(Fr,K+19);Alt+1 AND (Alt<>Antal-1 OR S);
2830 Galt=Alt
2840 GET Gt$ : IF Gt$<"1" OR Gt$>"9" THEN 2880
2850 IF Antal<10 IF Gt$<=NUM$(Antal) THEN Alt=VAL(Gt$)-1 : GOTO 2810 ELSE 2810
2860 Alt=Alt+1 : Z=SYS(6)+FNInp(1,Antal,VARPTR(Alt),Fr,K+18) : Alt=Alt-1
2870 IF O{ndr THEN Z=SYS(6) ELSE 2810
2880 ON INSTR(1,CHR$(48,8,9,196,198,Kstop,13),Gt$)+1 GOTO 2840,2890,2900,2910,2900,2910,2920,2930
2890 Alt=Antal-1 : GOTO 2810
2900 IF Alt>0 THEN Alt=Alt-1 : GOTO 2810 ELSE Alt=Antal-1 : GOTO 2810
2910 IF Alt