1 REM +++++++++++++++++++++++++++++++++ 2 REM ! Program .... DIR.UTL 3 REM ! Utg}va 9.999 84.04.03 4 REM ! av (c) Common ? 5 REM ! {ndrat av Victor Falkteg 7 REM ! Minne 16 Kbytes f|r flexskiva 8 REM ! Ins{nt av 4068 9 REM +++++++++++++++++++++++++++++++++ 10 REM En modifiering av ABC80 : s lib-program. 11 REM Till}ter val av vilken drive som |nskas 12 REM lib p}. Programmet ger en utskrift som 13 REM automatiskt avpassas efter om den arbetar 14 REM med 80 eller 40 kol. sk{rm. 15 REM Vid printerutskrift ges sex kolumner, f|r 16 REM att utnyttja pappersformatet. 17 REM Optionerna kan skriver in i valfri ord- 18 REM ning. 100 ; CHR$(12)'** ABC80 DIR **' : ; 110 ; 'S - Sectors' : ; 'N - Physical numbers' : ; 'P - Printer, PR:' : ; 'X - -"- , not PR:' 120 ; '0 - Only DR0:' : ; '1 - -"- DR1:' : ; '2 - -"- DR2:' : ; '3 - -"- DR3:' : ; 130 ; "Options ......... "; : INPUTLINE O$ : ; : ; 140 L%=FNO%('P') : IF L% D9$='PR:' : GOTO 170 150 L%=FNO%('X') : IF L% O$=O$+"P" 160 IF L% ; 'Listfile ....... '; : INPUTLINE D9$ : ; : ; : D9$=LEFT$(D9$,LEN(D9$)-2%) : IF D9$='' D9$='PR:' 170 PREPARE D9$ ASFILE L% : E%=-1% : IF L%=0% ; CHR$(12%) 180 FOR I%=0% TO 3% : IF INSTR(1%,O$,CHR$(48%+I%)) THEN D%(I%)=1% 190 D%=D%+D%(I%) : NEXT I% 200 IF D%=0% THEN D%(0%)=1% : D%(1%)=1% : D%(2%)=1% : D%(3%)=1% 210 F%=FNO%('S') : N%=FNO%('N') : W1%=20% 220 IF PEEK(885%)=88% THEN W2%=81% ELSE W2%=41% 230 L%=FNO%('P') : IF L% W2%=121% 240 FOR D%=0% TO 3% : IF D%(D%)=0% THEN 660 250 G8%=0% : POKE -767%,D% : Z%=CALL(24678%,224%) 260 IF PEEK(-747%) AND 128% GOTO 660 270 B%=-2577% : FOR I%=0% TO 7% 280 M%(I%)=PEEK(B%+I%) : NEXT I% 290 G%=0% : FOR P%=-2816% TO P%+160% 300 IF PEEK(P%)=255% THEN 340 ELSE IF PEEK(P%)=0% THEN G%=G%+8% : GOTO 340 310 Q%=1% 320 G%=G%-((PEEK(P%) AND Q%)=0%) 330 Q%=Q%+Q% : IF Q%<256% THEN 320 340 NEXT P% 350 IF G8%=0% THEN G8%=G% : Z%=CALL(24678%,192%) : GOTO 270 360 X$="" : Z%=CALL(24678%,0%) : IF PEEK(-747%) THEN 690 370 FOR I%=-2592% TO -2561% : X$=X$+CHR$(PEEK(I%)) 380 NEXT I% : IF (ASC(X$)>64% AND ASC(X$)<94%) X$=': '+X$ ELSE X$=':' 390 GOSUB 700 : ; #L%'* DR'CHR$(D%+48%)X$; : GOSUB 700 : GOSUB 700 400 K%=0% : FOR S%=0% TO 7% 410 IF M%(S%)<1 GOTO 630 420 Z%=CALL(24678%,512%+S%*32%) 430 IF PEEK(-747%) THEN 690 440 FOR B%=-2816% TO -2576% STEP 16% 450 IF PEEK(B%)=255% OR PEEK(B%+4%)=0% GOTO 620 460 R%=PEEK(B%)*256%+PEEK(B%+1%) 470 X$='' : FOR I%=4% TO 14% 480 IF I%=12% THEN X$=X$+"." 490 X$=X$+CHR$(PEEK(B%+I%)) : NEXT I% 500 ; #L%,TAB(K%)X$; 510 IF F%=0% AND N% ; #L%,CHR$(32,(B%+2816%)/64%+48%,(B%+2816% AND 56%)/8%+48%,48%+S%); 520 IF F%=0% THEN 600 530 POKE -1024%,6%,112%,195%,15%,96% 540 Z%=CALL(-1024%,R%) : IF PEEK(-747%) THEN 690 550 Y%=0% : FOR J%=0% TO 254% STEP 2% 560 IF PEEK(J%-1020%)=255% GOTO 590 570 V%=PEEK(J%-1019%) 580 Y%=Y%+(V% AND 31%)+1% : NEXT J% 590 ; #L%Y%; 600 IF (R% AND 1%) ; #L%,TAB(K%+12%+(4%*F%))' S'; ELSE IF (R% AND 2%) ; #L%,TAB(K%+12%+(4%*F%))' R'; 610 K%=K%+W1% : IF K%+W1%>=W2% GOSUB 700 : K%=0% 620 NEXT B% 630 NEXT S% 640 IF K% GOSUB 700 650 GOSUB 700 : ; #L%,RIGHT$(NUM$(G%),2%)' of'G8%' sectors free'; : GOSUB 700 660 NEXT D% : IF L% ; : ; "R E A D Y" 670 END 680 DEFFNO%(X$)=-(INSTR(1%,O$,X$)<>0% OR INSTR(1%,O$,CHR$(ASC(X$)+32%))<>0%) 690 ; : ; "Error DRIVE"CHR$(48%+D%)":" : GOTO 660 700 ; #L% : IF L% AND D%<>E% ; "Printing DR"CHR$(48%+D%)":" : E%=D% 710 IF L% RETURN 720 F9%=F9%+1% : IF F9%>22% GET Z9$ : F9%=0% 730 IF ASC(Z9$)<>13% RETURN