[BACK]Return to generate.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / make

Annotation of src/usr.bin/make/generate.c, Revision 1.2

1.2     ! espie       1: /* $OpenBSD: generate.c,v 1.1 2000/06/23 16:27:29 espie Exp $ */
1.1       espie       2: /* Written by Marc Espie 1999.
                      3:  * Public domain.
                      4:  */
                      5:
                      6: #include <stdio.h>
                      7: #include <stdlib.h>
                      8: #include <stddef.h>
                      9:
                     10: #include "make.h"
                     11: #include "ohash.h"
                     12: #include "error.h"
                     13:
                     14: #define M(x)   x, #x
                     15: char *table[] = {
                     16:        M(TARGET),
                     17:        M(OODATE),
                     18:        M(ALLSRC),
                     19:        M(IMPSRC),
                     20:        M(PREFIX),
                     21:        M(ARCHIVE),
                     22:        M(MEMBER),
                     23:        M(LONGTARGET),
                     24:        M(LONGOODATE),
                     25:        M(LONGALLSRC),
                     26:        M(LONGIMPSRC),
                     27:        M(LONGPREFIX),
                     28:        M(LONGARCHIVE),
                     29:        M(LONGMEMBER)
                     30: };
                     31:
                     32:
                     33: int
                     34: main(int argc, char *argv[])
                     35: {
                     36:        u_int32_t i;
                     37:        u_int32_t v;
                     38:        u_int32_t h;
                     39:        u_int32_t slots;
                     40:        const char *e;
                     41:        char **occupied;
                     42:
                     43: #ifdef HAS_STATS
                     44:        Init_Stats();
                     45: #endif
                     46:        if (argc < 2)
                     47:                exit(1);
                     48:
                     49:        slots = atoi(argv[1]);
                     50:        if (!slots)
                     51:                exit(1);
                     52:        occupied = emalloc(sizeof(char *) * slots);
                     53:        for (i = 0; i < slots; i++)
                     54:                occupied[i] = NULL;
                     55:
                     56:        printf("/* Generated file, do not edit */\n");
                     57:        for (i = 0; i < sizeof(table)/sizeof(char *); i++) {
                     58:                e = NULL;
1.2     ! espie      59:                v = ohash_interval(table[i], &e);
1.1       espie      60:                h = v % slots;
                     61:                if (occupied[h]) {
                     62:                        fprintf(stderr, "Collision: %s / %s (%d)\n", occupied[h],
                     63:                                table[i], h);
                     64:                        exit(1);
                     65:                }
                     66:                occupied[h] = table[i++];
                     67:                printf("#define K_%s %u\n", table[i], v);
                     68:        }
                     69:        printf("#define MAGICSLOTS %u\n", slots);
                     70:        exit(0);
                     71: }
                     72: