|
|
1.1 ! root 1: /* nice_printf -- same arguments as fprintf. ! 2: ! 3: All output which is to become C code must be directed through this ! 4: function. For now, no buffering is done. Later on, every line of ! 5: output will be filtered to accomodate the style definitions (e.g. one ! 6: statement per line, spaces between function names and argument lists, ! 7: etc.) ! 8: */ ! 9: #include "niceprintf.h" ! 10: ! 11: extern int nice_printf (); ! 12: ! 13: ! 14: /* Definitions for the opcode table. The table is indexed by the macros ! 15: which are #defined in defines.h */ ! 16: ! 17: #define UNARY_OP 01 ! 18: #define BINARY_OP 02 ! 19: ! 20: #define SPECIAL_FMT NULL ! 21: ! 22: #define is_unary_op(x) (opcode_table[x].type == UNARY_OP) ! 23: #define is_binary_op(x) (opcode_table[x].type == BINARY_OP) ! 24: #define op_precedence(x) (opcode_table[x].prec) ! 25: #define op_format(x) (opcode_table[x].format) ! 26: ! 27: /* _assoc_table -- encodes left-associativity and right-associativity ! 28: information; indexed by precedence level. Only 2, 3, 14 are ! 29: right-associative. Source: Kernighan & Ritchie, p. 49 */ ! 30: ! 31: extern char _assoc_table[]; ! 32: ! 33: #define is_right_assoc(x) (_assoc_table [x]) ! 34: #define is_left_assoc(x) (! _assoc_table [x]) ! 35: ! 36: ! 37: typedef struct { ! 38: int type; /* UNARY_OP or BINARY_OP */ ! 39: int prec; /* Precedence level, useful for adjusting ! 40: number of parens to insert. Zero is a ! 41: special level, and 2, 3, 14 are ! 42: right-associative */ ! 43: char *format; ! 44: } table_entry; ! 45: ! 46: ! 47: extern char *fl_fmt_string; /* Float constant format string */ ! 48: extern char *db_fmt_string; /* Double constant format string */ ! 49: extern char *cm_fmt_string; /* Complex constant format string */ ! 50: extern char *dcm_fmt_string; /* Double Complex constant format string */ ! 51: ! 52: extern int indent; /* Number of spaces to indent; this is a ! 53: temporary fix */ ! 54: extern int tab_size; /* Number of spaces in each tab */ ! 55: extern int in_string; ! 56: ! 57: extern table_entry opcode_table[]; ! 58: ! 59: ! 60: void expr_out (), out_init (), out_addr (), out_const (); ! 61: void out_name (), extern_out (), out_asgoto (); ! 62: void out_if (), out_else (), elif_out (); ! 63: void endif_out (), end_else_out (); ! 64: void compgoto_out (), out_for (); ! 65: void out_end_for (), out_and_free_statement ();
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.