/* * Copyright (c) 1993 David I. Bell * Permission is granted to use, distribute, or modify this source, * provided that this copyright notice remains intact. */ /* * Opcodes */ #define OP_NOP 0L /* no operation */ #define OP_LOCALADDR 1L /* load address of local variable */ #define OP_GLOBALADDR 2L /* load address of global variable */ #define OP_PARAMADDR 3L /* load address of paramater variable */ #define OP_LOCALVALUE 4L /* load value of local variable */ #define OP_GLOBALVALUE 5L /* load value of global variable */ #define OP_PARAMVALUE 6L /* load value of paramater variable */ #define OP_NUMBER 7L /* load constant real numeric value */ #define OP_INDEXADDR 8L /* load array index address */ #define OP_INDEXVALUE 9L /* load array value */ #define OP_ASSIGN 10L /* assign value to variable */ #define OP_ADD 11L /* add top two values */ #define OP_SUB 12L /* subtract top two values */ #define OP_MUL 13L /* multiply top two values */ #define OP_DIV 14L /* divide top two values */ #define OP_MOD 15L /* take mod of top two values */ #define OP_SAVE 16L /* save value for later use */ #define OP_NEGATE 17L /* negate top value */ #define OP_INVERT 18L /* invert top value */ #define OP_INT 19L /* take integer part of top value */ #define OP_FRAC 20L /* take fraction part of top value */ #define OP_NUMERATOR 21L /* take numerator of top value */ #define OP_DENOMINATOR 22L /* take denominator of top value */ #define OP_DUPLICATE 23L /* duplicate top value on stack */ #define OP_POP 24L /* pop top value from stack */ #define OP_RETURN 25L /* return value of function */ #define OP_JUMPEQ 26L /* jump if top value is zero */ #define OP_JUMPNE 27L /* jump if top value is nonzero */ #define OP_JUMP 28L /* jump unconditionally */ #define OP_USERCALL 29L /* call a user-defined function */ #define OP_GETVALUE 30L /* convert address to value */ #define OP_EQ 31L /* test top two elements for equality */ #define OP_NE 32L /* test top two elements for inequality */ #define OP_LE 33L /* test top two elements for <= */ #define OP_GE 34L /* test top two elements for >= */ #define OP_LT 35L /* test top two elements for < */ #define OP_GT 36L /* test top two elements for > */ #define OP_PREINC 37L /* add one to variable (++x) */ #define OP_PREDEC 38L /* subtract one from variable (--x) */ #define OP_POSTINC 39L /* add one to variable (x++) */ #define OP_POSTDEC 40L /* subtract one from variable (x--) */ #define OP_DEBUG 41L /* debugging point */ #define OP_PRINT 42L /* print value */ #define OP_ASSIGNPOP 43L /* assign to variable and remove it */ #define OP_ZERO 44L /* put zero on the stack */ #define OP_ONE 45L /* put one on the stack */ #define OP_PRINTEOL 46L /* print end of line */ #define OP_PRINTSPACE 47L /* print a space */ #define OP_PRINTSTRING 48L /* print constant string */ #define OP_DUPVALUE 49L /* duplicate value of top value */ #define OP_OLDVALUE 50L /* old calculation value */ #define OP_QUO 51L /* integer quotient of top two values */ #define OP_POWER 52L /* number raised to a power */ #define OP_QUIT 53L /* quit program */ #define OP_CALL 54L /* call built-in routine */ #define OP_GETEPSILON 55L /* get allowed error for calculations */ #define OP_AND 56L /* arithmetic and */ #define OP_OR 57L /* arithmetic or */ #define OP_NOT 58L /* logical not */ #define OP_ABS 59L /* absolute value */ #define OP_SGN 60L /* sign of number */ #define OP_ISINT 61L /* whether top value is integer */ #define OP_CONDORJUMP 62L /* conditional or jump */ #define OP_CONDANDJUMP 63L /* conditional and jump */ #define OP_SQUARE 64L /* square top value */ #define OP_STRING 65L /* load constant string value */ #define OP_ISNUM 66L /* whether top value is a number */ #define OP_UNDEF 67L /* load undefined value on stack */ #define OP_ISNULL 68L /* whether variable is the null value */ #define OP_ARGVALUE 69L /* load value of argument (parameter) n */ #define OP_MATINIT 70L /* initialize matrix */ #define OP_ISMAT 71L /* whether variable is a matrix */ #define OP_ISSTR 72L /* whether variable is a string */ #define OP_GETCONFIG 73L /* get value of configuration parameter */ #define OP_LEFTSHIFT 74L /* left shift of integer */ #define OP_RIGHTSHIFT 75L /* right shift of integer */ #define OP_CASEJUMP 76L /* test case and jump if not matched */ #define OP_ISODD 77L /* whether value is an odd integer */ #define OP_ISEVEN 78L /* whether value is even integer */ #define OP_FIADDR 79L /* 'fast index' matrix value address */ #define OP_FIVALUE 80L /* 'fast index' matrix value */ #define OP_ISREAL 81L /* test value for real number */ #define OP_IMAGINARY 82L /* load imaginary numeric constant */ #define OP_RE 83L /* real part of complex number */ #define OP_IM 84L /* imaginary part of complex number */ #define OP_CONJUGATE 85L /* complex conjugate of complex number */ #define OP_OBJINIT 86L /* initialize object */ #define OP_ISOBJ 87L /* whether value is an object */ #define OP_NORM 88L /* norm of value (square of abs) */ #define OP_ELEMADDR 89L /* address of element of object */ #define OP_ELEMVALUE 90L /* value of element of object */ #define OP_ISTYPE 91L /* whether two values are the same type */ #define OP_SCALE 92L /* scale value by a power of two */ #define OP_ISLIST 93L /* whether value is a list */ #define OP_SWAP 94L /* swap values of two variables */ #define OP_ISSIMPLE 95L /* whether value is a simple type */ #define OP_CMP 96L /* compare values returning -1, 0, or 1 */ #define OP_QUOMOD 97L /* calculate quotient and remainder */ #define OP_SETCONFIG 98L /* set configuration parameter */ #define OP_SETEPSILON 99L /* set allowed error for calculations */ #define OP_PRINTRESULT 100L /* print result of top-level expression */ #define OP_ISFILE 101L /* whether value is a file */ #define MAX_OPCODE 101L /* highest legal opcode */ /* * function declarations - most to keep lint happy */ extern void updateoldvalue(); /* END CODE */