sync with 0.7.5
[claws.git] / libkcc / jis.c
1 #include "libkcc.h"
2
3 #include <string.h>
4
5 extern enum mode outmode;
6 extern char shiftout[], shiftin[];
7 extern bool nogaiji;
8 /*---------------------------------------------------------------------
9     NAME
10         jisascii
11  ---------------------------------------------------------------------*/
12 void Kcc_jisascii(ddd, c)
13     register int c;
14     char **ddd;
15 {
16   int i;
17
18     switch (outmode) {
19     case M_ASCII:
20         break;
21     case M_SO:
22         **ddd = SI; (*ddd)++;
23         outmode = M_ASCII;
24         break;
25     default:
26         for (i=0; i< strlen(shiftout); i++) { **ddd = shiftout[i]; (*ddd)++; }
27         outmode = M_ASCII;
28         break;
29     }
30     **ddd = c; (*ddd)++;
31 }
32
33 /*---------------------------------------------------------------------
34     NAME
35         jisgaiji
36  ---------------------------------------------------------------------*/
37 void Kcc_jisgaiji(ddd, c1, c2)
38     register int c1, c2;
39     char **ddd;
40 {
41
42     if (nogaiji)
43         Kcc_jiskanji(ddd, ZENPAD >> 8, ZENPAD & 0xff);
44     else {
45         if (outmode != M_GAIJI) {
46           if (outmode == M_SO)  { **ddd = SI; (*ddd)++; }
47           **ddd = '\033'; (*ddd)++;
48           **ddd = '$'; (*ddd)++;
49           **ddd = '('; (*ddd)++;
50           **ddd = 'D'; (*ddd)++;
51           outmode = M_GAIJI;
52         }
53         **ddd = c1;
54         **ddd = c2;
55     }
56 }
57
58 /*---------------------------------------------------------------------
59     NAME
60         jiskana
61  ---------------------------------------------------------------------*/
62 void Kcc_jiskana(ddd, c)
63     register int c;
64     char **ddd;
65 {
66   int i;
67
68     if (outmode != M_SO) {
69       if (outmode != M_ASCII) {
70         for (i=0; i< strlen(shiftout); i++) {**ddd = shiftout[i]; (*ddd)++; }
71       }
72       **ddd = SO; (*ddd)++;
73       outmode = M_SO;
74     }
75     **ddd = !nogaiji || (0x20 < c && c < 0x60) ? c : HANPAD; (*ddd)++;
76 }
77
78 /*---------------------------------------------------------------------
79     NAME
80         jiskana8
81  ---------------------------------------------------------------------*/
82 void Kcc_jiskana8(ddd, c)
83     register int c;
84     char **ddd;
85 {
86   int i;
87
88     if (outmode != M_ASCII) {
89         for (i=0; i< strlen(shiftout); i++) {**ddd = shiftout[i]; (*ddd)++; }
90         outmode = M_ASCII;
91     }
92     **ddd = (!nogaiji || (0x20 < c && c < 0x60) ? c : HANPAD) | 0x80; (*ddd)++;
93 }
94
95 /*---------------------------------------------------------------------
96     NAME
97         jiskanak
98  ---------------------------------------------------------------------*/
99 void Kcc_jiskanak(ddd, c)
100     register int c;
101     char **ddd;
102 {
103
104     if (outmode != M_ESCI) {
105         **ddd = '\033'; (*ddd)++;
106         **ddd = '('; (*ddd)++;
107         **ddd = 'I'; (*ddd)++;
108         outmode = M_ESCI;
109     }
110     **ddd = !nogaiji || (0x20 < c && c < 0x60) ? c : HANPAD; (*ddd)++;
111 }
112
113 /*---------------------------------------------------------------------
114     NAME
115         jiskanji
116  ---------------------------------------------------------------------*/
117 void Kcc_jiskanji(ddd, c1, c2)
118     register int c1, c2;
119     char **ddd;
120 {
121   int i;
122
123     if (outmode != M_KANJI) {
124         if (outmode == M_SO)
125           { **ddd = SI; (*ddd)++; }
126         for (i=0; i< strlen(shiftin); i++) {**ddd = shiftin[i]; (*ddd)++; }
127         outmode = M_KANJI;
128     }
129     **ddd = c1; (*ddd)++;
130     **ddd = c2; (*ddd)++;
131 }
132