home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / CPM / CATLOG / PRINTLST.LBR / PRINTLST.BQS / PRINTLST.BAS
BASIC Source File  |  2000-06-30  |  8KB  |  380 lines

  1. REM -------------[ PRINTLST.BAS (Prints MAST.LST files) ]-----------------\
  2.     \
  3.     Program written and (C) 1984 by Steven L. Sanders\
  4.     \
  5.     Date written - November 24, 1984\
  6.     \
  7.     Version 1, revision 2 (generic version)\
  8.     \
  9.     Language - CBASIC Compiler (CB80)\
  10.     \
  11.     This program will output the contents of the MAST.LST file\
  12.     generated by XCATxx.COM into a 3-across format either to the\
  13.     CRT, printer, or diskfile.  I found all the other listing programs\
  14.     to be big space-wasters when it came to the number of sheets\
  15.     needed to print-out a big catalog.  PRINTLST ignores all other\
  16.     disk numbers except for the first one generated by XCAT, if you\
  17.     need a cross-ref listing then use XCAT's list output function.\
  18.     \
  19.     To use, run XCATxx on your MAST.CAT file first and choose the\
  20.     diskfile output option and generate the needed MAST.LST file.\
  21.     PRINTLST will look for MAST.LST on the logged du:, read it in\
  22.     and then generate the 3-across format to CRT, printer, or disk.\
  23.     \
  24. ----------------------------[ (C)opyrights ]---------------------------------\
  25.  
  26.     copyright1$ =\
  27.     "Portions of this program (C)1983, 1984 by Digital Research  "
  28.  
  29.     copyright2$ =\
  30.     "  The rest is (C) 1984 by Steven L. Sanders"
  31.  
  32. REM ------------------------[ DEFINE CONSTANTS ]-----------------------------\
  33.  
  34.     false% =     0        REM true and false used for
  35.     true% =     NOT false%    REM while/wend loops
  36.     bell$ =     CHR$(07h)    REM console bell
  37.     cr$ =         CHR$(0dh)    REM carriage return
  38.     formfeed$ =    CHR$(0ch)    REM printer formfeed
  39.  
  40.     file.mast$ =    "mast.lst"    REM source MAST.LST
  41.  
  42.     sep$ =        "  |  "        REM file seperator
  43.     fil.sep$ =    " | "        REM output file seperator
  44.  
  45. REM -------------------[ program code begins ]--------------------------\
  46.  
  47. begin:
  48.  
  49.     ON ERROR GOTO error.handler
  50.  
  51.     FOR scroll% = 1 TO 24 : PRINT : NEXT scroll%
  52.  
  53.     PRINT\
  54. "  PRINTLST v1.2 - Prints the MAST.LST file  (C)1984 Steven L. Sanders"
  55.     PRINT\
  56. "  ==================================================================="
  57.  
  58.     PRINT:PRINT:PRINT\
  59. "  Output to: <P>rinter, <C>RT, or <D>iskfile?  (P, C, or D): ";
  60.  
  61. well:
  62.  
  63.     PRINT bell$;
  64.  
  65.     answer% = INKEY
  66.  
  67.     IF UCASE$(CHR$(answer%)) = "P" THEN\
  68.     PRINT "Printer":\
  69.     GOTO list.it
  70.  
  71.     IF UCASE$(CHR$(answer%)) = "D" THEN\
  72.     PRINT "Diskfile":\
  73.     GOTO create.it
  74.  
  75.     IF UCASE$(CHR$(answer%)) <> "C" THEN GOTO well
  76.  
  77.     PRINT "CRT"
  78.  
  79. REM -----------------------[ output to crt ]----------------------------------\
  80.  
  81.     IF NOT SIZE(file.mast$) THEN \
  82.     PRINT:PRINT:PRINT "Unable to open MAST.LST on current du:" + bell$:\
  83.     STOP \
  84.     ELSE \
  85.     OPEN file.mast$ AS 1
  86.  
  87.     IF END #1 THEN thats.all
  88.  
  89.     count% = 1
  90.     line% = 1
  91.  
  92. new.head:
  93.  
  94.     PRINT:PRINT\
  95. "filename.typ  -  dsk  |  filename.typ  -  dsk  |  filename.typ  -  dsk"
  96.     PRINT\
  97. "----------------------------------------------------------------------"
  98.  
  99.     WHILE true%
  100.  
  101. do.it:
  102.  
  103.         IF count% > 3 THEN\
  104.         count% = 1:\
  105.         PRINT
  106.  
  107.         READ #1;LINE input.line$
  108.  
  109.         IF MID$(input.line$,4,5) = "DONE:" THEN\
  110.         PRINT input.line$:\
  111.         GOTO do.it
  112.  
  113.         IF LEFT$(input.line$,9) = "         " THEN\
  114.         PRINT input.line$:\
  115.         GOTO thats.all
  116.  
  117.         PRINT LEFT$(input.line$,20);
  118.  
  119.         IF count% = 1 OR count% = 2 THEN \
  120.         PRINT sep$;
  121.  
  122.         line% = line% + 1
  123.         count% = count% + 1
  124.  
  125.         IF line% <= 60 THEN GOTO do.it
  126.  
  127.         line% = 1
  128.  
  129.         PRINT:PRINT "[ any key or <Q>uit ]";
  130.  
  131. go.or.no:
  132.  
  133.         dummy% = INKEY
  134.  
  135.         IF UCASE$(CHR$(dummy%)) = "Q" THEN\
  136.         PRINT cr$;"                         ";cr$;:\
  137.         CLOSE 1:\
  138.         STOP\
  139.         ELSE\
  140.         GOTO new.head
  141.  
  142.     WEND
  143.  
  144. thats.all:
  145.  
  146.     PRINT
  147.     PRINT "All done." + bell$
  148.  
  149.     STOP
  150.  
  151. REM ------------------------[ output to printer ]----------------------------\
  152.  
  153. list.it:
  154.  
  155.     IF NOT SIZE(file.mast$) THEN \
  156.     PRINT:PRINT:PRINT "Unable to open MAST.LST on current du:" + bell$:\
  157.     STOP \
  158.     ELSE \
  159.     OPEN file.mast$ AS 1
  160.  
  161. enter.date:
  162.  
  163.     PRINT bell$:INPUT\
  164. "             Enter today's date (MM/DD/YY): ";LINE todays.date$
  165.  
  166.     IF LEN(todays.date$) <> 8 THEN GOTO enter.date
  167.  
  168.     PRINT:PRINT:PRINT\
  169. "                 ++ Outputting MAST.LST to the printer ++";
  170.  
  171.     IF END #1 THEN all.printed
  172.  
  173.     count% = 1
  174.     line% = 1
  175.     page% = 1
  176.  
  177.     LPRINTER WIDTH 80
  178.  
  179. new.page:
  180.  
  181.     PRINT\
  182. "MAST.LST - Master CP/M Catalog as of " + todays.date$ + \
  183.     "                  page";page%
  184.  
  185.     PRINT:PRINT\
  186. "filename.typ  -  dsk  |  filename.typ  -  dsk  |  filename.typ  -  dsk"
  187.     PRINT\
  188. "----------------------------------------------------------------------"
  189.  
  190.     IF page% = 1 THEN PRINT
  191.  
  192.     WHILE true%
  193.  
  194. doing.it:
  195.  
  196.         IF count% > 3 THEN\
  197.         count% = 1:\
  198.         PRINT
  199.  
  200.         READ #1;LINE input.line$
  201.  
  202.         IF MID$(input.line$,4,5) = "DONE:" THEN\
  203.         PRINT input.line$:\
  204.         GOTO doing.it
  205.  
  206.         IF LEFT$(input.line$,9) = "         " THEN\
  207.         PRINT input.line$:\
  208.         GOTO all.printed
  209.  
  210.         PRINT LEFT$(input.line$,20);
  211.  
  212.         IF count% = 1 OR count% = 2 THEN \
  213.         PRINT sep$;
  214.  
  215.         line% = line% + 1
  216.         count% = count% + 1
  217.  
  218.         IF line% <= 171 THEN GOTO doing.it
  219.  
  220.         line% = 1
  221.  
  222.         PRINT formfeed$
  223.  
  224.         page% = page% + 1
  225.  
  226.         GOTO new.page
  227.  
  228.     WEND
  229.  
  230. all.printed:
  231.  
  232.     CONSOLE
  233.  
  234.     CLOSE 1
  235.  
  236.     PRINT:PRINT "All done." + bell$
  237.  
  238.     STOP
  239.  
  240. REM ------------------------[ output to diskfile ]----------------------------\
  241.  
  242. create.it:
  243.  
  244.     IF NOT SIZE(file.mast$) THEN \
  245.     PRINT:PRINT:PRINT "Unable to open MAST.LST on current du:" + bell$:\
  246.     STOP \
  247.     ELSE \
  248.     OPEN file.mast$ AS 1
  249.  
  250. enter.the.date:
  251.  
  252.     PRINT
  253.     PRINT bell$:INPUT\
  254. "             Enter today's date (MM/DD/YY): ";LINE todays.date$
  255.  
  256.     IF LEN(todays.date$) <> 8 THEN GOTO enter.the.date
  257.  
  258.     PRINT:PRINT:PRINT\
  259. "Enter drive to create MASTER.LST on (A,B,C,or c/r for default): ";
  260.  
  261. which.drive:
  262.  
  263.     PRINT bell$;
  264.  
  265.     answer% = INKEY
  266.  
  267.     IF answer% = 0dh THEN\
  268.     PRINT "Default":\
  269.     file.form$ = "MASTER.LST":\
  270.     GOTO get.on.with.it
  271.  
  272.     IF UCASE$(CHR$(answer%)) = "A" THEN\
  273.     PRINT "A":\
  274.     file.form$ = "A:MASTER.LST":\
  275.     GOTO get.on.with.it
  276.  
  277.     IF UCASE$(CHR$(answer%)) = "B" THEN\
  278.     PRINT "B":\
  279.     file.form$ = "B:MASTER.LST":\
  280.     GOTO get.on.with.it
  281.  
  282.     IF UCASE$(CHR$(answer%)) = "C" THEN\
  283.     PRINT "C":\
  284.     file.form$ = "C:MASTER.LST":\
  285.     GOTO get.on.with.it
  286.  
  287.     GOTO which.drive
  288.  
  289. get.on.with.it:
  290.  
  291.     IF SIZE(file.form$) THEN\
  292.     PRINT:PRINT:PRINT:PRINT bell$ +\
  293. "          Program ABORTED!  MASTER.LST file already exists!":\
  294.     STOP\
  295.     ELSE\
  296.     CREATE file.form$ AS 2
  297.  
  298.     PRINT:PRINT:PRINT\
  299. "                ++ Creating  " + file.form$ + "  file ++";
  300.  
  301.     IF END #1 THEN all.formatted
  302.  
  303.     count% = 1
  304.  
  305.     PRINT USING "&";#2;\
  306.     "MASTER.LST - Master CP/M Catalog as of " + todays.date$
  307.  
  308.     PRINT USING "&";#2;" "
  309.     PRINT USING "&";#2;\
  310. "filename.typ  -  dsk  |  filename.typ  -  dsk  |  filename.typ  -  dsk"
  311.     PRINT USING "&";#2;\
  312. "----------------------------------------------------------------------"
  313.  
  314.     WHILE true%
  315.  
  316. formatting.it:
  317.  
  318.         IF count% = 4 THEN\
  319.         count% = 1:\
  320.         GOSUB output.the.line
  321.  
  322.         READ #1;LINE input.line$
  323.  
  324.         IF MID$(input.line$,4,5) = "DONE:" THEN\
  325.         done$ = input.line$:\
  326.         PRINT USING "&";#2;input.line$:\
  327.         GOTO formatting.it
  328.  
  329.         IF LEFT$(input.line$,9) = "         " THEN\
  330.         done2$ = input.line$:\
  331.         PRINT USING "&";#2;input.line$:\
  332.         GOTO all.formatted
  333.  
  334.         IF count% = 1 THEN file1$ = LEFT$(input.line$,20)
  335.  
  336.         IF count% = 2 THEN file2$ = LEFT$(input.line$,20)
  337.  
  338.         IF count% = 3 THEN file3$ = LEFT$(input.line$,20)
  339.  
  340.         count% = count% + 1
  341.  
  342.         GOTO formatting.it
  343.  
  344.     WEND
  345.  
  346. output.the.line:
  347.  
  348.     PRINT USING "& & & & &";#2;file1$,fil.sep$,file2$,fil.sep$,file3$
  349.  
  350.     RETURN
  351.  
  352. all.formatted:
  353.  
  354.     CLOSE 1
  355.     CLOSE 2
  356.  
  357.     PRINT:PRINT:PRINT:PRINT\
  358. "                       " + done$
  359.     PRINT\
  360. "                       " + done2$ + bell$
  361.  
  362.     STOP
  363.  
  364. REM ----------------------------[ error handler ]----------------------------\
  365.  
  366. error.handler:
  367.  
  368.     IF ERR = "DW" OR ERR = "ME" THEN\
  369.     PRINT:PRINT\
  370. "                Operating system reports an error!!":\
  371.     PRINT:PRINT\
  372. "                Check disk for FREE space available" + bell$\
  373.     ELSE\
  374.     PRINT:PRINT bell$ +\
  375. "                Error Code --> ";err
  376.  
  377.     STOP
  378.  
  379. REM --------------------------[ the end ... ]-------------------------------\
  380.