home *** CD-ROM | disk | FTP | other *** search
-
-
- Documentation for UNSPOOL Version 3.1
-
-
- for CP/M 2.0 and up.
-
- AUTHOR:
- Gary P. Novosielski
- Rutherford, NJ
- (201) 935-4087
- Evenings and weekends.
-
- INTRODUCTION:
-
- UNSPOOL (Ver 3.0) is a program to send a standard
- CP/M file such as a .PRN or .ASM file to the system's list
- or punch device, while still allowing almost all other
- system operations to take place. The file is transferred
- during periods when console is waiting for input.
-
- SYNTAX:
-
- UNSPOOL [d:]filename.ext [dev]
- or
- UNSPOOL dummy OFF
-
- [square brackets denote optional parameters]
-
- Where d: is an optional drive spec
- such as A: or B:. If not
- entered, the current default
- drive is assumed.
- filename.ext is the name of the CP.M file
- to be printed/punched.
- dev is the symbolic name of the
- output device to be used.
- Valid devices are LST and
- PUN. Note that the colon (:)
- usually present in these
- names is NOT entered. If not
- specified, the LST: device is
- assumed.
- OFF If OFF is specified instead
- of a device name, the
- operator will be offered the
- option of cancelling UNSPOOL
- if it is already running.
- dummy Because the word OFF is the
- second parameter, a filespec
- is still needed. A dummy name
- of "." will suffice as a
- place holder.
- Examples:
- UNSPOOL TEST.PRN
- will send the file TEST.PRN from the
-
-
- Revised 81-12-06 Page 1 of 6
-
- _______________________________________________________________
-
-
- Documentation for UNSPOOL Version 3.1
-
-
- current default drive to the current LST: device.
-
- UNSPOOL A:TEST.PRN LST
- is exactly equivalent to the above,
- assuming drive A is the default drive. Note that the device
- name has no trailing colon.
-
- UNSPOOL B:ZINGER.HEX PUN
- will send the file ZINGER.HEX from the B
- drive to the current PUN: device regardless of which drive
- is currently the default. Note that the device is "PUN" not
- "PUN:".
-
- UNSPOOL . OFF
- UNSPOOL *.* OFF
- UNSPOOL OFF OFF
- all cause an operator prompt: "Do you want
- to cancel UNSPOOL?" A single "Y" or "N" (Yes or No) is
- accepted from the console as a response. Any other character
- is assumed to mean "No".
-
- UNSPOOL OFF
- causes the file "OFF. " to be sent to the
- list device.
-
- OPERATION:
-
- Upon loading, the program checks to see that the
- the BIOS vector table pointed to by the word at location
- 0001H is valid, i.e. is a table of JMP instructions
- containing at least 16 entries. If an error is detected, the
- program will display an error message on the console and
- attempt to warm-boot CP/M.
-
- If found, the BIOS vector table is copied into the
- program segment which will remain active during unspooling
- so that subsequent application programs running concurrently
- with UNSPOOL will still have access to the BIOS.
-
- This table is modified to trap attempts to warm
- boot the system, perform direct console input, or perform
- direct disk sector writes. Direct sector writes are not
- permitted (see notes) under UNSPOOL. Warmboot requests and
- direct console input are handled as described below.
-
- The address of the old BIOS vector table, the BDOS
- entry address, and the CCP return address (from the top of
- the stack on entry) are saved in memory.
-
- The "dev" parameter from the command line is
- checked. If not valid, an error message is typed and control
- returns to the CCP.
-
- If the "dev" parameter is the literal OFF, the
- program executes a BDOS funcion 0 (System Reset) and
- terminates.
-
-
- Revised 81-12-06 Page 2 of 6
-
- _______________________________________________________________
-
-
- Documentation for UNSPOOL Version 3.1
-
-
-
- The file named in the command line is opened for
- input. If not present, the command is echoed to the console
- followed by a "?" and control returns to CCP.
-
- If the drive is not explicit, the current default
- drive number is recorded internally in case the default
- drive is changed while UNSPOOL is active.
-
- The current user number and IOBYTE values are
- checked and stored internally so that if the user number is
- changed, UNSPOOL will still be able to read the input file.
- If the device is changed (using STAT LST:=TTY: for example)
- unspool will continue to use the physical device in effect
- at the time the program was initiated. Any application
- programs will, however, use the new values of the user
- number and the new physical device assignments.
-
- If no errors were detected, the active program
- segment which monitors all calls to BDOS is relocated into
- high memory just below the CCP. This reduces the available
- user program area by 3 K: 4 pages for the UNSPOOL supervisor
- segment, and 8 pages for the CCP which is commonly
- overwritten by user program buffers. The BOOT and BDOS jumps
- in low memory are modified to protect the CCP and UNSPOOL
- supervisor segment.
-
- Control is then returned to the console. Normal
- CP/M operation will then be possible. Characters will be
- sent from the input file to the output device whenever the
- console is idle.
-
- Whenever an application program or the CCP requests
- console input using BDOS functions 1 or 10, or a direct call
- into the jump table at A(BOOT + 1) + 6, the supervisor
- segment intercepts these requests and checks to see if the
- console is idle. If it is, characters are transferred from
- the input file to the output device until the console
- becomes ready, i.e. a key is actually pressed. At that time
- the BDOS function or BIOS call is executed normally, and
- control returns to the application program.
-
- If a jump to BOOT is attempted, this is also
- intercepted by the UNSPOOL supervisor segment. The message
- "Unspooling in progress" is displayed on the console, and no
- actual boot takes place. Control is returned to the
- protected copy of the CCP instead. Before returning, a disk
- reset is performed and the default DMA address is reset to
- 0080H to simulate a true warm-boot as closely as possible.
-
- If warmboot is attempted using BDOS function 0, the
- program will prompt the operator with the option to cancel.
- If the response is "Y", warmboot is performed using BDOS
- function 0 as requested. Otherwise the request is handled as
- with normal warmboot, above.
-
-
-
- Revised 81-12-06 Page 3 of 6
-
- _______________________________________________________________
-
-
- Documentation for UNSPOOL Version 3.1
-
-
- If a direct BIOS call to write a sector to disk is
- attempted, UNSPOOL will display the message "Invalid
- operation attempted under UNSPOOL. Program aborted." The
- application program will be terminated, but UNSPOOL will
- continue to run. (See Notes.) This restriction applies only
- to direct BIOS writes. All normal file-oriented (BDOS) reads
- and writes are fully supported under UNSPOOL.
-
- When the input file is completely transferred, or a
- 1AH end-of-file character is detected, the supervisor
- becomes inactive, and passes on previously intercepted
- requests immediately, without checking console status. The
- sole exception to this is that direct BIOS writes are still
- not permitted until the next warmboot.
- When the next warm-boot request is detected, the
- supervisor removes itself from memory by executing a true
- warm-boot, and informs the operator with the message
- "UNSPOOL completed.".
-
- NOTES:
-
- While UNSPOOL makes every effort to restore the
- values of the DMA address, USER number, IOBYTE, and default
- disk drive before returning control to the program, a
- hardware reset may leave these values in an undetermined
- state if unspooling was actually taking place at the time.
-
- When function 10, Read Console Buffer is used,
- UNSPOOL will transfer characters only until the first key is
- pressed. At that time, no characters will be transferred
- until the input line is completed by pressing a carriage
- return.
-
- UNSPOOL requires that the List Status function in
- the BIOS was properly implemented at system installation
- time. UNSPOOL will not send characters to the LST: device
- unless it recieves a ready condition from the List Status
- routine. If the PUN: device is used, no status check is
- provided for by CP/M, so a not-ready condition on the punch
- may cause the system to hang up if PUN was specified on the
- command line. See the CP/M Alteration Guide for a discussion
- of the BIOS List Status routine.
-
- Although the console is polled frequently during
- the unspooling of the file, some of the diskette operations
- may take a second or two to complete, for example when a new
- extent is opened. Since the console is not polled during
- this period, high speed typing may cause one or more
- characters to be lost. This effect will vary depending upon
- the program being run, the types of input reqests (character
- or line) it uses, and the relative locations on disk of the
- spool file and any files in use by the program. As a result,
- heads-down typing is not reccommended while UNSPOOL is
- running. Some experience with UNSPOOL will teach the user
- when caution is required.
-
-
-
- Revised 81-12-06 Page 4 of 6
-
- _______________________________________________________________
-
-
- Documentation for UNSPOOL Version 3.1
-
-
- Although it would be possible to perform direct
- BIOS writes while unspool is active, (indeed this was
- permitted in earlier versions) this action is now trapped
- and prohibited. The reason this was deemed necessary is that
- some existing software, for example DU.COM, uses direct BIOS
- writes in a manner which could cause a major system crash if
- allowed under UNSPOOL.
-
- The problem arises when a program calls the BIOS
- directly (it is actually calling UNSPOOL's copy of the BIOS
- table) to select the drive, set the track and sector, and
- perform direct disk I/O without going through the normal
- CP/M file handling system. This causes no problem if the
- selecting, addressing, and I/O are all done together, but if
- a console input is done between the time the disk address is
- set and the call to read or write a sector, the disk address
- may no longer be valid. This could cause the sector to be
- written to the wrong disk address, or even over the
- directory.
-
- This is true because a request for console input is
- taken by UNSPOOL as an opportunity perform its own
- functions, which themselves include disk I/O. Although this
- problem could be eliminated by insuring that console input
- is not allowed to intervene between disk addressing and disk
- I/O, it is not in the author's power to rewrite all existing
- applications software. This better-safe-than-sorry trap was
- therefore included.
-
- Note that direct reads are NOT trapped, since they
- do not have the same potential for disaster, but still may
- be unreliable for the same reasons. It is therefore
- recommended that software using direct disk I/O not be run
- under UNSPOOL. Normal CP/M file-oriented (BDOS) reads and
- writes always re-select and re-address the disk before
- reading or writing a sector, so no similar problem exists in
- the vast majority of software which uses the normal CP/M
- file handling system.
-
- INSTALLATION:
-
- The source file is written for assembly with the
- MAC assembler. The .HEX file produced is LOADed to a .COM
- file and executed just as any normal program. Relocation is
- done at execution time as described above.
-
- If the assembly option EXPAND is set to TRUE, tab
- characters in the input file will be expanded to spaces with
- assumed tab stops at every eighth print position. This
- option should be set to FALSE if the printer driver or the
- printer itself can properly handle the tab character. If the
- option PHYSBS is set to TRUE, a backspace character will
- cause the tab expansion algorithm to recognize backspace
- characters and decrement the column count when a backspace
- is encountered in the input file. This option should be set
- to FALSE if backspace characters are ignored by the printer.
-
-
- Revised 81-12-06 Page 5 of 6
-
- _______________________________________________________________
-
-
- Documentation for UNSPOOL Version 3.1
-
-
- All other control codes except carriage return are assumed
- to be non- printing, and are ignored by the algorithm.
-
- If tab expansion is included, the version number in
- the signon message will be followed by "/T".
-
- Gary Novosielski
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Revised 81-12-06 Page 6 of 6
-
- _______________________________________________________________
-