]> asedeno.scripts.mit.edu Git - PuTTY.git/blob - charset/sbcs.c
Makefile.am: add pageant.1 to the man pages collection.
[PuTTY.git] / charset / sbcs.c
1 /*
2  * sbcs.c - routines to handle single-byte character sets.
3  */
4
5 #include "charset.h"
6 #include "internal.h"
7
8 /*
9  * The charset_spec for any single-byte character set should
10  * provide read_sbcs() as its read function, and its `data' field
11  * should be a wchar_t string constant containing the 256 entries
12  * of the translation table.
13  */
14
15 void read_sbcs(charset_spec const *charset, long int input_chr,
16                charset_state *state,
17                void (*emit)(void *ctx, long int output), void *emitctx)
18 {
19     const struct sbcs_data *sd = charset->data;
20
21     UNUSEDARG(state);
22
23     emit(emitctx, sd->sbcs2ucs[input_chr]);
24 }
25
26 void write_sbcs(charset_spec const *charset, long int input_chr,
27                 charset_state *state,
28                 void (*emit)(void *ctx, long int output), void *emitctx)
29 {
30     const struct sbcs_data *sd = charset->data;
31     int i, j, k, c;
32
33     UNUSEDARG(state);
34
35     /*
36      * Binary-search in the ucs2sbcs table.
37      */
38     i = -1;
39     j = sd->nvalid;
40     while (i+1 < j) {
41         k = (i+j)/2;
42         c = sd->ucs2sbcs[k];
43         if (input_chr < sd->sbcs2ucs[c])
44             j = k;
45         else if (input_chr > sd->sbcs2ucs[c])
46             i = k;
47         else {
48             emit(emitctx, c);
49             return;
50         }
51     }
52     emit(emitctx, ERROR);
53 }