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 /*
23*16d86563SAlexander Pyhalov * Copyright (c) 1997, by Sun Microsystems, Inc.
24*16d86563SAlexander Pyhalov * All rights reserved.
25*16d86563SAlexander Pyhalov *
26*16d86563SAlexander Pyhalov * $Id: UTF8_to_Cp933.c,v 1.4 2004/03/21 23:14:51 fzhang Exp $ SMI
27*16d86563SAlexander Pyhalov *
28*16d86563SAlexander Pyhalov */
29*16d86563SAlexander Pyhalov
30*16d86563SAlexander Pyhalov #include <stdio.h>
31*16d86563SAlexander Pyhalov #include <stdlib.h>
32*16d86563SAlexander Pyhalov #include <errno.h>
33*16d86563SAlexander Pyhalov #include <sys/types.h>
34*16d86563SAlexander Pyhalov
35*16d86563SAlexander Pyhalov #include "tab_lookup.h" /* table lookup data types */
36*16d86563SAlexander Pyhalov #include "ucs2_cp933.h" /* Unicode to CP933 mapping table */
37*16d86563SAlexander Pyhalov
38*16d86563SAlexander Pyhalov
39*16d86563SAlexander Pyhalov /*
40*16d86563SAlexander Pyhalov * Open; called from iconv_open()
41*16d86563SAlexander Pyhalov */
42*16d86563SAlexander Pyhalov void *
_icv_open()43*16d86563SAlexander Pyhalov _icv_open()
44*16d86563SAlexander Pyhalov {
45*16d86563SAlexander Pyhalov
46*16d86563SAlexander Pyhalov _icv_state *st;
47*16d86563SAlexander Pyhalov
48*16d86563SAlexander Pyhalov if ((st = (_icv_state *)malloc(sizeof(_icv_state))) == NULL) {
49*16d86563SAlexander Pyhalov errno = ENOMEM;
50*16d86563SAlexander Pyhalov return ((void *) -1);
51*16d86563SAlexander Pyhalov }
52*16d86563SAlexander Pyhalov
53*16d86563SAlexander Pyhalov st->left_to_right = B_TRUE;
54*16d86563SAlexander Pyhalov st->right_to_left = B_FALSE;
55*16d86563SAlexander Pyhalov st->left_code_size = 2; /* byte */
56*16d86563SAlexander Pyhalov st->right_code_size = 2; /* byte */
57*16d86563SAlexander Pyhalov st->table = &ucs2_cp933_tab[0];
58*16d86563SAlexander Pyhalov st->table_size = MAX_UCS_NUM;
59*16d86563SAlexander Pyhalov st->shift = SHIFT_IN;
60*16d86563SAlexander Pyhalov
61*16d86563SAlexander Pyhalov st->ustate = 0;
62*16d86563SAlexander Pyhalov st->_errno = 0;
63*16d86563SAlexander Pyhalov return ((void *)st);
64*16d86563SAlexander Pyhalov }
65*16d86563SAlexander Pyhalov
66*16d86563SAlexander Pyhalov
67*16d86563SAlexander Pyhalov /*
68*16d86563SAlexander Pyhalov * Close; called from iconv_close()
69*16d86563SAlexander Pyhalov */
70*16d86563SAlexander Pyhalov void
_icv_close(_icv_state * st)71*16d86563SAlexander Pyhalov _icv_close(_icv_state *st)
72*16d86563SAlexander Pyhalov {
73*16d86563SAlexander Pyhalov if (st == NULL)
74*16d86563SAlexander Pyhalov errno = EBADF;
75*16d86563SAlexander Pyhalov else
76*16d86563SAlexander Pyhalov free(st);
77*16d86563SAlexander Pyhalov }
78*16d86563SAlexander Pyhalov
79*16d86563SAlexander Pyhalov
80*16d86563SAlexander Pyhalov #ifdef TEST
81*16d86563SAlexander Pyhalov
82*16d86563SAlexander Pyhalov /* test case 1 */
83*16d86563SAlexander Pyhalov /*
84*16d86563SAlexander Pyhalov char ibuf1[] = {0x0e, 0x57, 0x6c, 0x0f, 0x0e, 0x55, 0x67, 0x0f, 0x0e, 0x5a, 0x62, 0x57};
85*16d86563SAlexander Pyhalov char obuf1[20];
86*16d86563SAlexander Pyhalov */
87*16d86563SAlexander Pyhalov
88*16d86563SAlexander Pyhalov unsigned char ibuf1[] = {0x5f, 0x63, 0xd3, 0x69, 0x5f, 0x75, 0x63, 0x73, 0x32, 0x75, 0x74, 0x66};
89*16d86563SAlexander Pyhalov unsigned char obuf1[38];
90*16d86563SAlexander Pyhalov
main()91*16d86563SAlexander Pyhalov main()
92*16d86563SAlexander Pyhalov {
93*16d86563SAlexander Pyhalov int i;
94*16d86563SAlexander Pyhalov struct _icv_state *st;
95*16d86563SAlexander Pyhalov size_t oleft, ileft;
96*16d86563SAlexander Pyhalov unsigned char *ip1 = &ibuf1[0], *op1 = &obuf1[0];
97*16d86563SAlexander Pyhalov
98*16d86563SAlexander Pyhalov /****************************** test case 1 *************************/
99*16d86563SAlexander Pyhalov
100*16d86563SAlexander Pyhalov ileft = sizeof(ibuf1);
101*16d86563SAlexander Pyhalov oleft = sizeof(obuf1);
102*16d86563SAlexander Pyhalov
103*16d86563SAlexander Pyhalov st = (_icv_state *)_icv_open();
104*16d86563SAlexander Pyhalov
105*16d86563SAlexander Pyhalov printf("TEST 1\n INPUT BUFFER: ");
106*16d86563SAlexander Pyhalov for (i = 0; i < ileft ; i++) {
107*16d86563SAlexander Pyhalov printf("%x ", 0xff&ibuf1[i]);
108*16d86563SAlexander Pyhalov }
109*16d86563SAlexander Pyhalov printf("\n");
110*16d86563SAlexander Pyhalov printf("OUTPUT: return value \n");
111*16d86563SAlexander Pyhalov printf("OUTPUT: return value %d errno: %d ",
112*16d86563SAlexander Pyhalov _icv_iconv(st, (char **)&ip1, &ileft, (char **)&op1, &oleft),
113*16d86563SAlexander Pyhalov errno);
114*16d86563SAlexander Pyhalov
115*16d86563SAlexander Pyhalov printf("OUTPUT BUFFER: ");
116*16d86563SAlexander Pyhalov for (i = 0; i < (sizeof(obuf1) - oleft) ; i++) {
117*16d86563SAlexander Pyhalov printf("%x ", 0xff&obuf1[i]);
118*16d86563SAlexander Pyhalov }
119*16d86563SAlexander Pyhalov printf("\n\n\n");
120*16d86563SAlexander Pyhalov _icv_close(st);
121*16d86563SAlexander Pyhalov
122*16d86563SAlexander Pyhalov }
123*16d86563SAlexander Pyhalov
124*16d86563SAlexander Pyhalov #endif /* TEST */
125