=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/make/generate.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- src/usr.bin/make/generate.c 2001/03/02 16:57:26 1.2 +++ src/usr.bin/make/generate.c 2001/05/03 13:41:05 1.3 @@ -1,18 +1,15 @@ -/* $OpenBSD: generate.c,v 1.2 2001/03/02 16:57:26 espie Exp $ */ -/* Written by Marc Espie 1999. - * Public domain. - */ #include #include #include #include "make.h" +#include "stats.h" #include "ohash.h" -#include "error.h" +#include "cond_int.h" #define M(x) x, #x -char *table[] = { +char *table_var[] = { M(TARGET), M(OODATE), M(ALLSRC), @@ -26,10 +23,42 @@ M(LONGIMPSRC), M(LONGPREFIX), M(LONGARCHIVE), - M(LONGMEMBER) + M(LONGMEMBER), + M(FTARGET), + M(DTARGET), + M(FPREFIX), + M(DPREFIX), + M(FARCHIVE), + M(DARCHIVE), + M(FMEMBER), + M(DMEMBER), + NULL }; +char *table_cond[] = { + M(COND_IF), + M(COND_IFDEF), + M(COND_IFNDEF), + M(COND_IFMAKE), + M(COND_IFNMAKE), + M(COND_ELSE), + M(COND_ELIFDEF), + M(COND_ELIFNDEF), + M(COND_ELIFMAKE), + M(COND_ELIFNMAKE), + M(COND_ENDIF), + M(COND_FOR), + M(COND_INCLUDE), + M(COND_UNDEF), + NULL +}; + +char **table[] = { + table_var, + table_cond +}; + int main(int argc, char *argv[]) { @@ -39,34 +68,48 @@ u_int32_t slots; const char *e; char **occupied; + char **t; + int tn; #ifdef HAS_STATS Init_Stats(); #endif - if (argc < 2) + if (argc != 3) exit(1); - slots = atoi(argv[1]); - if (!slots) + tn = atoi(argv[1]); + if (!tn) exit(1); - occupied = emalloc(sizeof(char *) * slots); - for (i = 0; i < slots; i++) - occupied[i] = NULL; - - printf("/* Generated file, do not edit */\n"); - for (i = 0; i < sizeof(table)/sizeof(char *); i++) { - e = NULL; - v = ohash_interval(table[i], &e); - h = v % slots; - if (occupied[h]) { - fprintf(stderr, "Collision: %s / %s (%d)\n", occupied[h], - table[i], h); + t = table[tn-1]; + slots = atoi(argv[2]); + if (slots) { + occupied = malloc(sizeof(char *) * slots); + if (!occupied) exit(1); + for (i = 0; i < slots; i++) + occupied[i] = NULL; + } else + occupied = NULL; + + printf("/* File created by generate %d %d, do not edit */\n", + tn, slots); + for (i = 0; t[i] != NULL; i++) { + e = NULL; + v = ohash_interval(t[i], &e); + if (slots) { + h = v % slots; + if (occupied[h]) { + fprintf(stderr, + "Collision: %s / %s (%d)\n", occupied[h], + t[i], h); + exit(1); + } + occupied[h] = t[i]; } - occupied[h] = table[i++]; - printf("#define K_%s %u\n", table[i], v); + i++; + printf("#define K_%s %u\n", t[i], v); } - printf("#define MAGICSLOTS %u\n", slots); + if (slots) + printf("#define MAGICSLOTS%d %u\n", tn, slots); exit(0); } -