Subversion Repositories tendra.SVN

Rev

Rev 2 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 7u83 1
/*
7 7u83 2
 * Copyright (c) 2002-2006 The TenDRA Project <http://www.tendra.org/>.
3
 * All rights reserved.
4
 *
5
 * Redistribution and use in source and binary forms, with or without
6
 * modification, are permitted provided that the following conditions are met:
7
 *
8
 * 1. Redistributions of source code must retain the above copyright notice,
9
 *    this list of conditions and the following disclaimer.
10
 * 2. Redistributions in binary form must reproduce the above copyright notice,
11
 *    this list of conditions and the following disclaimer in the documentation
12
 *    and/or other materials provided with the distribution.
13
 * 3. Neither the name of The TenDRA Project nor the names of its contributors
14
 *    may be used to endorse or promote products derived from this software
15
 *    without specific, prior written permission.
16
 *
17
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
18
 * IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
19
 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
20
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR
21
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
22
 * EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
23
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
24
 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
25
 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
26
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
27
 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
 *
29
 * $Id$
30
 */
31
/*
2 7u83 32
    		 Crown Copyright (c) 1997
7 7u83 33
 
2 7u83 34
    This TenDRA(r) Computer Program is subject to Copyright
35
    owned by the United Kingdom Secretary of State for Defence
36
    acting through the Defence Evaluation and Research Agency
37
    (DERA).  It is made available to Recipients with a
38
    royalty-free licence for its use, reproduction, transfer
39
    to other parties and amendment for any purpose not excluding
40
    product development provided that any such use et cetera
41
    shall be deemed to be acceptance of the following conditions:-
7 7u83 42
 
2 7u83 43
        (1) Its Recipients shall ensure that this Notice is
44
        reproduced upon any copies or amended versions of it;
7 7u83 45
 
2 7u83 46
        (2) Any amended version of it shall be clearly marked to
47
        show both the nature of and the organisation responsible
48
        for the relevant amendment or amendments;
7 7u83 49
 
2 7u83 50
        (3) Its onward transfer from a recipient to another
51
        party shall be deemed to be that party's acceptance of
52
        these conditions;
7 7u83 53
 
2 7u83 54
        (4) DERA gives no warranty or assurance as to its
55
        quality or suitability for any purpose and DERA accepts
56
        no liability whatsoever in relation to any use to which
57
        it may be put.
58
*/
59
 
60
 
