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