home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / mbug / mbug036.arc / UNSPOOL.DOC < prev    next >
Text File  |  1979-12-31  |  14KB  |  407 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.        Documentation for UNSPOOL Version 3.2
  8.             for    CP/M 2.0 and up.
  9.  
  10. AUTHOR:
  11.             Gary P. Novosielski
  12.                Rutherford, NJ
  13.                (201) 935-4087
  14.            Evenings and    weekends.
  15.  
  16. INTRODUCTION:
  17.  
  18.      UNSPOOL  is  a    program    to send    a standard CP/M    file
  19. such as    a .PRN or .ASM file to the system's  list  or  punch
  20. device,      while     still    allowing  nearly  all  other  system
  21. operations to take place. The  file  is     transferred  during
  22. periods    when console is    waiting    for input.
  23.  
  24. SYNTAX:
  25.  
  26.      UNSPOOL [d:]filename.ext [dev]
  27.          or
  28.      UNSPOOL dummy OFF
  29.  
  30.      [square brackets denote optional parameters]
  31.  
  32. Where           d:           is  an  optional     drive    spec
  33.                    such as    A:  or    B:.  If     not
  34.                    entered,     the current default
  35.                    drive is    assumed.
  36.  
  37.            filename.ext    is the name of the CP.M    file
  38.                    to be printed/punched.
  39.  
  40.            dev           is  the    symbolic name of the
  41.                    output  device  to  be  used.
  42.                    Note   that   the  colon     (:)
  43.                    usually    present     in   device
  44.                    names  is  NOT entered. Valid
  45.                    devices    are  LST  and    PUN,
  46.                    which  refer  to    the physical
  47.                    devices     assigned   to     the
  48.                    logical LST: and    PUN: devices
  49.                    at   the      time     UNSPOOL  is
  50.                    started,    as well     as  PAG,  a
  51.                    special    name  recognized  by
  52.                    unspool.    PAG  refers  to     the
  53.                    same  physical device as    LST,
  54.                    but supplies automatic paging
  55.                    of output by  inserting    Form
  56.                    Feed   characters   into     the
  57.                    output. This  is     useful     for
  58.                    UNSPOOLing    source   files,
  59.                    which  normally    contain      no
  60.                    Form  Feeds.  LST is normally
  61.                    used for    .PRN files, or other
  62.                    types which have     Form  Feeds
  63.  
  64.  
  65. Revised    82-01-06          Page 1 of    6
  66.  
  67.  
  68.  
  69.  
  70.  
  71.  
  72.  
  73.                    already     included.   If     not
  74.                    specified, LST is assumed.
  75.  
  76.            OFF           If OFF is  specified  instead
  77.                    of   a    device     name,     the
  78.                    operator    will be    offered     the
  79.                    option  of cancelling UNSPOOL
  80.                    if it is    already    running.
  81.  
  82.            dummy           Because the word    OFF  is     the
  83.                    second  parameter, a filespec
  84.                    is still    needed.    A dummy    name
  85.                    of  "."    will  suffice  as  a
  86.                    place holder.
  87.  
  88. EXAMPLES:
  89.      UNSPOOL TEST.PRN
  90.          will    send  the  file     TEST.PRN  from     the
  91. current    default    drive to the current LST: device.
  92.  
  93.      UNSPOOL A:TEST.PRN LST
  94.          is  exactly  equivalent   to    the   above,
  95. assuming  drive    A is the default drive.    Note that the device
  96. name has no trailing colon.
  97.  
  98.      UNSPOOL B:TEST.ASM PAG
  99.          will send the file TEST.ASM from  drive  B:
  100. to  the     current  LST:    device,    regardless of which drive is
  101. currently the default. Form Feeds will be inserted  whenever
  102. the page length    would exceed 56    lines. If any Form Feeds are
  103. contained  in TEST.ASM,    they will also start a new page. The
  104. program    assumes     that  the  paper  has    been  positioned  to
  105. top-of-form for    the first page by the operator.
  106.  
  107.      UNSPOOL B:ZINGER.HEX PUN
  108.          will  send  the  file ZINGER.HEX from the B
  109. drive to the current PUN: device. Note that  the  device  is
  110. "PUN" not "PUN:".
  111.  
  112.      UNSPOOL . OFF
  113.      UNSPOOL *.* OFF
  114.      UNSPOOL OFF OFF
  115.          all  cause an operator    prompt:    "Do you    want
  116. to cancel UNSPOOL?" A single "Y"  or  "N"  (Yes     or  No)  is
  117. accepted from the console as a response. Any other character
  118. is assumed to mean "No".
  119.  
  120.      UNSPOOL OFF
  121.          causes    the file "OFF.     " to be sent to the
  122. list device.
  123.  
  124.  
  125.  
  126.  
  127.  
  128.  
  129.  
  130.  
  131. Revised    82-01-06          Page 2 of    6
  132.  
  133.  
  134.  
  135.  
  136.  
  137.  
  138.  
  139. OPERATION:
  140.  
  141.      Upon  loading,     the  program checks to    see that the
  142. the BIOS vector    table pointed to by  the  word    at  location
  143. 0001H  is  valid,  i.e.     is  a    table  of  JMP    instructions
  144. containing at least 16 entries.    If an error is detected, the
  145. program    will display an    error message  on  the    console     and
  146. attempt    to warm-boot CP/M.
  147.  
  148.      If  found, the    BIOS vector table is copied into the
  149. program    segment    which will remain active  during  unspooling
  150. so that    subsequent application programs    running    concurrently
  151. with UNSPOOL will still    have access to the BIOS.
  152.  
  153.      This  table  is  modified  to trap attempts to    warm
  154. boot the system, perform direct    console     input,     or  perform
  155. direct    disk  sector  writes.  Direct  sector writes are not
  156. permitted (see notes) under UNSPOOL. Warmboot  requests     and
  157. direct console input are handled as described below.
  158.  
  159.      The  address of the old BIOS vector table, the    BDOS
  160. entry address, and the CCP return address (from    the  top  of
  161. the stack on entry) are    saved in memory.
  162.  
  163.      The  "dev"  parameter    from  the  command  line  is
  164. checked. If not    valid, an error    message    is typed and control
  165. returns    to the CCP.
  166.  
  167.      If the    "dev" parameter     is  the  literal  OFF,     the
  168. program     executes  a  BDOS  funcion  0    (System     Reset)     and
  169. terminates.
  170.  
  171.      The file named    in the command line  is     opened     for
  172. input.    If not present,    the command is echoed to the console
  173. followed by a "?" and control returns to CCP.
  174.  
  175.      If the    drive is not explicit, the  current  default
  176. drive  number  is  recorded  internally     in case the default
  177. drive is changed while UNSPOOL is active.
  178.  
  179.      The current  user  number  and     IOBYTE     values     are
  180. checked     and stored internally so that if the user number is
  181. changed, UNSPOOL will still be able to read the    input  file.
  182. If  the    device is changed (using STAT LST:=TTY:    for example)
  183. unspool    will continue to use the physical device  in  effect
  184. at  the     time  the  program  was  initiated. Any application
  185. programs will, however,    use  the  new  values  of  the    user
  186. number and the new physical device assignments.
  187.  
  188.      If  no     errors     were  detected,  the active program
  189. segment    which monitors all calls to BDOS is  relocated    into
  190. high  memory  just below the CCP. This reduces the available
  191. user program area by 3 K: 4 pages for the UNSPOOL supervisor
  192. segment,  and  8  pages     for  the  CCP    which  is   commonly
  193. overwritten by user program buffers. The BOOT and BDOS jumps
  194. in  low     memory     are modified to protect the CCP and UNSPOOL
  195.  
  196.  
  197. Revised    82-01-06          Page 3 of    6
  198.  
  199.  
  200.  
  201.  
  202.  
  203.  
  204.  
  205. supervisor segment.
  206.  
  207.      Control is then returned  to  the  console.  Normal
  208. CP/M  operation     will  then  be    possible. Characters will be
  209. sent from the input file to the    output device  whenever     the
  210. console    is idle.
  211.  
  212.      Whenever an application program or the    CCP requests
  213. console    input using BDOS functions 1 or    10, or a direct    call
  214. into  the  jump     table    at  A(BOOT + 1)    + 6,  the supervisor
  215. segment    intercepts these requests and checks to    see  if     the
  216. console     is  idle. If it is, characters    are transferred    from
  217. the input file    to  the     output     device     until    the  console
  218. becomes     ready,    i.e. a key is actually pressed.    At that    time
  219. the BDOS function or BIOS call    is  executed  normally,     and
  220. control    returns    to the application program.
  221.  
  222.      If  a    jump  to  BOOT    is  attempted,    this is    also
  223. intercepted by the UNSPOOL supervisor segment.    The  message
  224. "Unspooling in progress" is displayed on the console, and no
  225. actual     boot  takes  place.  Control  is  returned  to     the
  226. protected copy of the CCP instead. Before returning, a    disk
  227. reset  is  performed and the default DMA address is reset to
  228. 0080H to simulate a true warm-boot as closely as possible.
  229.  
  230.      If warmboot is    attempted using    BDOS function 0, the
  231. program    will prompt the    operator with the option to  cancel.
  232. If  the     response  is  "Y", warmboot is    performed using    BDOS
  233. function 0 as requested. Otherwise the request is handled as
  234. with normal warmboot, above.
  235.  
  236.      If a direct BIOS call to write    a sector to disk  is
  237. attempted,   UNSPOOL   will  display  the  message  "Invalid
  238. operation attempted under  UNSPOOL.  Program  aborted."     The
  239. application  program  will  be    terminated, but    UNSPOOL    will
  240. continue to run. (See Notes.) This restriction applies    only
  241. to direct BIOS writes. All normal file-oriented    (BDOS) reads
  242. and writes are fully supported under UNSPOOL.
  243.  
  244.      When the input    file is    completely transferred,    or a
  245. 1AH  end-of-file  character  is     detected,  the    spool writer
  246. becomes     inactive,  and     passes     on  previously     intercepted
  247. requests  immediately,    without    checking console status. The
  248. sole exception to this is that direct BIOS writes are  still
  249. not  permitted    until  the  next  warmboot.  When  the    next
  250. warm-boot request is detected, the supervisor removes itself
  251. from memory by executing a true    warm-boot, and    informs     the
  252. operator with the message "UNSPOOL completed.".
  253.  
  254.  
  255.  
  256.  
  257.  
  258.  
  259.  
  260.  
  261.  
  262.  
  263. Revised    82-01-06          Page 4 of    6
  264.  
  265.  
  266.  
  267.  
  268.  
  269.  
  270.  
  271. NOTES:
  272.  
  273.      While    UNSPOOL     makes    every  effort to restore the
  274. values of the DMA address, USER    number,    IOBYTE,    and  default
  275. disk  drive  before  returning    control     to  the  program, a
  276. hardware reset may leave these    values    in  an    undetermined
  277. state if unspooling was    actually taking    place at the time.
  278.  
  279.      When  function     10,  Read  Console  Buffer is used,
  280. UNSPOOL    will transfer characters only until the    first key is
  281. pressed. At that time, no  characters  will  be     transferred
  282. until  the  input  line     is completed by pressing a carriage
  283. return.
  284.  
  285.      UNSPOOL requires that the List    Status    function  in
  286. the  BIOS  was    properly  implemented at system    installation
  287. time. UNSPOOL will not send characters to  the    LST  or     PAG
  288. devices     unless     it recieves a ready condition from the    List
  289. Status routine.    If the PUN device is used, no  status  check
  290. is  provided  for  by  CP/M, so    a not-ready condition on the
  291. punch may cause    the system to hang up if PUN  was  specified
  292. on  the     command  line.     See the CP/M Alteration Guide for a
  293. discussion of the BIOS List Status routine.
  294.  
  295.      Although the console is  polled  frequently  during
  296. the  unspooling    of the file, some of the diskette operations
  297. may take a second or two to complete, for example when a new
  298. extent is opened. Since    the console  is     not  polled  during
  299. this  period,  high  speed  typing  may     cause    one  or    more
  300. characters to be lost. This effect will    vary depending    upon
  301. the program being run, the types of input reqests (character
  302. or  line) it uses, and the relative locations on disk of the
  303. spool file and any files in use    by the program.    As a result,
  304. heads-down typing  is  not  reccommended  while     UNSPOOL  is
  305. running.  Some    experience  with UNSPOOL will teach the    user
  306. when caution is    required.
  307.  
  308.      Although it would be  possible     to  perform  direct
  309. BIOS  writes  while  unspool  is  active,  (indeed  this was
  310. permitted in earlier versions) this action  is    now  trapped
  311. and prohibited.    The reason this    was deemed necessary is    that
  312. some existing software,    for example DU.COM, uses direct    BIOS
  313. writes in a manner which could cause a major system crash if
  314. allowed    under UNSPOOL.
  315.  
  316.      The  problem  arises  when a program calls the    BIOS
  317. directly (it is    actually calling UNSPOOL's copy    of the    BIOS
  318. table)    to  select  the    drive, set the track and sector, and
  319. perform    direct disk I/O    without     going    through     the  normal
  320. CP/M  file  handling  system.  This causes no problem if the
  321. selecting, addressing, and I/O are all done together, but if
  322. a console input    is done    between    the time the disk address is
  323. set and    the call to read or write a sector, the    disk address
  324. may no longer be valid.    This could cause the  sector  to  be
  325. written     to  the  wrong     disk  address,     or  even  over     the
  326. directory.
  327.  
  328.  
  329. Revised    82-01-06          Page 5 of    6
  330.  
  331.  
  332.  
  333.  
  334.  
  335.  
  336.  
  337.  
  338.      This is true because a    request    for console input is
  339. taken by UNSPOOL  as  an  opportunity  to  perform  its     own
  340. functions,  which themselves include disk I/O. Although    this
  341. problem    could be eliminated by insuring    that  console  input
  342. is not allowed to intervene between disk addressing and    disk
  343. I/O, it    is not in the author's power to    rewrite    all existing
  344. applications  software.    This better-safe-than-sorry trap was
  345. therefore included.
  346.  
  347.      Note that direct reads    are NOT    trapped, since    they
  348. do  not     have the same potential for disaster, but still may
  349. be  unreliable    for  the  same    reasons.  It  is   therefore
  350. recommended  that  software using direct disk I/O not be run
  351. under UNSPOOL. Normal CP/M file-oriented  (BDOS)  reads     and
  352. writes    always    re-select  and    re-address  the     disk before
  353. reading    or writing a sector, so    no similar problem exists in
  354. the vast majority of software which  uses  the    normal    CP/M
  355. file handling system.
  356.  
  357. INSTALLATION:
  358.  
  359.      The  source  file  is written for assembly with the
  360. MAC assembler. The .HEX    file produced is LOADed     to  a    .COM
  361. file  and executed just    as any normal program. Relocation is
  362. done at    execution time as described above.
  363.  
  364.      If the    assembly option    EXPAND is set to  TRUE,     tab
  365. characters in the input    file will be expanded to spaces    with
  366. assumed     tab  stops  at     every    eighth    print position.    This
  367. option should be set to    FALSE if the printer driver  or     the
  368. printer    itself can properly handle the tab character. If the
  369. option    PHYSBS    is  set     to TRUE, a backspace character    will
  370. cause the tab expansion     algorithm  to    recognize  backspace
  371. characters  and     decrement the column count when a backspace
  372. is encountered in the input file. This option should be     set
  373. to FALSE if backspace characters are ignored by    the printer.
  374. All  other  control codes except carriage return are assumed
  375. to be non- printing, and are ignored by    the algorithm.
  376.  
  377.      If tab    expansion is included, the version number in
  378. the signon message will    be followed by "/T".
  379.  
  380.      The default page size used by the PAG device is set
  381. at 56 in the distribution version. This    value may be changed
  382. by altering the    value  of  the    assembly-time  variable     LPP
  383. (lines per page).
  384.  
  385.               Gary Novosielski
  386.  
  387.  
  388.  
  389.  
  390.  
  391.  
  392.  
  393.  
  394.  
  395. Revised    82-01-06          Page 6 of    6
  396.  
  397.  
  398. -time  variable     LPP
  399. (lines per page).
  400.  
  401.               Gary Novosielski
  402.  
  403.  
  404.  
  405.  
  406.  
  407.