home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / sigm / sigmv048.ark / UNSPOOL.DOC < prev    next >
Text File  |  1984-04-29  |  8KB  |  177 lines

  1. UNSPOOL.ASM            81-11-12
  2. for CP/M 2.0 and up.
  3.  
  4. AUTHOR:            Gary P. Novosielski
  5.  
  6. INTRODUCTION:
  7.  
  8.     UNSPOOL (Ver 2.3) is a program to send a standard
  9. CP/M file such as a .PRN or .ASM file to the system's list
  10. or punch device, while still allowing other system operations
  11. to take place.  The file is transferred during periods when
  12. console is waiting for input.
  13.  
  14. SYNTAX:
  15.  
  16.     UNSPOOL [d:]filename.ext [dev]
  17.     [square brackets denote optional parameters]
  18.  
  19.     Where    d:        is an optional drive spec
  20.                 such as A: or B:.  If not
  21.                 entered, the current default
  22.                 drive is assumed.
  23.  
  24.         filename.ext    is the name of the CP.M file
  25.                 to be printed/punched
  26.  
  27.         dev        is the symbolic name of the
  28.                 output device to be used.
  29.                 Valid devices are LST and
  30.                 PUN.  Note that the colon (:)
  31.                 usually present in these names
  32.                 is NOT entered.  If not
  33.                 specified, the LST: device is
  34.                 assumed.
  35. Examples:
  36.     UNSPOOL TEST.PRN
  37.         will send the file TEST.PRN from the current
  38. default drive to the current LST: device.
  39.  
  40.     UNSPOOL A:TEST.PRN LST
  41.         is exactly equivalent to the above, assuming
  42. drive A is the default drive.  Note that the device name has no
  43. trailing colon.
  44.  
  45.     UNSPOOL B:ZINGER.HEX PUN
  46.         will send the file ZINGER.HEX from the B drive
  47. to the current PUN: device regardless of which drive is
  48. currently the default.  Note that the device is "PUN"
  49. not "PUN:".
  50.  
  51. OPERATION:
  52.  
  53.     Upon loading, the program checks to see that the
  54. the BIOS vector table pointed to by the word at location
  55. 0001H is valid, i.e. is a table of JMP instructions containing
  56. at least 16 entries.  If an error is detected, the program
  57. will display an error message on the console and attempt to
  58. warm-boot CP/M.
  59.     If found, the BIOS vector table is copied into the
  60. program segment which will remain active during unspooling
  61. so that subsequent application programs running concurrently
  62. with UNSPOOL will still have access to the BIOS.
  63.     The address of the old BIOS vector table, the BDOS
  64. entry address, and the CCP return address (from the top of the
  65. stack on entry) are saved in memory.
  66.     The "dev" parameter from the command line is checked.
  67. If not valid, an error message is typed and control returns
  68. to the CCP.
  69.     The file named in the command line is opened for
  70. input.  If not present, the filename is echoed to the console
  71. followed by a "?" and control returns to CCP.
  72.     If the drive is not explicit, the current default
  73. drive number is recorded internally in case the default drive
  74. is changed while UNSPOOL is active.
  75.     The current user number and IOBYTE values are checked
  76. and stored internally so that if the user number is changed,
  77. UNSPOOL will still be able to read the input file.  If the
  78. device is changed (using STAT LST:=TTY: for example) unspool
  79. will continue to use the physical device in effect at the
  80. time the program was initiated.  Any application programs
  81. will, however, use the new values of the user number and the
  82. new physical device assignments.
  83.     If no errors were detected, the active program segment
  84. which monitors all calls to BDOS is relocated into high memory
  85. just below the CCP.  This reduces the available user program
  86. area by 2.75 K:  3 pages for the UNSPOOL supervisor segment,
  87. and 8 pages for the CCP which is commonly overwritten by user
  88. program buffers.  The BOOT and BDOS jumps in low memory are
  89. modified to protect the CCP and UNSPOOL supervisor segment.
  90.     Control is then returned to the console.  Normal
  91. CP/M operation will then be possible. Characters will be
  92. sent from the input file to the output device whenever the
  93. console is idle.
  94.  
  95.     Whenever an application program or the CCP requests
  96. console input using BDOS functions 1 or 10, the supervisor
  97. segment intercepts these requests and checks to see if the
  98. console is idle.  If it is, characters are transferred from
  99. the input file to the output device until the console becomes
  100. ready, i.e. a key is actually pressed.  At that time the
  101. BDOS function is executed normally, and control returns to the
  102. application program.
  103.     If a jump to BOOT is attempted, this is also
  104. intercepted by the UNSPOOL supervisor segment.  The message
  105. "Unspooling in progress" is displayed on the console, and
  106. no actual boot takes place.  Control is returned to the
  107. protected copy of the CCP instead.  Before returning, a disk
  108. reset is performed and the default DMA address is reset to
  109. 0080H to simulate a true warm-boot as closely as possible.
  110.     When the input file is completely transferred, or
  111. a 1AH end-of-file character is detected, the supervisor
  112. becomes inactive, and passes on all BDOS requests immediately,
  113. without checking console status.  When the next warm-boot
  114. request is detected, the supervisor removes itself from memory
  115. by executing a true warm-boot, and informs the operator with
  116. the message "UNSPOOL completed.".
  117.  
  118. NOTES:
  119.  
  120.     While UNSPOOL makes every effort to restore the values
  121. of the DMA address, USER number, IOBYTE, and default disk drive
  122. before returning control to the program, a hardware reset may
  123. leave these values in an undetermined state if unspooling was
  124. actually taking place at the time.
  125.     The supervisor will not intercept a call to BDOS
  126. function 0.  This will cause a true warm boot to occurr,
  127. terminating unspool immediately.  Normally application programs
  128. should reboot by jumping to location 0000H, not by calling
  129. BDOS function 0.
  130.     When function 10, Read Console Buffer is used, UNSPOOL
  131. will transfer characters only until the first key is pressed.
  132. At that time, no characters will be transferred until the
  133. input line is completed by pressing a carriage return.
  134.     UNSPOOL requires that the List Status function in
  135. the BIOS was properly implemented at system installation time.
  136. UNSPOOL will not send characters to the LST: device unless it
  137. recieves a ready condition from the List Status routine.  If
  138. the PUN: device is used, no status check is provided for by
  139. CP/M, so a not-ready condition on the punch may cause the
  140. system to hang up if PUN was specified on the command line.
  141. See the CP/M Alteration Guide for a discussion of the BIOS
  142. List Status routine.
  143.     Although the console is polled frequently during the
  144. unspooling of the file, some of the diskette operations may
  145. take a second or two to complete, for example when a new extent
  146. is opened.  Since the console is not polled during this period,
  147. high speed typing may cause one or more characters to be lost.
  148. This effect will vary depending upon the program being run,
  149. the types of input reqests (character or line) it uses, and
  150. the relative locations on diskette of the spool file and any
  151. files in use by the program.  As a result, heads-down typing
  152. is not reccommended while UNSPOOL is running.  Some experience
  153. with UNSPOOL will teach the user when caution is required.
  154.  
  155. INSTALLATION:
  156.  
  157.     The source file is written for assembly with the
  158. MAC assembler.  The .HEX file produced is LOADed to a .COM
  159. file and executed just as any normal program.  Relocation is
  160. done at execution time as described above.
  161.     If the assembly option EXPAND is set to TRUE, tab
  162. characters in the input file will be expanded to spaces with
  163. assumed tab stops at every eighth print position.  This option
  164. should be set to FALSE if the printer driver or the printer
  165. itself can properly handle the tab character.  If the option
  166. PHYSBS is set to TRUE, a backspace character will cause the
  167. tab expansion algorithm to recognize backspace characters
  168. and decrement the column count when a backspace is encountered
  169. in the input file.  This option should be set to FALSE if
  170. backspace characters are ignored by the printer.  All other
  171. control codes except carriage return are assumed to be non-
  172. printing, and are ignored by the algorithm.
  173.     If tab expansion is included, the version number
  174. in the signon message will be followed by "/T".
  175.  
  176.             Gary Novosielski
  177.