lcgen.c revision 3f54fd611f536639ec30dd53c48e5ec1897cc7d9
359a38ce40498397028473d956691915ed3e849atavmjong-free/***********************************************************************
359a38ce40498397028473d956691915ed3e849atavmjong-free* This software is part of the ast package *
359a38ce40498397028473d956691915ed3e849atavmjong-free* Copyright (c) 1985-2011 AT&T Intellectual Property *
359a38ce40498397028473d956691915ed3e849atavmjong-free* and is licensed under the *
359a38ce40498397028473d956691915ed3e849atavmjong-free* Eclipse Public License, Version 1.0 *
359a38ce40498397028473d956691915ed3e849atavmjong-free* by AT&T Intellectual Property *
359a38ce40498397028473d956691915ed3e849atavmjong-free* A copy of the License is available at *
359a38ce40498397028473d956691915ed3e849atavmjong-free* http://www.eclipse.org/org/documents/epl-v10.html *
359a38ce40498397028473d956691915ed3e849atavmjong-free* (with md5 checksum b35adb5213ca9657e911e9befb180842) *
359a38ce40498397028473d956691915ed3e849atavmjong-free* Information and Software Systems Research *
359a38ce40498397028473d956691915ed3e849atavmjong-free* AT&T Research *
359a38ce40498397028473d956691915ed3e849atavmjong-free* Florham Park NJ *
359a38ce40498397028473d956691915ed3e849atavmjong-free* Glenn Fowler <gsf@research.att.com> *
359a38ce40498397028473d956691915ed3e849atavmjong-free* David Korn <dgk@research.att.com> *
359a38ce40498397028473d956691915ed3e849atavmjong-free* Phong Vo <kpv@research.att.com> *
359a38ce40498397028473d956691915ed3e849atavmjong-free***********************************************************************/
359a38ce40498397028473d956691915ed3e849atavmjong-free * generate <lc.h> implementation tables from lc.tab
359a38ce40498397028473d956691915ed3e849atavmjong-free * this must make it through vanilla cc with no -last
359a38ce40498397028473d956691915ed3e849atavmjong-free * code name ms-codepage
359a38ce40498397028473d956691915ed3e849atavmjong-free * code name alt1|alt2... charset|... attr1|attr2|...
359a38ce40498397028473d956691915ed3e849atavmjong-free * :territory:
359a38ce40498397028473d956691915ed3e849atavmjong-free * code name lang1|lang2...
359a38ce40498397028473d956691915ed3e849atavmjong-free * :abbreviation:
d1561c248f49dc3508ae9e6557fc0d371928e394Markus Engeltypedef struct Link_s
359a38ce40498397028473d956691915ed3e849atavmjong-freetypedef struct Table_s
359a38ce40498397028473d956691915ed3e849atavmjong-freetypedef struct Map_s
359a38ce40498397028473d956691915ed3e849atavmjong-free#define elementsof(x) (sizeof(x)/sizeof(x[0]))
359a38ce40498397028473d956691915ed3e849atavmjong-free#define newof(p,t,n,x) ((t*)malloc(sizeof(t)*(n)+(x)))
359a38ce40498397028473d956691915ed3e849atavmjong-freeenter(register Table_t* tab, register Link_t* v)
359a38ce40498397028473d956691915ed3e849atavmjong-free for (p = 0, x = tab->root; x; p = x, x = x->next)
359a38ce40498397028473d956691915ed3e849atavmjong-freelookup(register Table_t* tab, register char* s)
359a38ce40498397028473d956691915ed3e849atavmjong-freeregister char* s;
359a38ce40498397028473d956691915ed3e849atavmjong-freecopy(char** p, register char* f)
359a38ce40498397028473d956691915ed3e849atavmjong-freeregister char* f;
652485ad88d2a42f827c7e355220efeb3b2e37afLiam P. White register char* t;
359a38ce40498397028473d956691915ed3e849atavmjong-free while (*t++ = *f++);
359a38ce40498397028473d956691915ed3e849atavmjong-free register int c;
359a38ce40498397028473d956691915ed3e849atavmjong-free register char* s;
359a38ce40498397028473d956691915ed3e849atavmjong-free register char* b;
359a38ce40498397028473d956691915ed3e849atavmjong-free register char* e;
359a38ce40498397028473d956691915ed3e849atavmjong-free while (b < e)
359a38ce40498397028473d956691915ed3e849atavmjong-free if (!(s = part[i++]))
359a38ce40498397028473d956691915ed3e849atavmjong-free while ((c = *s++) && b < e)
359a38ce40498397028473d956691915ed3e849atavmjong-free if (c == '|')
359a38ce40498397028473d956691915ed3e849atavmjong-free else if (!isalnum(c))
359a38ce40498397028473d956691915ed3e849atavmjong-free fprintf(f, "#ifdef %s\n%s,\n#else\n", buf, buf);
359a38ce40498397028473d956691915ed3e849atavmjong-free while (n-- > 0)
359a38ce40498397028473d956691915ed3e849atavmjong-free register char* s;
359a38ce40498397028473d956691915ed3e849atavmjong-free register char** vp;
359a38ce40498397028473d956691915ed3e849atavmjong-free register char** ve;
359a38ce40498397028473d956691915ed3e849atavmjong-free if (!(hdr = *argv++) || !(lib = *argv++) || *argv)
359a38ce40498397028473d956691915ed3e849atavmjong-free fprintf(stderr, "%s: { hdr lib tab } arguments expected\n", command);
359a38ce40498397028473d956691915ed3e849atavmjong-free fprintf(stderr, "%s: %s: cannot write\n", command, hdr);
359a38ce40498397028473d956691915ed3e849atavmjong-free fprintf(stderr, "%s: %s: cannot write\n", command, lib);
359a38ce40498397028473d956691915ed3e849atavmjong-free fprintf(hf, "/* : : generated by %s : : */\n", command);
652485ad88d2a42f827c7e355220efeb3b2e37afLiam P. White fprintf(hf, "#define LC_abbreviated\t\t0x00001\n");
652485ad88d2a42f827c7e355220efeb3b2e37afLiam P. White fprintf(hf, "#define LC_checked\t\t0x00002\n");
652485ad88d2a42f827c7e355220efeb3b2e37afLiam P. White fprintf(hf, "#define LC_default\t\t0x00008\n");
652485ad88d2a42f827c7e355220efeb3b2e37afLiam P. White fprintf(hf, "#define LC_defined\t\t0x00010\n");
652485ad88d2a42f827c7e355220efeb3b2e37afLiam P. White fprintf(hf, "#define LC_primary\t\t0x00040\n");
652485ad88d2a42f827c7e355220efeb3b2e37afLiam P. White fprintf(hf, "#define LC_qualified\t\t0x00080\n");
652485ad88d2a42f827c7e355220efeb3b2e37afLiam P. White fprintf(hf, "#define LC_undefined\t\t0x00100\n");
652485ad88d2a42f827c7e355220efeb3b2e37afLiam P. White fprintf(hf, "#define LC_utf8\t\t\t0x00200\n");
652485ad88d2a42f827c7e355220efeb3b2e37afLiam P. White fprintf(hf, "#define LC_verbose\t\t0x00400\n");
652485ad88d2a42f827c7e355220efeb3b2e37afLiam P. White fprintf(hf, "#define LC_setlocale\t\t0x10000\n");
652485ad88d2a42f827c7e355220efeb3b2e37afLiam P. White fprintf(hf, "#define LC_setenv\t\t0x20000\n");
652485ad88d2a42f827c7e355220efeb3b2e37afLiam P. White fprintf(hf, "#define LC_user\t\t\t0x40000\n");
652485ad88d2a42f827c7e355220efeb3b2e37afLiam P. White fprintf(lf, "/* : : generated by %s : : */\n", command);
652485ad88d2a42f827c7e355220efeb3b2e37afLiam P. White if (!*s || *s == '#')
652485ad88d2a42f827c7e355220efeb3b2e37afLiam P. White for (*s++ = 0; isspace(*s); s++);
switch (type)
case CHARSET:
case TERRITORY:
if (territory_language_max < i)
case LANGUAGE:
if (language_attribute_max < i)
case MAP:
if (!language_attribute_max)
if (!territory_language_max)
for (i = 0; i < language_attribute_max; i++)
for (i = 0; i < language_attribute_max; i++)
for (; i < language_attribute_max; i++)
for (; i < territory_language_max; i++)
for (; i < territory_language_max; i++)