|
|
1.1 ! root 1: /* Copyright (c) 1979 Regents of the University of California */ ! 2: /* ! 3: * To speed up walks through symbols defined in a particular ! 4: * segment, we buil up a table of pointers into the symbol table ! 5: * and a table of delimiters for each segment. The delimiter for ! 6: * the particular segment points to the first word in that segment. ! 7: */ ! 8: ! 9: struct symtab **symptrs; /*dynamically allocated*/ ! 10: struct symtab **symdelim[NLOC + NLOC + 1]; ! 11: struct symtab *hshtab[NHASH]; ! 12: struct symtab **symptrub; ! 13: int nsyms; /*number in the symbol table*/ ! 14: int njxxx; /*the number of jxxx entries in the table*/ ! 15: int nforgotten; /*how many entries erroneously entered*/ ! 16: int nlabels; /*how many labels in the symbol table*/ ! 17: int hshused; /*how many hash slots used*/ ! 18: ! 19: #define SEGITERATE(segno, start, end, copointer, walkpointer, ubpointer, direction) \ ! 20: for(copointer = start == 0? symdelim[segno]:start,\ ! 21: ubpointer = end == 0 ? *symdelim[segno+1] : *(symdelim[segno]-1),\ ! 22: walkpointer = *copointer;\ ! 23: walkpointer != ubpointer;\ ! 24: walkpointer = * direction copointer) ! 25: ! 26: #define SYMITERATE(copointer, walkpointer) \ ! 27: for(copointer = symptrs, \ ! 28: walkpointer = *copointer; \ ! 29: copointer < symptrub; \ ! 30: walkpointer = * ++ copointer) ! 31: /* ! 32: * Symbols are allocated in non contiguous chunks by extending ! 33: * the data area. This way, it is extremely easy to ! 34: * allow virtual memory temporary files, change the length ! 35: * of NCPS, and allows for a much more flexible storage ! 36: * allocation ! 37: */ ! 38: ! 39: #define SYMDALLOP 200 ! 40: struct allocbox{ ! 41: struct allocbox *nextalloc; ! 42: struct symtab symslots[SYMDALLOP]; ! 43: char symnames[SYMDALLOP * NCPS]; ! 44: }; ! 45: ! 46: extern struct allocbox *allochead; ! 47: extern struct allocbox *alloctail; ! 48: extern struct symtab *nextsym; ! 49: extern struct allocbox *newbox; ! 50: extern char *namebuffer; ! 51: extern int symsleft; ! 52: ! 53: #define ALLOCQTY sizeof (struct allocbox) ! 54: /* ! 55: * Iterate through all symbols in the symbol table in declaration ! 56: * order ! 57: */ ! 58: #define DECLITERATE(allocwalk, walkpointer, ubpointer) \ ! 59: for(allocwalk = allochead; \ ! 60: allocwalk != 0; \ ! 61: allocwalk = allocwalk->nextalloc) \ ! 62: for (walkpointer = &allocwalk->symslots[0],\ ! 63: ubpointer = &allocwalk->symslots[SYMDALLOP], \ ! 64: ubpointer = ubpointer > ( (struct symtab *)alloctail) \ ! 65: ? nextsym : ubpointer ;\ ! 66: walkpointer < ubpointer; \ ! 67: walkpointer++ )
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.