176 lines
5.8 KiB
C
176 lines
5.8 KiB
C
|
#ifndef WINAPI
|
||
|
#ifdef BUILDDLL /* ;Internal */
|
||
|
#define WINAPI _loadds far pascal /* ;Internal */
|
||
|
#define CALLBACK _loadds far pascal /* ;Internal */
|
||
|
#else /* ;Internal */
|
||
|
#define WINAPI far pascal
|
||
|
#define CALLBACK far pascal
|
||
|
#endif /* ;Internal */
|
||
|
#endif
|
||
|
|
||
|
#define LWORD(x) ((int)((x)&0xFFFF))
|
||
|
|
||
|
|
||
|
/* spooler error code */
|
||
|
#define SP_ERROR (-1) /* general error - mostly used when spooler isn't loaded */
|
||
|
#define SP_APPABORT (-2) /* app aborted the job through the driver */
|
||
|
#define SP_USERABORT (-3) /* user aborted the job through spooler's front end */
|
||
|
#define SP_OUTOFDISK (-4) /* simply no disk to spool */
|
||
|
#define SP_OUTOFMEMORY (-5)
|
||
|
#define SP_RETRY (-6) /* retry sending to the port again */
|
||
|
#define SP_NOTREPORTED 0x4000 /* set if GDI did not report error */
|
||
|
|
||
|
/* subfunctions of the Spooler support function, GetSpoolJob()
|
||
|
* CP_* are used by the control panel for modifying the printer setup/
|
||
|
*/
|
||
|
#define SP_PRINTERNAME 20
|
||
|
#define SP_REGISTER 21
|
||
|
#define SP_CONNECTEDPORTCNT 25
|
||
|
#define SP_QUERYDISKUSAGE 26
|
||
|
#define SP_DISKFREED 27
|
||
|
#define SP_INIT 28
|
||
|
#define SP_LISTEDPORTCNT 29
|
||
|
#define CP_ISPORTFREE 30
|
||
|
#define CP_REINIT 31
|
||
|
#define SP_TXTIMEOUT 32
|
||
|
#define SP_DNSTIMEOUT 33
|
||
|
#define CP_CHECKSPOOLER 34
|
||
|
#define CP_SET_TT_ONLY 35
|
||
|
#define CP_SETSPOOLER 36
|
||
|
#define CP_SETDOSPRINT 37
|
||
|
|
||
|
|
||
|
#define SP_DISK_BUFFER (20000) /* wait for about 20 K of disk space to free
|
||
|
free up before attempting to write to disk */
|
||
|
|
||
|
/* messages posted or sent to the spooler window
|
||
|
*/
|
||
|
#define SP_NEWJOB 0x1001
|
||
|
#define SP_DELETEJOB 0x1002
|
||
|
#define SP_DISKNEEDED 0x1003
|
||
|
#define SP_QUERYDISKAVAIL 0x1004
|
||
|
#define SP_ISPORTFREE 0x1005
|
||
|
#define SP_CHANGEPORT 0x1006
|
||
|
|
||
|
/* in /windows/oem/printer.h */
|
||
|
|
||
|
|
||
|
/* job status flag bits in the type field of the JCB structure
|
||
|
*/
|
||
|
#define JB_ENDDOC 0x0001
|
||
|
#define JB_INVALIDDOC 0x0002
|
||
|
#define JB_DIRECT_SPOOL 0x8000 /* go directly to the printer without the spooler */
|
||
|
#define JB_FILE_PORT 0x4000 /* were given a file for a port name */
|
||
|
#define JB_VALID_SPOOL 0x2000 /* everything is cool, continue to spool normally */
|
||
|
#define JB_NOTIFIED_SPOOLER 0x1000 /* already notified the spooler of this job */
|
||
|
#define JB_WAITFORDISK 0x0800 /* out of disk condition has been detected previously */
|
||
|
#define JB_DEL_FILE 0x0400 /* no deletion of file after spool */
|
||
|
#define JB_FILE_SPOOL 0x0200 /* spooling a file */
|
||
|
#define JB_NET_SPOOL 0x0100 /* sending directly to network */
|
||
|
|
||
|
/* allow 2 dialog box messages initially and increment 8 at a time */
|
||
|
#define SP_DLGINC 8
|
||
|
#define SP_DLGINIT 8
|
||
|
|
||
|
#define NAME_LEN 32
|
||
|
#define BUF_SIZE 128
|
||
|
#define MAX_PROFILE 80
|
||
|
#define JCBBUF_LEN 256
|
||
|
|
||
|
#define lower(c) ((c > 'A' && c < 'Z') ? (c - 'A' + 'a') : c)
|
||
|
|
||
|
#define IDS_LENGTH 60
|
||
|
|
||
|
/* comm driver stuff */
|
||
|
#define COMM_INQUE 0x010 /* wm091385 */
|
||
|
#define COMM_OUTQUE 0x030 /* wm091385 */
|
||
|
#define COMM_OUTQUEPMODE 0x400 /* New size for pmode */
|
||
|
|
||
|
#define COMM_ERR_BIT 0x8000
|
||
|
#define TXTIMEOUT 45000 /* milliseconds */
|
||
|
#define DNSTIMEOUT 15000 /* milliseconds */
|
||
|
|
||
|
#define BAUDRATE 0
|
||
|
#define PARITY 1
|
||
|
#define BYTESIZE 2
|
||
|
#define STOPBITS 3
|
||
|
#define REPEAT 4
|
||
|
|
||
|
|
||
|
typedef struct {
|
||
|
int type; /* type of dialog. This will tell whether it is */
|
||
|
/* call back function or pure dialog etc */
|
||
|
int size; /* size of special function data */
|
||
|
int adr;
|
||
|
}DIALOGMARK;
|
||
|
|
||
|
#define SP_TEXT 0 /* text type */
|
||
|
#define SP_NOTTEXT 1 /* not text type */
|
||
|
#define SP_DIALOG 2 /* dialog type data */
|
||
|
#define SP_CALLBACK 3 /* call back type function */
|
||
|
|
||
|
#define MAXPORTLIST 20 /* max # ports listed in win.ini [ports] */
|
||
|
#define MAXPORT MAXPORTLIST
|
||
|
#define MAXSPOOL 100 /* max # jobs spooled per port */
|
||
|
#define MAXMAP 18
|
||
|
#define PORTINDENT 2
|
||
|
#define JOBINDENT 3
|
||
|
#define MAXPAGE 7 /* allow 7 pages at first */
|
||
|
#define INC_PAGE 8 /* increase by 8 pages at a time */
|
||
|
|
||
|
typedef struct {
|
||
|
int pnum;
|
||
|
int printeratom;
|
||
|
long txtimeout;
|
||
|
long dnstimeout;
|
||
|
}JCBQ;
|
||
|
|
||
|
typedef struct jcb {
|
||
|
unsigned type;
|
||
|
int pagecnt;
|
||
|
int maxpage;
|
||
|
int portnum;
|
||
|
HDC hDC;
|
||
|
int chBuf;
|
||
|
long timeSpooled;
|
||
|
char buffer[JCBBUF_LEN];
|
||
|
unsigned long size;
|
||
|
unsigned long iLastPage;
|
||
|
WORD psp; // the PSP of the app that started printing
|
||
|
char jobName[NAME_LEN];
|
||
|
int page[MAXPAGE];
|
||
|
}JCB;
|
||
|
|
||
|
typedef struct page {
|
||
|
int filenum;
|
||
|
unsigned maxdlg; /* max number of dialog */
|
||
|
unsigned dlgptr; /* number of dialogs */
|
||
|
long spoolsize;
|
||
|
OFSTRUCT fileBuf;
|
||
|
DIALOGMARK dialog[SP_DLGINIT];
|
||
|
}PAGE;
|
||
|
|
||
|
#define SP_COMM_PORT 0
|
||
|
#define SP_FILE_PORT 1
|
||
|
#define SP_REMOTE_QUEUE 2
|
||
|
#define SP_QUERYVALIDJOB 30
|
||
|
|
||
|
|
||
|
typedef struct
|
||
|
{
|
||
|
int type;
|
||
|
int fn;
|
||
|
long retry; /* system timer on first error */
|
||
|
} PORT;
|
||
|
|
||
|
|
||
|
/* exported routines */
|
||
|
BOOL WINAPI QueryJob(HANDLE, int);
|
||
|
BOOL WINAPI QueryAbort(HANDLE, int);
|
||
|
|
||
|
int WINAPI WriteDialog(HANDLE hJCB, LPSTR str, int n);
|
||
|
int WINAPI WriteSpool(HANDLE hJCB, LPSTR str, int n);
|
||
|
|
||
|
LONG WINAPI GetSpoolJob(int, long);
|
||
|
char WINAPI GetSpoolTempDrive(void);
|