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) 1999 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 #include <libgen.h>
29*16d86563SAlexander Pyhalov #include <stdio.h>
30*16d86563SAlexander Pyhalov #include <ctype.h>
31*16d86563SAlexander Pyhalov 
32*16d86563SAlexander Pyhalov char *	ME;
33*16d86563SAlexander Pyhalov static struct u4_nm {
34*16d86563SAlexander Pyhalov 		signed int	u4;
35*16d86563SAlexander Pyhalov 		unsigned char  	nm[256];
36*16d86563SAlexander Pyhalov } u4_nm[0x10000];
37*16d86563SAlexander Pyhalov 
38*16d86563SAlexander Pyhalov 
39*16d86563SAlexander Pyhalov static struct to_utf8_table_component2 {
40*16d86563SAlexander Pyhalov 		unsigned int	from;
41*16d86563SAlexander Pyhalov 		unsigned int	u4;
42*16d86563SAlexander Pyhalov 		unsigned int	u8;
43*16d86563SAlexander Pyhalov 		signed char	size;
44*16d86563SAlexander Pyhalov } tbl[0x10000];
45*16d86563SAlexander Pyhalov 
46*16d86563SAlexander Pyhalov #define INDEX_FOR_BETWEEN_MAX 1000
47*16d86563SAlexander Pyhalov 
48*16d86563SAlexander Pyhalov 
49*16d86563SAlexander Pyhalov void
usage(int status)50*16d86563SAlexander Pyhalov usage(int status)
51*16d86563SAlexander Pyhalov {
52*16d86563SAlexander Pyhalov 	fprintf(stderr, "Usage: %s <mnemonic.txt> < <codeset.txt>\n", ME);
53*16d86563SAlexander Pyhalov 	exit(status);
54*16d86563SAlexander Pyhalov }
55*16d86563SAlexander Pyhalov 
56*16d86563SAlexander Pyhalov 
57*16d86563SAlexander Pyhalov static void mk_u4nm (char *file);
main(int ac,char ** av)58*16d86563SAlexander Pyhalov main(int ac, char **av)
59*16d86563SAlexander Pyhalov {
60*16d86563SAlexander Pyhalov 	register int	i, j;
61*16d86563SAlexander Pyhalov 	char		buf[BUFSIZ], num[100];
62*16d86563SAlexander Pyhalov 	unsigned int	l, k, index_for_between;
63*16d86563SAlexander Pyhalov 	int		mapflag[2];
64*16d86563SAlexander Pyhalov 	int		between[INDEX_FOR_BETWEEN_MAX];
65*16d86563SAlexander Pyhalov 
66*16d86563SAlexander Pyhalov 	ME = basename(av[0]);
67*16d86563SAlexander Pyhalov 	if (ac <= 1) usage(-1);
68*16d86563SAlexander Pyhalov 	mk_u4nm(av[1]);
69*16d86563SAlexander Pyhalov 
70*16d86563SAlexander Pyhalov 	/* if no data, no mapping pair will be created */
71*16d86563SAlexander Pyhalov 	for (i = 0; i < 0x10000; i++) {
72*16d86563SAlexander Pyhalov 		tbl[i].size = 0;
73*16d86563SAlexander Pyhalov 	}
74*16d86563SAlexander Pyhalov 
75*16d86563SAlexander Pyhalov 
76*16d86563SAlexander Pyhalov 	/* for information file, pari data is created */
77*16d86563SAlexander Pyhalov 	while (fgets(buf, BUFSIZ, stdin)) {
78*16d86563SAlexander Pyhalov 		i = 0;
79*16d86563SAlexander Pyhalov 		while (buf[i] && isspace(buf[i]))
80*16d86563SAlexander Pyhalov 			i++;
81*16d86563SAlexander Pyhalov 		if (buf[i] == '#' || buf[i] == '\0')
82*16d86563SAlexander Pyhalov 			continue;
83*16d86563SAlexander Pyhalov 
84*16d86563SAlexander Pyhalov 		for (j = 0; !isspace(buf[i]); i++, j++)
85*16d86563SAlexander Pyhalov 			num[j] = buf[i];
86*16d86563SAlexander Pyhalov 		num[j] = '\0';
87*16d86563SAlexander Pyhalov 
88*16d86563SAlexander Pyhalov 		k = strtol(num, (char **)NULL, 0);
89*16d86563SAlexander Pyhalov 
90*16d86563SAlexander Pyhalov 		while (isspace(buf[i]))
91*16d86563SAlexander Pyhalov 			i++;
92*16d86563SAlexander Pyhalov 
93*16d86563SAlexander Pyhalov 		if (buf[i] == '#' || buf[i] == '\0')
94*16d86563SAlexander Pyhalov 			/* undefined */
95*16d86563SAlexander Pyhalov 			continue;
96*16d86563SAlexander Pyhalov 
97*16d86563SAlexander Pyhalov 		for (j = 0; !isspace(buf[i]); i++, j++)
98*16d86563SAlexander Pyhalov 			num[j] = buf[i];
99*16d86563SAlexander Pyhalov 		num[j] = '\0';
100*16d86563SAlexander Pyhalov 
101*16d86563SAlexander Pyhalov 		l = strtol(num, (char **)NULL, 0);
102*16d86563SAlexander Pyhalov 
103*16d86563SAlexander Pyhalov 		if (tbl[k].size != 0) {
104*16d86563SAlexander Pyhalov 			/* overwrite */
105*16d86563SAlexander Pyhalov 			fprintf(stderr, "duplicated mapping for 0x%x\n", k );
106*16d86563SAlexander Pyhalov 		}
107*16d86563SAlexander Pyhalov 		tbl[k].u4 = l;
108*16d86563SAlexander Pyhalov 		tbl[k].from = k;
109*16d86563SAlexander Pyhalov 
110*16d86563SAlexander Pyhalov 		if (l < 0x80)
111*16d86563SAlexander Pyhalov 			tbl[k].size = 1;
112*16d86563SAlexander Pyhalov 		else if (l < 0x800)
113*16d86563SAlexander Pyhalov 			tbl[k].size = 2;
114*16d86563SAlexander Pyhalov 		else if (l < 0x10000)
115*16d86563SAlexander Pyhalov 			tbl[k].size = 3;
116*16d86563SAlexander Pyhalov 		else if (l < 0x200000)
117*16d86563SAlexander Pyhalov 			tbl[k].size = 4;
118*16d86563SAlexander Pyhalov 		else if (l < 0x4000000)
119*16d86563SAlexander Pyhalov 			tbl[k].size = 5;
120*16d86563SAlexander Pyhalov 		else
121*16d86563SAlexander Pyhalov 			tbl[k].size = 6;
122*16d86563SAlexander Pyhalov 	}
123*16d86563SAlexander Pyhalov 	for (i = 0; i < 0x100; i++) {
124*16d86563SAlexander Pyhalov 		if (tbl[i].size > 0 ) {
125*16d86563SAlexander Pyhalov 			if (u4_nm[tbl[i].u4].u4 >= 0){
126*16d86563SAlexander Pyhalov 				printf("0x%0x\t%s\n", i, u4_nm[tbl[i].u4].nm);
127*16d86563SAlexander Pyhalov 			} else {
128*16d86563SAlexander Pyhalov 				printf("0x%0x\t ????????\n", i, u4_nm[tbl[i].u4].nm);
129*16d86563SAlexander Pyhalov 			}
130*16d86563SAlexander Pyhalov 		} else {
131*16d86563SAlexander Pyhalov 			printf("0x%0x\t??\n", i);
132*16d86563SAlexander Pyhalov 		}
133*16d86563SAlexander Pyhalov 	}
134*16d86563SAlexander Pyhalov 	return (0);
135*16d86563SAlexander Pyhalov }
136*16d86563SAlexander Pyhalov 
mk_u4nm(char * file)137*16d86563SAlexander Pyhalov static void mk_u4nm (char *file)
138*16d86563SAlexander Pyhalov {
139*16d86563SAlexander Pyhalov 	register int	i, j;
140*16d86563SAlexander Pyhalov 	char		buf[BUFSIZ], num[100];
141*16d86563SAlexander Pyhalov 	unsigned int	l, k, index_for_between;
142*16d86563SAlexander Pyhalov 	int		mapflag[2];
143*16d86563SAlexander Pyhalov 	int		between[INDEX_FOR_BETWEEN_MAX];
144*16d86563SAlexander Pyhalov 	int	       	somedatalost = 0;
145*16d86563SAlexander Pyhalov 	FILE		*fd;
146*16d86563SAlexander Pyhalov 
147*16d86563SAlexander Pyhalov 
148*16d86563SAlexander Pyhalov 	for(i = 0; i < 0x1000; i++ ) {
149*16d86563SAlexander Pyhalov 		u4_nm[k].u4 = -1;
150*16d86563SAlexander Pyhalov 	}
151*16d86563SAlexander Pyhalov 
152*16d86563SAlexander Pyhalov 	if ((fd = fopen(file, "r")) == NULL) {
153*16d86563SAlexander Pyhalov 		perror("fopen");
154*16d86563SAlexander Pyhalov 		exit (-1);
155*16d86563SAlexander Pyhalov 	}
156*16d86563SAlexander Pyhalov 	while (fgets(buf, BUFSIZ, fd)) {
157*16d86563SAlexander Pyhalov 		i = 0;
158*16d86563SAlexander Pyhalov 		while (buf[i] && isspace(buf[i]))
159*16d86563SAlexander Pyhalov 			i++;
160*16d86563SAlexander Pyhalov 		if (buf[i] == '#' || buf[i] == '\0')
161*16d86563SAlexander Pyhalov 			continue;
162*16d86563SAlexander Pyhalov 
163*16d86563SAlexander Pyhalov 		for (j = 0; !isspace(buf[i]); i++, j++)
164*16d86563SAlexander Pyhalov 			num[j] = buf[i];
165*16d86563SAlexander Pyhalov 		num[j] = '\0';
166*16d86563SAlexander Pyhalov 
167*16d86563SAlexander Pyhalov 		k = strtol(num, (char **)NULL, 16);
168*16d86563SAlexander Pyhalov 
169*16d86563SAlexander Pyhalov 		while (isspace(buf[i]))
170*16d86563SAlexander Pyhalov 			i++;
171*16d86563SAlexander Pyhalov 
172*16d86563SAlexander Pyhalov 		if (buf[i] == '#' || buf[i] == '\0')
173*16d86563SAlexander Pyhalov 			/* undefined */
174*16d86563SAlexander Pyhalov 			continue;
175*16d86563SAlexander Pyhalov 
176*16d86563SAlexander Pyhalov 		u4_nm[k].u4 = k;
177*16d86563SAlexander Pyhalov 		for (j = 0; !isspace(buf[i]); i++, j++)
178*16d86563SAlexander Pyhalov 			u4_nm[k].nm[j] = buf[i];
179*16d86563SAlexander Pyhalov 		u4_nm[k].nm[j] = '\0';
180*16d86563SAlexander Pyhalov 		/*	printf("%d(%d): %s\n", k, j, &u4_nm[k].nm[0] ); */
181*16d86563SAlexander Pyhalov 	}
182*16d86563SAlexander Pyhalov }
183