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 
28*16d86563SAlexander Pyhalov #ifndef _NBYTE2EUC_H_
29*16d86563SAlexander Pyhalov #define _NBYTE2EUC_H_
30*16d86563SAlexander Pyhalov 
31*16d86563SAlexander Pyhalov 
32*16d86563SAlexander Pyhalov #include "hangulcode.h"
33*16d86563SAlexander Pyhalov 
34*16d86563SAlexander Pyhalov typedef struct __conv_desc {
35*16d86563SAlexander Pyhalov 	int	cur_stat;
36*16d86563SAlexander Pyhalov 	int	cur_act;
37*16d86563SAlexander Pyhalov 	char	hbuf[5];
38*16d86563SAlexander Pyhalov } _conv_desc;
39*16d86563SAlexander Pyhalov 
40*16d86563SAlexander Pyhalov int next_stat[14][21]={	/* next state table[current state][input] */
41*16d86563SAlexander Pyhalov 	/* input
42*16d86563SAlexander Pyhalov 	  0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 */
43*16d86563SAlexander Pyhalov /*state*/
44*16d86563SAlexander Pyhalov /* 0 */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
45*16d86563SAlexander Pyhalov /* 1 */ { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1},
46*16d86563SAlexander Pyhalov /* 2 */ { 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 2, 1, 2},
47*16d86563SAlexander Pyhalov /* 3 */ { 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 2, 1, 2},
48*16d86563SAlexander Pyhalov /* 4 */ { 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, 8, 8, 8, 5, 6, 7, 2, 1, 2},
49*16d86563SAlexander Pyhalov /* 5 */ { 0, 4, 9,10,11,12,13,13,13,13,13, 3, 8, 3, 8, 3, 3, 3, 2, 1, 2},
50*16d86563SAlexander Pyhalov /* 6 */ { 0, 4, 9,10,11,12,13,13,13,13,13, 3, 3, 8, 8, 3, 3, 3, 2, 1, 2},
51*16d86563SAlexander Pyhalov /* 7 */ { 0, 4, 9,10,11,12,13,13,13,13,13, 3, 3, 3, 8, 3, 3, 3, 2, 1, 2},
52*16d86563SAlexander Pyhalov /* 8 */ { 0, 4, 9,10,11,12,13,13,13,13,13, 3, 3, 3, 3, 3, 3, 3, 2, 1, 2},
53*16d86563SAlexander Pyhalov /* 9 */ { 0, 4, 4, 4, 4, 4, 4,13, 4, 4, 4, 8, 8, 8, 8, 5, 6, 7, 2, 1, 2},
54*16d86563SAlexander Pyhalov /*10 */ { 0, 4, 4, 4, 4, 4, 4, 4,13,13, 4, 8, 8, 8, 8, 5, 6, 7, 2, 1, 2},
55*16d86563SAlexander Pyhalov /*11 */ { 0, 4,13, 4, 4,13, 4,13, 4,13,13, 8, 8, 8, 8, 5, 6, 7, 2, 1, 2},
56*16d86563SAlexander Pyhalov /*12 */ { 0, 4, 4, 4, 4, 4, 4,13, 4, 4, 4, 8, 8, 8, 8, 5, 6, 7, 2, 1, 2},
57*16d86563SAlexander Pyhalov /*13 */ { 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, 8, 8, 8, 5, 6, 7, 2, 1, 2}
58*16d86563SAlexander Pyhalov };
59*16d86563SAlexander Pyhalov 
60*16d86563SAlexander Pyhalov int next_act[14][21]={	/* next action table[current state][input]  */
61*16d86563SAlexander Pyhalov 	/*input
62*16d86563SAlexander Pyhalov 	  0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 */
63*16d86563SAlexander Pyhalov /*state*/
64*16d86563SAlexander Pyhalov /* 0 */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
65*16d86563SAlexander Pyhalov /* 1 */ { 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 4, 4},
66*16d86563SAlexander Pyhalov /* 2 */ { 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,15,15,15,15,15,15,15, 1, 3, 4},
67*16d86563SAlexander Pyhalov /* 3 */ { 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,15,15,15,15,15,15,15, 1, 3, 4},
68*16d86563SAlexander Pyhalov /* 4 */ { 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 6, 6, 6, 6, 6, 6, 6,16,12,13},
69*16d86563SAlexander Pyhalov /* 5 */ { 0, 9, 7, 7, 7, 7, 7, 7, 7, 7, 7,10,14,10,14,10,10,10,16,12,13},
70*16d86563SAlexander Pyhalov /* 6 */ { 0, 9, 7, 7, 7, 7, 7, 7, 7, 7, 7,10,10,14,14,10,10,10,16,12,13},
71*16d86563SAlexander Pyhalov /* 7 */ { 0, 9, 7, 7, 7, 7, 7, 7, 7, 7, 7,10,10,10,14,10,10,10,16,12,13},
72*16d86563SAlexander Pyhalov /* 8 */ { 0, 9, 7, 7, 7, 7, 7, 7, 7, 7, 7,10,10,10,10,10,10,10,16,12,13},
73*16d86563SAlexander Pyhalov /* 9 */ { 0, 9, 9, 9, 9, 9, 9, 8, 9, 9, 9,17,17,17,17,17,17,17,16,12,13},
74*16d86563SAlexander Pyhalov /*10 */ { 0, 9, 9, 9, 9, 9, 9, 9, 8, 8, 9,17,17,17,17,17,17,17,16,12,13},
75*16d86563SAlexander Pyhalov /*11 */ { 0, 9, 8, 9, 9, 8, 9, 8, 9, 8, 8,17,17,17,17,17,17,17,16,12,13},
76*16d86563SAlexander Pyhalov /*12 */ { 0, 9, 9, 9, 9, 9, 9, 8, 9, 9, 9,17,17,17,17,17,17,17,16,12,13},
77*16d86563SAlexander Pyhalov /*13 */ { 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,17,17,17,17,17,17,17,16,12,13}
78*16d86563SAlexander Pyhalov };
79*16d86563SAlexander Pyhalov 
80*16d86563SAlexander Pyhalov #define	ADD_CONVERTED_CODE(K, ADD)\
81*16d86563SAlexander Pyhalov 	{\
82*16d86563SAlexander Pyhalov 		unsigned short	code;\
83*16d86563SAlexander Pyhalov 		char		temp[5];\
84*16d86563SAlexander Pyhalov 		\
85*16d86563SAlexander Pyhalov 		temp[1] = cd->hbuf[1];\
86*16d86563SAlexander Pyhalov 		temp[2] = cd->hbuf[2];\
87*16d86563SAlexander Pyhalov 		temp[3] = cd->hbuf[3];\
88*16d86563SAlexander Pyhalov 		temp[4] = cd->hbuf[4];\
89*16d86563SAlexander Pyhalov 		if ((result = _johap_to_wansung(&code,\
90*16d86563SAlexander Pyhalov 				make_johap_code((K), temp))) != FAILED)\
91*16d86563SAlexander Pyhalov 		{\
92*16d86563SAlexander Pyhalov 			if ((obtail - ob) < (2 + (ADD)))\
93*16d86563SAlexander Pyhalov 			{\
94*16d86563SAlexander Pyhalov 				errno = E2BIG;\
95*16d86563SAlexander Pyhalov 				ret_val = (size_t)-1;\
96*16d86563SAlexander Pyhalov 				break;\
97*16d86563SAlexander Pyhalov 			}\
98*16d86563SAlexander Pyhalov 			cd->hbuf[1] = temp[1];\
99*16d86563SAlexander Pyhalov 			cd->hbuf[2] = temp[2];\
100*16d86563SAlexander Pyhalov 			cd->hbuf[3] = temp[3];\
101*16d86563SAlexander Pyhalov 			cd->hbuf[4] = temp[4];\
102*16d86563SAlexander Pyhalov 			*ob++ = (char)((code >> 8) & 0xFF);\
103*16d86563SAlexander Pyhalov 			*ob++ = (char)(code & 0xFF);\
104*16d86563SAlexander Pyhalov 		}\
105*16d86563SAlexander Pyhalov 		else\
106*16d86563SAlexander Pyhalov 		{\
107*16d86563SAlexander Pyhalov 			if ((obtail - ob) < 2)\
108*16d86563SAlexander Pyhalov 			{\
109*16d86563SAlexander Pyhalov 				errno = E2BIG;\
110*16d86563SAlexander Pyhalov 				ret_val = (size_t)-1;\
111*16d86563SAlexander Pyhalov 				break;\
112*16d86563SAlexander Pyhalov 			}\
113*16d86563SAlexander Pyhalov 			*ob++ = NON_IDENTICAL;\
114*16d86563SAlexander Pyhalov 			*ob++ = NON_IDENTICAL;\
115*16d86563SAlexander Pyhalov 			ret_val += 2;\
116*16d86563SAlexander Pyhalov 		}\
117*16d86563SAlexander Pyhalov 	}
118*16d86563SAlexander Pyhalov 
119*16d86563SAlexander Pyhalov 
120*16d86563SAlexander Pyhalov #endif	/* _NBYTE2EUC_H_ */
121