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