gen.c revision dfea6f0eaadb9287cfcdc1566ac2f997af1b075a
8eea0575a0229a40a2c82c79fa0a0aa9ce0f494aBob Halley * Copyright (C) 1998, 1999 Internet Software Consortium.
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 * 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
dfea6f0eaadb9287cfcdc1566ac2f997af1b075aBob Halley /* $Id: gen.c,v 1.21 1999/07/03 20:55:16 halley Exp $ */
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"
5fc7ba3e1ac5d72239e9971e0f469dd5796738f9Andreas Gustafsson#define TOTEXTDECL "dns_rdata_t *rdata, dns_rdata_textctx_t *tctx, isc_buffer_t *target"
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 TOWIREDECL "dns_rdata_t *rdata, dns_compress_t *cctx, isc_buffer_t *target"
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"
94a3bcd132e515b4baa0884ba9dd0f361d2e17bcMark Andrews#define TOSTRUCTDECL "dns_rdata_t *rdata, void *target, isc_mem_t *mctx"
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews#define COMPAREDECL "dns_rdata_t *rdata1, dns_rdata_t *rdata2"
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews * Copyright (C) 1998%s Internet Software Consortium.\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 * 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 /* THIS FILE IS AUTOMATICALLY GENERATED: DO NOT EDIT */\n\
6d5dcd0dc9bdbd679282b1ffc47987d24c3a1346Bob Halley char dirname[256]; /* XXX Should be max path length */
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 while ((c = *s++)) {
217f572018871cdf09db052a676b9933512cdbfaMark Andrews while ((c = *s++)) {
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrewsdoswitch(char *name, char *function, char *args,
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews fprintf(stdout, "\tswitch (%s) { \\\n" /*}*/, tsw);
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews fprintf(stdout, "\tcase %d: switch (%s) { \\\n" /*}*/,
94a3bcd132e515b4baa0884ba9dd0f361d2e17bcMark Andrews "\tcase %d:%s %s_%s(%s); break;",
94a3bcd132e515b4baa0884ba9dd0f361d2e17bcMark Andrews "\t\tcase %d:%s %s_%s_%s(%s); break;",
94a3bcd132e515b4baa0884ba9dd0f361d2e17bcMark Andrews fprintf(stdout, "\t\tdefault: %s; break; \\\n", res);
94a3bcd132e515b4baa0884ba9dd0f361d2e17bcMark Andrews fprintf(stdout, "\n#define %s %s;\n", name, res);
94a3bcd132e515b4baa0884ba9dd0f361d2e17bcMark Andrews fprintf(stdout, "\tdefault: %s; break; \\\n", res);
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrewsdodecl(char *type, char *function, char *args) {
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews "static %s %s_%s_%s(%s);\n",
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews "static %s %s_%s(%s);\n",
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrewsadd(int class, char *classname, int type, char *typename, char *dirname) {
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews struct tt *newtt = (struct tt *)malloc(sizeof *newtt);
3d5cad69ec20157912e95cf3b79316dfb0a314f3Mark Andrews while ((tt != NULL) && (tt->type == type) && (tt->class < class)) {
3d5cad69ec20157912e95cf3b79316dfb0a314f3Mark Andrews if ((tt != NULL) && (tt->type == type) && (tt->class == class))
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews /* do a class switch for this type */
4fd3e3482c7e4ce01e2cf28f13e0152c8e50d746Mark Andrewssd(int class, char *classname, char *dir, char filetype) {
4fd3e3482c7e4ce01e2cf28f13e0152c8e50d746Mark Andrews sprintf(fmt,"%s%c", "%10[-0-9a-z]_%d.", filetype);
4fd3e3482c7e4ce01e2cf28f13e0152c8e50d746Mark Andrews if (sscanf(dp->d_name, fmt, typename, &type) != 2)
4fd3e3482c7e4ce01e2cf28f13e0152c8e50d746Mark Andrews sprintf(buf, "%s_%d.%c", typename, type, filetype);
6d5dcd0dc9bdbd679282b1ffc47987d24c3a1346Bob Halley char buf[256]; /* XXX Should be max path length */
6d5dcd0dc9bdbd679282b1ffc47987d24c3a1346Bob Halley char srcdir[256]; /* XXX Should be max path length */
94a3bcd132e515b4baa0884ba9dd0f361d2e17bcMark Andrews while ((c = getopt(argc, argv, "cits:P:S:")) != -1)
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews switch (c) {
6d5dcd0dc9bdbd679282b1ffc47987d24c3a1346Bob Halley sprintf(buf, "%srdata/%s_%d", srcdir, classname, class);
6d5dcd0dc9bdbd679282b1ffc47987d24c3a1346Bob Halley if (strcmp(buf + 6 + strlen(srcdir), dp->d_name) != 0)
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews if ((tm = localtime(&now)) != NULL && tm->tm_year > 98)
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews dodecl("dns_result_t", "fromtext", FROMTEXTDECL);
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews dodecl("dns_result_t", "fromwire", FROMWIREDECL);
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews dodecl("dns_result_t", "fromstruct", FROMSTRUCTDECL);
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews dodecl("dns_result_t", "tostruct", TOSTRUCTDECL);
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews doswitch("FROMTEXTSWITCH", "fromtext", FROMTEXTARGS,
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews doswitch("FROMWIRESWITCH", "fromwire", FROMWIREARGS,
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews doswitch("COMPARESWITCH", "compare", COMPAREARGS,
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews doswitch("FROMSTRUCTSWITCH", "fromstruct", FROMSTRUCTARGS,
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews FROMSTRUCTTYPE, FROMSTRUCTCLASS, FROMSTRUCTDEF);
0c67279acb4a6ac356879498b220645755d77cc9Mark Andrews doswitch("TOSTRUCTSWITCH", "tostruct", TOSTRUCTARGS,
94a3bcd132e515b4baa0884ba9dd0f361d2e17bcMark Andrews doswitch("FREESTRUCTSWITCH", "freestruct", FREESTRUCTARGS,
94a3bcd132e515b4baa0884ba9dd0f361d2e17bcMark Andrews FREESTRUCTTYPE, FREESTRUCTCLASS, FREESTRUCTDEF);
d9e3898f8e41958387f57e855d4dd460ebf38324Michael Graff fprintf(stdout, "\t{ %d, \"%s\", 0 },%s\n", cc->class,
8d3e74b1683f714a484bbcf73249e8ee470e36d7Mark Andrews fprintf(stdout, "\t dns_rdatatype_%s = %d,%s\n",
8d3e74b1683f714a484bbcf73249e8ee470e36d7Mark Andrews fprintf(stdout, "\t dns_rdataclass_%s = %d,%s\n",
4fd3e3482c7e4ce01e2cf28f13e0152c8e50d746Mark Andrews } else if (structs) {