10 ! save PSSEKR, 1989-02-12 01.05 20 ! 30 ! Ver / Sign/ Datum / Kommentar 40 ! X.00 / SKE / 85-03-10 / 60 ! X.02 / SKE / 85-05-10 / FNF|rdela, Hlp-spar i FNInkey 70 ! X.03 / SKE / 85-05-17 / Menyrad st{ndigt 80 ! X.04 / SKE / 85-05-21 / Err 39 p} Kontofil->Spec.feltext 90 ! X.05 / SKE / 85-06-11 / [ven f|r '800 100 ! 1.06 / SKE / 85-08-06 / Snabbval i FNPosval 110 ! 1.07 / SKE / 86-03-13 / Standalone: "GRUPP1" Meny0->Sluta 115 ! 1.09 / SKE / 88-05-01 / WINDOW 2.00, ATTR 5, Skott}r, Frisl{pp 116 ! 1.11 / SKE / 89-02-12 / FNExpr prioriteter r{ttade, 400-}r 120 ; CUR(0,0) "PSSEKR Ver 1.11, Kristoffer Eriksson ABC <5357>, 1985 & 1988" 130 ! 140 ! F|nsternr: 1-4 = allm{na, 5 = hj{lp, 6 = Meny 150 ! Typ: 1=Almanacka, 2=Komih}g, 3=Telenr, 4=Attg|ra, 5=Kalkylator, 6=Konton 160 ! . 10=Tider, 11=Hj{lp, 12=Sysmeny, 50=Priv/avd-val, 51=Avd-val 170 ! . 52=\vrigt-val, 100..=Fel 180 ! Fil-id: 1=Konton, 2=Telereg, 3=Pssve.hlp, 4=Tider, 5=Komih}g 190 ! Fil-nr: 100-104=Isam-filer, 1-98=F|nsternr, 99=PR 200 ! 210 INTEGER : EXTEND : DOUBLE : ! NO RESUME 220 ! 230 DEF FNCaps$(S$) LOCAL P,T$=160 240 T$=S$ 250 WHILE P="`" THEN MID$(T$,P,1)=CHR$(ASCII(MID$(T$,P,1))-32) 280 WEND 290 RETURN T$ 300 FNEND 310 ! 320 DEF FNKillspace$(S$) LOCAL P,T$=160 330 T$=S$ 340 P=INSTR(1,T$," ") : IF P THEN T$=LEFT$(T$,P-1)+RIGHT$(T$,P+1) : GOTO 340 350 RETURN T$ 360 FNEND 370 ! 380 DEF FNTrailsp$(S$) LOCAL P 390 P=LEN(S$) : WHILE P>0 : IF MID$(S$,P,1)=" " THEN P=P-1 : WEND 400 RETURN LEFT$(S$,P) 410 FNEND 420 ! 430 ! Typ: 1=alfanumeriskt, 2=numeriskt 440 DEF FNGet$(Nr,Max,Deflt$,Typ) LOCAL X,P,X$=161,Gt$=1,D 450 X$=Deflt$ : X=0 : P=LEN(X$) 460 ; #Nr C1$ X$; ! STRING$(LEN(X$),8); 470 WHILE X=0 480 Gt$=FNInkey$ : X=INSTR(1,CHR$(13,196,198,192,8,9,9,9,24,199),Gt$) 490 ON X+1 GOTO 570,630,630,630,630,500,510,630,630,520,540 500 IF Max>1 THEN ; #Nr LEFT$(CHR$(8),SGN(P)); : P=P+(P>0) : GOTO 620 ELSE 630 510 ; #Nr MID$(X$,P+1,-(P=LEN(X$) THEN P=P-1 : ; #Nr CHR$(8); 550 X$=LEFT$(X$,P)+RIGHT$(X$,P+2) 560 ; #Nr RIGHT$(X$,P+1) " " STRING$(LEN(X$)-P+1,8); : GOTO 620 570 IF Gt$>CHR$(127) OR Gt$<" " OR (Typ=2 AND (Gt$<"0" OR Gt$>"9")) THEN ; CHR$(7); : GOTO 620 580 IF D=0 AND P=0 THEN X$="" 590 IF LEN(X$)>=Max THEN ; CHR$(7); : GOTO 620 600 X$=LEFT$(X$,P)+Gt$+RIGHT$(X$,P+1) : P=P+1 610 ; #Nr RIGHT$(X$,P) STRING$(LEN(X$)-P,8); 620 X=0 : D=ASCII(Gt$) 630 WEND 640 IF X=1 THEN 680 650 IF LEN(Deflt$)

P THEN ; #Nr SPACE$(LEN(X$)-P); : P=LEN(X$) 670 Op=(INSTR(1,"7 254 368",NUM$(X))-5)/2 : X$=Deflt$ : GOTO 690 680 Op=1 : IF LEN(X$)>Max THEN X$=LEFT$(X$,Max) 690 ; #Nr STRING$(P,8) C2$ X$; : RETURN X$ 700 FNEND 710 ! 720 DEF FNInkey$ LOCAL Gt$=1,A,C,B,H 730 H=Hlp 740 A=30720+PEEK(SYS(10)+83)*80+PEEK(SYS(10)+82)*(80/PEEK(SYS(10)+84)) 750 B=INP(53) 760 C=PEEK2(SYS(10)+82) 770 WHILE 1 780 OUT 56,11,57,9,56,14,57,SWAP%(A),56,15,57,A,56,10,57,8 OR 96 790 WHILE SYS(5)<128 : Z=FNLine24(1) : WEND 800 OUT 56,11,57,9,56,10,57,40 810 OUT 53,B 820 ; CUR(SWAP%(C),C); 830 GET Gt$ 840 IF ASCII(Gt$)<192 THEN Op=INSTR(2,CHR$(0,8,8,9),Gt$)-3 : GOTO 920 850 Op=INSTR(1,CHR$(212,196,192,198,214,247,193,209),Gt$)-3 860 IF Op>2 THEN ON Op-2 GOTO 870,880,890 ELSE Cr=0 : GOTO 930 870 Z=FNScrdump : GOTO 900 880 Z=FNSysmeny(0) : IF Op=1 THEN Z=FNStartwin(Z,"") : GOTO 900 ELSE 900 890 IF Busy(11) THEN RETURN Gt$ ELSE Z=FNHj{lp(0) : GOTO 900 900 Hlp=H 910 WEND 920 Cr=ASCII(Gt$)=13 : IF Cr THEN Op=1 930 RETURN Gt$ 940 FNEND 950 ! 960 DEF FNScrdump LOCAL A,B,C,S 970 IF FNOpnpr THEN 1070 980 S=80/PEEK(SYS(10)+84) 990 ON ERROR GOTO 1070 1000 A=30800 : WHILE A<32720 1010 B=A-80 : WHILE B31 THEN ; #99 CHR$(C); ELSE ; #99 " "; 1050 B=B+S : WEND 1060 A=A+80 : ; #99 : WEND 1070 ; #99 CHR$(12); : CLOSE 99 1080 RETURN 0 1090 FNEND 1100 ! 1110 DEF FNOpnpr 1120 ON ERROR GOTO 1140 : PREPARE "PR:.\\F" AS FILE 99 : RETURN 0 1130 IF Dos<>4 AND Dos<>8 THEN RETURN -1 1140 ON ERROR GOTO 1150 : PREPARE "RPR:" AS FILE 99 : RETURN 0 1150 RETURN -1 1160 FNEND 1170 ! 1180 DEF FNLine24(M) LOCAL S$=45 1190 S$=C4$+"SHIFT+PF2 = Hj{lp "+MID$("V{nta"+SPACE$(14)+TIME$,M*19+1,19) 1200 IF Abc=806 THEN ; CUR(24,41) S$ BLBG; ELSE MID$(Crt$,1962,LEN(S$))=S$ 1210 RETURN 0 1220 FNEND 1230 ! 1240 DEF FNWinv{lj(Nr) LOCAL R,K 1250 R=Rad(Nr) : K=Kol(Nr) 1260 WHILE 1 1270 ; #Nr CUR(R,K); 1280 ON INSTR(1,CHR$(8,9,196,198,13,192),FNInkey$)+1 GOTO 1290,1300,1310,1320,1330,1340,1350 1290 ; CHR$(7); : GOTO 1360 1300 IF K>0 THEN K=K-1 : GOTO 1360 ELSE K=Win(Nr,4)-1 : GOTO 1320 1310 IF K" T$; : RETURN 0 1440 I=1 : WHILE I<=LEN(T$)+2 1450 PUT #Nr CHR$(ASCII(MID$(" "+T$,I,1)) OR 128) 1460 I=I+1 : WEND 1470 RETURN 0 1480 FNEND 1490 DEF FNInv806$ 1500 RETURN NWBG+CHR$(128 OR (INP(53) AND 56)/8) 1510 FNEND 1520 ! 1530 DEF FNInvpos$(Nr,T$,N) LOCAL I,P1,P2,K 1540 WHILE P2I THEN V=I : GOTO 1760 1700 P=INSTR(P+1,T$,"") 1710 I=I+1 AND P>0 1720 WEND 1730 ; CHR$(7); : GOTO 1760 1740 V=MOD(V-2,Max)+1 : GOTO 1760 1750 V=MOD(V,Max)+1 1760 WEND 1770 Op=1 : GOTO 1790 1780 Op=I-5 1790 ; #Nr CUR(R,K) C2$; : X$=FNInvpos$(Nr,T$,V) 1800 RETURN V 1810 FNEND 1820 ! 1830 DEF FNWinmeny(R,K,H,B,Rub$,T$,Deflt) LOCAL V,Save$=200,I,X$=4 1840 Win(6,1)=R : Win(6,2)=K : Win(6,3)=H : Win(6,4)=B 1850 Save$=" " : Z=FNOpnwin(6,Rub$,VAROOT(Save$)) 1860 V=Deflt : WHILE 1 1870 ; #6 CUR(0,0) C2$; : X$=FNInvpos$(6,T$,V) : ; #6 CUR(V-1,0); 1880 I=INSTR(1,CHR$(8,9,196,198,13,192),FNInkey$) 1890 ON I+1 GOTO 1900,1910,1920,1910,1920,1940,1950 1900 ; CHR$(7); : GOTO 1930 1910 IF V<2 THEN Op=-1 : GOTO 1960 ELSE V=V-1 : GOTO 1930 1920 IF V>=H THEN Op=1 : GOTO 1960 ELSE V=V+1 : GOTO 1930 1930 WEND 1940 Op=1 : GOTO 1960 1950 Op=0 1960 ; #6 CHR$(27)+"T"+CVT%$(VAROOT(Save$)); 1970 CLOSE 6 1980 RETURN V 1990 FNEND 2000 ! 2010 DEF FNFel(N,Typ) LOCAL Gt$=1,B,H 2020 H=Hlp : B=Busy(12) : Busy(12)=-1 2030 ; CUR(0,0) SPACE$(80) CUR(0,0) CHR$(7) RED NWBG YEL "> "; 2040 IF Typ=1 THEN Hlp=100 : ; FNBasicfel$(N); : GOTO 2070 2050 Hlp=100+N 2060 ON N GOSUB 2130,2140,2150,2160,2170,2180 2070 ; " <" BLBG 2080 ; "Tryck p} CE"; 2090 WHILE INSTR(1,CHR$(24,192),FNInkey$)=0 : WEND 2100 ; CUR(0,0) SPACE$(80) CUR(1,0) SPACE$(11); 2110 Hlp=H : Busy(12)=B : RETURN N OR SWAP%(Typ) 2120 ! 2130 ; "Ditt konto finns inte registrerat h{r"; : RETURN 2140 ; ; : RETURN 2150 ; "Finns inte med i listan"; : RETURN 2160 ; "Hj{lptexten saknas"; : RETURN 2170 ; ; : RETURN 2180 ; "Programfel: Filerna slut"; : RETURN 2190 FNEND 2200 ! 2210 DEF FNBasicfel$(X) 2220 IF X=21 THEN RETURN "Filen finns ej" 2230 IF X=22 THEN RETURN "Biblioteket finns ej" 2240 IF X=48 THEN RETURN "Fel i biblioteket" 2250 IF X=35 THEN RETURN "Kontrollsummafel vid l{sning" 2260 IF X=36 THEN RETURN "Kontrollsummafel vid skrivning." 2270 IF X=39 THEN RETURN "Filen skrivskyddad" 2280 IF X=40 THEN RETURN "Filen l{sskyddad" 2290 IF X=41 THEN RETURN "Skivan {r full" 2300 IF X=42 THEN RETURN "Enheten ej klar" 2310 IF X=43 THEN RETURN "Skivan skrivskyddad" 2320 IF X=46 THEN RETURN "Biblioteket ej inst{llt" 2330 IF X=52 THEN RETURN "G}r inte p} denna enhet" 2340 IF X=51 THEN RETURN "Enheten upptagen" 2350 IF X=121 THEN RETURN "Dubletter ej till}tna" 2360 IF X=123 THEN RETURN "N}gon annan {ndrade f|re dig" 2370 RETURN "Felkod "+NUM$(X) 2380 FNEND 2390 ! 2400 DEF FNOpen(Fi) LOCAL I,F$=12 2410 F$=FNTrailsp$(MID$("KONTON TELEREG PSSVE TIDER KOMIH]G ",(Fi-1)*8+1,8)) 2420 IF Fi=3 THEN F$=F$+".HLP" 2430 I=100 : WHILE I<=104 2440 IF Opn(I)=Fi THEN 2520 2450 I=I+1 : WEND 2460 ON ERROR GOTO 2550 2470 I=Oldfile : WHILE I<=Oldfile+4 2480 IF Opn(MOD(I,5)+100)<0 THEN I=I+1 : WEND : Z=FNFel(6,0) : RETURN 0 2490 Oldfile=MOD(I+1,5) : I=MOD(I,5)+100 2500 IF Opn(I) THEN CLOSE I 2510 IF Fi<>3 THEN ISAM OPEN F$ AS FILE I ELSE OPEN F$ AS FILE I 2520 Opn(I)=-Fi 2530 RETURN I 2540 ! 2550 Opn(I)=0 : Z=FNFel(ERRCODE,1) : RETURN 0 2560 FNEND 2570 DEF FNClose(F) 2580 IF F THEN Opn(F)=-Opn(F) 2590 RETURN 0 2600 FNEND 2610 ! 2620 DEF FNWinrub(Nr,R$) 2630 ; CUR(Win(Nr,1)-1,Win(Nr,2)+(Win(Nr,4)-LEN(R$)-4)/2) C3$; 2640 RETURN FNInv(0,R$+MID$(" <-",(Abc=800 AND 2)+1,2),-1) 2650 FNEND 2660 ! 2670 DEF FNOpnwin(Nr,R$,Spar) 2680 ; CUR(0,0) C3$; 2690 PREPARE "WND:"+FNN$(Win(Nr,1))+FNN$(Win(Nr,2))+FNN$(Win(Nr,3))+FNN$(Win(Nr,4))+"."+LEFT$("N",-(Spar<>0)) AS FILE Nr 2700 IF Spar THEN ; #Nr CHR$(27)+"S"+CVT%$(Spar) C3$ CHR$(27)+"R"; 2710 IF LEN(R$) THEN Z=FNWinrub(Nr,R$) 2720 ; #Nr CHR$(12) C2$; 2730 RETURN Nr 2740 FNEND 2750 ! 2760 DEF FNAllocwin(Typ,Par$) LOCAL Nr,B,H,R,K,R$=30 2770 IF Typ=11 THEN Nr=5 : Win(5,0)=Typ : RETURN Nr 2780 Nr=1 : WHILE Nr<=4 2790 IF Win(Nr,0)=0 THEN 2810 2800 Nr=Nr+1 : WEND : RETURN 0 2810 R=((Nr-1)/2)*11+3 : K=MOD(Nr-1,2)*40+1 2820 B=38 : H=9 2830 ON Typ GOSUB 2890,2900,2910,2920,2930,2940,2890,2890,2890,2950,2950 2840 Win(Nr,0)=Typ : Win(Nr,1)=R : Win(Nr,2)=K : Win(Nr,3)=H : Win(Nr,4)=B 2850 Par$(Nr)=Par$ 2860 Rad(Nr)=0 : Kol(Nr)=0 2870 Z=FNOpnwin(Nr,FNTrailsp$(R$),0) : RETURN Nr 2880 ! 2890 B=21 : H=8 : RETURN ! Almn 2900 R$="KOM-I-H]G "+Id$ : RETURN 2910 R$="TELEFON-NR "+Id$ : RETURN 2920 R$="ATT G\RA "+Id$ : RETURN 2930 B=34 : R$="KALKYLATOR" : RETURN 2940 B=17 : R$="KONTON" : RETURN 2950 RETURN 2960 FNEND 2970 ! 2980 DEF FNN$(Nr)=STRING$(-(Nr<10),48)+NUM$(Nr) 2990 ! 3000 DEF FNStartwin(Typ,Par$) LOCAL Nr 3010 IF Busy(Typ) THEN RETURN 0 3020 Nr=FNAllocwin(Typ,Par$) : IF Nr=0 THEN RETURN 0 3030 Id$(Nr)=Id$ : RETURN FNLine24(0)+FNExecwin(Nr) 3040 FNEND 3050 DEF FNEndwin(Nr) 3060 IF Win(Nr,0) THEN Busy(Win(Nr,0))=0 : Win(Nr,0)=0 3070 CLOSE Nr : RETURN 0 3080 FNEND 3090 ! 3100 DEF FNExecwin(Nr) LOCAL A 3110 IF Nr=0 THEN RETURN 0 3120 Hlp=Win(Nr,0) 3130 A=Aktiv : Aktiv=Nr 3140 Z=FNF|rdela(Nr) 3150 Aktiv=A 3160 RETURN 0 3170 FNEND 3180 ! 3190 DEF FNF|rdela(Nr) 3200 ON Win(Nr,0) GOTO 3210,3220,3230,3240,3250,3260,3210,3210,3210,3270,3280 3210 RETURN FNAlmn(Nr) 3220 RETURN FNEdreg(Nr,5,Id$(Nr)+" ","!",14,"","INDEX",8) 3230 RETURN FNEdreg(Nr,2,Id$(Nr),"",12,"","INDEX",29) 3240 RETURN FNEdreg(Nr,4,Id$(Nr)+'"',"!",18,MID$(TIME$,6,2)+MID$(TIME$,9,2),"INDEX",8) 3250 RETURN FNKalk(Nr) 3260 IF Priv AND 64 RETURN FNEdreg(Nr,1,"","",4,"","KONTO",8) ELSE RETURN 0 3270 RETURN FNPlan(Nr) 3280 RETURN FNHj{lp(Nr) 3290 FNEND 3300 ! 3310 DEF FNPralmn(Nr,]r,M}n) LOCAL X,I,Dagar 3330 X=]r-1 3340 X=MOD(X+X/4-X/100+X/400+VAL(MID$("033614625035",M}n,1))-(FNSkott(]r) AND M}n>2),7) 3360 ; #Nr CHR$(12) C2$ " " FNM}n$(M}n) ]r; 3370 ; #Nr CUR(0,12) "<" FNM}n$(M}n-1) "/" FNM}n$(M}n+1) ">" 3380 ; #Nr C2$ " M} Ti On To Fr L| S|" 3390 ; #Nr C2$ SPACE$(X*3); 3400 Dagar=FNAntdag(]r,M}n) 3410 WHILE I0 OR MOD(]r,400)=0 3470 ! 3480 DEF FNM}n$(M}n)=MID$("JanFebMarAprMajJunJulAugSepOktNovDec",MOD(M}n-1,12)*3+1,3) 3490 ! 3500 DEF FNAlmn(Nr) LOCAL ]r,M}n,X,Dagar,V,Dag,Idl$=8 3510 ]r=VAL(MID$(TIME$,1,4)) : M}n=VAL(MID$(TIME$,6,2)) : Dag=VAL(MID$(TIME$,9,2)) 3520 WHILE 1 3530 X=FNPralmn(Nr,]r,M}n) 3540 Dagar=FNAntdag(]r,M}n) 3550 IF V=0 THEN Rad(Nr)=2+(X+Dag-1)/7 : Kol(Nr)=MOD(X+Dag-1,7)*3+2 : V=1 3560 WHILE 1 3570 IF FNWinv{lj(Nr)=1 THEN CLOSE Nr : Win(Nr,0)=0 : RETURN 0 3590 IF Rad(Nr)=0 THEN 3630 3600 Dag=(Rad(Nr)-2)*7+Kol(Nr)/3-X+1 3610 IF Dag>=1 AND Dag<=Dagar THEN Id$=Id$(Nr) : Z=FNStartwin(10,CHR$(MOD(]r,100),M}n,Dag)) : Hlp=Win(Nr,0) 3620 WEND 3630 IF Kol(Nr)>16 THEN M}n=M}n+1 ELSE IF Kol(Nr)>11 AND Kol(Nr)<16 THEN M}n=M}n-1 ELSE 3570 3640 IF M}n<1 OR M}n>12 THEN ]r=]r+SGN(M}n-2) : M}n=MOD(M}n-1,12)+1 3650 WEND 3680 FNEND 3690 ! 3700 DEF FNKalk(Nr) LOCAL I$=90,J$=90,T 3710 WHILE 1 3720 I$=FNGet$(Nr,90,I$,1) : IF Op=0 THEN 3800 ELSE IF Op=-1 THEN 3720 3730 IF NOT Cr THEN I$="" : ; #Nr : GOTO 3790 3740 J$=FNCaps$(FNKillspace$(I$)) 3750 IF J$="" THEN ; #Nr : I$="" : GOTO 3790 3760 T=0 : IF LEN(J$)>1 IF MID$(J$,2,1)="=" THEN T=ASCII(J$) : J$=RIGHT$(J$,3) 3770 IF FNExpr(J$,0)<>LEN(J$) THEN ; #Nr STRING$(LEN(I$),8) CHR$(7); : GOTO 3790 3780 I$=NUM$(Gv.) : ; #Nr : IF T THEN Kalkreg.(T)=Gv. 3790 WEND 3800 RETURN FNEndwin(Nr) 3810 FNEND 3820 ! 3830 DEF FNExpr(E$,N) LOCAL P0,P,V.,Op,N2 3840 P=FNExpr2(E$)+1 : IF P<=1 THEN 4030 ELSE V.=Gv. 3850 WHILE P<=LEN(E$) : P0=P 3860 IF MID$(E$,P,1)=")" THEN Gv.=V. : RETURN P-1 3870 ! 3880 IF P>=LEN(E$) THEN 3900 3890 IF MID$(E$,P,2)="**" THEN Op=6 : P=P+1 : GOTO 3940 3900 Op=INSTR(1,"+-*//^",MID$(E$,P,1)) : IF Op THEN 3940 3910 IF P+1>=LEN(E$) THEN 4030 3920 IF MID$(E$,P,3)="MOD" THEN Op=5 : P=P+2 ELSE 4030 3930 ! 3940 IF OpLEN(E$) THEN 4030 3960 IF Op>=6 THEN N2=7 ELSE IF Op>=3 THEN N2=6 ELSE N2=3 3970 P0=P : P=FNExpr(RIGHT$(E$,P),N2) : IF P=0 THEN 4030 ELSE P=P0+P 3980 ON ERROR GOTO 4100 3990 ON Op GOSUB 4040,4050,4060,4070,4080,4090 4000 ON ERROR GOTO : IF P=0 THEN 4030 4010 WEND 4020 Gv.=V. : RETURN LEN(E$) 4030 RETURN 0 4040 V.=V.+Gv. : RETURN 4050 V.=V.-Gv. : RETURN 4060 V.=V.*Gv. : RETURN 4070 V.=V./Gv. : RETURN 4080 V.=V.-INT(V./Gv.)*Gv. : RETURN 4090 V.=V.^Gv. : RETURN 4100 P=0 : RETURN 4110 FNEND 4120 ! 4130 DEF FNExpr2(E$) LOCAL S,P,T 4140 IF E$="" THEN 4350 ELSE P=1 4150 S=INSTR(1,"+-",MID$(E$,P,1)) : IF S THEN P=P+1 4160 IF S=2 THEN S=-1 ELSE S=1 4170 IF P>LEN(E$) THEN 4350 4180 ! 4190 IF MID$(E$,P,1)<>"(" THEN 4240 ELSE P0=P+1 4200 P=FNExpr(RIGHT$(E$,P0),0) : IF P=0 THEN 4350 4210 P=P0+P : IF P>LEN(E$) THEN 4350 4220 Gv.=S*Gv. : RETURN P 4230 ! 4240 T=ASCII(MID$(E$,P,1)) 4250 IF T>64 AND T<94 THEN Gv.=Kalkreg.(T) : RETURN 1 4260 ! 4270 WHILE P<=LEN(E$) 4280 IF INSTR(1,"0123456789.E",MID$(E$,P,1)) THEN 4310 4290 IF INSTR(1,"+-",MID$(E$,P,1))=0 OR P<=1 THEN 4320 4300 IF MID$(E$,P-1,1)<>"E" THEN 4320 4310 P=P+1 : WEND 4320 ON ERROR GOTO 4350 : Gv.=VAL(LEFT$(E$,P-1)) 4330 IF P<=LEN(E$) IF MID$(E$,P,1)="%" THEN Gv.=Gv.*.01 : RETURN P 4340 RETURN P-1 4350 RETURN 0 4360 FNEND 4370 ! 4380 DEF FNPlan(Nr) LOCAL Post$=55,I$=55,Eof,K$=14,F 4390 F=FNOpen(4) : IF F=0 THEN 4890 ! Tider 4400 Z=FNWinrub(Nr,FNUdat$(Par$(Nr))+" "+FNTrailsp$(Id$(Nr))) 4410 K$=Id$(Nr)+" !"+Par$(Nr)+CHR$(0) ! Konto,tabtyp+ok,datum,nr 4420 ; #Nr CHR$(12); : Post$="" 4430 Eof=-1 : ON ERROR GOTO 4510 : ISAM READ #F Post$ INDEX "INDEX" KEY K$ 4440 Eof=-1 : ON ERROR GOTO 4510 : ; #Nr CHR$(12); : Rad(Nr)=0 4450 WHILE MID$(Post$,4,LEN(K$))=K$ 4460 ; #Nr C2$ MID$(Post$,18,38) CHR$(13); 4470 Rad(Nr)=Rad(Nr)+1 4480 IF Rad(Nr)>=Win(Nr,3) THEN Eof=0 : GOTO 4520 ELSE ; #Nr 4490 ISAM READ #F Post$ NEXT 4500 WEND : Eof=-2 : GOTO 4520 4510 IF ERRCODE<>34 AND ERRCODE<>120 THEN 4870 4520 IF Eof THEN I$="" ELSE I$=FNTrailsp$(MID$(Post$,18,38)) 4530 ON ERROR GOTO 4510 4540 IF (Eof=-1 OR Eof=1) AND Post$="" THEN ; #Nr C2$ "00.00 " STRING$(32,95) CHR$(13); 4550 I$=FNGet$(Nr,38,I$,1) : ; #Nr CHR$(13); 4560 I$=FNTrailsp$(I$) 4570 ON Op+2 GOTO 4590,4890,4650 4580 ! 4590 IF Eof>0 OR (Eof<0 AND Post$="") THEN 4720 ELSE ; #Nr CHR$(11); 4600 IF Eof=-1 THEN 4620 4610 Eof=1 : ISAM READ #F Post$ PREVIOUS 4620 Eof=2 : IF MID$(Post$,4,LEN(K$))<>K$ THEN 4520 4630 Eof=0 : GOTO 4520 4640 ! 4650 IF Cr THEN 4740 4660 IF Eof<0 OR (Eof>0 AND Post$="") THEN 4720 ELSE ; #Nr 4670 IF Eof=1 THEN 4700 4680 Eof=-1 : ISAM READ #F Post$ NEXT 4690 Eof=-2 : IF MID$(Post$,4,LEN(K$))<>K$ THEN 4520 4700 Eof=0 : GOTO 4520 4710 ! 4720 Par$(Nr)=FNStid$(Op,Par$(Nr)) : GOTO 4400 4730 ! 4740 IF I$<>"" THEN 4760 ELSE IF Eof THEN ; CHR$(7); : GOTO 4520 4750 ISAM DELETE #F Post$ : GOTO 4420 4760 IF LEN(I$)<5 THEN 4820 4770 I$=STRING$(3,255)+K$+I$+SPACE$(38-LEN(I$)) 4780 IF Eof THEN ISAM WRITE #F I$ : GOTO 4800 4790 IF I$<>Post$ THEN ISAM UPDATE #F Post$ TO I$ ELSE 4520 4800 Post$=I$ : GOTO 4420 4810 ! 4820 ; #Nr SPACE$(38) CHR$(13); 4830 ON ERROR GOTO 4850 4840 ISAM READ #F Post$ KEY K$+I$ : GOTO 4440 4850 IF ERRCODE=120 THEN Z=FNFel(3,0) : GOTO 4420 4860 ! 4870 Z=FNFel(ERRCODE,1) 4880 ON ERROR GOTO 4890 : Opn(F)=0 : CLOSE F 4890 RETURN FNEndwin(Nr)+FNClose(F) 4900 FNEND 4910 ! 4920 DEF FNStid$(D,T$) LOCAL ]r,M}n,Dag 4930 Dag=ASCII(RIGHT$(T$,3))+D : M}n=ASCII(RIGHT$(T$,2)) : ]r=ASCII(T$) 4940 IF Dag>=1 AND Dag<=FNAntdag(]r,M}n) THEN 4970 4950 M}n=M}n+D : IF M}n<1 OR M}n>12 THEN ]r=]r+D : M}n=MOD(M}n-1,12)+1 4960 IF Dag=0 THEN Dag=FNAntdag(]r,M}n) ELSE Dag=1 4970 RETURN CHR$(]r,M}n,Dag) 4980 FNEND 4990 ! 5000 ! Sl=S|kl{ngd, Pl=Visad postl{ngd, Pv=Visad del, M$=Fast del 5010 DEF FNEdreg(Nr,Fi,Id$,Ok$,Pv,M$,Ind$,Sl) LOCAL Post$=55,I$=55,K$=10,Eof,Pl,F 5020 K$=Id$ : Pl=Win(Nr,4) 5030 F=FNOpen(Fi) : IF F=0 THEN 5520 5040 Eof=-1 : ON ERROR GOTO 5120 : ISAM READ #F Post$ INDEX Ind$ KEY K$+Ok$ 5050 Eof=-1 : ON ERROR GOTO 5120 : ; #Nr CHR$(12); : Rad(Nr)=0 5060 WHILE MID$(Post$,4,LEN(K$))=K$ 5070 ; #Nr C2$ MID$(Post$,Pv,Pl) CHR$(13); 5080 Rad(Nr)=Rad(Nr)+1 5090 IF Rad(Nr)>=Win(Nr,3) THEN Eof=0 : GOTO 5150 ELSE ; #Nr 5100 ISAM READ #F Post$ NEXT 5110 WEND : Eof=-2 : GOTO 5150 5120 IF ERRCODE=121 THEN Z=FNFel(121,1) : GOTO 5040 5130 IF ERRCODE<>34 AND ERRCODE<>120 THEN 5500 5140 ! 5150 IF Eof THEN I$="" ELSE I$=FNTrailsp$(MID$(Post$,Pv,Pl)) 5160 ON ERROR GOTO 5120 5170 IF I$="" AND LEN(M$) THEN I$=M$+" " 5180 ; #Nr LEFT$(I$,LEN(M$)); 5190 I$=LEFT$(I$,LEN(M$))+FNGet$(Nr,Pl-LEN(M$),RIGHT$(I$,LEN(M$)+1),1) 5200 ; #Nr CHR$(13); 5210 I$=FNTrailsp$(I$) 5220 ON Op+2 GOTO 5240,5520,5300 5230 ! 5240 IF Eof=2 THEN 5150 ELSE IF Eof<>1 THEN ; #Nr CHR$(11); 5250 IF Eof=-1 AND Post$<>"" THEN 5270 5260 Eof=1 : ISAM READ #F Post$ PREVIOUS 5270 Eof=2 : IF MID$(Post$,4,LEN(K$))<>K$ THEN 5150 5280 Eof=0 : GOTO 5150 5290 ! 5300 IF Cr THEN 5370 5310 IF Eof=-2 THEN 5150 ELSE IF Eof<>-1 THEN ; #Nr 5320 IF Eof=1 AND Post$<>"" THEN 5340 5330 Eof=-1 : ISAM READ #F Post$ NEXT 5340 Eof=-2 : IF MID$(Post$,4,LEN(K$))<>K$ THEN 5150 5350 Eof=0 : GOTO 5150 5360 ! 5370 IF LEN(I$)>LEN(M$) THEN 5390 ELSE IF Eof THEN ; CHR$(7); : GOTO 5150 5380 ISAM DELETE #F Post$ : Post$="" : GOTO 5040 5390 IF LEN(I$)Post$ THEN ISAM UPDATE #F Post$ TO I$ ELSE 5150 5430 Post$=I$ : GOTO 5050 5440 ! 5450 ; #Nr SPACE$(38) CHR$(13); 5460 ON ERROR GOTO 5480 5470 ISAM READ #F Post$ KEY K$+Ok$+I$ : GOTO 5050 5480 IF ERRCODE=120 THEN Z=FNFel(3,0) : GOTO 5040 5490 ! 5500 Z=FNFel(ERRCODE,1) 5510 ON ERROR GOTO 5520 : Opn(F)=0 : CLOSE F 5520 RETURN FNEndwin(Nr)+FNClose(F) 5530 FNEND 5540 ! 5550 ! Endast f|r FNEdreg 5560 DEF FNPackn$(Fi,K$,I$,Pl) LOCAL P$=4,Ok$=1 5570 IF Fi=4 THEN P$=CHR$(VAL(MID$(TIME$,3,2)),VAL(MID$(TIME$,6,2)),VAL(MID$(TIME$,9,2)))+CHR$(0) ! Datum,nr 5580 IF Fi<>4 AND Fi<>5 THEN 5600 ELSE Ok$="!" 5590 IF LEN(I$)>=Pl THEN IF MID$(I$,Pl,1)="O" THEN Ok$=" " 5600 RETURN STRING$(3,255)+K$+Ok$+P$+I$+SPACE$(Pl-LEN(I$)) 5610 FNEND 5620 ! 5630 DEF FNUdat$(P$)=FNN$(ASCII(P$))+FNN$(ASCII(RIGHT$(P$,2)))+FNN$(ASCII(RIGHT$(P$,3))) 5640 ! 5650 DEF FNPrlista(Nr) LOCAL F,Fi,Post$=55,K$=13,Pv,Typ 5660 IF Nr=0 THEN RETURN 0 5670 Typ=Win(Nr,0) 5680 IF INSTR(1,"2346:",CHR$(Typ+48))=0 THEN RETURN 0 5690 Z=FNLine24(0) 5700 Fi=VAL(MID$(" 524 1 4",Typ,1)) 5710 Pv=ASCII(MID$(" ;9B 0 >",Typ,1))-48+3 5720 Ind$="INDEX" : IF Fi=1 THEN Ind$="KONTO" 5730 ! 5740 IF FNOpnpr THEN RETURN 0 5750 F=FNOpen(Fi) : IF F=0 THEN RETURN 0 5760 IF Fi<>1 THEN K$=Id$(Nr) 5770 ; #99 SPACE$(10); 5780 ON Typ GOSUB 6020,5970,5980,5990,6020,6000,6020,6020,6020,6010 5790 ; #99 " Tid: " LEFT$(TIME$,16) 5800 ; #99 STRING$(76,45) : ; #99 5810 ! 5820 IF Typ=10 OR Typ=2 THEN K$=K$+" " ELSE IF Typ=4 THEN K$=K$+'"' 5830 ON ERROR GOTO 5910 : ISAM READ #F Post$ INDEX Ind$ KEY K$ 5840 WHILE MID$(Post$,4,LEN(K$))=K$ 5850 ; #99 SPACE$(10); 5860 IF Fi=4 THEN ; #99 FNUdat$(MID$(Post$,14,3)) " "; 5870 ; #99 RIGHT$(Post$,Pv) 5880 ISAM READ #F Post$ NEXT 5890 WEND : GOTO 5940 5900 ! 5910 IF ERRCODE=34 OR ERRCODE=120 THEN 5940 5920 Z=FNFel(ERRCODE,1) 5930 ON ERROR GOTO 5940 : Opn(F)=0 : CLOSE F 5940 ; #99 CHR$(12); : CLOSE 99 5950 RETURN FNClose(F) 5960 ! 5970 ; #99 "Komih}g-lista"; : GOTO 6020 5980 ; #99 "Telefon-katalog"; : GOTO 6020 5990 ; #99 "Att-g|ra-lista"; : GOTO 6020 6000 ; #99 "Konton i privatsekreteraren"; : RETURN 6010 ; #99 "Bokade tider"; : GOTO 6020 6020 ; #99 " f|r "; 6030 IF Id$(Nr)<>SPACE$(8) THEN ; #99 Id$(Nr); ELSE ; #99 "alla."; 6040 RETURN 6050 FNEND 6060 ! 6070 DEF FNIdmeny$(R,K) LOCAL Save$=672,Gt$=1,F,Post$=20,K$=8,Eof 6080 Win(6,1)=R : Win(6,2)=K : Win(6,3)=12-R : Win(6,4)=12 : Rad(6)=1 : Hlp=51 6090 Save$=" " : Z=FNLine24(0)+FNOpnwin(6,Rub$,VAROOT(Save$)) 6100 F=FNOpen(1) : IF F=0 THEN 6460 ! Konton 6110 ; #6 " " Grupp$ " "; 6120 ON ERROR GOTO 6200 6130 ISAM READ #F Post$ INDEX "GRUPP" FIRST 6140 WHILE Rad(6)13) 6150 IF MID$(Post$,12,8)=K$ THEN 6180 6160 K$=MID$(Post$,12,8) 6170 IF K$<>Grupp$ THEN ; #6 " " K$ " "; : Rad(6)=Rad(6)+1 6180 ISAM READ #F Post$ 6190 WEND : GOTO 6210 6200 IF ERRCODE<>34 THEN 6490 6210 Eof=1 : ; #6 CUR(0,0); : GOTO 6230 6220 IF ERRCODE<>34 THEN 6490 6230 ON ERROR GOTO 6220 6240 Cr=0 : K$=" " : WHILE NOT Cr AND LEN(K$) 6250 IF Eof=1 THEN K$=Grupp$ : GOTO 6270 6260 K$=MID$(Post$,12,8) : IF K$=Grupp$ THEN 6340 6270 Z=FNInv(6,K$+" ",-1) : ; #6 CHR$(13); 6280 Gt$=FNInkey$ 6290 Z=FNInv(6,K$+" ",0) : ; #6 CHR$(13); 6300 ON Op+4 GOTO 6310,6450,6330,6440,6380,6450 6310 ; CHR$(7); : GOTO 6450 6320 ! 6330 IF Eof THEN 6440 ELSE ; #6 CHR$(11); 6340 Eof=1 : ISAM READ #F Post$ PREVIOUS 6350 IF MID$(Post$,12,8)=K$ OR MID$(Post$,12,8)=Grupp$ THEN 6340 6360 Eof=0 : GOTO 6450 6370 ! 6380 IF Cr THEN 6450 6390 IF Eof THEN ISAM READ #F Post$ FIRST : GOTO 6410 6400 ISAM READ #F Post$ NEXT 6410 IF MID$(Post$,12,8)=K$ OR MID$(Post$,12,8)=Grupp$ THEN 6400 6420 ; #6 : Eof=0 : GOTO 6450 6430 ! 6440 K$="" 6450 WEND 6460 ; #6 CHR$(27)+"T"+CVT%$(VAROOT(Save$)); 6470 CLOSE 6 : Z=FNClose(F) 6480 RETURN K$ 6490 Z=FNFel(ERRCODE,1) : GOTO 6460 6500 FNEND 6510 ! 6520 DEF FNSysmeny(M) LOCAL Alt,Alt$=75,Antalt 6530 IF Busy(12) THEN Op=0 : RETURN 0 ELSE Busy(12)=-1 6540 Alt=1 6550 Alt$="AlmanackaKomih}gTelefonnrAtt g|raKalkylator\vrigt"+MID$("AvbrytMeny0 Sluta ",M*6+1,6)+"" 6560 Hlp=12 : Alt=FNPosval(0,0,0,Alt$,7,Alt) 6570 IF Op<0 THEN 6560 6580 ; CUR(0,0) C2$ FNInvpos$(0,Alt$,0); 6590 IF Op=0 THEN IF M THEN Alt=7 : GOTO 6560 ELSE 6800 6600 IF Alt=7 THEN Op=0 6610 Id$=Konto$ : IF Alt=4 THEN Id$=Grupp$ 6620 ! 6630 IF Alt<>6 THEN 6700 6640 IF Priv AND 64 THEN Alt$="Utskrift Konton " ELSE Alt$="Utskrift" 6650 Hlp=52 : Z=FNWinmeny(1,57,2+((Priv AND 64)=0),12,"",Alt$,1) 6660 IF NOT Cr THEN 6550 6670 IF Z=1 THEN Z=FNPrlista(Aktiv) : Op=0 : IF M THEN 6550 ELSE 6800 6680 Alt=4+Z : GOTO 6800 6690 ! 6700 IF NOT Cr THEN 6800 6710 IF Alt<>4 THEN 6750 6720 Id$=FNIdmeny$(1,35) 6730 IF Cr THEN 6800 ELSE 6560 6740 ! 6750 IF Alt>3 THEN 6800 6760 Hlp=50 6770 Z=FNWinmeny(1,ASCII(MID$(CHR$(1,12,23),Alt,1)),3,10,"","Privat Avdeln Allm{n",1) 6780 IF NOT Cr THEN 6560 6790 IF Z=2 THEN Id$=Grupp$ ELSE IF Z=3 THEN Id$=SPACE$(8) 6800 ! ;CUR(0,0)SPACE$(80); 6810 Busy(12)=0 : RETURN Alt 6820 FNEND 6830 ! 6840 DEF FNHj{lp(Nr) LOCAL Save$=1692,F,B,S,H,P. 6850 IF Busy(11) THEN RETURN 0 ELSE B=Busy(12) : Busy(12)=-1 ! Sysmeny 6860 Z=FNLine24(0) 6870 F=FNOpen(3) : IF F=0 THEN RETURN 6540 6880 ON ERROR GOTO 7050 6890 Op=1 : WHILE Op 6900 Win(5,0)=11 6910 IF H=Hlp THEN H=11 ELSE H=Hlp 6920 POSIT #F,0. : WHILE S<>H 6930 INPUT #F,S,P.,I$ : IF S=0 THEN Z=FNFel(4,0) : GOTO 7080 6940 WEND 6950 POSIT #F,P. : INPUT #F,Win(5,1),Win(5,2),Win(5,3),Win(5,4) 6960 Save$=" " : Z=FNOpnwin(5,"HJ[LP",VAROOT(Save$)) 6970 WHILE 1 6980 INPUT LINE #F I$ : IF I$="&"+CHR$(13,10) THEN 7010 6990 ; #5 LEFT$(I$,LEN(I$)-2) 7000 WEND 7010 Busy(11)=-1 : Z=ASCII(FNInkey$) 7020 ; #5 CHR$(27)+"T"+CVT%$(VAROOT(Save$)); : Z=FNEndwin(5) 7030 WEND : GOTO 7070 7040 ! 7050 Z=FNFel(ERRCODE,1) 7060 ON ERROR GOTO 7070 : CLOSE F : Opn(F)=0 7070 ON ERROR GOTO 7080 : ; #5 CHR$(27)+"T"+CVT%$(VAROOT(Save$)); 7080 Busy(12)=B : RETURN FNEndwin(5)+FNClose(F) 7090 FNEND 7100 ! 7110 DEF FNInit 7120 Abc=800 : IF PEEK(39)=4 THEN Abc=806 ELSE IF PEEK(39)=3 THEN Abc=802 7130 Dos=0 : IF PEEK(24678)=195 THEN Dos=PEEK(24688) 7140 IF Dos=5 OR Dos=9 THEN Dos=Dos-1 7150 IF Abc=806 THEN POKE PEEK2(116)+6,5 ! ATTRIBUTE 7160 DIM Crt$=0,C1$=1,C2$=1,C3$=1,C4$=3 7170 POKE VAROOT(Crt$),208,7,0,120,208,7 7180 MID$(Crt$,1921,80)=SPACE$(80) 7190 OUT 56,6,57,25 7200 IF Dos=8 AND PEEK(PEEK2(24683)+1)=131 THEN POKE PEEK2(24683)+1,128 ! RPR 7210 IF Abc<>806 THEN 7260 7220 C1$=CYA ! Inmatn 7230 C2$=YEL ! Allm{nt 7240 C3$=RED ! Ramar 7250 C4$=BLU+NWBG+WHT ! Tid 7260 Kalkreg.(69)=EXP(1) : Kalkreg.(80)=PI 7270 RETURN FNKontoinit 7280 FNEND 7290 ! 7300 DEF FNKontoinit LOCAL Post$=20,F 7310 DIM Konto$=8 AND Dos=8,Grupp$=8,Priv 7320 Grupp$="GRUPP1 " 7330 IF Dos<>8 THEN Konto$="KONTO1 " : Priv=96 : RETURN 0 7340 Z=PEEK2(24699) : POKE VAROOT(Konto$),8,0,Z+2,SWAP%(Z+2),8,0 7350 Priv=64 AND PEEK2(Z)=-1 OR 32 7360 F=FNOpen(1) : IF F=0 THEN RETURN 0 ! Konton 7370 ON ERROR GOTO 7420 : ISAM READ #F Post$ INDEX "KONTO" KEY Konto$ 7380 Grupp$=MID$(Post$,12,8) 7390 Priv=ASCII(RIGHT$(Post$,20)) OR Priv 7400 GOTO 7450 7410 ! 7420 IF ERRCODE<>120 THEN 7460 ELSE ON ERROR GOTO 7440 7430 ISAM WRITE #F CHR$(255,255,255)+Konto$+Grupp$+CHR$(Priv) : GOTO 7450 7440 IF ERRCODE<>39 AND ERRCODE<>40 THEN 7460 ELSE Z=FNFel(1,0) 7450 RETURN FNClose(F) 7460 Opn(F)=0 : CLOSE F : RETURN FNFel(ERRCODE,1) 7470 FNEND 7480 ! 7490 ! _______________________________________________________________________. 7500 OPTION BASE 1 7510 DIM Win(6,0:4),Rad(6),Kol(4),Par$(4)=5,Id$(4)=8,Busy(12),Opn(100:104) 7520 DIM Kalkreg.(65:93),Id$=8,Oldfile 7530 Z=FNInit 7540 ; CHR$(12) 7550 Alt=FNSysmeny(1-(Dos<>8)) 7560 IF Op=1 THEN Z=FNStartwin(Alt,"") : GOTO 7550 7570 ! 7580 CLOSE 7590 IF Abc<>806 THEN OUT 56,6,57,24 ELSE ; CUR(24,0) SPACE$(80) CUR(0,0) 7600 ON ERROR GOTO 7610 : CHAIN "XS0" 7610 CHAIN "NUL:" 7620 END