extern int squawk; extern int clean; extern char *file; extern int verbose; extern long ninput, noutput, nrunes, nerrors; enum { From = 1, Table = 2, Func = 4 }; typedef void (*Fnptr) (void); struct convert { char *name; char *chatter; int flags; void *data; Fnptr fn; }; extern struct convert convert[]; struct convert *conv (char *, int); typedef void (*Infn) (int, long *, struct convert *); typedef void (*Outfn) (Rune *, int, long *); void outtable (Rune *, int, long *); void utf_in (int, long *, struct convert *); void utf_out (Rune *, int, long *); void isoutf_in (int, long *, struct convert *); void isoutf_out (Rune *, int, long *); #define N 10000 /* just blocking */ #define OUT(out, r, n) if(out->flags&Table) outtable(r, n, (long *)out->data);\ else ((Outfn)(out->fn))(r, n, (long *)0) extern Rune runes[N]; extern char obuf[UTFmax * N]; /* maximum bloat from N runes */ #define BADMAP (0xFFFD) #define BYTEBADMAP ('?') /* badmap but has to fit in a byte */ #define ESC 033 #ifdef PLAN9 #define EPR fprint(2, #define EXIT(n,s) exits(s) #else #define EPR fprintf(stderr, #define USED(x) /* in plan 9, USED(x) tells the compiler to treat x as used */ #define EXIT(n,s) exit(n) #endif