100 REM *** CATALOG PRINT/DISPLAY PROGRAM *** 105 WIDTH LPRINT 255 110 SP27$=SPACE$(27) 120 ESC$=CHR$(27) 130 TAB$=CHR$(9) 140 CTRLC$=CHR$(3) 200 ON ERROR GOTO 10000 250 OPEN "INPUT",1,"MAST.CAT" 290 DIM IGNORE$(50) 300 DIM ENTRY$(330) 400 PRINT CHR$(12);" CATALOG DISPLAY UTILITY" 410 PRINT: PRINT "Which files would you like to see "; 412 FS$="" 415 FK$=INPUT$(1) : PRINT FK$; 417 IF FK$=CHR$(13) THEN 420 418 FS$=FS$+FK$ : GOTO 415 420 IF FS$="" THEN FS$="*.*" 430 N%=INSTR(FS$,".") 435 IF N%>0 THEN 450 440 IF N% = 0 THEN FS$=FS$+".*":GOTO 430 450 IF N%=1 THEN FS$="*"+FS$ : N%=2 455 REM IF N% > 9 THEN 480 457 F%=LEN(FS$)-N% 460 REM IF F% > 3 THEN 480 465 FS1$=LEFT$(FS$,N%-1) : FS2$=RIGHT$(FS$,LEN(FS$)-N%+1) 470 PRINT : PRINT : PRINT SPACE$(10)+"OK, I will look for '";FS$;"'" : GOTO 500 480 PRINT:PRINT : PRINT "No, please enter a valid CP/M filename." 482 PRINT "For example: PIP.COM or *.BAS or FRED.*" 483 PRINT "If you enter (say) ABC I will assume ABC.*" 484 PRINT "If you enter (say) .ABC I will assume *.ABC" 485 PRINT "Please try again." 486 GOTO 410 500 PRINT : PRINT "Which disks would you like me to inspect "; 502 DK$="" 505 D1$=INPUT$(1) : IF D1$=CHR$(13) THEN 510 507 PRINT D1$; : DK$=DK$+D1$ : GOTO 505 510 IF DK$="" THEN DK$="*.*" 520 N%=INSTR(DK$,".") 530 IF N% > 0 THEN 550 540 IF N% = 0 THEN DK$=DK$+".*" : GOTO 520 550 IF N%=1 THEN DK$="*"+DK$ : N%=2 560 REM IF N%>8 THEN 580 570 D9%=LEN(DK$)-N% 572 REM IF D9%>3% THEN 580 575 DK1$=LEFT$(DK$,N%-1) : DK2$=RIGHT$(DK$,D9%+1) 577 PRINT:PRINT:PRINT SPACE$(10);"OK, I will look at '";DK$;"'" : GOTO 590 580 PRINT:PRINT: PRINT "No, please enter a valid disk name." 582 PRINT "A disk name can be no more than 7 chars." 584 PRINT "Optionally you may enter a '.' and a disk number." 586 PRINT "For example, BASIC.312 or BASIC or .312" 588 PRINT "Please try again." : GOTO 500 590 PRINT 595 PRINT "Would you like a Screen display or a Printed listing "; 600 DEVICE$=INPUT$(1) : PRINT DEVICE$ 700 IF DEVICE$=CHR$(13) THEN DEVICE$="S" 800 DEVICE$=LEFT$(DEVICE$,1) 900 IF DEVICE$ = "P" OR DEVICE$ = "S" THEN GOTO 1000 910 PRINT :PRINT "No, I would like you to enter an S or a P." 920 PRINT "(If you just press RETURN I will assume an S.)" 930 PRINT "Please try again."; : GOTO 590 1000 IF DEVICE$="S" THEN ACROSS%=2 : DOWN%=27 : GOTO 2000 1100 PRINT : PRINT "How many items would you like to print across the page <4> "; 1110 ACROSS$=INPUT$(1) : PRINT ACROSS$ 1200 IF ACROSS$=CHR$(13) THEN ACROSS$="4" 1300 IF ACROSS$ > "0" AND ACROSS$ < "7" THEN 1400 1350 PRINT : PRINT "No, I would like you to enter a number between 1 and 6." 1360 PRINT "(If you just press RETURN I will assume 4)." 1370 PRINT "Please try again." : GOTO 1100 1400 ACROSS%=VAL(ACROSS$) : DOWN%=55 1410 IF ACROSS% < 5 THEN 1500 1415 REM The LA34 printer can handle smaller chars to get more aoss the page 1420 IF ACROSS% = 5 THEN LPRINT ESC$+"[3w"; 1430 IF ACROSS% = 6 THEN LPRINT ESC$+"[4w"; 1500 PRINT: PRINT "Would you like a heading on each page "; 1510 DAT$=INPUT$(1) : PRINT DAT$ 1520 IF DAT$=CHR$(13) THEN DAT$="N" 1530 IF DAT$="N" THEN 2000 1540 IF DAT$="Y" THEN 1550 1545 PRINT :PRINT "No, just reply Y or N." 1547 PRINT "(If you just press RETURN I will assume N)." 1549 GOTO 1500 1550 PRINT : PRINT "Please enter the heading :" 1560 INPUT HEADING$ 2000 MAX%=ACROSS% * DOWN% 2050 PRINT : PRINT : PRINT 2100 PRINT " ~ Please stand by ~" 2200 HEADING$=CHR$(12)+"Catalog of "+FS$+" on "+DK$+" "+HEADING$ 2210 IG%=0 2220 INPUT #1,F$ 2230 IF LEFT$(F$,1)="(" THEN 2240 2235 CLOSE 1 : OPEN "I",1,"MAST.CAT" 2237 PRINT : PRINT "There were no files specified in MAST.CAT to be omitted" : GOTO 2300 2240 F$=RIGHT$(F$,LEN(F$)-1) 2245 IG%=IG%+1 2250 N%=INSTR(F$,")") : IF N%=0 THEN 2260 2255 F$=LEFT$(F$,N%-1) : IGNORE$(IG%)=F$ : GOTO 2300 2260 IGNORE$(IG%)=F$ 2270 INPUT #1,F$ 2280 GOTO 2245 2300 FOR CT% = 1 TO MAX% 2400 INPUT #1,F$ : INPUT #1,D$ 2401 IF EOF(1) THEN MAX%=CT%-1 : ENDSW%=1 : GOTO 3100 2405 IF INKEY$=CTRLC$ THEN GOTO 5000 2410 FOR I%=1 TO IG% 2420 IF F$=IGNORE$(I%) THEN 2400 2430 NEXT I% 2500 N%=INSTR(F$,".")-1 2550 F1$=LEFT$(F$,N%): F2$=RIGHT$(F$,LEN(F$)-N%) 2560 IF LEN(F2$)<4 THEN F2$=F2$+" " : GOTO 2560 2570 IF FS1$ <> "*" AND FS1$ <> F1$ THEN 2400 2575 IF FS1$<>"*" AND FS1$ < F1$ THEN MAX%=CT%-1 : ENDSW%=1 : GOTO 3100 2580 IF FS2$ <> ".*" AND FS2$ <> F2$ THEN 2400 2600 F$=F1$+SPACE$(8-N%)+F2$ 2750 N%=INSTR(D$,".")-1 2800 D1$=LEFT$(D$,N%):D2$=RIGHT$(D$,LEN(D$)-N%) 2810 IF LEN(D2$)<4 THEN D2$=D2$+" " : GOTO 2810 2850 IF DK1$<>"*" AND DK1$ <> D1$ THEN 2400 2870 IF DK2$<>".*" AND DK2$ <> D2$ THEN 2400 2890 D$=D1$+SPACE$(8-N%)+D2$ 2900 ENTRY$(CT%)=F$+" "+D$ 3000 NEXT CT% 3100 IF DEVICE$="P" THEN LPRINT HEADING$ : LPRINT : GOTO 3150 3110 PRINT HEADING$ 3150 DWN%=INT(MAX%/ACROSS%+.75) 3200 FOR DCT% = 0 TO DWN%-1 3300 FOR ACT% = 1 TO MAX% STEP DWN% 3400 ELEMENT%=DCT%+ACT% 3500 IF DEVICE$="P" THEN LPRINT ENTRY$(ELEMENT%); : GOTO 3600 3550 PRINT ENTRY$(ELEMENT%); 3600 ENTRY$(ELEMENT%)=SP27$ 3610 NUMBER%=NUMBER%+1 3650 A%=A%+1 : IF A% = ACROSS% THEN 3700 3660 IF DEVICE$="S" THEN PRINT " "+CHR$(162)+" "; : GOTO 3680 3670 LPRINT " | "; 3680 IF INKEY$=CTRLC$ THEN GOTO 5000 3700 NEXT ACT% 3800 IF DEVICE$="S" THEN PRINT ELSE LPRINT 3850 A%=0 3900 NEXT DCT% 3950 IF ENDSW%=1 THEN 5000 4000 IF DEVICE$="P" THEN 2300 4050 PRINT:PRINT " Press any key to continue"; 4055 MORE$=INPUT$(1) 4060 IF MORE$=CHR$(3) THEN END 4070 PRINT MORE$; 4100 GOTO 2300 5000 ENDING$=CHR$(10)+TAB$+TAB$+TAB$+STR$(NUMBER%)+" files listed" 5100 IF DEVICE$="P" THEN LPRINT ENDING$+CHR$(12)+ESC$+"c"; 5200 PRINT ENDING$ 6000 END 10000 IF ERR=53 THEN PRINT : PRINT " I am sorry, but I can't find MAST.CAT" : END 11000 PRINT "*** ERROR *** ERR=";ERR;"ERL=";ERL 11100 END