1 REM Ins{nd av Bo Kullmar SYSOP <1789> 1986-05-04 23.34.15 2 ! ********************************************************************** 3 ! Program LIBRUTIN.BAS Utg}va 1.01 1986-05-04 4 ! av Bo Kullmar 5 ! Ins{nd av Bo Kullmar 6 ! F|r ABC800M ABC800C ABC802 ABC806 7 ! F|r disk med UFD-DOS 8 ! Testad p} ABC806 9 ! LIB-rutin f|r UFD-DOS. Klarar olika MFD s}v{l som UFD. Ej avsett f|r 10 ! LUX-NET DOS. Enbart testad p} MF-drive. 11 ! ********************************************************************** 60 INTEGER : EXTEND 1000 Dummy=FNInit 1010 INPUT 'Ange enhet: 'Enhet$ 1020 Drive=FNEnhcs(FNVersal$(Enhet$)) 1030 IF Drive=-1 ; 'Disken ' Enhet$ ' finns ej!' CHR$(7) : GOTO 1010 1040 IF FNReadlib(Drive) ; 'Avbrytes p} grund av fel!' 2000 DEF FNInit 2010 DIM Dosbuff$=0 : POKE VAROOT(Dosbuff$),0,1,0,245,0,1 2020 IF PEEK(24688)<>0 ; 'Programmet {r ENBART avsett f|r UFD-DOS!' : STOP 2030 RETURN 0 2040 FNEND 2050 DEF FNReadsec(Disk,Sec) 2060 ! L{s en sektor till Dosbuff 0 vilken man sedan kan kolla }t i Dosbuff$ 2070 POKE SYS(10)-511,Disk 2080 Dummy=CALL(24678,Sec) 2090 IF FNDiscerror RETURN -1 2100 RETURN 0 2110 FNEND 2120 DEF FNDiscerror LOCAL I 2130 RESTORE 2200 2140 WHILE I<4 2150 READ Kod,Text$ 2160 IF (PEEK(SYS(10)-491) AND Kod) ; CHR$(7) Text$ : RETURN -1 2170 I=I+1 2180 WEND 2190 RETURN 0 2200 DATA 8, 'Checksummafel' 2210 DATA 16, 'D}lig disk' 2220 DATA 64, 'Skivan skrivskyddad' 2230 DATA 128,'Luckan |ppen' 2240 FNEND 2250 DEF FNReadlib(Drive) LOCAL Rec,Fil,Libsec,Bitmap0$=16,Bitmap1$=16,Ufd 2260 IF Drive>=0 AND Drive<=3 Drive=PEEK(PEEK2(24683))+Drive ! Ta reda p} enhet om DRX anges 2270 IF Drive>=12 AND Drive<=15 Sec=6 ELSE Sec=14 ! Bitkartan f|r MO = 6 f|r |vriga 14 2280 IF Drive=30 Drive=PEEK(65529) : Ufd=-1 : Sec=PEEK2(65527)-1 : IF Sec=-1 ; 'UFD-bibliotek {r ej aktivt!' CHR$(7) : RETURN -1 2290 ! Om drive=30 {r det ett UFD: kolla adressen till det och om det {r aktivt 2300 Rec=Sec : Libsec=1 2310 Ec=FNReadsec(Drive,Rec) : Bitmap0$=MID$(Dosbuff$,240,16) : Rec=Rec+1 : IF Ec RETURN Ec 2320 IF Ufd Bitmap1$=STRING$(16,0) ELSE Ec=FNReadsec(Drive,Rec) : Bitmap1$=MID$(Dosbuff$,240,16) : Rec=Rec+1 : IF Ec RETURN Ec 2330 IF Drive>=12 AND Drive<=15 AND NOT Ufd Rec=Rec+8 2340 ! L{s bitkartorna och kolla i vilka sektor som det finns filer 2350 WHILE Rec0 2370 Ec=FNReadsec(Drive,Rec) : IF Ec RETURN Ec 2380 Fil=0 2390 WHILE Fil<16 2400 WHILE MID$(Dosbuff$,Fil*16+5,1)<>CHR$(255) AND MID$(Dosbuff$,Fil*16+5,1)<>CHR$(0) 2410 ; MID$(Dosbuff$,Fil*16+5,12); 2420 ; USING '_ ###' CVT$%(MID$(Dosbuff$,Fil*16+3,2)) : R{kna=R{kna+1 2430 IF 0 WEND 2440 Fil=Fil+1 2450 WEND 2460 IF 0 WEND 2470 Rec=Rec+1 : Libsec=Libsec+1 2480 WEND 2490 RETURN 0 2500 FNEND 2510 DEF FNVersal$(In$) LOCAL Y,Ord$=160 2520 Y=1 : Ord$=In$ 2530 IF In$='' RETURN '' 2540 WHILE Y<=LEN(Ord$) 2550 IF ASCII(MID$(Ord$,Y,1))>95 AND ASCII(MID$(Ord$,Y,1))<127 MID$(Ord$,Y,1)=CHR$(ASCII(MID$(Ord$,Y,1)) AND 223) 2560 Y=Y+1 2570 WEND 2580 RETURN Ord$ 2590 FNEND 2600 DEF FNEnhcs(Drive$) LOCAL Adrenhl,Enh$=4,Dselect 2610 ! Ta read p} cs f|r en diskenhet. Anges default s} g{ller den som {r DRX 2620 Adrenhl=PEEK2(SYS(10)+123) : IF Drive$='' RETURN PEEK(PEEK2(24683)) 2630 WHILE Adrenhl<>0 2640 Enh$=CHR$(PEEK(Adrenhl+2),PEEK(Adrenhl+3),PEEK(Adrenhl+4),58) 2650 IF Enh$='CON:' OR Enh$='NUL:' OR Enh$='PR:' OR Enh$='V24:' Enh$='' 2660 Dselect=PEEK(Adrenhl+7) 2670 IF Enh$=Drive$ RETURN Dselect 2680 Adrenhl=PEEK2(Adrenhl) 2690 I=I+1 2700 WEND 2710 RETURN -1 2720 FNEND