aboutsummaryrefslogtreecommitdiffstats
path: root/libwc/putc.c
diff options
context:
space:
mode:
authorTatsuya Kinoshita <tats@vega.ocn.ne.jp>2011-05-04 07:05:14 +0000
committerTatsuya Kinoshita <tats@vega.ocn.ne.jp>2011-05-04 07:05:14 +0000
commit72f72d64a422d6628c4796f5c0bf2e508f134214 (patch)
tree0c9ea90cc53310832c977265521fb44db24a515e /libwc/putc.c
parentAdding upstream version 0.3 (diff)
downloadw3m-1ef51c20e0ea7b35c8c9cad6f9d9bc1e16664cc5.tar.gz
w3m-1ef51c20e0ea7b35c8c9cad6f9d9bc1e16664cc5.zip
Adding upstream version 0.5.1upstream/0.5.1
Diffstat (limited to 'libwc/putc.c')
-rw-r--r--libwc/putc.c56
1 files changed, 56 insertions, 0 deletions
diff --git a/libwc/putc.c b/libwc/putc.c
new file mode 100644
index 0000000..4df2448
--- /dev/null
+++ b/libwc/putc.c
@@ -0,0 +1,56 @@
+
+#include "wc.h"
+#include "wtf.h"
+
+static wc_status putc_st;
+static wc_ces putc_f_ces, putc_t_ces;
+static Str putc_str;
+
+void
+wc_putc_init(wc_ces f_ces, wc_ces t_ces)
+{
+ wc_output_init(t_ces, &putc_st);
+ putc_str = Strnew_size(8);
+ putc_f_ces = f_ces;
+ putc_t_ces = t_ces;
+}
+
+void
+wc_putc(char *c, FILE *f)
+{
+ wc_uchar *p;
+
+ if (putc_f_ces != WC_CES_WTF)
+ p = (wc_uchar *)wc_conv(c, putc_f_ces, WC_CES_WTF)->ptr;
+ else
+ p = (wc_uchar *)c;
+
+ Strclear(putc_str);
+ while (*p)
+ (*putc_st.ces_info->push_to)(putc_str, wtf_parse(&p), &putc_st);
+ fwrite(putc_str->ptr, 1, putc_str->length, f);
+}
+
+void
+wc_putc_end(FILE *f)
+{
+ Strclear(putc_str);
+ wc_push_end(putc_str, &putc_st);
+ if (putc_str->length)
+ fwrite(putc_str->ptr, 1, putc_str->length, f);
+}
+
+void
+wc_putc_clear_status(void)
+{
+ if (putc_st.ces_info->id & WC_CES_T_ISO_2022) {
+ putc_st.gl = 0;
+ putc_st.gr = 0;
+ putc_st.ss = 0;
+ putc_st.design[0] = 0;
+ putc_st.design[1] = 0;
+ putc_st.design[2] = 0;
+ putc_st.design[3] = 0;
+ }
+}
+