mirror of https://github.com/AR1972/DOS3.3
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
213 lines
6.3 KiB
213 lines
6.3 KiB
; SCCSID = @(#)pridefs.asm 4.4 85/07/17
|
|
title 3.00 Print Utility
|
|
|
|
;MS-DOS PSPRINT/PRINT program for background printing of text files
|
|
; to the list device.
|
|
;
|
|
; IBM SERVER VERSION
|
|
;
|
|
; INT 28H is a software interrupt generated by the DOS
|
|
; in its I/O wait loops. This spooler can be assembled for
|
|
; operation using only this interrupt which is portable from
|
|
; system to system. It may also be assembled to use a hardware
|
|
; timer interrupt in addition to the software INT 28H. The
|
|
; purpose of using hardware interrupts is to allow printing to
|
|
; continue during programs which do not enter the system and
|
|
; therefore causes the INT 28H to go away. A timer interrupt is
|
|
; chosen in preference to a "printer buffer empty" interrupt
|
|
; because PRINT in the timer form is generic. It can be given
|
|
; the name of any currently installed character device as the
|
|
; "printer", this makes it portable to devices which are
|
|
; installed by the user even in the hardware case. It could be
|
|
; modified to use a buffer empty interrupt (no code is given for
|
|
; this case), if this is done the PROMPT and BADMES messages and
|
|
; their associated code should be removed as PRINT will then be
|
|
; device specific.
|
|
;
|
|
; V1.00 07/03/82
|
|
; V2.00 07/05/83 A.Reynolds
|
|
; New INT 2FH interface, Pathnames, context switch.
|
|
; V2.50 09/14/83 M.A.Ulloa
|
|
; Turned it back to a print
|
|
; 11/21/83 M.A.Ulloa
|
|
; Repaired bug in file cancel code
|
|
; 11/28/83 M.A.Ulloa
|
|
; Added int 23 and 24 handlers to transient.
|
|
; 01/27/84 M.A.Ulloa
|
|
; Allways checks for valid drive.
|
|
; V3.00 02/03/84 M.A.Ulloa
|
|
; Partitioned so as to assemble on a PC
|
|
; By the by, it is V3.00 now.
|
|
; 05/23/85 K.G.Schulmeisters
|
|
; Chains into INT19 (bootstrap) to unhook
|
|
; INT_1C (timer) and INT_15 (AT's Wait On Event)
|
|
;
|
|
|
|
|
|
; Aaron's rambling:
|
|
;
|
|
; BEWARE ALL YEE WHO ENTER HERE.
|
|
; PRINT is an amazingly complex program. MS-DOS versions below 3.00 are
|
|
; NOT re-entrant, this means that this utility is basically not a
|
|
; possibility. It gets by on the fact that it is written by the same
|
|
; person who wrote the OS. Since you are not that person, you must be very
|
|
; careful about making any modification to this utility. There are a
|
|
; number of things which may seem to be unnecessary on first examination.
|
|
; BEWARE, almost every line of code is there for a very good reason. The
|
|
; order of things is very carefully chosen. PRINT is full of potential
|
|
; windows, make sure that you do not open one by careless modification. Do
|
|
; not look for a lot of help from the comments, a complete explanation
|
|
; would probably fill a book. A succesful modifier will have an in-depth
|
|
; knowledge of the internal function of MS-DOS, and of the PRINT utility
|
|
; itself through in depth study of the comments AND the code.
|
|
|
|
|
|
subttl General Definition
|
|
page
|
|
|
|
|
|
FALSE EQU 0
|
|
TRUE EQU NOT FALSE
|
|
|
|
;IBM EQU TRUE
|
|
;IBMVER EQU IBM
|
|
;MSVER EQU FALSE
|
|
|
|
include version.inc
|
|
|
|
IF MSVER
|
|
HARDINT EQU FALSE ;No hardware ints
|
|
AINT EQU FALSE ;No need to do interrupt acknowledge
|
|
ENDIF
|
|
|
|
IF IBM
|
|
HARDINT EQU TRUE
|
|
INTLOC EQU 1CH ;Hardware interrupt location (Timer)
|
|
REBOOT EQU 19H ;ROM BIOS "Bootstrap"
|
|
AINT EQU TRUE ;Acknowledge interrupts
|
|
EOI EQU 20H ;End Of Interrupt "instruction"
|
|
AKPORT EQU 20H ;Interrupt Acknowledge port
|
|
ENDIF
|
|
|
|
; The following values have to do with the ERRCNT variable and the CNTMES
|
|
; message. The values define levels at wich it is assumed an off-line error
|
|
; exists. ERRCNT1 defines the value of ERRCNT above which the CNTMES message
|
|
; is printed by the transient. ERRCNT2 defines the value of ERRCNT above
|
|
; which the resident will give up trying to print messages on the printer, it
|
|
; is much greater than ERRCNT1 because a much tighter loop is involved. The
|
|
; bounding event which determines the correct value is the time required to
|
|
; do a form feed.
|
|
|
|
IF IBM
|
|
ERRCNT1 EQU 1500
|
|
ERRCNT2 EQU 20000
|
|
ELSE
|
|
ERRCNT1 EQU 1500
|
|
ERRCNT2 EQU 20000
|
|
ENDIF
|
|
|
|
|
|
;WARNING DANGER WARNING:
|
|
; PRINT is a systems utility. It is clearly understood that it may have
|
|
; to be entirely re-written for future versions of MS-DOS. The following
|
|
; TWO vectors are version specific, they may not exist at all in future
|
|
; versions. If they do exist, they may function differently.
|
|
; ANY PROGRAM WHICH IMITATES PRINTS USE OF THESE VECTORS IS ALSO A SYSTEMS
|
|
; UTILITY AND IS THEREFORE NOT VERSION PORTABLE IN ANY WAY SHAPE OR FORM.
|
|
; YOU HAVE BEEN WARNED, "I DID IT THE SAME WAY PRINT DID" IS NOT AN REASON
|
|
; TO EXPECT A PROGRAM TO WORK ON FUTURE VERSIONS OF MS-DOS.
|
|
|
|
SOFTINT EQU 28H ;Software interrupt generated by DOS
|
|
ComInt EQU 2FH ;Communications interrupt used by PSPRINT
|
|
; Multiplex number 0 and 1
|
|
|
|
;----- Default (and Minimal) Print queue length
|
|
DefQueueLen equ 10 ; 10 files worth
|
|
MinQueueLen equ 4 ; 4 files worth min
|
|
MaxQueueLen equ 32 ; 32 files worth max.
|
|
|
|
;----- Maximum length of a file name (incl nul)
|
|
MaxFileLen equ 64
|
|
|
|
; **************** Bogosity Warning *****************
|
|
; Below is the equate that MaxFile SHOULD be. Since the 3.0/3.1 documentation
|
|
; documents each queue entry as being 64 chars long. Yes it is known that
|
|
; that causes Print to misbehave on files deep in trees. But for
|
|
; compatibilities sake, IBM insisted that we change the code back to the
|
|
; way it was.
|
|
;MaxFileLen equ 63 + 2 + 12 ; 63 characters as Command.com's
|
|
; max. path length
|
|
; 2 character for the Drive ext.
|
|
; 12 characters for the max. valid
|
|
; DOS filename
|
|
|
|
|
|
.xlist
|
|
.xcref
|
|
BREAK MACRO subtitle
|
|
SUBTTL subtitle
|
|
PAGE
|
|
ENDM
|
|
|
|
stdin EQU 0
|
|
stdout EQU 1
|
|
stderr EQU 2
|
|
stdaux EQU 3
|
|
stdprn EQU 4
|
|
|
|
INCLUDE DEVSYM.INC
|
|
INCLUDE SYSCALL.INC
|
|
INCLUDE ERROR.INC
|
|
INCLUDE SYSVAR.INC
|
|
INCLUDE FIND.INC
|
|
include dpl.inc
|
|
INCLUDE PDB.INC
|
|
INCLUDE SYSCALL.INC
|
|
INCLUDE MI.INC
|
|
include versiona.inc
|
|
.list
|
|
.cref
|
|
|
|
|
|
error_busy EQU 9
|
|
error_queue_full EQU 8
|
|
error_name_too_long EQU 12
|
|
|
|
IF1
|
|
IF IBM
|
|
%out IBM VERSION
|
|
ELSE
|
|
%out MS-DOS VERSION
|
|
ENDIF
|
|
ENDIF
|
|
|
|
BREAK <Segment Definitions>
|
|
|
|
|
|
CodeR Segment public para
|
|
CodeR EndS
|
|
|
|
Code Segment public para
|
|
Code EndS
|
|
|
|
Data Segment public byte
|
|
Data EndS
|
|
|
|
Stack Segment Stack
|
|
Stack Ends
|
|
|
|
DG group Code,Data,Stack
|
|
|
|
SaveReg MACRO reglist ;; push those registers
|
|
IRP reg,<reglist>
|
|
PUSH reg
|
|
ENDM
|
|
ENDM
|
|
.xcref SaveReg
|
|
|
|
RestoreReg MACRO reglist ;; pop those registers
|
|
IRP reg,<reglist>
|
|
POP reg
|
|
ENDM
|
|
ENDM
|
|
|