1 /* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License (the "License"). 6 * You may not use this file except in compliance with the License. 7 * 8 * You can obtain a copy of the license at src/OPENSOLARIS.LICENSE 9 * or http://www.opensolaris.org/os/licensing. 10 * See the License for the specific language governing permissions 11 * and limitations under the License. 12 * 13 * When distributing Covered Code, include this CDDL HEADER in each 14 * file and include the License file at src/OPENSOLARIS.LICENSE. 15 * If applicable, add the following below this CDDL HEADER, with the 16 * fields enclosed by brackets "[]" replaced with your own identifying 17 * information: Portions Copyright [yyyy] [name of copyright owner] 18 * 19 * CDDL HEADER END 20 */ 21 /* 22 * Copyright (c) 1999 by Sun Microsystems, Inc. 23 * All rights reserved. 24 */ 25 26 27 28 #include <libgen.h> 29 #include <stdio.h> 30 #include <ctype.h> 31 32 char * ME; 33 static struct u4_nm { 34 signed int u4; 35 unsigned char nm[256]; 36 } u4_nm[0x10000]; 37 38 39 static struct to_utf8_table_component2 { 40 unsigned int from; 41 unsigned int u4; 42 unsigned int u8; 43 signed char size; 44 } tbl[0x10000]; 45 46 #define INDEX_FOR_BETWEEN_MAX 1000 47 48 49 void 50 usage(int status) 51 { 52 fprintf(stderr, "Usage: %s <mnemonic.txt> < <codeset.txt>\n", ME); 53 exit(status); 54 } 55 56 57 static void mk_u4nm (char *file); 58 main(int ac, char **av) 59 { 60 register int i, j; 61 char buf[BUFSIZ], num[100]; 62 unsigned int l, k, index_for_between; 63 int mapflag[2]; 64 int between[INDEX_FOR_BETWEEN_MAX]; 65 66 ME = basename(av[0]); 67 if (ac <= 1) usage(-1); 68 mk_u4nm(av[1]); 69 70 /* if no data, no mapping pair will be created */ 71 for (i = 0; i < 0x10000; i++) { 72 tbl[i].size = 0; 73 } 74 75 76 /* for information file, pari data is created */ 77 while (fgets(buf, BUFSIZ, stdin)) { 78 i = 0; 79 while (buf[i] && isspace(buf[i])) 80 i++; 81 if (buf[i] == '#' || buf[i] == '\0') 82 continue; 83 84 for (j = 0; !isspace(buf[i]); i++, j++) 85 num[j] = buf[i]; 86 num[j] = '\0'; 87 88 k = strtol(num, (char **)NULL, 0); 89 90 while (isspace(buf[i])) 91 i++; 92 93 if (buf[i] == '#' || buf[i] == '\0') 94 /* undefined */ 95 continue; 96 97 for (j = 0; !isspace(buf[i]); i++, j++) 98 num[j] = buf[i]; 99 num[j] = '\0'; 100 101 l = strtol(num, (char **)NULL, 0); 102 103 if (tbl[k].size != 0) { 104 /* overwrite */ 105 fprintf(stderr, "duplicated mapping for 0x%x\n", k ); 106 } 107 tbl[k].u4 = l; 108 tbl[k].from = k; 109 110 if (l < 0x80) 111 tbl[k].size = 1; 112 else if (l < 0x800) 113 tbl[k].size = 2; 114 else if (l < 0x10000) 115 tbl[k].size = 3; 116 else if (l < 0x200000) 117 tbl[k].size = 4; 118 else if (l < 0x4000000) 119 tbl[k].size = 5; 120 else 121 tbl[k].size = 6; 122 } 123 for (i = 0; i < 0x100; i++) { 124 if (tbl[i].size > 0 ) { 125 if (u4_nm[tbl[i].u4].u4 >= 0){ 126 printf("0x%0x\t%s\n", i, u4_nm[tbl[i].u4].nm); 127 } else { 128 printf("0x%0x\t ????????\n", i, u4_nm[tbl[i].u4].nm); 129 } 130 } else { 131 printf("0x%0x\t??\n", i); 132 } 133 } 134 return (0); 135 } 136 137 static void mk_u4nm (char *file) 138 { 139 register int i, j; 140 char buf[BUFSIZ], num[100]; 141 unsigned int l, k, index_for_between; 142 int mapflag[2]; 143 int between[INDEX_FOR_BETWEEN_MAX]; 144 int somedatalost = 0; 145 FILE *fd; 146 147 148 for(i = 0; i < 0x1000; i++ ) { 149 u4_nm[k].u4 = -1; 150 } 151 152 if ((fd = fopen(file, "r")) == NULL) { 153 perror("fopen"); 154 exit (-1); 155 } 156 while (fgets(buf, BUFSIZ, fd)) { 157 i = 0; 158 while (buf[i] && isspace(buf[i])) 159 i++; 160 if (buf[i] == '#' || buf[i] == '\0') 161 continue; 162 163 for (j = 0; !isspace(buf[i]); i++, j++) 164 num[j] = buf[i]; 165 num[j] = '\0'; 166 167 k = strtol(num, (char **)NULL, 16); 168 169 while (isspace(buf[i])) 170 i++; 171 172 if (buf[i] == '#' || buf[i] == '\0') 173 /* undefined */ 174 continue; 175 176 u4_nm[k].u4 = k; 177 for (j = 0; !isspace(buf[i]); i++, j++) 178 u4_nm[k].nm[j] = buf[i]; 179 u4_nm[k].nm[j] = '\0'; 180 /* printf("%d(%d): %s\n", k, j, &u4_nm[k].nm[0] ); */ 181 } 182 } 183