Add/change mailer flags: R = CRLF mapping, p = reverse-path in
[unix-history] / usr / src / old / as.vax / assyms.h
CommitLineData
f70ab843
RH
1/*
2 * Copyright (c) 1982 Regents of the University of California
3 * @(#)assyms.h 4.3 %G%
4 */
7c81b4f2
BJ
5/*
6 * To speed up walks through symbols defined in a particular
7 * segment, we buil up a table of pointers into the symbol table
8 * and a table of delimiters for each segment. The delimiter for
9 * the particular segment points to the first word in that segment.
10 */
11
12extern struct symtab **symptrs; /*dynamically allocated*/
13extern struct symtab **symdelim[NLOC + NLOC + 1];
14extern struct symtab **symptrub;
15extern int nsyms; /*number in the symbol table*/
16extern int njxxx; /*the number of jxxx entries in the table*/
17extern int nforgotten; /*how many entries erroneously entered*/
18extern int nlabels; /*how many labels in the symbol table*/
19extern int hshused; /*how many hash slots used*/
20
21#define SEGITERATE(segno, start, end, copointer, walkpointer, ubpointer, direction) \
22 for(copointer = start == 0? symdelim[segno]:start,\
23 ubpointer = end == 0 ? *symdelim[segno+1] : *(symdelim[segno]-1),\
24 walkpointer = *copointer;\
25 walkpointer != ubpointer;\
26 walkpointer = * direction copointer)
27
28#define SYMITERATE(copointer, walkpointer) \
29 for(copointer = symptrs, \
30 walkpointer = *copointer; \
31 copointer < symptrub; \
32 walkpointer = * ++ copointer)
33/*
34 * Symbols are allocated in non contiguous chunks by extending
35 * the data area. This way, it is extremely easy to
36 * allow virtual memory temporary files, change the length
37 * of NCPS, and allows for a much more flexible storage
38 * allocation
39 */
40
41#define SYMDALLOP 200
42struct allocbox{
43 struct allocbox *nextalloc;
44 struct symtab symslots[SYMDALLOP];
7c81b4f2
BJ
45};
46
47#ifdef FLEXNAMES
48/*
49 * Names are allocated in a string pool. String pools are linked
50 * together and are allocated dynamically by Calloc.
51 */
52#define STRPOOLDALLOP NCPS
53struct strpool{
54 struct strpool *str_next;
55 int str_nalloc;
56 char str_names[STRPOOLDALLOP];
57};
58
59extern struct strpool *strplhead;
60#endif
61
62extern struct allocbox *allochead;
63extern struct allocbox *alloctail;
64extern struct symtab *nextsym;
65extern struct allocbox *newbox;
66extern char *namebuffer;
67extern int symsleft;
68
69#define ALLOCQTY sizeof (struct allocbox)
70/*
71 * Iterate through all symbols in the symbol table in declaration
72 * order
73 */
74#define DECLITERATE(allocwalk, walkpointer, ubpointer) \
75 for(allocwalk = allochead; \
76 allocwalk != 0; \
77 allocwalk = allocwalk->nextalloc) \
78 for (walkpointer = &allocwalk->symslots[0],\
79 ubpointer = &allocwalk->symslots[SYMDALLOP], \
80 ubpointer = ubpointer > ( (struct symtab *)alloctail) \
81 ? nextsym : ubpointer ;\
82 walkpointer < ubpointer; \
83 walkpointer++ )
84/*
85 * The hash table is segmented, and dynamically extendable.
86 * We have a linked list of hash table segments; within each
87 * segment we use a quadratic rehash that touches no more than 1/2
88 * of the buckets in the hash table when probing.
89 * If the probe does not find the desired symbol, it moves to the
90 * next segment, or allocates a new segment.
91 *
92 * Hash table segments are kept on the linked list with the first
93 * segment always first (that contains the reserved words) and
94 * the last added segment immediately after the first segment
95 * to hopefully gain something by locality of reference.
96 */
97struct hashdallop {
98 int h_nused;
99 struct hashdallop *h_next;
100 struct symtab *h_htab[NHASH];
101};