13e12c5d1SDavid du Colombier extern int squawk; 23e12c5d1SDavid du Colombier extern int clean; 3bd389b36SDavid du Colombier extern char *file; 43e12c5d1SDavid du Colombier extern int verbose; 53e12c5d1SDavid du Colombier extern long ninput, noutput, nrunes, nerrors; 63e12c5d1SDavid du Colombier 73e12c5d1SDavid du Colombier enum { From = 1, Table = 2, Func = 4 }; 83e12c5d1SDavid du Colombier 9*219b2ee8SDavid du Colombier typedef void (*Fnptr)(void); 103e12c5d1SDavid du Colombier struct convert{ 113e12c5d1SDavid du Colombier char *name; 123e12c5d1SDavid du Colombier char *chatter; 133e12c5d1SDavid du Colombier int flags; 143e12c5d1SDavid du Colombier void *data; 15*219b2ee8SDavid du Colombier Fnptr fn; 16*219b2ee8SDavid du Colombier }; 17*219b2ee8SDavid du Colombier extern struct convert convert[]; 183e12c5d1SDavid du Colombier struct convert *conv(char *, int); 193e12c5d1SDavid du Colombier typedef void (*Infn)(int, long *, struct convert *); 203e12c5d1SDavid du Colombier typedef void (*Outfn)(Rune *, int, long *); 213e12c5d1SDavid du Colombier void outtable(Rune *, int, long *); 223e12c5d1SDavid du Colombier 233e12c5d1SDavid du Colombier void utf_in(int, long *, struct convert *); 243e12c5d1SDavid du Colombier void utf_out(Rune *, int, long *); 253e12c5d1SDavid du Colombier void isoutf_in(int, long *, struct convert *); 263e12c5d1SDavid du Colombier void isoutf_out(Rune *, int, long *); 273e12c5d1SDavid du Colombier 28*219b2ee8SDavid du Colombier #define N 10000 /* just blocking */ 293e12c5d1SDavid du Colombier #define OUT(out, r, n) if(out->flags&Table) outtable(r, n, (long *)out->data);\ 30*219b2ee8SDavid du Colombier else ((Outfn)(out->fn))(r, n, (long *)0) 313e12c5d1SDavid du Colombier 32*219b2ee8SDavid du Colombier extern Rune runes[N]; 33*219b2ee8SDavid du Colombier extern char obuf[UTFmax*N]; /* maximum bloat from N runes */ 34bd389b36SDavid du Colombier 35bd389b36SDavid du Colombier #define BADMAP (0xFFFD) 36*219b2ee8SDavid du Colombier #define BYTEBADMAP ('?') /* badmap but has to fit in a byte */ 37bd389b36SDavid du Colombier #define ESC 033 38*219b2ee8SDavid du Colombier 39*219b2ee8SDavid du Colombier #ifdef PLAN9 40*219b2ee8SDavid du Colombier #define EPR fprint(2, 41*219b2ee8SDavid du Colombier #define EXIT(n,s) exits(s) 42*219b2ee8SDavid du Colombier #else 43*219b2ee8SDavid du Colombier #define EPR fprintf(stderr, 44*219b2ee8SDavid du Colombier #define USED(x) /* in plan 9, USED(x) tells the compiler to treat x as used */ 45*219b2ee8SDavid du Colombier #define EXIT(n,s) exit(n) 46*219b2ee8SDavid du Colombier #endif 47