coan 4.2.4
report.h
Go to the documentation of this file.
00001 #ifndef REPORT_H
00002 #define REPORT_H
00003 
00004 /***************************************************************************
00005  *   Copyright (C) 2004, 2006 Symbian Software Ltd.                        *
00006  *   All rights reserved.                                                  *
00007  *   Copyright (C) 2007-2011 Mike Kinghan, imk@strudl.org                  *
00008  *   All rights reserved.                                                  *
00009  *                                                                         *
00010  *   Contributed originally by Mike Kinghan, imk@strudl.org                *
00011  *                                                                         *
00012  *   Redistribution and use in source and binary forms, with or without    *
00013  *   modification, are permitted provided that the following conditions    *
00014  *   are met:                                                              *
00015  *                                                                         *
00016  *   Redistributions of source code must retain the above copyright        *
00017  *   notice, this list of conditions and the following disclaimer.         *
00018  *                                                                         *
00019  *   Redistributions in binary form must reproduce the above copyright     *
00020  *   notice, this list of conditions and the following disclaimer in the   *
00021  *   documentation and/or other materials provided with the distribution.  *
00022  *                                                                         *
00023  *   Neither the name of Symbian Software Ltd. nor the names of its        *
00024  *   contributors may be used to endorse or promote products derived from  *
00025  *   this software without specific prior written permission.              *
00026  *                                                                         *
00027  *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS   *
00028  *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT     *
00029  *   LIMITED TO, THE IMPLIED WARRANTIES OF  MERCHANTABILITY AND FITNESS    *
00030  *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE        *
00031  *   COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,   *
00032  *   INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,  *
00033  *   BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS *
00034  *   OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED    *
00035  *   AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,*
00036  *   OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF *
00037  *   THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH  *
00038  *   DAMAGE.                                                               *
00039  *                                                                         *
00040  **************************************************************************/
00041 
00042 #include "state_utils.h"
00043 #include "hash_include.h"
00044 #include "directives_tally.h"
00045 #include "memory.h"
00046 #include <stdarg.h>
00047 
00055 
00066 typedef enum {
00069     MSGCLASS_SHIFT = 11,
00071     ISSUE_MASK = (1 << MSGCLASS_SHIFT) - 1,
00073     MSGCLASS_NONE = 0 << MSGCLASS_SHIFT,
00075     MSGCLASS_PROGRESS = 1 << MSGCLASS_SHIFT,
00077     MSGCLASS_INFO = 2 << MSGCLASS_SHIFT,
00079     MSGCLASS_WARNING = 4 << MSGCLASS_SHIFT,
00081     MSGCLASS_ERROR = 8 << MSGCLASS_SHIFT,
00083     MSGCLASS_ABEND = 16 << MSGCLASS_SHIFT,
00085     MSGCLASS_SUMMARY = 32 << MSGCLASS_SHIFT,
00086 
00088     MSGCLASS_MASK = 255 << MSGCLASS_SHIFT,
00091     MSGSEVERITY_MASK = MSGCLASS_MASK & ~MSGCLASS_SUMMARY,
00095     MSGEVENT_MASK = MSGSEVERITY_MASK & ~MSGCLASS_PROGRESS,
00096 
00098     EVENT_SUMMARY_MIN = 1,
00100     EVENT_SUMMARY_DROPPED_LINES = 1 | MSGCLASS_INFO | MSGCLASS_SUMMARY,
00102     EVENT_SUMMARY_CHANGED_LINES = 2 | MSGCLASS_INFO  | MSGCLASS_SUMMARY,
00104     EVENT_SUMMARY_ERRORED_LINES = 4 | MSGCLASS_WARNING | MSGCLASS_SUMMARY,
00106     EVENT_SUMMARY_ERROR_OUTPUT = 8 | MSGCLASS_WARNING  | MSGCLASS_SUMMARY,
00108     EVENT_SUMMARY_MAX = 16,
00110     EVENT_SUMMARY_MASK = EVENT_SUMMARY_MAX - 1,
00112     PROGRESS_SHIFT = 4,
00114     PROGRESS_PROCESSING_FILE = (45 << PROGRESS_SHIFT) | MSGCLASS_PROGRESS,
00116     PROGRESS_ENTERING_DIR = (46 << PROGRESS_SHIFT) | MSGCLASS_PROGRESS,
00118     PROGRESS_LEAVING_DIR = (47 << PROGRESS_SHIFT) | MSGCLASS_PROGRESS,
00120     PROGRESS_BUILDING_TREE = (49 << PROGRESS_SHIFT) | MSGCLASS_PROGRESS,
00122     PROGRESS_SEARCHING_DIR = (50 << PROGRESS_SHIFT) | MSGCLASS_PROGRESS,
00124     PROGRESS_ADDED_FILE = (51 << PROGRESS_SHIFT) | MSGCLASS_PROGRESS,
00126     PROGRESS_ADDED_DIR = (52 << PROGRESS_SHIFT) | MSGCLASS_PROGRESS,
00128     PROGRESS_FILE_TALLY = (53 << PROGRESS_SHIFT) | MSGCLASS_PROGRESS,
00130     PROGRESS_GOT_OPTIONS = (54 << PROGRESS_SHIFT) | MSGCLASS_PROGRESS,
00131 
00132 
00134     PROGRESS_SUMMARY_SHIFT = 4,
00136     PROGRESS_SUMMARY_FILES_REACHED =
00137     (55 << PROGRESS_SUMMARY_SHIFT) | MSGCLASS_INFO | MSGCLASS_SUMMARY,
00139     PROGRESS_SUMMARY_FILES_DROPPED =
00140     (56 << PROGRESS_SUMMARY_SHIFT) | MSGCLASS_INFO | MSGCLASS_SUMMARY,
00141     PROGRESS_SUMMARY_ALL_DONE =
00142     (57 << PROGRESS_SUMMARY_SHIFT) | MSGCLASS_PROGRESS | MSGCLASS_SUMMARY,
00143 
00145     GRIPE_SHIFT = 4,
00149     GRIPE_DUPLICATE_MASK = (27 << GRIPE_SHIFT) | MSGCLASS_INFO,
00152     GRIPE_SYMLINK = (48 << GRIPE_SHIFT) | MSGCLASS_INFO,
00154     GRIPE_STRAIGHTENED_LINE = (12 << GRIPE_SHIFT) | MSGCLASS_INFO,
00157     GRIPE_REDUNDANT_OPTION = (49 << GRIPE_SHIFT) | MSGCLASS_WARNING,
00161     GRIPE_DUPLICATE_ARGS = (1 << GRIPE_SHIFT) | MSGCLASS_WARNING,
00166     GRIPE_DELETED_CONTRADICTION = (2 << GRIPE_SHIFT) | MSGCLASS_WARNING,
00171     GRIPE_COMMENTED_CONTRADICTION = (3 << GRIPE_SHIFT) | MSGCLASS_WARNING,
00176     GRIPE_ERRORED_CONTRADICTION = (4 << GRIPE_SHIFT) | MSGCLASS_WARNING,
00179     GRIPE_DIFFERING_REDEF = (76 << GRIPE_SHIFT) | MSGCLASS_WARNING,
00180 
00184     GRIPE_UNDEFING_DEFINED = (77 << GRIPE_SHIFT) | MSGCLASS_WARNING,
00185 
00189     GRIPE_UNCONDITIONAL_ERROR_INPUT = (5 << GRIPE_SHIFT) | MSGCLASS_WARNING,
00193     GRIPE_UNCONDITIONAL_ERROR_OUTPUT = (6 << GRIPE_SHIFT) | MSGCLASS_WARNING,
00196     GRIPE_GARBAGE_AFTER_DIRECTIVE = (7 << GRIPE_SHIFT) | MSGCLASS_WARNING,
00198     GRIPE_MISSING_EOF_NEWLINE = (18 << GRIPE_SHIFT)  | MSGCLASS_WARNING,
00201     GRIPE_CIRCULAR_SYM_DEF = (28 << GRIPE_SHIFT) | MSGCLASS_WARNING,
00203     GRIPE_VERBOSE_ONLY = (29 << GRIPE_SHIFT) | MSGCLASS_WARNING,
00205     GRIPE_ZERO_DIVIDE = (38 << GRIPE_SHIFT) | MSGCLASS_WARNING,
00208     GRIPE_DIR_IGNORED = (41 << GRIPE_SHIFT) | MSGCLASS_WARNING,
00209 
00212     GRIPE_EMPTY_SYMBOL = (58 << GRIPE_SHIFT) | MSGCLASS_WARNING,
00214     GRIPE_UNKNOWN_DIRECTIVE = (60 << GRIPE_SHIFT) | MSGCLASS_WARNING,
00216     GRIPE_INVALID_INCLUDE = (61 << GRIPE_SHIFT) | MSGCLASS_WARNING,
00218     GRIPE_STRAY_ESCAPE = (62 << GRIPE_SHIFT) | MSGCLASS_WARNING,
00220     GRIPE_FUNCTION_LIKE_MACRO_EXPANSION = (63 << GRIPE_SHIFT) | MSGCLASS_WARNING,
00222     GRIPE_INT_OVERFLOW = (64 << GRIPE_SHIFT | MSGCLASS_WARNING),
00224     GRIPE_UNCLOSED_QUOTE = (65 << GRIPE_SHIFT) | MSGCLASS_WARNING,
00226     GRIPE_NEGATIVE_SHIFT = (66 << GRIPE_SHIFT) | MSGCLASS_WARNING,
00228     GRIPE_FORCED_UNSIGNED = (67 << GRIPE_SHIFT) | MSGCLASS_WARNING,
00230     GRIPE_SIGN_CHANGED = (68 << GRIPE_SHIFT) | MSGCLASS_WARNING,
00232     GRIPE_SHIFT_OVERFLOW = (69 << GRIPE_SHIFT) | MSGCLASS_WARNING,
00234     GRIPE_CHAR_CONSTANT_TOO_LONG = (70 << GRIPE_SHIFT) | MSGCLASS_WARNING,
00236     GRIPE_MULITBYTE_CHAR_CONSTANT = (71 << GRIPE_SHIFT) | MSGCLASS_WARNING,
00239     GRIPE_TRANSIENT_SYMBOL_ADDED = (73 << GRIPE_SHIFT) | MSGCLASS_WARNING,
00241     GRIPE_INSOURCE_FUNCTION_LIKE_MACRO_DEFINITION = (74 << GRIPE_SHIFT) | MSGCLASS_WARNING,
00243     GRIPE_NO_SYMS = (75 << GRIPE_SHIFT)  | MSGCLASS_WARNING,
00245         GRIPE_BROKEN_SYMLINK = (79 << GRIPE_SHIFT)  | MSGCLASS_WARNING,
00246     /* MAX REASON = 80. When you add a new gripe, you must give it
00247     it the MAX REASON gripe number, increment MAX REASON in this
00248     comment and move this comment adjacent to your new gripe */
00249     GRIPE_ORPHAN_ELIF = (8 << GRIPE_SHIFT) | MSGCLASS_ERROR,
00251     GRIPE_ORPHAN_ELSE = (9 << GRIPE_SHIFT) | MSGCLASS_ERROR,
00253     GRIPE_ORPHAN_ENDIF = (10 << GRIPE_SHIFT) | MSGCLASS_ERROR,
00255     GRIPE_EOF_TOO_SOON = (11 << GRIPE_SHIFT) | MSGCLASS_ERROR,
00257     GRIPE_EOF_IN_COMMENT = (13 << GRIPE_SHIFT) | MSGCLASS_ERROR,
00259     GRIPE_EOF_IN_QUOTE = (14 << GRIPE_SHIFT) | MSGCLASS_ERROR,
00261     GRIPE_NOTHING_TO_DO = (15 << GRIPE_SHIFT)  | MSGCLASS_ERROR,
00265     GRIPE_ONE_FILE_ONLY = (16 << GRIPE_SHIFT)  | MSGCLASS_ERROR,
00267     GRIPE_NEWLINE_IN_QUOTE = (17 << GRIPE_SHIFT)  | MSGCLASS_ERROR,
00269     GRIPE_INVALID_ARGS = (19 << GRIPE_SHIFT)  | MSGCLASS_ERROR,
00271     GRIPE_USAGE_ERROR = (20 << GRIPE_SHIFT)  | MSGCLASS_ERROR,
00273     GRIPE_TOO_DEEP = (21 << GRIPE_SHIFT)  | MSGCLASS_ERROR,
00275     GRIPE_MULTIPLE_ARGFILES = (31 << GRIPE_SHIFT) | MSGCLASS_ERROR,
00279     GRIPE_GARBAGE_ARG = (32 << GRIPE_SHIFT) | MSGCLASS_ERROR,
00281     GRIPE_NOT_IDENTIFIER = (33 << GRIPE_SHIFT) | MSGCLASS_ERROR,
00283     GRIPE_UNBALANCED_PAREN = (59 << GRIPE_SHIFT) | MSGCLASS_ERROR,
00285     GRIPE_GLOBAL_FUNCTION_LIKE_MACRO_DEFINITION = (72 << GRIPE_SHIFT) | MSGCLASS_ERROR,
00287     GRIPE_IF_WITHOUT_COND = (78 << GRIPE_SHIFT) | MSGCLASS_ERROR,
00289     GRIPE_CANT_OPEN_INPUT = (22 << GRIPE_SHIFT) | MSGCLASS_ABEND,
00291     GRIPE_OUT_OF_MEMORY = (23 << GRIPE_SHIFT) | MSGCLASS_ABEND,
00293     GRIPE_FILENAME_TOO_LONG = (24 << GRIPE_SHIFT) | MSGCLASS_ABEND,
00296     GRIPE_EOF_IN_FILENAME = (25 << GRIPE_SHIFT) | MSGCLASS_ABEND,
00298     GRIPE_CONFUSED = (26 << GRIPE_SHIFT) | MSGCLASS_ABEND,
00300     GRIPE_CANT_READ_INPUT = (30 << GRIPE_SHIFT) | MSGCLASS_ABEND,
00302     GRIPE_CANT_WRITE_FILE = (39 << GRIPE_SHIFT) | MSGCLASS_ABEND,
00304     GRIPE_NO_FILE = (40 << GRIPE_SHIFT) | MSGCLASS_ABEND,
00306     GRIPE_ILLEGAL_FILENAME = (34 << GRIPE_SHIFT) | MSGCLASS_ABEND,
00308     GRIPE_CANT_DELETE_FILE = (35 << GRIPE_SHIFT) | MSGCLASS_ABEND,
00310     GRIPE_CANT_RENAME_FILE = (36 << GRIPE_SHIFT) | MSGCLASS_ABEND,
00312     GRIPE_NO_TEMPFILE = (37 << GRIPE_SHIFT) | MSGCLASS_ABEND,
00314     GRIPE_CANT_OPEN_DIR = (42 << GRIPE_SHIFT) | MSGCLASS_ABEND,
00316     GRIPE_CANT_READ_DIR = (43 << GRIPE_SHIFT) | MSGCLASS_ABEND
00317 
00318 } reason_code_t;
00319 
00321 typedef enum {
00322     DBG_1 = 1,
00323     DBG_2,
00324     DBG_3,
00325     DBG_4,
00326     DBG_5,
00327     DBG_6,
00328     DBG_8,
00329     DBG_7,
00330     DBG_9,
00331     DBG_10,
00332     DBG_11,
00333     DBG_12,
00334     DBG_13,
00335     DBG_14,
00336     DBG_15,
00337     DBG_16,
00338     DBG_17,
00339     DBG_18,
00340     DBG_19,
00341     DBG_20,
00342     DBG_21,
00343     DBG_22
00344 } dbg_code_t;
00345 
00351 extern void
00352 set_exit_flags(int bits, bool set);
00353 
00359 extern int
00360 get_exit_flags(int bits);
00361 
00389 extern int exitcode(void);
00390 
00395 extern size_t
00396 line_len(char const *str);
00397 
00402 extern void
00403 flatten_line(char * line);
00404 
00405 
00459 extern void
00460 report(reason_code_t reason, heap_str *buf, const char *format,...);
00461 
00467 extern void
00468 parse_error(int reason, const char *format,...);
00469 
00470 
00475 extern void
00476 give_up_confused(void);
00477 
00487 extern void
00488 vbail(int reason, const char *msg, va_list argp);
00489 
00490 
00497 extern void
00498 bail(int retcode, const char *format,...);
00499 
00503 extern void
00504 debugging(bool on);
00505 
00510 extern void
00511 debug(dbg_code_t how,...);
00512 
00517 extern void
00518 exit_diagnostics(void);
00519 
00521 extern void
00522 orphan_elif(void);
00523 
00525 extern void
00526 orphan_else(void);
00527 
00529 extern void
00530 orphan_endif(void);
00531 
00533 extern void
00534 early_eof(void);
00535 
00537 extern void
00538 processing_file(char const *filename);
00539 
00541 extern void
00542 entering_dir(char const *dirname);
00543 
00545 extern void
00546 leaving_dir(char const *dirname);
00547 
00548 
00582 extern size_t
00583 format_output(void *dest, int *buflen,  int *startoff, char const *format,...);
00584 
00596 extern heap_str
00597 concatenate(size_t count, char *strs[], int punctch);
00598 
00629 extern void
00630 report_symbol(symbol_h sym);
00631 
00655 extern void
00656 report_include(hash_include_const_h inc_arg);
00657 
00672 extern void
00673 report_directive(canonical_string_const_h cl, directive_type_t directive_type);
00674 
00681 extern char *
00682 format_int(int_spec_t const *int_spec);
00683 
00684 
00689 IMPORT_INITOR(report);
00690 IMPORT_FINITOR(report);
00693 #endif /* EOF*/
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Defines