xref: /aosp_15_r20/external/libcups/ppdc/ppdc.h (revision 5e7646d21f1134fb0638875d812ef646c12ab91e)
1*5e7646d2SAndroid Build Coastguard Worker //
2*5e7646d2SAndroid Build Coastguard Worker // Definitions for the CUPS PPD Compiler.
3*5e7646d2SAndroid Build Coastguard Worker //
4*5e7646d2SAndroid Build Coastguard Worker // Copyright 2007-2019 by Apple Inc.
5*5e7646d2SAndroid Build Coastguard Worker // Copyright 2002-2007 by Easy Software Products.
6*5e7646d2SAndroid Build Coastguard Worker //
7*5e7646d2SAndroid Build Coastguard Worker // Licensed under Apache License v2.0.  See the file "LICENSE" for more information.
8*5e7646d2SAndroid Build Coastguard Worker //
9*5e7646d2SAndroid Build Coastguard Worker 
10*5e7646d2SAndroid Build Coastguard Worker #ifndef _PPDC_H_
11*5e7646d2SAndroid Build Coastguard Worker #  define _PPDC_H_
12*5e7646d2SAndroid Build Coastguard Worker 
13*5e7646d2SAndroid Build Coastguard Worker //
14*5e7646d2SAndroid Build Coastguard Worker // Include necessary headers...
15*5e7646d2SAndroid Build Coastguard Worker //
16*5e7646d2SAndroid Build Coastguard Worker 
17*5e7646d2SAndroid Build Coastguard Worker #  include <cups/file.h>
18*5e7646d2SAndroid Build Coastguard Worker #  include <stdlib.h>
19*5e7646d2SAndroid Build Coastguard Worker 
20*5e7646d2SAndroid Build Coastguard Worker 
21*5e7646d2SAndroid Build Coastguard Worker //
22*5e7646d2SAndroid Build Coastguard Worker // Macros...
23*5e7646d2SAndroid Build Coastguard Worker //
24*5e7646d2SAndroid Build Coastguard Worker 
25*5e7646d2SAndroid Build Coastguard Worker #  define PPDC_NAME(s)	const char *class_name() { return (s); }
26*5e7646d2SAndroid Build Coastguard Worker 
27*5e7646d2SAndroid Build Coastguard Worker 
28*5e7646d2SAndroid Build Coastguard Worker //
29*5e7646d2SAndroid Build Coastguard Worker // Enumerations...
30*5e7646d2SAndroid Build Coastguard Worker //
31*5e7646d2SAndroid Build Coastguard Worker 
32*5e7646d2SAndroid Build Coastguard Worker enum ppdcDrvType			//// Driver type
33*5e7646d2SAndroid Build Coastguard Worker {
34*5e7646d2SAndroid Build Coastguard Worker   PPDC_DRIVER_CUSTOM,			// Custom driver
35*5e7646d2SAndroid Build Coastguard Worker   PPDC_DRIVER_PS,			// PostScript driver
36*5e7646d2SAndroid Build Coastguard Worker   PPDC_DRIVER_ESCP,			// rastertoescpx driver
37*5e7646d2SAndroid Build Coastguard Worker   PPDC_DRIVER_PCL,			// rastertopclx driver
38*5e7646d2SAndroid Build Coastguard Worker   PPDC_DRIVER_LABEL,			// rastertolabel/rastertodymo driver
39*5e7646d2SAndroid Build Coastguard Worker   PPDC_DRIVER_EPSON,			// rastertoepson driver
40*5e7646d2SAndroid Build Coastguard Worker   PPDC_DRIVER_HP,			// rastertohp driver
41*5e7646d2SAndroid Build Coastguard Worker   PPDC_DRIVER_MAX			// Number of driver types defined
42*5e7646d2SAndroid Build Coastguard Worker };
43*5e7646d2SAndroid Build Coastguard Worker 
44*5e7646d2SAndroid Build Coastguard Worker enum ppdcFontStatus			//// Load status of font
45*5e7646d2SAndroid Build Coastguard Worker {
46*5e7646d2SAndroid Build Coastguard Worker   PPDC_FONT_ROM,			// Font is in ROM
47*5e7646d2SAndroid Build Coastguard Worker   PPDC_FONT_DISK			// Font is on disk
48*5e7646d2SAndroid Build Coastguard Worker };
49*5e7646d2SAndroid Build Coastguard Worker 
50*5e7646d2SAndroid Build Coastguard Worker enum ppdcOptSection			//// Option section
51*5e7646d2SAndroid Build Coastguard Worker {
52*5e7646d2SAndroid Build Coastguard Worker   PPDC_SECTION_ANY,			// AnySetup
53*5e7646d2SAndroid Build Coastguard Worker   PPDC_SECTION_DOCUMENT,		// DocumentSetup
54*5e7646d2SAndroid Build Coastguard Worker   PPDC_SECTION_EXIT,			// ExitServer
55*5e7646d2SAndroid Build Coastguard Worker   PPDC_SECTION_JCL,			// JCLSetup
56*5e7646d2SAndroid Build Coastguard Worker   PPDC_SECTION_PAGE,			// PageSetup
57*5e7646d2SAndroid Build Coastguard Worker   PPDC_SECTION_PROLOG			// Prolog
58*5e7646d2SAndroid Build Coastguard Worker };
59*5e7646d2SAndroid Build Coastguard Worker 
60*5e7646d2SAndroid Build Coastguard Worker enum ppdcOptType			//// Option type
61*5e7646d2SAndroid Build Coastguard Worker {
62*5e7646d2SAndroid Build Coastguard Worker   PPDC_BOOLEAN,				// True/false option
63*5e7646d2SAndroid Build Coastguard Worker   PPDC_PICKONE,				// Single choice from list
64*5e7646d2SAndroid Build Coastguard Worker   PPDC_PICKMANY				// Multiple choices from list
65*5e7646d2SAndroid Build Coastguard Worker };
66*5e7646d2SAndroid Build Coastguard Worker 
67*5e7646d2SAndroid Build Coastguard Worker enum ppdcLineEnding			//// Line endings
68*5e7646d2SAndroid Build Coastguard Worker {
69*5e7646d2SAndroid Build Coastguard Worker   PPDC_LFONLY,				// LF only
70*5e7646d2SAndroid Build Coastguard Worker   PPDC_CRONLY,				// CR only
71*5e7646d2SAndroid Build Coastguard Worker   PPDC_CRLF				// CR + LF
72*5e7646d2SAndroid Build Coastguard Worker };
73*5e7646d2SAndroid Build Coastguard Worker 
74*5e7646d2SAndroid Build Coastguard Worker enum ppdcCondFlags			//// Condition flags
75*5e7646d2SAndroid Build Coastguard Worker {
76*5e7646d2SAndroid Build Coastguard Worker   PPDC_COND_NORMAL = 0,			// Normal state
77*5e7646d2SAndroid Build Coastguard Worker   PPDC_COND_SKIP = 1,			// Skip state
78*5e7646d2SAndroid Build Coastguard Worker   PPDC_COND_SATISFIED = 2		// At least one condition satisfied
79*5e7646d2SAndroid Build Coastguard Worker };
80*5e7646d2SAndroid Build Coastguard Worker 
81*5e7646d2SAndroid Build Coastguard Worker 
82*5e7646d2SAndroid Build Coastguard Worker //
83*5e7646d2SAndroid Build Coastguard Worker // Printer description data...
84*5e7646d2SAndroid Build Coastguard Worker //
85*5e7646d2SAndroid Build Coastguard Worker 
86*5e7646d2SAndroid Build Coastguard Worker class ppdcShared			//// Shared Data Value
87*5e7646d2SAndroid Build Coastguard Worker {
88*5e7646d2SAndroid Build Coastguard Worker   private:
89*5e7646d2SAndroid Build Coastguard Worker 
90*5e7646d2SAndroid Build Coastguard Worker   int		use;			// Use count (delete when 0)
91*5e7646d2SAndroid Build Coastguard Worker 
92*5e7646d2SAndroid Build Coastguard Worker   public:
93*5e7646d2SAndroid Build Coastguard Worker 
94*5e7646d2SAndroid Build Coastguard Worker   ppdcShared();
95*5e7646d2SAndroid Build Coastguard Worker   virtual ~ppdcShared();
96*5e7646d2SAndroid Build Coastguard Worker 
97*5e7646d2SAndroid Build Coastguard Worker   virtual const char *class_name() = 0;
98*5e7646d2SAndroid Build Coastguard Worker 
99*5e7646d2SAndroid Build Coastguard Worker   void		retain();
100*5e7646d2SAndroid Build Coastguard Worker   void		release();
101*5e7646d2SAndroid Build Coastguard Worker };
102*5e7646d2SAndroid Build Coastguard Worker 
103*5e7646d2SAndroid Build Coastguard Worker class ppdcArray				//// Shared Array
104*5e7646d2SAndroid Build Coastguard Worker   : public ppdcShared
105*5e7646d2SAndroid Build Coastguard Worker {
106*5e7646d2SAndroid Build Coastguard Worker   public:
107*5e7646d2SAndroid Build Coastguard Worker 
108*5e7646d2SAndroid Build Coastguard Worker   size_t	count,			// Number of elements
109*5e7646d2SAndroid Build Coastguard Worker 		alloc,			// Allocated elements
110*5e7646d2SAndroid Build Coastguard Worker 		current;		// Current element
111*5e7646d2SAndroid Build Coastguard Worker   ppdcShared	**data;			// Elements
112*5e7646d2SAndroid Build Coastguard Worker 
113*5e7646d2SAndroid Build Coastguard Worker   ppdcArray(ppdcArray *a = 0);
114*5e7646d2SAndroid Build Coastguard Worker   ~ppdcArray();
115*5e7646d2SAndroid Build Coastguard Worker 
116*5e7646d2SAndroid Build Coastguard Worker   PPDC_NAME("ppdcArray")
117*5e7646d2SAndroid Build Coastguard Worker 
118*5e7646d2SAndroid Build Coastguard Worker   void		add(ppdcShared *d);
119*5e7646d2SAndroid Build Coastguard Worker   ppdcShared	*first();
120*5e7646d2SAndroid Build Coastguard Worker   ppdcShared	*next();
121*5e7646d2SAndroid Build Coastguard Worker   void		remove(ppdcShared *d);
122*5e7646d2SAndroid Build Coastguard Worker };
123*5e7646d2SAndroid Build Coastguard Worker 
124*5e7646d2SAndroid Build Coastguard Worker class ppdcString			//// Shared String
125*5e7646d2SAndroid Build Coastguard Worker   : public ppdcShared
126*5e7646d2SAndroid Build Coastguard Worker {
127*5e7646d2SAndroid Build Coastguard Worker   public:
128*5e7646d2SAndroid Build Coastguard Worker 
129*5e7646d2SAndroid Build Coastguard Worker   char		*value;			// String value
130*5e7646d2SAndroid Build Coastguard Worker 
131*5e7646d2SAndroid Build Coastguard Worker   ppdcString(const char *v);
132*5e7646d2SAndroid Build Coastguard Worker   ~ppdcString();
133*5e7646d2SAndroid Build Coastguard Worker 
134*5e7646d2SAndroid Build Coastguard Worker   PPDC_NAME("ppdcString")
135*5e7646d2SAndroid Build Coastguard Worker };
136*5e7646d2SAndroid Build Coastguard Worker 
137*5e7646d2SAndroid Build Coastguard Worker class ppdcInteger			//// Shared integer
138*5e7646d2SAndroid Build Coastguard Worker   : public ppdcShared
139*5e7646d2SAndroid Build Coastguard Worker {
140*5e7646d2SAndroid Build Coastguard Worker   public:
141*5e7646d2SAndroid Build Coastguard Worker 
142*5e7646d2SAndroid Build Coastguard Worker   int		*value;			// Integer value
143*5e7646d2SAndroid Build Coastguard Worker 
ppdcInteger(int * v)144*5e7646d2SAndroid Build Coastguard Worker   ppdcInteger(int *v) { value = v; }
145*5e7646d2SAndroid Build Coastguard Worker 
146*5e7646d2SAndroid Build Coastguard Worker   PPDC_NAME("ppdcInteger")
147*5e7646d2SAndroid Build Coastguard Worker };
148*5e7646d2SAndroid Build Coastguard Worker 
149*5e7646d2SAndroid Build Coastguard Worker class ppdcMessage			//// Translation message
150*5e7646d2SAndroid Build Coastguard Worker   : public ppdcShared
151*5e7646d2SAndroid Build Coastguard Worker {
152*5e7646d2SAndroid Build Coastguard Worker   public:
153*5e7646d2SAndroid Build Coastguard Worker 
154*5e7646d2SAndroid Build Coastguard Worker   ppdcString	*id,			// Translation ID
155*5e7646d2SAndroid Build Coastguard Worker 		*string;		// Translation string
156*5e7646d2SAndroid Build Coastguard Worker 
157*5e7646d2SAndroid Build Coastguard Worker   ppdcMessage(const char *i, const char *s);
158*5e7646d2SAndroid Build Coastguard Worker   ~ppdcMessage();
159*5e7646d2SAndroid Build Coastguard Worker 
160*5e7646d2SAndroid Build Coastguard Worker   PPDC_NAME("ppdcMessage")
161*5e7646d2SAndroid Build Coastguard Worker };
162*5e7646d2SAndroid Build Coastguard Worker 
163*5e7646d2SAndroid Build Coastguard Worker class ppdcCatalog			//// Translation catalog
164*5e7646d2SAndroid Build Coastguard Worker   : public ppdcShared
165*5e7646d2SAndroid Build Coastguard Worker {
166*5e7646d2SAndroid Build Coastguard Worker   public:
167*5e7646d2SAndroid Build Coastguard Worker 
168*5e7646d2SAndroid Build Coastguard Worker   ppdcString	*locale;		// Name of locale
169*5e7646d2SAndroid Build Coastguard Worker   ppdcString	*filename;		// Name of translation file
170*5e7646d2SAndroid Build Coastguard Worker   ppdcArray	*messages;		// Array of translation messages
171*5e7646d2SAndroid Build Coastguard Worker 
172*5e7646d2SAndroid Build Coastguard Worker   ppdcCatalog(const char *l, const char *f = 0);
173*5e7646d2SAndroid Build Coastguard Worker   ~ppdcCatalog();
174*5e7646d2SAndroid Build Coastguard Worker 
175*5e7646d2SAndroid Build Coastguard Worker   PPDC_NAME("ppdcCatalog")
176*5e7646d2SAndroid Build Coastguard Worker 
177*5e7646d2SAndroid Build Coastguard Worker   void		add_message(const char *id, const char *string = NULL);
178*5e7646d2SAndroid Build Coastguard Worker   const char	*find_message(const char *id);
179*5e7646d2SAndroid Build Coastguard Worker   int		load_messages(const char *f);
180*5e7646d2SAndroid Build Coastguard Worker   int		save_messages(const char *f);
181*5e7646d2SAndroid Build Coastguard Worker };
182*5e7646d2SAndroid Build Coastguard Worker 
183*5e7646d2SAndroid Build Coastguard Worker class ppdcAttr				//// Attribute
184*5e7646d2SAndroid Build Coastguard Worker   : public ppdcShared
185*5e7646d2SAndroid Build Coastguard Worker {
186*5e7646d2SAndroid Build Coastguard Worker   public:
187*5e7646d2SAndroid Build Coastguard Worker 
188*5e7646d2SAndroid Build Coastguard Worker   ppdcString	*name,			// Name of attribute
189*5e7646d2SAndroid Build Coastguard Worker 		*selector,		// Selector string
190*5e7646d2SAndroid Build Coastguard Worker 		*text,			// Text string
191*5e7646d2SAndroid Build Coastguard Worker 		*value;			// Value string
192*5e7646d2SAndroid Build Coastguard Worker   bool		localizable;		// Should this attribute be localized?
193*5e7646d2SAndroid Build Coastguard Worker 
194*5e7646d2SAndroid Build Coastguard Worker   ppdcAttr(const char *n, const char *s, const char *t, const char *v,
195*5e7646d2SAndroid Build Coastguard Worker            bool loc = false);
196*5e7646d2SAndroid Build Coastguard Worker   ~ppdcAttr();
197*5e7646d2SAndroid Build Coastguard Worker 
198*5e7646d2SAndroid Build Coastguard Worker   PPDC_NAME("ppdcAttr")
199*5e7646d2SAndroid Build Coastguard Worker };
200*5e7646d2SAndroid Build Coastguard Worker 
201*5e7646d2SAndroid Build Coastguard Worker class ppdcFont				//// Shared Font
202*5e7646d2SAndroid Build Coastguard Worker   : public ppdcShared
203*5e7646d2SAndroid Build Coastguard Worker {
204*5e7646d2SAndroid Build Coastguard Worker   public:
205*5e7646d2SAndroid Build Coastguard Worker 
206*5e7646d2SAndroid Build Coastguard Worker   ppdcString	*name,			// Font name
207*5e7646d2SAndroid Build Coastguard Worker 		*encoding,		// Font base encoding
208*5e7646d2SAndroid Build Coastguard Worker 		*version,		// Font version
209*5e7646d2SAndroid Build Coastguard Worker 		*charset;		// Font charset
210*5e7646d2SAndroid Build Coastguard Worker   ppdcFontStatus status;		// Font status (ROM or Disk)
211*5e7646d2SAndroid Build Coastguard Worker 
212*5e7646d2SAndroid Build Coastguard Worker   ppdcFont(const char *n, const char *e, const char *v, const char *c,
213*5e7646d2SAndroid Build Coastguard Worker            ppdcFontStatus s);
214*5e7646d2SAndroid Build Coastguard Worker   ~ppdcFont();
215*5e7646d2SAndroid Build Coastguard Worker 
216*5e7646d2SAndroid Build Coastguard Worker   PPDC_NAME("ppdcFont")
217*5e7646d2SAndroid Build Coastguard Worker };
218*5e7646d2SAndroid Build Coastguard Worker 
219*5e7646d2SAndroid Build Coastguard Worker class ppdcChoice			//// Option Choice
220*5e7646d2SAndroid Build Coastguard Worker   : public ppdcShared
221*5e7646d2SAndroid Build Coastguard Worker {
222*5e7646d2SAndroid Build Coastguard Worker   public:
223*5e7646d2SAndroid Build Coastguard Worker 
224*5e7646d2SAndroid Build Coastguard Worker   ppdcString	*name,			// Name of choice
225*5e7646d2SAndroid Build Coastguard Worker 		*text,			// Human-readable text of choice
226*5e7646d2SAndroid Build Coastguard Worker 		*code;			// PS code of choice
227*5e7646d2SAndroid Build Coastguard Worker 
228*5e7646d2SAndroid Build Coastguard Worker   ppdcChoice(const char *n, const char *t, const char *c);
229*5e7646d2SAndroid Build Coastguard Worker   ~ppdcChoice();
230*5e7646d2SAndroid Build Coastguard Worker 
231*5e7646d2SAndroid Build Coastguard Worker   PPDC_NAME("ppdcChoice")
232*5e7646d2SAndroid Build Coastguard Worker };
233*5e7646d2SAndroid Build Coastguard Worker 
234*5e7646d2SAndroid Build Coastguard Worker class ppdcOption			//// Option
235*5e7646d2SAndroid Build Coastguard Worker   : public ppdcShared
236*5e7646d2SAndroid Build Coastguard Worker {
237*5e7646d2SAndroid Build Coastguard Worker   public:
238*5e7646d2SAndroid Build Coastguard Worker 
239*5e7646d2SAndroid Build Coastguard Worker   ppdcOptType	type;			// Type of option
240*5e7646d2SAndroid Build Coastguard Worker   ppdcString	*name,			// Name of option
241*5e7646d2SAndroid Build Coastguard Worker 		*text;			// Human-readable text of option
242*5e7646d2SAndroid Build Coastguard Worker   ppdcOptSection section;		// Section for option code
243*5e7646d2SAndroid Build Coastguard Worker   float		order;			// Order number
244*5e7646d2SAndroid Build Coastguard Worker   ppdcArray	*choices;		// Choices
245*5e7646d2SAndroid Build Coastguard Worker   ppdcString	*defchoice;		// Default choice
246*5e7646d2SAndroid Build Coastguard Worker 
247*5e7646d2SAndroid Build Coastguard Worker   ppdcOption(ppdcOptType ot, const char *n, const char *t, ppdcOptSection s,
248*5e7646d2SAndroid Build Coastguard Worker              float o);
249*5e7646d2SAndroid Build Coastguard Worker   ppdcOption(ppdcOption *o);
250*5e7646d2SAndroid Build Coastguard Worker   ~ppdcOption();
251*5e7646d2SAndroid Build Coastguard Worker 
252*5e7646d2SAndroid Build Coastguard Worker   PPDC_NAME("ppdcOption")
253*5e7646d2SAndroid Build Coastguard Worker 
add_choice(ppdcChoice * c)254*5e7646d2SAndroid Build Coastguard Worker   void		add_choice(ppdcChoice *c) { choices->add(c); }
255*5e7646d2SAndroid Build Coastguard Worker   ppdcChoice	*find_choice(const char *n);
256*5e7646d2SAndroid Build Coastguard Worker   void		set_defchoice(ppdcChoice *c);
257*5e7646d2SAndroid Build Coastguard Worker };
258*5e7646d2SAndroid Build Coastguard Worker 
259*5e7646d2SAndroid Build Coastguard Worker class ppdcGroup			//// Group of Options
260*5e7646d2SAndroid Build Coastguard Worker   : public ppdcShared
261*5e7646d2SAndroid Build Coastguard Worker {
262*5e7646d2SAndroid Build Coastguard Worker   public:
263*5e7646d2SAndroid Build Coastguard Worker 
264*5e7646d2SAndroid Build Coastguard Worker   ppdcString	*name,			// Name of option
265*5e7646d2SAndroid Build Coastguard Worker 		*text;			// Human-readable text of option
266*5e7646d2SAndroid Build Coastguard Worker   ppdcArray	*options;		// Options
267*5e7646d2SAndroid Build Coastguard Worker 
268*5e7646d2SAndroid Build Coastguard Worker   ppdcGroup(const char *n, const char *t);
269*5e7646d2SAndroid Build Coastguard Worker   ppdcGroup(ppdcGroup *g);
270*5e7646d2SAndroid Build Coastguard Worker   ~ppdcGroup();
271*5e7646d2SAndroid Build Coastguard Worker 
272*5e7646d2SAndroid Build Coastguard Worker   PPDC_NAME("ppdcGroup")
273*5e7646d2SAndroid Build Coastguard Worker 
add_option(ppdcOption * o)274*5e7646d2SAndroid Build Coastguard Worker   void		add_option(ppdcOption *o) { options->add(o); }
275*5e7646d2SAndroid Build Coastguard Worker   ppdcOption	*find_option(const char *n);
276*5e7646d2SAndroid Build Coastguard Worker };
277*5e7646d2SAndroid Build Coastguard Worker 
278*5e7646d2SAndroid Build Coastguard Worker class ppdcConstraint			//// Constraint
279*5e7646d2SAndroid Build Coastguard Worker   : public ppdcShared
280*5e7646d2SAndroid Build Coastguard Worker {
281*5e7646d2SAndroid Build Coastguard Worker   public:
282*5e7646d2SAndroid Build Coastguard Worker 
283*5e7646d2SAndroid Build Coastguard Worker   ppdcString	*option1,		// First option
284*5e7646d2SAndroid Build Coastguard Worker 		*choice1,		// First choice
285*5e7646d2SAndroid Build Coastguard Worker 		*option2,		// Second option
286*5e7646d2SAndroid Build Coastguard Worker 		*choice2;		// Second choice
287*5e7646d2SAndroid Build Coastguard Worker 
288*5e7646d2SAndroid Build Coastguard Worker   ppdcConstraint(const char *o1, const char *c1, const char *o2,
289*5e7646d2SAndroid Build Coastguard Worker 		 const char *c2);
290*5e7646d2SAndroid Build Coastguard Worker   ~ppdcConstraint();
291*5e7646d2SAndroid Build Coastguard Worker 
292*5e7646d2SAndroid Build Coastguard Worker   PPDC_NAME("ppdcConstraint")
293*5e7646d2SAndroid Build Coastguard Worker };
294*5e7646d2SAndroid Build Coastguard Worker 
295*5e7646d2SAndroid Build Coastguard Worker class ppdcFilter			//// Filter Program
296*5e7646d2SAndroid Build Coastguard Worker   : public ppdcShared
297*5e7646d2SAndroid Build Coastguard Worker {
298*5e7646d2SAndroid Build Coastguard Worker   public:
299*5e7646d2SAndroid Build Coastguard Worker 
300*5e7646d2SAndroid Build Coastguard Worker   ppdcString	*mime_type,		// MIME type
301*5e7646d2SAndroid Build Coastguard Worker 		*program;		// Filter program
302*5e7646d2SAndroid Build Coastguard Worker   int		cost;			// Relative cost of filter
303*5e7646d2SAndroid Build Coastguard Worker 
304*5e7646d2SAndroid Build Coastguard Worker   ppdcFilter(const char *t, const char *p, int c);
305*5e7646d2SAndroid Build Coastguard Worker   ~ppdcFilter();
306*5e7646d2SAndroid Build Coastguard Worker 
307*5e7646d2SAndroid Build Coastguard Worker   PPDC_NAME("ppdcFilter")
308*5e7646d2SAndroid Build Coastguard Worker };
309*5e7646d2SAndroid Build Coastguard Worker 
310*5e7646d2SAndroid Build Coastguard Worker class ppdcMediaSize			//// Media Size
311*5e7646d2SAndroid Build Coastguard Worker   : public ppdcShared
312*5e7646d2SAndroid Build Coastguard Worker {
313*5e7646d2SAndroid Build Coastguard Worker   public:
314*5e7646d2SAndroid Build Coastguard Worker 
315*5e7646d2SAndroid Build Coastguard Worker   ppdcString	*name,			// Name of size
316*5e7646d2SAndroid Build Coastguard Worker 		*text;			// Human-readable text
317*5e7646d2SAndroid Build Coastguard Worker   float		width,			// Width in points
318*5e7646d2SAndroid Build Coastguard Worker 		length,			// Length in points
319*5e7646d2SAndroid Build Coastguard Worker 		left,			// Left limit in points
320*5e7646d2SAndroid Build Coastguard Worker 		bottom,			// Bottom limit in points
321*5e7646d2SAndroid Build Coastguard Worker 		right,			// Right limit in points
322*5e7646d2SAndroid Build Coastguard Worker 		top;			// Top limit in points
323*5e7646d2SAndroid Build Coastguard Worker   ppdcString	*size_code,		// PageSize code, if any
324*5e7646d2SAndroid Build Coastguard Worker 		*region_code;		// PageRegion code, if any
325*5e7646d2SAndroid Build Coastguard Worker 
326*5e7646d2SAndroid Build Coastguard Worker   ppdcMediaSize(const char *n, const char *t, float w, float l,
327*5e7646d2SAndroid Build Coastguard Worker                 float lm, float bm, float rm, float tm,
328*5e7646d2SAndroid Build Coastguard Worker 		const char *sc = 0, const char *rc = 0);
329*5e7646d2SAndroid Build Coastguard Worker   ~ppdcMediaSize();
330*5e7646d2SAndroid Build Coastguard Worker 
331*5e7646d2SAndroid Build Coastguard Worker   PPDC_NAME("ppdcMediaSize")
332*5e7646d2SAndroid Build Coastguard Worker };
333*5e7646d2SAndroid Build Coastguard Worker 
334*5e7646d2SAndroid Build Coastguard Worker class ppdcProfile			//// Color Profile
335*5e7646d2SAndroid Build Coastguard Worker   : public ppdcShared
336*5e7646d2SAndroid Build Coastguard Worker {
337*5e7646d2SAndroid Build Coastguard Worker   public:
338*5e7646d2SAndroid Build Coastguard Worker 
339*5e7646d2SAndroid Build Coastguard Worker   ppdcString	*resolution,		// Resolution name
340*5e7646d2SAndroid Build Coastguard Worker 		*media_type;		// Media type name
341*5e7646d2SAndroid Build Coastguard Worker   float		density,		// Color profile density
342*5e7646d2SAndroid Build Coastguard Worker 		gamma,			// Color profile gamma
343*5e7646d2SAndroid Build Coastguard Worker 		profile[9];		// Color profile matrix
344*5e7646d2SAndroid Build Coastguard Worker 
345*5e7646d2SAndroid Build Coastguard Worker   ppdcProfile(const char *r, const char *m, float d, float g, const float *p);
346*5e7646d2SAndroid Build Coastguard Worker   ~ppdcProfile();
347*5e7646d2SAndroid Build Coastguard Worker 
348*5e7646d2SAndroid Build Coastguard Worker   PPDC_NAME("ppdcProfile")
349*5e7646d2SAndroid Build Coastguard Worker };
350*5e7646d2SAndroid Build Coastguard Worker 
351*5e7646d2SAndroid Build Coastguard Worker class ppdcSource;
352*5e7646d2SAndroid Build Coastguard Worker 
353*5e7646d2SAndroid Build Coastguard Worker class ppdcDriver			//// Printer Driver Data
354*5e7646d2SAndroid Build Coastguard Worker   : public ppdcShared
355*5e7646d2SAndroid Build Coastguard Worker {
356*5e7646d2SAndroid Build Coastguard Worker   public:
357*5e7646d2SAndroid Build Coastguard Worker 
358*5e7646d2SAndroid Build Coastguard Worker   ppdcDrvType	type;			// Driver type
359*5e7646d2SAndroid Build Coastguard Worker   ppdcArray	*copyright;		// Copyright strings
360*5e7646d2SAndroid Build Coastguard Worker   ppdcString	*manufacturer,		// Manufacturer
361*5e7646d2SAndroid Build Coastguard Worker 		*model_name,		// Name of printer model
362*5e7646d2SAndroid Build Coastguard Worker 		*file_name,		// Output filename for PPD
363*5e7646d2SAndroid Build Coastguard Worker 		*pc_file_name,		// 8 character PC filename for PPD
364*5e7646d2SAndroid Build Coastguard Worker 		*version;		// Version number
365*5e7646d2SAndroid Build Coastguard Worker   int		model_number,		// Model number for driver
366*5e7646d2SAndroid Build Coastguard Worker 		manual_copies,		// Do manual copies?
367*5e7646d2SAndroid Build Coastguard Worker 		color_device,		// Support color?
368*5e7646d2SAndroid Build Coastguard Worker 		throughput;		// Throughput in pages per minute
369*5e7646d2SAndroid Build Coastguard Worker   ppdcArray	*attrs,			// Attributes
370*5e7646d2SAndroid Build Coastguard Worker 		*constraints,		// Constraints
371*5e7646d2SAndroid Build Coastguard Worker 		*filters,		// Filters
372*5e7646d2SAndroid Build Coastguard Worker 		*fonts,			// Fonts
373*5e7646d2SAndroid Build Coastguard Worker 		*groups,		// Option groups
374*5e7646d2SAndroid Build Coastguard Worker 		*profiles,		// Color profiles
375*5e7646d2SAndroid Build Coastguard Worker 		*sizes;			// Fixed sizes
376*5e7646d2SAndroid Build Coastguard Worker   ppdcString	*default_font,		// Default font
377*5e7646d2SAndroid Build Coastguard Worker 		*default_size;		// Default size option
378*5e7646d2SAndroid Build Coastguard Worker   int		variable_paper_size;	// Support variable sizes?
379*5e7646d2SAndroid Build Coastguard Worker   ppdcString	*custom_size_code;	// Custom page size code, if any
380*5e7646d2SAndroid Build Coastguard Worker   float		left_margin,		// Margins for device in points
381*5e7646d2SAndroid Build Coastguard Worker 		bottom_margin,
382*5e7646d2SAndroid Build Coastguard Worker 		right_margin,
383*5e7646d2SAndroid Build Coastguard Worker 		top_margin,
384*5e7646d2SAndroid Build Coastguard Worker 		max_width,		// Maximum width (points)
385*5e7646d2SAndroid Build Coastguard Worker 		max_length,		// Maximum length (points)
386*5e7646d2SAndroid Build Coastguard Worker 		min_width,		// Minimum width (points)
387*5e7646d2SAndroid Build Coastguard Worker 		min_length;		// Minimum length (points)
388*5e7646d2SAndroid Build Coastguard Worker 
389*5e7646d2SAndroid Build Coastguard Worker   ppdcDriver(ppdcDriver *d = 0);
390*5e7646d2SAndroid Build Coastguard Worker   ~ppdcDriver();
391*5e7646d2SAndroid Build Coastguard Worker 
392*5e7646d2SAndroid Build Coastguard Worker   PPDC_NAME("ppdcDriver")
393*5e7646d2SAndroid Build Coastguard Worker 
add_attr(ppdcAttr * a)394*5e7646d2SAndroid Build Coastguard Worker   void		add_attr(ppdcAttr *a) { attrs->add(a); }
add_constraint(ppdcConstraint * c)395*5e7646d2SAndroid Build Coastguard Worker   void		add_constraint(ppdcConstraint *c) { constraints->add(c); }
add_copyright(const char * c)396*5e7646d2SAndroid Build Coastguard Worker   void		add_copyright(const char *c) {
397*5e7646d2SAndroid Build Coastguard Worker     		  copyright->add(new ppdcString(c));
398*5e7646d2SAndroid Build Coastguard Worker 		}
add_filter(ppdcFilter * f)399*5e7646d2SAndroid Build Coastguard Worker   void		add_filter(ppdcFilter *f) { filters->add(f); }
add_font(ppdcFont * f)400*5e7646d2SAndroid Build Coastguard Worker   void		add_font(ppdcFont *f) { fonts->add(f); }
add_group(ppdcGroup * g)401*5e7646d2SAndroid Build Coastguard Worker   void		add_group(ppdcGroup *g) { groups->add(g); }
add_profile(ppdcProfile * p)402*5e7646d2SAndroid Build Coastguard Worker   void		add_profile(ppdcProfile *p) { profiles->add(p); }
add_size(ppdcMediaSize * m)403*5e7646d2SAndroid Build Coastguard Worker   void		add_size(ppdcMediaSize *m) { sizes->add(m); }
404*5e7646d2SAndroid Build Coastguard Worker 
405*5e7646d2SAndroid Build Coastguard Worker   ppdcAttr	*find_attr(const char *k, const char *s);
406*5e7646d2SAndroid Build Coastguard Worker   ppdcGroup	*find_group(const char *n);
407*5e7646d2SAndroid Build Coastguard Worker   ppdcOption	*find_option(const char *n);
408*5e7646d2SAndroid Build Coastguard Worker   ppdcOption	*find_option_group(const char *n, ppdcGroup **mg);
409*5e7646d2SAndroid Build Coastguard Worker 
410*5e7646d2SAndroid Build Coastguard Worker   void		set_custom_size_code(const char *c);
411*5e7646d2SAndroid Build Coastguard Worker   void		set_default_font(ppdcFont *f);
412*5e7646d2SAndroid Build Coastguard Worker   void		set_default_size(ppdcMediaSize *m);
413*5e7646d2SAndroid Build Coastguard Worker   void		set_file_name(const char *f);
414*5e7646d2SAndroid Build Coastguard Worker   void		set_manufacturer(const char *m);
415*5e7646d2SAndroid Build Coastguard Worker   void		set_model_name(const char *m);
416*5e7646d2SAndroid Build Coastguard Worker   void		set_pc_file_name(const char *f);
417*5e7646d2SAndroid Build Coastguard Worker   void		set_version(const char *v);
418*5e7646d2SAndroid Build Coastguard Worker 
419*5e7646d2SAndroid Build Coastguard Worker   int		write_ppd_file(cups_file_t *fp, ppdcCatalog *catalog,
420*5e7646d2SAndroid Build Coastguard Worker 		               ppdcArray *locales, ppdcSource *src,
421*5e7646d2SAndroid Build Coastguard Worker 			       ppdcLineEnding le);
422*5e7646d2SAndroid Build Coastguard Worker };
423*5e7646d2SAndroid Build Coastguard Worker 
424*5e7646d2SAndroid Build Coastguard Worker class ppdcVariable			//// Variable Definition
425*5e7646d2SAndroid Build Coastguard Worker   : public ppdcShared
426*5e7646d2SAndroid Build Coastguard Worker {
427*5e7646d2SAndroid Build Coastguard Worker   public:
428*5e7646d2SAndroid Build Coastguard Worker 
429*5e7646d2SAndroid Build Coastguard Worker   ppdcString	*name,			// Name of variable
430*5e7646d2SAndroid Build Coastguard Worker 		*value;			// Value of variable
431*5e7646d2SAndroid Build Coastguard Worker 
432*5e7646d2SAndroid Build Coastguard Worker   ppdcVariable(const char *n, const char *v);
433*5e7646d2SAndroid Build Coastguard Worker   ~ppdcVariable();
434*5e7646d2SAndroid Build Coastguard Worker 
435*5e7646d2SAndroid Build Coastguard Worker   PPDC_NAME("ppdcVariable")
436*5e7646d2SAndroid Build Coastguard Worker 
437*5e7646d2SAndroid Build Coastguard Worker   void		set_value(const char *v);
438*5e7646d2SAndroid Build Coastguard Worker };
439*5e7646d2SAndroid Build Coastguard Worker 
440*5e7646d2SAndroid Build Coastguard Worker class ppdcFile				//// File
441*5e7646d2SAndroid Build Coastguard Worker {
442*5e7646d2SAndroid Build Coastguard Worker   public:
443*5e7646d2SAndroid Build Coastguard Worker 
444*5e7646d2SAndroid Build Coastguard Worker   bool		close_on_delete;	// Close file on delete?
445*5e7646d2SAndroid Build Coastguard Worker   cups_file_t	*fp;			// File pointer
446*5e7646d2SAndroid Build Coastguard Worker   const char	*filename;		// Filename
447*5e7646d2SAndroid Build Coastguard Worker   int		line;			// Line in file
448*5e7646d2SAndroid Build Coastguard Worker 
449*5e7646d2SAndroid Build Coastguard Worker   ppdcFile(const char *f, cups_file_t *ffp = (cups_file_t *)0);
450*5e7646d2SAndroid Build Coastguard Worker   ~ppdcFile();
451*5e7646d2SAndroid Build Coastguard Worker 
452*5e7646d2SAndroid Build Coastguard Worker   int		get();
453*5e7646d2SAndroid Build Coastguard Worker   int		peek();
454*5e7646d2SAndroid Build Coastguard Worker };
455*5e7646d2SAndroid Build Coastguard Worker 
456*5e7646d2SAndroid Build Coastguard Worker class ppdcSource			//// Source File
457*5e7646d2SAndroid Build Coastguard Worker   : public ppdcShared
458*5e7646d2SAndroid Build Coastguard Worker {
459*5e7646d2SAndroid Build Coastguard Worker   public:
460*5e7646d2SAndroid Build Coastguard Worker 
461*5e7646d2SAndroid Build Coastguard Worker   static ppdcArray *includes;		// Include directories
462*5e7646d2SAndroid Build Coastguard Worker   static const char *driver_types[];	// Driver types
463*5e7646d2SAndroid Build Coastguard Worker 
464*5e7646d2SAndroid Build Coastguard Worker   ppdcString	*filename;		// Filename
465*5e7646d2SAndroid Build Coastguard Worker   ppdcArray	*base_fonts,		// Base fonts
466*5e7646d2SAndroid Build Coastguard Worker 		*drivers,		// Printer drivers
467*5e7646d2SAndroid Build Coastguard Worker 		*po_files,		// Message catalogs
468*5e7646d2SAndroid Build Coastguard Worker 		*sizes,			// Predefined media sizes
469*5e7646d2SAndroid Build Coastguard Worker 		*vars;			// Defined variables
470*5e7646d2SAndroid Build Coastguard Worker   int		cond_state,		// Cummulative conditional state
471*5e7646d2SAndroid Build Coastguard Worker 		*cond_current,		// Current #if state
472*5e7646d2SAndroid Build Coastguard Worker 		cond_stack[101];	// #if state stack
473*5e7646d2SAndroid Build Coastguard Worker 
474*5e7646d2SAndroid Build Coastguard Worker 
475*5e7646d2SAndroid Build Coastguard Worker   ppdcSource(const char *f = 0, cups_file_t *ffp = (cups_file_t *)0);
476*5e7646d2SAndroid Build Coastguard Worker   ~ppdcSource();
477*5e7646d2SAndroid Build Coastguard Worker 
478*5e7646d2SAndroid Build Coastguard Worker   PPDC_NAME("ppdcSource")
479*5e7646d2SAndroid Build Coastguard Worker 
480*5e7646d2SAndroid Build Coastguard Worker   static void	add_include(const char *d);
481*5e7646d2SAndroid Build Coastguard Worker   ppdcDriver	*find_driver(const char *f);
482*5e7646d2SAndroid Build Coastguard Worker   static char	*find_include(const char *f, const char *base, char *n,
483*5e7646d2SAndroid Build Coastguard Worker 			      int nlen);
484*5e7646d2SAndroid Build Coastguard Worker   ppdcCatalog	*find_po(const char *l);
485*5e7646d2SAndroid Build Coastguard Worker   ppdcMediaSize	*find_size(const char *s);
486*5e7646d2SAndroid Build Coastguard Worker   ppdcVariable	*find_variable(const char *n);
487*5e7646d2SAndroid Build Coastguard Worker   ppdcAttr	*get_attr(ppdcFile *fp, bool loc = false);
488*5e7646d2SAndroid Build Coastguard Worker   int		get_boolean(ppdcFile *fp);
489*5e7646d2SAndroid Build Coastguard Worker   ppdcChoice	*get_choice(ppdcFile *fp);
490*5e7646d2SAndroid Build Coastguard Worker   ppdcChoice	*get_color_model(ppdcFile *fp);
491*5e7646d2SAndroid Build Coastguard Worker   int		get_color_order(const char *co);
492*5e7646d2SAndroid Build Coastguard Worker   ppdcProfile	*get_color_profile(ppdcFile *fp);
493*5e7646d2SAndroid Build Coastguard Worker   int		get_color_space(const char *cs);
494*5e7646d2SAndroid Build Coastguard Worker   ppdcConstraint *get_constraint(ppdcFile *fp);
495*5e7646d2SAndroid Build Coastguard Worker   ppdcMediaSize	*get_custom_size(ppdcFile *fp);
496*5e7646d2SAndroid Build Coastguard Worker   void		get_duplex(ppdcFile *fp, ppdcDriver *d);
497*5e7646d2SAndroid Build Coastguard Worker   ppdcFilter	*get_filter(ppdcFile *fp);
498*5e7646d2SAndroid Build Coastguard Worker   float		get_float(ppdcFile *fp);
499*5e7646d2SAndroid Build Coastguard Worker   ppdcFont	*get_font(ppdcFile *fp);
500*5e7646d2SAndroid Build Coastguard Worker   ppdcChoice	*get_generic(ppdcFile *fp, const char *keyword,
501*5e7646d2SAndroid Build Coastguard Worker 		             const char *tattr, const char *nattr);
502*5e7646d2SAndroid Build Coastguard Worker   ppdcGroup	*get_group(ppdcFile *fp, ppdcDriver *d);
503*5e7646d2SAndroid Build Coastguard Worker   ppdcOption	*get_installable(ppdcFile *fp);
504*5e7646d2SAndroid Build Coastguard Worker   int		get_integer(const char *v);
505*5e7646d2SAndroid Build Coastguard Worker   int		get_integer(ppdcFile *fp);
506*5e7646d2SAndroid Build Coastguard Worker   float		get_measurement(ppdcFile *fp);
507*5e7646d2SAndroid Build Coastguard Worker   ppdcOption	*get_option(ppdcFile *fp, ppdcDriver *d, ppdcGroup *g);
508*5e7646d2SAndroid Build Coastguard Worker   ppdcCatalog	*get_po(ppdcFile *fp);
509*5e7646d2SAndroid Build Coastguard Worker   ppdcChoice	*get_resolution(ppdcFile *fp);
510*5e7646d2SAndroid Build Coastguard Worker   ppdcProfile	*get_simple_profile(ppdcFile *fp);
511*5e7646d2SAndroid Build Coastguard Worker   ppdcMediaSize	*get_size(ppdcFile *fp);
512*5e7646d2SAndroid Build Coastguard Worker   char		*get_token(ppdcFile *fp, char *buffer, int buflen);
513*5e7646d2SAndroid Build Coastguard Worker   ppdcVariable	*get_variable(ppdcFile *fp);
514*5e7646d2SAndroid Build Coastguard Worker   int		import_ppd(const char *f);
515*5e7646d2SAndroid Build Coastguard Worker   int		quotef(cups_file_t *fp, const char *format, ...);
516*5e7646d2SAndroid Build Coastguard Worker   void		read_file(const char *f, cups_file_t *ffp = (cups_file_t *)0);
517*5e7646d2SAndroid Build Coastguard Worker   void		scan_file(ppdcFile *fp, ppdcDriver *td = 0, bool inc = false);
518*5e7646d2SAndroid Build Coastguard Worker   ppdcVariable	*set_variable(const char *name, const char *value);
519*5e7646d2SAndroid Build Coastguard Worker   int		write_file(const char *f);
520*5e7646d2SAndroid Build Coastguard Worker };
521*5e7646d2SAndroid Build Coastguard Worker 
522*5e7646d2SAndroid Build Coastguard Worker 
523*5e7646d2SAndroid Build Coastguard Worker #endif // !_PPDC_H_
524