home *** CD-ROM | disk | FTP | other *** search
-
- { TURBO PASCAL LIBRARY }
- { SPOOL.PAS }
- { Background Print Spooler }
- { for the IBM PC }
- {Copyright (c) 1986 Patrick J. Finan }
- {Modified for Turbo Pascal }
- { by Rob Murdock }
-
- CONST
- ERROR_MASK = $0001;
-
- TYPE
- REGLIST = RECORD
- AX,BX,CX,DX,BP,SI,DI,DS,ES,FLAGS: INTEGER
- END;
-
- SUBMITPACKET = RECORD
- LEVEL_CODE : BYTE;
- FILE_OFFSET,
- FILE_SEGMENT : INTEGER;
- END;
-
- ASCIIZ = STRING[64];
- BLOCK = ARRAY[1..2048] OF CHAR;
-
- VAR REGS: REGLIST;
- RETCODE, I: INTEGER;
- MAJOR,MINOR: BYTE;
- BLOCK1: BLOCK;
- FILESTR: ASCIIZ;
-
-
- PROCEDURE GET_DOS_VERSION(VAR MAJOR : BYTE;
- VAR MINOR : BYTE;
- VAR RETCODE : INTEGER);
-
- { MAJOR = 3 and MINOR = 10 when running under }
- { DOS 3.10. }
- { }
- { The values for RETCODE are as follows: }
- { 0 - DOS version in MAJOR and MINOR. }
- { >0 - Error encountered... MAJOR AND MINOR may }
- { not be valid. }
-
- VAR
- REGISTER : REGLIST;
-
- BEGIN {GET_DOS_VERSION}
- REGISTER.AX := $3000;
- INTR($21,REGISTER);
- IF (REGISTER.FLAGS AND ERROR_MASK) = ERROR_MASK
- THEN RETCODE := ORD(REGISTER.AX)
- ELSE RETCODE := 0;
- MAJOR := LO(REGISTER.AX) ;
- MINOR := HI(REGISTER.AX) ;
- END; {GET_DOS_VERSION}
-
- PROCEDURE GET_SPOOL_STATUS(VAR RETCODE : INTEGER);
-
- { The values returned in RETCODE are as follows: }
- { -3 - Error in status request. }
- { -2 - Spooler not available. }
- { -1 - Spooler not installed. }
- { 0 - Spooler installed and available. }
- { >0 - DOS error code. }
-
- VAR
- REGISTER : REGLIST;
-
- BEGIN {GET_SPOOL_STATUS}
- REGISTER.AX := $0100;
- INTR($2F,REGISTER);
- IF (REGISTER.FLAGS AND ERROR_MASK) = ERROR_MASK
- THEN RETCODE := ORD(REGISTER.AX)
- ELSE CASE (REGISTER.AX AND $00FF) OF
- 0: RETCODE := -1;
- 1: RETCODE := -2;
- 255: RETCODE := 0;
- ELSE RETCODE := -3;
- END;
- END; {GET_SPOOL_STATUS}
-
- PROCEDURE SUBMIT_TO_SPOOL(VAR FILENAME : ASCIIZ;
- VAR RETCODE : INTEGER);
-
- { FILENAME := 'd:\path\path\filename.ext' }
- { }
- { The values for RETCODE are as follows: }
- { 0 - File successfully submitted. }
- { >0 - DOS error code. }
-
- VAR
- PACKET : SubmitPacket;
- REGISTER : REGLIST;
-
- BEGIN {SUBMIT_TO_SPOOL}
- FILENAME := CONCAT(FILENAME,CHR(0));
- PACKET.LEVEL_CODE := $00;
- PACKET.FILE_SEGMENT := Seg(FileName) ;
- PACKET.FILE_OFFSET := Ofs(FileName) + 1 ;
- REGISTER.AX := $0101;
- REGISTER.DS := Seg(Packet) ;
- REGISTER.DX := Ofs(Packet) ;
- INTR($2F,REGISTER);
- IF (REGISTER.FLAGS AND ERROR_MASK) = ERROR_MASK
- THEN RETCODE := ORD(REGISTER.AX)
- ELSE RETCODE := 0;
- END; {SUBMIT_TO_SPOOL}
-
- PROCEDURE DELETE_FROM_SPOOL(VAR FILENAME : ASCIIZ;
- VAR RETCODE : INTEGER);
-
- { FILENAME := 'd:\path\path\filename.ext' }
- { The wildcard characters * and ? are valid. }
- { }
- { The values for RETCODE are as follows: }
- { 0 - file successfully deleted. }
- { >0 - DOS error code. }
-
- VAR
- REGISTER : REGLIST;
-
- BEGIN {DELETE_FROM_SPOOL}
- FILENAME := CONCAT(FILENAME,CHR(0));
- REGISTER.AX := $0102;
- REGISTER.DS := Seg(FILENAME) ;
- REGISTER.DX := Ofs(FILENAME) + 1 ;
- INTR($2F,REGISTER);
- IF (REGISTER.FLAGS AND ERROR_MASK) = ERROR_MASK
- THEN RETCODE := ORD(REGISTER.AX)
- ELSE RETCODE := 0;
- END; {DELETE_FROM_SPOOL}
-
- PROCEDURE CLEAR_SPOOL(VAR RETCODE : INTEGER);
-
- { The values for RETCODE are as follows: }
- { 0 - spool cleared. }
- { >0 - DOS error code. }
-
- VAR
- REGISTER : REGLIST;
-
- BEGIN {CLEAR_SPOOL}
- REGISTER.AX := $0103;
- INTR($2F,REGISTER);
- IF (REGISTER.FLAGS AND ERROR_MASK) = ERROR_MASK
- THEN RETCODE := ORD(REGISTER.AX)
- ELSE RETCODE := 0;
- END; {CLEAR_SPOOL}
-
- PROCEDURE GET_SPOOL_QUE(VAR QUE_BUFFER : BLOCK;
- VAR RETCODE : INTEGER);
-
- { This routine will return the current DOS print }
- { queue in QUE_BUFFER. }
- { }
- { The values for RETCODE are as follows: }
- { 0 - request was successful. }
- { >0 - DOS error code. }
-
- VAR
- REGISTER : REGLIST;
-
- BEGIN {GET_SPOOL_QUE}
- REGISTER.AX := $0104;
- INTR($2F,REGISTER);
- IF (REGISTER.FLAGS AND ERROR_MASK) = ERROR_MASK
- THEN RETCODE := ORD(REGISTER.AX)
- ELSE RETCODE := 0;
- MOVE (MEM[REGISTER.DS:REGISTER.SI], QUE_BUFFER, 2048);
- REGISTER.AX := $0105;
- INTR($2F,REGISTER);
- END; {GET_SPOOL_QUE}
-