61
/**** error.h --- Error reporting.
62
 *
63
 ** Author: Steve Folkes <smf@hermes.mod.uk>
64
 *
65
 **** Commentary:
66
 *
67
 ***=== INTRODUCTION =========================================================
68
 *
69
 * This file specifies the interface to an error message reporting facility.
70
 * This facility allows for named errors, with variables (called tags) inside
71
 * the error messages.  This allows the messages to be redefined (e.g.  in a
72
 * different language) with the variable components of the message in a
73
 * different order.
74
 *
75
 * In addition to the error mesage support, this facility also provides
76
 * support for named strings whose text may be redefined.  This is useful for
77
 * allowing the text of help messages to be redefined.
78
 *
79
 ***=== TYPES ================================================================
80
 *
81
 ** Type:	EseverityT
82
 ** Type:	EseverityP
83
 ** Repr:	enum {ERROR_SEVERITY_INFORMATION, ERROR_SEVERITY_WARNING,
84
 *		      ERROR_SEVERITY_ERROR, ERROR_SEVERITY_FATAL,
85
 *		      ERROR_SEVERITY_INTERNAL}
86
 *
87
 * This is the error severity level type.  The lowest error severity is
88
 * ``ERROR_SEVERITY_INFORMATION'', which is used for information messages (not
89
 * normally printed out).  The highest severity of error is
90
 * ``ERROR_SEVERITY_INTERNAL'' which is used for internal program errors.
91
 *
92
 ** Type:	ETagT
93
 ** Type:	ETagP
94
 ** Repr:	<private>
95
 *
96
 * This is the error tag type.  A tag is used to represent a variable inside
97
 * an error message, such as the file name in which the error occured.  A
98
 * string of the form "${tag name}" inside an error message is replaced by the
99
 * tag of the same name.
100
 *
101
 ** Type:	ErrorListT
102
 ** Type:	ErrorListP
103
 ** Repr:	<private>
104
 *
105
 * This is used by the error type.
106
 *
107
 ** Type:	ErrorT
108
 ** Type:	ErrorP
109
 ** Repr:	<private>
110
 *
111
 * This is the error type.
112
 *
113
 ** Type:	EStringT
114
 ** Type:	EStringP
115
 ** Repr:	<private>
116
 *
117
 * This is the named string type.
118
 *
119
 ** Type:	ErrorProcP
7 7u83 120
 ** Repr:	void(*)(OStreamP, ETagP, GenericP)
2 7u83 121
 *
122
 * This is the type of a procedure that is used to display the contents of a
123
 * tag when reporting an error.
124
 *
125
 ** Type:	ErrorInitProcP
7 7u83 126
 ** Repr:	void(*)(void)
2 7u83 127
 *
128
 * This is the type of the procedure that will be called to define all of the
129
 * error messages for the current program.
130
 *
131
 ** Type:	ETagDataT
132
 ** Type:	ETagDataP
133
 ** Repr:	union {CStringP name; ETagP tag;}
134
 *
135
 * This is the type of an element in a vector of error tags to be passed to
136
 * the ``error_intern_tags'' function.  The vector should be initialised with
137
 * the tag names (surrounded by the ``UB'' and ``UE'' macros for union
138
 * initialisation), terminated by the ``ERROR_END_TAG_LIST'' macro, e.g.
139
 *
140
 *	static ETagDataT tags [] = {
141
 *	    UB "tag 1" UE,
142
 *	    UB "tag 2" UE,
143
 *	    ERROR_END_TAG_LIST
144
 *	};
145
 *
146
 * Once the ``error_intern_tags'' function has been called, the ``tag'' field
147
 * should be used to access the tag object.
148
 *
149
 ** Type:	ErrorDataT
150
 ** Type:	ErrorDataP
151
 ** Repr:	union {struct {CStringP name; EseverityP severity;
152
 *			       CStringP message; GenericP data;} s;
153
 *		       ErrorP error;}
154
 *
155
 * This is the type of an element in a vector of errors to be passed to the
156
 * ``error_intern_errors'' function.  The vector should be initialised with
157
 * the error names, severity levels, message text, and a pointer to a
158
 * non-function object (all surrounded by the ``UB'' and ``UE'' macros for
159
 * union initialisation).  The vector should be terminated by the
160
 * ``ERROR_END_ERROR_LIST'' macro, e.g.
161
 *
162
 *	static ErrorDataT errors [] = {
163
 *	    UB {
164
 *		"error 1", ERROR_SEVERITY_ERROR,
165
 *		"error 1 occured at line ${line}", NIL (GenericP)
166
 *	    } UE, ERROR_END_ERROR_LIST
167
 *	};
168
 *
169
 * Once the ``error_intern_errors'' function has been called, the ``error''
170
 * field should be used to access the error object.
171
 *
172
 *
173
 ** Type:	EStringDataT
174
 ** Type:	EStringDataP
175
 ** Repr:	union {struct {CStringP name; CStringP contents;} s;
176
 *		       EStringP estring;}
177
 *
178
 * This is the type of an element in a vector of named strings to be passed to
179
 * the ``error_intern_strings'' function.  The vector should be initialised
180
 * with the string names and contents (all surrounded by the ``UB'' and ``UE''
181
 * macros for union initialisation).  The vector should be terminated by the
182
 * ``ERROR_END_STRING_LIST'' macro, e.g.
183
 *
184
 *	static EStringDataT strings [] = {
185
 *	    UB {"string name", "string contents"} UE,
186
 *	    ERROR_END_STRING_LIST
187
 *	};
188
 *
189
 * Once the ``error_intern_strings'' function has been called, the ``estring''
190
 * field should be used to access the error string object.
191
 *
192
 ** Type:	ErrorStatusT
193
 ** Type:	ErrorStatusP
194
 ** Repr:	enum {ERROR_STATUS_BAD_MESSAGE, ERROR_STATUS_SUCCESS,
195
 *		      ERROR_STATUS_BAD_ERROR}
196
 *
197
 * This is the return type of the ``error_redefine_error'' function.
198
 *
199
 ***=== FUNCTIONS ============================================================
200
 *
7 7u83 201
 ** Function:	void error_init(CStringP program, ErrorInitProcP proc)
2 7u83 202
 ** Exceptions:	XX_dalloc_no_memory
203
 *
204
 * This function initialises the error reporting mechanism.  It should only be
205
 * called once, at the start of the program.  The basename of the program
206
 * string is used as the program name, for the "${program name}" tag. The
207
 * procedure is registered as the error initialisation procedure.  The error
208
 * initialisation procedure should be called once before attempting to report
209
 * errors.  The best way of doing this, is to call the
210
 * ``error_call_init_proc'' function which guarantees to only call the
211
 * function once.  Note that the error initialisation procedure is not
212
 * expected to be used to initialise named strings: these should be explicitly
213
 * initialised before they are used.
214
 *
7 7u83 215
 ** Function:	void error_call_init_proc(void)
2 7u83 216
 ** Exceptions:
217
 *
218
 * This calls the error initialisation procedure if it has not already been
219
 * called.  This function should be called before ``error_report'' (actually,
220
 * it should be called before the error value that will be passed to that
221
 * function is accessed).
222
 *
7 7u83 223
 ** Function:	ETagP error_define_tag(CStringP name)
2 7u83 224
 ** Exceptions:	XX_dalloc_no_memory
225
 *
226
 * This function defines a tag with the specified name, and returns it.  The
227
 * name should not be modified or deallocated.  It is possible to define the
228
 * same tag more than once (but the same value will be returned each time).
229
 *
7 7u83 230
 ** Function:	ErrorP error_define_error(CStringP name, ESeverityT severity,
231
 *					  CStringP message, GenericP data)
2 7u83 232
 ** Exceptions:	XX_dalloc_no_memory
233
 *
234
 * This function defines an error with the specified name, and returns it.
235
 * The name should not be modified or deallocated.  The severity level is used
236
 * to decide whether or not an error should be shown and whether or not the
237
 * program should abort, when the ``error_report'' function is called.  The
238
 * message is split up into a list of strings and tags, which will be printed
239
 * when the error is reported (the sequence "${tag name}" will be replaced by
240
 * the value of the tag when the error is reported).  The data is for use by
241
 * the program.
242
 *
7 7u83 243
 ** Function:	void error_intern_tags(ETagDataP vector)
2 7u83 244
 ** Exceptions:	XX_dalloc_no_memory
245
 *
246
 * This function changes the name entries in the specified vector into error
247
 * tags.  The vector should be terminated by the macro ``ERROR_END_TAG_LIST''.
248
 * This function should only be called once on any vector.
249
 *
7 7u83 250
 ** Function:	void error_intern_errors(ErrorDataP vector)
2 7u83 251
 ** Exceptions:	XX_dalloc_no_memory
252
 *
253
 * This function changes the name entries in the specified vector into errors.
254
 * The vector should be terminated by the macro ``ERROR_END_ERROR_LIST''.
255
 * This function should only be called once on any vector.
256
 *
7 7u83 257
 ** Function:	ErrorStatusT error_redefine_error(CStringP name,
258
 *						  CStringP message)
2 7u83 259
 ** Exceptions:	XX_dalloc_no_memory
260
 *
261
 * This function changes the error message for the error with the specified
262
 * name.  If necessary, the error initialisation procedure will be called to
263
 * initialise the errors before they are redefined.  If the error does not
264
 * exist, the function will return ``ERROR_STATUS_BAD_ERROR''.  If the error
265
 * message contains an unterminated tag, the function will return
266
 * ``ERROR_STATUS_BAD_MESSAGE''.  If the function succeeds, it will return
267
 * ``ERROR_STATUS_SUCCESS''.
268
 *
7 7u83 269
 ** Function:	ErrorP error_lookup_error(CStringP name)
2 7u83 270
 ** Exceptions:
271
 *
272
 * This function returns the error with the specified name.  If the error does
273
 * not exist, it returns the null pointer.  If necessary, the error
274
 * initialisation procedure will be called to initialise the error messages
275
 * before they are looked up.
276
 *
7 7u83 277
 ** Function:	GenericP error_data(ErrorP error)
2 7u83 278
 ** Exceptions:
279
 *
280
 * This function returns the data associated with the specified error.
281
 *
7 7u83 282
 ** Function:	void error_report(ErrorP error, ErrorProcP proc,
283
 *				  GenericP closure)
2 7u83 284
 ** Exceptions:	XX_dalloc_no_memory, XX_ostream_write_error
285
 *
286
 * This function reports the specified error.  The procedure is used to print
287
 * out information for tags.  It is called with the output stream, the tag and
288
 * the specified closure.  If the procedure doesn't know about the tag, it
289
 * should ignore it.  The error message is only reported if the severity level
290
 * of the error is greater than or equal to the minimum severity level set by
291
 * the ``error_set_min_severity'' function.  The function will cause the
292
 * program to exit if the error's severity level is ``ERROR_SEVERITY_FATAL''
293
 * or higher.
294
 *
7 7u83 295
 ** Function:	void error_set_min_report_severity(ESeverityT severity)
2 7u83 296
 ** Exceptions:
297
 *
298
 * This function sets the minimum severity of error that should be reported.
299
 *
7 7u83 300
 ** Function:	ESeverityT error_get_min_report_severity(void)
2 7u83 301
 ** Exceptions:
302
 *
303
 * This function returns the minimum severity of error that will be reported.
304
 *
7 7u83 305
 ** Function:	ESeverityT error_max_reported_severity(void)
2 7u83 306
 ** Exceptions:
307
 *
308
 * This function returns the severity of the error with the highest severity
309
 * that has been passed to ``error_report''.
310
 *
7 7u83 311
 ** Function:	void error_set_severity_message(ESeverityT severity,
312
 *						CStringP message)
2 7u83 313
 ** Exceptions:
314
 *
315
 * This function sets the message to be displayed when the "${severity}" tag
316
 * is encountered for the specified severity.  Tags are not expanded in the
317
 * message. The message should not be modified or deallocated.
318
 *
7 7u83 319
 ** Function:	BoolT error_set_prefix_message(CStringP message)
2 7u83 320
 ** Exceptions:	XX_dalloc_no_memory
321
 *
322
 * This function sets the error message prefix string.  This string is output
323
 * by ``error_display'' before outputting any actual error message.  Tags are
324
 * expanded, but only for the standard tags: "${program name}", "${severity}",
325
 * "${dollar}", "${this error name}", "${open brace}", and "${close brace}".
326
 * All other tags will be ignored.  The function returns true if the message
327
 * was valid, and false if there was an unterminated tag in the message.
328
 *
7 7u83 329
 ** Function:	EStringP error_define_string(CStringP name, CStringP contents)
2 7u83 330
 ** Exceptions:	XX_dalloc_no_memory
331
 *
332
 * This function defines a named string with the specified name, and assigns
333
 * it the specified contents.  Neither the name nor the contents should be
334
 * modified or deallocated.  No tag splitting is performed on the contents.
335
 *
7 7u83 336
 ** Function:	void error_intern_strings(EStringDataP vector)
2 7u83 337
 ** Exceptions:	XX_dalloc_no_memory
338
 *
339
 * This function changes the name and contents entries in the specified vector
340
 * into named strings.  The vector should be terminated by the macro
341
 * ``ERROR_END_STRING_LIST''.  This function should only be called once on any
342
 * vector.
343
 *
7 7u83 344
 ** Function:	BoolT error_redefine_string(CStringP name, CStringP contents)
2 7u83 345
 ** Exceptions:	XX_dalloc_no_memory
346
 *
347
 * This function changes the contents of the named string with the specified
348
 * name.  If the name does not exist, the function returns false, otherwise it
349
 * returns true.
350
 *
7 7u83 351
 ** Function:	EStringP error_lookup_string(CStringP name)
2 7u83 352
 ** Exceptions:
353
 *
354
 * This function returns the named string with the specified name.  If the
355
 * named string does not exist, the function returns the null pointer.
356
 *
7 7u83 357
 ** Function:	CStringP error_string_contents(EStringP estring)
2 7u83 358
 ** Exceptions:
359
 *
360
 * This function returns the contents of the specified named string.  The
361
 * returned string should not be modified or deallocated.
362
 *
7 7u83 363
 ** Function:	void write_error_file(OStreamP ostream)
2 7u83 364
 ** Exceptions:	XX_dalloc_no_memory, XX_ostream_write_error
365
 *
366
 * This function writes out an error file (in the same format as parsed by the
367
 * functions in "error-file.[ch]") to the specified ostream.
368
 *
369
 ***=== MACROS ===============================================================
370
 *
371
 ** Macro:	ERROR_END_TAG_LIST
372
 ** Exceptions:
373
 *
374
 * This macro should form the last entry in a vector of ``ETagDataT'' objects.
375
 *
376
 ** Macro:	ERROR_END_ERROR_LIST
377
 ** Exceptions:
378
 *
379
 * This macro should form the last entry in a vector of ``ErrorDataT''
380
 * objects.
381
 *
382
 ** Macro:	ERROR_END_STRING_LIST
383
 ** Exceptions:
384
 *
385
 * This macro should form the last entry in a vector of ``EStringDataT''
386
 * objects.
387
 *
388
 **** Change log:
389
 * $Log: error.h,v $
390
 * Revision 1.1.1.1  1998/01/17  15:57:17  release
391
 * First version to be checked into rolling release.
392
 *
393
 * Revision 1.2  1994/12/12  11:44:43  smf
394
 * Performing changes for 'CR94_178.sid+tld-update' - bringing in line with
395
 * OSSG C Coding Standards.
396
 *
397
 * Revision 1.1.1.1  1994/07/25  16:05:51  smf
398
 * Initial import of library shared files.
399
 *
400
**/
401
 
