/********************************************************************/
/**                     Microsoft LAN Manager                      **/
/**               Copyright(c) Microsoft Corp., 1987-1990          **/
/********************************************************************/

/********************************************************************
 *								    *
 *  About this file ...  SPOOL.H				    *
 *								    *
 *  This file contains information about the DosPrint APIs.	    *
 *								    *
 *	Function prototypes.					    *
 *								    *
 *	Data structure templates.				    *
 *								    *
 *	Definition of special values.				    *
 *								    *
 *								    *
 *  NOTE:  You must include NETCONS.H before this file, since this  *
 *	   file	depends on values defined in NETCONS.H.		    *
 *								    *
 ********************************************************************/


/**************************************************************** 
 *								*
 *	  	Function prototypes 				*
 *								*
 ****************************************************************/


#ifndef NO_INCL_PROTOTYPES	/* default is to define everything */

extern API_FUNCTION
 DosPrintDestEnum ( const char far *, short, char far *, unsigned short, 
	unsigned short far *, unsigned short far * );

extern API_FUNCTION
  DosPrintDestControl ( const char far *, char far *, int );

extern API_FUNCTION
  DosPrintDestGetInfo ( const char far *, char far *, short,char far *, 
	unsigned short, unsigned short far * );

extern API_FUNCTION
  DosPrintDestStatus (	char far *, unsigned short, unsigned short, char far * );

extern API_FUNCTION
 DosPrintQEnum ( const char far *, short, char far *, unsigned short, 
	unsigned short far *, unsigned short far * );

extern API_FUNCTION
  DosPrintQGetInfo ( const char far *, char far *, short, char far *, unsigned short, unsigned short far * );

extern API_FUNCTION
  DosPrintQSetInfo ( const char far *, char far *, short, char far *, unsigned short, short);

extern API_FUNCTION
  DosPrintQPause ( const char far *, char far * );

extern API_FUNCTION
  DosPrintQContinue ( const char far *, char far * );

extern API_FUNCTION
  DosPrintQPurge ( const char far *, char far * );

extern API_FUNCTION
  DosPrintQAdd ( const char far *, short, char far *, unsigned short );

extern API_FUNCTION
  DosPrintQDel ( const char far *, char far * );

extern API_FUNCTION
  DosPrintJobGetInfo ( const char far *, unsigned short, short,char far *, 
	unsigned short, unsigned short far * );

extern API_FUNCTION
  DosPrintJobSetInfo ( const char far *, unsigned short,short, char far *, 
	unsigned short, short );

extern API_FUNCTION
  DosPrintJobPause ( const char far *, unsigned short );

extern API_FUNCTION
  DosPrintJobContinue ( const char far *, unsigned short );

extern API_FUNCTION
  DosPrintJobDel ( const char far *, unsigned short );

extern API_FUNCTION
  DosPrintJobEnum( const char far *, const char far *, short, char far *, 
	unsigned short, unsigned short far *,unsigned short far *);

extern API_FUNCTION
 DosPrintJobGetId(unsigned short, char far *, unsigned short);

#endif

/**************************************************************** 
 *								*
 *	  	Data structure templates			*
 *								*
 ****************************************************************/


struct prjob_info {
   unsigned short prjob_id;	   /* job ID				    */
   char prjob_username[UNLEN+1];   /* submitting user name		    */
   char prjob_pad_1; 		   /* byte to pad to word boundary	     */
   char prjob_notifyname[CNLEN+1]; /* message name to notify		    */
   char prjob_datatype[DTLEN+1];   /* spool file data type name		    */
   char far * prjob_parms;         /* implementation defined parameter string */
   unsigned short prjob_position;  /* position of the job in the queue        */
				   /* For SetInfo				    */
				   /* 0 means do not change position	    */
				   /* position > # of jobs means the end	    */
   unsigned short prjob_status;    /* job status                              */
   char far * prjob_status_string; /* status string posted by print processor */
   unsigned long prjob_submitted;  /* time when the job is submitted          */
                                   /* (from 1970-1-1 in seconds)              */
   unsigned long prjob_size;       /* job size                                */
   char far *prjob_comment;	   /* comment associated with this job	    */
}; /* prjob_info */

struct prdest_info {
   char prdest_name[PDLEN+1];       /* name of the print destination         */
   char prdest_username[UNLEN+1];   /* the username of current job.          */
   unsigned short prdest_jobid;     /* current printing job ID or 0 if none  */
   unsigned short prdest_status;    /* status of the destination, a bit mask */
   char far * prdest_status_string; /* status string posted by the processor */
   unsigned short prdest_time;	    /* printing time in minutes.             */
}; /* prdest_info */

