1/* Copyright (C) 1999-2003, 2005 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 aliases2.h table. */ 20 21#include <stdio.h> 22#include <stdlib.h> 23 24static void emit_encoding (FILE* out1, FILE* out2, const char* tag, const char* const* names, size_t n, const char* c_name) 25{ 26 static unsigned int counter = 0; 27 fprintf(out2," (int)(long)&((struct stringpool2_t *)0)->stringpool_%s_%u,\n",tag,counter); 28 for (; n > 0; names++, n--, counter++) { 29 fprintf(out1," S(%s_%u, \"",tag,counter); 30 /* Output *names in upper case. */ 31 { 32 const char* s = *names; 33 for (; *s; s++) { 34 unsigned char c = * (unsigned char *) s; 35 if (c >= 0x80) 36 exit(1); 37 if (c >= 'a' && c <= 'z') 38 c -= 'a'-'A'; 39 putc(c, out1); 40 } 41 } 42 fprintf(out1,"\", ei_%s )\n", c_name); 43 } 44} 45 46int main (int argc, char* argv[]) 47{ 48 const char * tag = (argc > 1 ? argv[1] : "xxx"); 49 FILE * stdout2 = fdopen(3, "w"); 50 if (stdout2 == NULL) 51 exit(1); 52#define DEFENCODING(xxx_names,xxx,xxx_ifuncs1,xxx_ifuncs2,xxx_ofuncs1,xxx_ofuncs2) \ 53 { \ 54 static const char* const names[] = BRACIFY xxx_names; \ 55 emit_encoding(stdout,stdout2,tag,names,sizeof(names)/sizeof(names[0]),#xxx); \ 56 } 57#define BRACIFY(...) { __VA_ARGS__ } 58#ifdef USE_AIX 59#include "encodings_aix.def" 60#endif 61#ifdef USE_OSF1 62#include "encodings_osf1.def" 63#endif 64#ifdef USE_DOS 65#include "encodings_dos.def" 66#endif 67#ifdef USE_EXTRA 68#include "encodings_extra.def" 69#endif 70#undef BRACIFY 71#undef DEFENCODING 72 if (ferror(stdout) || fclose(stdout) || ferror(stdout2) || fclose(stdout2)) 73 exit(1); 74 exit(0); 75} 76