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