1 /* This file is part of the program psim. 2 3 Copyright (C) 1994-1995, Andrew Cagney <cagney@highland.com.au> 4 5 This program is free software; you can redistribute it and/or modify 6 it under the terms of the GNU General Public License as published by 7 the Free Software Foundation; either version 3 of the License, or 8 (at your option) any later version. 9 10 This program is distributed in the hope that it will be useful, 11 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 GNU General Public License for more details. 14 15 You should have received a copy of the GNU General Public License 16 along with this program; if not, see <http://www.gnu.org/licenses/>. 17 18 */ 19 20 21 /* LF: Line Numbered Output Stream */ 22 23 #include "ansidecl.h" 24 25 typedef struct _lf lf; 26 27 typedef enum { 28 lf_is_h, 29 lf_is_c, 30 lf_is_text, 31 } lf_file_type; 32 33 34 typedef enum { 35 lf_include_references, 36 lf_omit_references, 37 } lf_file_references; 38 39 40 /* Open the file NAME for writing. REAL_NAME is to be included in any 41 line number outputs. The output of line number information can be 42 suppressed with LINE_NUMBERS */ 43 44 extern lf *lf_open 45 (const char *name, 46 const char *real_name, 47 lf_file_references file_references, 48 lf_file_type type, 49 const char *program); 50 51 extern void lf_close 52 (lf *file); 53 54 55 /* Basic output functions */ 56 57 extern int lf_putchr 58 (lf *file, 59 const char ch); 60 61 extern int lf_putstr 62 (lf *file, 63 const char *string); 64 65 extern int lf_putint 66 (lf *file, 67 int decimal); 68 69 extern int lf_putbin 70 (lf *file, 71 int decimal, 72 int width); 73 74 extern int lf_printf 75 (lf *file, 76 const char *fmt, 77 ...) ATTRIBUTE_PRINTF_2; 78 79 80 /* Indentation control. 81 82 lf_indent_suppress suppresses indentation on the next line (current 83 line if that has not yet been started) */ 84 85 extern void lf_indent_suppress 86 (lf *file); 87 88 extern void lf_indent 89 (lf *file, 90 int delta); 91 92 93 /* Print generic text: */ 94 95 96 extern int lf_print__gnu_copyleft 97 (lf *file); 98 99 extern int lf_print__file_start 100 (lf *file); 101 102 extern int lf_print__this_file_is_empty 103 (lf *file); 104 105 extern int lf_print__file_finish 106 (lf *file); 107 108 extern int lf_print__internal_reference 109 (lf *file); 110 111 extern int lf_print__external_reference 112 (lf *file, 113 int line_nr, 114 const char *file_name); 115 116 extern int lf_print__ucase_filename 117 (lf *file); 118 119 /* Tab prefix is suppressed */ 120 121 extern int lf_print__c_code 122 (lf *file, 123 const char *code); 124 125 126 extern int lf_print_function_type 127 (lf *file, 128 const char *type, 129 const char *prefix, 130 const char *trailing_space); 131