/* $Header$ */ /* Structure for information about files. This information consists of three parts: - file name and directory - mapping of line numbers to offsets in file - mapping of object adresses to lines in file and vice versa */ #define LOGHSIZ 6 /* make sure HSIZ is a power of 2 */ #define HSIZ (1 << LOGHSIZ) #define HASH(line) ((line) & (HSIZ-1)) typedef struct file { struct symbol *f_sym; struct symbol *f_base; char *f_fullname; /* name including directory */ struct scope *f_scope; /* reference to scope of this file */ t_lineno f_nlines; /* number of lines in file */ union { long *ff_linepos; /* positions of lines in file */ struct file *ff_next; /* only for BINCL, EINCL */ } f_x; #define f_linepos f_x.ff_linepos #define f_next f_x.ff_next struct outname *f_start; struct outname *f_end; struct outname *f_line_addr[HSIZ]; /* hash table, mapping line numbers to outname structures. Collisions are resolved by chaining: */ #define next_outname(n) ((struct outname *) ((n)->on_mptr)) #define setnext_outname(n,m) ((n)->on_mptr = (char *) (m)) struct file *f_nextmap; /* next file in mapping */ } t_file, *p_file; /* ALLOCDEF "file" 10 */