OSDN Git Service

Add PuTTY 0.61 to contrib directory.
[ffftp/ffftp.git] / contrib / putty / CHARSET / SBCS.C
diff --git a/contrib/putty/CHARSET/SBCS.C b/contrib/putty/CHARSET/SBCS.C
new file mode 100644 (file)
index 0000000..f5ea523
--- /dev/null
@@ -0,0 +1,53 @@
+/*\r
+ * sbcs.c - routines to handle single-byte character sets.\r
+ */\r
+\r
+#include "charset.h"\r
+#include "internal.h"\r
+\r
+/*\r
+ * The charset_spec for any single-byte character set should\r
+ * provide read_sbcs() as its read function, and its `data' field\r
+ * should be a wchar_t string constant containing the 256 entries\r
+ * of the translation table.\r
+ */\r
+\r
+void read_sbcs(charset_spec const *charset, long int input_chr,\r
+              charset_state *state,\r
+              void (*emit)(void *ctx, long int output), void *emitctx)\r
+{\r
+    const struct sbcs_data *sd = charset->data;\r
+\r
+    UNUSEDARG(state);\r
+\r
+    emit(emitctx, sd->sbcs2ucs[input_chr]);\r
+}\r
+\r
+void write_sbcs(charset_spec const *charset, long int input_chr,\r
+               charset_state *state,\r
+               void (*emit)(void *ctx, long int output), void *emitctx)\r
+{\r
+    const struct sbcs_data *sd = charset->data;\r
+    int i, j, k, c;\r
+\r
+    UNUSEDARG(state);\r
+\r
+    /*\r
+     * Binary-search in the ucs2sbcs table.\r
+     */\r
+    i = -1;\r
+    j = sd->nvalid;\r
+    while (i+1 < j) {\r
+       k = (i+j)/2;\r
+       c = sd->ucs2sbcs[k];\r
+       if (input_chr < sd->sbcs2ucs[c])\r
+           j = k;\r
+       else if (input_chr > sd->sbcs2ucs[c])\r
+           i = k;\r
+       else {\r
+           emit(emitctx, c);\r
+           return;\r
+       }\r
+    }\r
+    emit(emitctx, ERROR);\r
+}\r