Annotation of embedaddon/libiconv/lib/genaliases.c, revision 1.1
1.1 ! misho 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: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>