/***************************************************************************** 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 */