1000 REM Modifierad f|r UFDDOS 830, 832 och 838 drive
1005 REM 1991-08-18 <5074> J Westman
1010 REM . SAVE MENYM3
1015 REM DA 851109
1020 REM
1025 REM
1030 REM
1035 REM
1040 REM
1045 REM
1050 REM
1055 REM
1060 W%=PEEK(590%) : REM 40/80 TKN
1065 W1%=W%/20% : REM 2/4 KOLUMNER
1070 W2%=W%/2%-15%
1075 F9%=150%
1080 REM FILNAMN ,STORLEK,VALD ,SKYDD ,DRIVE ,UFDLIB
1085 DIM F$(F9%)=16%,X%(F9%),V%(F9%),S%(F9%),D%(F9%),U%(F9%)
1090 DIM D0%(1%),D1%(1%),D2%(1%)
1095 DIM A%(16%)
1100 A9%=8%
1105 DIM A$(A9%)=253%
1110 REM
1115 F%=-1% : FOR D%=0% TO 1% : D2%(D%)=0% : NEXT D%
1120 Z%=PEEK(24683%)+SWAP%(PEEK(24684%))
1125 E%(0%)=PEEK(Z%) : E%(1%)=-1%
1130 RESTORE 2270
1135 IF Z%=31% E%(0%)=-1% : GOTO 1150
1140 READ Z%,D$(0%)
1145 IF Z%<>E%(0%) 1135
1150 REM VALMENY
1155 GOSUB 1390 : REM SCREEN
1160 GOSUB 1985 : REM LIB
1165 F3%=0%
1170 REM
1175 IF F3%>F% F3%=F%
1180 IF F3%<0% F3%=0%
1185 GOSUB 1285 : GOSUB 1460
1190 F1%=F3% : GOSUB 1310 : GOSUB 1745 : GOSUB 1310
1195 IF INSTR(1%,'BAYIOS\M',X$) GOSUB 1810 : GOTO 1170
1200 IF X%=24% GOSUB 1260 : GOTO 1170
1205 IF X%=32% IF V%(F3%) X%=13% ELSE X%=9%
1210 IF X%=8% OR X%=23% F3%=F3%-1% : IF F3%<0% F3%=F%
1215 IF X%=9% OR X%=26% F3%=F3%+1% : IF F3%>F% F3%=0%
1220 IF X%=1% IF F3%>=22% F3%=F3%-22%
1225 DIM D$(2%)=3%
1230 IF X%=19% IF F3%=F0%+W1%*22% F3%=F3%+22% : IF F3%>F% F3%=F%
1235 IF X%=18% GOSUB 1390
1240 IF X%<>13% OR F3%>F% GOTO 1170
1245 V%(F3%)= NOT V%(F3%)
1250 IF V%(F3%) ; '>'; ELSE ; ' ';
1255 X%=9% : GOTO 1215
1260 REM
1265 FOR F1%=0% TO F%
1270 IF V%(F1%) V%(F1%)=0% : GOSUB 1335
1275 NEXT F1%
1280 RETURN
1285 REM
1290 IF F3%>=F0% AND F3%=F0%+22%*W1% F0%=F0%+22% : GOTO 1300
1305 RETURN
1310 REM SET CURPOS FOR F1%
1315 R%=F1%+1%-F0% : L%=0%
1320 IF R%>22% R%=R%-22% : L%=L%+20% : GOTO 1320
1325 IF L%<0% OR L%>=W% R%=0% : RETURN
1330 ; CUR(R%,L%); : RETURN
1335 REM PLACERA FIL F1%
1340 GOSUB 1310 : IF R%=0% RETURN
1345 IF F1%>F% ; SPACE$(20%); : RETURN
1350 IF V%(F1%) ; '>'; ELSE ; ' ';
1355 ; F$(F1%);
1360 IF X%(F1%)>=0% F$=NUM$(X%(F1%)) : ; RIGHT$(SPACE$(4%-LEN(F$))+F$,2%); : GOTO 1385
1365 X%=S%(F1%) AND 3% : IF X%=0% ; ' '; : RETURN
1370 IF X%=1% ; ' S';
1375 IF X%=2% ; ' R ';
1380 IF X%=3% ; ' RS';
1385 RETURN
1390 REM SCREEN
1395 ; CHR$(12%);STRING$(W%,61%);CUR(0%,W2%+9%)' Meny=M '
1400 GOSUB 1405 : E2%=F% : GOTO 1460
1405 REM RAM
1410 ; CUR(23%,6%)SPACE$(27%); : E%=0%
1415 FOR D%=0% TO 1%
1420 ; CUR(23%,6%+D%*15%)D$(D%)':';
1425 IF D2%(D%)>0% IF D1%(D%)>=0% ; D1%(D%);
1430 IF D2%(D%)>0% ; '/'RIGHT$(NUM$(D0%(D%)),2%);
1435 IF D2%(D%)<0% ; 'Error';
1440 NEXT D%
1445 IF F%>=F0%+22%*W1% ; CUR(23%,W%-5%)'Mer>';
1450 IF F0%>0% ; CUR(23%,0%)'2%)
1480 ; CUR(23%,W%-6%)SPACE$(5%);
1485 IF F0%>0% ; CUR(23%,0%)'';
1505 GOSUB 1335
1510 NEXT F1%
1515 E2%=0% : RETURN
1520 REM F\NSTER
1525 FOR X%=5% TO 18% STEP 13%
1530 ; CUR(X%,W2%-2%)'+'STRING$(30%,45%)'+'
1535 NEXT X%
1540 FOR X%=6% TO 17%
1545 ; CUR(X%,W2%-2%)'!'SPACE$(30%)'!'
1550 NEXT X%
1555 FOR X%=6% TO 17%
1560 READ F$ : IF F$='-' GOTO 1575
1565 ; CUR(X%,W2%); : IF X%=6% ; ' 'F$ : X%=7% ELSE ; F$
1570 NEXT X%
1575 E2%=-2% : RETURN
1580 REM PACKA
1585 F1%=0% : F2%=0%
1590 IF F1%>F% F%=F2%-1% : RETURN
1595 IF V%(F1%)=2% F1%=F1%+1% : E2%=-3% : GOTO 1590
1600 GOSUB 1655 : F1%=F1%+1% : F2%=F2%+1% : GOTO 1590
1605 REM R[KNA VALDA
1610 T%=0% : FOR F1%=0% TO F%
1615 IF V%(F1%) T%=T%+1% : T$=F$(F1%)
1620 NEXT F1% : RETURN
1625 REM ERROR X$
1630 ; CUR(23%,6%)X$;CHR$(7%);TAB(35%); : E%=1% : X$='' : RETURN
1635 REM
1640 GOSUB 1605 : IF T%=0% X$='Inga filer valda' : GOTO 1625
1645 IF T%>X% X$='F|r m}nga filer valda' : GOTO 1625
1650 RETURN
1655 REM BYT POST F1%<->F2%
1660 IF F1%=F2% RETURN
1665 F$=F$(F2%) : F$(F2%)=F$(F1%) : F$(F1%)=F$
1670 X%=X%(F2%) : X%(F2%)=X%(F1%) : X%(F1%)=X%
1675 X%=S%(F2%) : S%(F2%)=S%(F1%) : S%(F1%)=X%
1680 X%=V%(F2%) : V%(F2%)=V%(F1%) : V%(F1%)=X%
1685 X%=D%(F2%) : D%(F2%)=D%(F1%) : D%(F1%)=X%
1690 X%=U%(F2%) : U%(F2%)=U%(F1%) : U%(F1%)=X%
1695 F3%=0% : RETURN
1700 REM TA BORT MELLANSLAG F$(F1%) -> F$
1705 F$=''
1710 FOR X%=1% TO LEN(F$(F1%))
1715 IF MID$(F$(F1%),X%,1%)<>' ' THEN F$=F$+MID$(F$(F1%),X%,1%)
1720 NEXT X% : RETURN
1725 REM F\RSTORA X$
1730 FOR I%=1% TO LEN(X$) : J%=ASC(RIGHT$(X$,I%)) : IF J%>94% J%=J%-32%
1735 X$=X$+CHR$(J%) : NEXT I%
1740 X$=RIGHT$(X$,I%) : RETURN
1745 REM GET X$
1750 GET X$ : GOSUB 1725 : X%=ASC(X$) : IF E% GOSUB 1405
1755 RETURN
1760 REM MENY
1765 GOSUB 1520
1770 M%=M1% : IF E%=0% M%=1% : IF X$<>'' GOTO 1780
1775 ; CUR(7%+M%,W2%-1%); : GOSUB 1745 : IF X$=CHR$(24%) OR X$=' ' X$='E'
1780 M1%=INSTR(1%,M$,X$) : IF M1% M%=M1% : GOTO 1800
1785 IF X%=8% M%=M%-1% : IF M%<1% M%=LEN(M$)
1790 IF X%=9% M%=M%+1% : IF M%>LEN(M$) M%=1%
1795 IF X%<>13% GOTO 1775
1800 ; CUR(7%+M%,W2%-1%)'>'; : X$='' : M1%=M%
1805 RETURN
1810 REM KOMMANDO MENY
1815 RESTORE 1810 : M$='BAIO\E' : GOSUB 1760
1820 DATA 'KOMMANDO MENY
1825 DATA 'B LIB
1830 DATA 'A Avsluta
1835 DATA 'I Visa inte filer
1840 DATA 'O Sortera
1845 DATA '\ \vriga kommandon
1850 DATA 'E Avbryt
1855 DATA -
1860 ON M% GOSUB 1985,1945,1960,2695,1875,1870
1865 IF E% GOTO 1810
1870 RETURN
1875 REM \VRIGA
1880 RESTORE 1875 : M$='KV[JRLEM' : GOSUB 1760 : IF M%=8% E%=1% : RETURN
1885 DATA '\VRIGA KOMMANDON
1890 DATA 'K Kopiera filer
1895 DATA 'V Visa filens inneh}ll
1900 DATA '[ [ndra filnamn
1905 DATA 'J J{mf|r 2 filer
1910 DATA 'R Radera filer
1915 DATA 'L Ladda och k|r fil
1920 DATA 'E Avbryt
1925 DATA -
1930 ON M% GOSUB 2780,3185,3080,3185,2975,2660,1940
1935 IF E% GOTO 1875
1940 RETURN
1945 REM AVSLUTA
1950 GOSUB 1460 : ; CUR(22%,0%);
1955 END
1960 REM VISA INTE
1965 X%=F% : GOSUB 1635 : IF E% RETURN
1970 FOR F1%=0% TO F% : IF V%(F1%) V%(F1%)=2%
1975 NEXT F1%
1980 GOTO 1580
1985 REM LIB
1990 RESTORE 1985 : M$='B01SVE' : GOSUB 1760 : IF M%=6% RETURN
1995 IF M%=5% GOSUB 2060 : GOTO 1990
2000 DATA 'LIB, FILBIBLOTEK
2005 DATA 'B B}da drivarna
2010 DATA '0 Bara drive 0
2015 DATA '1 Bara drive 1
2020 DATA 'S B}da med filstorlekar
2025 DATA 'V V{lj enhet, drive, UFD
2030 DATA 'E Avbryt
2035 DATA -
2040 D1%=0% : D2%=1% : IF M%=2% D2%=0% ELSE IF M%=3% D1%=1%
2045 B%=(M%=4%)
2050 FOR D%=D1% TO D2% : GOSUB 2315 : NEXT D%
2055 IF E% RETURN ELSE GOTO 1405
2060 REM DRIVE TYP
2065 RESTORE 2070 : M$='01UDE' : GOSUB 1760 : IF M%=5% RETURN
2070 DATA 'V{lj enhet f|r drive, UFD
2075 DATA '0 Drive 0
2080 DATA '1 Drive 1
2085 DATA 'U Aktivera vald UFD
2090 DATA 'D Deaktivera UFD
2095 DATA 'E Avbryt
2100 DATA -
2105 U%=PEEK(24685%)+SWAP%(PEEK(24686%))
2110 IF M%<>3% 2150
2115 REM AKTIVERA UFD
2120 FOR I%=0% TO F9%
2125 IF INSTR(1%,F$(I%),'.Ufd')=0% OR V%(I%)=0% 2140
2130 V%(I%)=0%
2135 POKE U%,U%(I%),SWAP%(U%(I%)),E%(D%(I%)) : GOTO 2060
2140 NEXT I%
2145 X$='Ingen UFD vald' : GOTO 1625
2150 REM DEAKTIVERA UFD
2155 IF M%<>4% 2175
2160 IF E%(0%)=31% E%(0%)=-1%
2165 IF E%(1%)=31% E%(1%)=-1%
2170 POKE U%,0%,0%,0% : GOTO 2060
2175 D%=M%-1%
2180 REM ENHET
2185 RESTORE 2190 : M$='01234567UE' : GOSUB 1760 : IF M%=10% RETURN
2190 DATA 'V{lj enhet
2195 DATA '0 MF0:
2200 DATA '1 MF1:
2205 DATA '2 MF2:
2210 DATA '3 MO0:
2215 DATA '4 MO1:
2220 DATA '5 SF0:
2225 DATA '6 SF1:
2230 DATA '7 SF2:
2235 DATA 'U UFD:
2240 DATA 'E Avbryt
2245 DATA -
2250 ON M% RESTORE 2270,2275,2280,2285,2290,2295,2300,2305,2310
2255 READ E%(D%) : READ D$(D%)
2260 GOSUB 1410
2265 RETURN
2270 DATA 8,'MF0
2275 DATA 9,'MF1
2280 DATA 10,'MF2
2285 DATA 12,'MO0
2290 DATA 13,'MO1
2295 DATA 16,'SF0
2300 DATA 17,'SF1
2305 DATA 18,'SF2
2310 DATA 31,'UFD
2315 REM LIB D%
2320 U%=0%
2325 FOR F1%=0% TO F% : IF D%(F1%)=D% V%(F1%)=2%
2330 NEXT F1% : GOSUB 1580 : GOSUB 1460
2335 Z%=E%(D%)
2340 IF E%(D%)<>31% THEN 2375
2345 U%=PEEK(24685%)+SWAP%(PEEK(24686%))
2350 Z1%=PEEK(U%)+SWAP%(PEEK(U%+1%))
2355 IF Z1%<>0% THEN 2365
2360 X$='Ingen UFD aktiv' : GOTO 1625
2365 Z%=PEEK(U%+2%)
2370 U%=Z1%
2375 POKE 64769%,Z%
2380 D0%(D%)=0% : D2%(D%)=-1%
2385 REM L[S TOM BITMAP
2390 IF Z%=12% OR Z%=13% THEN Z1%=7% ELSE Z1%=15%
2395 Z%=CALL(24678%,Z1%)
2400 IF PEEK(64789%) AND 128% THEN D2%(D%)=0% : RETURN
2405 IF PEEK(64789%) THEN 2635
2410 FOR I%=-2816% TO I%+160%
2415 IF PEEK(I%)=0% D0%(D%)=D0%(D%)+8%
2420 NEXT I%
2425 REM L[S BITMAP
2430 Z1%=Z1%-1%
2435 Z%=CALL(24678%,Z1%)
2440 IF PEEK(64789%) THEN 2635
2445 FOR I%=0% TO 15% : A%(I%)=PEEK(62959%+I%) : NEXT I%
2450 D1%(D%)=0%
2455 FOR I%=62720% TO I%+160%
2460 IF PEEK(I%)=255% GOTO 2470 ELSE IF PEEK(I%)=0% D1%(D%)=D1%(D%)+8% : GOTO 2470
2465 FOR J%=0% TO 7% : D1%(D%)=D1%(D%)-((PEEK(I%) AND 2%^J%)=0%) : NEXT J%
2470 NEXT I%
2475 Z1%=16%
2480 IF U%=0% THEN 2505
2485 Z%=CALL(24678%,U%-1%)
2490 IF PEEK(64789%) THEN 2635
2495 FOR I%=0% TO 15% : A%(I%)=PEEK(62959%+I%) : NEXT I%
2500 Z1%=U%
2505 FOR I%=0% TO 15%
2510 IF A%(I%)=0% THEN 2625
2515 REM L[S BIBLOTEK
2520 Z%=CALL(24678%,Z1%+I%)
2525 IF PEEK(64789%) THEN 2635
2530 FOR J%=62720% TO J%+240% STEP 16%
2535 IF PEEK(J%)=0% OR PEEK(J%)=255% THEN 2620
2540 IF F%>F9% F%=F9% : X$='F|r m}nga filer' : GOTO 1625
2545 REM FILNAMN
2550 F$=D$(D%)+':'
2555 FOR K%=4% TO 14% : IF K%=12% THEN F$=F$+'.'
2560 F$=F$+CHR$(PEEK(J%+K%)) : NEXT K%
2565 REM UFD
2570 U%=(SWAP%(PEEK(J%))+PEEK(J%+1%))/8%
2575 IF E%(D%)=12% OR E%(D%)=13% THEN U%=U%/4%
2580 U%=U%+2%
2585 REM STORLEK
2590 IF B%=0% X%=-1% : GOTO 2600
2595 X%=SWAP%(PEEK(J%+3%))+PEEK(J%+2%)
2600 REM
2605 F%=F%+1%
2610 X%(F%)=X% : F$(F%)=F$ : S%(F%)=PEEK(J%+1%) : D%(F%)=D% : U%(F%)=U% : V%(F%)=0%
2615 F1%=F% : GOSUB 1335 : S%=0%
2620 NEXT J%
2625 NEXT I% : D2%(D%)=1%
2630 RETURN
2635 REM
2640 X%=PEEK(64789%)
2645 IF X%=16% X$='Disk i '+D$(D%)+' nog ej formaterad' : GOTO 1625
2650 IF X%=128% X$='Lucka till drive'+NUM$(D%)+' {r |ppen' : GOTO 1625
2655 X$='Diskfel i drive'+NUM$(D%) : GOTO 1625
2660 REM LADDA & K\R
2665 X%=1% : GOSUB 1635 : IF E% RETURN
2670 FOR F1%=0% TO F% : IF V%(F1%)=0% NEXT F1%
2675 GOSUB 1700
2680 ONERRORGOTO 2690 : ; CUR(23%,0%);
2685 CHAIN F$(F1%) : END
2690 X$='ERR'+NUM$(ERRCODE)+' file '+F$ : GOTO 1625
2695 REM SORTERA
2700 IF F%<2% X$='Meningsl|st' : GOTO 1625
2705 RESTORE 2695 : M$='DFTE' : GOSUB 1760 : IF M%=4% RETURN
2710 DATA 'SORTERA LISTAN
2715 DATA 'D Efter drive och filnamn
2720 DATA 'F Efter filnamn
2725 DATA 'T Efter filtyp
2730 DATA 'E Avbryt
2735 DATA -
2740 GOSUB 1460 : I%=1% : IF M%=2% I%=5% ELSE IF M%=3% I%=14%
2745 IF I%=S% RETURN
2750 FOR F1%=0% TO F%-1%
2755 FOR F2%=F1%+1% TO F%
2760 IF RIGHT$(F$(F1%),I%)>RIGHT$(F$(F2%),I%) GOSUB 1655
2765 NEXT F2% : GOSUB 1335
2770 NEXT F1% : S%=I% : GOSUB 1335
2775 RETURN
2780 REM KOPIERA
2785 X%=F%+1% : GOSUB 1635 : IF E% RETURN
2790 RESTORE 2780 : GOSUB 1520
2795 DATA 'KOPIERA FILER
2800 DATA 'Till enhet (MFx,MOx,SFx,UFD)
2805 DATA -
2810 ; CUR(9%,W2%); : INPUT X$ : GOSUB 1725 : IF X$='E' OR X$='' RETURN
2815 E$=X$ : IF INSTR(1%,E$,':')=0% E$=E$+':'
2820 IF INSTR(1%,E$,'MFMOSFUFDmfmosfufd')=0% X$='Fel enhet' : GOTO 1625
2825 ; CUR(23%,6%)'Kopiera till 'X$;TAB(33%); : E%=1% : GOSUB 1460
2830 FOR F1%=0% TO F%
2835 IF V%(F1%) GOSUB 2850
2840 NEXT F1%
2845 RETURN
2850 REM KOPIERA FIL
2855 GOSUB 1310 : GOSUB 1700
2860 ONERRORGOTO 2960 : E%=0% : M$=F$
2865 OPEN F$ ASFILE 1%
2870 M$=E$+RIGHT$(F$,5%)
2875 PREPARE M$ ASFILE 2%
2880 K%=0%
2885 ONERRORGOTO 2910 : M$=F$
2890 FOR I%=0% TO A9%
2895 Z%=CALL(28666%,1%)+CALL(28668%,K%+I%) : A$(I%)=Q0$
2900 IF R% ; CUR(R%,L%+1%)K%+I%+1%' block'
2905 NEXT I% : GOTO 2915
2910 E%=ERRCODE : IF ERRCODE<>38% GOTO 2960
2915 ONERRORGOTO 2960 : M$=E$+RIGHT$(F$,5%)
2920 FOR J%=0% TO I%-1%
2925 Z%=CALL(28666%,2%) : Q0$=A$(J%) : Z%=CALL(28670%,K%+J%)
2930 IF R% ; CUR(R%,L%+1%)K%+J%+1%' block'
2935 NEXT J%
2940 K%=K%+J%
2945 IF E%=0% GOTO 2885
2950 CLOSE 2% : CLOSE 1%
2955 IF E%=38% E%=0% : RETURN
2960 X$='ERR'+NUM$(ERRCODE)+' file '+M$ : GOSUB 1625 : CLOSE 2% : CLOSE 1%
2965 ; CUR(R%,L%+1%);' Error '
2970 RETURN
2975 REM D\DA
2980 X%=F%+1% : GOSUB 1635 : IF E% RETURN
2985 RESTORE 2975 : M$='NJE' : GOSUB 1760 : IF M%=1% OR M%=3% RETURN
2990 DATA 'SKA DESSA FILER RADERAS?
2995 DATA 'N Nej
3000 DATA 'J Ja
3005 DATA -
3010 FOR F1%=0% TO F%
3015 IF V%(F1%) GOSUB 3030
3020 NEXT F1%
3025 GOSUB 1580 : RETURN
3030 REM
3035 GOSUB 1700 : GOSUB 1310
3040 ONERRORGOTO 3065
3045 KILL F$
3050 ; CUR(R%,L%+1%);' Raderad '
3055 V%(F1%)=2% : D1%(D%(F1%))=-1%
3060 RETURN
3065 REM
3070 ; CUR(R%,L%+1%);' Error '
3075 X$='ERR'+NUM$(ERRCODE)+' file '+F$ : GOTO 1625
3080 REM RENAME
3085 X%=1% : GOSUB 1635 : IF E% RETURN
3090 RESTORE 3080 : GOSUB 1520
3095 DATA '[NDRA FILNAMN TILL VAD?
3100 DATA 'Ange nytt filnamn (ej drive)
3105 DATA -
3110 FOR F1%=0% TO F% : IF V%(F1%)=0% NEXT F1%
3115 F$=D$(D%(F1%))+':'
3120 ; CUR(10%,W2%); : INPUT X$ : GOSUB 1725 : IF X$='' OR X$='E' RETURN
3125 X%=INSTR(1%,X$,':')
3130 IF X%=0% X$=F$+X$ ELSE IF LEFT$(X$,X%)<>F$ X$='Fel drive' : GOTO 1625
3135 X%=INSTR(1%,X$,'.') : IF X%=0% X$=X$+'.' ELSE IF X%<13% X$=LEFT$(X$,X%-1%)+' '+RIGHT$(X$,X%) : GOTO 3135
3140 IF X%>13% 3180
3145 IF LEN(X$)<16% X$=X$+' ' : GOTO 3140
3150 IF LEN(X$)>16% 3180
3155 IF F$(F1%)=X$ RETURN
3160 FOR F2%=0% TO F% : IF F$(F2%)<>X$ NEXT F2% ELSE X$='Upptaget filnamn' : GOTO 1625
3165 ONERRORGOTO 3075 : ; CUR(23%,0%);
3170 NAME F$(F1%) AS X$
3175 F$(F1%)=X$ : E2%=-3% : RETURN
3180 X$='Felaktigt filnamn' : GOTO 1625
3185 REM DISP
3190 RESTORE 3185 : GOSUB 1520
3195 DATA 'FUNKTIONEN EJ IMPLEMENTERAD
3200 DATA -
3205 FOR Z%=0% TO 5000% : NEXT Z%
3210 RETURN
3215 REM SISTA RADEN