1*16d86563SAlexander Pyhalov /*
2*16d86563SAlexander Pyhalov * CDDL HEADER START
3*16d86563SAlexander Pyhalov *
4*16d86563SAlexander Pyhalov * The contents of this file are subject to the terms of the
5*16d86563SAlexander Pyhalov * Common Development and Distribution License (the "License").
6*16d86563SAlexander Pyhalov * You may not use this file except in compliance with the License.
7*16d86563SAlexander Pyhalov *
8*16d86563SAlexander Pyhalov * You can obtain a copy of the license at src/OPENSOLARIS.LICENSE
9*16d86563SAlexander Pyhalov * or http://www.opensolaris.org/os/licensing.
10*16d86563SAlexander Pyhalov * See the License for the specific language governing permissions
11*16d86563SAlexander Pyhalov * and limitations under the License.
12*16d86563SAlexander Pyhalov *
13*16d86563SAlexander Pyhalov * When distributing Covered Code, include this CDDL HEADER in each
14*16d86563SAlexander Pyhalov * file and include the License file at src/OPENSOLARIS.LICENSE.
15*16d86563SAlexander Pyhalov * If applicable, add the following below this CDDL HEADER, with the
16*16d86563SAlexander Pyhalov * fields enclosed by brackets "[]" replaced with your own identifying
17*16d86563SAlexander Pyhalov * information: Portions Copyright [yyyy] [name of copyright owner]
18*16d86563SAlexander Pyhalov *
19*16d86563SAlexander Pyhalov * CDDL HEADER END
20*16d86563SAlexander Pyhalov */
21*16d86563SAlexander Pyhalov /*
22*16d86563SAlexander Pyhalov * Copyright (c) 1995 by Sun Microsystems, Inc.
23*16d86563SAlexander Pyhalov * All Rights Reserved.
24*16d86563SAlexander Pyhalov */
25*16d86563SAlexander Pyhalov
26*16d86563SAlexander Pyhalov
27*16d86563SAlexander Pyhalov #include <stdio.h>
28*16d86563SAlexander Pyhalov #include <stdlib.h>
29*16d86563SAlexander Pyhalov #include <ctype.h>
30*16d86563SAlexander Pyhalov #include <string.h>
31*16d86563SAlexander Pyhalov #include "kdefs.h"
32*16d86563SAlexander Pyhalov #include <errno.h>
33*16d86563SAlexander Pyhalov #include "ktable.h"
34*16d86563SAlexander Pyhalov #include "nbyte_euc.h"
35*16d86563SAlexander Pyhalov
36*16d86563SAlexander Pyhalov extern KCHAR getc_12();
37*16d86563SAlexander Pyhalov extern KCHAR packtocomp();
38*16d86563SAlexander Pyhalov
39*16d86563SAlexander Pyhalov struct _cv_state {
40*16d86563SAlexander Pyhalov char temp_ibuf[5];
41*16d86563SAlexander Pyhalov int ibuf_left;
42*16d86563SAlexander Pyhalov int istart, iend;
43*16d86563SAlexander Pyhalov char temp_obuf[1];
44*16d86563SAlexander Pyhalov int flush_obuf;
45*16d86563SAlexander Pyhalov };
46*16d86563SAlexander Pyhalov
47*16d86563SAlexander Pyhalov int is_SI(char **inbuf, size_t *inbytesleft, struct _cv_state *st);
48*16d86563SAlexander Pyhalov
49*16d86563SAlexander Pyhalov static int _johap_to_wansung(unsigned short* wcode, unsigned short code);
50*16d86563SAlexander Pyhalov
51*16d86563SAlexander Pyhalov /**** _ I C V _ O P E N ****/
52*16d86563SAlexander Pyhalov
_icv_open()53*16d86563SAlexander Pyhalov void* _icv_open()
54*16d86563SAlexander Pyhalov {
55*16d86563SAlexander Pyhalov _conv_desc* cd = (_conv_desc*)malloc(sizeof(_conv_desc));
56*16d86563SAlexander Pyhalov
57*16d86563SAlexander Pyhalov if (cd == (_conv_desc*)NULL)
58*16d86563SAlexander Pyhalov {
59*16d86563SAlexander Pyhalov errno = ENOMEM;
60*16d86563SAlexander Pyhalov return((void*)-1);
61*16d86563SAlexander Pyhalov }
62*16d86563SAlexander Pyhalov
63*16d86563SAlexander Pyhalov cd->cur_stat = 1;
64*16d86563SAlexander Pyhalov cd->hbuf[1] = cd->hbuf[2] = cd->hbuf[3] = cd->hbuf[4] = '\0';
65*16d86563SAlexander Pyhalov cd->cur_act = 0;
66*16d86563SAlexander Pyhalov
67*16d86563SAlexander Pyhalov return((void*)cd);
68*16d86563SAlexander Pyhalov } /* end of int _icv_open(). */
69*16d86563SAlexander Pyhalov
70*16d86563SAlexander Pyhalov
71*16d86563SAlexander Pyhalov /**** _ I C V _ C L O S E ****/
72*16d86563SAlexander Pyhalov
_icv_close(_conv_desc * cd)73*16d86563SAlexander Pyhalov void _icv_close(_conv_desc* cd)
74*16d86563SAlexander Pyhalov {
75*16d86563SAlexander Pyhalov if (!cd)
76*16d86563SAlexander Pyhalov errno = EBADF;
77*16d86563SAlexander Pyhalov else
78*16d86563SAlexander Pyhalov free((void*)cd);
79*16d86563SAlexander Pyhalov } /* end of void _icv_close(_conv_desc*). */
80*16d86563SAlexander Pyhalov
81*16d86563SAlexander Pyhalov
82*16d86563SAlexander Pyhalov /**** _ I C V _ I C O N V ****/
83*16d86563SAlexander Pyhalov
_icv_iconv(_conv_desc * cd,char ** inbuf,size_t * inbufleft,char ** outbuf,size_t * outbufleft)84*16d86563SAlexander Pyhalov size_t _icv_iconv(_conv_desc* cd, char** inbuf, size_t* inbufleft,
85*16d86563SAlexander Pyhalov char** outbuf, size_t* outbufleft)
86*16d86563SAlexander Pyhalov {
87*16d86563SAlexander Pyhalov size_t ret_val = 0;
88*16d86563SAlexander Pyhalov unsigned char* ib;
89*16d86563SAlexander Pyhalov unsigned char* ob;
90*16d86563SAlexander Pyhalov unsigned char* ibtail;
91*16d86563SAlexander Pyhalov unsigned char* obtail;
92*16d86563SAlexander Pyhalov
93*16d86563SAlexander Pyhalov if (!cd)
94*16d86563SAlexander Pyhalov {
95*16d86563SAlexander Pyhalov errno = EBADF;
96*16d86563SAlexander Pyhalov return((size_t)-1);
97*16d86563SAlexander Pyhalov }
98*16d86563SAlexander Pyhalov
99*16d86563SAlexander Pyhalov if (!inbuf || !(*inbuf))
100*16d86563SAlexander Pyhalov {
101*16d86563SAlexander Pyhalov cd->cur_stat = 1;
102*16d86563SAlexander Pyhalov cd->hbuf[1] = cd->hbuf[2] = cd->hbuf[3] = cd->hbuf[4] = '\0';
103*16d86563SAlexander Pyhalov cd->cur_act = 0;
104*16d86563SAlexander Pyhalov return((size_t)0);
105*16d86563SAlexander Pyhalov }
106*16d86563SAlexander Pyhalov
107*16d86563SAlexander Pyhalov ib = (unsigned char*)*inbuf;
108*16d86563SAlexander Pyhalov ob = (unsigned char*)*outbuf;
109*16d86563SAlexander Pyhalov ibtail = ib + *inbufleft;
110*16d86563SAlexander Pyhalov obtail = ob + *outbufleft;
111*16d86563SAlexander Pyhalov
112*16d86563SAlexander Pyhalov while (ib < ibtail)
113*16d86563SAlexander Pyhalov {
114*16d86563SAlexander Pyhalov int cur_input, action, state;
115*16d86563SAlexander Pyhalov char result;
116*16d86563SAlexander Pyhalov int input_conv(char);
117*16d86563SAlexander Pyhalov unsigned short make_johap_code(int, char*);
118*16d86563SAlexander Pyhalov int _johap_to_wansung(unsigned short*,
119*16d86563SAlexander Pyhalov unsigned short);
120*16d86563SAlexander Pyhalov
121*16d86563SAlexander Pyhalov cur_input = input_conv(*ib);
122*16d86563SAlexander Pyhalov action = next_act[cd->cur_stat][cur_input];
123*16d86563SAlexander Pyhalov state = next_stat[cd->cur_stat][cur_input];
124*16d86563SAlexander Pyhalov if (action == 4)
125*16d86563SAlexander Pyhalov {
126*16d86563SAlexander Pyhalov if (ob >= obtail)
127*16d86563SAlexander Pyhalov {
128*16d86563SAlexander Pyhalov errno = E2BIG;
129*16d86563SAlexander Pyhalov ret_val = (size_t)-1;
130*16d86563SAlexander Pyhalov break;
131*16d86563SAlexander Pyhalov }
132*16d86563SAlexander Pyhalov *ob++ = *ib;
133*16d86563SAlexander Pyhalov }
134*16d86563SAlexander Pyhalov else if (action >= 5 && action <= 8)
135*16d86563SAlexander Pyhalov cd->hbuf[action - 4] = *ib;
136*16d86563SAlexander Pyhalov else if (action == 9)
137*16d86563SAlexander Pyhalov {
138*16d86563SAlexander Pyhalov ADD_CONVERTED_CODE(0, 0);
139*16d86563SAlexander Pyhalov cd->hbuf[1] = *ib;
140*16d86563SAlexander Pyhalov }
141*16d86563SAlexander Pyhalov else if (action == 10)
142*16d86563SAlexander Pyhalov {
143*16d86563SAlexander Pyhalov ADD_CONVERTED_CODE(0, 0);
144*16d86563SAlexander Pyhalov cd->hbuf[2] = *ib;
145*16d86563SAlexander Pyhalov ADD_CONVERTED_CODE(0, 0);
146*16d86563SAlexander Pyhalov }
147*16d86563SAlexander Pyhalov else if (action == 11 || action == 12)
148*16d86563SAlexander Pyhalov {
149*16d86563SAlexander Pyhalov ADD_CONVERTED_CODE(0, 0);
150*16d86563SAlexander Pyhalov }
151*16d86563SAlexander Pyhalov else if (action == 13)
152*16d86563SAlexander Pyhalov {
153*16d86563SAlexander Pyhalov ADD_CONVERTED_CODE(0, 1);
154*16d86563SAlexander Pyhalov *ob++ = *ib;
155*16d86563SAlexander Pyhalov }
156*16d86563SAlexander Pyhalov else if (action == 14)
157*16d86563SAlexander Pyhalov {
158*16d86563SAlexander Pyhalov register char c1 = cd->hbuf[2], c2 = *ib;
159*16d86563SAlexander Pyhalov
160*16d86563SAlexander Pyhalov if (c1 == 'l' && c2 == 'b') /* _|_ && |- */
161*16d86563SAlexander Pyhalov cd->hbuf[2] = 'm';
162*16d86563SAlexander Pyhalov else if (c1 == 'l' && c2 == 'c') /* _|_ && H */
163*16d86563SAlexander Pyhalov cd->hbuf[2] = 'n';
164*16d86563SAlexander Pyhalov else if (c1 == 'l' && c2 == '|') /* _|_ && | */
165*16d86563SAlexander Pyhalov cd->hbuf[2] = 'o';
166*16d86563SAlexander Pyhalov else if (c1 == 's' && c2 == 'f') /* T && -| */
167*16d86563SAlexander Pyhalov cd->hbuf[2] = 't';
168*16d86563SAlexander Pyhalov else if (c1 == 's' && c2 == 'g') /* T && -|| */
169*16d86563SAlexander Pyhalov cd->hbuf[2] = 'u';
170*16d86563SAlexander Pyhalov else if (c1 == 's' && c2 == '|') /* T && | */
171*16d86563SAlexander Pyhalov cd->hbuf[2] = 'v';
172*16d86563SAlexander Pyhalov else if (c1 == 'z' && c2 == '|') /* __ && | */
173*16d86563SAlexander Pyhalov cd->hbuf[2] = '{';
174*16d86563SAlexander Pyhalov else
175*16d86563SAlexander Pyhalov cd->hbuf[2] = *ib; /* Just in case. */
176*16d86563SAlexander Pyhalov }
177*16d86563SAlexander Pyhalov else if (action == 15)
178*16d86563SAlexander Pyhalov {
179*16d86563SAlexander Pyhalov cd->hbuf[2] = *ib;
180*16d86563SAlexander Pyhalov ADD_CONVERTED_CODE(0, 0);
181*16d86563SAlexander Pyhalov }
182*16d86563SAlexander Pyhalov else if (action == 16)
183*16d86563SAlexander Pyhalov {
184*16d86563SAlexander Pyhalov ADD_CONVERTED_CODE(0, 0);
185*16d86563SAlexander Pyhalov }
186*16d86563SAlexander Pyhalov else if (action == 17)
187*16d86563SAlexander Pyhalov {
188*16d86563SAlexander Pyhalov ADD_CONVERTED_CODE(1, 0);
189*16d86563SAlexander Pyhalov cd->hbuf[2] = *ib;
190*16d86563SAlexander Pyhalov }
191*16d86563SAlexander Pyhalov cd->cur_act = action;
192*16d86563SAlexander Pyhalov cd->cur_stat = state;
193*16d86563SAlexander Pyhalov ib++;
194*16d86563SAlexander Pyhalov }
195*16d86563SAlexander Pyhalov
196*16d86563SAlexander Pyhalov *inbuf = (char*)ib;
197*16d86563SAlexander Pyhalov *inbufleft = ibtail - ib;
198*16d86563SAlexander Pyhalov *outbuf = (char*)ob;
199*16d86563SAlexander Pyhalov *outbufleft = obtail - ob;
200*16d86563SAlexander Pyhalov
201*16d86563SAlexander Pyhalov return(ret_val);
202*16d86563SAlexander Pyhalov } /* end of size_t _icv_iconv(_conv_desc*, char**, size_t*, char**, size_t*).*/
203*16d86563SAlexander Pyhalov
204*16d86563SAlexander Pyhalov
205*16d86563SAlexander Pyhalov /**** I N P U T _ C O N V ****/
206*16d86563SAlexander Pyhalov
input_conv(char c)207*16d86563SAlexander Pyhalov int input_conv(char c)
208*16d86563SAlexander Pyhalov {
209*16d86563SAlexander Pyhalov switch (c)
210*16d86563SAlexander Pyhalov {
211*16d86563SAlexander Pyhalov case 'H': /* dd */
212*16d86563SAlexander Pyhalov case 'S': /* bb */
213*16d86563SAlexander Pyhalov case 'Y': /* jj */
214*16d86563SAlexander Pyhalov return(1);
215*16d86563SAlexander Pyhalov
216*16d86563SAlexander Pyhalov case 'A': /* g */
217*16d86563SAlexander Pyhalov return(2);
218*16d86563SAlexander Pyhalov
219*16d86563SAlexander Pyhalov case 'D': /* n */
220*16d86563SAlexander Pyhalov return(3);
221*16d86563SAlexander Pyhalov
222*16d86563SAlexander Pyhalov case 'I': /* r */
223*16d86563SAlexander Pyhalov return(4);
224*16d86563SAlexander Pyhalov
225*16d86563SAlexander Pyhalov case 'R': /* b */
226*16d86563SAlexander Pyhalov return(5);
227*16d86563SAlexander Pyhalov
228*16d86563SAlexander Pyhalov case 'B': /* gg */
229*16d86563SAlexander Pyhalov case 'G': /* d */
230*16d86563SAlexander Pyhalov case 'V': /* ss */
231*16d86563SAlexander Pyhalov case 'W': /* o */
232*16d86563SAlexander Pyhalov case 'Z': /* ch */
233*16d86563SAlexander Pyhalov case '[': /* k */
234*16d86563SAlexander Pyhalov return(6);
235*16d86563SAlexander Pyhalov
236*16d86563SAlexander Pyhalov case 'U': /* s */
237*16d86563SAlexander Pyhalov return(7);
238*16d86563SAlexander Pyhalov
239*16d86563SAlexander Pyhalov case 'X': /* j */
240*16d86563SAlexander Pyhalov return(8);
241*16d86563SAlexander Pyhalov
242*16d86563SAlexander Pyhalov case '^': /* h */
243*16d86563SAlexander Pyhalov return(9);
244*16d86563SAlexander Pyhalov
245*16d86563SAlexander Pyhalov case 'Q': /* m */
246*16d86563SAlexander Pyhalov case ']': /* p */
247*16d86563SAlexander Pyhalov case '\\': /* t */
248*16d86563SAlexander Pyhalov return(10);
249*16d86563SAlexander Pyhalov
250*16d86563SAlexander Pyhalov case 'k': /* =|| */
251*16d86563SAlexander Pyhalov case 'd': /* |= */
252*16d86563SAlexander Pyhalov case 'e': /* |=| */
253*16d86563SAlexander Pyhalov case 'j': /* =| */
254*16d86563SAlexander Pyhalov case 'r': /* _||_ */
255*16d86563SAlexander Pyhalov case 'w': /* TT */
256*16d86563SAlexander Pyhalov return(11);
257*16d86563SAlexander Pyhalov
258*16d86563SAlexander Pyhalov case 'b': /* |- */
259*16d86563SAlexander Pyhalov case 'c': /* H */
260*16d86563SAlexander Pyhalov return(12);
261*16d86563SAlexander Pyhalov
262*16d86563SAlexander Pyhalov case 'f': /* -| */
263*16d86563SAlexander Pyhalov case 'g': /* -|| */
264*16d86563SAlexander Pyhalov return(13);
265*16d86563SAlexander Pyhalov
266*16d86563SAlexander Pyhalov case '|': /* | */
267*16d86563SAlexander Pyhalov return(14);
268*16d86563SAlexander Pyhalov
269*16d86563SAlexander Pyhalov case 'l': /* _|_ */
270*16d86563SAlexander Pyhalov return(15);
271*16d86563SAlexander Pyhalov
272*16d86563SAlexander Pyhalov case 's': /* T */
273*16d86563SAlexander Pyhalov return(16);
274*16d86563SAlexander Pyhalov
275*16d86563SAlexander Pyhalov case 'z': /* __ */
276*16d86563SAlexander Pyhalov return(17);
277*16d86563SAlexander Pyhalov
278*16d86563SAlexander Pyhalov case '\016':
279*16d86563SAlexander Pyhalov return(18);
280*16d86563SAlexander Pyhalov
281*16d86563SAlexander Pyhalov case '\017':
282*16d86563SAlexander Pyhalov case '\024':
283*16d86563SAlexander Pyhalov return(19);
284*16d86563SAlexander Pyhalov
285*16d86563SAlexander Pyhalov default:
286*16d86563SAlexander Pyhalov return(20);
287*16d86563SAlexander Pyhalov }
288*16d86563SAlexander Pyhalov } /* end of int input_conv(char). */
289*16d86563SAlexander Pyhalov
290*16d86563SAlexander Pyhalov
291*16d86563SAlexander Pyhalov /**** M A K E _ J O H A P _ C O D E ****/
292*16d86563SAlexander Pyhalov
make_johap_code(int n,char * temp)293*16d86563SAlexander Pyhalov unsigned short make_johap_code(int n, char* temp)
294*16d86563SAlexander Pyhalov {
295*16d86563SAlexander Pyhalov register unsigned short code = 0;
296*16d86563SAlexander Pyhalov char save ='\0';
297*16d86563SAlexander Pyhalov
298*16d86563SAlexander Pyhalov if (n == 1)
299*16d86563SAlexander Pyhalov {
300*16d86563SAlexander Pyhalov if (temp[4] == '\0')
301*16d86563SAlexander Pyhalov {
302*16d86563SAlexander Pyhalov save = temp[3];
303*16d86563SAlexander Pyhalov temp[3] = '\0';
304*16d86563SAlexander Pyhalov }
305*16d86563SAlexander Pyhalov else
306*16d86563SAlexander Pyhalov {
307*16d86563SAlexander Pyhalov save = temp[4];
308*16d86563SAlexander Pyhalov temp[4] = '\0';
309*16d86563SAlexander Pyhalov }
310*16d86563SAlexander Pyhalov }
311*16d86563SAlexander Pyhalov
312*16d86563SAlexander Pyhalov code = (temp[1] >= 'A' && temp[1] <= '^') ?
313*16d86563SAlexander Pyhalov (unsigned short)X32_19[temp[1] - '@']
314*16d86563SAlexander Pyhalov : (unsigned short)9;
315*16d86563SAlexander Pyhalov code = (code << 5) | (unsigned short)((temp[2] >= 'b' &&
316*16d86563SAlexander Pyhalov temp[2] <= '|') ? X32_21[temp[2] - '`']
317*16d86563SAlexander Pyhalov : 1);
318*16d86563SAlexander Pyhalov code = (code << 5) | (unsigned short)((temp[3] >= 'A' &&
319*16d86563SAlexander Pyhalov temp[3] <= '^') ? X32_28[temp[3] - '@']
320*16d86563SAlexander Pyhalov : 1);
321*16d86563SAlexander Pyhalov
322*16d86563SAlexander Pyhalov if (temp[4] >= 'A')
323*16d86563SAlexander Pyhalov {
324*16d86563SAlexander Pyhalov if (temp[3] == 'A' && temp[4] == 'U') /* gs */
325*16d86563SAlexander Pyhalov code += 2;
326*16d86563SAlexander Pyhalov else if (temp[3] == 'D' && temp[4] == 'X') /* nj */
327*16d86563SAlexander Pyhalov code++;
328*16d86563SAlexander Pyhalov else if (temp[3] == 'D' && temp[4] == '^') /* nh */
329*16d86563SAlexander Pyhalov code += 2;
330*16d86563SAlexander Pyhalov else if (temp[3] == 'I' && temp[4] == 'A') /* rg */
331*16d86563SAlexander Pyhalov code++;
332*16d86563SAlexander Pyhalov else if (temp[3] == 'I' && temp[4] == 'Q') /* rm */
333*16d86563SAlexander Pyhalov code += 2;
334*16d86563SAlexander Pyhalov else if (temp[3] == 'I' && temp[4] == 'R') /* rb */
335*16d86563SAlexander Pyhalov code += 3;
336*16d86563SAlexander Pyhalov else if (temp[3] == 'I' && temp[4] == 'U') /* rs */
337*16d86563SAlexander Pyhalov code += 4;
338*16d86563SAlexander Pyhalov else if (temp[3] == 'I' && temp[4] == '\\') /* rt */
339*16d86563SAlexander Pyhalov code += 5;
340*16d86563SAlexander Pyhalov else if (temp[3] == 'I' && temp[4] == ']') /* rp */
341*16d86563SAlexander Pyhalov code += 6;
342*16d86563SAlexander Pyhalov else if (temp[3] == 'I' && temp[4] == '^') /* rh */
343*16d86563SAlexander Pyhalov code += 7;
344*16d86563SAlexander Pyhalov else if (temp[3] == 'R' && temp[4] == 'U') /* bs */
345*16d86563SAlexander Pyhalov code++;
346*16d86563SAlexander Pyhalov else if (temp[3] == 'U' && temp[4] == 'U') /* ss */
347*16d86563SAlexander Pyhalov code++;
348*16d86563SAlexander Pyhalov }
349*16d86563SAlexander Pyhalov
350*16d86563SAlexander Pyhalov temp[1] = (n == 1) ? save : '\0';
351*16d86563SAlexander Pyhalov temp[2] = temp[3] = temp[4] = '\0';
352*16d86563SAlexander Pyhalov return(code | 0x8000);
353*16d86563SAlexander Pyhalov } /* end of unsigned short make_johap_code(int, char*). */
354*16d86563SAlexander Pyhalov
355*16d86563SAlexander Pyhalov
356*16d86563SAlexander Pyhalov /**** _ J O H A P _ T O _ W A N S U N G ****/
357*16d86563SAlexander Pyhalov
_johap_to_wansung(unsigned short * wcode,unsigned short code)358*16d86563SAlexander Pyhalov static int _johap_to_wansung(unsigned short* wcode, unsigned short code)
359*16d86563SAlexander Pyhalov {
360*16d86563SAlexander Pyhalov register unsigned short i;
361*16d86563SAlexander Pyhalov unsigned short ci, v, cf;
362*16d86563SAlexander Pyhalov unsigned short mask, disp;
363*16d86563SAlexander Pyhalov long cfbit;
364*16d86563SAlexander Pyhalov
365*16d86563SAlexander Pyhalov *wcode = 0;
366*16d86563SAlexander Pyhalov ci = CHOSUNG(code) - 0x0A;
367*16d86563SAlexander Pyhalov v = JOONGSUNG(code) - ((unsigned short)JOONGSUNG(code) / 4 + 2);
368*16d86563SAlexander Pyhalov cf = JONGSUNG(code);
369*16d86563SAlexander Pyhalov
370*16d86563SAlexander Pyhalov if (JOONGSUNG(code) - ((unsigned short)JOONGSUNG(code) / 4 + 2) < 0)
371*16d86563SAlexander Pyhalov *wcode = 0xA4A0 + Y19_32[ci + 1];
372*16d86563SAlexander Pyhalov else if (CHOSUNG(code) - 0x0A < 0)
373*16d86563SAlexander Pyhalov {
374*16d86563SAlexander Pyhalov if (cf <= 1)
375*16d86563SAlexander Pyhalov *wcode = 0xA4BF + v;
376*16d86563SAlexander Pyhalov else
377*16d86563SAlexander Pyhalov return(FAILED);
378*16d86563SAlexander Pyhalov }
379*16d86563SAlexander Pyhalov else
380*16d86563SAlexander Pyhalov {
381*16d86563SAlexander Pyhalov if (cf < 2)
382*16d86563SAlexander Pyhalov cf = 1;
383*16d86563SAlexander Pyhalov
384*16d86563SAlexander Pyhalov cfbit = cmp_bitmap[ci][v];
385*16d86563SAlexander Pyhalov for (disp = 0, i = 0; i < cf; i++)
386*16d86563SAlexander Pyhalov {
387*16d86563SAlexander Pyhalov if (cfbit & BIT_MASK)
388*16d86563SAlexander Pyhalov disp++;
389*16d86563SAlexander Pyhalov cfbit >>= 1;
390*16d86563SAlexander Pyhalov }
391*16d86563SAlexander Pyhalov if (!(cfbit & BIT_MASK))
392*16d86563SAlexander Pyhalov return(FAILED);
393*16d86563SAlexander Pyhalov
394*16d86563SAlexander Pyhalov *wcode = cmp_srchtbl[ci][v] + disp;
395*16d86563SAlexander Pyhalov mask = cmp_srchtbl[ci][v] & 0xFF;
396*16d86563SAlexander Pyhalov
397*16d86563SAlexander Pyhalov *wcode += (((short)(mask + disp) > 0xFE) ? SKIP : 0);
398*16d86563SAlexander Pyhalov }
399*16d86563SAlexander Pyhalov
400*16d86563SAlexander Pyhalov return(HANGUL);
401*16d86563SAlexander Pyhalov } /* end of unsigned short _johap_to_wansung(unsigned short, unsigned short,
402*16d86563SAlexander Pyhalov * unsigned short). */
403*16d86563SAlexander Pyhalov
404*16d86563SAlexander Pyhalov void *
_cv_open()405*16d86563SAlexander Pyhalov _cv_open()
406*16d86563SAlexander Pyhalov {
407*16d86563SAlexander Pyhalov struct _cv_state *st;
408*16d86563SAlexander Pyhalov
409*16d86563SAlexander Pyhalov if ((st = (struct _cv_state *)malloc(sizeof(struct _cv_state))) == NULL)
410*16d86563SAlexander Pyhalov return ((void *)-1);
411*16d86563SAlexander Pyhalov
412*16d86563SAlexander Pyhalov st->ibuf_left = 0;
413*16d86563SAlexander Pyhalov st->istart = 0;
414*16d86563SAlexander Pyhalov st->iend = 0;
415*16d86563SAlexander Pyhalov st->flush_obuf = 0;
416*16d86563SAlexander Pyhalov
417*16d86563SAlexander Pyhalov return (st);
418*16d86563SAlexander Pyhalov }
419*16d86563SAlexander Pyhalov
420*16d86563SAlexander Pyhalov void
_cv_close(st)421*16d86563SAlexander Pyhalov _cv_close(st)
422*16d86563SAlexander Pyhalov struct _cv_state *st;
423*16d86563SAlexander Pyhalov {
424*16d86563SAlexander Pyhalov free(st);
425*16d86563SAlexander Pyhalov }
426*16d86563SAlexander Pyhalov
427*16d86563SAlexander Pyhalov size_t
_cv_enconv(st,inbuf,inbytesleft,outbuf,outbytesleft)428*16d86563SAlexander Pyhalov _cv_enconv(st, inbuf, inbytesleft, outbuf, outbytesleft)
429*16d86563SAlexander Pyhalov struct _cv_state *st;
430*16d86563SAlexander Pyhalov char **inbuf;
431*16d86563SAlexander Pyhalov size_t*inbytesleft;
432*16d86563SAlexander Pyhalov char **outbuf;
433*16d86563SAlexander Pyhalov size_t*outbytesleft;
434*16d86563SAlexander Pyhalov {
435*16d86563SAlexander Pyhalov unsigned short code;
436*16d86563SAlexander Pyhalov
437*16d86563SAlexander Pyhalov if (inbuf == NULL || *inbuf == NULL) { /* Reset request. */
438*16d86563SAlexander Pyhalov st->ibuf_left = 0;
439*16d86563SAlexander Pyhalov st->istart = 0;
440*16d86563SAlexander Pyhalov st->iend = 0;
441*16d86563SAlexander Pyhalov st->flush_obuf = 0;
442*16d86563SAlexander Pyhalov return (0);
443*16d86563SAlexander Pyhalov }
444*16d86563SAlexander Pyhalov
445*16d86563SAlexander Pyhalov if (st->flush_obuf) {
446*16d86563SAlexander Pyhalov **outbuf = st->temp_obuf[0];
447*16d86563SAlexander Pyhalov (*outbuf)++;
448*16d86563SAlexander Pyhalov (*outbytesleft)--;
449*16d86563SAlexander Pyhalov st->flush_obuf = 0;
450*16d86563SAlexander Pyhalov if (*outbytesleft <= 0) {
451*16d86563SAlexander Pyhalov return(*inbytesleft);
452*16d86563SAlexander Pyhalov }
453*16d86563SAlexander Pyhalov }
454*16d86563SAlexander Pyhalov
455*16d86563SAlexander Pyhalov while (*inbytesleft > 0 && *outbytesleft > 0) {
456*16d86563SAlexander Pyhalov if (!is_SI(inbuf, inbytesleft, st))
457*16d86563SAlexander Pyhalov break;
458*16d86563SAlexander Pyhalov
459*16d86563SAlexander Pyhalov code = getc_12(inbuf, inbytesleft, st);
460*16d86563SAlexander Pyhalov
461*16d86563SAlexander Pyhalov if (code&0x8000) {
462*16d86563SAlexander Pyhalov code = packtocomp(code);
463*16d86563SAlexander Pyhalov **outbuf = code>>8;
464*16d86563SAlexander Pyhalov (*outbuf)++, (*outbytesleft)--;
465*16d86563SAlexander Pyhalov if (*outbytesleft <= 0) {
466*16d86563SAlexander Pyhalov st->flush_obuf = 1;
467*16d86563SAlexander Pyhalov st->temp_obuf[0] = code&0xFF;
468*16d86563SAlexander Pyhalov } else {
469*16d86563SAlexander Pyhalov **outbuf = code&0xFF;
470*16d86563SAlexander Pyhalov (*outbuf)++, (*outbytesleft)--;
471*16d86563SAlexander Pyhalov }
472*16d86563SAlexander Pyhalov } else {
473*16d86563SAlexander Pyhalov **outbuf = code&0xFF;
474*16d86563SAlexander Pyhalov (*outbuf)++, (*outbytesleft)--;
475*16d86563SAlexander Pyhalov }
476*16d86563SAlexander Pyhalov }
477*16d86563SAlexander Pyhalov return (*inbytesleft);
478*16d86563SAlexander Pyhalov }
479*16d86563SAlexander Pyhalov
480*16d86563SAlexander Pyhalov int
is_SI(inbuf,inbytesleft,st)481*16d86563SAlexander Pyhalov is_SI(inbuf, inbytesleft, st)
482*16d86563SAlexander Pyhalov char **inbuf;
483*16d86563SAlexander Pyhalov size_t *inbytesleft;
484*16d86563SAlexander Pyhalov struct _cv_state *st;
485*16d86563SAlexander Pyhalov {
486*16d86563SAlexander Pyhalov size_t i, x;
487*16d86563SAlexander Pyhalov char *buf;
488*16d86563SAlexander Pyhalov int SO_found = 0, SI_found = 0;
489*16d86563SAlexander Pyhalov
490*16d86563SAlexander Pyhalov buf = *inbuf;
491*16d86563SAlexander Pyhalov for (i = *inbytesleft; i > 0; i--) {
492*16d86563SAlexander Pyhalov /* if SO is found */
493*16d86563SAlexander Pyhalov if (*buf == 0x0e) {
494*16d86563SAlexander Pyhalov SO_found = 1;
495*16d86563SAlexander Pyhalov break;
496*16d86563SAlexander Pyhalov } else
497*16d86563SAlexander Pyhalov buf++;
498*16d86563SAlexander Pyhalov }
499*16d86563SAlexander Pyhalov
500*16d86563SAlexander Pyhalov if (SO_found || st->ibuf_left) {
501*16d86563SAlexander Pyhalov while (i > 0) {
502*16d86563SAlexander Pyhalov i--;
503*16d86563SAlexander Pyhalov /* if SI is found */
504*16d86563SAlexander Pyhalov if (*buf == 0x0f) {
505*16d86563SAlexander Pyhalov SI_found = 1;
506*16d86563SAlexander Pyhalov break;
507*16d86563SAlexander Pyhalov } else
508*16d86563SAlexander Pyhalov buf++;
509*16d86563SAlexander Pyhalov }
510*16d86563SAlexander Pyhalov }
511*16d86563SAlexander Pyhalov
512*16d86563SAlexander Pyhalov
513*16d86563SAlexander Pyhalov /* if input buffer is not complete, i.e., last SI is not there */
514*16d86563SAlexander Pyhalov /* NEED to check for size of left buffer vs. temp_ibuf[] size */
515*16d86563SAlexander Pyhalov if ((SO_found && !SI_found) || (st->ibuf_left && !SI_found)) {
516*16d86563SAlexander Pyhalov st->ibuf_left = 1;
517*16d86563SAlexander Pyhalov x = *inbytesleft;
518*16d86563SAlexander Pyhalov for (i = 0; i < x; i++) {
519*16d86563SAlexander Pyhalov st->temp_ibuf[st->iend] = **inbuf;
520*16d86563SAlexander Pyhalov st->iend++;
521*16d86563SAlexander Pyhalov (*inbuf)++;
522*16d86563SAlexander Pyhalov (*inbytesleft)--;
523*16d86563SAlexander Pyhalov }
524*16d86563SAlexander Pyhalov return(0);
525*16d86563SAlexander Pyhalov }
526*16d86563SAlexander Pyhalov return(1);
527*16d86563SAlexander Pyhalov }
528*16d86563SAlexander Pyhalov
529*16d86563SAlexander Pyhalov #ifdef TEST
530*16d86563SAlexander Pyhalov
531*16d86563SAlexander Pyhalov /* test case 1 */
532*16d86563SAlexander Pyhalov char ibuf1[] = {0x0e, 0x57, 0x6c, 0x0f, 0x0e, 0x55, 0x67, 0x0f, 0x0e, 0x5a, 0x62, 0x57, 0x0f};
533*16d86563SAlexander Pyhalov char obuf1[20];
534*16d86563SAlexander Pyhalov
535*16d86563SAlexander Pyhalov /* test case 2 */
536*16d86563SAlexander Pyhalov char ibuf2[] = {0x0e, 0x57, 0x6c, 0x0f, 0x0e, 0x55};
537*16d86563SAlexander Pyhalov char ibuf21[] = {0x67, 0x0f, 0x0e, 0x5a, 0x62, 0x57, 0x0f};
538*16d86563SAlexander Pyhalov char obuf2[20];
539*16d86563SAlexander Pyhalov
540*16d86563SAlexander Pyhalov /* test case 3 */
541*16d86563SAlexander Pyhalov char ibuf3[] = {0x0e, 0x57, 0x6c, 0x0f, 0x0e, 0x55, 0x67, 0x0f, 0x0e, 0x5a, 0x62, 0x57, 0x0f};
542*16d86563SAlexander Pyhalov char obuf3[4];
543*16d86563SAlexander Pyhalov
544*16d86563SAlexander Pyhalov /* test case 3+ */
545*16d86563SAlexander Pyhalov char obuf31[5];
546*16d86563SAlexander Pyhalov
main()547*16d86563SAlexander Pyhalov main()
548*16d86563SAlexander Pyhalov {
549*16d86563SAlexander Pyhalov int i;
550*16d86563SAlexander Pyhalov struct _cv_state *st;
551*16d86563SAlexander Pyhalov size_t oleft, ileft;
552*16d86563SAlexander Pyhalov char *ip1 = &ibuf1[0], *op1 = &obuf1[0],
553*16d86563SAlexander Pyhalov *ip2 = &ibuf2[0], *ip21 = &ibuf21[0], *op2 = &obuf2[0],
554*16d86563SAlexander Pyhalov *ip3 = &ibuf3[0], *op3 = &obuf3[0];
555*16d86563SAlexander Pyhalov
556*16d86563SAlexander Pyhalov /****************************** test case 1 *************************/
557*16d86563SAlexander Pyhalov ileft = sizeof(ibuf1);
558*16d86563SAlexander Pyhalov oleft = sizeof(obuf1);
559*16d86563SAlexander Pyhalov
560*16d86563SAlexander Pyhalov st = _cv_open();
561*16d86563SAlexander Pyhalov
562*16d86563SAlexander Pyhalov printf("TEST 1\n INPUT BUFFER: ");
563*16d86563SAlexander Pyhalov for (i = 0; i < ileft ; i++) {
564*16d86563SAlexander Pyhalov printf("%x ", 0xff&ibuf1[i]);
565*16d86563SAlexander Pyhalov }
566*16d86563SAlexander Pyhalov printf("\n");
567*16d86563SAlexander Pyhalov printf("OUTPUT: return value %d ",
568*16d86563SAlexander Pyhalov _cv_enconv(st, &ip1, &ileft, &op1, &oleft));
569*16d86563SAlexander Pyhalov printf("ileft %d oleft %d\n", ileft, oleft);
570*16d86563SAlexander Pyhalov printf(" flush_obuf %d ibuf_left %d\n", st->flush_obuf,
571*16d86563SAlexander Pyhalov st->ibuf_left);
572*16d86563SAlexander Pyhalov printf("OUTPUT BUFFER: ");
573*16d86563SAlexander Pyhalov for (i = 0; i < (sizeof(obuf1) - oleft) ; i++) {
574*16d86563SAlexander Pyhalov printf("%x ", 0xff&obuf1[i]);
575*16d86563SAlexander Pyhalov }
576*16d86563SAlexander Pyhalov printf("\n\n\n");
577*16d86563SAlexander Pyhalov _cv_close(st);
578*16d86563SAlexander Pyhalov
579*16d86563SAlexander Pyhalov /************************ test case 2 ******************************/
580*16d86563SAlexander Pyhalov ileft = sizeof(ibuf2);
581*16d86563SAlexander Pyhalov oleft = sizeof(obuf2);
582*16d86563SAlexander Pyhalov
583*16d86563SAlexander Pyhalov st = _cv_open();
584*16d86563SAlexander Pyhalov
585*16d86563SAlexander Pyhalov printf("TEST 2\nINPUT BUFFER: ");
586*16d86563SAlexander Pyhalov for (i = 0; i < ileft ; i++) {
587*16d86563SAlexander Pyhalov printf("%x ", 0xff&ibuf2[i]);
588*16d86563SAlexander Pyhalov }
589*16d86563SAlexander Pyhalov printf("\n");
590*16d86563SAlexander Pyhalov printf("OUTPUT: return value %d ",
591*16d86563SAlexander Pyhalov _cv_enconv(st, &ip2, &ileft, &op2, &oleft));
592*16d86563SAlexander Pyhalov printf("ileft %d oleft %d\n", ileft, oleft);
593*16d86563SAlexander Pyhalov printf(" flush_obuf %d ibuf_left %d\n", st->flush_obuf,
594*16d86563SAlexander Pyhalov st->ibuf_left);
595*16d86563SAlexander Pyhalov printf("OUTPUT BUFFER: ");
596*16d86563SAlexander Pyhalov for (i = 0; i < (sizeof(obuf2) - oleft) ; i++) {
597*16d86563SAlexander Pyhalov printf("%x ", 0xff&obuf2[i]);
598*16d86563SAlexander Pyhalov }
599*16d86563SAlexander Pyhalov printf("\n\n");
600*16d86563SAlexander Pyhalov
601*16d86563SAlexander Pyhalov ileft = sizeof(ibuf21);
602*16d86563SAlexander Pyhalov oleft = sizeof(obuf2);
603*16d86563SAlexander Pyhalov op2 = &obuf2[0];
604*16d86563SAlexander Pyhalov printf("INPUT BUFFER: ");
605*16d86563SAlexander Pyhalov for (i = 0; i < ileft ; i++) {
606*16d86563SAlexander Pyhalov printf("%x ", 0xff&ibuf21[i]);
607*16d86563SAlexander Pyhalov }
608*16d86563SAlexander Pyhalov printf("\n");
609*16d86563SAlexander Pyhalov printf("OUTPUT: return value %d ",
610*16d86563SAlexander Pyhalov _cv_enconv(st, &ip21, &ileft, &op2, &oleft));
611*16d86563SAlexander Pyhalov printf("ileft %d oleft %d\n", ileft, oleft);
612*16d86563SAlexander Pyhalov printf(" flush_obuf %d ibuf_left %d\n", st->flush_obuf,
613*16d86563SAlexander Pyhalov st->ibuf_left);
614*16d86563SAlexander Pyhalov printf("OUTPUT BUFFER: ");
615*16d86563SAlexander Pyhalov for (i = 0; i < (sizeof(obuf2) - oleft) ; i++) {
616*16d86563SAlexander Pyhalov printf("%x ", 0xff&obuf2[i]);
617*16d86563SAlexander Pyhalov }
618*16d86563SAlexander Pyhalov printf("\n\n\n");
619*16d86563SAlexander Pyhalov _cv_close(st);
620*16d86563SAlexander Pyhalov
621*16d86563SAlexander Pyhalov /************************ test case 3 ******************************/
622*16d86563SAlexander Pyhalov ileft = sizeof(ibuf3);
623*16d86563SAlexander Pyhalov oleft = sizeof(obuf3);
624*16d86563SAlexander Pyhalov
625*16d86563SAlexander Pyhalov st = _cv_open();
626*16d86563SAlexander Pyhalov
627*16d86563SAlexander Pyhalov printf("TEST 3\nINPUT BUFFER: ");
628*16d86563SAlexander Pyhalov for (i = 0; i < ileft ; i++) {
629*16d86563SAlexander Pyhalov printf("%x ", 0xff&ibuf3[i]);
630*16d86563SAlexander Pyhalov }
631*16d86563SAlexander Pyhalov printf("\n");
632*16d86563SAlexander Pyhalov printf("OUTPUT: return value %d ",
633*16d86563SAlexander Pyhalov _cv_enconv(st, &ip3, &ileft, &op3, &oleft));
634*16d86563SAlexander Pyhalov printf("ileft %d oleft %d\n", ileft, oleft);
635*16d86563SAlexander Pyhalov printf(" flush_obuf %d ibuf_left %d\n", st->flush_obuf,
636*16d86563SAlexander Pyhalov st->ibuf_left);
637*16d86563SAlexander Pyhalov printf(" strat_cnt %d end_cnt %d\n", st->istart,
638*16d86563SAlexander Pyhalov st->iend);
639*16d86563SAlexander Pyhalov printf("OUTPUT BUFFER: ");
640*16d86563SAlexander Pyhalov for (i = 0; i < (sizeof(obuf3) - oleft) ; i++) {
641*16d86563SAlexander Pyhalov printf("%x ", 0xff&obuf3[i]);
642*16d86563SAlexander Pyhalov }
643*16d86563SAlexander Pyhalov printf("\n\n");
644*16d86563SAlexander Pyhalov
645*16d86563SAlexander Pyhalov op3 = &obuf3[0];
646*16d86563SAlexander Pyhalov oleft = sizeof(obuf3);
647*16d86563SAlexander Pyhalov printf("OUTPUT: return value %d ",
648*16d86563SAlexander Pyhalov _cv_enconv(st, &ip3, &ileft, &op3, &oleft));
649*16d86563SAlexander Pyhalov printf("ileft %d oleft %d\n", ileft, oleft);
650*16d86563SAlexander Pyhalov printf(" flush_obuf %d ibuf_left %d\n", st->flush_obuf,
651*16d86563SAlexander Pyhalov st->ibuf_left);
652*16d86563SAlexander Pyhalov printf(" strat_cnt %d end_cnt %d\n", st->istart,
653*16d86563SAlexander Pyhalov st->iend);
654*16d86563SAlexander Pyhalov printf("OUTPUT BUFFER: ");
655*16d86563SAlexander Pyhalov for (i = 0; i < (sizeof(obuf3) - oleft) ; i++) {
656*16d86563SAlexander Pyhalov printf("%x ", 0xff&obuf3[i]);
657*16d86563SAlexander Pyhalov }
658*16d86563SAlexander Pyhalov printf("\n\n");
659*16d86563SAlexander Pyhalov
660*16d86563SAlexander Pyhalov op3 = &obuf3[0];
661*16d86563SAlexander Pyhalov oleft = sizeof(obuf3);
662*16d86563SAlexander Pyhalov printf("OUTPUT: return value %d ",
663*16d86563SAlexander Pyhalov _cv_enconv(st, &ip3, &ileft, &op3, &oleft));
664*16d86563SAlexander Pyhalov printf("ileft %d oleft %d\n", ileft, oleft);
665*16d86563SAlexander Pyhalov printf(" flush_obuf %d ibuf_left %d\n", st->flush_obuf,
666*16d86563SAlexander Pyhalov st->ibuf_left);
667*16d86563SAlexander Pyhalov printf(" strat_cnt %d end_cnt %d\n", st->istart,
668*16d86563SAlexander Pyhalov st->iend);
669*16d86563SAlexander Pyhalov printf("OUTPUT BUFFER: ");
670*16d86563SAlexander Pyhalov for (i = 0; i < (sizeof(obuf3) - oleft) ; i++) {
671*16d86563SAlexander Pyhalov printf("%x ", 0xff&obuf3[i]);
672*16d86563SAlexander Pyhalov }
673*16d86563SAlexander Pyhalov printf("\n\n\n");
674*16d86563SAlexander Pyhalov _cv_close(st);
675*16d86563SAlexander Pyhalov
676*16d86563SAlexander Pyhalov /************************ test case 3+ ******************************/
677*16d86563SAlexander Pyhalov ip3 = &ibuf3[0];
678*16d86563SAlexander Pyhalov op3 = &obuf31[0];
679*16d86563SAlexander Pyhalov ileft = sizeof(ibuf3);
680*16d86563SAlexander Pyhalov oleft = sizeof(obuf31);
681*16d86563SAlexander Pyhalov
682*16d86563SAlexander Pyhalov st = _cv_open();
683*16d86563SAlexander Pyhalov
684*16d86563SAlexander Pyhalov printf("TEST 3+\nINPUT BUFFER: ");
685*16d86563SAlexander Pyhalov for (i = 0; i < ileft ; i++) {
686*16d86563SAlexander Pyhalov printf("%x ", 0xff&ibuf3[i]);
687*16d86563SAlexander Pyhalov }
688*16d86563SAlexander Pyhalov printf("\n");
689*16d86563SAlexander Pyhalov printf("OUTPUT: return value %d ",
690*16d86563SAlexander Pyhalov _cv_enconv(st, &ip3, &ileft, &op3, &oleft));
691*16d86563SAlexander Pyhalov printf("ileft %d oleft %d\n", ileft, oleft);
692*16d86563SAlexander Pyhalov printf(" flush_obuf %d ibuf_left %d\n", st->flush_obuf,
693*16d86563SAlexander Pyhalov st->ibuf_left);
694*16d86563SAlexander Pyhalov printf(" strat_cnt %d end_cnt %d\n", st->istart,
695*16d86563SAlexander Pyhalov st->iend);
696*16d86563SAlexander Pyhalov printf("OUTPUT BUFFER: ");
697*16d86563SAlexander Pyhalov for (i = 0; i < (sizeof(obuf31) - oleft) ; i++) {
698*16d86563SAlexander Pyhalov printf("%x ", 0xff&obuf31[i]);
699*16d86563SAlexander Pyhalov }
700*16d86563SAlexander Pyhalov printf("\n\n");
701*16d86563SAlexander Pyhalov
702*16d86563SAlexander Pyhalov op3 = &obuf31[0];
703*16d86563SAlexander Pyhalov oleft = sizeof(obuf31);
704*16d86563SAlexander Pyhalov printf("OUTPUT: return value %d ",
705*16d86563SAlexander Pyhalov _cv_enconv(st, &ip3, &ileft, &op3, &oleft));
706*16d86563SAlexander Pyhalov printf("ileft %d oleft %d\n", ileft, oleft);
707*16d86563SAlexander Pyhalov printf(" flush_obuf %d ibuf_left %d\n", st->flush_obuf,
708*16d86563SAlexander Pyhalov st->ibuf_left);
709*16d86563SAlexander Pyhalov printf(" strat_cnt %d end_cnt %d\n", st->istart,
710*16d86563SAlexander Pyhalov st->iend);
711*16d86563SAlexander Pyhalov printf("OUTPUT BUFFER: ");
712*16d86563SAlexander Pyhalov for (i = 0; i < (sizeof(obuf31) - oleft) ; i++) {
713*16d86563SAlexander Pyhalov printf("%x ", 0xff&obuf31[i]);
714*16d86563SAlexander Pyhalov }
715*16d86563SAlexander Pyhalov printf("\n\n");
716*16d86563SAlexander Pyhalov
717*16d86563SAlexander Pyhalov op3 = &obuf31[0];
718*16d86563SAlexander Pyhalov oleft = sizeof(obuf31);
719*16d86563SAlexander Pyhalov printf("OUTPUT: return value %d ",
720*16d86563SAlexander Pyhalov _cv_enconv(st, &ip3, &ileft, &op3, &oleft));
721*16d86563SAlexander Pyhalov printf("ileft %d oleft %d\n", ileft, oleft);
722*16d86563SAlexander Pyhalov printf(" flush_obuf %d ibuf_left %d\n", st->flush_obuf,
723*16d86563SAlexander Pyhalov st->ibuf_left);
724*16d86563SAlexander Pyhalov printf(" strat_cnt %d end_cnt %d\n", st->istart,
725*16d86563SAlexander Pyhalov st->iend);
726*16d86563SAlexander Pyhalov printf("OUTPUT BUFFER: ");
727*16d86563SAlexander Pyhalov for (i = 0; i < (sizeof(obuf31) - oleft) ; i++) {
728*16d86563SAlexander Pyhalov printf("%x ", 0xff&obuf31[i]);
729*16d86563SAlexander Pyhalov }
730*16d86563SAlexander Pyhalov printf("\n\n\n");
731*16d86563SAlexander Pyhalov _cv_close(st);
732*16d86563SAlexander Pyhalov }
733*16d86563SAlexander Pyhalov
734*16d86563SAlexander Pyhalov /* expected output
735*16d86563SAlexander Pyhalov
736*16d86563SAlexander Pyhalov TEST 1
737*16d86563SAlexander Pyhalov INPUT BUFFER: e 57 6c f e 55 67 f e 5a 62 57 f
738*16d86563SAlexander Pyhalov OUTPUT: return value 0 ileft 0 oleft 14
739*16d86563SAlexander Pyhalov flush_obuf 0 ibuf_left 0
740*16d86563SAlexander Pyhalov OUTPUT BUFFER: bf c0 bc bc c3 a2
741*16d86563SAlexander Pyhalov
742*16d86563SAlexander Pyhalov
743*16d86563SAlexander Pyhalov TEST 2
744*16d86563SAlexander Pyhalov INPUT BUFFER: e 57 6c f e 55
745*16d86563SAlexander Pyhalov OUTPUT: return value 0 ileft 0 oleft 18
746*16d86563SAlexander Pyhalov flush_obuf 0 ibuf_left 1
747*16d86563SAlexander Pyhalov OUTPUT BUFFER: bf c0
748*16d86563SAlexander Pyhalov
749*16d86563SAlexander Pyhalov INPUT BUFFER: 67 f e 5a 62 57 f
750*16d86563SAlexander Pyhalov OUTPUT: return value 0 ileft 0 oleft 16
751*16d86563SAlexander Pyhalov flush_obuf 0 ibuf_left 0
752*16d86563SAlexander Pyhalov OUTPUT BUFFER: bc bc c3 a2
753*16d86563SAlexander Pyhalov
754*16d86563SAlexander Pyhalov
755*16d86563SAlexander Pyhalov TEST 3
756*16d86563SAlexander Pyhalov INPUT BUFFER: e 57 6c f e 55 67 f e 5a 62 57 f
757*16d86563SAlexander Pyhalov OUTPUT: return value 5 ileft 5 oleft 0
758*16d86563SAlexander Pyhalov flush_obuf 0 ibuf_left 0
759*16d86563SAlexander Pyhalov strat_cnt 0 end_cnt 0
760*16d86563SAlexander Pyhalov OUTPUT BUFFER: bf c0 bc bc
761*16d86563SAlexander Pyhalov
762*16d86563SAlexander Pyhalov OUTPUT: return value 0 ileft 0 oleft 2
763*16d86563SAlexander Pyhalov flush_obuf 0 ibuf_left 0
764*16d86563SAlexander Pyhalov strat_cnt 0 end_cnt 0
765*16d86563SAlexander Pyhalov OUTPUT BUFFER: c3 a2
766*16d86563SAlexander Pyhalov
767*16d86563SAlexander Pyhalov OUTPUT: return value 0 ileft 0 oleft 4
768*16d86563SAlexander Pyhalov flush_obuf 0 ibuf_left 0
769*16d86563SAlexander Pyhalov strat_cnt 0 end_cnt 0
770*16d86563SAlexander Pyhalov OUTPUT BUFFER:
771*16d86563SAlexander Pyhalov
772*16d86563SAlexander Pyhalov
773*16d86563SAlexander Pyhalov TEST 3+
774*16d86563SAlexander Pyhalov INPUT BUFFER: e 57 6c f e 55 67 f e 5a 62 57 f
775*16d86563SAlexander Pyhalov OUTPUT: return value 0 ileft 0 oleft 0
776*16d86563SAlexander Pyhalov flush_obuf 1 ibuf_left 0
777*16d86563SAlexander Pyhalov strat_cnt 0 end_cnt 0
778*16d86563SAlexander Pyhalov OUTPUT BUFFER: bf c0 bc bc c3
779*16d86563SAlexander Pyhalov
780*16d86563SAlexander Pyhalov OUTPUT: return value 0 ileft 0 oleft 4
781*16d86563SAlexander Pyhalov flush_obuf 0 ibuf_left 0
782*16d86563SAlexander Pyhalov strat_cnt 0 end_cnt 0
783*16d86563SAlexander Pyhalov OUTPUT BUFFER: a2
784*16d86563SAlexander Pyhalov
785*16d86563SAlexander Pyhalov OUTPUT: return value 0 ileft 0 oleft 5
786*16d86563SAlexander Pyhalov flush_obuf 0 ibuf_left 0
787*16d86563SAlexander Pyhalov strat_cnt 0 end_cnt 0
788*16d86563SAlexander Pyhalov OUTPUT BUFFER:
789*16d86563SAlexander Pyhalov
790*16d86563SAlexander Pyhalov */
791*16d86563SAlexander Pyhalov
792*16d86563SAlexander Pyhalov #endif /* TEST */
793