10 REM . SAVE MENYM
20 REM DA 851109
30 REM
40 REM
50 REM
60 REM
70 REM
80 REM
90 REM
110 REM
120 W%=PEEK(590%) : REM 40/80 TKN
130 W1%=W%/20% : REM 2/4 KOLUMNER
131 W2%=W%/2%-15%
140 F9%=150%
150 REM FILNAMN ,STORLEK,VALD ,SKYDD ,DRIVE
160 DIM F$(F9%)=16%,X%(F9%),V%(F9%),S%(F9%),D%(F9%)
170 DIM D0%(1%),D1%(1%),D2%(1%)
190 A9%=8%
200 DIM A$(A9%)=253%
210 REM
220 F%=-1% : FOR D%=0% TO 1% : D2%(D%)=0% : NEXT D%
221 REM VALMENY
240 GOSUB 1200 : REM SCREEN
250 GOSUB 5000 : REM LIB
310 F3%=0%
320 REM
330 IF F3%>F% F3%=F%
340 IF F3%<0% F3%=0%
350 GOSUB 600 : GOSUB 1400
360 F1%=F3% : GOSUB 1000 : GOSUB 2300 : GOSUB 1000
380 IF INSTR(1%,'BAYIOS\M',X$) GOSUB 3000 : GOTO 320
390 IF X%=24% GOSUB 500 : GOTO 320
400 IF X%=32% IF V%(F3%) X%=13% ELSE X%=9%
410 IF X%=8% OR X%=23% F3%=F3%-1% : IF F3%<0% F3%=F%
420 IF X%=9% OR X%=26% F3%=F3%+1% : IF F3%>F% F3%=0%
430 IF X%=1% IF F3%>=22% F3%=F3%-22%
440 IF X%=19% IF F3%=F0%+W1%*22% F3%=F3%+22% : IF F3%>F% F3%=F%
441 IF X%=18% GOSUB 1200
450 IF X%<>13% OR F3%>F% GOTO 320
460 V%(F3%)= NOT V%(F3%)
470 IF V%(F3%) ; '>'; ELSE ; ' ';
480 X%=9% : GOTO 420
500 REM
510 FOR F1%=0% TO F%
520 IF V%(F1%) V%(F1%)=0% : GOSUB 1100
530 NEXT F1%
540 RETURN
600 REM
610 IF F3%>=F0% AND F3%=F0%+22%*W1% F0%=F0%+22% : GOTO 630
640 RETURN
1000 REM SET CURPOS FOR F1%
1010 R%=F1%+1%-F0% : L%=0%
1020 IF R%>22% R%=R%-22% : L%=L%+20% : GOTO 1020
1025 IF L%<0% OR L%>=W% R%=0% : RETURN
1030 ; CUR(R%,L%); : RETURN
1100 REM PLACERA FIL F1%
1110 GOSUB 1000 : IF R%=0% RETURN
1115 IF F1%>F% ; SPACE$(20%); : RETURN
1120 IF V%(F1%) ; '>'; ELSE ; ' ';
1130 ; F$(F1%);
1140 IF X%(F1%)>=0% F$=NUM$(X%(F1%)) : ; RIGHT$(SPACE$(4%-LEN(F$))+F$,2%); : GOTO 1180
1145 X%=S%(F1%) AND 3% : IF X%=0% ; ' '; : RETURN
1150 IF X%=1% ; ' S'
1160 IF X%=2% ; ' R '
1170 IF X%=3% ; ' RS'
1180 RETURN
1200 REM SCREEN
1210 ; CHR$(12%);STRING$(W%,61%);CUR(0%,W2%+9%)' Meny=M '
1220 GOSUB 1300 : E2%=F% : GOTO 1400
1300 REM RAM
1310 ; CUR(23%,6%)SPACE$(27%); : E%=0%
1311 FOR D%=0% TO 1%
1320 ; CUR(23%,6%+D%*15%)'DR'CHR$(D%+48%)':';
1329 IF D2%(D%)>0% IF D1%(D%)>=0% ; D1%(D%);
1330 IF D2%(D%)>0% ; '/'RIGHT$(NUM$(D0%(D%)),2%);
1331 IF D2%(D%)<0% ; 'Error';
1332 NEXT D%
1350 IF F%>=F0%+22%*W1% ; CUR(23%,W%-5%)'Mer>';
1355 IF F0%>0% ; CUR(23%,0%)'2%)
1404 ; CUR(23%,W%-6%)SPACE$(5%);
1405 IF F0%>0% ; CUR(23%,0%)'';
1440 GOSUB 1100
1450 NEXT F1%
1451 E2%=0% : RETURN
1500 REM F\NSTER
1510 FOR X%=5% TO 18% STEP 13%
1520 ; CUR(X%,W2%-2%)'+'STRING$(30%,45%)'+'
1530 NEXT X%
1540 FOR X%=6% TO 17%
1550 ; CUR(X%,W2%-2%)'!'SPACE$(30%)'!'
1560 NEXT X%
1562 FOR X%=6% TO 17%
1564 READ F$ : IF F$='-' GOTO 1580
1566 ; CUR(X%,W2%); : IF X%=6% ; ' 'F$ : X%=7% ELSE ; F$
1568 NEXT X%
1580 E2%=-2% : RETURN
1600 REM PACKA
1610 F1%=0% : F2%=0%
1620 IF F1%>F% F%=F2%-1% : RETURN
1630 IF V%(F1%)=2% F1%=F1%+1% : E2%=-3% : GOTO 1620
1640 GOSUB 2000 : F1%=F1%+1% : F2%=F2%+1% : GOTO 1620
1700 REM R[KNA VALDA
1710 T%=0% : FOR F1%=0% TO F%
1720 IF V%(F1%) T%=T%+1% : T$=F$(F1%)
1730 NEXT F1% : RETURN
1800 REM ERROR X$
1810 ; CUR(23%,6%)X$;CHR$(7%);TAB(35%); : E%=1% : X$='' : RETURN
1900 REM
1910 GOSUB 1700 : IF T%=0% X$='Inga filer valda' : GOTO 1800
1911 IF T%>X% X$='F|r m}nga filer valda' : GOTO 1800
1920 RETURN
2000 REM BYT POST F1%<->F2%
2010 IF F1%=F2% RETURN
2020 F$=F$(F2%) : F$(F2%)=F$(F1%) : F$(F1%)=F$
2030 X%=X%(F2%) : X%(F2%)=X%(F1%) : X%(F1%)=X%
2060 X%=S%(F2%) : S%(F2%)=S%(F1%) : S%(F1%)=X%
2070 X%=V%(F2%) : V%(F2%)=V%(F1%) : V%(F1%)=X%
2080 X%=D%(F2%) : D%(F2%)=D%(F1%) : D%(F1%)=X%
2090 F3%=0% : RETURN
2100 REM TA BORT MELLANSLAG F$(F1%) -> F$
2110 F$=''
2120 FOR X%=1% TO LEN(F$(F1%))
2130 IF MID$(F$(F1%),X%,1%)<>' ' THEN F$=F$+MID$(F$(F1%),X%,1%)
2140 NEXT X% : RETURN
2200 REM F\RSTORA X$
2210 FOR I%=1% TO LEN(X$) : J%=ASC(RIGHT$(X$,I%)) : IF J%>94% J%=J%-32%
2220 X$=X$+CHR$(J%) : NEXT I%
2230 X$=RIGHT$(X$,I%) : RETURN
2300 REM GET X$
2305 GET X$ : GOSUB 2200 : X%=ASC(X$) : IF E% GOSUB 1300
2310 RETURN
2500 REM MENY
2502 GOSUB 1500
2510 M%=M1% : IF E%=0% M%=1% : IF X$<>'' GOTO 2530
2520 ; CUR(7%+M%,W2%-1%); : GOSUB 2300 : IF X$=CHR$(24%) OR X$=' ' X$='E'
2530 M1%=INSTR(1%,M$,X$) : IF M1% M%=M1% : GOTO 2565
2540 IF X%=8% M%=M%-1% : IF M%<1% M%=LEN(M$)
2550 IF X%=9% M%=M%+1% : IF M%>LEN(M$) M%=1%
2560 IF X%<>13% GOTO 2520
2565 ; CUR(7%+M%,W2%-1%)'>'; : X$='' : M1%=M%
2570 RETURN
3000 REM KOMMANDO MENY
3010 RESTORE 3000 : M$='BAIO\E' : GOSUB 2500
3020 DATA 'KOMMANDO MENY
3030 DATA 'B LIB
3040 DATA 'A Avsluta
3060 DATA 'I Visa inte filer
3070 DATA 'O Sortera
3090 DATA '\ \vriga kommandon
3100 DATA 'E Avbryt
3110 DATA -
3120 ON M% GOSUB 5000,4000,4100,7000,3500,3140
3130 IF E% GOTO 3000
3140 RETURN
3500 REM \VRIGA
3510 RESTORE 3500 : M$='KV[JRLEM' : GOSUB 2500 : IF M%=8% E%=1% : RETURN
3520 DATA '\VRIGA KOMMANDON
3530 DATA 'K Kopiera filer
3540 DATA 'V Visa filens inneh}ll
3550 DATA '[ [ndra filnamn
3560 DATA 'J J{mf|r 2 filer
3570 DATA 'R Radera filer
3580 DATA 'L Ladda och k|r fil
3590 DATA 'E Avbryt
3600 DATA -
3610 ON M% GOSUB 7500,9000,8500,9000,8000,6000,3620
3611 IF E% GOTO 3500
3620 RETURN
4000 REM AVSLUTA
4010 GOSUB 1400 : ; CUR(22%,0%);
4020 END
4100 REM VISA INTE
4110 X%=F% : GOSUB 1900 : IF E% RETURN
4130 FOR F1%=0% TO F% : IF V%(F1%) V%(F1%)=2%
4140 NEXT F1%
4150 GOTO 1600
5000 REM LIB
5010 RESTORE 5000 : M$='B01SE' : GOSUB 2500 : IF M%=5% RETURN
5020 DATA 'LIB, FILBIBLOTEK
5030 DATA 'B B}da drivarna
5040 DATA '0 Bara drive 0
5050 DATA '1 Bara drive 1
5051 DATA 'S B}da med filstorlekar
5060 DATA 'E Avbryt
5070 DATA -
5080 D1%=0% : D2%=1% : IF M%=2% D2%=0% ELSE IF M%=3% D1%=1%
5090 B%=(M%=4%)
5100 FOR D%=D1% TO D2% : GOSUB 5300 : NEXT D%
5110 IF E% RETURN ELSE GOTO 1300
5300 REM LIB D%
5310 FOR F1%=0% TO F% : IF D%(F1%)=D% V%(F1%)=2%
5320 NEXT F1% : GOSUB 1600 : GOSUB 1400
5330 POKE 64769%,D%
5340 D0%(D%)=0% : D2%(D%)=-1%
5350 REM L[S TOM BITMAP
5360 Z%=CALL(24678%,224%)
5370 IF PEEK(64789%) AND 128% THEN D2%(D%)=0% : RETURN
5380 IF PEEK(64789%) THEN 5810
5390 FOR I%=-2816% TO I%+160%
5400 IF PEEK(I%)=0% D0%(D%)=D0%(D%)+8%
5410 NEXT I%
5420 REM L[S BITMAP
5430 Z%=CALL(24678%,192%)
5440 IF PEEK(64789%) THEN 5810
5450 FOR I%=0% TO 7% : A%(I%)=PEEK(62959%+I%) : NEXT I%
5460 D1%(D%)=0%
5470 FOR I%=62720% TO I%+160%
5480 IF PEEK(I%)=255% GOTO 5500 ELSE IF PEEK(I%)=0% D1%(D%)=D1%(D%)+8% : GOTO 5500
5490 FOR J%=0% TO 7% : D1%(D%)=D1%(D%)-((PEEK(I%) AND 2%^J%)=0%) : NEXT J%
5500 NEXT I%
5510 FOR I%=0% TO 7%
5520 IF A%(I%)<2% THEN 5790
5530 REM L[S BIBLOTEK
5540 Z%=CALL(24678%,512%+I%*32%)
5550 IF PEEK(64789%) THEN 5810
5560 FOR J%=62736% TO J%+224% STEP 16%
5570 IF PEEK(J%)=0% OR PEEK(J%)=255% THEN 5780
5580 IF F%>F9% F%=F9% : X$='F|r m}nga filer' : GOTO 1800
5590 R%=SWAP%(PEEK(J%))+PEEK(J%+1%)
5600 REM FILNAMN
5610 F$='DR'+CHR$(D%+48%)+':'
5620 FOR K%=4% TO 14% : IF K%=12% THEN F$=F$+'.'
5630 F$=F$+CHR$(PEEK(J%+K%)) : NEXT K%
5640 REM STORLEK
5650 IF B%=0% X%=-1% : GOTO 5740
5660 POKE 64512%,6%,112%,195%,15%,96%
5670 Z%=CALL(64512%,R%)
5680 IF PEEK(64789%) THEN 5810
5690 X%=0%
5700 FOR K%=4% TO 240% STEP 2%
5710 IF PEEK(64512%+K%)=255% THEN 5740
5720 X%=X%+(PEEK(64513%+K%) AND 31%)+1%
5730 NEXT K%
5740 REM
5750 F%=F%+1%
5760 X%(F%)=X% : F$(F%)=F$ : S%(F%)=PEEK(J%+1%) : D%(F%)=D% : V%(F%)=0%
5770 F1%=F% : GOSUB 1100 : S%=0%
5780 NEXT J%
5790 NEXT I% : D2%(D%)=1%
5800 RETURN
5810 REM
5820 X%=PEEK(64789%)
5830 IF X%=16% X$='Disk i DR'+CHR$(D%+48%)+' nog ej formaterad' : GOTO 1800
5840 IF X%=128% X$='Lucka till drive'+NUM$(D%)+' {r |ppen' : GOTO 1800
5850 X$='Diskfel i drive'+NUM$(D%) : GOTO 1800
6000 REM LADDA & K\R
6001 X%=1% : GOSUB 1900 : IF E% RETURN
6030 FOR F1%=0% TO F% : IF V%(F1%)=0% NEXT F1%
6090 GOSUB 2100
6110 ONERRORGOTO 6160 : ; CUR(23%,0%);
6120 CHAIN F$(F1%) : END
6160 X$='ERR'+NUM$(ERRCODE)+' file '+F$ : GOTO 1800
7000 REM SORTERA
7010 IF F%<2% X$='Meningsl|st' : GOTO 1800
7020 RESTORE 7000 : M$='DFTE' : GOSUB 2500 : IF M%=4% RETURN
7030 DATA 'SORTERA LISTAN
7040 DATA 'D Efter drive och filnamn
7050 DATA 'F Efter filnamn
7060 DATA 'T Efter filtyp
7070 DATA 'E Avbryt
7080 DATA -
7090 GOSUB 1400 : I%=1% : IF M%=2% I%=5% ELSE IF M%=3% I%=14%
7100 IF I%=S% RETURN
7110 FOR F1%=0% TO F%-1%
7120 FOR F2%=F1%+1% TO F%
7130 IF RIGHT$(F$(F1%),I%)>RIGHT$(F$(F2%),I%) GOSUB 2000
7140 NEXT F2% : GOSUB 1100
7150 NEXT F1% : S%=I% : GOSUB 1100
7160 RETURN
7500 REM KOPIERA
7510 X%=F%+1% : GOSUB 1900 : IF E% RETURN
7520 RESTORE 7500 : GOSUB 1500
7530 DATA 'KOPIERA FILER
7540 DATA 'Till enhet (DRx)
7550 DATA -
7560 ; CUR(9%,W2%); : INPUT X$ : GOSUB 2200 : IF X$='E' OR X$='' RETURN
7570 E$=X$ : IF INSTR(1%,E$,':')=0% E$=E$+':' : IF INSTR(1%,E$,'DR')<>1% X$='Fel enhet' : GOTO 1800
7580 ; CUR(23%,6%)'Kopiera till 'X$;TAB(33%); : E%=1% : GOSUB 1400
7590 FOR F1%=0% TO F%
7600 IF V%(F1%) GOSUB 7630
7610 NEXT F1%
7620 RETURN
7630 REM KOPIERA FIL
7640 GOSUB 1000 : GOSUB 2100
7650 ONERRORGOTO 7850 : E%=0% : M$=F$
7660 OPEN F$ ASFILE 1%
7670 M$=E$+RIGHT$(F$,5%)
7680 PREPARE M$ ASFILE 2%
7690 K%=0%
7700 ONERRORGOTO 7750 : M$=F$
7710 FOR I%=0% TO A9%
7720 Z%=CALL(28666%,1%)+CALL(28668%,K%+I%) : A$(I%)=Q0$
7730 IF R% ; CUR(R%,L%+1%)K%+I%+1%' block'
7740 NEXT I% : GOTO 7760
7750 E%=ERRCODE : IF ERRCODE<>38% GOTO 7850
7760 ONERRORGOTO 7850 : M$=E$+RIGHT$(F$,5%)
7770 FOR J%=0% TO I%-1%
7780 Z%=CALL(28666%,2%) : Q0$=A$(J%) : Z%=CALL(28670%,K%+J%)
7790 IF R% ; CUR(R%,L%+1%)K%+J%+1%' block'
7800 NEXT J%
7810 K%=K%+J%
7820 IF E%=0% GOTO 7700
7830 CLOSE 2% : CLOSE 1%
7840 IF E%=38% E%=0% : RETURN
7850 X$='ERR'+NUM$(ERRCODE)+' file '+M$ : GOSUB 1800 : CLOSE 2% : CLOSE 1%
7860 ; CUR(R%,L%+1%);' Error '
7870 RETURN
8000 REM D\DA
8010 X%=F%+1% : GOSUB 1900 : IF E% RETURN
8020 RESTORE 8000 : M$='NJE' : GOSUB 2500 : IF M%=1% OR M%=3% RETURN
8030 DATA 'SKA DESSA FILER RADERAS?
8040 DATA 'N Nej
8050 DATA 'J Ja
8060 DATA -
8070 FOR F1%=0% TO F%
8080 IF V%(F1%) GOSUB 8110
8090 NEXT F1%
8100 GOSUB 1600 : RETURN
8110 REM
8120 GOSUB 2100 : GOSUB 1000
8130 ONERRORGOTO 8180
8140 KILL F$
8150 ; CUR(R%,L%+1%);' Raderad '
8160 V%(F1%)=2% : D1%(D%(F1%))=-1%
8170 RETURN
8180 REM
8190 ; CUR(R%,L%+1%);' Error '
8200 X$='ERR'+NUM$(ERRCODE)+' file '+F$ : GOTO 1800
8500 REM RENAME
8510 X%=1% : GOSUB 1900 : IF E% RETURN
8520 RESTORE 8500 : GOSUB 1500
8530 DATA '[NDRA FILNAMN TILL VAD?
8540 DATA 'Ange nytt filnamn (ej drive)
8550 DATA -
8555 FOR F1%=0% TO F% : IF V%(F1%)=0% NEXT F1%
8560 F$='DR'+CHR$(D%(F1%)+48%)+':'
8570 ; CUR(10%,W2%); : INPUT X$ : GOSUB 2200 : IF X$='' OR X$='E' RETURN
8580 X%=INSTR(1%,X$,':')
8590 IF X%=0% X$=F$+X$ ELSE IF LEFT$(X$,X%)<>F$ X$='Fel drive' : GOTO 1800
8600 X%=INSTR(1%,X$,'.') : IF X%=0% X$=X$+'.' ELSE IF X%<13% X$=LEFT$(X$,X%-1%)+' '+RIGHT$(X$,X%) : GOTO 8600
8610 IF X%>13% 8680
8620 IF LEN(X$)<16% X$=X$+' ' : GOTO 8610
8630 IF LEN(X$)>16% 8680
8641 IF F$(F1%)=X$ RETURN
8642 FOR F2%=0% TO F% : IF F$(F2%)<>X$ NEXT F2% ELSE X$='Upptaget filnamn' : GOTO 1800
8650 ONERRORGOTO 8200 : ; CUR(23%,0%);
8660 NAME F$(F1%) AS X$
8670 F$(F1%)=X$ : E2%=-3% : RETURN
8680 X$='Felaktigt filnamn' : GOTO 1800
9000 REM DISP
9010 RESTORE 9000 : GOSUB 1500
9011 DATA 'FUNKTIONEN EJ IMPLEMENTERAD
9012 DATA -
9020 FOR Z%=0% TO 5000% : NEXT Z%
9030 RETURN
9999 REM SISTA RADEN