402
/****************************************************************************/
403
 
404
#ifndef H_ERROR
405
#define H_ERROR
406
 
407
#include "os-interface.h"
408
#include "cstring.h"
409
#include "dstring.h"
410
#include "ostream.h"
411
 
412
/*--------------------------------------------------------------------------*/
413
 
414
#ifdef FS_NO_ENUM
415
typedef int ESeverityT, *ESeverityP;
416
#define ERROR_SEVERITY_INFORMATION	(0)
417
#define ERROR_SEVERITY_WARNING		(1)
418
#define ERROR_SEVERITY_ERROR		(2)
419
#define ERROR_SEVERITY_FATAL		(3)
420
#define ERROR_SEVERITY_INTERNAL		(4)
421
#else
422
typedef enum {
423
    ERROR_SEVERITY_INFORMATION,
424
    ERROR_SEVERITY_WARNING,
425
    ERROR_SEVERITY_ERROR,
426
    ERROR_SEVERITY_FATAL,
427
    ERROR_SEVERITY_INTERNAL
7 7u83 428
} ESeverityT, *ESeverityP;
2 7u83 429
#endif /* defined (FS_NO_ENUM) */
430
 
431
typedef struct ETagT {
432
    struct ETagT	       *next;
433
    CStringP			name;
434
} ETagT, *ETagP;
435
 
