home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / sigm / vol135 / pcat.bas < prev    next >
Encoding:
BASIC Source File  |  1984-04-29  |  5.7 KB  |  154 lines

  1. 100 REM          *** CATALOG PRINT/DISPLAY PROGRAM ***
  2. 105 WIDTH LPRINT 255
  3. 110 SP27$=SPACE$(27)
  4. 120 ESC$=CHR$(27)
  5. 130 TAB$=CHR$(9)
  6. 140 CTRLC$=CHR$(3)
  7. 200 ON ERROR GOTO 10000
  8. 250 OPEN "INPUT",1,"MAST.CAT"
  9. 290 DIM IGNORE$(50)
  10. 300 DIM ENTRY$(330)
  11. 400 PRINT CHR$(12);"                CATALOG DISPLAY UTILITY"
  12. 410 PRINT: PRINT "Which files would you like to see <ALL> ";
  13. 412 FS$=""
  14. 415 FK$=INPUT$(1) : PRINT FK$;
  15. 417 IF FK$=CHR$(13) THEN 420
  16. 418 FS$=FS$+FK$ : GOTO 415
  17. 420 IF FS$="" THEN FS$="*.*"
  18. 430 N%=INSTR(FS$,".")
  19. 435 IF N%>0 THEN 450
  20. 440 IF N% = 0 THEN FS$=FS$+".*":GOTO 430
  21. 450 IF N%=1 THEN FS$="*"+FS$ : N%=2
  22. 455 REM IF N% > 9 THEN 480
  23. 457 F%=LEN(FS$)-N%
  24. 460 REM IF F% > 3 THEN 480
  25. 465 FS1$=LEFT$(FS$,N%-1) :  FS2$=RIGHT$(FS$,LEN(FS$)-N%+1)
  26. 470 PRINT : PRINT : PRINT SPACE$(10)+"OK, I will look for '";FS$;"'" : GOTO 500
  27. 480 PRINT:PRINT : PRINT "No, please enter a valid CP/M filename."
  28. 482 PRINT "For example:   PIP.COM   or   *.BAS   or   FRED.*"
  29. 483 PRINT "If you enter (say) ABC I will assume ABC.*"
  30. 484 PRINT "If you enter (say) .ABC I will assume *.ABC"
  31. 485 PRINT "Please try again."
  32. 486 GOTO 410
  33. 500 PRINT : PRINT "Which disks would you like me to inspect <ALL> ";
  34. 502 DK$=""
  35. 505 D1$=INPUT$(1) : IF D1$=CHR$(13) THEN 510
  36. 507 PRINT D1$; : DK$=DK$+D1$ : GOTO 505
  37. 510 IF DK$="" THEN DK$="*.*"
  38. 520 N%=INSTR(DK$,".")
  39. 530 IF N% > 0 THEN 550
  40. 540 IF N% = 0 THEN DK$=DK$+".*" : GOTO 520
  41. 550 IF N%=1 THEN DK$="*"+DK$ : N%=2
  42. 560 REM IF N%>8 THEN 580
  43. 570 D9%=LEN(DK$)-N%
  44. 572 REM IF D9%>3% THEN 580
  45. 575 DK1$=LEFT$(DK$,N%-1) : DK2$=RIGHT$(DK$,D9%+1)
  46. 577 PRINT:PRINT:PRINT SPACE$(10);"OK, I will look at '";DK$;"'" : GOTO 590
  47. 580 PRINT:PRINT: PRINT "No, please enter a valid disk name."
  48. 582 PRINT "A disk name can be no more than 7 chars."
  49. 584 PRINT "Optionally you may enter a '.' and a disk number."
  50. 586 PRINT "For example, BASIC.312  or  BASIC  or  .312"
  51. 588 PRINT "Please try again." : GOTO 500
  52. 590 PRINT
  53. 595 PRINT "Would you like a Screen display or a Printed listing <S> ";
  54. 600 DEVICE$=INPUT$(1) : PRINT DEVICE$
  55. 700 IF DEVICE$=CHR$(13) THEN DEVICE$="S"
  56. 800 DEVICE$=LEFT$(DEVICE$,1)
  57. 900 IF DEVICE$ = "P" OR DEVICE$ = "S" THEN GOTO 1000
  58. 910 PRINT :PRINT "No,  I would like you to enter an S or a P."
  59. 920 PRINT "(If you just press RETURN I will assume an S.)" 
  60. 930 PRINT "Please try again."; : GOTO 590
  61. 1000 IF DEVICE$="S" THEN ACROSS%=2 : DOWN%=27 : GOTO 2000
  62. 1100 PRINT : PRINT "How many items would you like to print across the page <4> ";
  63. 1110 ACROSS$=INPUT$(1) : PRINT ACROSS$
  64. 1200 IF ACROSS$=CHR$(13) THEN ACROSS$="4"
  65. 1300 IF ACROSS$ > "0" AND ACROSS$ < "7" THEN 1400
  66. 1350 PRINT : PRINT "No, I would like you to enter a number between 1 and 6."
  67. 1360 PRINT "(If you just press RETURN I will assume 4)."
  68. 1370 PRINT "Please try again." : GOTO 1100
  69. 1400 ACROSS%=VAL(ACROSS$) : DOWN%=55
  70. 1410 IF ACROSS% < 5 THEN 1500
  71. 1415 REM The LA34 printer can handle smaller chars to get more aoss the page
  72. 1420 IF ACROSS% = 5 THEN LPRINT ESC$+"[3w";
  73. 1430 IF ACROSS% = 6 THEN LPRINT ESC$+"[4w";
  74. 1500 PRINT: PRINT "Would you like a heading on each page <N> ";
  75. 1510 DAT$=INPUT$(1) : PRINT DAT$
  76. 1520 IF DAT$=CHR$(13) THEN DAT$="N"
  77. 1530 IF DAT$="N" THEN 2000
  78. 1540 IF DAT$="Y" THEN 1550
  79. 1545 PRINT :PRINT "No, just reply Y or N." 
  80. 1547 PRINT "(If you just press RETURN I will assume N)." 
  81. 1549 GOTO 1500
  82. 1550 PRINT : PRINT "Please enter the heading :"
  83. 1560 INPUT HEADING$
  84. 2000 MAX%=ACROSS% * DOWN%
  85. 2050 PRINT : PRINT : PRINT
  86. 2100 PRINT "                  ~ Please stand by ~"
  87. 2200 HEADING$=CHR$(12)+"Catalog of "+FS$+"   on   "+DK$+" "+HEADING$
  88. 2210 IG%=0
  89. 2220 INPUT #1,F$
  90. 2230 IF LEFT$(F$,1)="(" THEN 2240
  91. 2235 CLOSE 1 : OPEN "I",1,"MAST.CAT"
  92. 2237 PRINT : PRINT "There were no files specified in MAST.CAT to be omitted" : GOTO 2300
  93. 2240 F$=RIGHT$(F$,LEN(F$)-1)
  94. 2245 IG%=IG%+1
  95. 2250 N%=INSTR(F$,")") : IF N%=0 THEN 2260
  96. 2255 F$=LEFT$(F$,N%-1) : IGNORE$(IG%)=F$ : GOTO 2300
  97. 2260 IGNORE$(IG%)=F$
  98. 2270 INPUT #1,F$
  99. 2280 GOTO 2245
  100. 2300 FOR CT% = 1 TO MAX%
  101. 2400 INPUT #1,F$ : INPUT #1,D$
  102. 2401 IF EOF(1) THEN MAX%=CT%-1 : ENDSW%=1 : GOTO 3100
  103. 2405 IF INKEY$=CTRLC$ THEN GOTO 5000
  104. 2410 FOR I%=1 TO IG%
  105. 2420 IF F$=IGNORE$(I%) THEN 2400
  106. 2430 NEXT I%
  107. 2500 N%=INSTR(F$,".")-1
  108. 2550 F1$=LEFT$(F$,N%): F2$=RIGHT$(F$,LEN(F$)-N%)
  109. 2560 IF LEN(F2$)<4 THEN F2$=F2$+" " : GOTO 2560
  110. 2570 IF FS1$ <> "*" AND FS1$ <> F1$ THEN 2400
  111. 2575 IF FS1$<>"*" AND FS1$ < F1$ THEN MAX%=CT%-1 : ENDSW%=1 : GOTO 3100
  112. 2580 IF FS2$ <> ".*" AND FS2$ <> F2$ THEN 2400
  113. 2600 F$=F1$+SPACE$(8-N%)+F2$
  114. 2750 N%=INSTR(D$,".")-1
  115. 2800 D1$=LEFT$(D$,N%):D2$=RIGHT$(D$,LEN(D$)-N%)
  116. 2810 IF LEN(D2$)<4 THEN D2$=D2$+" " : GOTO 2810
  117. 2850 IF DK1$<>"*" AND DK1$ <> D1$ THEN 2400
  118. 2870 IF DK2$<>".*" AND DK2$ <> D2$ THEN 2400
  119. 2890 D$=D1$+SPACE$(8-N%)+D2$
  120. 2900 ENTRY$(CT%)=F$+"  "+D$
  121. 3000 NEXT CT%
  122. 3100 IF DEVICE$="P" THEN  LPRINT HEADING$ : LPRINT : GOTO 3150
  123. 3110 PRINT HEADING$
  124. 3150 DWN%=INT(MAX%/ACROSS%+.75)
  125. 3200 FOR DCT% = 0 TO DWN%-1
  126. 3300 FOR ACT% = 1 TO MAX% STEP DWN%
  127. 3400 ELEMENT%=DCT%+ACT%
  128. 3500 IF DEVICE$="P" THEN LPRINT ENTRY$(ELEMENT%); : GOTO 3600
  129. 3550 PRINT ENTRY$(ELEMENT%);
  130. 3600 ENTRY$(ELEMENT%)=SP27$
  131. 3610 NUMBER%=NUMBER%+1
  132. 3650 A%=A%+1 : IF A% = ACROSS% THEN 3700
  133. 3660 IF DEVICE$="S" THEN PRINT "    "+CHR$(162)+"    "; : GOTO 3680
  134. 3670 LPRINT "   |    ";
  135. 3680 IF INKEY$=CTRLC$ THEN GOTO 5000
  136. 3700 NEXT ACT%
  137. 3800 IF DEVICE$="S" THEN PRINT ELSE LPRINT
  138. 3850 A%=0
  139. 3900 NEXT DCT%
  140. 3950 IF ENDSW%=1 THEN 5000
  141. 4000 IF DEVICE$="P" THEN 2300
  142. 4050 PRINT:PRINT "                 Press any key to continue";
  143. 4055 MORE$=INPUT$(1)
  144. 4060 IF MORE$=CHR$(3) THEN END
  145. 4070 PRINT MORE$;
  146. 4100 GOTO 2300
  147. 5000 ENDING$=CHR$(10)+TAB$+TAB$+TAB$+STR$(NUMBER%)+" files listed"
  148. 5100 IF DEVICE$="P" THEN LPRINT ENDING$+CHR$(12)+ESC$+"c";
  149. 5200 PRINT ENDING$
  150. 6000 END
  151. 10000 IF ERR=53 THEN PRINT : PRINT " I am sorry, but I can't find MAST.CAT" : END
  152. 11000 PRINT "*** ERROR *** ERR=";ERR;"ERL=";ERL
  153. 11100 END
  154.