gen.c revision dfea6f0eaadb9287cfcdc1566ac2f997af1b075a
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews/*
8eea0575a0229a40a2c82c79fa0a0aa9ce0f494aBob Halley * Copyright (C) 1998, 1999 Internet Software Consortium.
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews *
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews * Permission to use, copy, modify, and distribute this software for any
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews * purpose with or without fee is hereby granted, provided that the above
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews * copyright notice and this permission notice appear in all copies.
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews *
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews * SOFTWARE.
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews */
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews
dfea6f0eaadb9287cfcdc1566ac2f997af1b075aBob Halley /* $Id: gen.c,v 1.21 1999/07/03 20:55:16 halley Exp $ */
dfea6f0eaadb9287cfcdc1566ac2f997af1b075aBob Halley
dfea6f0eaadb9287cfcdc1566ac2f997af1b075aBob Halley#include <config.h>
3761c433912beabe43abeed2c3513b6201c59f64Mark Andrews
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews#include <sys/types.h>
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews#include <ctype.h>
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews#include <dirent.h>
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews#include <malloc.h>
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews#include <stdio.h>
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews#include <stdlib.h>
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews#include <string.h>
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews#include <time.h>
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews#include <unistd.h>
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews#define FROMTEXTDECL "dns_rdataclass_t class, dns_rdatatype_t type, isc_lex_t *lexer, dns_name_t *origin, isc_boolean_t downcase, isc_buffer_t *target"
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews#define FROMTEXTARGS "class, type, lexer, origin, downcase, target"
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews#define FROMTEXTCLASS "class"
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews#define FROMTEXTTYPE "type"
3d5cad69ec20157912e95cf3b79316dfb0a314f3Mark Andrews#define FROMTEXTDEF "use_default = ISC_TRUE"
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews
5fc7ba3e1ac5d72239e9971e0f469dd5796738f9Andreas Gustafsson#define TOTEXTDECL "dns_rdata_t *rdata, dns_rdata_textctx_t *tctx, isc_buffer_t *target"
5fc7ba3e1ac5d72239e9971e0f469dd5796738f9Andreas Gustafsson#define TOTEXTARGS "rdata, tctx, target"
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews#define TOTEXTCLASS "rdata->class"
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews#define TOTEXTTYPE "rdata->type"
3d5cad69ec20157912e95cf3b79316dfb0a314f3Mark Andrews#define TOTEXTDEF "use_default = ISC_TRUE"
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews#define FROMWIREDECL "dns_rdataclass_t class, dns_rdatatype_t type, isc_buffer_t *source, dns_decompress_t *dctx, isc_boolean_t downcase, isc_buffer_t *target"
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews#define FROMWIREARGS "class, type, source, dctx, downcase, target"
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews#define FROMWIRECLASS "class"
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews#define FROMWIRETYPE "type"
3d5cad69ec20157912e95cf3b79316dfb0a314f3Mark Andrews#define FROMWIREDEF "use_default = ISC_TRUE"
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews#define TOWIREDECL "dns_rdata_t *rdata, dns_compress_t *cctx, isc_buffer_t *target"
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews#define TOWIREARGS "rdata, cctx, target"
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews#define TOWIRECLASS "rdata->class"
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews#define TOWIRETYPE "rdata->type"
3d5cad69ec20157912e95cf3b79316dfb0a314f3Mark Andrews#define TOWIREDEF "use_default = ISC_TRUE"
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews#define FROMSTRUCTDECL "dns_rdataclass_t class, dns_rdatatype_t type, void *source, isc_buffer_t *target"
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews#define FROMSTRUCTARGS "class, type, source, target"
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews#define FROMSTRUCTCLASS "class"
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews#define FROMSTRUCTTYPE "type"
3d5cad69ec20157912e95cf3b79316dfb0a314f3Mark Andrews#define FROMSTRUCTDEF "use_default = ISC_TRUE"
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews
94a3bcd132e515b4baa0884ba9dd0f361d2e17bcMark Andrews#define TOSTRUCTDECL "dns_rdata_t *rdata, void *target, isc_mem_t *mctx"
94a3bcd132e515b4baa0884ba9dd0f361d2e17bcMark Andrews#define TOSTRUCTARGS "rdata, target, mctx"
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews#define TOSTRUCTCLASS "rdata->class"
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews#define TOSTRUCTTYPE "rdata->type"
3d5cad69ec20157912e95cf3b79316dfb0a314f3Mark Andrews#define TOSTRUCTDEF "use_default = ISC_TRUE"
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews
94a3bcd132e515b4baa0884ba9dd0f361d2e17bcMark Andrews#define FREESTRUCTDECL "void *source"
94a3bcd132e515b4baa0884ba9dd0f361d2e17bcMark Andrews#define FREESTRUCTARGS "source"
94a3bcd132e515b4baa0884ba9dd0f361d2e17bcMark Andrews#define FREESTRUCTCLASS "common->rdclass"
94a3bcd132e515b4baa0884ba9dd0f361d2e17bcMark Andrews#define FREESTRUCTTYPE "common->rdtype"
94a3bcd132e515b4baa0884ba9dd0f361d2e17bcMark Andrews#define FREESTRUCTDEF NULL
94a3bcd132e515b4baa0884ba9dd0f361d2e17bcMark Andrews
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews#define COMPAREDECL "dns_rdata_t *rdata1, dns_rdata_t *rdata2"
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews#define COMPAREARGS "rdata1, rdata2"
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews#define COMPARECLASS "rdata1->class"
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews#define COMPARETYPE "rdata1->type"
3d5cad69ec20157912e95cf3b79316dfb0a314f3Mark Andrews#define COMPAREDEF "use_default = ISC_TRUE"
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrewschar copyright[] =
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews"/*\n\
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews * Copyright (C) 1998%s Internet Software Consortium.\n\
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews *\n\
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews * Permission to use, copy, modify, and distribute this software for any\n\
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews * purpose with or without fee is hereby granted, provided that the above\n\
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews * copyright notice and this permission notice appear in all copies.\n\
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews *\n\
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews * THE SOFTWARE IS PROVIDED \"AS IS\" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS\n\
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES\n\
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE\n\
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL\n\
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR\n\
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS\n\
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS\n\
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews * SOFTWARE.\n\
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews */\n\
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews\n\
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews /* THIS FILE IS AUTOMATICALLY GENERATED: DO NOT EDIT */\n\
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews\n";
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrewsstruct cc {
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews struct cc *next;
a98551ef592e9be6008e0141ceeb32efd586c5efMark Andrews int class;
a98551ef592e9be6008e0141ceeb32efd586c5efMark Andrews char classname[11];
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews} *classes;
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrewsstruct tt {
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews struct tt *next;
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews int class;
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews int type;
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews char classname[11];
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews char typename[11];
6d5dcd0dc9bdbd679282b1ffc47987d24c3a1346Bob Halley char dirname[256]; /* XXX Should be max path length */
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews} *types;
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrewschar * upper(char *);
217f572018871cdf09db052a676b9933512cdbfaMark Andrewschar * funname(char *, char *);
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrewsvoid doswitch(char *, char *, char *, char *, char *, char *);
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrewsvoid dodecl(char *, char *, char *);
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrewsvoid add(int, char *, int, char *, char *);
4fd3e3482c7e4ce01e2cf28f13e0152c8e50d746Mark Andrewsvoid sd(int, char *, char *, char);
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrewschar *
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrewsupper(char *s) {
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews static char buf[11];
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews char *b = buf;
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews char c;
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews while ((c = *s++)) {
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews *b++ = islower(c) ? toupper(c) : c;
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews }
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews *b = '\0';
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews return (buf);
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews}
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews
217f572018871cdf09db052a676b9933512cdbfaMark Andrewschar *
217f572018871cdf09db052a676b9933512cdbfaMark Andrewsfunname(char *s, char *buf) {
217f572018871cdf09db052a676b9933512cdbfaMark Andrews char *b = buf;
217f572018871cdf09db052a676b9933512cdbfaMark Andrews char c;
217f572018871cdf09db052a676b9933512cdbfaMark Andrews
217f572018871cdf09db052a676b9933512cdbfaMark Andrews while ((c = *s++)) {
217f572018871cdf09db052a676b9933512cdbfaMark Andrews *b++ = (c == '-') ? '_' : c;
217f572018871cdf09db052a676b9933512cdbfaMark Andrews }
217f572018871cdf09db052a676b9933512cdbfaMark Andrews *b = '\0';
217f572018871cdf09db052a676b9933512cdbfaMark Andrews return (buf);
217f572018871cdf09db052a676b9933512cdbfaMark Andrews}
217f572018871cdf09db052a676b9933512cdbfaMark Andrews
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrewsvoid
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrewsdoswitch(char *name, char *function, char *args,
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews char *tsw, char *csw, char *res)
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews{
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews struct tt *tt;
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews int first = 1;
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews int lasttype = 0;
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews int subswitch = 0;
217f572018871cdf09db052a676b9933512cdbfaMark Andrews char buf1[11], buf2[11];
94a3bcd132e515b4baa0884ba9dd0f361d2e17bcMark Andrews char *result = " result =";
94a3bcd132e515b4baa0884ba9dd0f361d2e17bcMark Andrews
94a3bcd132e515b4baa0884ba9dd0f361d2e17bcMark Andrews if (res == NULL)
94a3bcd132e515b4baa0884ba9dd0f361d2e17bcMark Andrews result = "";
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews for (tt = types; tt != NULL ; tt = tt->next) {
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews if (first) {
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews fprintf(stdout, "\n#define %s \\\n", name);
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews fprintf(stdout, "\tswitch (%s) { \\\n" /*}*/, tsw);
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews first = 0;
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews }
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews if (tt->type != lasttype && subswitch) {
94a3bcd132e515b4baa0884ba9dd0f361d2e17bcMark Andrews if (res == NULL)
94a3bcd132e515b4baa0884ba9dd0f361d2e17bcMark Andrews fprintf(stdout, "\t\tdefault: break; \\\n");
94a3bcd132e515b4baa0884ba9dd0f361d2e17bcMark Andrews else
94a3bcd132e515b4baa0884ba9dd0f361d2e17bcMark Andrews fprintf(stdout,
94a3bcd132e515b4baa0884ba9dd0f361d2e17bcMark Andrews "\t\tdefault: %s; break; \\\n", res);
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews fputs(/*{*/ "\t\t} \\\n", stdout);
611a37e72daff14666f7dcc781674775e0c8e5eaMark Andrews fputs("\t\tbreak; \\\n", stdout);
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews subswitch = 0;
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews }
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews if (tt->class && tt->type != lasttype) {
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews fprintf(stdout, "\tcase %d: switch (%s) { \\\n" /*}*/,
7c89c5c5747cacffddc6dfff44bbb5010d1beb3fMark Andrews tt->type, csw);
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews subswitch = 1;
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews }
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews if (tt->class == 0)
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews fprintf(stdout,
94a3bcd132e515b4baa0884ba9dd0f361d2e17bcMark Andrews "\tcase %d:%s %s_%s(%s); break;",
94a3bcd132e515b4baa0884ba9dd0f361d2e17bcMark Andrews tt->type, result, function,
217f572018871cdf09db052a676b9933512cdbfaMark Andrews funname(tt->typename, buf1), args);
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews else
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews fprintf(stdout,
94a3bcd132e515b4baa0884ba9dd0f361d2e17bcMark Andrews "\t\tcase %d:%s %s_%s_%s(%s); break;",
94a3bcd132e515b4baa0884ba9dd0f361d2e17bcMark Andrews tt->class, result, function,
217f572018871cdf09db052a676b9933512cdbfaMark Andrews funname(tt->classname, buf1),
217f572018871cdf09db052a676b9933512cdbfaMark Andrews funname(tt->typename, buf2), args);
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews fputs(" \\\n", stdout);
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews lasttype = tt->type;
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews }
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews if (subswitch) {
94a3bcd132e515b4baa0884ba9dd0f361d2e17bcMark Andrews if (res == NULL)
94a3bcd132e515b4baa0884ba9dd0f361d2e17bcMark Andrews fprintf(stdout, "\t\tdefault: break; \\\n");
94a3bcd132e515b4baa0884ba9dd0f361d2e17bcMark Andrews else
94a3bcd132e515b4baa0884ba9dd0f361d2e17bcMark Andrews fprintf(stdout, "\t\tdefault: %s; break; \\\n", res);
ffe74cc719aa0f10c38fbc1f2f3ea7db0960cb8fMark Andrews fputs(/*{*/ "\t\t} \\\n", stdout);
611a37e72daff14666f7dcc781674775e0c8e5eaMark Andrews fputs("\t\tbreak; \\\n", stdout);
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews }
94a3bcd132e515b4baa0884ba9dd0f361d2e17bcMark Andrews if (first) {
94a3bcd132e515b4baa0884ba9dd0f361d2e17bcMark Andrews if (res == NULL)
94a3bcd132e515b4baa0884ba9dd0f361d2e17bcMark Andrews fprintf(stdout, "\n#define %s\n", name);
94a3bcd132e515b4baa0884ba9dd0f361d2e17bcMark Andrews else
94a3bcd132e515b4baa0884ba9dd0f361d2e17bcMark Andrews fprintf(stdout, "\n#define %s %s;\n", name, res);
94a3bcd132e515b4baa0884ba9dd0f361d2e17bcMark Andrews } else {
94a3bcd132e515b4baa0884ba9dd0f361d2e17bcMark Andrews if (res == NULL)
94a3bcd132e515b4baa0884ba9dd0f361d2e17bcMark Andrews fprintf(stdout, "\tdefault: break; \\\n");
94a3bcd132e515b4baa0884ba9dd0f361d2e17bcMark Andrews else
94a3bcd132e515b4baa0884ba9dd0f361d2e17bcMark Andrews fprintf(stdout, "\tdefault: %s; break; \\\n", res);
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews fputs(/*{*/ "\t}\n", stdout);
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews }
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews}
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrewsvoid
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrewsdodecl(char *type, char *function, char *args) {
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews struct tt *tt;
217f572018871cdf09db052a676b9933512cdbfaMark Andrews char buf1[11], buf2[11];
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews fputs("\n", stdout);
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews for (tt = types; tt ; tt = tt->next)
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews if (tt->class)
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews fprintf(stdout,
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews "static %s %s_%s_%s(%s);\n",
217f572018871cdf09db052a676b9933512cdbfaMark Andrews type, function,
217f572018871cdf09db052a676b9933512cdbfaMark Andrews funname(tt->classname, buf1),
217f572018871cdf09db052a676b9933512cdbfaMark Andrews funname(tt->typename, buf2), args);
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews else
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews fprintf(stdout,
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews "static %s %s_%s(%s);\n",
217f572018871cdf09db052a676b9933512cdbfaMark Andrews type, function,
217f572018871cdf09db052a676b9933512cdbfaMark Andrews funname(tt->typename, buf1), args);
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews}
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrewsvoid
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrewsadd(int class, char *classname, int type, char *typename, char *dirname) {
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews struct tt *newtt = (struct tt *)malloc(sizeof *newtt);
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews struct tt *tt, *oldtt;
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews struct cc *newcc;
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews struct cc *cc, *oldcc;
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews if (newtt == NULL)
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews exit(1);
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews newtt->next = NULL;
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews newtt->class = class;
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews newtt->type = type;
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews strcpy(newtt->classname, classname);
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews strcpy(newtt->typename, typename);
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews strcpy(newtt->dirname, dirname);
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews tt = types;
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews oldtt = NULL;
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews
3d5cad69ec20157912e95cf3b79316dfb0a314f3Mark Andrews while ((tt != NULL) && (tt->type < type)) {
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews oldtt = tt;
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews tt = tt->next;
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews }
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews
3d5cad69ec20157912e95cf3b79316dfb0a314f3Mark Andrews while ((tt != NULL) && (tt->type == type) && (tt->class < class)) {
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews if (strcmp(tt->typename, typename) != 0)
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews exit(1);
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews oldtt = tt;
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews tt = tt->next;
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews }
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews
3d5cad69ec20157912e95cf3b79316dfb0a314f3Mark Andrews if ((tt != NULL) && (tt->type == type) && (tt->class == class))
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews exit(1);
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews newtt->next = tt;
3d5cad69ec20157912e95cf3b79316dfb0a314f3Mark Andrews if (oldtt != NULL)
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews oldtt->next = newtt;
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews else
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews types = newtt;
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews /* do a class switch for this type */
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews if (class == 0)
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews return;
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews newcc = (struct cc *)malloc(sizeof *newcc);
a98551ef592e9be6008e0141ceeb32efd586c5efMark Andrews newcc->class = class;
a98551ef592e9be6008e0141ceeb32efd586c5efMark Andrews strcpy(newcc->classname, classname);
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews cc = classes;
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews oldcc = NULL;
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews
a98551ef592e9be6008e0141ceeb32efd586c5efMark Andrews while ((cc != NULL) && (cc->class < class)) {
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews oldcc = cc;
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews cc = cc->next;
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews }
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews
a98551ef592e9be6008e0141ceeb32efd586c5efMark Andrews if ((cc != NULL) && cc->class == class) {
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews free((char *)newcc);
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews return;
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews }
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews newcc->next = cc;
3d5cad69ec20157912e95cf3b79316dfb0a314f3Mark Andrews if (oldcc != NULL)
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews oldcc->next = newcc;
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews else
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews classes = newcc;
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews}
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrewsvoid
4fd3e3482c7e4ce01e2cf28f13e0152c8e50d746Mark Andrewssd(int class, char *classname, char *dir, char filetype) {
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews char buf[sizeof "0123456789_65535.h"];
4fd3e3482c7e4ce01e2cf28f13e0152c8e50d746Mark Andrews char fmt[sizeof "%10[-0-9a-z]_%d.h"];
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews DIR *d;
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews int type;
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews char typename[11];
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews struct dirent *dp;
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews if ((d = opendir(dir)) == NULL)
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews return;
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews
4fd3e3482c7e4ce01e2cf28f13e0152c8e50d746Mark Andrews sprintf(fmt,"%s%c", "%10[-0-9a-z]_%d.", filetype);
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews while ((dp = readdir(d)) != NULL) {
4fd3e3482c7e4ce01e2cf28f13e0152c8e50d746Mark Andrews if (sscanf(dp->d_name, fmt, typename, &type) != 2)
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews continue;
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews if ((type > 65535) || (type < 0))
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews continue;
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews
4fd3e3482c7e4ce01e2cf28f13e0152c8e50d746Mark Andrews sprintf(buf, "%s_%d.%c", typename, type, filetype);
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews if (strcmp(buf, dp->d_name) != 0)
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews continue;
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews add(class, classname, type, typename, dir);
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews }
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews closedir(d);
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews}
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrewsint
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrewsmain(int argc, char **argv) {
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews DIR *d;
6d5dcd0dc9bdbd679282b1ffc47987d24c3a1346Bob Halley char buf[256]; /* XXX Should be max path length */
6d5dcd0dc9bdbd679282b1ffc47987d24c3a1346Bob Halley char srcdir[256]; /* XXX Should be max path length */
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews int class;
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews char classname[11];
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews struct dirent *dp;
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews struct tt *tt;
a98551ef592e9be6008e0141ceeb32efd586c5efMark Andrews struct cc *cc;
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews struct tm *tm;
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews time_t now;
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews char year[11];
bfb2a81b65579882a80855c279cedc45aebd62e8Mark Andrews int lasttype;
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews int code = 1;
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews int class_enum = 0;
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews int type_enum = 0;
4fd3e3482c7e4ce01e2cf28f13e0152c8e50d746Mark Andrews int structs = 0;
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews int c;
217f572018871cdf09db052a676b9933512cdbfaMark Andrews char buf1[11];
4fd3e3482c7e4ce01e2cf28f13e0152c8e50d746Mark Andrews char filetype = 'c';
4fd3e3482c7e4ce01e2cf28f13e0152c8e50d746Mark Andrews FILE *fd;
94a3bcd132e515b4baa0884ba9dd0f361d2e17bcMark Andrews char *prefix = NULL;
94a3bcd132e515b4baa0884ba9dd0f361d2e17bcMark Andrews char *suffix = NULL;
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews
6d5dcd0dc9bdbd679282b1ffc47987d24c3a1346Bob Halley strcpy(srcdir, "");
94a3bcd132e515b4baa0884ba9dd0f361d2e17bcMark Andrews while ((c = getopt(argc, argv, "cits:P:S:")) != -1)
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews switch (c) {
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews case 'c':
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews code = 0;
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews type_enum = 0;
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews class_enum = 1;
4fd3e3482c7e4ce01e2cf28f13e0152c8e50d746Mark Andrews filetype = 'c';
4fd3e3482c7e4ce01e2cf28f13e0152c8e50d746Mark Andrews structs = 0;
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews break;
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews case 't':
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews code = 0;
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews class_enum = 0;
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews type_enum = 1;
4fd3e3482c7e4ce01e2cf28f13e0152c8e50d746Mark Andrews filetype = 'c';
4fd3e3482c7e4ce01e2cf28f13e0152c8e50d746Mark Andrews structs = 0;
4fd3e3482c7e4ce01e2cf28f13e0152c8e50d746Mark Andrews break;
4fd3e3482c7e4ce01e2cf28f13e0152c8e50d746Mark Andrews case 'i':
4fd3e3482c7e4ce01e2cf28f13e0152c8e50d746Mark Andrews code = 0;
4fd3e3482c7e4ce01e2cf28f13e0152c8e50d746Mark Andrews class_enum = 0;
4fd3e3482c7e4ce01e2cf28f13e0152c8e50d746Mark Andrews type_enum = 0;
4fd3e3482c7e4ce01e2cf28f13e0152c8e50d746Mark Andrews structs = 1;
4fd3e3482c7e4ce01e2cf28f13e0152c8e50d746Mark Andrews filetype = 'h';
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews break;
6d5dcd0dc9bdbd679282b1ffc47987d24c3a1346Bob Halley case 's':
6d5dcd0dc9bdbd679282b1ffc47987d24c3a1346Bob Halley sprintf(srcdir, "%s/", optarg);
6d5dcd0dc9bdbd679282b1ffc47987d24c3a1346Bob Halley break;
94a3bcd132e515b4baa0884ba9dd0f361d2e17bcMark Andrews case 'P':
94a3bcd132e515b4baa0884ba9dd0f361d2e17bcMark Andrews prefix = optarg;
94a3bcd132e515b4baa0884ba9dd0f361d2e17bcMark Andrews break;
94a3bcd132e515b4baa0884ba9dd0f361d2e17bcMark Andrews case 'S':
94a3bcd132e515b4baa0884ba9dd0f361d2e17bcMark Andrews suffix = optarg;
94a3bcd132e515b4baa0884ba9dd0f361d2e17bcMark Andrews break;
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews case '?':
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews exit(1);
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews }
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews
6d5dcd0dc9bdbd679282b1ffc47987d24c3a1346Bob Halley sprintf(buf, "%srdata", srcdir);
6d5dcd0dc9bdbd679282b1ffc47987d24c3a1346Bob Halley if ((d = opendir(buf)) == NULL)
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews exit(1);
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews while ((dp = readdir(d)) != NULL) {
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews if (sscanf(dp->d_name, "%10[0-9a-z]_%d",
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews classname, &class) != 2)
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews continue;
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews if ((class > 65535) || (class < 0))
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews continue;
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews
6d5dcd0dc9bdbd679282b1ffc47987d24c3a1346Bob Halley sprintf(buf, "%srdata/%s_%d", srcdir, classname, class);
6d5dcd0dc9bdbd679282b1ffc47987d24c3a1346Bob Halley if (strcmp(buf + 6 + strlen(srcdir), dp->d_name) != 0)
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews continue;
4fd3e3482c7e4ce01e2cf28f13e0152c8e50d746Mark Andrews sd(class, classname, buf, filetype);
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews }
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews closedir(d);
4fd3e3482c7e4ce01e2cf28f13e0152c8e50d746Mark Andrews sprintf(buf, "%srdata/generic", srcdir);
4fd3e3482c7e4ce01e2cf28f13e0152c8e50d746Mark Andrews sd(0, "", buf, filetype);
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews if (time(&now) != -1) {
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews if ((tm = localtime(&now)) != NULL && tm->tm_year > 98)
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews sprintf(year, "-%d", tm->tm_year + 1900);
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews else
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews year[0] = 0;
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews } else
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews year[0] = 0;
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews fprintf(stdout, copyright, year);
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews if (code) {
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews dodecl("dns_result_t", "fromtext", FROMTEXTDECL);
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews dodecl("dns_result_t", "totext", TOTEXTDECL);
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews dodecl("dns_result_t", "fromwire", FROMWIREDECL);
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews dodecl("dns_result_t", "towire", TOWIREDECL);
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews dodecl("int", "compare", COMPAREDECL);
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews dodecl("dns_result_t", "fromstruct", FROMSTRUCTDECL);
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews dodecl("dns_result_t", "tostruct", TOSTRUCTDECL);
94a3bcd132e515b4baa0884ba9dd0f361d2e17bcMark Andrews dodecl("void", "freestruct", FREESTRUCTDECL);
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews doswitch("FROMTEXTSWITCH", "fromtext", FROMTEXTARGS,
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews FROMTEXTTYPE, FROMTEXTCLASS, FROMTEXTDEF);
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews doswitch("TOTEXTSWITCH", "totext", TOTEXTARGS,
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews TOTEXTTYPE, TOTEXTCLASS, TOTEXTDEF);
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews doswitch("FROMWIRESWITCH", "fromwire", FROMWIREARGS,
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews FROMWIRETYPE, FROMWIRECLASS, FROMWIREDEF);
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews doswitch("TOWIRESWITCH", "towire", TOWIREARGS,
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews TOWIRETYPE, TOWIRECLASS, TOWIREDEF);
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews doswitch("COMPARESWITCH", "compare", COMPAREARGS,
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews COMPARETYPE, COMPARECLASS, COMPAREDEF);
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews doswitch("FROMSTRUCTSWITCH", "fromstruct", FROMSTRUCTARGS,
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews FROMSTRUCTTYPE, FROMSTRUCTCLASS, FROMSTRUCTDEF);
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews doswitch("TOSTRUCTSWITCH", "tostruct", TOSTRUCTARGS,
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews TOSTRUCTTYPE, TOSTRUCTCLASS, TOSTRUCTDEF);
94a3bcd132e515b4baa0884ba9dd0f361d2e17bcMark Andrews doswitch("FREESTRUCTSWITCH", "freestruct", FREESTRUCTARGS,
94a3bcd132e515b4baa0884ba9dd0f361d2e17bcMark Andrews FREESTRUCTTYPE, FREESTRUCTCLASS, FREESTRUCTDEF);
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews fprintf(stdout, "\n#define TYPENAMES%s\n",
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews types != NULL ? " \\" : "");
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews lasttype = 0;
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews for (tt = types; tt != NULL ; tt = tt->next)
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews if (tt->type != lasttype)
d9e3898f8e41958387f57e855d4dd460ebf38324Michael Graff fprintf(stdout, "\t{ %d, \"%s\", 0 },%s\n",
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews lasttype = tt->type,
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews upper(tt->typename),
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews tt->next != NULL ? " \\" : "");
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews fputs("\n", stdout);
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews fprintf(stdout, "\n#define CLASSNAMES%s\n",
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews classes != NULL ? " \\" : "");
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews for (cc = classes; cc != NULL; cc = cc->next)
d9e3898f8e41958387f57e855d4dd460ebf38324Michael Graff fprintf(stdout, "\t{ %d, \"%s\", 0 },%s\n", cc->class,
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews upper(cc->classname),
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews cc->next != NULL ? " \\" : "");
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews fputs("\n", stdout);
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews for (tt = types; tt != NULL ; tt = tt->next)
4fd3e3482c7e4ce01e2cf28f13e0152c8e50d746Mark Andrews fprintf(stdout, "#include \"%s/%s_%d.c\"\n",
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews tt->dirname, tt->typename, tt->type);
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews } else if (type_enum) {
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews fprintf(stdout, "#ifndef TYPEENUM\n");
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews fprintf(stdout, "#define TYPEENUM%s\n",
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews types != NULL ? " \\" : "");
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews lasttype = 0;
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews for (tt = types; tt != NULL ; tt = tt->next)
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews if (tt->type != lasttype)
8d3e74b1683f714a484bbcf73249e8ee470e36d7Mark Andrews fprintf(stdout, "\t dns_rdatatype_%s = %d,%s\n",
217f572018871cdf09db052a676b9933512cdbfaMark Andrews funname(tt->typename, buf1),
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews lasttype = tt->type,
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews tt->next != NULL ? " \\" : "");
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews fprintf(stdout, "#endif /* TYPEENUM */\n");
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews } else if (class_enum) {
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews fprintf(stdout, "#ifndef CLASSENUM\n");
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews fprintf(stdout, "#define CLASSENUM%s\n",
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews classes != NULL ? " \\" : "");
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews for (cc = classes; cc != NULL; cc = cc->next)
8d3e74b1683f714a484bbcf73249e8ee470e36d7Mark Andrews fprintf(stdout, "\t dns_rdataclass_%s = %d,%s\n",
217f572018871cdf09db052a676b9933512cdbfaMark Andrews funname(cc->classname, buf1),
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews cc->class,
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews cc->next != NULL ? " \\" : "");
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews fprintf(stdout, "#endif /* CLASSENUM */\n");
4fd3e3482c7e4ce01e2cf28f13e0152c8e50d746Mark Andrews } else if (structs) {
94a3bcd132e515b4baa0884ba9dd0f361d2e17bcMark Andrews if (prefix != NULL) {
94a3bcd132e515b4baa0884ba9dd0f361d2e17bcMark Andrews if ((fd = fopen(prefix,"r")) != NULL) {
94a3bcd132e515b4baa0884ba9dd0f361d2e17bcMark Andrews while (fgets(buf, sizeof buf, fd) != NULL)
94a3bcd132e515b4baa0884ba9dd0f361d2e17bcMark Andrews fputs(buf, stdout);
94a3bcd132e515b4baa0884ba9dd0f361d2e17bcMark Andrews fclose(fd);
94a3bcd132e515b4baa0884ba9dd0f361d2e17bcMark Andrews }
94a3bcd132e515b4baa0884ba9dd0f361d2e17bcMark Andrews }
4fd3e3482c7e4ce01e2cf28f13e0152c8e50d746Mark Andrews for (tt = types; tt != NULL ; tt = tt->next) {
4fd3e3482c7e4ce01e2cf28f13e0152c8e50d746Mark Andrews sprintf(buf, "%s/%s_%d.h",
4fd3e3482c7e4ce01e2cf28f13e0152c8e50d746Mark Andrews tt->dirname, tt->typename, tt->type);
4fd3e3482c7e4ce01e2cf28f13e0152c8e50d746Mark Andrews if ((fd = fopen(buf,"r")) != NULL) {
4fd3e3482c7e4ce01e2cf28f13e0152c8e50d746Mark Andrews while (fgets(buf, sizeof buf, fd) != NULL)
4fd3e3482c7e4ce01e2cf28f13e0152c8e50d746Mark Andrews fputs(buf, stdout);
4fd3e3482c7e4ce01e2cf28f13e0152c8e50d746Mark Andrews fclose(fd);
4fd3e3482c7e4ce01e2cf28f13e0152c8e50d746Mark Andrews }
4fd3e3482c7e4ce01e2cf28f13e0152c8e50d746Mark Andrews }
94a3bcd132e515b4baa0884ba9dd0f361d2e17bcMark Andrews if (suffix != NULL) {
94a3bcd132e515b4baa0884ba9dd0f361d2e17bcMark Andrews if ((fd = fopen(suffix,"r")) != NULL) {
94a3bcd132e515b4baa0884ba9dd0f361d2e17bcMark Andrews while (fgets(buf, sizeof buf, fd) != NULL)
94a3bcd132e515b4baa0884ba9dd0f361d2e17bcMark Andrews fputs(buf, stdout);
94a3bcd132e515b4baa0884ba9dd0f361d2e17bcMark Andrews fclose(fd);
94a3bcd132e515b4baa0884ba9dd0f361d2e17bcMark Andrews }
94a3bcd132e515b4baa0884ba9dd0f361d2e17bcMark Andrews }
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews }
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews if (ferror(stdout) != 0)
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews exit(1);
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews exit(0);
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews}