1 /* 2 * @(#)error.h 1.2 (Berkeley) 01/22/82 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(); 191