/* l2xcom.h      typedefs, etc for ltx2x */

#ifndef L2XCOM_H
#define L2XCOM_H

#ifndef STRTYPES_H
#include "strtypes.h"
#endif

#ifndef common_h
typedef int ICT;           /* from inter code  common.h  */
#endif

typedef union u_rwc{
           int bfnum;  /* buffer or file number */
           FILE *uf;    /* file */
           STRING defstr;  /* string in CT */
           ICT *bytecode;  /* pointer to a compiled code segment */
          } URWC ;

typedef struct st_rwc{
            struct st_rwc *next;     /* pointer to next in list */
            int cmd;                 /* command keyword enum */
            int pcenum;              /* print_control enum */
            URWC  rwcode;            /* print_control value */
            } STRWC, *PSTRWC ;


typedef struct st_entry {           /* symbol table entry */
 STRING command;                   /* user defined command string */
 int kind;                         /* user defined kind of command */
 int parse_kind;                   /* system defined kind of command */
 int mode;                         /* mode for this command (if any) */
 struct st_entry *next_mode;       /* pointer to next mode */
 PSTRWC printing;                  /* print control (changed 6/96 from int) */
 PSTRWC command_t;                 /* command tag */
 PSTRWC command_et;                /* end of command tag */
 int numparams;                    /* user defined no. of required params */
 PSTRWC param_t[9];                /* parameter begin tags */
 PSTRWC param_et[9];               /* parameter end tags */
 PSTRWC print_param[9];    /* param text print control (changed 6/96 from int) */
 int opt_param_pos;                /* position (if any) of optional param */
 PSTRWC opt_param_t;               /* opt param begin tag */
 PSTRWC opt_param_et;              /* opt param end tag */
 PSTRWC popt_param_t[2];           /* (SD) first and last opt param begin tag */
 PSTRWC popt_param_et[2];          /* (SD) first and last opt param end tags */
 PSTRWC print_opt[2];      /* opt param text print control (changed 6/96 from int) */
 PSTRWC start_pc;                  /* starting print control (added 6/96) */
 PSTRWC end_pc;                    /* ending print control (added 6/96) */
 int sectioning_level;             /* user specified sectioning level */
 int special_token;                /* user defined special token for/from yac */
} STENTRY, *PSENTRY;

#define IERR -1

enum print_control{
#define kwtc(a, b)
#define lctc(a, b)
#define pctc(a, b) a,
#include "l2xlibtc.h"
#undef kwtc
#undef lctc
#undef pctc
};

/*
enum print_control{BUFFER,
                  DEFAULT_PRINT,
                  FFILE,
                  FIRST_STRING,
                  MODE,
                  NO_OP,
                  NO_PRINT,
                  PRINT_UNDERFLOW,
                  RESET,
                  SOURCE_STRING,
                  SYSBUF,
                  TO_BUFFER,
                  TO_FILE,
                  TO_SYSBUF,
                  UNKNOWN_PRINT,
                  MAX_PCSTR};
*/

#endif