1 REM Ins{nd av Kristoffer Eriksson <5357>    1988-12-12 21.54.27 (KERMIT)
10 ! save MF0:VTEXDEF,  1984-11-08 14.09
20 EXTEND : INTEGER : OPTION BASE 0
30 Kstop=192 ! PF1
40 Km=1
50 ! 
60 IF PEEK2(38)=1025 THEN Abc=806 ELSE Abc=802
70 Atra=PEEK2(116)+6
80 Fwid=PEEK2(SYS(10)+84)
90 DIM Prk$(19,15)=15,Printer$(19)=30,Printer(19,3),F{rg$(19)
100 ! 
110 ! 0=Mata 1 lin, 1=mata 2, 2=mata 9, 3=norm radavs, 4=mata 7, 5=margstil
120 ! 6-8=stil 1-3, 9=grafik 1 & sv{rta 2, 10=grafik 2 & 3, 11=init, 12=f{rger
130 ! 13=V{lj f{rg, 14=Pixels v{nster,h|ger halva, stil 1-3
140 ! 
150 ! Nedan: Standardpr, antal pr, deras namn, pr-data
160 DATA 1,2
170 DATA EPSON,C.ITOH M-1550 S/SC
180 ! 
190 DATA 27,65,1,13,10,-1
200 DATA 27,65,1,13,10,-1
210 DATA 27,65,9,13,10,-1
220 DATA 27,65,12,-1
230 DATA 27,65,7,13,10,-1
240 DATA 15,-1, 15,-1, 18,-1, 18,14,-1
250 DATA 27,42,0,128,-1, 27,42,1,128,-1
260 DATA 27,64,-1, -1, -1, 3,4,3,3,6,6,-1
270 DATA PR:VSA70A72.55
280 DATA 5,2,1,-1
290 ! 
300 ! C.ITOH M-1550 S/SC
310 DATA 27,84,48,50,13,10,-1
320 DATA 27,84,48,52,13,10,-1
330 DATA 27,84,49,56,13,10,-1
340 DATA 27,84,50,52,-1
350 DATA 27,84,49,53,13,10,-1
360 DATA 27,78,15,-1, 27,81,15,-1, 27,78,15,-1, 27,78,14,-1
370 DATA 27,78,15,27,83,132,-1, 27,81,15,27,83,132,-1
380 DATA 27,61,48,27,67,80,48,49,50,51,52,53,54,55,-1
390 DATA 48,50,53,49,54,51,52,55,-1, 27,67,-1, 4,4,4,4,8,8,-1
400 DATA PR:VSA70A72.55
410 DATA 5,2,1,0
420 ! 
430 Z=FNInitpr+FNHuvmen
440 ON ERROR GOTO 450 : CHAIN "XSMENU0"
450 END 
460 ! 
470 DEF FNHuvmen LOCAL Alt,Skrv
480   Alt=1 : Skrv=1
490   WIDTH 80
500   IF Abc=806 THEN POKE Atra,5 ! ATTRIBUTE 5
510   ; FNHuvud$("Huvudmeny") : ; CUR(0,49) "Skrivare:" YEL
520   ; CUR(23,0) "Kristoffer Eriksson.";
530   ; CUR(5,4) "1. [ndra skrivarkoder"
540   ; "    2. [ndra standard-utskriftsparametrar"
550   ; "    3. St{ll standardskrivare"
560   ; "    4. Spara inst{llningarna"
570   ; "    5. Gl|m alla osparade {ndringar"
580   ; "    6. Avsluta"
590   ; "    0. Huvudmenyn"
600   FOR I=0 TO Antpr+(Antpr=20)
610     ; USING "# & &" CUR(2+I,44) I+1 MID$("* ",(I=Stdpr-1)+2,1) Printer$(I);
620   NEXT I 
630   Alt=FNV{lj(5,4,1,0,7,Alt,"-->")
640   IF Alt>3 THEN 670
650   Z=FNV{lj(2,44,1,-1,Antpr-(Antpr<20),Skrv,"-->") : IF Z=0 THEN 510
660   Skrv=Z
670   ON Alt GOTO 690,710,730,750,770,790,850
680   ! _Skrvkoder__
690   Z=FNSt{llprkod(Skrv-1) : GOTO 490
700   ! _Utskrpar__
710   Z=FNSt{llparm(Skrv-1) : GOTO 490
720   ! _Stdprint__
730   Stdpr=Skrv : GOTO 490
740   ! _Spara__
750   Z=FNLagrapr : GOTO 490
760   ! _Gl|m__
770   Z=FNInitpr : Alt=1 : GOTO 490
780   ! _Slut__
790   Z=FNJanej(CUR(15,0)+"Har du sparat dina {ndringar")
800   IF Z<>2 AND Z<>1 THEN Alt=4 : GOTO 490
810   ; CUR(23,0) SPACE$(60) CUR(14,0) SPACE$(40) CUR(13,0)
820   IF Abc=802 THEN OUT 56,6,57,24 ELSE ; CUR(24,0) SPACE$(80) CUR(13,0)
830   WIDTH Fwid : RETURN 0
840   ! _Huvprog__
850   IF PEEK(65507)<>13 THEN 490
860   Z=FNJanej(CUR(15,0)+"Har du sparat dina {ndringar")
870   IF Z<>2 AND Z<>1 THEN Alt=4 : GOTO 490
880   Dv$="RAM:" : F$="VIDEOTXA"
890   ON ERROR GOTO 900 : CHAIN Dv$+F$
900   RESUME 910
910   ON ERROR GOTO 920 : CHAIN F$
920   ; CUR(20,0) RED CHR$(7);
930   ; "S{tt i programdisketten med '" F$ "'."
940   ; RED "Tryck p} RETURN !"
950   A$="" : WHILE A$<>CHR$(13) : GET A$ : WEND 
960   RESUME 490
970 FNEND 
980 ! 
990 DEF FNV{lj(R,K,D,S,Antal,Start,P$) LOCAL Galt,Alt,Gt$=1,Fr
1000   Z=FNLine25(2)
1010   Fr=R+D*Antal-(D=1)
1020   ; CUR(Fr,K) CYA CUR(Fr,K) "Vilket alternativ ?";
1030   Alt=Start-1
1040   ; CUR(R+D*Galt,K-LEN(P$)) SPACE$(LEN(P$));
1050   ; CUR(R+D*Alt,K-LEN(P$)) P$ CUR(Fr,K+19);Alt+1 AND (Alt<>Antal-1 OR S);
1060   Galt=Alt
1070   GET Gt$ : IF Gt$<"1" OR Gt$>"9" THEN 1110
1080   IF Antal<10 IF Gt$<=NUM$(Antal) THEN Alt=VAL(Gt$)-1 : GOTO 1040 ELSE 1040
1090   Alt=Alt+1 : Z=SYS(6)+FNInp(1,Antal,VARPTR(Alt),Fr,K+18) : Alt=Alt-1
1100   IF O{ndr THEN Z=SYS(6) ELSE 1040
1110   ON INSTR(1,CHR$(48,8,9,196,198,Kstop,13),Gt$)+1 GOTO 1070,1120,1130,1140,1130,1140,1150,1160
1120   Alt=Antal-1 : GOTO 1040
1130   IF Alt>0 THEN Alt=Alt-1 : GOTO 1040 ELSE Alt=Antal-1 : GOTO 1040
1140   IF Alt=1 AND I<=12
1210     I=I+FNParm(I,Skrv)
1220   WEND : RETURN 0
1230 FNEND 
1240 ! 
1250 DEF FNParm(Nr,Skrv) LOCAL X
1260   IF O{ndr THEN 1380
1270   IF LEN(F{rg$(Skrv))<9 THEN F{rg$(Skrv)=STRING$(9,0)
1280   ; FNHuvud$("St{ll parametrar")
1290   ; YEL : ; "Skrivare" Skrv+1 "= " Printer$(Skrv)
1300   ; : ; "Utskriftsskala 1/2/3 (" NUM$(Printer(Skrv,1)) ")"
1310   ; "V{nstermarginal (" NUM$(Printer(Skrv,0)) ")"
1320   ; "Sv{rta 1/2 (" NUM$(Printer(Skrv,2)) ")"
1330   DATA Svart grafik,R|d,Gr|n,Gul,Bl},Magenta,Cyan,Vit,Svart text
1340   ; : RESTORE 1330 : X=1 : WHILE X<10
1350     READ A$ : ; A$ TAB(14) "0-7  (" NUM$(INSTR(1,Prk$(Skrv,12),MID$(F{rg$(Skrv),X,1))-1) ")"
1360   X=X+1 : WEND 
1370   Z=FNLine25(3)
1380   IF Nr<4 THEN ON Nr GOTO 1390,1400,1410 ELSE 1420
1390   RETURN FNInp(1,3,VARPTR(Printer(Skrv,1)),6,29)
1400   RETURN FNInp(0,999,VARPTR(Printer(Skrv,0)),7,29)
1410   RETURN FNInp(1,2,VARPTR(Printer(Skrv,2)),8,29)
1420   X=INSTR(1,Prk$(Skrv,12),MID$(F{rg$(Skrv),Nr-3,1))-1
1430   Z=FNInp(0,7,VARPTR(X),Nr+6,24) : IF O{ndr THEN RETURN Z
1440   MID$(F{rg$(Skrv),Nr-3,1)=MID$(Prk$(Skrv,12)+STRING$(12,0),X+1,1) : RETURN 1
1450 FNEND 
1460 ! 
1470 DEF FNSt{llprkod(Skrv) LOCAL I,X,X$=40,Alt
1480   ; FNHuvud$("[ndra skrivarkoder f|r skrivare "+NUM$(Skrv+1))
1490   DATA 0,Mata upp 1 linje,1,Mata upp 2 linjer,4,Mata upp 7 linjer
1500   DATA 2,Mata upp 9 linjer,3,St{ll normalt radavst}nd
1510   DATA 5,Start av marginalstil,6,Start av smal stil,7,Start av normal stil
1520   DATA 8,Start av bred stil,9,Start av t{t grafik,10,Start av gles grafik
1530   DATA 11,Nollst{llning av skrivaren,12,Kodnr f|r alla f{rger
1540   DATA 13,Stomme f|r f{rgval,15,Kommunikationsparametrar
1550   ; YEL CUR(2,4) "1 Skrivarens namn: " Printer$(Skrv)
1560   RESTORE 1490 : I=0 : WHILE I<15
1570     READ X,X$ : ; USING "# &: &" CUR(I+3,3) I+2 X$ FNSpecpr$(Prk$(Skrv,X),Km);
1580   I=I+1 : WEND 
1590   ; CUR(18,3) "17 Bit 0 |verst i grafik: " MID$("JN",Printer(Skrv,3)+2,1)
1600   ; "   18 Grafiktecknens bredd: " FNSpecpr$(Prk$(Skrv,14),2)
1610   ! 
1620   Alt=FNV{lj(2,3,1,-1,18,(Alt AND (Alt<>18))+1,"-->")
1630   ; CUR(20,0) SPACE$(240) CUR(20,0);
1640   IF Alt=0 THEN RETURN 0
1650   IF Alt=1 THEN 1730
1660   IF Alt=17 THEN 1780
1670   IF Alt=18 THEN Z=FNSt{llbrd(Skrv) : GOTO 1480
1680   RESTORE 1490 : I=1 : WHILE I"" THEN Antpr=Antpr+1
1760   IF Skrv+1=Antpr AND X$="" THEN Antpr=Antpr-1 : IF Stdpr>Antpr THEN Stdpr=Antpr
1770   GOTO 1480
1780   ; CYA : Z=FNJanej("[r bit 0 |verst i grafiken J/N ")
1790   IF Z=2 OR Z=3 THEN Printer(Skrv,3)=Z-3
1800   GOTO 1480
1810 FNEND 
1820 ! 
1830 DEF FNSt{llbrd(Skrv) LOCAL I
1840   O{ndr=0 : I=1 : WHILE I>=1 AND I<=6
1850     I=I+FNBrd(I,Skrv)
1860   WEND : RETURN 0
1870 FNEND 
1880 DEF FNBrd(Nr,Skrv) LOCAL X,I,Brd$=6
1890   IF O{ndr THEN 1970
1900   IF LEN(Prk$(Skrv,14))<6 THEN Prk$(Skrv,14)=STRING$(6,0)
1910   ; FNHuvud$("Grafiktecknens bredder") YEL
1920   ; : ; "Smal stil / Sv{rta 2" : ; : ; "Normal stil" : ; : ; "Bred stil"
1930   I=1 : WHILE I<7
1940     ; CUR(3+I,25) MID$("H|ger   V{nster ",(I AND 1)*8+1,8) ASCII(MID$(Prk$(Skrv,14),I,1))
1950   I=I+1 : WEND 
1960   Z=FNLine25(3)
1970   X=FNInp(0,255,VARPTR(I),Nr+3,38)
1980   IF O{ndr=0 THEN MID$(Prk$(Skrv,14),Nr,1)=CHR$(I)
1990   RETURN X
2000 FNEND 
2010 ! 
2020 DEF FNInp(Min,Max,Adr,Rad,Kol) LOCAL X,X$=6
2030   ; CUR(Rad,Kol) CYA CUR(Rad,Kol) "? ";
2040   X=FNGet(LEN(NUM$(Max)),VAROOT(X$),NUM$(PEEK2(Adr)),2)
2050   IF X$="" OR O{ndr THEN RETURN X ELSE X=VAL(X$)
2060   IF XMax THEN ; CHR$(7); : GOTO 2030
2070   POKE Adr,X,SWAP%(X) : RETURN 0
2080 FNEND 
2090 ! 
2100 ! Typ: 0=alla koder, 1=alfanumeriskt, 2=numeriskt
2110 DEF FNGet(Max,Adr,Deflt$,Typ) LOCAL X,P,X$=320,Gt$=1,R,K
2120   X$=Deflt$ : X=0 : O{ndr=-1 : K=PEEK(SYS(10)+82) : R=PEEK(SYS(10)+83)
2130   IF Typ=0 THEN Z=FNLine25(4)
2140   ; CUR(R,K) CYA CUR(R,K) SPACE$(Max);
2150   WHILE X=0
2160     ; CUR(R,K) FNSpecpr$(LEFT$(X$,P),Km) CHR$(32,8);
2170     IF Typ=0 THEN ; SPACE$(5) STRING$(5,8);
2180     GET Gt$ : X=INSTR(1,CHR$(13,196,198,Kstop,192,8,9,213),Gt$)
2190     IF X=6 AND P>0 THEN P=P-1 : X$=LEFT$(X$,P)+RIGHT$(X$,P+2) : X=0 : GOTO 2290
2200     IF X=7 THEN P=P+1+(P>=LEN(X$) OR P>=Max) : X=0 : GOTO 2290
2210     IF X<>0 THEN 2290
2220     IF Gt$=CHR$(24) THEN WHILE PEEK(SYS(10)+83)>R OR PEEK(SYS(10)+82)>K : ; CHR$(8,32,8); : WEND : X$=RIGHT$(X$,P+1) : P=0 : GOTO 2290
2230     IF Typ<>0 THEN 2270
2240     IF Gt$=CHR$(215) THEN ; CHR$(63,8); : GET Gt$ : Gt$=CHR$((ASCII(Gt$) AND 31)+128) : GOTO 2280
2250     X=INSTR(1,CHR$(193,195,197,199,209),Gt$) : IF X=0 THEN 2270
2260     Gt$=MID$(CHR$(13,24,8,9,3),X,1) : X=0 : GOTO 2280
2270     IF Gt$>CHR$(127) OR (Typ=1 AND Gt$<" ") OR (Typ=2 AND (Gt$<"0" OR Gt$>"9")) THEN ; CHR$(7); : GOTO 2290
2280     IF P1 THEN RETURN X
2440   X=INSTR(1,"JjNn",X$) : IF X=0 THEN ; CHR$(7,8); : GOTO 2420
2450   RETURN (X-1)/2+2
2460 FNEND 
2470 ! 
2480 DEF FNSpecpr$(T$,M) LOCAL P,T
2490   P=1 : WHILE P<=LEN(T$)
2500     T=ASCII(MID$(T$,P,1)) : IF T>192 THEN 2570
2510     IF T>31 AND T<128 THEN ; CHR$(T); : GOTO 2590
2520     ON M-(M=1 AND T>127) GOTO 2560,2530,2540,2550
2530     ; "<" NUM$(T) ">"; : GOTO 2590
2540     ; "<" HEX$(T) ">"; : GOTO 2590
2550     ; "<" OCT$(T) ">"; : GOTO 2590
2560     ; "<" MID$("NULSOHSTXETXEOTENQACKBELBS HT LF VT FF CR SO SI DLEDC1DC2DC3DC4NAKSYNETBCANEM SUBESCFS GS RS US ",T*3+1,3) ">"; : GOTO 2590
2570     T=INSTR(1,CHR$(193,195,197,199,209,213,215),MID$(T$,P,1))
2580     IF T>0 THEN ; "<" MID$("RETCE  <  > ETXgetinp",T*3-2,3) ">";
2590   P=P+1 : WEND : RETURN ""
2600 FNEND 
2610 ! 
2620 DEF FNHuvud$(Text$)=GRN+CHR$(12)+"Videotex 800 Skrivarkoder Ver 1.0 -  "+Text$+CHR$(10,13)+STRING$(PEEK2(SYS(10)+84),ASCII("="))+CHR$(10,13) 
2630 ! 
2640 DEF FNLine25(Nr) LOCAL I,N,A,F1,S,A$=30,B$=30
2650   DATA 
2660   DATA 5,SHPF1," Tillbaka ",PF5 / <--," Upp ",PF7 / -->," Ned ",RET," Verkst{ll ",Tal," Snabbval "
2670   DATA 3,SHPF1," Tillbaka ",PF5 / <--," Upp      ",PF7 / -->," Ned      "
2680   DATA 6,Special-PF: 2,RETURN,4," CE ",6," <-- ",8," --> ",SH2,CTRL-C,SH6,byt CTRL-visn
2690   ON Nr RESTORE 2650,2660,2670,2680
2700   ! 
2710   IF Abc=806 THEN F1=PEEK(Atra) : POKE Atra,1 : GOTO 2730 ! ATTRIBUTE 1
2720   S=80/Wid : OUT 56,6,57,25 : A=32640
2730   FOR J=32640 TO 32720 : POKE J,32 : NEXT J 
2740   ; CUR(24,0) BLBG GRN; : READ N : WHILE I-1 THEN Prk$(Skrv,I)=Prk$(Skrv,I)+CHR$(J) : GOTO 2970
2980     I=I+1 : WEND 
2990     READ Prk$(Skrv,15)
3000     I=0 : WHILE I<4 : READ Printer(Skrv,I) : I=I+1 : WEND 
3010     IF Prk$(Skrv,12)<>"" THEN F{rg$(Skrv)=Prk$(Skrv,12)+RIGHT$(Prk$(Skrv,12),LEN(Prk$(Skrv,12)))
3020   Skrv=Skrv+1 : WEND : GOTO 3130
3030   ! 
3040   Skrv=0 : WHILE Skrv