1 REM Ins{nd av Kristoffer Eriksson <5357> 1985-10-19 01.22.16 10 ! save ST[LLPAR 20 ! ---------------------------------------- 30 ! ST[LLPAR.BAC F|r ABC800-serien. 40 ! Av Kristoffer Eriksson, 1985-03-12 50 ! St{ller in parametrar i (vissa) program. 60 ! ---------------------------------------- 70 ! Letar r{tt p} texten CHR$(255)+"PARM:" i program, avl{ser lite styrinfo 80 ! och aktuell inst{llning, och ber anv{ndaren mata in ett nytt v{rde. Detta 90 ! v{rde skrivs tillbaka in i programmet. 100 ! Styrinfo (1 byte f|r varje uppgift): 110 ! <255>PARM: <0> 120 ! Typ: 0=Str{ng. Stora bokst{ver. L{ngd fr}n till . 130 ! . 1=Str{ng. Alla tecken. L{ngd fr}n till . 140 ! . 2=Bin{rt 1 byte. V{rde mellan och . 150 ! . 3=Heltal 2 byte. Alla v{rden. 160 ! . 4=Ett tecken. Antingen eller . Stora bokst{ver. 170 ! 180 INTEGER : EXTEND : OPTION BASE 0 : ! NO RESUME 190 Maxpar=50 200 DIM Text$(Maxpar)=70,Typ(Maxpar),Min(Maxpar),Max(Maxpar),Lgd(Maxpar) 210 DIM V{rde$(Maxpar)=50,Pos.(Maxpar) 220 ! 230 ; 240 ; "St{ll parametrar. Vilken fil ska behandlas "; 250 ON ERROR GOTO 250 : INPUT F$ 260 IF F$="" THEN 500 270 F$=FNCaps$(F$) 280 IF INSTR(1,F$,".")=0. THEN F$=F$+".BAC" 290 ON ERROR GOTO 320 300 OPEN F$ AS FILE 1 310 GOTO 350 320 ; CHR$(7) 'Hittar inte "' F$ '".' 330 GOTO 240 340 ! 350 Z=FNAvl{s 360 IF Z THEN ; CHR$(7) "Felkod" Z : GOTO 500 370 IF Antpar=0 THEN ; 'Inga parametrar i "' F$ '".' : GOTO 500 380 ; 390 ; "Nuvarande parametrar" 400 ; "--------------------" 410 Z=FNVisapars 420 ; 430 ; "[ndringar" 440 ; "---------" 450 Z=FN[ndrapars 460 ; 470 ; "S=Spara, [=[ndra mera, A=Avsluta utan att spara (S/[/A) ? "; 480 ON FNSvar("S[A") GOTO 490,380,500 490 IF FNLagra=0 THEN ; "Parametrarna sparade." 500 CLOSE 510 END 520 ! 530 ! 540 ! 550 DEF FNAvl{s LOCAL P,P2,I$=253,J$=253,S$=4,Nr 560 ON ERROR GOTO 790 570 GET #1 J$ COUNT 253 580 WHILE 1 590 I$=J$ 600 GET #1 J$ COUNT 253 610 P=1 : WHILE P>0 AND P<=LEN(I$) 620 P=INSTR(P,I$+J$,CHR$(255)+"PARM:") 630 IF P=0 OR P>LEN(I$) THEN 770 640 P2=INSTR(P,I$+J$,CHR$(0)) 650 IF P2=0 OR P2+5>LEN(I$)+LEN(J$) THEN P=P+1 : GOTO 770 660 Text$(Nr)=MID$(I$+J$,P+6,P2-P-6) 670 Pos.(Nr)=POSIT(1)-(LEN(I$)+LEN(J$)-P2+1)+4 ! Pos f|r l{ng+v{rde 680 S$=MID$(I$+J$,P2+1,4) 690 Typ(Nr)=ASCII(S$) 700 Min(Nr)=ASCII(RIGHT$(S$,2)) 710 Max(Nr)=ASCII(RIGHT$(S$,3)) 720 Lgd(Nr)=ASCII(RIGHT$(S$,4)) 730 IF P2+5+Lgd(Nr)>LEN(I$)+LEN(J$) THEN P=P+1 : GOTO 770 740 V{rde$(Nr)=MID$(I$+J$,P2+5,Lgd(Nr)) 750 P=P2+5+Lgd(Nr) 760 Nr=Nr+1 770 WEND 780 WEND 790 IF ERRCODE<>38 THEN RETURN ERRCODE 800 Antpar=Nr 810 RETURN 0 820 FNEND 830 ! 840 DEF FNLagra LOCAL Nr 850 ON ERROR GOTO 920 860 WHILE Nr=20 THEN GET I$ 1000 Nr=Nr+1 : WEND 1010 RETURN 0 1020 FNEND 1030 ! 1040 DEF FNVisapar(Nr) 1050 ; Text$(Nr) " "; 1060 IF Typ(Nr)>4 THEN ; "Ok{nd typ" : RETURN -1 1070 ON Typ(Nr)+1 GOSUB 1090,1090,1110,1130,1150 1080 RETURN 0 1090 ; '"' V{rde$(Nr) '" (' NUM$(Min(Nr)) '-' NUM$(Max(Nr)) ')' 1100 RETURN 1110 ; ASCII(V{rde$(Nr)) "(" NUM$(Min(Nr)) "-" NUM$(Max(Nr)) ")" 1120 RETURN 1130 ; CVT$%(V{rde$(Nr)) "(Heltal)" 1140 RETURN 1150 IF V{rde$(Nr)<" " OR V{rde$(Nr)>"" THEN ; "<" NUM$(ASCII(V{rde$(Nr))) ">"; ELSE ; V{rde$(Nr); 1160 ; " (" CHR$(Min(Nr)) "/" CHR$(Max(Nr)) ")" 1170 RETURN 1180 FNEND 1190 ! 1200 DEF FN[ndrapars LOCAL Nr,X 1210 WHILE Nr>=0 AND Nr2 AND Typ<>3 THEN 1480 1400 V.=VAL(I$) 1410 ; V. 1420 IF V.<>INT(V.) THEN ; CHR$(7) "Endast heltal" : GOTO 1350 1430 IF Typ=2 IF V.Max(Nr) THEN ; CHR$(7) "Ska vara mellan" Min(Nr) "och" Max(Nr) : GOTO 1350 1440 IF Typ=2 THEN Lgd(Nr)=1 : V{rde$(Nr)=CHR$(V.) 1450 IF Typ=3 THEN Lgd(Nr)=2 : V{rde$(Nr)=CVT%$(V.) 1460 RETURN 0 1470 ! 1480 IF Typ=0 OR Typ=4 THEN I$=FNCaps$(I$) 1490 ; I$ 1500 IF Typ<>0 AND Typ<>1 THEN 1560 1510 IF LEN(I$)Max(Nr) THEN ; CHR$(7) "Ska vara mellan" Min(Nr) "och" Max(Nr) "tecken" : GOTO 1350 1520 V{rde$(Nr)=I$ 1530 Lgd(Nr)=LEN(I$) 1540 RETURN 0 1550 ! 1560 IF LEN(I$)<1 THEN ; CHR$(7) "F|r kort" : GOTO 1350 1570 I$=LEFT$(I$,1) 1580 IF INSTR(1,CHR$(Min(Nr),Max(Nr)),I$)=0 THEN ; CHR$(7) "Ska vara " CHR$(Min(Nr)) " eller " CHR$(Max(Nr)) : GOTO 1350 1590 V{rde$(Nr)=I$ 1600 Lgd(Nr)=1 1610 RETURN 0 1620 ! 1630 IF ERRCODE=53 THEN ; : RETURN -1 1640 GOTO 1360 1650 FNEND 1660 ! 1670 DEF FNSvar(Alt$) LOCAL I$=160,P 1680 WHILE 1 1690 ON ERROR GOTO 1740 : INPUT LINE I$ 1700 P=LEN(I$)-2 : ; STRING$(P,8) SPACE$(P) STRING$(P,8); 1710 I$=FNCaps$(LEFT$(I$,1)) 1720 P=INSTR(1,Alt$,I$) 1730 IF P THEN ; MID$(Alt$,P,1) : RETURN P ELSE 1750 1740 IF ERRCODE=53 THEN I$=CHR$(PEEK(65507)) : GOTO 1720 1750 ; CHR$(7); 1760 WEND 1770 FNEND 1780 ! 1790 DEF FNCaps$(S$) LOCAL T$=160,P 1800 T$=S$ 1810 WHILE P="`" THEN MID$(T$,P,1)=CHR$(ASCII(MID$(T$,P,1))-32) 1830 WEND 1840 RETURN T$ 1850 FNEND