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