1 /*	-*- mode: c; mode: fold -*-	*/
2 # ifndef	__PAGER_H
3 # define	__PAGER_H		1
4 # include	<stdio.h>
5 
6 /*{{{	definitions, macros */
7 # ifndef	NDEBUG
8 # define	V(lvl,msg)	((void) (((lvl) <= verbose) && verbout ? (*verbout) msg, fflush (stdout) : 0))
9 # define	MCHK(xxx)	((void) ((xxx) && ((xxx) -> magic != MAGIC) ? fprintf (stderr, "Invalid magic: expect %ld got %ld in %s:%d\n", MAGIC, (xxx) -> magic, __FILE__, __LINE__) : 0))
10 # define	MKMAGIC(ch1,ch2,ch3,ch4)					\
11 				((long) ((((unsigned char) (ch1)) << 24) |	\
12 					 (((unsigned char) (ch2)) << 16) |	\
13 					 (((unsigned char) (ch3)) << 8) |	\
14 					 ((unsigned char) (ch4))))
15 # else		/* NDEBUG */
16 # define	V(lvl,msg)
17 # define	MCHK(xxx)
18 # endif		/* NDEBUG */
19 
20 # define	NO_ERR		0
21 # define	ERR_FAIL	(-1)
22 # define	ERR_FATAL	(-2)
23 # define	ERR_ABORT	(-3)
24 
25 # define	ECONT(xxx)	(((xxx) == NO_ERR) || ((xxx) == ERR_FAIL))
26 # define	ESTOP(xxx)	(((xxx) == ERR_FATAL) || ((xxx) == ERR_ABORT))
27 
28 # define	LGS_SENT	'+'
29 # define	LGF_SENT	'-'
30 # define	LGS_INF		'*'
31 # define	LGF_INF		'/'
32 
33 # define	LG_INF		'i'
34 # define	LG_COST		'c'
35 # define	LG_SSESSION	's'
36 # define	LG_ESESSION	'e'
37 # define	LG_PROTO	'p'
38 /*}}}*/
39 /*{{{	typedefs */
40 typedef enum {
41 	False = 0,
42 	True = ! False
43 }	Bool;
44 
45 typedef enum {
46 	Unknown,
47 	Ascii,
48 	Script,
49 	Tap,
50 	Ucp
51 }	Protocol;
52 
53 typedef unsigned char	char_t;
54 
55 typedef struct {
56 	char_t	*str;		/* the string itself			*/
57 	int	len;		/* the current length			*/
58 	int	size;		/* the allocated size			*/
59 }	string_t;
60 
61 typedef struct {
62 	int	day, mon, year;
63 	int	hour, min, sec;
64 }	date_t;
65 /*}}}*/
66 /*{{{	prototypes */
67 /*{{{	utility */
68 extern char	*skip (char *str);
69 extern char	*skipch (char *str, char ch);
70 extern char	*get_line (FILE *fp, Bool cont);
71 extern int	verbose_out (char *, ...);
72 /*}}}*/
73 /*{{{	string handling */
74 extern string_t	*snewc (char *str);
75 extern string_t	*snew (char_t *str, int len);
76 extern Bool	sexpand (string_t *s, int nsize);
77 extern Bool	scopy (string_t *dst, string_t *src);
78 extern Bool	scat (string_t *dst, string_t *src);
79 extern Bool	scopyc (string_t *dst, char *src);
80 extern Bool	scatc (string_t *dst, char *src);
81 extern string_t	*scut (string_t *str, int start, int len);
82 extern void	sdel (string_t *str, int start, int len);
83 extern Bool	sput (string_t *str, string_t *ins, int pos, int len);
84 extern Bool	sputc (string_t *str, char *ins, int pos, int len);
85 extern char	*sextract (string_t *s);
86 extern char	*schar (string_t *s);
87 extern void	*sfree (string_t *s);
88 extern void	srelease (string_t *s);
89 extern Bool	siscntrl (string_t *s, int pos);
90 extern Bool	sisspace (string_t *s, int pos);
91 extern Bool	sisdigit (string_t *s, int pos);
92 extern int	stoi (string_t *s);
93 /*}}}*/
94 /*{{{	date handling */
95 extern date_t	*dat_free (date_t *d);
96 extern date_t	*dat_parse (char *str);
97 extern int	dat_diff (date_t *d1, date_t *d2);
98 extern void	dat_clear (date_t *d);
99 extern void	dat_localtime (date_t *d);
100 /*}}}*/
101 /*{{{	tty handling */
102 extern void	*tty_open (char *dev, char *lckprefix, char *lckmethod);
103 extern void	*tty_close (void *sp);
104 extern Bool	tty_reopen (void *s, int msec);
105 extern void	tty_hangup (void *sp, int msec);
106 extern int	tty_fd (void *sp);
107 extern int	tty_setup (void *sp, Bool raw, Bool modem, int speed, int bpb, int sb, char parity);
108 extern void	tty_set_line_callback (void *sp, void (*func) (void *, string_t *, char_t, void *), char *sep, void *data);
109 extern void	tty_suspend_callback (void *sp, Bool susp);
110 extern int	tty_send (void *sp, char *str, int len);
111 extern int	tty_send_string (void *sp, char *str);
112 extern int	tty_expect (void *sp, int tout, ...);
113 extern int	tty_expect_list (void *sp, int tout, char **strs, int *lens);
114 extern int	tty_expect_string (void *sp, int tout, char *str);
115 extern int	tty_send_expect (void *sp, int deftout, char *str, char **opts);
116 extern void	tty_mdrain (void *sp, int msecs);
117 extern void	tty_drain (void *sp, int secs);
118 /*}}}*/
119 /*{{{	configuration */
120 extern void	*cfg_new (char *sep);
121 extern void	*cfg_read (char *fname, void *bp, char *sep);
122 extern void	*cfg_end (void *bp);
123 extern void	cfg_modify (void *bp, char *bname, char *var, char *val);
124 extern char	*cfg_get (void *bp, char *bname, char *var, char *dflt);
125 extern int	cfg_iget (void *bp, char *bname, char *var, int dflt);
126 extern Bool	cfg_bget (void *bp, char *bname, char *var, Bool dflt);
127 extern char	*cfg_block_get (void *bp, char *bname, char *var, char *dflt);
128 extern int	cfg_block_iget (void *bp, char *bname, char *var, int dflt);
129 extern Bool	cfg_block_bget (void *bp, char *bname, char *var, Bool dflt);
130 /*}}}*/
131 /*{{{	converting */
132 extern void	*cv_new (void);
133 extern void	*cv_free (void *cv);
134 extern void	*cv_reverse (void *src);
135 extern void	cv_define (void *cv, char_t src, char_t dst);
136 extern void	cv_sdefine (void *cv, char *src, char *dst);
137 extern void	cv_undefine (void *cv, char_t ch);
138 extern void	cv_sundefine (void *cv, char *ch);
139 extern void	cv_invalid (void *cv, char_t ch);
140 extern void	cv_sinvalid (void *cv, char *ch);
141 extern int	cv_read_table (void *cv, char *fname);
142 extern int	cv_write_table (void *cv, char *fname);
143 extern void	cv_merge (void *cv, void *in, Bool second);
144 extern int	cv_conv (void *cv, char_t ch);
145 /*}}}*/
146 /*{{{	ASCII protocol */
147 extern int	asc_login (void *ap, string_t *callid);
148 extern int	asc_logout (void *ap);
149 extern int	asc_transmit (void *ap, char *pid, char *msg);
150 extern int	asc_next (void *ap);
151 extern int	asc_sync (void *ap);
152 extern void	asc_config (void *ap, void (*logger) (char, char *, ...),
153 			    int deftout, char *alogin, char *alogout, char *apid, char *amsg, char *anext, char *async,
154 			    date_t *delay, date_t *expire, Bool rds);
155 extern void	asc_set_convtable (void *ap, void *ctab);
156 extern void	asc_add_convtable (void *ap, void *ctab);
157 extern void	*asc_new (void *sp);
158 extern void	*asc_free (void *ap);
159 extern int	asc_preinit (void);
160 extern void	asc_postdeinit (void);
161 /*}}}*/
162 /*{{{	scripting protocol */
163 extern int	scr_execute (void *sp, char *label, char *parm);
164 extern int	scr_load_string (void *sp, char *scr);
165 extern int	scr_load_file (void *sp, char *fname);
166 extern void	scr_config (void *sp, void (*logger) (char, char *, ...), date_t *delay, date_t *expire, Bool rds);
167 extern void	scr_set_convtable (void *sp, void *ctab);
168 extern void	scr_add_convtable (void *sp, void *ctab);
169 extern void	*scr_new (void *sp, char *typ, char *libdir);
170 extern void	*scr_free (void *sp);
171 extern int	scr_preinit (char *libdir);
172 extern void	scr_postdeinit (void);
173 /*}}}*/
174 /*{{{	Telocator Alphanumeric Protocol */
175 extern int	tap_login (void *tp, char *stype, char ttype, char *passwd, string_t *callid);
176 extern int	tap_logout (void *tp);
177 extern int	tap_transmit (void *tp, string_t **field, Bool last);
178 extern void	tap_config (void *tp, void (*logger) (char, char *, ...), Bool pre16);
179 extern void	tap_timeouts (void *tp, int t1, int t2, int t3, int t4, int t5);
180 extern void	tap_retries (void *tp, int n1, int n2, int n3, int licnt, int locnt);
181 extern void	tap_set_convtable (void *tp, void *ctab);
182 extern void	tap_add_convtable (void *tp, void *ctab);
183 extern void	*tap_new (void *sp);
184 extern void	*tap_free (void *tp);
185 extern int	tap_preinit (void);
186 extern void	tap_postdeinit (void);
187 /*}}}*/
188 /*{{{	Universal Computer Protocol */
189 extern int	ucp_login (void *up, string_t *callid);
190 extern int	ucp_logout (void *up);
191 extern int	ucp_transmit (void *up, string_t *pagerid, string_t *msg, Bool last);
192 extern void	ucp_config (void *up, void (*logger) (char, char *, ...),
193 			    Bool xtend, int stout, int retry, int rtout,
194 			    date_t *delay, date_t *expire, Bool rds);
195 extern void	ucp_set_convtable (void *up, void *ctab);
196 extern void	ucp_add_convtable (void *up, void *ctab);
197 extern void	*ucp_new (void *sp);
198 extern void	*ucp_free (void *up);
199 extern int	ucp_preinit (void);
200 extern void	ucp_postdeinit (void);
201 /*}}}*/
202 /*}}}*/
203 /*{{{	global variables */
204 extern int	verbose;
205 extern int	(*verbout) (char *, ...);
206 /*}}}*/
207 # endif		/* __PAGER_H */
208