OSDN Git Service

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