home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / octa21fs.zip / octave / f2c / src / output.h < prev    next >
C/C++ Source or Header  |  2000-01-15  |  2KB  |  65 lines

  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.  
  12. /* Definitions for the opcode table.  The table is indexed by the macros
  13.    which are #defined in   defines.h   */
  14.  
  15. #define UNARY_OP 01
  16. #define BINARY_OP 02
  17.  
  18. #define SPECIAL_FMT NULL
  19.  
  20. #define is_unary_op(x) (opcode_table[x].type == UNARY_OP)
  21. #define is_binary_op(x) (opcode_table[x].type == BINARY_OP)
  22. #define op_precedence(x) (opcode_table[x].prec)
  23. #define op_format(x) (opcode_table[x].format)
  24.  
  25. /* _assoc_table -- encodes left-associativity and right-associativity
  26.    information; indexed by precedence level.  Only 2, 3, 14 are
  27.    right-associative.  Source:  Kernighan & Ritchie, p. 49 */
  28.  
  29. extern char _assoc_table[];
  30.  
  31. #define is_right_assoc(x) (_assoc_table [x])
  32. #define is_left_assoc(x) (! _assoc_table [x])
  33.  
  34.  
  35. typedef struct {
  36.     int type;            /* UNARY_OP or BINARY_OP */
  37.     int prec;            /* Precedence level, useful for adjusting
  38.                    number of parens to insert.  Zero is a
  39.                    special level, and 2, 3, 14 are
  40.                    right-associative */
  41.     char *format;
  42. } table_entry;
  43.  
  44.  
  45. extern char *fl_fmt_string;    /* Float constant format string */
  46. extern char *db_fmt_string;    /* Double constant format string */
  47. extern char *cm_fmt_string;    /* Complex constant format string */
  48. extern char *dcm_fmt_string;    /* Double Complex constant format string */
  49.  
  50. extern int indent;        /* Number of spaces to indent; this is a
  51.                    temporary fix */
  52. extern int tab_size;        /* Number of spaces in each tab */
  53. extern int in_string;
  54.  
  55. extern table_entry opcode_table[];
  56.  
  57.  
  58. void    compgoto_out Argdcl((FILEP, tagptr, tagptr));
  59. void    endif_out Argdcl((FILEP));
  60. void    expr_out Argdcl((FILEP, tagptr));
  61. void    out_and_free_statement Argdcl((FILEP, tagptr));
  62. void    out_end_for Argdcl((FILEP));
  63. void    out_if Argdcl((FILEP, tagptr));
  64. void    out_name Argdcl((FILEP, Namep));
  65.