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