/* $OpenBSD: lp.h,v 1.1.1.1 2018/04/27 16:14:36 eric Exp $ */ /* * Copyright (c) 2017 Eric Faurot * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include #include #define _PATH_PRINTCAP "/etc/printcap" #define _PATH_HOSTSLPD "/etc/hosts.lpd" #define DEFAULT_FF "\f" #define DEFAULT_LF _PATH_CONSOLE #define DEFAULT_LO "lock" #define DEFAULT_LP "/dev/lp" #define DEFAULT_PC 200 #define DEFAULT_PL 66 #define DEFAULT_PW 132 #define DEFAULT_RP "lp" #define DEFAULT_SD "/var/spool/output" #define DEFAULT_ST "status" #define LP_MAXALIASES 32 #define LP_MAXUSERS 50 #define LP_MAXREQUESTS 50 #define LPR_ACK 0 #define LPR_NACK 1 /* only for sending */ #define PRN_LOCAL 0 /* local printer */ #define PRN_NET 1 /* printer listening directly on a port */ #define PRN_LPR 2 /* some lpr daemon */ #define LPQ_PRINTER_DOWN 0x1 #define LPQ_QUEUE_OFF 0x2 #define LPQ_QUEUE_UPDATED 0x4 #define LP_FF(p) (((p)->lp_ff) ? ((p)->lp_ff) : DEFAULT_FF) #define LP_LF(p) (((p)->lp_lf) ? ((p)->lp_lf) : DEFAULT_LF) #define LP_LO(p) (((p)->lp_lo) ? ((p)->lp_lo) : DEFAULT_LO) #define LP_LP(p) (((p)->lp_lp) ? ((p)->lp_lp) : DEFAULT_LP) #define LP_RP(p) (((p)->lp_rp) ? ((p)->lp_rp) : DEFAULT_RP) #define LP_SD(p) (((p)->lp_sd) ? ((p)->lp_sd) : DEFAULT_SD) #define LP_ST(p) (((p)->lp_st) ? ((p)->lp_st) : DEFAULT_ST) #define LP_JOBNUM(cf) (100*((cf)[3]-'0') + 10*((cf)[4]-'0') + ((cf)[5]-'0')) #define LP_JOBHOST(cf) ((cf) + 6) struct lp_printer { int lp_type; char *lp_name; char *lp_aliases[LP_MAXALIASES]; int lp_aliascount; char *lp_host; /* if remote */ char *lp_port; FILE *lp_lock; /* currently held lock file */ char *lp_af; /* name of accounting file */ long lp_br; /* if lp is a tty, set baud rate (ioctl(2) call) */ char *lp_cf; /* cifplot data filter */ char *lp_df; /* tex data filter (DVI format) */ char *lp_ff; /* string to send for a form feed */ short lp_fo; /* print a form feed when device is opened */ char *lp_gf; /* graph data filter (plot(3) format) */ short lp_hl; /* print the burst header page last */ short lp_ic; /* supports non-standard ioctl to indent printout */ char *lp_if; /* name of text filter which does accounting */ char *lp_lf; /* error logging file name */ char *lp_lo; /* name of lock file */ char *lp_lp; /* local printer device, or port@host for remote */ long lp_mc; /* maximum number of copies allowed; 0=unlimited */ char *lp_ms; /* if lp is a tty, a comma-separated, stty(1)-like list describing the tty modes */ long lp_mx; /* max file size (in BUFSIZ blocks); 0=unlimited */ char *lp_nd; /* next directory for queues list (unimplemented) */ char *lp_nf; /* ditroff data filter (device independent troff) */ char *lp_of; /* name of output filtering program */ long lp_pc; /* price per foot or page in hundredths of cents */ long lp_pl; /* page length (in lines) */ long lp_pw; /* page width (in characters) */ long lp_px; /* page width in pixels (horizontal) */ long lp_py; /* page length in pixels (vertical) */ char *lp_rf; /* filter for printing FORTRAN style text files */ char *lp_rg; /* restricted group-only group members can access */ char *lp_rm; /* machine name for remote printer */ char *lp_rp; /* remote printer name argument */ short lp_rs; /* remote users must have a local account */ short lp_rw; /* open printer device for reading and writing */ short lp_sb; /* short banner (one line only) */ short lp_sc; /* suppress multiple copies */ char *lp_sd; /* spool directory */ short lp_sf; /* suppress form feeds */ short lp_sh; /* suppress printing of burst page header */ char *lp_st; /* status file name */ char *lp_tf; /* troff data filter (cat phototypesetter) */ char *lp_tr; /* trailer string to print when queue empties */ char *lp_vf; /* raster image filter */ }; struct lp_queue { int count; char **cfname; }; struct lp_jobfilter { const char *hostfrom; int nuser; const char *users[LP_MAXUSERS]; int njob; int jobs[LP_MAXREQUESTS]; }; extern char *lpd_hostname; /* lp.c */ int lp_getprinter(struct lp_printer *, const char *); int lp_scanprinters(struct lp_printer *); void lp_clearprinter(struct lp_printer *); int lp_readqueue(struct lp_printer *, struct lp_queue *); void lp_clearqueue(struct lp_queue *); FILE* lp_fopen(struct lp_printer *, const char *); int lp_stat(struct lp_printer *, const char *, struct stat *); int lp_unlink(struct lp_printer *, const char *); int lp_lock(struct lp_printer *); void lp_unlock(struct lp_printer *); int lp_getqueuestate(struct lp_printer *, int, int *); int lp_getcurrtask(struct lp_printer *, pid_t *, char *, size_t); void lp_setcurrtask(struct lp_printer *, const char *); int lp_getstatus(struct lp_printer *, char *, size_t); void lp_setstatus(struct lp_printer *, const char *, ...) __attribute__((__format__ (printf, 2, 3))); int lp_validfilename(const char *, int); int lp_create(struct lp_printer *, int, size_t, const char *); int lp_commit(struct lp_printer *, const char *); /* lp_banner.c */ int lp_banner(int, char *, int); /* lp_displayq.c */ void lp_displayq(int, struct lp_printer *, int, struct lp_jobfilter *); /* lp_rmjob */ int lp_rmjob(int, struct lp_printer *, const char *, struct lp_jobfilter *); /* lp_stty.c */ void lp_stty(struct lp_printer *, int);