1 REM Ins{nd av Hans-Georg Wallentinus <4046> 1987-06-20 16.03.58 (DUMP) 10 REM SAVE LIBMENY 20 ON ERROR GOTO 710 30 REM ****************************************************************** 40 REM * * 50 REM * LIBMENY.BAC * 60 REM * Program f|r k|rning eller listning av program/(text)filer * 70 REM * p} datorer med UFD-dos. Kan ev. fungera {ven med andra dos. * 80 REM * H-G Wallentinus <4046>, Ver. 1.15 1987-06-20 * 90 REM * Fr}n programmet kan valfri fil p} skivan startas * 100 REM * alternativt l{sas. [ven programfiler kan l{sas! * 110 REM * Testat p} ABC800M/UFD-dos med ABC832 resp. ABC806 * 120 REM * med f{rgsk{rm och ABC834. Se vidare INFO-fil! * 125 REM * Fungerar i denna version, enligt uppgift, {ven p} ABC802 * 130 REM * OBS! UNI800 ej testat, ej heller ABC-DOS. * 140 REM * * 150 REM ****************************************************************** 160 REM 170 REM I adress 64769 l{ggs nummer p} aktuell yttre enhet. I ABC-dos {r numren 180 REM 0 resp. 1 f|r v{nstra resp h|gra drivenheten. I UFD-dos g{ller f|ljande: 190 REM 12,13 MO0,MO1 ; 8,9 MF0,MF1 ; 16,17,18 SF0,SF1,SF2 200 REM 4,5,(6,7) HD0,HD1,(HD2,HD3) ; OBS! UNI800=DR6 ; 29 RAM 210 INTEGER : EXTEND 220 DIM Filnamn$(255%)=12%,Str{ng$=12%,Libblock%(16%),Sk{rm0$=0%,Sk{rm1$=1840% 230 DIM Sk{rm2$=1840%,B$=200%,B1$=100%,Text1$=0%,Abc$=30%,Abc3$=4%,Text$=160% 240 DIM L%(6%),R%(6%) ! max stack 250 REM Qu%=-1% ! *** Tag bort REM om Du inte vill ha filerna sorterade *** 260 REM Hd%=-1 ! *** Tag bort REM om Du har HD-drive med adress 6 270 REM WIDTH 80 ! *** Tag bort REM om Du har ABC806/2 och k|r spel med WIDTH 40 280 ! Radl=radl{ngd, Drive=adress f|r aktuell drive, Abc3$=Typ och nummer p} 290 ! aktuell drive, Drive1=adress p} v{nster drive, Abc$=Datortyp 300 Z%=FNDatortyp% 310 PRINT CHR$(12%);CHR$(141%,131%) 'L I B M E N Y'; 320 PRINT CUR(1%,40%);CHR$(140%,130%) 'Startar program eller visar text' 330 PRINT CUR(4%,12%);CHR$(134%) "Dator: ";Abc$ 340 PRINT CUR(5%,12%);CHR$(134%) "Diskettenhet: ";Abc3$ 350 Tid%=PEEK(65524%) 360 PRINT 370 REM ========== V{ljer Drive samt l{ser in antal filer och anv{nda block === 380 POKE 64769%,Drive% 390 Utidx%=0% : Sk{rm%=0% 400 Slask%=PEEK(24678%) : OUT 1%,45% : Slask1%=INP(1%) 410 IF Drive%=6% AND NOT Hd% THEN M%=6%*32% : GOTO 430 ! UNI800 Ram-floppy 420 IF Slask%<>195% AND Slask1%<>255% THEN M%=6%*32% ELSE M%=14% 430 Slask%=CALL(24678%,M%) 440 WHILE PEEK(64789%)<>0% 450 POKE 64789%,0% 460 FOR I%=9% TO 13% : PRINT CUR(I%,9%);SPACE$(53%); : NEXT I% 470 PRINT CUR(10%,10%);CHR$(129%) "Fel vid l{sning p} enhet " Abc3$ ", kolla enheten!" 480 PRINT CUR(11%,10%);CHR$(129%) 'Tryck "CE" f|r nytt f|rs|k, "PF4" f|r att l{sa den' 490 PRINT CUR(12%,10%);CHR$(129%) 'andra enheten, eller "PF6" f|r valfri enhet'; 500 GET Slask$ 510 IF ASCII(Slask$)=24% THEN 380 520 IF ASCII(Slask$)=195% THEN 540 530 IF ASCII(Slask$)=197% THEN 580 ELSE GOTO 470 540 IF (Drive%=6% AND NOT Hd%) OR Drive%=29% THEN Drive%=Drive2% : Drive1%=Drive2% : GOTO 560 550 IF Drive%=Drive1% THEN LET Drive%=(Drive1%+1%) ELSE LET Drive%=Drive1% 560 Z%=FNDrive%(Drive%) 570 GOTO 380 580 Z$=FNByt2$ : GOTO 380 590 IF End% WEND 600 Z%=FNBlock14% ! L{s in antal filer och antal anv{nda lib-block 610 Index%=FNFilnamn% ! L{s in filnamnen 620 IF NOT Qu% THEN Z%=FNQuicksort% 630 Tid1%=PEEK(65524%)-Tid% : IF Tid1%<0% THEN Tid1%=Tid1%+60% 640 IF Tid1%<2% THEN 630 650 Z%=FNSkrivut% ! Skriv ut filnamnen 660 IF Z%=8% THEN GOTO 300 ELSE IF Z%=9% GOTO 710 670 Z%=FNV{lj% ! V{lj program, byt drive, radera fil, etc. 680 IF Z%=195% OR Z%=197% THEN GOTO 380 690 IF Z%=24% THEN Slask$="BRYT" : GOTO 720 700 REM 710 Slask$="Fel nr "+NUM$(ERRCODE)+" uppstod! " 720 Z%=FNSluta%(Slask$) : GOTO 670 730 REM ============== FNSkrivut ==================== 740 REM Skriver ut funna filer p} sk{rmen 750 DEF FNSkrivut% LOCAL Kol%,Rad% 760 ON ERROR GOTO 1020 770 Kol%=1% : Rad%=1% 780 IF Utidx%=138% THEN FOR I%=1% TO 23% : PRINT CUR(I%,0%);SPACE$(80%); : NEXT I% 790 IF Utidx%=138% THEN Index1%=Index% : GOTO 880 800 FOR I%=0% TO 23% : PRINT CUR(I%,0%);SPACE$(80%); : NEXT I% 810 PRINT CUR(0%,0%); 820 Abc4$=Abc3$+" PF1=RUN, PF2=Visa, PF3=Info, PF4/6=Byt drive, SH/CTRL/PF8=Radera fil" 830 PRINT CHR$(134%) Abc4$; 840 PRINT 850 IF Index%>137% THEN LET Index1%=137% ELSE LET Index1%=Index% 860 Idxmark%=0% : Utidx%=0% 870 POKE VAROOT(Sk{rm0$),1840%,SWAP%(1840%),30800%,SWAP%(30800%),1840%,SWAP%(1840%) 880 FOR Utindex%=Utidx% TO Index1% 890 PRINT CUR(Rad%,Kol%);CHR$(131%) Filnamn$(Utindex%); 900 Rad%=PEEK(65363%)+1% 910 WHILE Rad%>23% 920 Rad%=1% 930 Kol%=Kol%+13% 940 IF Kol%>70% THEN GOTO 970 950 IF End% WEND 960 NEXT Utindex% 970 IF Utidx%=0% THEN Sk{rm1$=Sk{rm0$ : Sk{rm%=1% 980 IF Utidx%=138% THEN Sk{rm2$=Sk{rm0$ : Sk{rm%=2% 990 IF Index%<138% THEN Sk{rm2$=Sk{rm0$ : Sk{rm%=2% 1000 IF Index%>137% THEN Utidx%=138% 1010 RETURN 0% 1020 PRINT CUR(22%,0%);SPACE$(80%) : PRINT SPACE$(80%); 1030 PRINT CUR(22%,0%) CHR$(129%) "Fel nr ";ERRCODE;"uppstod vill du f|rs|ka en g}ng till (J/N)? "; 1040 INPUT ""Nej$ : Nej$=CHR$(ASCII(Nej$) AND 223%) 1050 IF Nej$="N" THEN RETURN 9% ELSE IF Nej$="J" THEN RETURN 8% ELSE GOTO 1020 1060 FNEND 1070 REM ============= FNV{lj ========================= 1080 REM Val av program 1090 DEF FNV{lj% LOCAL Kol%,A$=17,A1$=17,B1$=80,A%,A1%,A2%,A3%,A4%,Typ%,B1% 1100 ON ERROR GOTO 2460 1110 Kol%=1% 1120 PRINT CUR(1%,Kol%); 1130 GET B$ 1140 IF ASCII(B$)=194% THEN Z%=FNInfo% 1150 WHILE ASCII(B$)=195% 1160 Z%=FNByt% 1170 RETURN ASCII(B$) 1180 IF End% WEND 1190 WHILE ASCII(B$)=197% 1200 Abc$=FNByt2$ 1210 RETURN ASCII(B$) 1220 IF End% WEND 1230 IF ASCII(B$)=199% THEN Z%=FNPrinter% 1240 WHILE ASCII(B$)=32% AND Z%=194% 1250 OUT 53%,3% 1260 Sk{rm0$=Sk{rm1$ 1270 PRINT CUR(1%,1%); 1280 B$=CHR$(0%) : Z%=0% 1290 IF End% WEND 1300 WHILE ASCII(B$)=32% AND Z%<>194% 1310 IF Sk{rm%=2% THEN 1340 1320 Z%=FNSkrivut% 1330 GOTO 1360 1340 IF Sk{rm2$=Sk{rm0$ THEN OUT 53%,3% : Sk{rm0$=Sk{rm1$ ELSE OUT 53%,3% : Sk{rm0$=Sk{rm2$ 1350 PRINT CUR(1%,1%); 1360 IF End% WEND 1370 WHILE ASCII(B$)=247% 1380 Z%=FNKill% 1390 OUT 53%,3% : Sk{rm0$=Sk{rm1$ : PRINT CUR(1%,1%); 1400 IF End% WEND 1410 WHILE ASCII(B$)=9% 1420 Kol%=Kol%+13% 1430 IF Kol%<73% THEN 1460 1440 Kol%=1% : POKE 65363%,PEEK(65363%)+1% 1450 IF PEEK(65363%)>23% THEN POKE 65363%,1% 1460 POKE 65362%,Kol% 1470 IF End% WEND 1480 WHILE ASCII(B$)=8% 1490 Kol%=Kol%-13% 1500 IF Kol%>0% THEN 1540 1510 POKE 65363%,PEEK(65363%)-1% 1520 IF PEEK(65363%)<1% THEN POKE 65363%,23% 1530 Kol%=66% 1540 POKE 65362%,Kol% 1550 IF End% WEND 1560 WHILE ASCII(B$)=198% 1570 IF PEEK(65363%)<23% THEN 1620 1580 POKE 65363%,0% 1590 Kol%=Kol%+13% 1600 IF Kol%>73% THEN LET Kol%=1% 1610 POKE 65362%,Kol% 1620 POKE 65363%,PEEK(65363%)+1% 1630 IF End% WEND 1640 WHILE ASCII(B$)=196% 1650 IF PEEK(65363%)>1% THEN 1700 1660 POKE 65363%,24% 1670 Kol%=Kol%-13% 1680 IF Kol%<1% THEN LET Kol%=66% 1690 POKE 65362%,Kol% 1700 POKE 65363%,PEEK(65363%)-1% 1710 IF End% WEND 1720 WHILE ASCII(B$)=13% OR ASCII(B$)=192% 1730 A$=FNA$ 1740 PRINT CUR(0%,0%);SPACE$(80%); : Text1$=SPACE$(80%) 1750 PRINT CUR(6%,0%);DBLE "Vald fil: " A$; 1760 CHAIN A$ 1770 IF End% WEND 1780 WHILE ASCII(B$)=24% 1790 Z%=FNSluta%("SLUTA") 1800 IF End% WEND 1810 WHILE ASCII(B$)=193% 1820 REM ============== PROGRAMAVSNITT "VISA" ==================== 1830 ON ERROR GOTO 2400 1840 A$=FNA$ 1850 Excl$="N" : Typ%=0% 1860 OUT 53%,3% : PRINT CUR(2%,0%);"Vald fil: " CHR$(133%,141%) A$ CHR$(140%) 1870 S}dan$="" 1880 A%=INSTR(1%,A$,".BAC") : A1%=INSTR(1%,A$,".SYS") : A2%=INSTR(1%,A$,".REL") 1890 A3%=INSTR(1%,A$,".ASM") : A4%=INSTR(1%,A$,".ABS") 1900 WHILE A%>0% OR A1%>0% OR A2%>0% OR A3%>0% OR A4%>0% 1910 PRINT CUR(6%,0%) CHR$(129%) "OBS! Filen {r ingen textfil. ASCII-v{rdena skrivs ut om" 1920 PRINT CHR$(129%) " v{rdet {r under 32 eller |ver 127!" 1930 FOR I%=1% TO 3000% : NEXT I% 1940 S}dan$="J" : GOTO 2180 1950 IF End% WEND 1960 PRINT 1970 PRINT CHR$(130%) "Om filen {r direktfil (text/data lagrade med PUT) eller radl{ngd" 1980 PRINT CHR$(130%) "|ver 160 tkn, eller filen en programfil bryts raden automatiskt" 1990 PRINT CHR$(131%); : INPUT "[r filen en s}dan fil (J/N)? ";S}dan$ 2000 S}dan$=CHR$(ASCII(S}dan$) AND 223%) 2010 WHILE S}dan$="N" 2020 I%=1% : Radl%=160% 2030 Ja$=FNSkrivare$ 2040 PRINT CHR$(131%) "Starta genom att trycka valfri tangent!" 2050 GET C$ : PRINT 2060 INPUT LINE #1%,B$ 2070 WHILE LEN(B$)>79% 2080 B1$=RIGHT$(B$,80%) : B$=LEFT$(B$,79%) 2090 PRINT CHR$(131%) B$; : IF Ja$="J" THEN PRINT #2%,B$; 2100 B$=B1$ 2110 WEND 2120 PRINT CHR$(131%) B$; : IF Ja$="J" THEN PRINT #2%,B$; 2130 I%=I%+1% 2140 GET C$ 2150 IF ASCII(C$)=24% THEN CLOSE 1%,2% : RETURN ASCII(C$) 2160 GOTO 2060 2170 IF End% WEND 2180 WHILE S}dan$="J" 2190 Ja$=FNSkrivare$ 2200 I%=1% 2210 PRINT CHR$(131%) "Starta genom att trycka valfri tangent!" 2220 GET C$ : PRINT : I%=0% 2230 GET #1%,B$ : B1%=ASCII(B$) 2240 IF B1%<32% OR B1%>127% THEN B$="<"+NUM$(B1%)+">" 2245 WHILE PEEK(65362%)+LEN(B$)>Radl%-1% 2247 PRINT : I%=I%+1% 2248 IF Ja$="J" THEN PRINT #2% 2249 GET B1$ 2250 IF End% WEND 2255 OUT 53%,3% : PRINT B$; : IF Ja$="J" THEN PRINT #2%,B$; 2260 WHILE B1%=13% 2270 PRINT : I%=I%+1% 2280 IF Ja$="J" THEN PRINT #2% 2290 GET B1$ 2295 IF End% WEND 2310 WHILE ASCII(B1$)=24% 2330 CLOSE 1%,2% 2340 RETURN 24% 2350 IF End% WEND 2370 GOTO 2230 2380 IF End% WEND 2390 GOTO 2400 2400 IF ERRCODE=34% OR ERRCODE=38% THEN ; : ; CHR$(134%) "Antal rader =";I%-1% : GOTO 2470 2410 GOTO 2460 2420 GOTO 2470 2430 IF End% WEND 2440 Pos%=PEEK2(65362%) 2450 GOTO 1130 2460 REM Lokal felhanterare 2470 RETURN 0% 2480 FNEND 2490 GOTO 300 2500 REM ============== FNBlock14% ================ 2510 REM L{ser av antalet filer i varje lib-block resp. totalt 2520 DEF FNBlock14% 2530 Index2%=0% : Maxblock%=16% 2540 FOR I%=0% TO 15% 2550 Libblock%(I%)=PEEK(I%+62959%) 2560 Index2%=Index2%+Libblock%(I%) 2570 IF Libblock%(I%)>0% THEN Maxblock%=I%+16% 2580 NEXT I% 2590 Z%=FNCluster% 2600 IF M%=14% THEN Z%=Z%*4% 2610 Text$=NUM$(Index2%)+' filer (inkl. "tomma"). H|gsta anv. lib-block: ' 2620 Text$=Text$+NUM$(Maxblock%)+'. Lediga sektorer: '+NUM$(Z%)+SPACE$(40%) 2630 OUT 56%,6%,57%,25% 2640 POKE VAROOT(Text1$),80%,0%,32640%,SWAP%(32640%) 2650 OUT 53%,7% 2660 Text1$=LEFT$(Text$,80%) 2670 RETURN 0% 2680 FNEND 2690 REM ================ FNFilnamn% ======================= 2700 REM L{ser in filnamn till variabeln "Filnamn$(N%)" 2710 DEF FNFilnamn% LOCAL Str{ng1$=20 2720 N%=0% 2730 FOR I%=0% TO 255% : Filnamn$(I%)="" : NEXT I% 2740 FOR Block%=16% TO Maxblock% 2750 Z%=CALL(24678%,Block%) 2760 IF Libblock%(Block%-16%)=0% THEN GOTO 2870 2770 Dosbuf%=62724%-16% 2780 FOR Adress%=0% TO 15% 2790 Dosbuf%=Dosbuf%+16% 2800 IF PEEK(Dosbuf%)=0% THEN GOTO 2860 2810 IF PEEK(Dosbuf%)=255% THEN GOTO 2860 2820 POKE (VAROOT(Str{ng$)+2%),Dosbuf%,SWAP%(Dosbuf%),12%,0% 2830 Str{ng1$=LEFT$(Str{ng$,8%)+"."+RIGHT$(Str{ng$,9%) 2840 Filnamn$(N%)=LEFT$(Str{ng1$,12%) 2850 N%=N%+1% 2860 NEXT Adress% 2870 NEXT Block% 2880 RETURN N% 2890 FNEND 2900 REM ============ FNinfo% ======================= 2910 DEF FNInfo% 2920 FOR I%=1% TO 23% : PRINT CUR(I%,0%);SPACE$(80%); : NEXT I% 2930 PRINT CUR(2%,0%);CHR$(134%) "Programmet kan antingen starta ett program, eller visa/skriva ut en text." 2940 PRINT CHR$(134%) '"Texten" kan antingen vara en textfil, eller en programfil.' 2950 PRINT 2960 PRINT CHR$(133%) 'Filer med extensionen "BAC","ABS","REL" och "SYS" tolkas som programfiler.' 2970 PRINT CHR$(133%) 'I |vriga fall fr}gas om filen {r en "onormal" textfil.' 2980 PRINT 2990 PRINT CHR$(130%) 'Vid utskrift av en programfil, skrivs ASCII-koder under 32 och |ver' 3000 PRINT CHR$(130%) '127 ut med sitt ASCII-v{rde inom <>-klammer (ex <255>).' 3010 PRINT 3020 PRINT CHR$(131%) 'Normalt sorteras filerna i ASCII-ordning. Om du vill ha filerna' 3030 PRINT CHR$(131%) 'i den ordning de ligger p} skivan, s} ta bort REM p} rad 250!' 3040 PRINT 3050 PRINT CHR$(131%) 'Normalt adresseras UNI800 med adress 6, ' 3060 PRINT CHR$(131%) 'Har du en HD-enhet med adressen 6, s} tag bort REM p} rad 260!' 3070 PRINT 3080 PRINT CHR$(131%) 'Om du k|r spelprogram p} ABC802/806 anv{nder de ofta WIDTH 40, utan att }ter-' 3090 PRINT CHR$(131%) 'st{lla till WIDTH 80. "LIBMENY" kr{ver WIDTH 80 f|r att fungera.' 3100 PRINT CHR$(131%) 'Tag d{rf|r bort REM p} rad 270 s} {r du s{ker p} att ha WIDTH 80!' 3110 PRINT : PRINT CHR$(129%) "Tryck p} mellanslag f|r att forts{tta!"; 3120 GET Slask$ 3130 FOR I%=1% TO 23% : PRINT CUR(I%,0%);SPACE$(80%); : NEXT I% 3140 PRINT CUR(3%,0%);CHR$(130%) 'S} h{r g|r du f|r att k|ra ett program eller skriva ut' 3150 PRINT CHR$(130%) 'en fil p} sk{rmen eller p} printer:' : PRINT 3160 PRINT 3170 PRINT CHR$(131%) 'G} med cursorn till den valda filen. Anv{nd v{nster- och h|gerpil' 3180 PRINT CHR$(131%) "samt PF5 (upp}t en rad) resp. PF7 (ned}t en rad)." 3190 PRINT 3200 PRINT CHR$(131%) 'Med PF1 eller RETURN startas program.' 3210 PRINT CHR$(131%) 'Med PF2 startas visning/utskrift av textfil/programfil. Avbryt med "CE".' 3220 PRINT CHR$(131%) 'Med PF3 visas denna text.' 3230 PRINT CHR$(131%) 'Med PF4 l{ses den andra diskettenheten (0/1).' 3240 PRINT CHR$(131%) 'Med PF6 kan valfri enhet v{ljas (beh|vs t ex om det finns' 3250 PRINT CHR$(131%) ' mer {n tv} diskettenheter eller om Du anv{nder RAM-floppy).' 3260 PRINT CHR$(131%) 'Med PF8 f}r du utskrift av filerna p} printer.' 3270 PRINT CHR$(131%) 'Med SHIFT/CTRL PF8 raderas vald fil (sp{rr f|r oavsiktlig radering finns).' 3280 PRINT 3290 PRINT CHR$(131%) 'Avsluta med "CE"' 3300 PRINT : PRINT CHR$(129%) "Tryck p} mellanslag f|r att forts{tta!"; 3310 RETURN 194% 3320 FNEND 3330 REM =================== FNKill% =================== 3340 REM Raderar vald fil 3350 DEF FNKill% LOCAL Ja$=5,Slask% 3360 A$=FNA$ 3390 PRINT CUR(10%,0%);CHR$(141%,129%) "Skall fil ";A$;" raderas? ";CHR$(140%) 3400 PRINT CUR(12%,30%);"(J/N) "; 3410 INPUT ""Ja$ 3420 IF Ja$="N" OR Ja$="n" THEN 3600 3430 IF Ja$="J" OR Ja$="j" THEN 3440 ELSE 3390 3440 PRINT CUR(15%,0%);CHR$(136%,141%,133%) "Absolut s{ker?";CHR$(137%,140%); 3450 PRINT CUR(16%,40%) CHR$(135%);"(J/N) "; 3460 INPUT ""Ja$ 3470 IF Ja$="N" OR Ja$="n" THEN 3600 3480 IF Ja$="J" OR Ja$="j" THEN 3490 ELSE 3440 3490 KILL A$ 3500 PRINT CUR(18%,0%);CHR$(142%,130%) "Skyll dig sj{lv," 3510 PRINT CUR(19%,0%);CHR$(142%,130%) "filen ";A$;" har raderats!";CHR$(140%) 3515 FOR I%=0% TO 3000% : NEXT I% 3520 Slask%=INSTR(1%,Sk{rm1$,A2$) 3530 WHILE Slask%>0% 3540 Sk{rm1$=LEFT$(Sk{rm1$,Slask%-1%)+SPACE$(12%)+RIGHT$(Sk{rm1$,Slask%+12%) 3550 IF End% WEND 3560 WHILE Slask%=0% 3570 Slask%=INSTR(1%,Sk{rm2$,A2$) 3575 IF Slask%=0% THEN 3590 3580 Sk{rm2$=LEFT$(Sk{rm2$,Slask%-1%)+SPACE$(12%)+RIGHT$(Sk{rm2$,Slask%+12%) 3590 IF End% WEND 3600 RETURN 0% 3610 FNEND 3620 REM ============ FNA$ ========== 3630 REM L{ser av valt filnamn fr}n sk{rmen 3640 DEF FNA$ LOCAL A1$=1,Pos% 3650 A$=Abc3$ : A2$="" 3660 FOR I%=0% TO 12% 3670 Pos%=30720%+PEEK(65363%)*80%+PEEK(65362%)+I% 3680 A1$=CHR$(PEEK(Pos%)) 3685 IF I%=0% AND (ASCII(A1$)<33% OR ASCII(A1$)>127%) THEN 3710 3688 A2$=A2$+A1$ 3690 IF ASCII(A1$)<33% OR ASCII(A1$)>127% THEN 3710 3700 A$=A$+CHR$(PEEK(Pos%)) 3710 NEXT I% 3720 FOR I%=1% TO 23% : PRINT CUR(I%,0%);SPACE$(80%); : NEXT I% 3730 RETURN A$ 3740 FNEND 3750 REM ============= FNDatortyp ================== 3760 REM Tar reda p} radl{ngd, typ av drive och datortyp 3770 DEF FNDatortyp% LOCAL D% 3780 Radl%=PEEK(65364%) 3790 D%=PEEK(39%) 3800 IF D%=1% THEN Abc$="ABC800M" 3810 IF D%=2% THEN Abc$="ABC800C" 3820 IF D%=3% THEN Abc$="ABC802" 3830 IF D%=4% THEN Abc$="ABC806" 3840 IF D%=6% THEN Abc$="DTC2" 3850 IF D%>6% OR D%=0% THEN Abc$="Ok{nd alt. {ldre ABC800 M/C" 3860 Drive%=PEEK(64769%) AND 31% 3870 Z%=FNDrive%(Drive%) 3880 WHILE Drive%=29% 3890 FOR I%=16% TO 0% STEP -4% 3900 POKE 64769%,I% : Slask%=CALL(24678%,14%) 3910 IF PEEK(64789%)=0% THEN Drive2%=I% : Drive1%=I% : I%=0% 3920 NEXT I% 3930 IF End% WEND 3940 RETURN 0% 3950 FNEND 3960 REM ================ FNByt ================== 3970 REM Byter drive 3980 DEF FNByt% LOCAL A% 3990 POKE 64789%,0% 4000 A%=PEEK(64769%) AND 31% 4010 IF A%=29% THEN Drive%=Drive2% : Drive1%=Drive2% : GOTO 4030 4020 IF A%=Drive1% THEN LET Drive%=Drive1%+1% ELSE LET Drive%=Drive1% 4030 Z%=FNDrive%(Drive%) 4040 RETURN 0% 4050 FNEND 4060 REM ================ FNByt2$ ================= 4070 REM Byter till vald enhet 4080 DEF FNByt2$ LOCAL Slask$=10,A$=5,B% 4090 FOR I%=1% TO 23% : PRINT CUR(I%,0%);SPACE$(80%); : NEXT I% 4100 PRINT CUR(2%,10%);CHR$(130%) "Skriv enhetens beteckning eller adressnummer." 4110 PRINT CUR(3%,10%);CHR$(130%) "V{lj enhet: ";CHR$(131%); : INPUT ""Slask$ 4120 WHILE ASCII(Slask$)>47% AND ASCII(Slask$)<58% 4130 IF ASCII(RIGHT$(Slask$,LEN(Slask$)))>57% THEN Slask$=LEFT$(Slask$,LEN(Slask$)-1%) 4140 Drive%=VAL(Slask$) 4150 Z%=FNDrive%(Drive%) 4160 GOTO 4320 4170 IF End% WEND 4180 FOR I%=1% TO LEN(Slask$) 4190 Slask1$=MID$(Slask$,I%,1%) : IF ASCII(Slask1$)>47% AND ASCII(Slask1$)<58% THEN 4210 4200 MID$(Slask$,I%,1%)=CHR$(ASCII(Slask1$) AND 223%) 4210 NEXT I% 4220 IF INSTR(1%,Slask$,"RAM") THEN A$="RAM" : Drive%=29% : Drive1%=29% : GOTO 4310 4230 A$=LEFT$(Slask$,2%) : B%=VAL(MID$(Slask$,3%,1%)) 4240 IF A$="DR" THEN Drive1%=0% 4250 IF A$="HD" THEN Drive1%=4% 4260 IF A$="MF" THEN Drive1%=8% 4270 IF A$="MO" THEN Drive1%=12% 4280 IF A$="SF" THEN Drive1%=16% 4290 IF A$="RAM" THEN Drive1%=29% 4300 Drive%=Drive1%+B% 4310 IF INSTR(1%,A$,"RAM") THEN Abc3$="RAM:" ELSE Abc3$=A$+NUM$(B%)+":" 4320 RETURN A$ 4330 FNEND 4340 REM ============ FNPrinter ==================== 4350 REM Skriver ut filerna p} printer 4360 DEF FNPrinter% LOCAL Skivn$=200,Teck%,Adr% 4370 Slask%=CALL(24678%,0%) 4380 Skivn$="" 4390 Adr%=62720%+135% 4400 Teck%=PEEK(Adr%) 4410 IF Teck%=13% AND PEEK(Adr%+1%)=10% THEN 4460 4420 IF Teck%<32% OR Teck%>127% OR Adr%>62855%+160% THEN 4460 4430 Skivn$=Skivn$+CHR$(Teck%) 4440 Adr%=Adr%+1% 4450 GOTO 4400 4460 Slask%=0% 4470 OPEN "PR:VSA36A72.55" AS FILE 2% 4480 IF LEN(Skivn$)>0% THEN PRINT #2% Skivn$ ELSE PRINT #2%,"Namn saknas p} disketten" 4490 PRINT #2% 4500 FOR I%=0% TO Index% 4510 PRINT #2%,Filnamn$(I%), 4520 Slask%=Slask%+1% 4530 IF Slask%=5% THEN PRINT #2% : Slask%=0% 4540 NEXT I% 4545 PRINT #2% : PRINT #2% : PRINT #2% 4550 CLOSE 2% 4560 RETURN 0% 4570 FNEND 4580 REM =============== FNSkrivare$ =================== 4590 REM \ppnar printer 4600 DEF FNSkrivare$ LOCAL J$=10 4610 OPEN A$ AS FILE 1% 4620 PRINT CHR$(134%) "Vill du ha utskrift p} printer (J/N)? "; : INPUT ""J$ 4630 J$=CHR$(ASCII(J$) AND 223%) 4640 IF J$="J" THEN OPEN "PR:" AS FILE 2% 4650 PRINT 4660 RETURN J$ 4670 FNEND 4680 REM ================ FNQuicksort ===================== 4690 DEF FNQuicksort% LOCAL R%,L%,M%,I%,J%,K%,T$=12,A$=12 4700 R%=Index%-1% : L%=0% : M%=10% 4710 IF (R%-L%)>M% THEN K%=0% ELSE GOTO 5350 4720 I%=L%+1% 4730 J%=(L%+R%)/2% 4740 T$=Filnamn$(J%) 4750 Filnamn$(J%)=Filnamn$(I%) 4760 Filnamn$(I%)=T$ 4770 J%=R% 4780 WHILE Filnamn$(L%)>Filnamn$(I%) 4790 T$=Filnamn$(L%) 4800 Filnamn$(L%)=Filnamn$(I%) 4810 Filnamn$(I%)=T$ 4820 IF End% WEND 4830 WHILE Filnamn$(I%)>Filnamn$(R%) 4840 T$=Filnamn$(R%) 4850 Filnamn$(R%)=Filnamn$(I%) 4860 Filnamn$(I%)=T$ 4870 IF End% WEND 4880 WHILE Filnamn$(L%)>Filnamn$(I%) 4890 T$=Filnamn$(L%) 4900 Filnamn$(L%)=Filnamn$(I%) 4910 Filnamn$(I%)=T$ 4920 IF End% WEND 4930 I%=I%+1% : IF I%>(Index%-1%) THEN 4950 4940 IF T$>Filnamn$(I%) THEN GOTO 4930 4950 J%=J%-1% : IF J%<0% THEN 4970 4960 IF T$I% 4980 A$=Filnamn$(I%) 4990 Filnamn$(I%)=Filnamn$(J%) 5000 Filnamn$(J%)=A$ 5010 GOTO 4930 5020 IF End% WEND 5030 Filnamn$(L%+1%)=Filnamn$(J%) 5040 Filnamn$(J%)=T$ 5050 H%=R%-J% 5060 I%=J%-L% 5070 WHILE H%>=I% AND I%>M% 5080 K%=K%+1% 5090 L%(K%)=J%+1% 5100 R%(K%)=R% 5110 R%=J%-1% 5120 GOTO 4720 5130 IF End% WEND 5140 WHILE I%>H% AND H%>M% 5150 K%=K%+1% 5160 L%(K%)=L% 5170 R%(K%)=J%-1% 5180 L%=J%+1% 5190 GOTO 4720 5200 IF End% WEND 5210 WHILE I%>M% AND H%<=M% 5220 R%=J%-1% 5230 GOTO 4720 5240 IF End% WEND 5250 WHILE H%>M% AND I%<=M% 5260 L%=J%+1% 5270 GOTO 4720 5280 IF End% WEND 5290 WHILE K% 5300 L%=L%(K%) 5310 R%=R%(K%) 5320 K%=K%-1% 5330 GOTO 4720 5340 IF End% WEND 5350 FOR I1%=1% TO Index%-1% 5360 T$=Filnamn$(I1%) 5370 FOR J1%=I1%-1% TO 0% STEP -1% : IF T$