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