]> git.lizzy.rs Git - plan9front.git/blob - sys/src/cmd/tcs/hdr.h
tcs: handle surrogate pairs
[plan9front.git] / sys / src / cmd / tcs / hdr.h
1 extern int squawk;
2 extern int clean;
3 extern char *file;
4 extern int verbose;
5 extern long ninput, noutput, nrunes, nerrors;
6
7 enum { From = 1, Table = 2, Func = 4 };
8
9 typedef void (*Fnptr)(void);
10 struct convert{
11         char *name;
12         char *chatter;
13         int flags;
14         void *data;
15         Fnptr fn;
16 };
17 extern struct convert convert[];
18 struct convert *conv(char *, int);
19 typedef void (*Infn)(int, long *, struct convert *);
20 typedef void (*Outfn)(Rune *, int, long *);
21 void outtable(Rune *, int, long *);
22 int fixsurrogate(Rune *rp, Rune r2);
23
24 void utf_in(int, long *, struct convert *);
25 void utf_out(Rune *, int, long *);
26 void isoutf_in(int, long *, struct convert *);
27 void isoutf_out(Rune *, int, long *);
28
29 #define         N               10000           /* just blocking */
30 #define OUT(out, r, n)  if(out->flags&Table) outtable(r, n, (long *)out->data);\
31                         else ((Outfn)(out->fn))(r, n, (long *)0)
32
33 extern Rune runes[N];
34 extern char obuf[UTFmax*N];     /* maximum bloat from N runes */
35
36 #define         BADMAP          (0xFFFD)
37 #define         BYTEBADMAP      ('?')           /* badmap but has to fit in a byte */
38 #define         ESC             033
39
40 #ifdef  PLAN9
41 #define EPR             fprint(2,
42 #define EXIT(n,s)       exits(s)
43 #else
44 #define EPR             fprintf(stderr,
45 #define EXIT(n,s)       exit(n)
46 #endif