148061Sbostic /*- 2*62113Sbostic * Copyright (c) 1980, 1982, 1983, 1993 3*62113Sbostic * The Regents of the University of California. All rights reserved. 422265Sdist * 548061Sbostic * %sccs.include.redist.c% 648061Sbostic * 7*62113Sbostic * @(#)pc3.h 8.1 (Berkeley) 06/06/93 822265Sdist */ 9823Speter 10823Speter /* 11823Speter * a symbol table entry. 12823Speter */ 13823Speter struct symbol { 14823Speter char *name; /* pointer to string table */ 15844Speter short desc; /* symbol description */ 16823Speter int lookup; /* whether new or old */ 1714130Speter struct symbol *fromp; /* its defining .p file */ 18823Speter union { /* either */ 19823Speter struct { /* for a symbol, */ 20823Speter struct symbol *fromi; /* its defining .i file */ 21823Speter long iline; /* the .i file line */ 22823Speter struct symbol *rfilep; /* its resolving file */ 23823Speter long rline; /* resolving file line */ 24844Speter } sym_str; 2514130Speter long checksum; /* for a file, its checksum */ 26823Speter } sym_un; 27823Speter }; 28823Speter 29830Speter /* 30830Speter * struct for an argument .o file. 31830Speter */ 32823Speter struct fileinfo { 33823Speter FILE *file; 34823Speter char *name; 35823Speter off_t nextoffset; 36823Speter }; 37823Speter 38830Speter /* 39830Speter * old archive magic for error detection. 40830Speter */ 41823Speter #define OARMAG 0177545 42823Speter 43823Speter /* 44823Speter * this is used to trim pointers into the range of a mod of a prime. 45823Speter */ 46823Speter #define SHORT_ABS( n ) ( n & 077777 ) 47823Speter 48823Speter /* 49830Speter * a prime number which gets sizeof( struct symboltableinfo ) 50830Speter * up to a multiple of BUFSIZ. 51823Speter */ 52823Speter #define SYMBOLPRIME 1021 53830Speter 54823Speter /* 55823Speter * number of entries used in this symbol table, 56823Speter * a chain to the next symbol table, 57823Speter * and the entries. (pointers to struct symbols.) 58823Speter */ 59823Speter struct symboltableinfo { 60823Speter long used; 61823Speter struct symboltableinfo *chain; 62823Speter struct symbol *entry[ SYMBOLPRIME ]; 63823Speter }; 64823Speter 65823Speter /* 66823Speter * if new struct symbols are needed, 67823Speter * allocate this much space and hack it up into struct symbols. 68823Speter */ 69823Speter #define SYMBOLALLOC BUFSIZ 70823Speter 71823Speter /* 72830Speter * a prime number which gets sizeof( struct stringtableinfo ) 73830Speter * up to a multiple of BUFSIZ. 74823Speter */ 75823Speter #define STRINGPRIME 1021 76823Speter 77823Speter /* 78823Speter * number of entries used in this string table, 79823Speter * a chain to the next string table, 80823Speter * and the entries. (pointers to the character table.) 81823Speter */ 82823Speter struct stringtableinfo { 83823Speter long used; 84823Speter struct stringtableinfo *chain; 85823Speter char *entry[ STRINGPRIME ]; 86823Speter }; 87823Speter 88823Speter /* 89823Speter * if more character table space is needed, 90823Speter * allocate this much and hack it up into strings. 91823Speter */ 92823Speter #define CHARALLOC BUFSIZ 93823Speter 94823Speter /* 95830Speter * uninitialized pointer 96830Speter */ 97830Speter #define NIL 0 98830Speter 99830Speter /* 100823Speter * an enumeration for error types 101823Speter */ 1027598Speter #define NONE 0 103823Speter #define WARNING 1 1047598Speter #define ERROR 2 1057598Speter #define FATAL 3 106823Speter 107823Speter /* 108823Speter * an enumeration for lookups 109823Speter */ 110823Speter #define NEW 0 111823Speter #define OLD 1 112823Speter 113823Speter /* 114823Speter * booleans 115823Speter */ 116823Speter #define BOOL int 117823Speter #define FALSE 0 118823Speter #define TRUE 1 119823Speter 120823Speter /* 121823Speter * function types. 122823Speter */ 123823Speter struct symbol *entersymbol(); 124823Speter struct symbol *symbolalloc(); 125823Speter long stringhash(); 126823Speter char *enterstring(); 127823Speter char *charalloc(); 128823Speter BOOL nextelement(); 129823Speter time_t mtime(); 130823Speter char *classify(); 1317600Speter char *article(); 132