//--------------------------------------------------------------
//
//  WINSPOOL.H
//
//  This file contains type declarations and constants for
//  the Windows printing API. The function prototypes
//  are stored in the file WINSPOOL.PRG.
//
// 
//  dBASE Samples Group
//
//  $Revision:   1.2  $
//
//  Portions copyright (c) 1990-1995, Microsoft Corp. 
//
//--------------------------------------------------------------
//
// Module Name:
//
//    WinSpool.h
//
// Abstract:
//
//    Header file for Print APIs
//

#ifndef _WINSPOOL_
#define _WINSPOOL_

#include <WINDEF.H>

#define PPRINTER_INFO_1        PSTRUCTURE
#define LPPRINTER_INFO_1       LPSTRUCTURE

#define PPRINTER_INFO_2        PSTRUCTURE
#define LPPRINTER_INFO_2       LPSTRUCTURE

#define PPRINTER_INFO_3        PSTRUCTURE
#define LPPRINTER_INFO_3       LPSTRUCTURE

#define PPRINTER_INFO_4        PSTRUCTURE
#define LPPRINTER_INFO_4       LPSTRUCTURE

#define PPRINTER_INFO_5        PSTRUCTURE
#define LPPRINTER_INFO_5       LPSTRUCTURE

#define PRINTER_CONTROL_PAUSE            1
#define PRINTER_CONTROL_RESUME           2
#define PRINTER_CONTROL_PURGE            3
#define PRINTER_CONTROL_SET_STATUS       4

#define PRINTER_STATUS_PAUSED            0x00000001
#define PRINTER_STATUS_ERROR             0x00000002
#define PRINTER_STATUS_PENDING_DELETION  0x00000004
#define PRINTER_STATUS_PAPER_JAM         0x00000008
#define PRINTER_STATUS_PAPER_OUT         0x00000010
#define PRINTER_STATUS_MANUAL_FEED       0x00000020
#define PRINTER_STATUS_PAPER_PROBLEM     0x00000040
#define PRINTER_STATUS_OFFLINE           0x00000080
#define PRINTER_STATUS_IO_ACTIVE         0x00000100
#define PRINTER_STATUS_BUSY              0x00000200
#define PRINTER_STATUS_PRINTING          0x00000400
#define PRINTER_STATUS_OUTPUT_BIN_FULL   0x00000800
#define PRINTER_STATUS_NOT_AVAILABLE     0x00001000
#define PRINTER_STATUS_WAITING           0x00002000
#define PRINTER_STATUS_PROCESSING        0x00004000
#define PRINTER_STATUS_INITIALIZING      0x00008000
#define PRINTER_STATUS_WARMING_UP        0x00010000
#define PRINTER_STATUS_TONER_LOW         0x00020000
#define PRINTER_STATUS_NO_TONER          0x00040000
#define PRINTER_STATUS_PAGE_PUNT         0x00080000
#define PRINTER_STATUS_USER_INTERVENTION 0x00100000
#define PRINTER_STATUS_OUT_OF_MEMORY     0x00200000
#define PRINTER_STATUS_DOOR_OPEN         0x00400000
#define PRINTER_STATUS_SERVER_UNKNOWN    0x00800000
#define PRINTER_STATUS_POWER_SAVE        0x01000000

#define PRINTER_ATTRIBUTE_QUEUED         0x00000001
#define PRINTER_ATTRIBUTE_DIRECT         0x00000002
#define PRINTER_ATTRIBUTE_DEFAULT        0x00000004
#define PRINTER_ATTRIBUTE_SHARED         0x00000008
#define PRINTER_ATTRIBUTE_NETWORK        0x00000010
#define PRINTER_ATTRIBUTE_HIDDEN         0x00000020
#define PRINTER_ATTRIBUTE_LOCAL          0x00000040

#define PRINTER_ATTRIBUTE_ENABLE_DEVQ       0x00000080
#define PRINTER_ATTRIBUTE_KEEPPRINTEDJOBS   0x00000100
#define PRINTER_ATTRIBUTE_DO_COMPLETE_FIRST 0x00000200

#define PRINTER_ATTRIBUTE_WORK_OFFLINE   0x00000400
#define PRINTER_ATTRIBUTE_ENABLE_BIDI    0x00000800

#define NO_PRIORITY   0
#define MAX_PRIORITY 99
#define MIN_PRIORITY  1
#define DEF_PRIORITY  1

#define PJOB_INFO_1         PSTRUCTURE
#define LPJOB_INFO_1        LPSTRUCTURE

#define PJOB_INFO_2         PSTRUCTURE
#define LPJOB_INFO_2        LPSTRUCTURE

#define JOB_CONTROL_PAUSE              1
#define JOB_CONTROL_RESUME             2
#define JOB_CONTROL_CANCEL             3
#define JOB_CONTROL_RESTART            4
#define JOB_CONTROL_DELETE             5