436
typedef struct ErrorListT {
437
    struct ErrorListT	       *next;
438
#ifdef FS_NO_ENUM
439
    int				tag;
440
#define ERROR_TAG_STRING	(0)
441
#define ERROR_TAG_TAG		(1)
442
#else
443
    enum {
444
	ERROR_TAG_STRING,
445
	ERROR_TAG_TAG
446
    }				tag;
447
#endif /* defined (FS_NO_ENUM) */
448
    union {
449
	NStringT		string;
450
	ETagP			tag;
451
    } u;
452
} ErrorListT, *ErrorListP;
453
 
454
typedef struct ErrorT {
455
    struct ErrorT	       *next;
456
    CStringP 			name;
457
    ESeverityT			severity;
458
    ErrorListP			error_list;
459
    GenericP			data;
460
} ErrorT, *ErrorP;
461
 
462
typedef struct EStringT {
463
    struct EStringT	       *next;
464
    CStringP			name;
465
    CStringP			contents;
466
} EStringT, *EStringP;
467
 
7 7u83 468
typedef void(*ErrorProcP)(OStreamP, ETagP, GenericP);
469
typedef void(*ErrorInitProcP)(void);
2 7u83 470
typedef UNION ETagDataT {
471
    CStringP			name;
472
    ETagP			tag;
473
} ETagDataT, *ETagDataP;
474
typedef UNION ErrorDataT {
475
    struct {
476
	CStringP		name;
477
	ESeverityT		severity;
478
	CStringP		message;
479
	GenericP		data;
480
    } s;
481
    ErrorP			error;
482
} ErrorDataT, *ErrorDataP;
483
typedef UNION EStringDataT {
484
    struct {
485
	CStringP		name;
486
	CStringP		contents;
487
    } s;
488
    EStringP			estring;
489
} EStringDataT, *EStringDataP;
490
 
