#ifndef drwelx06h_H
 #define drwelx06h_H

#ifndef drwosh_H
 #include "DRW/drwosh.h"
#endif

#if defined NAMESPACE_DRWIMPC
  namespace DrWimpC {
#endif

#if defined NAMESPACE_OSLIB
  using namespace OSLib;
#endif

typedef struct drw_scan_script_data             drw_scan_script_data;
typedef struct drw_output_hdr                   drw_output_hdr;
typedef struct drw_stack_entry                  drw_stack_entry;

typedef bits drw_scan_script_flags;
typedef bits drw_scan_script_iflags;

#define drw_def_script_type              ((bits) 0x55)

#define drw_valid_end_of_script          ((drw_scan_script_flags) 0x1u)
#define drw_eos                          ((drw_scan_script_flags) 0x2u)
#define drw_end_of_script                ((drw_scan_script_flags) 0x4u)
#define drw_number_found                 ((drw_scan_script_flags) 0x8u)
#define drw_symbol_read                  ((drw_scan_script_flags) 0x10u)
#define drw_filevar                      ((drw_scan_script_flags) 0x20u)
#define drw_is_literal                   ((drw_scan_script_flags) 0x40u)
#define drw_cu                           ((drw_scan_script_flags) 0x80u)
#define drw_find_symb                    ((drw_scan_script_flags) 0x100u)
#define drw_skip_mode                    ((drw_scan_script_flags) 0x200u)
#define drw_opnd_expected                ((drw_scan_script_flags) 0x400u)
#define drw_opr_expected                 ((drw_scan_script_flags) 0x800u)
#define drw_get_screen_defn              ((drw_scan_script_flags) 0x1000u)
#define drw_user_comms_only              ((drw_scan_script_flags) 0x2000u)
#define drw_ignore_conv                  ((drw_scan_script_flags) 0x4000u)
#define drw_condition_context            ((drw_scan_script_flags) 0x8000u)
#define drw_scancond                     ((drw_scan_script_flags) 0x10000u)
#define drw_begin_found                  ((drw_scan_script_flags) 0x20000u)
#define drw_no_line_number               ((drw_scan_script_flags) 0x40000u)
#define drw_allow_all                    ((drw_scan_script_flags) 0x80000u)


#define drw_retain_da_script_space       ((drw_scan_script_iflags) 0x1u)
#define drw_no_file_check                ((drw_scan_script_iflags) 0x2u)


#define drw_symbol_composite_limit       1023
#define DRW_MAXSYMBOLSIZE                1024

#define DRW_CHUNKSIZE (long) 0x400
#define DRW_HEAP_CHUNKSIZE (long) 0x400
#define DRW_CONST_HEAP_CHUNKSIZE (long) 0x100
#define DRW_VARLIST_CHUNKSIZE 0x100
#define DRW_CONSTLIST_CHUNKSIZE 0x10
#define DRW_TEMP_STRING_STACK_SIZE 0x800
#define DRW_MAXGOTOPATHNAMESIZE 23
#define DRW_MAX_IF_LEVELS 16
#define DRW_MAX_WHILE_LEVELS 16
#define DRW_MAX_DO_LEVELS 16
#define DRW_NUM_DATA_TYPES 10
#define DRW_NUM_BI_COMM 7
#define DRW_NUM_EXP_COMM 1
#define DRW_BLOCK_STACKSIZE 32
#define DRW_NUM_CONV_TYPES 4
#define DRW_NUM_OPS 276

#define DRW_NUM_REL_OPS 1

#define drw_first_rel_opno 10
#define drw_last_rel_opno   17

#define DRW_END_OF_SOURCE '\0'
#define DRW_COMMENT_CH '@'
                          

typedef bits drw_error_flags;


#define drw_report_stats             ((drw_error_flags) 0x1u)
#define drw_has_errors               ((drw_error_flags) 0x2u)


#define drw_info_msg      0x1u
#define drw_warning_msg   0x2u
#define drw_error_msg     0x3u
#define drw_serror_msg    0x4u


typedef enum {


DRW_SCPD_NO_ERROR = 0,
DRW_INVALID_END_OF_INPUT,
DRW_OPR_EXPECTED,
DRW_OPND_EXPECTED,
DRW_SYMBOL_TOO_LONG,
DRW_INVALID_NUMBER,
DRW_NUMBER_EXPECTED,
DRW_UNEXPECTED_EORP,
DRW_INVALID_SENTENCE_START,
DRW_SYNTAX_ERROR,
DRW_EMPTY_SENTENCE,
DRW_LITERAL_INVALID,
DRW_OUT_OF_CONTEXT,
DRW_EXPECTED_EOS,
DRW_UNEXPECTED_RB,
DRW_SCRIPT_NOT_FOUND,
DRW_NAME_EXPECTED,
DRW_LITERAL_EXPECTED

} drw_scan_script_errno;


typedef enum {

DRW_AND_COMM_NO = 0,
DRW_NOT_COMM_NO,
DRW_OR_COMM_NO,
DRW_RUN_COMM_NO,
DRW_SCRIPT_COMM_NO,
DRW_START_COMM_NO,
DRW_USING_COMM_NO

} drw_bi_comm_numbers;


typedef enum {


DRW_ARRAYSTART = 0,
DRW_ARRAYEND,
DRW_NOT,
DRW_UPLUS,
DRW_UMINUS,
DRW_POWER,
DRW_MULTIPLY,
DRW_DIVIDE,
DRW_PLUS,
DRW_MINUS,
DRW_LT,
DRW_LE,
DRW_GT,
DRW_GE,
DRW_STARTSWITH,
DRW_CONTAINS,
DRW_EQ,
DRW_NE,
DRW_AND,
DRW_OR,
DRW_EQUALS,
DRW_RB,
DRW_LB,
DRW_NULL_OP,
DRW_EOS,
DRW_COMMA,
DRW_START,
DRW_ALIGN,
DRW_ALWAYS,
DRW_AS,
DRW_BEGIN,
DRW_BLZ,
DRW_BREAK,
DRW_BY,
DRW_CALL,
DRW_CASE,
DRW_CENTRE,
DRW_CENTURY,
DRW_CHANGED,
DRW_CLEARLINES,
DRW_CLEARNUMERICS,
DRW_CLEARTEXTS,
DRW_CLICKON,
DRW_COL,
DRW_COLUMN,
DRW_COLUMNS,
DRW_COMMON,
DRW_CONTINUE,
DRW_CONVERT,
DRW_COPY,
DRW_DATABASES,
DRW_DATABASESEND,
DRW_DATEOP,
DRW_DAYS,
DRW_DEC,
DRW_DECIMALS,
DRW_DELIMITER,
DRW_DIV,
DRW_DO,
DRW_DOUBLEOP,
DRW_ELSE,
DRW_END,
DRW_ENTERED,
DRW_ENVNAME,
DRW_EVALUATE,
DRW_EVERY,
DRW_EXIT,
DRW_FONT,
DRW_FOR,
DRW_FORMAT,
DRW_FROM,
DRW_GOTO,
DRW_GROUP,
DRW_GROUPEND,
DRW_HELP,
DRW_HOURS,
DRW_IF,
DRW_INC,
DRW_INDENT,
DRW_INITIALISE,
DRW_INPUT,
DRW_INTOP,
DRW_INVOKE,
DRW_IS,
DRW_JUSTIFY,
DRW_KEY,
DRW_LAYOUT,
DRW_LAYOUTEND,
DRW_LEFT,
DRW_LINE,
DRW_LONGOP,
DRW_LOWER,
DRW_LPNAME,
DRW_MANDATORY,
DRW_MESSAGEFILE,
DRW_MINUTE,
DRW_BI_MINUTES,
DRW_MINUTES,
DRW_MONTH,
DRW_MONTHDAY,
DRW_MULT,
DRW_NOEVAL,
DRW_NOFMT,
DRW_NOTENTERED,
DRW_OFF,
DRW_ON,
DRW_OPTIONAL,
DRW_OUTPUT,
DRW_PAGEWIDTH,
DRW_PRINTER,
DRW_PROGNAME,
DRW_PROGRAMNAME,
DRW_RESTORENUMERICS,
DRW_RESTORETEXTS,
DRW_REALOP,
DRW_REPEAT,
DRW_RETAIN,
DRW_RETURN,
DRW_RIGHT,
DRW_RUN,
DRW_RUNNABLE,
DRW_SAME,
DRW_SCREEN_OP,
DRW_SCREENEND,
DRW_SECOND,
DRW_BI_SECONDS,
DRW_SECONDS,
DRW_SEPARATED,
DRW_SET,
DRW_SETVAR,
DRW_STRINGOP,
DRW_SUPPRESSABLE,
DRW_TEXT,
DRW_THRU,
DRW_TIMEOP,
DRW_TIMES,
DRW_TITLE,
DRW_TO,
DRW_RECORDOP,
DRW_RECORDENDOP,
DRW_TABLEOP,
DRW_TABLEENDOP,
DRW_UNCHANGED,
DRW_UPDATED,
DRW_UPPER,
DRW_USING,
DRW_WEEK,
DRW_WEEKDAY,
DRW_WEEKENDING,
DRW_WHEN,
DRW_WHENLIST,
DRW_WHENLISTEND,
DRW_WHILE,
DRW_ENDWHILE,
DRW_ENDDO,
DRW_WIDTH,
DRW_WORKDATA,
DRW_WORKDATAEND,
DRW_YEAR,
DRW_ENDCALL,
DRW_USEROP,
DRW_USERCONDOP,
DRW_WORKVAR,
DRW_SCREENVAR,
DRW_VARIABLE,
DRW_EXTERNAL,
DRW_CONSTANT,
DRW_TEMPORARY,
DRW_GETUSERARG,
DRW_USERVAL,
DRW_USERVAR,
DRW_SPECIALNAME,
DRW_FILEVAR,
DRW_ARRAYSUB,
DRW_LASTARRAYSUB,
DRW_FALSE,
DRW_KEYSONLY,
DRW_SCRCH,
DRW_SCREENCHANGED,
DRW_SPACES,
DRW_SUBSTR,
DRW_TIMENOW,
DRW_TODAYSDATE,
DRW_TRUE,
DRW_RESTACK_OP,
DRW_CALLPN,
DRW_GOTOPN,
DRW_INVOKEPN,
DRW_CRB,
DRW_CLB,
DRW_STRLEN,
DRW_ILEN,
DRW_NUMENTRIES,
DRW_TLEN,
DRW_OFFSETOF,
DRW_AUTOSUB,
DRW_LASTAUTOSUB,
DRW_EQUALSINT,
DRW_EQUALSLONG,
DRW_EQUALSREAL,
DRW_EQUALSDOUBLE,
DRW_EQUALSSTRING,
DRW_UPLUSINT,
DRW_UPLUSLONG,
DRW_UPLUSREAL,
DRW_UPLUSDOUBLE,
DRW_UMINUSINT,
DRW_UMINUSLONG,
DRW_UMINUSREAL,
DRW_UMINUSDOUBLE,
DRW_PLUSINT,
DRW_PLUSLONG,
DRW_PLUSREAL,
DRW_PLUSDOUBLE,
DRW_PLUSSTRING,
DRW_MINUSINT,
DRW_MINUSLONG,
DRW_MINUSREAL,
DRW_MINUSDOUBLE,
DRW_MULTIPLYINT,
DRW_MULTIPLYLONG,
DRW_MULTIPLYREAL,
DRW_MULTIPLYDOUBLE,
DRW_DIVIDEINT,
DRW_DIVIDELONG,
DRW_DIVIDEREAL,
DRW_DIVIDEDOUBLE,
DRW_POWERINT,
DRW_POWERLONG,
DRW_POWERREAL,
DRW_POWERDOUBLE,
DRW_EQINT,
DRW_EQLONG,
DRW_EQREAL,
DRW_EQDOUBLE,
DRW_EQSTRING,
DRW_GEINT,
DRW_GELONG,
DRW_GEREAL,
DRW_GEDOUBLE,
DRW_GESTRING,
DRW_GTINT,
DRW_GTLONG,
DRW_GTREAL,
DRW_GTDOUBLE,
DRW_GTSTRING,
DRW_LEINT,
DRW_LELONG,
DRW_LEREAL,
DRW_LEDOUBLE,
DRW_LESTRING,
DRW_LTINT,
DRW_LTLONG,
DRW_LTREAL,
DRW_LTDOUBLE,
DRW_LTSTRING,
DRW_NEINT,
DRW_NELONG,
DRW_NEREAL,
DRW_NEDOUBLE,
DRW_NESTRING,
DRW_INT_TO_LONG,
DRW_INT_TO_REAL,
DRW_INT_TO_DOUBLE,
DRW_LONG_TO_INT,
DRW_LONG_TO_REAL,
DRW_LONG_TO_DOUBLE,
DRW_REAL_TO_INT,
DRW_REAL_TO_LONG,
DRW_REAL_TO_DOUBLE,
DRW_DOUBLE_TO_INT,
DRW_DOUBLE_TO_LONG,
DRW_DOUBLE_TO_REAL,
DRW_END_OF_SCRIPT,
DRW_SQLB,
DRW_SQRB,
DRW_NEXT_CMD

} drw_type_ids;


typedef enum {

DRW_NONARY = 0,
DRW_UNARY,
DRW_BINARY

} drw_opr_types;


typedef enum {

DRW_UNSET = 0,
DRW_INT = 1,
DRW_LONG = 2,
DRW_REAL = 4,
DRW_DOUBLE = 8,
DRW_STRING = 16,
DRW_DATE = 32,
DRW_TIME = 64,
DRW_CDATE = 128,
DRW_BOOL = 256,
DRW_USER_ERRORBLOCK_PTR = 512

} drw_data_types;


typedef enum {

DRW_COMPILE_PROGRAM = 1,
DRW_COMPILE_ENVIRONMENTS,
DRW_COMPILE_FORM,
DRW_COMPILE_VIEW,
DRW_RELOAD_SCR

} drw_compile_types;


#define drw_first_ch_opno 3
#define drw_last_ch_opno 9

typedef int (**scan_user_comm)(drw_scan_script_data *scpd);


struct drw_stack_entry {

int opno;

};


struct drw_output_hdr {

long numentries;
long numused;
drw_stack_entry *rpout;

};


struct drw_scan_script_data {

char *filename;
bits scripttype;
char *savetofile;
char *text;
int tptr;
int errno;
int numwarnings;
drw_error_flags errorflags;
drw_throwback_flags thbkflags;
int numerrors;
int thisdaspaceused;
int linest;
int colst;
int line;
int col;
int chcount;
int lbcount;
int exp_lbcount;
int cond_lbcount;
int oprno;
int bi_command_no;
int exp_command_no;
int user_command_no;
int user_symbol_no;
char symbol[drw_symbol_composite_limit + 1];
char user_literal_delim[4];
drw_scan_script_flags flags;
drw_scan_script_iflags iflags;
int currtype;
int newtype;
int optypes;
char *bimsghandle;
int num_user_comm;
char **user_comms_uc;
char **user_comms_lc;
scan_user_comm sc_ucomm;
drw_output_hdr rpout;
void *userdata;
char *usermsghandle;

};

#if defined NAMESPACE_DRWIMPC
  }
#endif

#include "DRW/drwE06.h"

#endif

/* End of File. */