#define JOB_STATUS_PAUSED       0x00000001
#define JOB_STATUS_ERROR        0x00000002
#define JOB_STATUS_DELETING     0x00000004
#define JOB_STATUS_SPOOLING     0x00000008
#define JOB_STATUS_PRINTING     0x00000010
#define JOB_STATUS_OFFLINE      0x00000020
#define JOB_STATUS_PAPEROUT     0x00000040
#define JOB_STATUS_PRINTED      0x00000080
#define JOB_STATUS_DELETED      0x00000100
#define JOB_STATUS_BLOCKED_DEVQ 0x00000200
#define JOB_STATUS_USER_INTERVENTION   0x00000400

#define JOB_POSITION_UNSPECIFIED       0

#define PADDJOB_INFO_1           PSTRUCTURE
#define LPADDJOB_INFO_1          LPSTRUCTURE

#define PDRIVER_INFO_1           PSTRUCTURE
#define LPDRIVER_INFO_1          LPSTRUCTURE

#define PDRIVER_INFO_2           PSTRUCTURE
#define LPDRIVER_INFO_2          LPSTRUCTURE

#define PDRIVER_INFO_3           PSTRUCTURE
#define LPDRIVER_INFO_3          LPSTRUCTURE

#define PDOC_INFO_1              PSTRUCTURE
#define LPDOC_INFO_1             LPSTRUCTURE

#define PFORM_INFO_1             PSTRUCTURE
#define LPFORM_INFO_1            LPSTRUCTURE

#define PDOC_INFO_2              PSTRUCTURE
#define LPDOC_INFO_2             LPSTRUCTURE

#define DI_CHANNEL              1    && start direct read/write channel,
#define DI_CHANNEL_WRITE        2    && Direct write only - background read thread ok
#define DI_READ_SPOOL_JOB       3

#define FORM_BUILTIN    0x00000001

#define PPRINTPROCESSOR_INFO_1     PSTRUCTURE
#define LPPRINTPROCESSOR_INFO_1    LPSTRUCTURE

#define PPORT_INFO_1               PSTRUCTURE
#define LPPORT_INFO_1              LPSTRUCTURE

#define PPORT_INFO_2           PSTRUCTURE
#define LPPORT_INFO_2          LPSTRUCTURE

#define PORT_TYPE_WRITE         0x0001
#define PORT_TYPE_READ          0x0002
#define PORT_TYPE_REDIRECTED    0x0004
#define PORT_TYPE_NET_ATTACHED  0x0008

#define PMONITOR_INFO_1      PSTRUCTURE
#define LPMONITOR_INFO_1     LPSTRUCTURE

#define PMONITOR_INFO_2      PSTRUCTURE
#define LPMONITOR_INFO_2     LPSTRUCTURE

#define PDATATYPES_INFO_1      PSTRUCTURE
#define LPDATATYPES_INFO_1     LPSTRUCTURE

#define PPRINTER_DEFAULTS      PSTRUCTURE
#define LPPRINTER_DEFAULTS     LPSTRUCTURE

#define PRINTER_ENUM_DEFAULT     0x00000001
#define PRINTER_ENUM_LOCAL       0x00000002
#define PRINTER_ENUM_CONNECTIONS 0x00000004
#define PRINTER_ENUM_FAVORITE    0x00000004
#define PRINTER_ENUM_NAME        0x00000008
#define PRINTER_ENUM_REMOTE      0x00000010
#define PRINTER_ENUM_SHARED      0x00000020
#define PRINTER_ENUM_NETWORK     0x00000040

#define PRINTER_ENUM_EXPAND      0x00004000
#define PRINTER_ENUM_CONTAINER   0x00008000

#define PRINTER_ENUM_ICONMASK    0x00ff0000
#define PRINTER_ENUM_ICON1       0x00010000
#define PRINTER_ENUM_ICON2       0x00020000
#define PRINTER_ENUM_ICON3       0x00040000
#define PRINTER_ENUM_ICON4       0x00080000
#define PRINTER_ENUM_ICON5       0x00100000
#define PRINTER_ENUM_ICON6       0x00200000
#define PRINTER_ENUM_ICON7       0x00400000
#define PRINTER_ENUM_ICON8       0x00800000

#define PRINTER_NOTIFY_TYPE 0x00
#define JOB_NOTIFY_TYPE     0x01