491
#ifdef FS_NO_ENUM
492
typedef int ErrorStatusT, *ErrorStatusP;
493
#define ERROR_STATUS_BAD_MESSAGE	(0)
494
#define ERROR_STATUS_SUCCESS		(1)
495
#define ERROR_STATUS_BAD_ERROR		(2)
496
#else
497
typedef enum {
498
    ERROR_STATUS_BAD_MESSAGE,
499
    ERROR_STATUS_SUCCESS,
500
    ERROR_STATUS_BAD_ERROR
501
} ErrorStatusT, *ErrorStatusP;
502
#endif /* defined (FS_NO_ENUM) */
503
 
504
/*--------------------------------------------------------------------------*/
505
 
506
extern void			error_init
7 7u83 507
(CStringP, ErrorInitProcP);
2 7u83 508
extern void			error_call_init_proc
7 7u83 509
(void);
2 7u83 510
extern ETagP			error_define_tag
7 7u83 511
(CStringP);
2 7u83 512
extern ErrorP			error_define_error
7 7u83 513
(CStringP, ESeverityT, CStringP, GenericP);
2 7u83 514
extern void			error_intern_tags
7 7u83 515
(ETagDataP);
2 7u83 516
extern void			error_intern_errors
7 7u83 517
(ErrorDataP);
2 7u83 518
extern ErrorStatusT		error_redefine_error
7 7u83 519
(CStringP, CStringP);
2 7u83 520
extern ErrorP			error_lookup_error
7 7u83 521
(CStringP);
2 7u83 522
extern GenericP			error_data
7 7u83 523
(ErrorP);
2 7u83 524
extern void			error_report
7 7u83 525
(ErrorP, ErrorProcP, GenericP);
2 7u83 526
extern void			error_set_min_report_severity
7 7u83 527
(ESeverityT);
2 7u83 528
extern ESeverityT		error_get_min_report_severity
7 7u83 529
(void);
2 7u83 530
extern ESeverityT		error_max_reported_severity
7 7u83 531
(void);
2 7u83 532
extern void			error_set_severity_message
7 7u83 533
(ESeverityT, CStringP);
2 7u83 534
extern BoolT			error_set_prefix_message
7 7u83 535
(CStringP);
2 7u83 536
extern EStringP			error_define_string
7 7u83 537
(CStringP, CStringP);
2 7u83 538
extern void			error_intern_strings
7 7u83 539
(EStringDataP);
2 7u83 540
extern BoolT			error_redefine_string
7 7u83 541
(CStringP, CStringP);
2 7u83 542
extern EStringP			error_lookup_string
7 7u83 543
(CStringP);
2 7u83 544
extern CStringP			error_string_contents
7 7u83 545
(EStringP);
2 7u83 546
 
547
extern void			write_error_file
7 7u83 548
(OStreamP);
2 7u83 549
 
550
/*--------------------------------------------------------------------------*/
551
 
7 7u83 552
#define ERROR_END_TAG_LIST UB NIL(CStringP)UE
2 7u83 553
#define ERROR_END_ERROR_LIST \
7 7u83 554
UB {NIL(CStringP), (ESeverityT)0, NIL(CStringP), NIL(GenericP)} UE
555
#define ERROR_END_STRING_LIST UB {NIL(CStringP), NIL(CStringP)} UE
2 7u83 556
 
557
#endif /* !defined (H_ERROR) */
558
 
559
/*
560
 * Local variables(smf):
561
 * eval: (include::add-path-entry "../os-interface" "../generated")
562
 * end:
563
**/