100 ! SAVE FILOS32 110 ! *------------------------------ 120 ! * Namn: FILOS.BAC 130 ! * Syfte: Hantering av filer och UFD 140 ! *------------------------------ 150 DATA v3.2 1987-04-04 BEN (Johan Bengtsson <7780>) 160 ! 170 D=FNVariabel 180 ! 190 ON ERROR GOTO 300 200 ; CHR$(12) Stf$ Vers$ 210 ; CUR(6,0) STRING$(Conbredd,61) 220 IF FNEnhet D=FNL{nk 230 D=FNFellista 240 WHILE -1 250 D=FNMatris 260 WHILE FNKommando : WEND 270 D=FNFellista 280 WEND 290 ! 300 ; Fef$ FNFeltext$(ERRCODE) 310 D=FNL{nk 320 ! 330 ! ## Variabler 340 DEF FNVariabel 350 POKE 65266,5 ! ATTRIBUTE 5 360 Stopsave=PEEK2(65413) : POKE 65413,0,0 370 DIM Vers$=20 : Vers$='* Filos v3.1 *' 380 DIM Volnamn$=80 390 DIM Lenhet$=4,Lnamn$=60,Lufd$=60 400 DIM Utenhet$=4,Utnamn$=60,Utufd$=60 410 DIM Status$=80,S|k$=20 420 DIM Ufdnamn$=60,Enhet$=60,Ufd$=60,Fil$=16 430 DIM Fel$(0:13)=60,Felrubr$=80 440 DIM Getque$=60,L{nk$=16 450 DIM Stf$=6,Inf$=6,Maf$=6,Syf$=6,Fef$=6 460 Stf$=CHR$(137,140,139,156,130) ! STDY+NRML+NULN+BLBG+GRN 470 Maf$=CHR$(137,140,138,156,134) ! STDY+NRML+ULN+BLBG+CYA 480 Inf$=CHR$(137,140,139,156,134) ! STDY+NRML+NULN+BLBG+CYA 490 Syf$=CHR$(137,140,139,156,131) ! STDY+NRML+NULN+BLBG+YEL 500 Fef$=CHR$(137,140,139,156,129,7) ! STDY+NRML+NULN+BLBG+RED+BEL 510 DIM Avsl$=10,Mavsl$=20 520 Avsl$=CHR$(13,192,196,198) : Mavsl$=CHR$(10,13,18,20,27,136,137,161,163,192,194,195,196,198,199,210,211) 530 D=FNUfdini ! alias DIR:, COP:, TMP: 540 DIM Dir$=4,Cop$=4,Tmp$=4 : Dir$='DIR:' : Cop$='COP:' : Tmp$='TMP:' 550 Filmax=(SYS(4)-4000)/22/4*4 : Liblen=Filmax*20 560 IF Filmax<=0 ; Fef$ 'Minnet fullt' : D=FNL{nk 570 DIM Lib$=Liblen,Urval(1:Filmax+1) 580 Lib$=' ' : POKE VAROOT(Lib$)+4,Liblen,SWAP%(Liblen) 590 MID$(Lib$,2,Liblen-1)=LEFT$(Lib$,Liblen-1) 600 Conbredd=PEEK(65364) : Mbredd=Conbredd/20 : Mh|jd=17 : Mant=Mbredd*Mh|jd : Tknant=Mant*20 : IF Tknant>Liblen Tknant=Liblen 610 DIM Bearbet$=15 620 RETURN 0 630 FNEND 640 ! 650 ! ## Enradiga funktioner 660 DEF FNBlkpos(Libidx)=20*Libidx+1 670 DEF FNFilpos(Libidx)=20*Libidx+5 680 DEF FNUrval(Libidx)=VAL('0'+FNSkip$(MID$(Lib$,FNBlkpos(Libidx),3),' ')) 690 DEF FNFil$(Libidx)=FNSkip$(MID$(Lib$,FNFilpos(Libidx),12),' ') 700 DEF FNH|ger$(In$,Ant)=RIGHT$(SPACE$(Ant)+In$,LEN(In$)+1) 710 DEF FNV{nster$(In$,Ant)=LEFT$(In$+SPACE$(Ant),Ant) 720 ! 730 ! ## Markering av bl a urval 740 DEF FNMatris LOCAL Fil$=16,S$=3,Ufds|k$=60 750 ! 760 ; CHR$(12) Stf$ Vers$ 770 ; CUR(4,0) Lnamn$ 780 ; CUR(5,0) FNV{nster$(Volnamn$,Conbredd) 790 ; CUR(6,0) STRING$(Conbredd,61) 800 D=FNPr25(Status$) : Status$='' 810 WHILE -1 820 IF Mpos<0 Mpos=0 830 IF Mpos>Lfilant Mpos=Lfilant 840 WHILE Mpos=Mstart+Mant : Mstart=Mstart+Mbredd : WEND 860 ; CUR(7,0) Stf$ MID$(Lib$,FNBlkpos(Mstart),Tknant); 870 Offs=Mpos-Mstart : Rad=7+Offs/Mbredd : Kol=MOD(Offs,Mbredd)*20 880 Oldurv=FNUrval(Mpos) 890 ON ERROR GOTO 890 900 IF Oldurv=0 S$='' ELSE S$=NUM$(Oldurv) 910 S$=FNInmat$(Rad,Kol,'',3,S$,Mavsl$) 920 IF S$<>'' Urval=VAL(S$) : GOTO 960 930 IF Exit=13 Urval=Urvant+1 : GOTO 960 940 IF Oldurv>0 D=FNUrvabort(Oldurv) 950 GOTO 1010 960 IF Urval=Oldurv 1010 970 IF Urval>Urvant+1 OR Urval<1 GOTO 890 980 IF Oldurv>0 D=FNUrvabort(Oldurv) 990 D=FNNyurv(Urval+(Urval>Oldurv AND Oldurv>0),Mpos) 1000 ; CUR(Rad,Kol) Stf$ MID$(Lib$,FNBlkpos(Mpos),3); 1010 IF Exit=192 ; CUR(7,0) Stf$ MID$(Lib$,FNBlkpos(Mstart),Tknant); : RETURN 0 1020 IF Exit=18 OR Exit=136 Mpos=Mpos-1 1030 IF Exit=20 OR Exit=137 OR Exit=13 Mpos=Mpos+1 1040 WHILE Exit=194 1050 ; CUR(2,0) Stf$ TAB(Conbredd) 1060 S|k$=FNInmat$(2,0,'S|kord: ',20,S|k$,Avsl$) 1070 WHILE Exit<>192 AND Exit<>196 1080 Exit=210 ! S|k 1090 IF 0 WEND 1100 IF 0 WEND 1110 WHILE Exit=210 1120 Idx=INSTR(FNBlkpos(Mpos+1),Lib$,S|k$) 1130 IF Idx=0 Idx=INSTR(1,Lib$,S|k$) 1140 Libidx=(Idx-1)/20 1150 IF Idx<>0 Mpos=Libidx 1160 IF 0 WEND 1170 WHILE Exit=10 OR Exit=195 1180 WHILE INSTR(1,FNFil$(Mpos),'.Ufd')>0 1190 Fil$=FNSkip$(LEFT$(FNFil$(Mpos),INSTR(1,FNFil$(Mpos),'.')-1),' ') 1200 D=FNLibenhet(Lenhet$+Fil$) 1210 D=FNFellista 1220 GOTO 760 1230 IF 0 WEND 1240 IF 0 WEND 1250 WHILE Exit=27 OR Exit=211 1260 Ufds|k$='' 1270 Idx=INSTR(1,Lnamn$,'/') : IF Idx=0 Idx=INSTR(1,Lnamn$,':') 1280 WHILE Idx 1290 Ufds|k$=RIGHT$(Lnamn$,Idx+1) 1300 Idx=INSTR(Idx+1,Lnamn$,'/') 1310 WEND 1320 IF Ufds|k$<>'' Ufds|k$=FNV{nster$(Ufds|k$,8)+'.Ufd' 1330 D=FNLibenhet(FNParent$(Lnamn$)) 1340 D=FNFellista 1350 Mpos=(INSTR(1,Lib$,Ufds|k$)-1)/20 1360 GOTO 760 1370 IF 0 WEND 1380 IF Exit=196 OR Exit=161 Mpos=Mpos-Mbredd 1390 IF Exit=198 OR Exit=163 Mpos=Mpos+Mbredd 1400 IF Exit=199 WHILE Urvant : D=FNUrvabort(Urvant) : WEND 1410 WEND 1420 FNEND 1430 ! 1440 ! ## Best{m f|r{lder till s|kv{g 1450 DEF FNParent$(Child$) LOCAL Parent$=60,Idx 1460 IF INSTR(1,Lnamn$,'/')=0 AND INSTR(1,Lnamn$,':')=LEN(Lnamn$) RETURN '' 1470 Idx=INSTR(1,Child$,'/') : IF Idx=0 Idx=INSTR(1,Child$,':') 1480 WHILE Idx 1490 Parent$=LEFT$(Child$,Idx-1) 1500 Idx=INSTR(Idx+1,Child$,'/') 1510 WEND 1520 RETURN Parent$ 1530 FNEND 1540 ! 1550 ! ## Eliminerar ett urval 1560 DEF FNUrvabort(Urvidx) 1570 MID$(Lib$,FNBlkpos(Urval(Urvidx)),3)=' ' 1580 FOR Idx=Urvidx+1 TO Urvant 1590 MID$(Lib$,FNBlkpos(Urval(Idx)),3)=FNH|ger$(NUM$(Idx-1),3) 1600 Urval(Idx-1)=Urval(Idx) 1610 NEXT Idx 1620 Urvant=Urvant-1 1630 RETURN 0 1640 FNEND 1650 ! 1660 ! ## Skjuter in ett nytt urval 1670 DEF FNNyurv(Urvidx,Mpos) 1680 FOR Idx=Urvant TO Urvidx STEP -1 1690 MID$(Lib$,FNBlkpos(Urval(Idx)),3)=FNH|ger$(NUM$(Idx+1),3) 1700 Urval(Idx+1)=Urval(Idx) 1710 NEXT Idx 1720 MID$(Lib$,FNBlkpos(Mpos),3)=FNH|ger$(NUM$(Urvidx),3) 1730 Urval(Urvidx)=Mpos 1740 Urvant=Urvant+1 1750 RETURN 0 1760 FNEND 1770 ! 1780 ! ## Markera urval i nyinl{st matris 1790 DEF FNM{rkurval 1800 FOR Idx=1 TO Urvant 1810 MID$(Lib$,FNBlkpos(Urval(Idx)),3)=FNH|ger$(NUM$(Idx),3) 1820 NEXT Idx 1830 RETURN 0 1840 FNEND 1850 ! 1860 ! ## Kommandomeny 1870 DEF FNKommando 1880 D=FNPr25(Status$) : Status$='' 1890 IF Lenhet$='' WHILE FNEnhet : WEND : RETURN 0 1900 ON FNMenyget(1,0,'Enhet Kopiera Radera Ufd Verifiera [ndra .','EKRUV[.')+1 GOTO 1910,1920,1930,1940,1950,1960,1970,1980 1910 RETURN 0 1920 RETURN FNEnhet 1930 RETURN FNKopia 1940 RETURN FNRadera 1950 RETURN FNUfd 1960 RETURN FNVerifiera 1970 RETURN FNRename 1980 RETURN FNAvsluta 1990 FNEND 2000 ! 2010 ! ## Byt aktuell katalog 2020 DEF FNEnhet LOCAL Namn$=60 2030 ! 2040 D=FNFellista 2050 ! 2060 ; CUR(2,0) Stf$ TAB(Conbredd) 2070 Namn$=FNVersal$(FNInmat$(2,0,'Ny enhet: ',50,Lnamn$,Avsl$)) 2080 IF INSTR(1,CHR$(192,196,161),CHR$(Exit)) RETURN -1 2090 IF Namn$='' Status$='Ingen enhet angiven' : RETURN -1 2100 IF FNLibenhet(Namn$) IF Felant=1 Felant=0 : GOTO 2060 ELSE 2040 2110 RETURN 0 2120 FNEND 2130 ! 2140 ! ## L{s ny aktuell katalog (DIR:) 2150 DEF FNLibenhet(Namn$) 2160 Felrubr$='L[SNING AV ENHET '+Namn$ 2170 IF Namn$='' RETURN 0 2180 Lenhet$='' 2190 IF FNL{senhet(Namn$) Lnamn$=Ufdnamn$ : RETURN -1 2200 Lnamn$=Ufdnamn$ : Lenhet$=Enhet$ : Lufd$=Ufd$ : Qlufd=Qufd 2210 Lsel=Sel : Lcl=Cl : Ldrold=Drold 2220 Utnamn$='' 2230 Urvant=0 : Mstart=0 : Mpos=0 : Lfilant=Filant 2240 Volnamn$=FNV{nster$(FNL{svolnamn$,80) : IF St Volnamn$='Volymnamn ol{sbart!' 2250 Status$='Ny enhet' 2260 RETURN 0 2270 FNEND 2280 ! 2290 ! ## L{s filnamn 2300 DEF FNL{senhet(Namn$) LOCAL Dbuf0$=0,Filant$=16,Libmax,Fil$=16,Byte 2310 POKE VAROOT(Dbuf0$),0,1,0,245,0,1 2320 IF Namn$='' Status$='Ingen enhet angiven' : RETURN -1 2330 IF FNInitenhet(0,Namn$,Dir$) D=FNNybacfel(Ufdnamn$,Ec) : RETURN -1 ! Endast l{sning 2340 ! 2350 Lib$=' ' : POKE VAROOT(Lib$)+4,Liblen,SWAP%(Liblen) 2360 MID$(Lib$,2,Liblen-1)=LEFT$(Lib$,Liblen-1) 2370 Filant=0 2380 IF Qufd Libmax=15 : Bitmap=Libstart-1 ELSE Libmax=Libsize-1 : Libstart=Bitmap+2 2390 IF FNRw(Sel,Bitmap,0) OR St Status$='BITMAP ol{sbar!' : RETURN -1 2400 Filant$=MID$(Dbuf0$,240,16) 2410 FOR Sektor=0 TO Libmax 2420 WHILE ASCII(RIGHT$(Filant$,Sektor+1))>0 2430 IF FNRw(Sel,Libstart+Sektor,0) RETURN -1 2440 WHILE St=0 2450 FOR Idx=0 TO 15 2460 Fil$=MID$(Dbuf0$,16*Idx+5,11) 2470 Fil$=LEFT$(Fil$,8)+'.'+RIGHT$(Fil$,9) 2480 Byte=ASCII(Fil$) 2490 WHILE Byte>64 AND Byte<94 OR INSTR(1,' 0123456789',CHR$(Byte))>0 2500 IF Filant>=Filmax-1 MID$(Lib$,FNFilpos(Filant),12)='>>>>>>>>>>>>' : Status$='F|r m}nga filnamn' : RETURN 0 2510 MID$(Lib$,FNFilpos(Filant),12)=Fil$ 2520 Filant=Filant+1 2530 IF 0 WEND 2540 NEXT Idx 2550 IF 0 WEND 2560 IF 0 WEND 2570 NEXT Sektor 2580 RETURN 0 2590 FNEND 2600 ! 2610 ! ## Kopia enligt urval 2620 DEF FNKopia=FNKopelver(0,'Kopier','till') 2630 ! 2640 ! ## Verifiering enligt urval 2650 DEF FNVerifiera=FNKopelver(1,'Verifier','med') 2660 ! 2670 ! ## Kopiering (0) eller Verifiering (1) enligt urval 2680 DEF FNKopelver(Typ,Pbearbet$,Prep$) LOCAL Q 2690 Bearbet$=Pbearbet$ 2700 IF Urvant=0 Status$='Inga filer angivna' : RETURN 0 2710 WHILE Utnamn$='' 2720 IF Qlufd Sel=PEEK(Dirsel) ELSE Sel=Lsel 2730 IF INSTR(1,CHR$(0,1,8,9,12,13,16,16),CHR$(Sel)) Utnamn$=FNSelkodenhet$(Sel XOR 1) ELSE Utnamn$=FNSelkodenhet$(Sel) 2740 Utnamn$=Utnamn$+Lufd$ 2750 IF 0 WEND 2760 ; CUR(2,0) Stf$ TAB(Conbredd) 2770 Utnamn$=FNVersal$(FNInmat$(2,0,Bearbet$+'a '+NUM$(Urvant)+' filer '+Prep$+' ',50,Utnamn$,Avsl$)) 2780 IF INSTR(1,CHR$(192,196,161),CHR$(Exit)) Status$='' : RETURN -1 2790 WHILE FNInitenhet(0,Utnamn$,Cop$) 2800 IF Typ<>0 D=FNNybacfel(Ufdnamn$,Ec) : RETURN 0 ! Fel, om ej kopiering 2810 Q=FNVersal$(FNInmat$(2,0,Utnamn$+' finns inte; skapa? ',1,'J',Avsl$))<>'J' 2820 IF Q OR Exit=192 OR Exit=196 Status$='' : RETURN -1 2830 IF FNInitenhet(-1,Utnamn$,Cop$) D=FNNybacfel(Ufdnamn$,Ec) : RETURN 0 2840 IF 0 WEND 2850 Utnamn$=Ufdnamn$ : Utenhet$=Enhet$ : Utufd$=Ufd$ : Qutufd=Qufd 2860 Utsel=Sel : Utcl=Cl : Utdrold=Drold 2870 ; CUR(2,0) Stf$ Bearbet$+'a enligt urval '+Prep$+' ' Inf$ Utnamn$; 2880 ! 2890 D=FNPr25(Bearbet$+'ingen kan avbrytas med PF2') 2900 Felrubr$=FNVersal$(Bearbet$)+'ING '+FNVersal$(Prep$)+' '+Utnamn$ 2910 Status$=Bearbet$+'ingen AVBRUTEN' 2920 Q=FNBearblib(Typ,'',0) 2930 IF FNL{senhet(Lnamn$) Lenhet$='' : RETURN -1 2940 Lenhet$=Enhet$ : Lfilant=Filant 2950 D=FNM{rkurval 2960 IF Q=0 Status$=Bearbet$+'ing slutf|rd'+CHR$(7) 2970 RETURN 0 2980 FNEND 2990 ! 3000 ! ## Kopiera (0), Verifiera (1) eller Radera (2) i filkatalog 3010 DEF FNBearblib(Typ,V{g$,Qalla) LOCAL Libidx,Urvmin,Urvmax,Urvidx,Idx,Fil$=12,Ufd$=9,Q 3020 IF V{g$<>'' IF FNL{senhet(FNPath$(Lnamn$,V{g$)) RETURN -1 ELSE Lenhet$=Enhet$ 3030 IF Typ<>2 IF FNInitenhet((Typ=0),FNPath$(Utnamn$,V{g$),Cop$) D=FNNybacfel(Ufdnamn$,Ec) : RETURN -1 ELSE Utenhet$=Enhet$ 3040 IF Qalla Urvmin=0 : Urvmax=Filant-1 ELSE Urvmin=1 : Urvmax=Urvant 3050 Urvidx=Urvmin : WHILE Urvidx<=Urvmax 3060 IF Qalla Libidx=Urvidx ELSE Libidx=Urval(Urvidx) 3070 Fil$=FNFil$(Libidx) 3080 ; USING '&&Nu &as ###/###: &&' CUR(3,0) Stf$ Bearbet$ Urvidx Urvmax FNPath$(V{g$,Fil$) TAB(Conbredd) 3090 Ufd$='' : Idx=INSTR(1,Fil$,'.Ufd') 3100 WHILE Idx 3110 Ufd$=FNSkip$(LEFT$(Fil$,Idx-1),' ') 3120 IF FNBearblib(Typ,FNPath$(V{g$,Ufd$),-1) RETURN -1 3130 IF FNL{senhet(FNPath$(Lnamn$,V{g$)) RETURN -1 ELSE Lenhet$=Enhet$ 3140 IF Typ<>2 IF FNInitenhet((Typ=0),FNPath$(Utnamn$,V{g$),Cop$) D=FNNybacfel(Ufdnamn$,Ec) : RETURN -1 ELSE Utenhet$=Enhet$ 3150 IF FNFil$(Libidx)=Fil$ Urvidx=Urvidx+1 : GOTO 3370 ! Ufd't kvar 3160 GOTO 3200 3170 IF 0 WEND 3180 IF FNBearbeta(Typ,Fil$) RETURN -1 3190 ! 3200 WHILE Typ=2 3210 IF Ufd$='' Q=FNTestopen(Lenhet$+FNSkip$(Fil$,' ')) ELSE Q=FNInitenhet(0,Lnamn$+V{g$+Ufd$,Tmp$)=0 3220 IF Q GOTO 3370 ! Filen/Ufd't kvar 3230 WHILE Qalla=0 3240 D=FNUrvabort(Urvidx) 3250 Idx=1 : WHILE Idx<=Urvant 3260 IF Urval(Idx)>Libidx Urval(Idx)=Urval(Idx)-1 3270 Idx=Idx+1 : WEND 3280 Mpos=Mpos+(Mpos>Libidx) 3290 IF 0 WEND 3300 Idx=Libidx+1 : WHILE Idx<=Filmax-1 3310 MID$(Lib$,FNBlkpos(Idx-1),20)=MID$(Lib$,FNBlkpos(Idx),20) 3320 Idx=Idx+1 : WEND 3330 MID$(Lib$,Liblen-19,20)=SPACE$(20) 3340 IF 0 WEND 3350 IF Typ=2 Urvmax=Urvmax-1 ELSE Urvidx=Urvidx+1 3360 ! 3370 WEND 3380 RETURN 0 3390 FNEND 3400 ! 3410 ! ## Kontrollera om fil finns 3420 DEF FNTestopen(Fil$) 3430 ON ERROR GOTO 3440 : OPEN Fil$ AS FILE 99 : CLOSE 99 : RETURN -1 3440 RETURN 0 3450 FNEND 3460 ! 3470 ! ## Kopiera (0), Verifiera (1) eller Radera (2) fil 3480 DEF FNBearbeta(Typ,Fil$) LOCAL Buf$=2024,Temp$=253,L{ngd,Idx,Filstl,Stl 3490 POKE VAROOT(Buf$)+4,2024,SWAP%(2024) 3500 IF SYS(5) IF ASCII(FNGet$)=193 RETURN -1 ELSE D=SYS(6) 3510 ON ERROR GOTO 3880 3520 IF Typ<>2 OPEN Lenhet$+FNSkip$(Fil$,' ') AS FILE 1 3530 Filstl=PEEK2(64778) : Filstl=Filstl-65536.*(Filstl<0) 3540 IF Typ=2 Filstl=32767 3550 ON ERROR GOTO 3940 3560 IF Typ=0 PREPARE Utenhet$+FNSkip$(Fil$,' ') AS FILE 2 3570 IF Typ=1 OPEN Utenhet$+FNSkip$(Fil$,' ') AS FILE 2 3580 WHILE Typ=2 3590 ON ERROR GOTO 3940 3600 KILL Lenhet$+FNSkip$(Fil$,' ') 3610 RETURN 0 3620 IF 0 WEND 3630 Stl=0 3640 Flg=-1 3650 WHILE Flg 3660 IF SYS(5) IF ASCII(FNGet$)=193 CLOSE 1,2 : RETURN -1 ELSE D=SYS(6) 3670 ON ERROR GOTO 3880 3680 L{ngd=0 3690 WHILE L{ngd<2024 3700 GET #1 Temp$ COUNT 253 3710 MID$(Buf$,L{ngd+1,253)=Temp$ : L{ngd=L{ngd+253 3720 Stl=Stl+1 3730 WEND 3740 ! 3750 ON ERROR GOTO 3940 3760 IF Typ=0 PUT #2 LEFT$(Buf$,L{ngd) 3770 WHILE Typ=1 3780 Idx=0 : WHILE IdxMID$(Buf$,Idx+1,253) IF FNNybacfel(Fil$,123) RETURN 0 ELSE Idx=L{ngd : Flg=0 3810 Idx=Idx+253 : WEND 3820 IF 0 WEND 3830 WEND 3840 ! 3850 ON ERROR GOTO 3940 : CLOSE 1,2 3860 RETURN 0 3870 ! 3880 WHILE ERRCODE=37 OR ERRCODE=38 3890 IF Stl'' IF FNInitenhet(0,Dir$+Descr$,Alias$)=0 RETURN 0 4020 IF LEN(Descr$)<=3 IF FNInitenhet(0,Descr$+':',Alias$)=0 RETURN 0 4030 IF 0 WEND 4040 IF FNInitselenhet(Skapa,Descr$,Alias$)=0 RETURN 0 4050 Enhet$=FNVersal$(Descr$) 4060 Idx=INSTR(1,Enhet$,':') 4070 Ufd$=RIGHT$(Enhet$,Idx+1) : Enhet$=LEFT$(Enhet$,Idx) 4080 Ufdnamn$=Enhet$+Ufd$ 4090 IF Enhet$=Dir$ Ufdnamn$=Lnamn$+'/'+Ufd$ 4100 IF Enhet$=Cop$ Ufdnamn$=Utnamn$+'/'+Ufd$ 4110 Sel=FNSelkod(Enhet$) 4120 IF Sel=-1 Status$=Descr$+' {r ol{sbar!'+CHR$(7) : RETURN -1 4130 WHILE Enhet$<>'' 4140 Dradr=FNS|kdr(Enhet$) : IF Dradr=-1 Ufdnamn$=Enhet$ : RETURN -1 4150 Drsel=PEEK(Dradr+7) 4160 IF 0 WEND 4170 Qufd=(Ufd$<>'') OR Drsel=27 OR Drsel=30 OR Drsel=31 4180 IF Enhet$=Alias$ IF FNSetufd(0,Tmp$,Enhet$,'') Ufdnamn$=Enhet$ : RETURN -1 ELSE Enhet$=Tmp$ 4190 IF Qufd IF FNSetufd(Skapa,Alias$,Enhet$,Ufd$) RETURN -1 ELSE Enhet$=Alias$ 4200 IF Alias$=Dir$ Libstart=PEEK2(Dirlibstart) : Sel=PEEK(Dirsel) 4210 IF Alias$=Cop$ Libstart=PEEK2(Coplibstart) : Sel=PEEK(Copsel) 4220 IF Alias$=Tmp$ Libstart=PEEK2(Tmplibstart) : Sel=PEEK(Tmpsel) 4230 IF NOT Qufd Sel=FNSelkod(Enhet$) 4240 IF INSTR(1,Ufdnamn$,':')=0 Ufdnamn$=FNSelkodenhet$(Dinsel)+Ufdnamn$ 4250 Ufd$=RIGHT$(Ufdnamn$,INSTR(1,Ufdnamn$,':')+1) 4260 D=FNInitaccess(Sel) 4270 RETURN 0 4280 FNEND 4290 ! 4300 ! ## Aktivera alias-Ufd, utg}ende fr}n select-enhet 4310 DEF FNInitselenhet(Skapa,Descr$,Alias$) LOCAL Idx 4320 ON ERROR GOTO 4350 4330 Idx=INSTR(1,Descr$,':') 4340 RETURN FNInitenhet(Skapa,FNSelkodenhet$(VAL(LEFT$(Descr$,Idx-1)))+RIGHT$(Descr$,Idx+1),Alias$) 4350 Ec=ERRCODE : RETURN -1 4360 FNEND 4370 ! 4380 ! # L{ser sektor 4390 DEF FNRw(Sel,Sektor,Skriv) 4400 IF Skriv STOP ! Ej detta program 4410 POKE 64769,Sel 4420 St=FNL{ssekt(Sektor) 4430 IF St RETURN FNNyfel(FNSelkodenhet$(Sel)+NUM$(Sektor),FNDiskfel$(St)) ELSE RETURN 0 4440 FNEND 4450 ! 4460 ! ## Radering enligt urval 4470 DEF FNRadera LOCAL Q 4480 Bearbet$='Rader' 4490 Felrubr$='RADERING ENLIGT URVAL P] '+Lnamn$ 4500 IF Urvant=0 Status$='Inga filer angivna' : RETURN 0 4510 D=FNConfirm('RETURN = starta RADERING av '+NUM$(Urvant)+' filer',CHR$(13,192,193)) 4520 IF Exit<>13 Status$='' : RETURN -1 4530 Status$='Raderingen AVBRUTEN' 4540 D=FNPr25('Raderingen kan avbrytas med PF2') 4550 Q=FNBearblib(2,'',0) 4560 IF FNL{senhet(Lnamn$) Lenhet$='' : RETURN -1 4570 Lenhet$=Enhet$ : Lfilant=Filant 4580 D=FNM{rkurval 4590 IF Q=0 Status$='Radering slutf|rd'+CHR$(7) 4600 RETURN 0 4610 FNEND 4620 ! 4630 ! ## [ndra ett namn 4640 DEF FNRename LOCAL Nynamn$=12,Idx 4650 Felrubr$='[NDRING AV FILNAMN '+Lnamn$ 4660 IF RIGHT$(Lnamn$,LEN(Lnamn$))<>':' Felrubr$=Felrubr$+'/' 4670 Felrubr$=Felrubr$+FNFil$(Mpos) 4680 ; CUR(2,0) Stf$ TAB(Conbredd) 4690 Nynamn$=FNVersal$(FNInmat$(2,0,'Nytt namn: ',12,FNSkip$(FNFil$(Mpos),' '),Avsl$)) 4700 IF INSTR(1,CHR$(192,196,161),CHR$(Exit)) RETURN -1 4710 ON ERROR GOTO 4760 4720 NAME Lenhet$+FNFil$(Mpos) AS Nynamn$ 4730 Idx=INSTR(1,Nynamn$,'.') : IF Idx=0 Nynamn$=Nynamn$+'.' : Idx=LEN(Nynamn$) 4740 MID$(Lib$,FNFilpos(Mpos),12)=FNV{nster$(LEFT$(Nynamn$,Idx-1),8)+FNV{nster$(RIGHT$(Nynamn$,Idx),4) 4750 Status$='Namn {ndrat' : RETURN 0 4760 D=FNNybacfel(Nynamn$,ERRCODE) : RETURN 0 4770 FNEND 4780 ! 4790 ! ## Aktivera Ufd 4800 DEF FNUfd 4810 WHILE Qlufd 4820 POKE PEEK2(24685),PEEK(Dirlibstart),PEEK(Dirlibstart+1),PEEK(Dirsel) 4830 IF INSTR(1,Lnamn$,'UFD:')=1 Lnamn$='UFD:' 4840 Status$='Ufd aktiverat' 4850 RETURN -1 4860 WEND 4870 WHILE NOT Qlufd 4880 POKE PEEK2(24685),0,0,0 4890 Status$='Ufd deaktiverat' 4900 RETURN -1 4910 WEND 4920 FNEND 4930 ! 4940 ! ## Sluta? 4950 DEF FNAvsluta 4960 ; CUR(2,0) TAB(Conbredd); 4970 L{nk$=FNInmat$(2,0,'Nytt program: ',16,L{nk$,Avsl$) 4980 IF INSTR(1,CHR$(192,196,161),CHR$(Exit)) RETURN -1 4990 ; CHR$(12) Stf$ : D=FNL{nk 5000 FNEND 5010 ! 5020 ! # L{gg till fellistan 5030 DEF FNNyfel(Txt1$,Txt2$) 5040 Getque$='' ! Avbryt komplext kommando 5050 Fel$(Felant)=FNV{nster$(Txt1$,25)+FNV{nster$(Txt2$,35) 5060 Felant=Felant+1 5070 IF Felant=(14+(Felrubr$<>'')) Status$='Fellistan full' : RETURN -1 5080 D=FNPr25(Fef$+FNV{nster$(Txt1$,25)+Txt2$) 5090 RETURN 0 5100 FNEND 5110 ! 5120 ! # L{gg till BASIC-fel i fellistan 5130 DEF FNNybacfel(Txt1$,Ec)=FNNyfel(Txt1$,FNFeltext$(Ec)) 5140 ! 5150 ! ## Redovisar fellistan 5160 DEF FNFellista 5170 IF Felant=0 Felrubr$='' : RETURN 0 5180 D=FNPr25(Status$+CHR$(7)) : Status$='' 5190 ; CUR(2,0) TAB(Conbredd); 5200 S$=FNInmat$(2,0,NUM$(Felant)+' fel. Vill du se listan? ',3,'Ja',Avsl$) 5210 S$=CHR$(ASCII(S$) OR 32) 5220 IF INSTR(1,CHR$(192,196,161),CHR$(Exit)) RETURN 0 5230 IF S$<>'j' 5200 5240 ; CUR(7,0) Stf$ SPACE$(Tknant); 5250 ; CUR(8,0) Stf$ FNV{nster$('Position',25) FNV{nster$('Fel',35) 5260 ; CUR(9,0) Stf$ STRING$(60,45) 5270 IF Felrubr$<>'' ; CUR(10,0) Stf$ Felrubr$; 5280 FOR Idx=0 TO Felant-1 5290 ; CUR(10-(Felrubr$<>'')+Idx,0) Stf$ Fel$(Idx); 5300 NEXT Idx 5310 Felant=0 : Felrubr$='' 5320 D=FNConfirm('Tryck RETURN f|r }terg}ng',CHR$(13)) 5330 RETURN 0 5340 FNEND 5350 ! 5360 ! ## Standardfunktioner 5370 ! #OBS# Special 5380 DEF FNL{nk 5390 ; Stf$; 5400 POKE 65403,Orgdevlist,SWAP%(Orgdevlist) ! Gammal enhetslista 5410 POKE 65413,Stopsave,SWAP%(Stopsave) 5420 CLOSE : ON ERROR GOTO 5440 5430 IF L{nk$<>'' CHAIN L{nk$ 5440 END 5450 FNEND 5460 DEF FNInitaccess(Sel) LOCAL Fyssel 5470 Fyssel=Sel 5480 IF Sel=27 Fyssel=PEEK(PEEK2(24697)+2) 5490 IF Sel=30 Fyssel=PEEK(PEEK2(24685)+2) 5500 IF Sel=31 Fyssel=PEEK(PEEK2(24695)+2) 5510 POKE 64769,Fyssel 5520 Drold=0 : Bitmap=14 : Libsize=16 5530 WHILE PEEK(24678)=195 ! ABC832/ABC838/UFDDOS/SUPERDOS 5540 IF PEEK2(PEEK2(24681)+2)<>ASCII('D')+ASCII('R')*256 Cl=4 : RETURN 0 5550 ! UFDDOS/SUPERDOS 5560 Cl=Fyssel AND 28 : IF Cl=0 Cl=PEEK(64994) : IF Cl=0 Cl=16 ! SF_: 5570 Cl=PEEK(64995+Cl) : IF Cl AND 64 Drold=-1 : Cl=Cl-64 5580 Cl=2^Cl : RETURN 0 5590 WEND 5600 Drold=-1 5610 OUT 1,45 : IF INP(1)<>255 GOTO 5680 5620 OUT 1,44 : IF INP(1)<>255 GOTO 5690 5630 POKE 64769,255 : D=CALL(24678,105) 5640 POKE 64787,246 : D=CALL(24678,114) : POKE 64787,245 5650 FOR S=62720 TO 62975 5660 IF PEEK(S)<>PEEK(S+256) 5690 5670 NEXT S 5680 Cl=1 : Bitmap=6 : Libsize=8 : RETURN 0 ! ABC830 5690 Cl=4 : RETURN 0 ! DD88 5700 FNEND 5710 DEF FNSkip$(In$,Tkn$) LOCAL Str$=200,Idx 5720 Str$=In$ 5730 Idx=INSTR(1,Str$,Tkn$) 5740 WHILE Idx 5750 Str$=LEFT$(Str$,Idx-1)+RIGHT$(Str$,Idx+1) 5760 Idx=INSTR(1,Str$,Tkn$) 5770 WEND 5780 RETURN Str$ 5790 FNEND 5800 DEF FNPr25(Text$) LOCAL Cursave,Asave,S$=40 5810 OUT 56,6,57,25 : Cursave=PEEK2(65362) : Asave=INP(53) 5820 S$=SPACE$((PEEK(65364)-LEN(Text$))/2) 5830 POKE 65362,0,24 5840 ; Stf$ S$ Syf$ Text$ Stf$ S$; 5850 POKE 65362,Cursave,SWAP%(Cursave) : OUT 53,Asave 5860 RETURN 0 5870 FNEND 5880 DEF FNConfirm(Text$,Exit$) LOCAL S$=40,Key$=1 5890 S$=SPACE$((PEEK(65364)-LEN(Text$))/2) 5900 IF 0 WHILE INSTR(1,Exit$,Key$)=0 5910 POKE 65362,0,24 5920 ; Stf$ S$ Syf$ Text$ Stf$ S$; : POKE 65362,0,24 : ; Stf$ S$ Syf$ Text$; 5930 Key$=FNGet$ 5940 WEND 5950 Exit=ASCII(Key$) 5960 RETURN 0 5970 FNEND 5980 DEF FNMenyget(Rad,Kol,Txt$,Init$) LOCAL Key$=1,Nr 5990 ; CUR(Rad,Kol) Stf$ SPACE$(160) CUR(Rad,Kol) Stf$ Txt$; 6000 POKE 65363,255 6010 WHILE Nr=0 6020 Key$=FNVersal$(FNGet$) 6030 IF Key$=CHR$(192) 6140 6040 WHILE Key$=CHR$(13) ! Komplext kommando 6050 Getque$='' 6060 ; CUR(Rad,Kol) Stf$ SPACE$(160); 6070 Getque$=FNInmat$(Rad,Kol,'Komplext kommando: ',60,'',Avsl$) 6080 IF Exit<>13 GOTO 5990 6090 Getque$=FNSubs$(FNSubs$(Getque$,'!',CHR$(192)),'<',CHR$(13)) 6100 GOTO 5990 6110 WEND 6120 Nr=INSTR(1,Init$,Key$) 6130 WEND 6140 ; CUR(Rad,Kol) Stf$ SPACE$(LEN(Txt$)); 6150 RETURN Nr 6160 FNEND 6170 DEF FNVersal$(Text$) LOCAL In$=160,Ut$=160,Tkn 6180 In$=Text$ 6190 WHILE In$<>'' 6200 Tkn=ASCII(In$) 6210 IF Tkn>95 AND Tkn<127 Tkn=Tkn-32 6220 Ut$=Ut$+CHR$(Tkn) 6230 In$=RIGHT$(In$,2) 6240 WEND 6250 RETURN Ut$ 6260 FNEND 6270 DEF FNL{svolnamn$ LOCAL Volnamn$=0,Index,Tecken 6280 St=FNL{ssekt(0) 6290 POKE VAROOT(Volnamn$),120,0,135,245,120,0 6300 WHILE Index<120 AND Tecken>31 AND Tecken<128 OR Index=0 6310 Index=Index+1 6320 Tecken=ASCII(RIGHT$(Volnamn$,Index)) 6330 WEND 6340 IF Tecken<>13 RETURN '' 6350 RETURN LEFT$(Volnamn$,Index-1) 6360 FNEND 6370 DEF FNGet$ LOCAL Key,Key$=1 6380 IF SYS(5) Getque$='' 6390 IF Getque$='' GET Key$ ELSE Key$=LEFT$(Getque$,1) : Getque$=RIGHT$(Getque$,2) 6400 Key=ASCII(Key$) 6410 IF ASCII(Key$)=6 D=FNPr25('Free: '+NUM$(SYS(4))) : GOTO 6380 6420 IF ASCII(Key$)=7 D=FNPr25('Filmax: '+NUM$(Filmax)) : GOTO 6380 6430 D=FNPr25('') 6440 RETURN Key$ 6450 FNEND 6460 DEF FNS(S)=-(Drold=0)*S-(Drold=1)*(S/Cl*32 OR S AND (Cl-1)) 6470 DEF FNL{ssekt(S)=CALL(24678,FNS(S))*0+PEEK(64789) 6480 ! 6490 ! ### skapa nya ufd dir:, cop:, tmp: ### ! # 6500 DEF FNUfdini LOCAL Enhadr,Adr,Namn$=0,Adrfre,Size,Ufd$=1000,L{nk,Nr,Ant,L,Dr$=3,Ufdadr,Sel 6510 ! 6520 ! retur om ej ufd-dos eller lux-net 6530 IF INSTR(1,CHR$(0,8),CHR$(PEEK(24688)))=0 RETURN 0 6540 ! 6550 ! s|k ufd-adress 6560 Enhadr=PEEK2(65403) 6570 Adr=VAROOT(Namn$)+2 : POKE Adr-2,6 : POKE Adr+2,6 6580 WHILE -1 6590 IF Enhadr=0 Ec=46 : RETURN -1 6600 POKE Adr,Enhadr+2,SWAP%(Enhadr+2) 6610 IF LEFT$(Namn$,3)<>'UFD' Enhadr=PEEK2(Enhadr) : WEND 6620 ! 6630 ! s|k ledigt utrymme i internminne 6640 DIM Aliasufd$=120 ! # 6650 Adrfre=VARPTR(Aliasufd$) : Size=100 ! # 6660 ! 6670 ! asm till minne 6680 POKE VAROOT(Ufd$),Size,SWAP%(Size),Adrfre,SWAP%(Adrfre) 6690 ! 6700 Ufd$=CHR$(245,213,229,42,247,255,34,253,255,58,249,255,50,255,255) 6710 Ufd$=Ufd$+CHR$(221,110,4,221,102,5,35,35,35,94,35,86,35,126,237) 6720 Ufd$=Ufd$+CHR$(83,247,255,50,249,255,225,209,241,205,251,255,245,229,42) 6730 Ufd$=Ufd$+CHR$(253,255,34,247,255,58,255,255,50,249,255,225,241,201) 6740 ! 6750 ! {ndra abs-adresser 6760 Adr=Adrfre : Ant=0 : L=Adrfre+LEN(Ufd$) 6770 WHILE Adr1*1+2*8+2*64 STOP ! om ovanst}ende loop gjorde fel antal byten 6840 Ufd$=Ufd$+CVT%$(0)+CHR$(0) 6850 ! 6860 L{nk=PEEK2(65403) : Orgdevlist=L{nk ! # 6870 Nr=1 : RESTORE 7040 6880 IF PEEK(24688)=8 Ufdadr=PEEK2(Enhadr+5) ELSE Ufdadr=Adrfre 6890 WHILE Nr<=3 ! # 6900 READ Sel,Dr$ 6910 IF PEEK(24688)<>8 Sel=30 6920 Ufd$=Ufd$+CVT%$(L{nk) : L{nk=Adrfre+LEN(Ufd$)-2 6930 Ufd$=Ufd$+Dr$+CVT%$(Ufdadr)+CHR$(Sel)+STRING$(3,0) 6940 Nr=Nr+1 6950 WEND 6960 Dirlibstart=Adrfre+LEN(Ufd$)-33+8 : Dirsel=Dirlibstart+2 ! # 6970 Coplibstart=Dirlibstart+11 : Copsel=Coplibstart+2 ! # 6980 Tmplibstart=Coplibstart+11 : Tmpsel=Tmplibstart+2 ! # 6990 ! 7000 ! l{nka 7010 POKE 65403,L{nk,SWAP%(L{nk) 7020 ! 7030 RETURN 0 7040 DATA 30,DIR,31,COP,31,TMP 7050 FNEND 7060 ! 7070 ! ### s{tt enhetsnamn till visst ufd som finns eller skapas ### 7080 DEF FNSetufd(Skapa,Namn$,Din$,Vin$) LOCAL Ufdpek$=0,Ufdmem$=3,S|k$=0,Adr,Dr$=4,V{g$=60,Pos,Ufd$=8,Mufd,Sel,Enh$=4,Entry,Typ,Ch$=1 ! # 7090 ON ERROR GOTO 7550 7100 ! 7110 Typ=PEEK(24688) : IF Typ<>0 AND Typ<>8 Ec=200 : RETURN -1 7120 Adr=FNS|kdr(FNV{nster$(FNVersal$(Namn$),3)) : IF Adr=-1 Ec=52 : RETURN -1 ! # 7130 POKE VAROOT(S|k$),11,0,Adr,SWAP%(Adr),11,0 7140 MID$(S|k$,9,3)=CVT%$(0)+CHR$(0) 7150 Sel=PEEK(Adr+7) 7160 IF Sel=27 Enh$='PFD:' : Entry=PEEK2(24697) 7170 IF Sel=30 Enh$='UFD:' : Entry=PEEK2(24685) 7180 IF Sel=31 Enh$='LFD:' : Entry=PEEK2(24695) 7190 IF Entry=0 OR Typ=0 AND Sel<>30 Ec=200 : RETURN -1 7200 ! 7210 POKE VAROOT(Ufdpek$),3,0,Entry,SWAP%(Entry),3 : IF Typ=0 Ufdmem$=Ufdpek$ 7220 V{g$=FNVersal$(Vin$) : Dr$=FNVersal$(Din$) 7230 ! 7240 WHILE Din$<>'' ! # 7250 Mufd=FNS|kdr(LEFT$(Din$,3)) 7260 WHILE Din$<>'UFD:' AND PEEK(Mufd+7)=30 AND Typ=0 7270 Ufdpek$=CVT%$(PEEK2(Mufd+8))+CHR$(PEEK(Mufd+10)) 7280 Dr$=Enh$ 7290 IF 0 WEND 7300 IF 0 WEND ! # 7310 ! 7320 Dinsel=-1 ! # 7330 WHILE V{g$<>'' 7340 Pos=INSTR(1,V{g$+'/','/') 7350 Ufd$=LEFT$(V{g$,Pos-1) : IF LEN(Ufd$)>8 Ec=21 : Ufdpek$=Ufdmem$ : RETURN -1 ! # 7360 Ch$=CHR$(ASCII(Ufd$)) : IF Ch$<'A' OR ']'21 OR NOT Skapa Ufdpek$=Ufdmem$ : RETURN -1 7430 Ec=0 7440 D=FNPr25('Nu skapas '+Din$+'/'+Ufd$) ! # 7450 IF FNPreufd(Sel,Dr$,Ufd$) Ufdpek$=Ufdmem$ : RETURN -1 7460 D=FNPr25('') ! # 7470 IF 0 WEND 7480 IF Dinsel=-1 Dinsel=PEEK(64769) ! # 7490 Dr$=Enh$ 7500 WEND 7510 ! 7520 MID$(S|k$,9,3)=Ufdpek$ 7530 Ufdpek$=Ufdmem$ 7540 RETURN 0 7550 ! 7560 ! error 7570 Ufdpek$=Ufdmem$ 7580 Ec=ERRCODE : RETURN -1 7590 FNEND 7600 ! 7610 ! ### s|k adr i enh-lista ### 7620 DEF FNS|kdr(Dr$) LOCAL S|k,S|k$=0,Adr 7630 S|k=VAROOT(S|k$)+2 : POKE S|k-2,11,0,0,0,11,0 7640 Adr=PEEK2(65403) 7650 WHILE Adr 7660 POKE S|k,Adr,SWAP%(Adr) 7670 IF MID$(S|k$,3,3)<>LEFT$(Dr$,3) Adr=PEEK2(Adr) : WEND : RETURN -1 7680 RETURN Adr 7690 FNEND 7700 DEF FNPar$(Ufd,Dr$,Fil$) LOCAL Par$=19,Fil,Adr,Entry,Sel 7710 IF Ufd=27 Entry=PEEK2(24697) 7720 IF Ufd=30 Entry=PEEK2(24685) 7730 IF Ufd=31 Entry=PEEK2(24695) 7740 Sel=FNSelkod(Dr$) : IF Sel=-1 RETURN '' 7750 Adr=64832 : Fil=16 7760 WHILE Fil<=112 7770 IF PEEK(Adr+Fil+1)<>255 Fil=Fil+16 : WEND : Ec=19 : RETURN '' 7780 Par$=LEFT$(Fil$+SPACE$(8),8)+'Ufd'+CHR$(Sel,Fil) 7790 Par$=Par$+CVT%$(Entry)+CVT%$(Adr+Fil)+CHR$(Ufd,245+Fil/16) 7800 RETURN Par$ 7810 FNEND 7820 DEF FNOpnufd(Ufd,Dr$,Fil$) LOCAL Opn$=200,Par$=19,Old 7830 Old=-1 7840 ON ERROR GOTO 8040 7850 Opn$=CHR$(213,221,225,221,78,11,221,70,12,205,24,96,62,21,56) 7860 Opn$=Opn$+CHR$(67,17,0,0,205,45,96,62,35,56,49,205,51,96,79) 7870 Opn$=Opn$+CHR$(205,51,96,221,110,13,221,102,14,229,197,71,177,40,41) 7880 Opn$=Opn$+CHR$(221,126,11,42,119,96,254,31,40,10,42,121,96,254,27) 7890 Opn$=Opn$+CHR$(40,3,42,109,96,94,35,86,235,237,66,40,13,62,48) 7900 Opn$=Opn$+CHR$(245,221,70,12,205,33,96,241,195,18,0,193,58,112,96) 7910 Opn$=Opn$+CHR$(238,8,32,56,221,126,11,254,27,56,9,221,110,13,221) 7920 Opn$=Opn$+CHR$(102,14,35,35,126,230,2,32,36,33,193,253,54,14,35) 7930 Opn$=Opn$+CHR$(54,8,35,119,35,112,35,221,78,17,113,35,119,61,50) 7940 Opn$=Opn$+CHR$(30,253,197,205,39,96,193,58,194,253,183,62,128,32,181) 7950 Opn$=Opn$+CHR$(221,110,15,221,102,16,35,126,230,31,254,27,48,5,209) 7960 Opn$=Opn$+CHR$(213,19,19,18,17,7,0,25,94,35,86,19,123,178,19) 7970 Opn$=Opn$+CHR$(32,6,35,35,35,94,35,86,225,115,35,114,205,33,96) 7980 Opn$=Opn$+CHR$(201) 7990 Par$=FNPar$(Ufd,Dr$,Fil$) : IF Par$='' RETURN -1 8000 Old=PEEK2(64819) : POKE 64819,18,0 8010 Dummy=CALL(VARPTR(Opn$),VARPTR(Par$)) 8020 POKE 64819,Old,SWAP%(Old) 8030 RETURN 0 8040 IF Old<>-1 POKE 64819,Old,SWAP%(Old) 8050 Ec=ERRCODE : RETURN -1 8060 FNEND 8070 DEF FNPreufd(Ufd,Dr$,Fil$) LOCAL Pre$=300,Par$=19,Old 8080 Old=-1 8090 ON ERROR GOTO 8340 8100 Pre$=CHR$(213,221,225,221,78,11,221,70,12,205,21,96,221,110,15) 8110 Pre$=Pre$+CHR$(221,102,16,229,35,126,203,111,62,39,40,95,17,0,0) 8120 Pre$=Pre$+CHR$(126,230,31,254,27,245,56,20,42,119,96,254,31,40,10) 8130 Pre$=Pre$+CHR$(42,121,96,254,27,40,3,42,109,96,94,35,86,123,205) 8140 Pre$=Pre$+CHR$(57,96,122,205,57,96,225,227,126,205,57,96,14,250,197) 8150 Pre$=Pre$+CHR$(175,205,57,96,193,13,32,247,205,48,96,62,36,56,24) 8160 Pre$=Pre$+CHR$(213,14,16,197,213,205,48,96,225,193,35,167,237,82,40) 8170 Pre$=Pre$+CHR$(19,17,255,255,205,36,96,62,41,245,221,70,12,205,33) 8180 Pre$=Pre$+CHR$(96,241,195,18,0,13,32,221,175,111,221,102,18,61,119) 8190 Pre$=Pre$+CHR$(44,32,252,209,19,213,14,16,197,42,107,96,58,1,253) 8200 Pre$=Pre$+CHR$(230,28,32,1,134,133,111,48,1,36,35,78,203,182,205) 8210 Pre$=Pre$+CHR$(18,96,113,193,62,36,56,197,19,13,32,222,205,33,96) 8220 Pre$=Pre$+CHR$(58,112,96,238,8,32,74,221,126,11,254,27,56,9,221) 8230 Pre$=Pre$+CHR$(110,13,221,102,14,35,35,126,230,2,32,54,221,229,209) 8240 Pre$=Pre$+CHR$(221,78,11,205,24,96,62,21,56,150,175,33,193,253,54) 8250 Pre$=Pre$+CHR$(14,35,54,8,35,119,35,112,35,221,78,17,113,35,119) 8260 Pre$=Pre$+CHR$(61,50,30,253,197,205,39,96,193,58,194,253,183,62,128) 8270 Pre$=Pre$+CHR$(55,32,216,205,33,96,209,221,110,13,221,102,14,115,35) 8280 Pre$=Pre$+CHR$(114,241,208,35,119,201) 8290 Par$=FNPar$(Ufd,Dr$,Fil$) : IF Par$='' RETURN -1 8300 Old=PEEK2(64819) : POKE 64819,18,0 8310 Dummy=CALL(VARPTR(Pre$),VARPTR(Par$)) 8320 POKE 64819,Old,SWAP%(Old) 8330 RETURN 0 8340 IF Old<>-1 POKE 64819,Old,SWAP%(Old) 8350 Ec=ERRCODE : RETURN -1 8360 FNEND 8370 DEF FNSelkod(In$) LOCAL Dr$=3,S|k,S|k$=0,Adr 8380 Dr$=LEFT$(In$+SPACE$(3),3) 8390 S|k=VAROOT(S|k$)+2 : POKE S|k-2,3,0,0,0,3 8400 Adr=PEEK2(65403) 8410 WHILE Adr 8420 POKE S|k,Adr+2,SWAP%(Adr+2) 8430 IF Dr$=S|k$ RETURN PEEK(Adr+7) 8440 Adr=PEEK2(Adr) 8450 WEND 8460 Ec=21 : RETURN -1 8470 FNEND 8480 DEF FNInmat$(Rad,Kol,Led$,Max,Default$,Avsl$) LOCAL Inmat$=160,Key$=1,Key,Ipos,Editing ! # 8490 ! # 8500 ! # 8510 ! # 8520 Inmat$=FNV{nster$(Default$,Max) 8530 WHILE 1 8540 ; CUR(Rad,Kol) Stf$ Led$ Maf$ Inmat$ Stf$; : D=FNPutattr 8550 ; CUR(Rad,Kol) Stf$ Led$ Maf$ LEFT$(Inmat$,Ipos); 8560 Key$=FNGet$ : Key=ASCII(Key$) 8570 WHILE INSTR(1,Avsl$,Key$) 8580 Exit=Key : GOTO 9070 8590 WEND 8600 WHILE Max>0 8610 WHILE Key>=32 AND Key<=126 8620 IF NOT Editing Inmat$=SPACE$(Max) 8630 Ipos=Ipos+1 8640 MID$(Inmat$,Ipos,Max-Ipos+1)=Key$+MID$(Inmat$,Ipos,Max-Ipos) 8650 IF Ipos=Max Ipos=Max-1 8660 GOTO 9040 8670 WEND 8680 WHILE INSTR(1,CHR$(8,172,173,175),Key$) 8690 IF Ipos=0 IF INSTR(1,Avsl$,CHR$(18))>0 Exit=18 : GOTO 9070 ELSE 9040 8700 Ipos=Ipos-1 8710 GOTO 9040 8720 WEND 8730 WHILE INSTR(1,CHR$(9,164,165,167),Key$) 8740 IF Ipos0 Exit=18 : GOTO 9070 ELSE 9040 8790 Ipos=0 8800 GOTO 9040 8810 WEND 8820 WHILE INSTR(1,CHR$(5,180,181,183),Key$) 8830 Ipos=Max 8840 WHILE Ipos>1 AND MID$(Inmat$,Ipos,1)=' ' : Ipos=Ipos-1 : WEND 8850 IF Ipos=1 AND LEFT$(Inmat$,1)=' ' Ipos=0 8860 IF Ipos=Max Ipos=Max-1 8870 GOTO 9040 8880 WEND 8890 WHILE INSTR(1,CHR$(1,127),Key$) 8900 WHILE RIGHT$(Inmat$,Ipos+1)<>SPACE$(LEN(Inmat$)-Ipos) 8910 MID$(Inmat$,Ipos+1,Max-Ipos)=MID$(Inmat$,Ipos+2,Max-Ipos-1)+' ' 8920 GOTO 9040 8930 WEND 8940 WHILE 1 ! Mitt i 8950 IF Ipos>0 MID$(Inmat$,Ipos,1)=' ' : Ipos=Ipos-1 8960 GOTO 9040 8970 WEND 8980 WEND 8990 IF Key=24 Inmat$=SPACE$(Max) : Ipos=0 : GOTO 9040 9000 IF Key=4 Inmat$=FNV{nster$(Default$,Max) : Ipos=0 : GOTO 9040 9010 ; CHR$(7); : GOTO 9040 ! Ok{nd tangent 9020 WEND 9030 ! 9040 Editing=-1 9050 WEND 9060 ! 9070 ; CUR(Rad,Kol) Stf$ Led$ Inf$ Inmat$; 9080 RETURN FNSkip$(Inmat$,' ') ! ## 9090 FNEND 9100 DEF FNPutattr LOCAL Attr,Adr,Byte 9110 Attr=INP(53) 9120 Adr=30720+80*PEEK(65363)+PEEK(65362) : Byte=PEEK(Adr) 9130 IF INP(53)=0 OUT 53,Attr : POKE Adr,Byte 9140 RETURN 0 9150 FNEND 9160 DEF FNSelkodenhet$(Sel)=MID$('DR0DR1DR2DR3HD0HD1HD2HD3MF0MF1MF2MF3MO0MO1MO2MO3SF0SF1SF2SF3 PFD RAMUFDLFD',1+3*Sel,3)+':' 9170 DEF FNSubs$(In$,Fr}n$,Till$) LOCAL Ut$=200,Idx 9180 Ut$=In$ 9190 Idx=INSTR(1,Ut$,Fr}n$) 9200 WHILE Idx 9210 MID$(Ut$,Idx,LEN(Fr}n$))=Till$ 9220 Idx=INSTR(1,Ut$,Fr}n$) 9230 WEND 9240 RETURN Ut$ 9250 FNEND 9260 DEF FNFeltext$(Felnr) LOCAL Byte$=1,Byte,Offs,Fel,Fel$=80,Sekt,Maxfel,Store 9270 ON ERROR GOTO 9500 9280 OPEN 'BASICINI.SYS' AS FILE 99 9290 POSIT #99,3 : Sekt=1 9300 Offs=128 9310 GET #99 Byte$ : Maxfel=ASCII(Byte$) 9320 WHILE Maxfel<=Felnr 9330 IF Maxfel>=128 Offs=0 9340 Sekt=Sekt+1 9350 GET #99 Byte$ : Maxfel=ASCII(Byte$) 9360 WEND 9370 POSIT #99,Sekt*253 9380 GET #99 Byte$ : Byte=ASCII(Byte$) 9390 WHILE Byte>=128 AND Fel