#define PRINTER_NOTIFY_FIELD_SERVER_NAME             0x00
#define PRINTER_NOTIFY_FIELD_PRINTER_NAME            0x01
#define PRINTER_NOTIFY_FIELD_SHARE_NAME              0x02
#define PRINTER_NOTIFY_FIELD_PORT_NAME               0x03
#define PRINTER_NOTIFY_FIELD_DRIVER_NAME             0x04
#define PRINTER_NOTIFY_FIELD_COMMENT                 0x05
#define PRINTER_NOTIFY_FIELD_LOCATION                0x06
#define PRINTER_NOTIFY_FIELD_DEVMODE                 0x07
#define PRINTER_NOTIFY_FIELD_SEPFILE                 0x08
#define PRINTER_NOTIFY_FIELD_PRINT_PROCESSOR         0x09
#define PRINTER_NOTIFY_FIELD_PARAMETERS              0x0A
#define PRINTER_NOTIFY_FIELD_DATATYPE                0x0B
#define PRINTER_NOTIFY_FIELD_SECURITY_DESCRIPTOR     0x0C
#define PRINTER_NOTIFY_FIELD_ATTRIBUTES              0x0D
#define PRINTER_NOTIFY_FIELD_PRIORITY                0x0E
#define PRINTER_NOTIFY_FIELD_DEFAULT_PRIORITY        0x0F
#define PRINTER_NOTIFY_FIELD_START_TIME              0x10
#define PRINTER_NOTIFY_FIELD_UNTIL_TIME              0x11
#define PRINTER_NOTIFY_FIELD_STATUS                  0x12
#define PRINTER_NOTIFY_FIELD_STATUS_STRING           0x13
#define PRINTER_NOTIFY_FIELD_CJOBS                   0x14
#define PRINTER_NOTIFY_FIELD_AVERAGE_PPM             0x15
#define PRINTER_NOTIFY_FIELD_TOTAL_PAGES             0x16
#define PRINTER_NOTIFY_FIELD_PAGES_PRINTED           0x17
#define PRINTER_NOTIFY_FIELD_TOTAL_BYTES             0x18
#define PRINTER_NOTIFY_FIELD_BYTES_PRINTED           0x19

#define JOB_NOTIFY_FIELD_PRINTER_NAME                0x00
#define JOB_NOTIFY_FIELD_MACHINE_NAME                0x01
#define JOB_NOTIFY_FIELD_PORT_NAME                   0x02
#define JOB_NOTIFY_FIELD_USER_NAME                   0x03
#define JOB_NOTIFY_FIELD_NOTIFY_NAME                 0x04
#define JOB_NOTIFY_FIELD_DATATYPE                    0x05
#define JOB_NOTIFY_FIELD_PRINT_PROCESSOR             0x06
#define JOB_NOTIFY_FIELD_PARAMETERS                  0x07
#define JOB_NOTIFY_FIELD_DRIVER_NAME                 0x08
#define JOB_NOTIFY_FIELD_DEVMODE                     0x09
#define JOB_NOTIFY_FIELD_STATUS                      0x0A
#define JOB_NOTIFY_FIELD_STATUS_STRING               0x0B
#define JOB_NOTIFY_FIELD_SECURITY_DESCRIPTOR         0x0C
#define JOB_NOTIFY_FIELD_DOCUMENT                    0x0D
#define JOB_NOTIFY_FIELD_PRIORITY                    0x0E
#define JOB_NOTIFY_FIELD_POSITION                    0x0F
#define JOB_NOTIFY_FIELD_SUBMITTED                   0x10
#define JOB_NOTIFY_FIELD_START_TIME                  0x11
#define JOB_NOTIFY_FIELD_UNTIL_TIME                  0x12
#define JOB_NOTIFY_FIELD_TIME                        0x13
#define JOB_NOTIFY_FIELD_TOTAL_PAGES                 0x14
#define JOB_NOTIFY_FIELD_PAGES_PRINTED               0x15
#define JOB_NOTIFY_FIELD_TOTAL_BYTES                 0x16
#define JOB_NOTIFY_FIELD_BYTES_PRINTED               0x17


#define PPRINTER_NOTIFY_OPTIONS_TYPE      PSTRUCTURE
#define LPPRINTER_NOTIFY_OPTIONS_TYPE     LPSTRUCTURE

#define PRINTER_NOTIFY_OPTIONS_REFRESH  0x01

#define PPRINTER_NOTIFY_OPTIONS      PSTRUCTURE
#define LPPRINTER_NOTIFY_OPTIONS     LPSTRUCTURE

#define PRINTER_NOTIFY_INFO_DISCARDED       0x01

#define PPRINTER_NOTIFY_INFO_DATA      PSTRUCTURE
#define LPPRINTER_NOTIFY_INFO_DATA     LPSTRUCTURE

#define PPRINTER_NOTIFY_INFO      PSTRUCTURE
#define LPPRINTER_NOTIFY_INFO     LPSTRUCTURE

