source: trunk/pin/include/struct.h

Last change on this file 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.