#ifndef _LP_LP_H
#define _LP_LP_H
#ifdef __cplusplus
extern "C" {
#endif
#include <errno.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
#include <dirent.h>
typedef struct SCALED {
float val;
char sc;
} SCALED;
typedef struct FALERT {
char *shcmd;
int Q;
int W;
} FALERT;
#define LP_USE_PAPI_ATTR 1
#define getpaths()
#define getadminpaths(x)
#define LPDIR "/usr/lib/lp"
#define ETCDIR "/etc/lp"
#define SPOOLDIR "/var/spool/lp"
#define LOGDIR "/var/lp/logs"
#define TERMINFO "/usr/share/lib/terminfo"
#define LPUSER "lp"
#define ROOTUSER "root"
#define BANG_S "!"
#define BANG_C '!'
#define LOCAL_LPUSER BANG_S LPUSER
#define LOCAL_ROOTUSER BANG_S ROOTUSER
#define ALL_BANG_ALL NAME_ALL BANG_S NAME_ALL
#define FIFOSDIR "fifos"
#define FILTERTABLE "filter.table"
#define FILTERTABLE_I "filter.table.i"
#define COMMENTFILE "comment"
#define ALLOWFILE "allow"
#define DENYFILE "deny"
#define ALERTSHFILE "alert.sh"
#define ALERTVARSFILE "alert.vars"
#define ALERTPROTOFILE "alert.proto"
#define CONFIGFILE "configuration"
#define FACCESSPREFIX "forms."
#define PACCESSPREFIX "paper."
#define UACCESSPREFIX "users."
#define FALLOWFILE FACCESSPREFIX ALLOWFILE
#define FDENYFILE FACCESSPREFIX DENYFILE
#define UALLOWFILE UACCESSPREFIX ALLOWFILE
#define UDENYFILE UACCESSPREFIX DENYFILE
#define STATUSFILE "status"
#define PSTATUSFILE "pstatus"
#define CSTATUSFILE "cstatus"
#define STANDARD "standard"
#define FAULTMESSAGEFILE "faultMessage"
#define FORMMESSAGEFILE "formMessage"
#define LPNET "/usr/lib/lp/lpNet"
#ifdef LP_USE_PAPI_ATTR
#define STANDARD_FOOMATIC "standard_foomatic"
#define LP_PAPIATTRNAME "attributes"
#endif
#define NAME_ALL "all"
#define NAME_ANY "any"
#define NAME_NONE "none"
#define NAME_TERMINFO "terminfo"
#define NAME_SIMPLE "simple"
#define NAME_HOLD "hold"
#define NAME_RESUME "resume"
#define NAME_IMMEDIATE "immediate"
#define NAME_CONTINUE "continue"
#define NAME_BEGINNING "beginning"
#define NAME_WAIT "wait"
#define NAME_MAIL "mail"
#define NAME_WRITE "write"
#define NAME_QUIET "quiet"
#define NAME_LIST "list"
#define NAME_ON "on"
#define NAME_OFF "off"
#define NAME_OPTIONAL "optional"
#define NAME_ALWAYS "Always"
#define NAME_UNKNOWN "unknown"
#define NAME_REJECTING "rejecting"
#define NAME_ACCEPTING "accepting"
#define NAME_DISABLED "disabled"
#define NAME_ENABLED "enabled"
#define NAME_DIRECT "direct"
#define NAME_PICA "pica"
#define NAME_ELITE "elite"
#define NAME_COMPRESSED "compressed"
#define NAME_ALLOW "allow"
#define NAME_DENY "deny"
#define NAME_ONCE "once"
#define NAME_DEFAULT "default"
#define NAME_KEEP "keep"
#define CUZ_NEW_PRINTER "new printer"
#define CUZ_NEW_DEST "new destination"
#define CUZ_STOPPED "stopped with printer fault"
#define CUZ_FAULT "printer fault"
#define CUZ_LOGIN_PRINTER "disabled by Spooler: login terminal"
#define CUZ_MOUNTING "mounting a form"
#define CUZ_NOFORK "can't fork"
#define CUZ_PRINTING_OK "ready and printing"
#define TIMEOUT_FAULT \
"Timed-out trying to open the printer port.\n"
#define OPEN_FAULT \
"Failed to open the printer port.\n"
#define PUSH_FAULT \
"Failed to push module(s) onto the printer port stream.\n"
#define HANGUP_FAULT \
"The connection to the printer dropped; perhaps the printer went off-line!\n"
#define HANGUP_FAULT_LPCAT \
"The connection to the printer dropped; perhaps the printer went off-line.\n"
#define INTERRUPT_FAULT \
"Received an interrupt from the printer. The reason is unknown,\n\
although a common cause is that the printer's buffer capacity\n\
was exceeded. Using XON/XOFF flow control, adding carriage-return\n\
delays, or lowering the baud rate may fix the problem.\n\
See stty(1) and lpadmin(8) man-pages for help in doing this.\n"
#define PIPE_FAULT \
"The output ``port'', a FIFO, was closed before all output was written.\n"
#define EXIT_FAULT \
"The interface program returned with a reserved exit code.\n"
#define LP_EBADSDN 1
#define LP_EBADINT 2
#define LP_EBADNAME 3
#define LP_EBADARG 4
#define LP_ETRAILIN 5
#define LP_ENOCMT 6
#define LP_EBADCTYPE 7
#define LP_ENOALP 8
#define LP_ENULLPTR 9
#define LP_EBADHDR 10
#define LP_ETEMPLATE 11
#define LP_EKEYWORD 12
#define LP_EPATTERN 13
#define LP_ERESULT 14
#define LP_EREGEX 15
#define LP_ENOMEM 99
extern int lp_errno;
#define LP_WS " "
#define LP_SEP ","
#define LP_QUOTES "'\""
#define MAIL "mail"
#define WRITE "write"
#define STATUS_BREAK "=========="
#define STREQU(A, B) ((!(A) || !(B)) ? 0 : (strcmp((A), (B)) == 0))
#define STRNEQU(A, B, N) ((!(A) || !(B)) ? 0 : (strncmp((A), (B), (N)) == 0))
#define CS_STREQU(A, B) (cs_strcmp((A), (B)) == 0)
#define CS_STRNEQU(A, B, N) (cs_strncmp((A), (B), (N)) == 0)
#define STRSIZE(X) (sizeof (X) - 1)
#define SAME(A, B) ((A) == (B) || (A) && (B) && STREQU((A), (B)))
#define PRINTF (void)printf
#define SPRINTF (void)sprintf
#define FPRINTF (void)fprintf
#define NB(X) (X? X : "")
#define PERROR strerror(errno)
#define BIGGEST_NUMBER ULONG_MAX
#define BIGGEST_NUMBER_S "4294967295"
#define BIGGEST_REQID 999999
#define BIGGEST_REQID_S "999999"
#define MOST_FILES 999999
#define MOST_FILES_S "999999"
#define QA_FORM 1
#define QA_PRINTER 2
#define QA_PRINTWHEEL 3
#define MODE_READ (mode_t)0664
#define MODE_NOREAD (mode_t)0660
#define MODE_EXEC (mode_t)0775
#define MODE_NOEXEC (mode_t)0770
#define MODE_DIR (mode_t)0775
#define MODE_NODIR (mode_t)0770
extern int printlist_qsep;
extern char Lp_Spooldir[],
Lp_Admins[],
Lp_Bin[],
Lp_FIFO[],
Lp_Logs[],
Lp_ReqLog[],
Lp_Model[],
Lp_Requests[],
Lp_Secure[],
Lp_Schedlock[],
Lp_Slow_Filter[],
Lp_System[],
Lp_Temp[],
Lp_Tmp[],
Lp_Users[],
Lp_A[],
Lp_A_Classes[],
Lp_A_Forms[],
Lp_A_Interfaces[],
Lp_A_Logs[],
Lp_A_Printers[],
Lp_A_PrintWheels[],
Lp_A_Filters[],
Lp_A_Systems[],
Lp_Default[],
Lp_A_Faults[];
extern int open_locked(char *, char *, mode_t);
extern char *fdgets(char *, int, int);
extern int fdprintf(int, char *, ...);
extern int fdputs(char *, int);
extern int fdputc(char, int);
extern int is_printer_uri(char *);
FILE *open_lpfile(char *, char *, mode_t);
int close_lpfile(FILE *);
int chown_lppath(char *);
int mkdir_lpdir(char *, int);
int rmfile(char *);
int dumpstring(char *, char *);
char *loadstring(char *);
char *loadline(char *);
char *sop_up_rest(int, char *);
#define emptylist(LP) (!(LP) || !(LP)[0])
int addlist(char ***, char *);
int addstring(char **, char *);
int appendlist(char ***, char *);
int dellist(char ***, char *);
int joinlist(char ***, char **);
int lenlist(char **);
int printlist(FILE *, char **);
int fdprintlist(int, char **);
int searchlist(char *, char **);
int searchlist_with_terminfo(char *, char **);
char **duplist(char **);
char **getlist(char *, char *, char *);
char **dashos(char *);
char **wherelist(char *, char **);
char *sprintlist(char **);
char *search_cslist(char *, char **);
void freelist(char **);
void printlist_setup(char *, char *, char *, char *);
void printlist_unsetup(void);
#define getsdn(S) _getsdn(S, (char **)0, 0)
#define getcpi(S) _getsdn(S, (char **)0, 1)
#define N_COMPRESSED 9999
void printsdn(FILE *, SCALED);
void fdprintsdn(int, SCALED);
void printsdn_setup(char *, char *, char *);
void printsdn_unsetup(void);
SCALED _getsdn(char *, char **, int);
char *makepath(char *, ...);
char *getspooldir(void);
char *getrequestfile(char *);
char *getprinterfile(char *, char *);
char *getsystemfile(char *, char *);
char *getclassfile(char *);
char *getfilterfile(char *);
char *getformfile(char *, char *);
int cs_strcmp(char *, char *);
int cs_strncmp(char *, char *, int);
int syn_name(char *);
int syn_text(char *);
int syn_comment(char *);
int syn_machine_name(char *);
int syn_option(char *);
int putalert(char *, char *, FALERT *);
int delalert(char *, char *);
FALERT *getalert(char *, char *);
void printalert(FILE *, FALERT *, int);
int tidbit(char *, char *, ...);
void untidbit(char *);
#define Access _Access
#define Chdir _Chdir
#define Chmod _Chmod
#define Chown _Chown
#define Close _Close
#define Creat _Creat
#define Fcntl _Fcntl
#define Fstat _Fstat
#define Link _Link
#define Lstat _Lstat
#define Mknod _Mknod
#define Open _Open
#define Read _Read
#define Readlink _Readlink
#define Rename _Rename
#define Stat _Stat
#define Symlink _Symlink
#define Unlink _Unlink
#define Wait _Wait
#define Write _Write
#define Malloc(size) _Malloc(size, __FILE__, __LINE__)
#define Realloc(ptr, size) _Realloc(ptr, size, __FILE__, __LINE__)
#define Calloc(nelem, elsize) _Calloc(nelem, elsize, __FILE__, __LINE__)
#define Strdup(s) _Strdup(s, __FILE__, __LINE__)
#define Free(ptr) _Free(ptr, __FILE__, __LINE__)
int _Access(char *, int);
int _Chdir(char *);
int _Chmod(char *, int);
int _Chown(char *, int, int);
int _Close(int);
int _Creat(char *, int);
int _Fcntl(int, int, ...);
int _Fstat(int, struct stat *);
int _Link(char *, char *);
int _Lstat(char *, struct stat *);
int _Mknod(char *, int, int);
int _Mkpipe(char *, int, int);
int _Open(char *, int, ... );
int _Read(int, char *, unsigned int);
int _Readlink(char *, char *, unsigned int);
int _Rename(char *, char *);
int _Symlink(char *, char *);
int _Stat(char *, struct stat *);
int _Unlink(char *);
int _Wait(int *);
int _Write(int, char *, unsigned int);
void *_Malloc(size_t, const char *, int);
void *_Realloc(void *, size_t, const char *, int);
void *_Calloc(size_t, size_t, const char *, int);
char *_Strdup(const char *, const char *, int);
void _Free(void *, const char *, int);
int isterminfo(char *);
int isprinter(char *);
int isrequest(char *);
int isnumber(char *);
char *getname(void);
char *makestr(char *, ...);
char *strip(char *);
void sendmail(char *, char *);
extern void (*lp_alloc_fail_handler)(void);
#define Opendir opendir
#define Telldir telldir
#define Seekdir seekdir
#define Rewinddir(dirp) Seekdir(dirp, 0L)
#define Closedir closedir
#define Readdir readdir
#define Mkdir mkdir
#define Rmdir rmdir
#define next_dir(base, ptr) next_x(base, ptr, S_IFDIR)
#define next_file(base, ptr) next_x(base, ptr, S_IFREG)
extern int chownmod(char *, uid_t, gid_t, mode_t);
char *next_x(char *, long *, unsigned int);
extern char *get_labeled_zonename(char *);
extern int get_peer_label(int, char **);
#ifdef __cplusplus
}
#endif
#endif