| 1 | /* |
| 2 | * @(#)error.h 1.2 (Berkeley) %G% |
| 3 | */ |
| 4 | typedef int boolean; |
| 5 | #define reg register |
| 6 | |
| 7 | #define TRUE 1 |
| 8 | #define FALSE 0 |
| 9 | |
| 10 | #define true 1 |
| 11 | #define false 0 |
| 12 | /* |
| 13 | * Descriptors for the various languages we know about. |
| 14 | * If you touch these, also touch lang_table |
| 15 | */ |
| 16 | #define INUNKNOWN 0 |
| 17 | #define INCPP 1 |
| 18 | #define INCC 2 |
| 19 | #define INAS 3 |
| 20 | #define INLD 4 |
| 21 | #define INLINT 5 |
| 22 | #define INF77 6 |
| 23 | #define INPI 7 |
| 24 | #define INPC 8 |
| 25 | #define INFRANZ 9 |
| 26 | #define INLISP 10 |
| 27 | #define INVAXIMA 11 |
| 28 | #define INRATFOR 12 |
| 29 | #define INLEX 13 |
| 30 | #define INYACC 14 |
| 31 | #define INAPL 15 |
| 32 | #define INMAKE 16 |
| 33 | #define INRI 17 |
| 34 | |
| 35 | extern int language; |
| 36 | /* |
| 37 | * We analyze each line in the error message file, and |
| 38 | * attempt to categorize it by type, as well as language. |
| 39 | * Here are the type descriptors. |
| 40 | */ |
| 41 | typedef int Errorclass; |
| 42 | |
| 43 | #define C_FIRST 0 /* first error category */ |
| 44 | #define C_UNKNOWN 0 /* must be zero */ |
| 45 | #define C_IGNORE 1 /* ignore the message; used for pi */ |
| 46 | #define C_SYNC 2 /* synchronization errors */ |
| 47 | #define C_DISCARD 3 /* touches dangerous files, so discard */ |
| 48 | #define C_NONSPEC 4 /* not specific to any file */ |
| 49 | #define C_THISFILE 5 /* specific to this file, but at no line */ |
| 50 | #define C_NULLED 6 /* refers to special func; so null */ |
| 51 | #define C_TRUE 7 /* fits into true error format */ |
| 52 | #define C_DUPL 8 /* sub class only; duplicated error message */ |
| 53 | #define C_LAST 9 /* last error category */ |
| 54 | |
| 55 | #define SORTABLE(x) (!(NOTSORTABLE(x))) |
| 56 | #define NOTSORTABLE(x) (x <= C_NONSPEC) |
| 57 | /* |
| 58 | * Resources to count and print out the error categories |
| 59 | */ |
| 60 | extern char *class_table[]; |
| 61 | extern int class_count[]; |
| 62 | |
| 63 | #define nunknown class_count[C_UNKNOWN] |
| 64 | #define nignore class_count[C_IGNORE] |
| 65 | #define nsyncerrors class_count[C_SYNC] |
| 66 | #define ndiscard class_count[C_DISCARD] |
| 67 | #define nnonspec class_count[C_NONSPEC] |
| 68 | #define nthisfile class_count[C_THISFILE] |
| 69 | #define nnulled class_count[C_NULLED] |
| 70 | #define ntrue class_count[C_TRUE] |
| 71 | #define ndupl class_count[C_DUPL] |
| 72 | |
| 73 | /* places to put the error complaints */ |
| 74 | |
| 75 | #define TOTHEFILE 1 /* touch the file */ |
| 76 | #define TOSTDOUT 2 /* just print them out (ho-hum) */ |
| 77 | |
| 78 | FILE *errorfile; /* where error file comes from */ |
| 79 | FILE *queryfile; /* where the query responses from the user come from*/ |
| 80 | |
| 81 | extern char *currentfilename; |
| 82 | extern char *processname; |
| 83 | extern char *scriptname; |
| 84 | |
| 85 | extern boolean query; |
| 86 | extern boolean terse; |
| 87 | int inquire(); /* inquire for yes/no */ |
| 88 | /* |
| 89 | * codes for inquire() to return |
| 90 | */ |
| 91 | #define Q_NO 1 /* 'N' */ |
| 92 | #define Q_no 2 /* 'n' */ |
| 93 | #define Q_YES 3 /* 'Y' */ |
| 94 | #define Q_yes 4 /* 'y' */ |
| 95 | |
| 96 | int probethisfile(); |
| 97 | /* |
| 98 | * codes for probethisfile to return |
| 99 | */ |
| 100 | #define F_NOTEXIST 1 |
| 101 | #define F_NOTREAD 2 |
| 102 | #define F_NOTWRITE 3 |
| 103 | #define F_TOUCHIT 4 |
| 104 | |
| 105 | /* |
| 106 | * Describes attributes about a language |
| 107 | */ |
| 108 | struct lang_desc{ |
| 109 | char *lang_name; |
| 110 | char *lang_incomment; /* one of the following defines */ |
| 111 | char *lang_outcomment; /* one of the following defines */ |
| 112 | }; |
| 113 | extern struct lang_desc lang_table[]; |
| 114 | |
| 115 | #define CINCOMMENT "/*###" |
| 116 | #define COUTCOMMENT "%%%*/\n" |
| 117 | #define FINCOMMENT "C###" |
| 118 | #define FOUTCOMMENT "%%%\n" |
| 119 | #define NEWLINE "%%%\n" |
| 120 | #define PIINCOMMENT "(*###" |
| 121 | #define PIOUTCOMMENT "%%%*)\n" |
| 122 | #define LISPINCOMMENT ";###" |
| 123 | #define ASINCOMMENT "####" |
| 124 | #define RIINCOMMENT CINCOMMENT |
| 125 | #define RIOUTCOMMENT COUTCOMMENT |
| 126 | /* |
| 127 | * Defines and resources for determing if a given line |
| 128 | * is to be discarded because it refers to a file not to |
| 129 | * be touched, or if the function reference is to a |
| 130 | * function the user doesn't want recorded. |
| 131 | */ |
| 132 | #define IG_FILE1 "llib-lc" |
| 133 | #define IG_FILE2 "llib-port" |
| 134 | #define IG_FILE3 "/usr/lib/llib-lc" |
| 135 | #define IG_FILE4 "/usr/lib/llib-port" |
| 136 | |
| 137 | #define ERRORNAME "/.errorrc" |
| 138 | int nignored; |
| 139 | char **names_ignored; |
| 140 | /* |
| 141 | * Structure definition for a full error |
| 142 | */ |
| 143 | typedef struct edesc Edesc; |
| 144 | typedef Edesc *Eptr; |
| 145 | |
| 146 | struct edesc{ |
| 147 | Eptr error_next; /*linked together*/ |
| 148 | int error_lgtext; /* how many on the right hand side*/ |
| 149 | char **error_text; /* the right hand side proper*/ |
| 150 | Errorclass error_e_class; /* error category of this error*/ |
| 151 | Errorclass error_s_class; /* sub descriptor of error_e_class*/ |
| 152 | int error_language; /* the language for this error*/ |
| 153 | int error_position; /* oridinal position */ |
| 154 | int error_line; /* discovered line number*/ |
| 155 | int error_no; /* sequence number on input */ |
| 156 | }; |
| 157 | /* |
| 158 | * Resources for the true errors |
| 159 | */ |
| 160 | extern int nerrors; |
| 161 | extern Eptr er_head; |
| 162 | extern Eptr *errors; |
| 163 | /* |
| 164 | * Resources for each of the files mentioned |
| 165 | */ |
| 166 | extern int nfiles; |
| 167 | extern Eptr **files; /* array of pointers into errors*/ |
| 168 | boolean *touchedfiles; /* which files we touched */ |
| 169 | /* |
| 170 | * The langauge the compilation is in, as intuited from |
| 171 | * the flavor of error messages analyzed. |
| 172 | */ |
| 173 | extern int langauge; |
| 174 | extern char *currentfilename; |
| 175 | /* |
| 176 | * Functional forwards |
| 177 | */ |
| 178 | char *Calloc(); |
| 179 | char *strsave(); |
| 180 | char *clobberfirst(); |
| 181 | char lastchar(); |
| 182 | char firstchar(); |
| 183 | char next_lastchar(); |
| 184 | char **wordvsplice(); |
| 185 | int wordvcmp(); |
| 186 | boolean persperdexplode(); |
| 187 | /* |
| 188 | * Printing hacks |
| 189 | */ |
| 190 | char *plural(), *verbform(); |