nexmon – Blame information for rev 1
?pathlinks?
Rev | Author | Line No. | Line |
---|---|---|---|
1 | office | 1 | /* Copyright (C) 1999-2001, 2003, 2005, 2008 Free Software Foundation, Inc. |
2 | This file is part of the GNU LIBICONV Library. |
||
3 | |||
4 | The GNU LIBICONV Library is free software; you can redistribute it |
||
5 | and/or modify it under the terms of the GNU Library General Public |
||
6 | License as published by the Free Software Foundation; either version 2 |
||
7 | of the License, or (at your option) any later version. |
||
8 | |||
9 | The GNU LIBICONV Library is distributed in the hope that it will be |
||
10 | useful, but WITHOUT ANY WARRANTY; without even the implied warranty of |
||
11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
||
12 | Library General Public License for more details. |
||
13 | |||
14 | You should have received a copy of the GNU Library General Public |
||
15 | License along with the GNU LIBICONV Library; see the file COPYING.LIB. |
||
16 | If not, write to the Free Software Foundation, Inc., 51 Franklin Street, |
||
17 | Fifth Floor, Boston, MA 02110-1301, USA. */ |
||
18 | |||
19 | /* Creates the aliases.gperf table. */ |
||
20 | |||
21 | #include <stdio.h> |
||
22 | #include <stdlib.h> |
||
23 | |||
24 | static void emit_alias (FILE* out1, const char* alias, const char* c_name) |
||
25 | { |
||
26 | /* Output alias in upper case. */ |
||
27 | const char* s = alias; |
||
28 | for (; *s; s++) { |
||
29 | unsigned char c = * (unsigned char *) s; |
||
30 | if (c >= 0x80) |
||
31 | exit(1); |
||
32 | if (c >= 'a' && c <= 'z') |
||
33 | c -= 'a'-'A'; |
||
34 | putc(c, out1); |
||
35 | } |
||
36 | fprintf(out1,", ei_%s\n", c_name); |
||
37 | } |
||
38 | |||
39 | static void emit_encoding (FILE* out1, FILE* out2, const char* const* names, size_t n, const char* c_name) |
||
40 | { |
||
41 | fprintf(out2,"grep 'sizeof(\""); |
||
42 | /* Output *names in upper case. */ |
||
43 | { |
||
44 | const char* s = *names; |
||
45 | for (; *s; s++) { |
||
46 | unsigned char c = * (unsigned char *) s; |
||
47 | if (c >= 0x80) |
||
48 | exit(1); |
||
49 | if (c >= 'a' && c <= 'z') |
||
50 | c -= 'a'-'A'; |
||
51 | putc(c, out2); |
||
52 | } |
||
53 | } |
||
54 | fprintf(out2,"\")' tmp.h | sed -e 's|^.*\\(stringpool_str[0-9]*\\).*$| (int)(long)\\&((struct stringpool_t *)0)->\\1,|'\n"); |
||
55 | for (; n > 0; names++, n--) |
||
56 | emit_alias(out1, *names, c_name); |
||
57 | } |
||
58 | |||
59 | int main () |
||
60 | { |
||
61 | FILE* stdout2; |
||
62 | |||
63 | printf("struct alias { int name; unsigned int encoding_index; };\n"); |
||
64 | printf("%%struct-type\n"); |
||
65 | printf("%%language=ANSI-C\n"); |
||
66 | printf("%%define hash-function-name aliases_hash\n"); |
||
67 | printf("%%define lookup-function-name aliases_lookup\n"); |
||
68 | printf("%%7bit\n"); |
||
69 | printf("%%readonly-tables\n"); |
||
70 | printf("%%global-table\n"); |
||
71 | printf("%%define word-array-name aliases\n"); |
||
72 | printf("%%pic\n"); |
||
73 | printf("%%%%\n"); |
||
74 | |||
75 | #define DEFENCODING(xxx_names,xxx,xxx_ifuncs1,xxx_ifuncs2,xxx_ofuncs1,xxx_ofuncs2) \ |
||
76 | { \ |
||
77 | static const char* const names[] = BRACIFY xxx_names; \ |
||
78 | emit_encoding(stdout,stdout2,names,sizeof(names)/sizeof(names[0]),#xxx); \ |
||
79 | } |
||
80 | #define BRACIFY(...) { __VA_ARGS__ } |
||
81 | #define DEFALIAS(xxx_alias,xxx) emit_alias(stdout,xxx_alias,#xxx); |
||
82 | |||
83 | stdout2 = fdopen(3, "w"); |
||
84 | if (stdout2 == NULL) |
||
85 | exit(1); |
||
86 | #include "encodings.def" |
||
87 | if (fclose(stdout2)) |
||
88 | exit(1); |
||
89 | |||
90 | stdout2 = fdopen(4, "w"); |
||
91 | if (stdout2 == NULL) |
||
92 | exit(1); |
||
93 | #include "encodings_local.def" |
||
94 | if (fclose(stdout2)) |
||
95 | exit(1); |
||
96 | |||
97 | #undef DEFALIAS |
||
98 | #undef BRACIFY |
||
99 | #undef DEFENCODING |
||
100 | |||
101 | if (ferror(stdout) || fclose(stdout)) |
||
102 | exit(1); |
||
103 | exit(0); |
||
104 | } |