#define PRINTER_CHANGE_ADD_PRINTER              0x00000001
#define PRINTER_CHANGE_SET_PRINTER              0x00000002
#define PRINTER_CHANGE_DELETE_PRINTER           0x00000004
#define PRINTER_CHANGE_FAILED_CONNECTION_PRINTER    0x00000008
#define PRINTER_CHANGE_PRINTER                  0x000000FF
#define PRINTER_CHANGE_ADD_JOB                  0x00000100
#define PRINTER_CHANGE_SET_JOB                  0x00000200
#define PRINTER_CHANGE_DELETE_JOB               0x00000400
#define PRINTER_CHANGE_WRITE_JOB                0x00000800
#define PRINTER_CHANGE_JOB                      0x0000FF00
#define PRINTER_CHANGE_ADD_FORM                 0x00010000
#define PRINTER_CHANGE_SET_FORM                 0x00020000
#define PRINTER_CHANGE_DELETE_FORM              0x00040000
#define PRINTER_CHANGE_FORM                     0x00070000
#define PRINTER_CHANGE_ADD_PORT                 0x00100000
#define PRINTER_CHANGE_CONFIGURE_PORT           0x00200000
#define PRINTER_CHANGE_DELETE_PORT              0x00400000
#define PRINTER_CHANGE_PORT                     0x00700000
#define PRINTER_CHANGE_ADD_PRINT_PROCESSOR      0x01000000
#define PRINTER_CHANGE_DELETE_PRINT_PROCESSOR   0x04000000
#define PRINTER_CHANGE_PRINT_PROCESSOR          0x07000000
#define PRINTER_CHANGE_ADD_PRINTER_DRIVER       0x10000000
#define PRINTER_CHANGE_SET_PRINTER_DRIVER       0x20000000
#define PRINTER_CHANGE_DELETE_PRINTER_DRIVER    0x40000000
#define PRINTER_CHANGE_PRINTER_DRIVER           0x70000000
#define PRINTER_CHANGE_TIMEOUT                  0x80000000
#define PRINTER_CHANGE_ALL                      0x7777FFFF

#define PRINTER_ERROR_INFORMATION   0x80000000
#define PRINTER_ERROR_WARNING       0x40000000
#define PRINTER_ERROR_SEVERE        0x20000000

#define PRINTER_ERROR_OUTOFPAPER    0x00000001
#define PRINTER_ERROR_JAM           0x00000002
#define PRINTER_ERROR_OUTOFTONER    0x00000004

#define PPROVIDOR_INFO_1      PSTRUCTURE
#define LPPROVIDOR_INFO_1     LPSTRUCTURE

#define SERVER_ACCESS_ADMINISTER    0x00000001
#define SERVER_ACCESS_ENUMERATE     0x00000002

#define PRINTER_ACCESS_ADMINISTER   0x00000004
#define PRINTER_ACCESS_USE          0x00000008

#define JOB_ACCESS_ADMINISTER       0x00000010


//
// Access rights for print servers
//

#define SERVER_ALL_ACCESS    (bitor(bitor(STANDARD_RIGHTS_REQUIRED, SERVER_ACCESS_ADMINISTER), SERVER_ACCESS_ENUMERATE))
#define SERVER_READ          (bitor(STANDARD_RIGHTS_READ, SERVER_ACCESS_ENUMERATE))
#define SERVER_WRITE         (bitor(bitor(STANDARD_RIGHTS_WRITE, SERVER_ACCESS_ADMINISTER), SERVER_ACCESS_ENUMERATE))
#define SERVER_EXECUTE       (bitor(STANDARD_RIGHTS_EXECUTE, SERVER_ACCESS_ENUMERATE))

//
// Access rights for printers
//

#define PRINTER_ALL_ACCESS    (bitor(bitor(STANDARD_RIGHTS_REQUIRED, PRINTER_ACCESS_ADMINISTER),PRINTER_ACCESS_USE))
#define PRINTER_READ          (bitor(STANDARD_RIGHTS_READ, PRINTER_ACCESS_USE))
#define PRINTER_WRITE         (bitor(STANDARD_RIGHTS_WRITE, PRINTER_ACCESS_USE))
#define PRINTER_EXECUTE       (bitor(STANDARD_RIGHTS_EXECUTE, PRINTER_ACCESS_USE))

//
// Access rights for jobs
//

#define JOB_ALL_ACCESS         (bitor(STANDARD_RIGHTS_REQUIRED, JOB_ACCESS_ADMINISTER))
#define JOB_READ               (bitor(STANDARD_RIGHTS_READ, JOB_ACCESS_ADMINISTER))
#define JOB_WRITE              (bitor(STANDARD_RIGHTS_WRITE, JOB_ACCESS_ADMINISTER))
#define JOB_EXECUTE            (bitor(STANDARD_RIGHTS_EXECUTE, JOB_ACCESS_ADMINISTER))
// End winspool.h

#endif