struct prq_info {
  char prq_name[QNLEN+1];	 /* queue name				     */
  char prq_pad_1; 		 /* byte to pad to word boundary	     */
  unsigned short prq_priority;   /* Priority (0-9) with 1 lowest             */
  unsigned short prq_starttime;  /* time to start the queue.                 */
                                 /* (from 00:00 of the day in minutes)       */
  unsigned short prq_untiltime;  /* time to stop the queue.                  */
                                 /* (from 00:00 of the day in minutes)       */
  char far * prq_separator;      /* separator file name                      */
  char far * prq_processor;      /* command string to invoke print processor */
                                 /*   ("PATHNAME PARM1=VAL1 PARM2=VAL2 ...") */
  char far * prq_destinations;   /* destination names the queue is routed to */
                                 /*   ("DEST1 DEST2 ...")                    */
  char far * prq_parms;          /* implementation defined parameter string  */
  char far * prq_comment;	 /* comment string 			     */
  unsigned short prq_status;     /* queue status mask:                       */
                                 /*   0  Queue active                        */
                                 /*   1  Queue paused                        */
                                 /*   2  Queue unscheduled                   */
                                 /*   3  Queue pending delete                */
  unsigned short prq_jobcount;   /* number of jobs in the queue              */
}; /* prq_info */

/*
 * structure for DosPrintJobGetId
 */
struct prid_info {
	unsigned short prjid_id;
	char prjid_server[CNLEN + 1];	/* server name */
	char prjid_qname[QNLEN+1];	/* queue to which the job is queued */
   	char prjid_pad_1; 		/* byte to pad to word boundary	     */
}; /* prid_info */


/**************************************************************** 
 *								*
 *	  	Special values and constants			*
 *								*
 ****************************************************************/




/*
 *	Values for parmnum in DosPrintQSetInfo.
 */

#define PRQ_PRIORITY_PARMNUM	   	2
#define PRQ_STARTTIME_PARMNUM	   	3
#define PRQ_UNTILTIME_PARMNUM	   	4
#define PRQ_SEPARATOR_PARMNUM	   	5
#define PRQ_PROCESSOR_PARMNUM	   	6
#define PRQ_DESTINATIONS_PARMNUM	7
#define PRQ_PARMS_PARMNUM	   	8
#define PRQ_COMMENT_PARMNUM	   	9
#define PRQ_MAXPARMNUM	  		11

/*
 *	Print Queue Priority 
 */

#define PRQ_MAX_PRIORITY		1
#define PRQ_DEF_PRIORITY		5
#define PRQ_MIN_PRIORITY		9

/*
 *	Print queue status bitmask and values.
 */

#define PRQ_STATUS_MASK			3
#define PRQ_ACTIVE			0
#define PRQ_PAUSE			1
#define PRQ_ERROR			2
#define PRQ_PENDING			3

/*
 *	Values for parmnum in DosPrintJobSetInfo.
 */

#define PRJOB_NOTIFYNAME_PARMNUM	3
#define PRJOB_DATATYPE_PARMNUM		4
#define PRJOB_PARMS_PARMNUM		5
#define PRJOB_POSITION_PARMNUM	   	6
#define PRJOB_COMMENT_PARMNUM	       11
#define PRJOB_MAXPARMNUM	       11

/* 
 *	Bitmap masks for prjob_status field of PRINTJOB.
 */

/* 2-7 bits also used in device status */

#define PRJOB_QSTATUS       0x3		/* Bits 0,1 */
#define PRJOB_DEVSTATUS	   0x1fc	/* 2-8 bits */
#define PRJOB_COMPLETE      0x4		/*  Bit 2   */
#define PRJOB_INTERV        0x8		/*  Bit 3   */
#define PRJOB_ERROR        0x10		/*  Bit 4   */
#define PRJOB_DESTOFFLINE  0x20		/*  Bit 5   */
#define PRJOB_DESTPAUSED   0x40		/*  Bit 6   */
#define PRJOB_NOTIFY	   0x80		/* BIT 7 */
#define PRJOB_DESTNOPAPER  0x100	/* BIT 8 */
#define PRJOB_DELETED	   0x8000	/* BIT 15 */

/* 
 *	Values of PRJOB_QSTATUS bits in prjob_status field of PRINTJOB.
 */

#define PRJOB_QS_QUEUED    		0
#define PRJOB_QS_PAUSED    		1
#define PRJOB_QS_SPOOLING  		2
#define PRJOB_QS_PRINTING  		3

/*
 *	Control codes used in DosPrintDestControl.
 */

#define PRDEST_DELETE			0
#define PRDEST_PAUSE			1
#define	PRDEST_CONT			2
#define PRDEST_RESTART			3

/*
 *	These manifests define a two-bit field in prdest_status, and
 *	two of the values that field may take.
 */

#define PRDEST_STATUS_MASK		0x3
#define	PRDEST_PAUSED			0x1
#define	PRDEST_ACTIVE			0x0


/*
 *	Standard command argument when invoking print processor
 */
#define PPINPUT		"INPUT="
#define PPOUTPUT	"OUTPUT="
#define PPQUEUE		"QUEUE="
#define PPPARMS		"PARMS="
#define PPJOBID		"JOBID="