xref: /titanic_54/usr/src/cmd/lp/include/lp.h (revision 7c478bd95313f5f23a4c958a745db2134aa03244)
1*7c478bd9Sstevel@tonic-gate /*
2*7c478bd9Sstevel@tonic-gate  * CDDL HEADER START
3*7c478bd9Sstevel@tonic-gate  *
4*7c478bd9Sstevel@tonic-gate  * The contents of this file are subject to the terms of the
5*7c478bd9Sstevel@tonic-gate  * Common Development and Distribution License, Version 1.0 only
6*7c478bd9Sstevel@tonic-gate  * (the "License").  You may not use this file except in compliance
7*7c478bd9Sstevel@tonic-gate  * with the License.
8*7c478bd9Sstevel@tonic-gate  *
9*7c478bd9Sstevel@tonic-gate  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10*7c478bd9Sstevel@tonic-gate  * or http://www.opensolaris.org/os/licensing.
11*7c478bd9Sstevel@tonic-gate  * See the License for the specific language governing permissions
12*7c478bd9Sstevel@tonic-gate  * and limitations under the License.
13*7c478bd9Sstevel@tonic-gate  *
14*7c478bd9Sstevel@tonic-gate  * When distributing Covered Code, include this CDDL HEADER in each
15*7c478bd9Sstevel@tonic-gate  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16*7c478bd9Sstevel@tonic-gate  * If applicable, add the following below this CDDL HEADER, with the
17*7c478bd9Sstevel@tonic-gate  * fields enclosed by brackets "[]" replaced with your own identifying
18*7c478bd9Sstevel@tonic-gate  * information: Portions Copyright [yyyy] [name of copyright owner]
19*7c478bd9Sstevel@tonic-gate  *
20*7c478bd9Sstevel@tonic-gate  * CDDL HEADER END
21*7c478bd9Sstevel@tonic-gate  */
22*7c478bd9Sstevel@tonic-gate /*
23*7c478bd9Sstevel@tonic-gate  * Copyright 2005 Sun Microsystems, Inc.  All rights reserved.
24*7c478bd9Sstevel@tonic-gate  * Use is subject to license terms.
25*7c478bd9Sstevel@tonic-gate  */
26*7c478bd9Sstevel@tonic-gate 
27*7c478bd9Sstevel@tonic-gate /*	Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T	*/
28*7c478bd9Sstevel@tonic-gate /*	  All Rights Reserved  	*/
29*7c478bd9Sstevel@tonic-gate 
30*7c478bd9Sstevel@tonic-gate 
31*7c478bd9Sstevel@tonic-gate #pragma ident	"%Z%%M%	%I%	%E% SMI"
32*7c478bd9Sstevel@tonic-gate 
33*7c478bd9Sstevel@tonic-gate #if	!defined(_LP_LP_H)
34*7c478bd9Sstevel@tonic-gate #define	_LP_LP_H
35*7c478bd9Sstevel@tonic-gate 
36*7c478bd9Sstevel@tonic-gate #include "errno.h"
37*7c478bd9Sstevel@tonic-gate #include "fcntl.h"
38*7c478bd9Sstevel@tonic-gate #include "sys/types.h"
39*7c478bd9Sstevel@tonic-gate #include "sys/stat.h"
40*7c478bd9Sstevel@tonic-gate #include "stdio.h"
41*7c478bd9Sstevel@tonic-gate #include "dirent.h"
42*7c478bd9Sstevel@tonic-gate 
43*7c478bd9Sstevel@tonic-gate /**
44*7c478bd9Sstevel@tonic-gate  ** Types:
45*7c478bd9Sstevel@tonic-gate  **/
46*7c478bd9Sstevel@tonic-gate 
47*7c478bd9Sstevel@tonic-gate typedef struct SCALED {
48*7c478bd9Sstevel@tonic-gate 	float	val;	/* value of number, scaled according to "sc" */
49*7c478bd9Sstevel@tonic-gate 	char	sc;	/* 'i' inches, 'c' centimeters, ' ' lines/cols */
50*7c478bd9Sstevel@tonic-gate }			SCALED;
51*7c478bd9Sstevel@tonic-gate 
52*7c478bd9Sstevel@tonic-gate typedef struct FALERT {
53*7c478bd9Sstevel@tonic-gate 	char *	shcmd;	/* shell command used to perform the alert */
54*7c478bd9Sstevel@tonic-gate 	int	Q;	/* # requests queued to activate alert */
55*7c478bd9Sstevel@tonic-gate 	int	W;	/* alert is sent every "W" minutes */
56*7c478bd9Sstevel@tonic-gate } FALERT;
57*7c478bd9Sstevel@tonic-gate 
58*7c478bd9Sstevel@tonic-gate 
59*7c478bd9Sstevel@tonic-gate #define	LP_USE_PAPI_ATTR 1	/* use PAPI attributes for printing */
60*7c478bd9Sstevel@tonic-gate 				/* TODO: is this best place for this ? */
61*7c478bd9Sstevel@tonic-gate 
62*7c478bd9Sstevel@tonic-gate /**
63*7c478bd9Sstevel@tonic-gate  ** Places:
64*7c478bd9Sstevel@tonic-gate  **/
65*7c478bd9Sstevel@tonic-gate 
66*7c478bd9Sstevel@tonic-gate /*
67*7c478bd9Sstevel@tonic-gate  * These functions no longer exist.  The defines take care
68*7c478bd9Sstevel@tonic-gate  * of recompiling code that expects these and the null functions
69*7c478bd9Sstevel@tonic-gate  * in getpaths.c take care of relinking objects that expect these.
70*7c478bd9Sstevel@tonic-gate  */
71*7c478bd9Sstevel@tonic-gate #define	getpaths()
72*7c478bd9Sstevel@tonic-gate #define	getadminpaths(x)
73*7c478bd9Sstevel@tonic-gate 
74*7c478bd9Sstevel@tonic-gate #define LPDIR		"/usr/lib/lp"
75*7c478bd9Sstevel@tonic-gate #define ETCDIR		"/etc/lp"
76*7c478bd9Sstevel@tonic-gate #define SPOOLDIR	"/var/spool/lp"
77*7c478bd9Sstevel@tonic-gate #define LOGDIR		"/var/lp/logs"
78*7c478bd9Sstevel@tonic-gate 
79*7c478bd9Sstevel@tonic-gate #define	TERMINFO	"/usr/share/lib/terminfo"
80*7c478bd9Sstevel@tonic-gate 
81*7c478bd9Sstevel@tonic-gate #define	LPUSER		"lp"
82*7c478bd9Sstevel@tonic-gate #define ROOTUSER	"root"
83*7c478bd9Sstevel@tonic-gate 
84*7c478bd9Sstevel@tonic-gate #define BANG_S		"!"
85*7c478bd9Sstevel@tonic-gate #define BANG_C		'!'
86*7c478bd9Sstevel@tonic-gate 
87*7c478bd9Sstevel@tonic-gate #define	LOCAL_LPUSER	BANG_S LPUSER
88*7c478bd9Sstevel@tonic-gate #define LOCAL_ROOTUSER	BANG_S ROOTUSER
89*7c478bd9Sstevel@tonic-gate #define ALL_BANG_ALL	NAME_ALL BANG_S NAME_ALL
90*7c478bd9Sstevel@tonic-gate 
91*7c478bd9Sstevel@tonic-gate /* #define	ADMINSDIR	"admins"  */
92*7c478bd9Sstevel@tonic-gate /* # define CLASSESDIR	"classes" */
93*7c478bd9Sstevel@tonic-gate /* # define FORMSDIR	"forms" */
94*7c478bd9Sstevel@tonic-gate /* # define INTERFACESDIR	"interfaces" */
95*7c478bd9Sstevel@tonic-gate /* # define PRINTERSDIR	"printers" */
96*7c478bd9Sstevel@tonic-gate /* # define PRINTWHEELSDIR	"pwheels" */
97*7c478bd9Sstevel@tonic-gate /* #define BINDIR		"bin" */
98*7c478bd9Sstevel@tonic-gate /* #define LOGSDIR		"logs" */
99*7c478bd9Sstevel@tonic-gate /* #define MODELSDIR	"model" */
100*7c478bd9Sstevel@tonic-gate /* #define NETWORKDIR	"network" */
101*7c478bd9Sstevel@tonic-gate #define FIFOSDIR	"fifos"
102*7c478bd9Sstevel@tonic-gate /* # define PRIVFIFODIR	"private" */
103*7c478bd9Sstevel@tonic-gate /* # define PUBFIFODIR	"public" */
104*7c478bd9Sstevel@tonic-gate /* #define REQUESTSDIR	"requests" */
105*7c478bd9Sstevel@tonic-gate /* #define SYSTEMDIR	"system" */
106*7c478bd9Sstevel@tonic-gate /* #define TEMPDIR		"temp" */
107*7c478bd9Sstevel@tonic-gate /* #define TMPDIR		"tmp" */
108*7c478bd9Sstevel@tonic-gate 
109*7c478bd9Sstevel@tonic-gate /* #define SCHEDLOCK	"SCHEDLOCK" */
110*7c478bd9Sstevel@tonic-gate /* #define FIFO		"FIFO" */
111*7c478bd9Sstevel@tonic-gate 
112*7c478bd9Sstevel@tonic-gate #define	FILTERTABLE	"filter.table"
113*7c478bd9Sstevel@tonic-gate #define	FILTERTABLE_I	"filter.table.i"
114*7c478bd9Sstevel@tonic-gate 
115*7c478bd9Sstevel@tonic-gate /* #define DESCRIBEFILE	"describe" */
116*7c478bd9Sstevel@tonic-gate /* #define ALIGNFILE	"align_ptrn" */
117*7c478bd9Sstevel@tonic-gate #define COMMENTFILE	"comment"
118*7c478bd9Sstevel@tonic-gate #define ALLOWFILE	"allow"
119*7c478bd9Sstevel@tonic-gate #define DENYFILE	"deny"
120*7c478bd9Sstevel@tonic-gate #define ALERTSHFILE	"alert.sh"
121*7c478bd9Sstevel@tonic-gate #define ALERTVARSFILE	"alert.vars"
122*7c478bd9Sstevel@tonic-gate #define ALERTPROTOFILE	"alert.proto"
123*7c478bd9Sstevel@tonic-gate #define CONFIGFILE	"configuration"
124*7c478bd9Sstevel@tonic-gate #define FACCESSPREFIX	"forms."
125*7c478bd9Sstevel@tonic-gate #define PACCESSPREFIX	"paper."
126*7c478bd9Sstevel@tonic-gate #define UACCESSPREFIX	"users."
127*7c478bd9Sstevel@tonic-gate #define FALLOWFILE	FACCESSPREFIX ALLOWFILE
128*7c478bd9Sstevel@tonic-gate #define FDENYFILE	FACCESSPREFIX DENYFILE
129*7c478bd9Sstevel@tonic-gate #define UALLOWFILE	UACCESSPREFIX ALLOWFILE
130*7c478bd9Sstevel@tonic-gate #define UDENYFILE	UACCESSPREFIX DENYFILE
131*7c478bd9Sstevel@tonic-gate /* #define DEFAULTFILE	"default" */
132*7c478bd9Sstevel@tonic-gate #define STATUSFILE	"status"
133*7c478bd9Sstevel@tonic-gate /* #define USERSFILE	"users" */
134*7c478bd9Sstevel@tonic-gate /* #define NAMEFILE	"name" */
135*7c478bd9Sstevel@tonic-gate /* #define XFERFILE	"transfer" */
136*7c478bd9Sstevel@tonic-gate /* #define EXECFILE	"execute" */
137*7c478bd9Sstevel@tonic-gate #define PSTATUSFILE	"pstatus"
138*7c478bd9Sstevel@tonic-gate #define CSTATUSFILE	"cstatus"
139*7c478bd9Sstevel@tonic-gate /* #define REQLOGFILE	"requests" */
140*7c478bd9Sstevel@tonic-gate 
141*7c478bd9Sstevel@tonic-gate #define STANDARD	"standard"
142*7c478bd9Sstevel@tonic-gate /* #define SLOWFILTER	"slow.filter" */
143*7c478bd9Sstevel@tonic-gate #define FAULTMESSAGEFILE "faultMessage"
144*7c478bd9Sstevel@tonic-gate #define FORMMESSAGEFILE "formMessage"
145*7c478bd9Sstevel@tonic-gate 
146*7c478bd9Sstevel@tonic-gate #define LPNET		"/usr/lib/lp/lpNet"
147*7c478bd9Sstevel@tonic-gate 
148*7c478bd9Sstevel@tonic-gate #ifdef LP_USE_PAPI_ATTR
149*7c478bd9Sstevel@tonic-gate #define	STANDARD_FOOMATIC	"standard_foomatic"
150*7c478bd9Sstevel@tonic-gate 	/*
151*7c478bd9Sstevel@tonic-gate 	 * The default model interface script to use if a printer is configured
152*7c478bd9Sstevel@tonic-gate 	 * with a PPD (PostScript Printer Definition) file.
153*7c478bd9Sstevel@tonic-gate 	 */
154*7c478bd9Sstevel@tonic-gate #define	LP_PAPIATTRNAME "attributes"
155*7c478bd9Sstevel@tonic-gate 	/*
156*7c478bd9Sstevel@tonic-gate 	 * Job attributes filename extension,
157*7c478bd9Sstevel@tonic-gate 	 * eg. /var/spool/lp/temp/123-attributes
158*7c478bd9Sstevel@tonic-gate 	 */
159*7c478bd9Sstevel@tonic-gate #endif
160*7c478bd9Sstevel@tonic-gate 
161*7c478bd9Sstevel@tonic-gate /**
162*7c478bd9Sstevel@tonic-gate  ** Names and phrases:
163*7c478bd9Sstevel@tonic-gate  **/
164*7c478bd9Sstevel@tonic-gate 
165*7c478bd9Sstevel@tonic-gate /*
166*7c478bd9Sstevel@tonic-gate  * If you change these from macros to defined (char *) strings,
167*7c478bd9Sstevel@tonic-gate  * be aware that in several places the lengths of the strings
168*7c478bd9Sstevel@tonic-gate  * are computed using "sizeof()", not "strlen()"!
169*7c478bd9Sstevel@tonic-gate  */
170*7c478bd9Sstevel@tonic-gate #define	NAME_ALL	"all"
171*7c478bd9Sstevel@tonic-gate #define	NAME_ANY	"any"
172*7c478bd9Sstevel@tonic-gate #define NAME_NONE	"none"
173*7c478bd9Sstevel@tonic-gate #define	NAME_TERMINFO	"terminfo"
174*7c478bd9Sstevel@tonic-gate #define	NAME_SIMPLE	"simple"
175*7c478bd9Sstevel@tonic-gate #define NAME_HOLD	"hold"
176*7c478bd9Sstevel@tonic-gate #define	NAME_RESUME	"resume"
177*7c478bd9Sstevel@tonic-gate #define NAME_IMMEDIATE	"immediate"
178*7c478bd9Sstevel@tonic-gate #define NAME_CONTINUE	"continue"
179*7c478bd9Sstevel@tonic-gate #define NAME_BEGINNING	"beginning"
180*7c478bd9Sstevel@tonic-gate #define NAME_WAIT	"wait"
181*7c478bd9Sstevel@tonic-gate #define NAME_MAIL	"mail"
182*7c478bd9Sstevel@tonic-gate #define	NAME_WRITE	"write"
183*7c478bd9Sstevel@tonic-gate #define NAME_QUIET	"quiet"
184*7c478bd9Sstevel@tonic-gate #define NAME_LIST	"list"
185*7c478bd9Sstevel@tonic-gate #define NAME_ON		"on"
186*7c478bd9Sstevel@tonic-gate #define NAME_OFF	"off"
187*7c478bd9Sstevel@tonic-gate #define NAME_OPTIONAL	"optional"
188*7c478bd9Sstevel@tonic-gate #define NAME_ALWAYS	"Always"
189*7c478bd9Sstevel@tonic-gate #define NAME_UNKNOWN	"unknown"
190*7c478bd9Sstevel@tonic-gate #define NAME_REJECTING	"rejecting"
191*7c478bd9Sstevel@tonic-gate #define NAME_ACCEPTING	"accepting"
192*7c478bd9Sstevel@tonic-gate #define NAME_DISABLED	"disabled"
193*7c478bd9Sstevel@tonic-gate #define NAME_ENABLED	"enabled"
194*7c478bd9Sstevel@tonic-gate #define NAME_DIRECT	"direct"
195*7c478bd9Sstevel@tonic-gate #define NAME_PICA	"pica"
196*7c478bd9Sstevel@tonic-gate #define NAME_ELITE	"elite"
197*7c478bd9Sstevel@tonic-gate #define NAME_COMPRESSED	"compressed"
198*7c478bd9Sstevel@tonic-gate #define NAME_ALLOW	"allow"
199*7c478bd9Sstevel@tonic-gate #define NAME_DENY	"deny"
200*7c478bd9Sstevel@tonic-gate #define NAME_ONCE	"once"
201*7c478bd9Sstevel@tonic-gate #define NAME_DEFAULT	"default"
202*7c478bd9Sstevel@tonic-gate #define NAME_KEEP	"keep"
203*7c478bd9Sstevel@tonic-gate 
204*7c478bd9Sstevel@tonic-gate /**
205*7c478bd9Sstevel@tonic-gate  ** Common messages:
206*7c478bd9Sstevel@tonic-gate  **/
207*7c478bd9Sstevel@tonic-gate 
208*7c478bd9Sstevel@tonic-gate #define CUZ_NEW_PRINTER		"new printer"
209*7c478bd9Sstevel@tonic-gate #define CUZ_NEW_DEST		"new destination"
210*7c478bd9Sstevel@tonic-gate #define CUZ_STOPPED		"stopped with printer fault"
211*7c478bd9Sstevel@tonic-gate #define CUZ_FAULT		"printer fault"
212*7c478bd9Sstevel@tonic-gate #define CUZ_LOGIN_PRINTER	"disabled by Spooler: login terminal"
213*7c478bd9Sstevel@tonic-gate #define CUZ_MOUNTING		"mounting a form"
214*7c478bd9Sstevel@tonic-gate #define CUZ_NOFORK		"can't fork"
215*7c478bd9Sstevel@tonic-gate #define CUZ_NOREMOTE		"remote system no longer defined"
216*7c478bd9Sstevel@tonic-gate #define CUZ_PRINTING_OK		"ready and printing"
217*7c478bd9Sstevel@tonic-gate 
218*7c478bd9Sstevel@tonic-gate #define TIMEOUT_FAULT \
219*7c478bd9Sstevel@tonic-gate "Timed-out trying to open the printer port.\n"
220*7c478bd9Sstevel@tonic-gate 
221*7c478bd9Sstevel@tonic-gate #define OPEN_FAULT \
222*7c478bd9Sstevel@tonic-gate "Failed to open the printer port.\n"
223*7c478bd9Sstevel@tonic-gate 
224*7c478bd9Sstevel@tonic-gate #define PUSH_FAULT \
225*7c478bd9Sstevel@tonic-gate "Failed to push module(s) onto the printer port stream.\n"
226*7c478bd9Sstevel@tonic-gate 
227*7c478bd9Sstevel@tonic-gate /*
228*7c478bd9Sstevel@tonic-gate  * When the Spooler detected the hangup, this message is used.
229*7c478bd9Sstevel@tonic-gate  */
230*7c478bd9Sstevel@tonic-gate #define HANGUP_FAULT \
231*7c478bd9Sstevel@tonic-gate "The connection to the printer dropped; perhaps the printer went off-line!\n"
232*7c478bd9Sstevel@tonic-gate 
233*7c478bd9Sstevel@tonic-gate /*
234*7c478bd9Sstevel@tonic-gate  * When lp.cat detected the hangup, this message is used.
235*7c478bd9Sstevel@tonic-gate  */
236*7c478bd9Sstevel@tonic-gate #define HANGUP_FAULT_LPCAT \
237*7c478bd9Sstevel@tonic-gate "The connection to the printer dropped; perhaps the printer went off-line.\n"
238*7c478bd9Sstevel@tonic-gate 
239*7c478bd9Sstevel@tonic-gate #define INTERRUPT_FAULT	\
240*7c478bd9Sstevel@tonic-gate "Received an interrupt from the printer. The reason is unknown,\nalthough a common cause is that the printer's buffer capacity\nwas exceeded. Using XON/XOFF flow control, adding carriage-return\ndelays, or lowering the baud rate may fix the problem.\nSee stty(1) and lpadmin(1M) man-pages for help in doing this.\n"
241*7c478bd9Sstevel@tonic-gate 
242*7c478bd9Sstevel@tonic-gate #define PIPE_FAULT \
243*7c478bd9Sstevel@tonic-gate "The output ``port'', a FIFO, was closed before all output was written.\n"
244*7c478bd9Sstevel@tonic-gate 
245*7c478bd9Sstevel@tonic-gate #define EXIT_FAULT \
246*7c478bd9Sstevel@tonic-gate "The interface program returned with a reserved exit code.\n"
247*7c478bd9Sstevel@tonic-gate 
248*7c478bd9Sstevel@tonic-gate /**
249*7c478bd9Sstevel@tonic-gate  ** Lp-errno #defines, etc.
250*7c478bd9Sstevel@tonic-gate  **/
251*7c478bd9Sstevel@tonic-gate 
252*7c478bd9Sstevel@tonic-gate #define LP_EBADSDN	1
253*7c478bd9Sstevel@tonic-gate #define LP_EBADINT	2
254*7c478bd9Sstevel@tonic-gate #define LP_EBADNAME	3
255*7c478bd9Sstevel@tonic-gate #define LP_EBADARG	4
256*7c478bd9Sstevel@tonic-gate #define LP_ETRAILIN	5
257*7c478bd9Sstevel@tonic-gate #define LP_ENOCMT	6
258*7c478bd9Sstevel@tonic-gate #define LP_EBADCTYPE	7
259*7c478bd9Sstevel@tonic-gate #define LP_ENOALP	8
260*7c478bd9Sstevel@tonic-gate #define LP_ENULLPTR	9
261*7c478bd9Sstevel@tonic-gate #define LP_EBADHDR	10
262*7c478bd9Sstevel@tonic-gate #define LP_ETEMPLATE	11
263*7c478bd9Sstevel@tonic-gate #define LP_EKEYWORD	12
264*7c478bd9Sstevel@tonic-gate #define LP_EPATTERN	13
265*7c478bd9Sstevel@tonic-gate #define LP_ERESULT	14
266*7c478bd9Sstevel@tonic-gate #define LP_EREGEX	15  /* and see extern int regerrno, regexpr(3G) */
267*7c478bd9Sstevel@tonic-gate #define LP_ENOMEM	99
268*7c478bd9Sstevel@tonic-gate 
269*7c478bd9Sstevel@tonic-gate extern int		lp_errno;
270*7c478bd9Sstevel@tonic-gate 
271*7c478bd9Sstevel@tonic-gate /**
272*7c478bd9Sstevel@tonic-gate  ** Misc. Macros
273*7c478bd9Sstevel@tonic-gate  **/
274*7c478bd9Sstevel@tonic-gate 
275*7c478bd9Sstevel@tonic-gate #define	LP_WS		" "	/* Whitespace (also list separator) */
276*7c478bd9Sstevel@tonic-gate #define	LP_SEP		","	/* List separator */
277*7c478bd9Sstevel@tonic-gate #define LP_QUOTES	"'\""
278*7c478bd9Sstevel@tonic-gate 
279*7c478bd9Sstevel@tonic-gate #define MAIL		"mail"
280*7c478bd9Sstevel@tonic-gate #define WRITE		"write"
281*7c478bd9Sstevel@tonic-gate 
282*7c478bd9Sstevel@tonic-gate #define STATUS_BREAK	"=========="
283*7c478bd9Sstevel@tonic-gate 
284*7c478bd9Sstevel@tonic-gate #define	STREQU(A,B)	( (!(A) || !(B)) ? 0: (strcmp((A), (B)) == 0) )
285*7c478bd9Sstevel@tonic-gate #define	STRNEQU(A,B,N)	( (!(A) || !(B)) ? 0: (strncmp((A), (B), (N)) == 0) )
286*7c478bd9Sstevel@tonic-gate #define	CS_STREQU(A,B)	(cs_strcmp((A), (B)) == 0)
287*7c478bd9Sstevel@tonic-gate #define	CS_STRNEQU(A,B,N) (cs_strncmp((A), (B), (N)) == 0)
288*7c478bd9Sstevel@tonic-gate #define STRSIZE(X)	(sizeof(X) - 1)
289*7c478bd9Sstevel@tonic-gate 
290*7c478bd9Sstevel@tonic-gate /*
291*7c478bd9Sstevel@tonic-gate  * Almost STREQU but compares null pointers as equal, too.
292*7c478bd9Sstevel@tonic-gate  */
293*7c478bd9Sstevel@tonic-gate #define	SAME(A,B)	((A) == (B) || (A) && (B) && STREQU((A), (B)))
294*7c478bd9Sstevel@tonic-gate 
295*7c478bd9Sstevel@tonic-gate #define	PRINTF		(void)printf
296*7c478bd9Sstevel@tonic-gate #define SPRINTF		(void)sprintf
297*7c478bd9Sstevel@tonic-gate #define FPRINTF		(void)fprintf
298*7c478bd9Sstevel@tonic-gate 
299*7c478bd9Sstevel@tonic-gate #define	NB(X)		(X? X : "")
300*7c478bd9Sstevel@tonic-gate 
301*7c478bd9Sstevel@tonic-gate extern int	errno;
302*7c478bd9Sstevel@tonic-gate extern char *	sys_errlist[];
303*7c478bd9Sstevel@tonic-gate extern int	sys_nerr;
304*7c478bd9Sstevel@tonic-gate 
305*7c478bd9Sstevel@tonic-gate #define PERROR		(errno < sys_nerr? sys_errlist[errno] : "unknown")
306*7c478bd9Sstevel@tonic-gate 
307*7c478bd9Sstevel@tonic-gate /*
308*7c478bd9Sstevel@tonic-gate  * Largest number we'll ever expect to get from doing %ld in printf,
309*7c478bd9Sstevel@tonic-gate  * as a string and number. ULONG_MAX from limits.h gives us the number,
310*7c478bd9Sstevel@tonic-gate  * but I can't figure out how to get that into a string.
311*7c478bd9Sstevel@tonic-gate  */
312*7c478bd9Sstevel@tonic-gate #define BIGGEST_NUMBER		ULONG_MAX
313*7c478bd9Sstevel@tonic-gate #define BIGGEST_NUMBER_S	"4294967295"
314*7c478bd9Sstevel@tonic-gate 
315*7c478bd9Sstevel@tonic-gate /*
316*7c478bd9Sstevel@tonic-gate  * Largest request ID (numerical part), as string and number.
317*7c478bd9Sstevel@tonic-gate  * See comment above.
318*7c478bd9Sstevel@tonic-gate  */
319*7c478bd9Sstevel@tonic-gate #define BIGGEST_REQID		999999
320*7c478bd9Sstevel@tonic-gate #define BIGGEST_REQID_S		"999999"
321*7c478bd9Sstevel@tonic-gate 
322*7c478bd9Sstevel@tonic-gate /*
323*7c478bd9Sstevel@tonic-gate  * Maximum number of files queued per request, as string and number.
324*7c478bd9Sstevel@tonic-gate  * See earlier comment above.
325*7c478bd9Sstevel@tonic-gate  */
326*7c478bd9Sstevel@tonic-gate #define MOST_FILES	999999
327*7c478bd9Sstevel@tonic-gate #define MOST_FILES_S	"999999"
328*7c478bd9Sstevel@tonic-gate 
329*7c478bd9Sstevel@tonic-gate /**
330*7c478bd9Sstevel@tonic-gate  ** Alert macros:
331*7c478bd9Sstevel@tonic-gate  **/
332*7c478bd9Sstevel@tonic-gate 
333*7c478bd9Sstevel@tonic-gate /*
334*7c478bd9Sstevel@tonic-gate  * Type of alert to be S_QUIET'd
335*7c478bd9Sstevel@tonic-gate  */
336*7c478bd9Sstevel@tonic-gate #define	QA_FORM		1
337*7c478bd9Sstevel@tonic-gate #define	QA_PRINTER	2
338*7c478bd9Sstevel@tonic-gate #define	QA_PRINTWHEEL	3
339*7c478bd9Sstevel@tonic-gate 
340*7c478bd9Sstevel@tonic-gate /**
341*7c478bd9Sstevel@tonic-gate  ** File modes:
342*7c478bd9Sstevel@tonic-gate  ** (The "NO" prefix is relative to ``others''.)
343*7c478bd9Sstevel@tonic-gate  **/
344*7c478bd9Sstevel@tonic-gate 
345*7c478bd9Sstevel@tonic-gate #define	MODE_READ	(mode_t)0664
346*7c478bd9Sstevel@tonic-gate #define MODE_NOREAD	(mode_t)0660
347*7c478bd9Sstevel@tonic-gate #define MODE_EXEC	(mode_t)0775
348*7c478bd9Sstevel@tonic-gate #define MODE_NOEXEC	(mode_t)0770
349*7c478bd9Sstevel@tonic-gate #define MODE_DIR	(mode_t)0775
350*7c478bd9Sstevel@tonic-gate #define MODE_NODIR	(mode_t)0770
351*7c478bd9Sstevel@tonic-gate 
352*7c478bd9Sstevel@tonic-gate extern int	printlist_qsep;
353*7c478bd9Sstevel@tonic-gate 
354*7c478bd9Sstevel@tonic-gate extern char	Lp_Spooldir[],
355*7c478bd9Sstevel@tonic-gate 		Lp_Admins[],
356*7c478bd9Sstevel@tonic-gate 		Lp_Bin[],
357*7c478bd9Sstevel@tonic-gate 		Lp_FIFO[],
358*7c478bd9Sstevel@tonic-gate 		Lp_Logs[],
359*7c478bd9Sstevel@tonic-gate 		Lp_ReqLog[],
360*7c478bd9Sstevel@tonic-gate 		Lp_Model[],
361*7c478bd9Sstevel@tonic-gate 		Lp_Private_FIFOs[],
362*7c478bd9Sstevel@tonic-gate 		Lp_Public_FIFOs[],
363*7c478bd9Sstevel@tonic-gate 		Lp_Requests[],
364*7c478bd9Sstevel@tonic-gate 		Lp_Secure[],
365*7c478bd9Sstevel@tonic-gate 		Lp_Schedlock[],
366*7c478bd9Sstevel@tonic-gate 		Lp_Slow_Filter[],
367*7c478bd9Sstevel@tonic-gate 		Lp_System[],
368*7c478bd9Sstevel@tonic-gate 		Lp_Temp[],
369*7c478bd9Sstevel@tonic-gate 		Lp_Tmp[],
370*7c478bd9Sstevel@tonic-gate 		Lp_NetTmp[],
371*7c478bd9Sstevel@tonic-gate 		Lp_NetData[],
372*7c478bd9Sstevel@tonic-gate 		Lp_Users[],
373*7c478bd9Sstevel@tonic-gate 		Lp_A[],
374*7c478bd9Sstevel@tonic-gate 		Lp_A_Classes[],
375*7c478bd9Sstevel@tonic-gate 		Lp_A_Forms[],
376*7c478bd9Sstevel@tonic-gate 		Lp_A_Interfaces[],
377*7c478bd9Sstevel@tonic-gate 		Lp_A_Logs[],
378*7c478bd9Sstevel@tonic-gate 		Lp_A_Printers[],
379*7c478bd9Sstevel@tonic-gate 		Lp_A_PrintWheels[],
380*7c478bd9Sstevel@tonic-gate 		Lp_A_Filters[],
381*7c478bd9Sstevel@tonic-gate 		Lp_A_Systems[],
382*7c478bd9Sstevel@tonic-gate 		Lp_Default[],
383*7c478bd9Sstevel@tonic-gate 		Lp_A_Faults[];
384*7c478bd9Sstevel@tonic-gate 
385*7c478bd9Sstevel@tonic-gate extern int	Lp_NTBase;
386*7c478bd9Sstevel@tonic-gate 
387*7c478bd9Sstevel@tonic-gate /*
388*7c478bd9Sstevel@tonic-gate  * File access:
389*7c478bd9Sstevel@tonic-gate  */
390*7c478bd9Sstevel@tonic-gate 
391*7c478bd9Sstevel@tonic-gate extern int	open_locked(char *, char *, mode_t);
392*7c478bd9Sstevel@tonic-gate extern char	*fdgets(char *, int, int);
393*7c478bd9Sstevel@tonic-gate extern int	fdprintf(int, char *, ...);
394*7c478bd9Sstevel@tonic-gate extern int	fdputs(char *, int);
395*7c478bd9Sstevel@tonic-gate extern int	fdputc(char, int);
396*7c478bd9Sstevel@tonic-gate 
397*7c478bd9Sstevel@tonic-gate extern int	is_printer_uri(char *);
398*7c478bd9Sstevel@tonic-gate 
399*7c478bd9Sstevel@tonic-gate FILE		*open_lpfile ( char * , char * , mode_t );
400*7c478bd9Sstevel@tonic-gate int		close_lpfile ( FILE * );
401*7c478bd9Sstevel@tonic-gate int		chown_lppath ( char * path );
402*7c478bd9Sstevel@tonic-gate int		mkdir_lpdir ( char * path , int mode );
403*7c478bd9Sstevel@tonic-gate int		rmfile ( char * path );
404*7c478bd9Sstevel@tonic-gate int		dumpstring ( char * path , char * str );
405*7c478bd9Sstevel@tonic-gate 
406*7c478bd9Sstevel@tonic-gate char *		loadstring ( char * path );
407*7c478bd9Sstevel@tonic-gate char *		loadline ( char * path );
408*7c478bd9Sstevel@tonic-gate char *		sop_up_rest (int, char * endsop );
409*7c478bd9Sstevel@tonic-gate 
410*7c478bd9Sstevel@tonic-gate /*
411*7c478bd9Sstevel@tonic-gate  * List manipulation routines:
412*7c478bd9Sstevel@tonic-gate  */
413*7c478bd9Sstevel@tonic-gate 
414*7c478bd9Sstevel@tonic-gate #define emptylist(LP)	(!(LP) || !(LP)[0])
415*7c478bd9Sstevel@tonic-gate 
416*7c478bd9Sstevel@tonic-gate int		addlist ( char *** , char * );
417*7c478bd9Sstevel@tonic-gate int		addstring ( char ** , char * );
418*7c478bd9Sstevel@tonic-gate int		appendlist ( char *** , char * );
419*7c478bd9Sstevel@tonic-gate int		dellist ( char *** , char * );
420*7c478bd9Sstevel@tonic-gate int		joinlist ( char *** , char ** );
421*7c478bd9Sstevel@tonic-gate int		lenlist ( char ** );
422*7c478bd9Sstevel@tonic-gate int		printlist ( FILE * , char ** );
423*7c478bd9Sstevel@tonic-gate int		fdprintlist(int , char ** );
424*7c478bd9Sstevel@tonic-gate int		searchlist ( char *, char ** );
425*7c478bd9Sstevel@tonic-gate int		searchlist_with_terminfo ( char * , char ** );
426*7c478bd9Sstevel@tonic-gate 
427*7c478bd9Sstevel@tonic-gate char **		duplist ( char ** );
428*7c478bd9Sstevel@tonic-gate char **		getlist ( char * , char * , char * );
429*7c478bd9Sstevel@tonic-gate char **		dashos ( char * );
430*7c478bd9Sstevel@tonic-gate char **		wherelist ( char * , char ** );
431*7c478bd9Sstevel@tonic-gate 
432*7c478bd9Sstevel@tonic-gate char *		sprintlist ( char ** );
433*7c478bd9Sstevel@tonic-gate char *		search_cslist ( char * , char ** );
434*7c478bd9Sstevel@tonic-gate 
435*7c478bd9Sstevel@tonic-gate void		freelist ( char ** );
436*7c478bd9Sstevel@tonic-gate void		printlist_setup ( char * , char * , char * , char * );
437*7c478bd9Sstevel@tonic-gate void		printlist_unsetup ( void );
438*7c478bd9Sstevel@tonic-gate 
439*7c478bd9Sstevel@tonic-gate /*
440*7c478bd9Sstevel@tonic-gate  * Scaled decimal number routines:
441*7c478bd9Sstevel@tonic-gate  */
442*7c478bd9Sstevel@tonic-gate 
443*7c478bd9Sstevel@tonic-gate #define getsdn(S)	_getsdn(S, (char **)0, 0)
444*7c478bd9Sstevel@tonic-gate #define getcpi(S)	_getsdn(S, (char **)0, 1)
445*7c478bd9Sstevel@tonic-gate 
446*7c478bd9Sstevel@tonic-gate #define N_COMPRESSED	9999
447*7c478bd9Sstevel@tonic-gate 
448*7c478bd9Sstevel@tonic-gate void		printsdn ( FILE * , SCALED );
449*7c478bd9Sstevel@tonic-gate void		fdprintsdn ( int , SCALED );
450*7c478bd9Sstevel@tonic-gate void		printsdn_setup ( char * , char * , char * );
451*7c478bd9Sstevel@tonic-gate void		printsdn_unsetup ( void );
452*7c478bd9Sstevel@tonic-gate 
453*7c478bd9Sstevel@tonic-gate SCALED		_getsdn ( char * , char ** , int );
454*7c478bd9Sstevel@tonic-gate 
455*7c478bd9Sstevel@tonic-gate /*
456*7c478bd9Sstevel@tonic-gate  * File name routines:
457*7c478bd9Sstevel@tonic-gate  */
458*7c478bd9Sstevel@tonic-gate 
459*7c478bd9Sstevel@tonic-gate char *		makepath ( char * , ... );
460*7c478bd9Sstevel@tonic-gate char *		getspooldir ( void );
461*7c478bd9Sstevel@tonic-gate char *		getrequestfile ( char * );
462*7c478bd9Sstevel@tonic-gate char *		getprinterfile ( char * , char * );
463*7c478bd9Sstevel@tonic-gate char *		getsystemfile ( char * , char * );
464*7c478bd9Sstevel@tonic-gate char *		getclassfile ( char * );
465*7c478bd9Sstevel@tonic-gate char *		getfilterfile ( char * );
466*7c478bd9Sstevel@tonic-gate char *		getformfile ( char * , char * );
467*7c478bd9Sstevel@tonic-gate 
468*7c478bd9Sstevel@tonic-gate /*
469*7c478bd9Sstevel@tonic-gate  * Additional string manipulation routines:
470*7c478bd9Sstevel@tonic-gate  */
471*7c478bd9Sstevel@tonic-gate 
472*7c478bd9Sstevel@tonic-gate int		cs_strcmp ( char * , char * );
473*7c478bd9Sstevel@tonic-gate int		cs_strncmp ( char * , char * , int );
474*7c478bd9Sstevel@tonic-gate 
475*7c478bd9Sstevel@tonic-gate /*
476*7c478bd9Sstevel@tonic-gate  * Syntax checking routines:
477*7c478bd9Sstevel@tonic-gate  */
478*7c478bd9Sstevel@tonic-gate 
479*7c478bd9Sstevel@tonic-gate int		syn_name ( char * );
480*7c478bd9Sstevel@tonic-gate int		syn_text ( char * );
481*7c478bd9Sstevel@tonic-gate int		syn_comment ( char * );
482*7c478bd9Sstevel@tonic-gate int		syn_machine_name ( char * );
483*7c478bd9Sstevel@tonic-gate int		syn_option ( char * );
484*7c478bd9Sstevel@tonic-gate 
485*7c478bd9Sstevel@tonic-gate /*
486*7c478bd9Sstevel@tonic-gate  * Alert management routines:
487*7c478bd9Sstevel@tonic-gate  */
488*7c478bd9Sstevel@tonic-gate 
489*7c478bd9Sstevel@tonic-gate int		putalert ( char * , char * , FALERT * );
490*7c478bd9Sstevel@tonic-gate int		delalert ( char * , char * );
491*7c478bd9Sstevel@tonic-gate 
492*7c478bd9Sstevel@tonic-gate FALERT *	getalert ( char * , char * );
493*7c478bd9Sstevel@tonic-gate 
494*7c478bd9Sstevel@tonic-gate void		printalert ( FILE * , FALERT * , int );
495*7c478bd9Sstevel@tonic-gate 
496*7c478bd9Sstevel@tonic-gate /*
497*7c478bd9Sstevel@tonic-gate  * Terminfo Database Inquiry Tool
498*7c478bd9Sstevel@tonic-gate  */
499*7c478bd9Sstevel@tonic-gate 
500*7c478bd9Sstevel@tonic-gate int		tidbit ( char * , char * , ... );
501*7c478bd9Sstevel@tonic-gate void		untidbit ( char * );
502*7c478bd9Sstevel@tonic-gate 
503*7c478bd9Sstevel@tonic-gate /*
504*7c478bd9Sstevel@tonic-gate  * Auto-restarting and other system calls:
505*7c478bd9Sstevel@tonic-gate  * The two versions are here to reduce the chance of colliding
506*7c478bd9Sstevel@tonic-gate  * with similar names in standard libraries (e.g. dial(3C) uses
507*7c478bd9Sstevel@tonic-gate  * Read/Write).
508*7c478bd9Sstevel@tonic-gate  */
509*7c478bd9Sstevel@tonic-gate 
510*7c478bd9Sstevel@tonic-gate #define Access	_Access
511*7c478bd9Sstevel@tonic-gate #define Chdir	_Chdir
512*7c478bd9Sstevel@tonic-gate #define Chmod	_Chmod
513*7c478bd9Sstevel@tonic-gate #define Chown	_Chown
514*7c478bd9Sstevel@tonic-gate #define Close	_Close
515*7c478bd9Sstevel@tonic-gate #define Creat	_Creat
516*7c478bd9Sstevel@tonic-gate #define Fcntl	_Fcntl
517*7c478bd9Sstevel@tonic-gate #define Fstat	_Fstat
518*7c478bd9Sstevel@tonic-gate #define Link	_Link
519*7c478bd9Sstevel@tonic-gate #define Lstat	_Lstat
520*7c478bd9Sstevel@tonic-gate #define Mknod	_Mknod
521*7c478bd9Sstevel@tonic-gate #define Open	_Open
522*7c478bd9Sstevel@tonic-gate #define Read	_Read
523*7c478bd9Sstevel@tonic-gate #define Readlink _Readlink
524*7c478bd9Sstevel@tonic-gate #define Rename	_Rename
525*7c478bd9Sstevel@tonic-gate #define Stat	_Stat
526*7c478bd9Sstevel@tonic-gate #define Symlink	_Symlink
527*7c478bd9Sstevel@tonic-gate #define Unlink	_Unlink
528*7c478bd9Sstevel@tonic-gate #define Wait	_Wait
529*7c478bd9Sstevel@tonic-gate #define Write	_Write
530*7c478bd9Sstevel@tonic-gate 
531*7c478bd9Sstevel@tonic-gate #define Malloc(size)		_Malloc(size, __FILE__, __LINE__)
532*7c478bd9Sstevel@tonic-gate #define Realloc(ptr,size)	_Realloc(ptr, size, __FILE__, __LINE__)
533*7c478bd9Sstevel@tonic-gate #define Calloc(nelem,elsize)	_Calloc(nelem, elsize, __FILE__, __LINE__)
534*7c478bd9Sstevel@tonic-gate #define Strdup(s)		_Strdup(s, __FILE__, __LINE__)
535*7c478bd9Sstevel@tonic-gate #define Free(ptr)		_Free(ptr, __FILE__, __LINE__)
536*7c478bd9Sstevel@tonic-gate 
537*7c478bd9Sstevel@tonic-gate int		_Access ( char * , int );
538*7c478bd9Sstevel@tonic-gate int		_Chdir ( char * );
539*7c478bd9Sstevel@tonic-gate int		_Chmod ( char * , int );
540*7c478bd9Sstevel@tonic-gate int		_Chown ( char * , int , int );
541*7c478bd9Sstevel@tonic-gate int		_Close ( int );
542*7c478bd9Sstevel@tonic-gate int		_Creat ( char * , int );
543*7c478bd9Sstevel@tonic-gate int		_Fcntl ( int , int , ... );
544*7c478bd9Sstevel@tonic-gate int		_Fstat ( int , struct stat * );
545*7c478bd9Sstevel@tonic-gate int		_Link ( char * , char * );
546*7c478bd9Sstevel@tonic-gate int		_Lstat ( char * , struct stat * );
547*7c478bd9Sstevel@tonic-gate int		_Mknod ( char * , int , int );
548*7c478bd9Sstevel@tonic-gate int		_Mkpipe ( char * , int , int );
549*7c478bd9Sstevel@tonic-gate int		_Open ( char * , int , ... /* mode_t */ );
550*7c478bd9Sstevel@tonic-gate int		_Read ( int , char * , unsigned int );
551*7c478bd9Sstevel@tonic-gate int		_Readlink ( char * , char * , unsigned int );
552*7c478bd9Sstevel@tonic-gate int		_Rename ( char * , char * );
553*7c478bd9Sstevel@tonic-gate int		_Symlink ( char * , char * );
554*7c478bd9Sstevel@tonic-gate int		_Stat ( char * , struct stat * );
555*7c478bd9Sstevel@tonic-gate int		_Unlink ( char * );
556*7c478bd9Sstevel@tonic-gate int		_Wait ( int * );
557*7c478bd9Sstevel@tonic-gate int		_Write ( int , char * , unsigned int );
558*7c478bd9Sstevel@tonic-gate 
559*7c478bd9Sstevel@tonic-gate void *		_Malloc ( size_t , const char * , int );
560*7c478bd9Sstevel@tonic-gate void *		_Realloc ( void * , size_t , const char * , int );
561*7c478bd9Sstevel@tonic-gate void *		_Calloc ( size_t , size_t , const char * , int );
562*7c478bd9Sstevel@tonic-gate char *		_Strdup ( const char * , const char * , int );
563*7c478bd9Sstevel@tonic-gate void		_Free ( void * , const char * , int );
564*7c478bd9Sstevel@tonic-gate 
565*7c478bd9Sstevel@tonic-gate /*
566*7c478bd9Sstevel@tonic-gate  * Misc. routines:
567*7c478bd9Sstevel@tonic-gate  */
568*7c478bd9Sstevel@tonic-gate 
569*7c478bd9Sstevel@tonic-gate int		isterminfo ( char * );
570*7c478bd9Sstevel@tonic-gate int		isprinter ( char * );
571*7c478bd9Sstevel@tonic-gate int		isrequest ( char * );
572*7c478bd9Sstevel@tonic-gate int		isnumber ( char * );
573*7c478bd9Sstevel@tonic-gate 
574*7c478bd9Sstevel@tonic-gate char *		getname ( void );
575*7c478bd9Sstevel@tonic-gate char *		makestr ( char * , ... );
576*7c478bd9Sstevel@tonic-gate char *		strip ( char * );
577*7c478bd9Sstevel@tonic-gate 
578*7c478bd9Sstevel@tonic-gate void		sendmail ( char * , char * );
579*7c478bd9Sstevel@tonic-gate 
580*7c478bd9Sstevel@tonic-gate void		(*lp_alloc_fail_handler)( void );
581*7c478bd9Sstevel@tonic-gate 
582*7c478bd9Sstevel@tonic-gate /*
583*7c478bd9Sstevel@tonic-gate  * Originally part of liblpfs.a and fs.h, now no longer needed
584*7c478bd9Sstevel@tonic-gate  * since the code doesn't have to work on pre-SVR4.0.
585*7c478bd9Sstevel@tonic-gate  */
586*7c478bd9Sstevel@tonic-gate #define	Opendir		opendir
587*7c478bd9Sstevel@tonic-gate #define	Telldir		telldir
588*7c478bd9Sstevel@tonic-gate #define	Seekdir		seekdir
589*7c478bd9Sstevel@tonic-gate #define	Rewinddir(dirp)	Seekdir(dirp, 0L)
590*7c478bd9Sstevel@tonic-gate #define	Closedir	closedir
591*7c478bd9Sstevel@tonic-gate #define	Readdir		readdir
592*7c478bd9Sstevel@tonic-gate #define	Mkdir		mkdir
593*7c478bd9Sstevel@tonic-gate #define	Rmdir		rmdir
594*7c478bd9Sstevel@tonic-gate 
595*7c478bd9Sstevel@tonic-gate #define	next_dir(base, ptr)	next_x(base, ptr, S_IFDIR)
596*7c478bd9Sstevel@tonic-gate #define	next_file(base, ptr)	next_x(base, ptr, S_IFREG)
597*7c478bd9Sstevel@tonic-gate 
598*7c478bd9Sstevel@tonic-gate char *		next_x  ( char * , long * , unsigned int );
599*7c478bd9Sstevel@tonic-gate 
600*7c478bd9Sstevel@tonic-gate #endif
601