source: trunk/pin/include/struct.h@ 100

Last change on this file since 100 was 1, checked in by bart, 18 years ago

Initial checkin of PIN.EXE source code
this contains memory fixes for larger PPD files

File size: 15.0 KB
Line 
1/*DDK*************************************************************************/
2/* */
3/* COPYRIGHT Copyright (C) 1991, 2003 IBM Corporation */
4/* */
5/* The following IBM OS/2 source code is provided to you solely for */
6/* the purpose of assisting you in your development of OS/2 device */
7/* drivers. You may use this code in accordance with the IBM License */
8/* Agreement provided in the IBM Developer Connection Device Driver */
9/* Source Kit for OS/2. This Copyright statement may not be removed. */
10/* */
11/*****************************************************************************/
12/****************************************************************************/
13/* */
14/* */
15/****************************************************************************/
16
17#define ALLPPDS 450
18#define DIRECTORY_PPB 1
19#define TRUE 1
20#define FALSE 0
21#define NONE -1
22#define BANNER 0
23#define NOBANNER 1
24#define NORMAL 0
25#define REVERSE 1
26#define PORTRAIT 0
27#define LANDSCAPE 1
28#define CNFRES 0
29#define PPDRES 1
30#define RESBUF 2
31#define SGNRES 3
32#define DIRRES 4
33#define LCLRES 5
34#define IMAXRES 5
35#define SYSTEM 0
36#define RAW 1
37#define ENCAPS 2
38#define ATRAY 0
39#define BTRAY 1
40#define CTRAY 2
41#define DTRAY 3
42#define ETRAY 4
43#define MANUAL 5 /* treated as the last tray */
44#define MAX_FNAMESIZE 40 /* Maximum size of a file name */
45/*
46** Increase MAX_INPUT from 256 to 512 to allow for more PPD files.
47*/
48#define MAX_INPUT 512 /* Maximum number of PPD files in directory
49 segment */
50
51#define INPBINS 16 /* Max no of input bins */
52#define OUTBINS 3 /* Max no of output bins */
53#define PRBUFSZ 4096
54#define MAX_PSIZE 64
55#define APPKEYSIZE 20
56#define MAX_KEYAPPSIZE 78 /* Max size for application name in ini */
57
58#define DEF_IEXT ".ppd"
59#define DEF_OEXT ".ppb"
60#define PB CHAR *
61#define MAX_CHARS_IN_EXTENSION 3
62#define MAX_CHARS_IN_FILENAME 8
63
64//#define MEDIATYPE_STRING "MediaType"
65
66/*****************************************************************************/
67/*
68** V3.0UI
69*/
70/*
71** A UI entry is each entry within a *OpenUI / *CloseUI.
72*/
73typedef struct _UI_ENTRY
74{
75 USHORT ofsOption; // Option string offset
76 USHORT ofsTransString; // Translation string offset
77 USHORT ofsValue; // Value string offset
78} UI_ENTRY, *PUI_ENTRY;
79
80
81/*
82** A UI block is defined here as all data that falls within an
83** *OpenUI / *CloseUI.
84*/
85typedef struct _UI_BLOCK
86{
87 USHORT ofsUIName; // Offset to block name
88 USHORT ofsUITransString; // Offset to block translation string
89 USHORT usOrderDep; // Numeric value, order of block in list
90 USHORT usDisplayOrder; // Order block is displayed in listbox
91
92 USHORT usUILocation; // Job location where block is written
93 #define UI_ORDER_ANYSETUP 0
94 #define UI_ORDER_JCLSETUP 1
95 #define UI_ORDER_PAGESETUP 2
96 #define UI_ORDER_DOCSETUP 4
97 #define UI_ORDER_PROLOGSETUP 8
98 #define UI_ORDER_EXITSERVER 0x10
99
100 USHORT usSelectType; // Selection type for Job Properties
101 #define UI_SELECT_BOOLEAN 4
102 #define UI_SELECT_PICKMANY 2
103 #define UI_SELECT_PICKONE 1
104
105 UCHAR ucGroupType;
106 #define UIGT_DEFAULTOPTION 0 // Displayed in Job Properties
107 #define UIGT_INSTALLABLEOPTION 1 // Displayed in Printer Properties
108
109 UCHAR ucPanelID; // Identifies owner of feature
110 #define UIP_OS2_FEATURE 0 // Feature supported by IBM's J.P. Dialog
111 #define UIP_OEM_FEATURE 1 // Feature supported by OEM Dialog
112 #define UIP_PREDEF_FEATURE 2 // Feature predefined in PPD
113
114 USHORT usDefaultEntry; // 0-based offset of default entry (below)
115 USHORT usNumOfEntries; // Number of entries in block
116 UI_ENTRY uiEntry[ 1 ]; // List of UI entries
117} UI_BLOCK, *PUI_BLOCK;
118
119/*
120** p is a pointer to the current UI_BLOCK structure.
121*/
122#define QUERY_BLOCK_SIZE( p ) (sizeof( UI_BLOCK ) + \
123 (((p)->usNumOfEntries - 1) * \
124 sizeof( UI_ENTRY )))
125#define INCREMENT_BLOCK_PTR( p ) p = (PUI_BLOCK) ((PCHAR) p + \
126 QUERY_BLOCK_SIZE( p ))
127
128
129/*
130** The UI list makes up of all *OpenUI / *CloseUI blocks in the PPD. This
131** contains a header an a pointer to the list buffer.
132*/
133typedef struct _UI_LIST
134{
135 USHORT usNumOfBlocks; // Number of total blocks
136 USHORT usBlockListSize; // Byte size of UI list
137 PUI_BLOCK pBlockList; // Pointer to UI list buffer
138
139} UI_LIST, *PUI_LIST;
140
141typedef ULONG UI_SEL;
142typedef UI_SEL *PUI_SEL;
143
144/*
145** This structure deals with the user-selected UI's. There is a buffer called
146** the UI selection buffer. Each 32-bit value in the list is reserved for
147** a UI block and each bit in each 32-bit value represents a UI entry. If
148** the bit is set to 1, that UI entry is to be sent out with the job. It is
149** possible to have multiple entry selections per block.
150** This structure contains the byte length of the UI selection block and a
151** pointer to the UI selecton block.
152*/
153typedef struct _UI_SELLIST
154{
155 USHORT usCurrUIListSize; // Total byte size of UI selection list
156 USHORT ofsSelectList; // Offset to UI selection list
157} UI_SELLIST, *PUI_SELLIST;
158#define ASSIGN_UISELLIST_PTR( p ) (PUI_SEL) ((PBYTE) (p) + sizeof( CNFDATA ))
159
160/*
161** The User Interface Constraints provide a set of mutually exclusive options.
162** This has been provided so that printers can indicate if any options will
163** not work with other options. For example, a duplex may not support
164** envelopes, so the UI constraints will indicate that if either any envelope
165** or the duplex is selected, then the other cannot be selected.
166** The UI constraint list contains the ID of the related dialog box ID for
167** that given key.
168** The Entry structure is used for each key. The key ID contains the dialog
169** ID for the key. The Key2 ID is used for any keys that use a list box and
170** contains a specific ID for that key in the list box.
171** The Block structure contains the IDs of both keys that are not to be
172** selected together.
173** The list structure contains a variable list of the UIC_BLOCK structures.
174*/
175typedef struct _UIC_ENTRY
176{
177 USHORT ofsUIBlock; // Offset to block in block list
178 UI_SEL bOption; // Bit value of option(s) for a given keyword
179} UIC_ENTRY, *PUIC_ENTRY;
180
181typedef struct _UIC_BLOCK
182{
183 UIC_ENTRY uicEntry1; // Mutually exclusive key 1
184 UIC_ENTRY uicEntry2; // Mutually exclusive key 2
185} UIC_BLOCK, *PUIC_BLOCK;
186
187typedef struct _UIC_LIST
188{
189 USHORT usNumOfUICs; // Number of UIC_BLOCKs
190 PUIC_BLOCK puicBlockList; // Variable-length list of UIC_BLOCKs
191} UIC_LIST, *PUIC_LIST;
192
193/*
194** The following macro calculates the size of the UI_LIST structure, including
195** the list of UIC_BLOCKs, in bytes.
196** Argument u is a PUIC_LIST pointer.
197*/
198#define UIC_LIST_SIZE( u ) (sizeof( UIC_LIST ) + (sizeof( UIC_BLOCK ) * \
199 ((PUIC_LIST) (u)->usNumOfUICs - 1)))
200/*****************************************************************************/
201
202/*
203** defines for the duplex options
204*/
205
206#define DUPLEX_NONE -1
207#define DUPLEX_FALSE 0
208#define DUPLEX_DUPLEXNOTUMBLE 1
209#define DUPLEX_DUPLEXTUMBLE 2
210
211
212
213/*** RESLIST is a structure that points to a variable array of RESTYPE
214** structures.
215** uNumOfRes - Number of RESTYPE structures in pResType.
216** uResOffset - This contains a zero-based offset where the resolution
217** information is kept in a variable-length buffer. The information
218** for the resolution is kept the following way (in order):
219** 2-byte resolution value, in dots-per-inch
220** ------------------------------------------
221** 1-byte length of the following string:
222** ------------------------------------------
223** string length, this string does not always
224** have a terminating NULL character
225**
226** PRESLIST - Pointer to a RESLIST structure.
227*/
228/*
229** Add a flag to indicate if this resolution is used as part of the JCL
230** format. If TRUE, the resoluion is part of JCL. False otherwise.
231*/
232typedef struct _RESLIST
233{
234 SHORT uNumOfRes;
235 SHORT uResOffset;
236 BOOL bIsJCLResolution;
237} RESLIST;
238typedef RESLIST *PRESLIST;
239
240typedef struct _PPD1
241{
242 SHORT iSizeBuffer; /* size buffer where params are stored */
243 SHORT ofsPswrd; /* offset pointer to password */
244 SHORT iPpm; /* No of pages printed/minute */
245 LONG lFreeVM; /* amount of free virtual memory */
246 SHORT ofsPrType; /* offset pointer to printer type */
247 SHORT ofsPrName; /* offset pointer to printer name */
248 SHORT iResDpi; /* Resolution in dots per inch */
249
250 /*
251 ** Structure containing the available PostScript resolutions.
252 */
253 RESLIST ResList;
254
255 /*
256 ** Screen frequencly in cells per inch multiplied by 100
257 */
258 LONG lScrFreq;
259 SHORT fIsColorDevice; /* whether device supports colour or not */
260 /*
261 ** whether device supports independent file system or not
262 */
263 SHORT fIsFileSystem;
264 SHORT ofsReset; /* offset to printer reset command string */
265 SHORT ofsExitserver; /* offset to exitserver command string */
266 LONG iScreenAngle; /* Halftone Screen angle */
267
268 /*
269 ** Added this field to the structure. This field is an
270 ** offset that allows the driver to identify what PostScript
271 ** level the current device supports.
272 */
273 USHORT usLanguageLevel; /* Contains language level */
274 SHORT ofsTransferNor; /* offset to Normalised transfer function */
275 /*
276 ** offset to Normalised Inverse transfer function
277 */
278 SHORT ofsTransferInv;
279 /*
280 ** @1462 offset to PS mode emul. init. string
281 */
282 SHORT ofsInitString; /* offset to PS mode emul. init. string */
283
284 /*
285 ** This offset points to the JCL to PS interpreter string.
286 */
287 SHORT ofsJCLToPS;
288
289 /*
290 ** @1462 offset to PS mode emul. terminate string
291 */
292 SHORT ofsTermString; /* offset to PS mode emul. terminate string */
293 SHORT sDefaultDuplex; /* default duplex mode */
294 SHORT ofsDuplexFalse; /* string to turn off duplex/tumble */
295 SHORT ofsDuplexNoTumble; /* string to turn on duplex */
296 SHORT ofsDuplexTumble; /* string to turn on duplex/tumble */
297 SHORT ofsPCFileName;
298} PPD1;
299
300typedef struct _PPD2
301{
302 SHORT ofsDfpgsz; /* offset pointer to default paper size */
303 /* - now an index value */
304 SHORT fIsVariablePaper; /* true if variable paper supported */
305 SHORT ofsDefimagearea; /* offset to paper name string */
306 SHORT ofsDefpaperdim; /* offset to paper dim string */
307 SHORT iCmpgpairs; /* no of paper command pairs */
308 SHORT ofsLspgCmnds; /* offset pointer to list of paper commands */
309 SHORT iDmpgpairs; /* no of paper dimension pairs */
310 SHORT ofsDimxyPgsz; /* offset pointer to list of xy dimensions */
311 SHORT iImgpgpairs; /* no of paper imageable coordinate pairs */
312 /*
313 ** offset pointer to list of Imageable page and coordinates pairs
314 */
315 SHORT ofsImgblPgsz;
316 SHORT ofsCustomPageSize ; /* Custom Paper Support */
317 SHORT iCustomPageSizeMinWidth ;
318 SHORT iCustomPageSizeMaxWidth ;
319 SHORT iCustomPageSizeMinHeight ;
320 SHORT iCustomPageSizeMaxHeight ;
321
322} PPD2;
323
324typedef struct _PPD3
325{
326 SHORT iManualfeed; /* default manual feed true=1,false=0,none=-1 */
327 /*
328 ** offset pointer to command for manual feed true
329 */
330 SHORT ofsManualtrue;
331 /*
332 ** offset pointer to command for manual feed false
333 */
334 SHORT ofsManualfalse;
335 SHORT ofsDefinputslot; /* offset pointer to default input bin */
336 SHORT iInpbinpairs; /* no of bin name and command pairs */
337 /*
338 ** offset pointer to list of bin names & select commands
339 */
340 SHORT ofsCmInpbins;
341
342
343 SHORT iNumOfPageSizes; // Number of page sizes in list
344 SHORT ofsPageSizes; // List of paper sizes
345} PPD3;
346
347typedef struct _PPD4
348{
349 /*
350 ** Default output order can be normal or reverse
351 */
352 SHORT fIsDefoutorder;
353 /*
354 ** offset pointer to command string for output order normal
355 */
356 SHORT ofsOrdernormal;
357 /*
358 ** offset pointer to command string for output order reverse
359 */
360 SHORT ofsOrderreverse;
361 /*
362 ** offset pointer to name of default output order
363 */
364 SHORT ofsDefoutputbin;
365 /*
366 ** no of bin name and command pairs
367 */
368 SHORT iOutbinpairs;
369 /*
370 ** offset pointer to list of bin select commands
371 */
372 SHORT ofsCmOutbins;
373} PPD4;
374
375typedef struct _PPD5
376{
377 SHORT ofsDeffont; /* offset pointer to default font name */
378 SHORT iFonts; /* no of fonts supported */
379 SHORT ofsFontnames; /* offset pointer to list of font names */
380} PPD5;
381
382typedef struct _PPD6
383{
384 USHORT usFormCount; /* Count of forms */
385 SHORT ofsFormTable; /* Forms Table */
386 SHORT ofsFormIndex; /* Index Table */
387} PPD6;
388
389
390typedef struct _DESPPD
391{
392 PPD1 desItems; /* Individual items defined */
393 PPD2 desPage; /* Storage for paper descriptors defined */
394 PPD3 desInpbins; /* Storage for Input bin descriptors defined */
395 PPD4 desOutbins; /* Storage for Output bin descriptors defined */
396 PPD5 desFonts; /* Storage for Font names defined */
397 PPD6 desForms; /* Form tables */
398
399 /*
400 */
401 UI_LIST stUIList;
402
403 UIC_LIST stUICList;
404
405 PBYTE pPSStringBuff;
406} DESPPD, *PDESPPD;
407
408
Note: See TracBrowser for help on using the repository browser.