|
|
/*****************************************************************************
emocii.h
Owner: DaleG Copyright (c) 1996-1997 Microsoft Corporation
OpCode Interpreter Instruction definition file
*****************************************************************************/
#ifndef EMOCII_H
#define EMOCII_H
MSOEXTERN_C_BEGIN // ***************** Begin extern "C" ********************
// Define "Push Immediate" operations
#define ociiImmLong (-1) // Push literal long
#define ociiImmULong (-2) // Push literal ulong
#define ociiImmShort (-3) // Push literal short
#define ociiImmUShort (-4) // Push literal ushort
#define ociiImmChar (-5) // Push literal char
#define ociiImmUChar (-6) // Push literal uchar
#define ociiImmFloat (-7) // Push literal float
#define ociiStackValue (-8) // Push val from stack
#define ociiStackAddr (-9) // Push addr from stack
#define ociiGlobalValue (-10) // Push global value
#define ociiGlobalAddr (-11) // Push addr of global
#define ociiEventValue (-12) // Push event value
#define ociiEventAddr (-13) // Push event address
#define ociiImmSz (-14) // Push ptr to string
#define ociiImmRg (-15) // Push ptr to array
#define ociiRulFirst 55 // 1st emruloci.h fn
// Define builtin functions
#define ociiDelayGoToDirul 55 // DelayGoToDirul()
#define ociiSignal 56 // Signal a node
#define ociiSignalFrom 57 // Signal node from 2nd
#define ociiRulParams 58 // Set rulebase params
#define ociiDefEvent 59 // Define an event
#define ociiDefRule 60 // Define a rule
#define ociiMapEvalLevels 61 // Map levels for oci
#define ociiUserFirst 62 // 1st User-defined fn
// Define function argument "counts" that are not fixed
#define ocadNonEval (-3) // Non-evaluating fn
#define ocadVarArgs (-4) // Var-args function
/* M S O O C I I */ /*----------------------------------------------------------------------------
%%Type: MSOOCII %%Contact: daleg
Interpreter instruction definition. ----------------------------------------------------------------------------*/
typedef short MSOOCII; // Interp instr
#define MSOOCV long // Interp ret value
//typedef long MSOOCV; // Interp ret value
typedef signed char MSOOCAD; // Arg descriptor
// Return whether the instruction pointer refers to a variable
#define FVarLpocii(pocii) \
(*pocii == ociiEventValue)
// Define data types: these must have same order as access functions below
typedef enum { ocdtChar = 0, // 0
ocdtUChar, // 1
ocdtShort, // 2
ocdtUShort, // 3
ocdtInt, // 4
ocdtUInt, // 5
ocdtLong, // 6
ocdtULong, // 7
ocdtFloat, // 8
ocdtDouble, // 9
ocdtLDouble, // 10
ocdtPointer, // 11
ocdtVoid, // 12
ocdtVarArg // 13 (Take anything)
} OCDT;
/*----------------------------------------------------------------------------
Interpreter op-code value for functions. This must be maintained in the order that the functions will appear in the op-code v-table. ----------------------------------------------------------------------------*/
typedef enum { ipfnOcv_log_and = 0, // 0
ipfnOcv_log_or, // 1
ipfnOcv_log_not, // 2
ipfnOcv_less_than, // 3
ipfnOcv_less_eql, // 4
ipfnOcv_eql, // 5
ipfnOcv_gtr_eql, // 6
ipfnOcv_gtr_than, // 7
ipfnOcv_not_eql, // 8
ipfnOcv_assign, // 9
ipfnOcv_plus, // 10
ipfnOcv_minus, // 11
ipfnOcv_mult, // 12
ipfnOcv_divide, // 13
ipfnOcv_mod, // 14
ipfnOcv_increment, // 15
ipfnOcv_decrement, // 16
ipfnOcv_unary_plus, // 17
ipfnOcv_unary_minus, // 18
ipfnOcv_bitwise_not, // 19
ipfnOcv_bitwise_and, // 20
ipfnOcv_bitwise_or, // 21
ipfnOcv_bitwise_xor, // 22
ipfnOcv_shift_l, // 23
ipfnOcv_shift_r, // 24
ipfnOcv_dereference, // 25
ipfnOcv_addr_of, // 26
ipfnOcv_cast_as, // 27
ipfnOcv_if, // 28
ipfnOcv_inline_if, // 29
ipfnOcv_let, // 30
ipfnOcv_progn, // 31
ipfnOcv_compound_stmt, // 32
ipfnOcv_get_char, // 33
ipfnOcv_get_uchar, // 34
ipfnOcv_get_short, // 35
ipfnOcv_get_ushort, // 36
ipfnOcv_get_int, // 37
ipfnOcv_get_uint, // 38
ipfnOcv_get_long, // 39
ipfnOcv_get_ulong, // 40
ipfnOcv_get_float, // 41
ipfnOcv_get_double, // 42
ipfnOcv_get_ldouble, // 43
ipfnOcv_set_char, // 44
ipfnOcv_set_uchar, // 45
ipfnOcv_set_short, // 46
ipfnOcv_set_ushort, // 47
ipfnOcv_set_int, // 48
ipfnOcv_set_uint, // 49
ipfnOcv_set_long, // 50
ipfnOcv_set_ulong, // 51
ipfnOcv_set_float, // 52
ipfnOcv_set_double, // 53
ipfnOcv_set_ldouble, // 54
} OCIT;
#define ipfnOcvGetTypeFirst ipfnOcv_get_char
#define ipfnOcvSetTypeFirst ipfnOcv_set_char
MSOEXTERN_C_END // ****************** End extern "C" *********************
#endif /* !EMOCII_H */
|