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