mirror of
https://github.com/lcn2/calc.git
synced 2025-08-16 01:03:29 +03:00
Converted all ASCII tabs to ASCII spaces using a 8 character tab stop, for all files, except for all Makefiles (plus rpm.mk). The `git diff -w` reports no changes.
184 lines
9.8 KiB
C
184 lines
9.8 KiB
C
/*
|
|
* opcodes - opcode execution module definition
|
|
*
|
|
* Copyright (C) 1999-2007,2014,2021 David I. Bell
|
|
*
|
|
* Calc is open software; you can redistribute it and/or modify it under
|
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
|
* as published by the Free Software Foundation.
|
|
*
|
|
* Calc is distributed in the hope that it will be useful, but WITHOUT
|
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
|
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
|
|
* Public License for more details.
|
|
*
|
|
* A copy of version 2.1 of the GNU Lesser General Public License is
|
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
*
|
|
* Under source code control: 1990/02/15 01:48:35
|
|
* File existed as early as: before 1990
|
|
*
|
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
|
*/
|
|
|
|
|
|
#if !defined(INCLUDE_OPCODES_H)
|
|
#define INCLUDE_OPCODES_H
|
|
|
|
|
|
#if defined(CALC_SRC) /* if we are building from the calc source tree */
|
|
# include "decl.h"
|
|
#else
|
|
# include <calc/decl.h>
|
|
#endif
|
|
|
|
|
|
/*
|
|
* 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 parameter 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 parameter variable */
|
|
#define OP_NUMBER 7L /* load constant real numeric value */
|
|
#define OP_INDEXADDR 8L /* load array index address */
|
|
#define OP_PRINTRESULT 9L /* print result of top-level expression */
|
|
#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_JUMPZ 26L /* jump if top value is zero */
|
|
#define OP_JUMPNZ 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_MATCREATE 70L /* create 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_OBJCREATE 86L /* create 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_SETCONFIG 97L /* set configuration parameter */
|
|
#define OP_SETEPSILON 98L /* set allowed error for calculations */
|
|
#define OP_ISFILE 99L /* whether value is a file */
|
|
#define OP_ISASSOC 100L /* whether value is an association */
|
|
#define OP_INITSTATIC 101L /* once only code for static initialization */
|
|
#define OP_ELEMINIT 102L /* assign element of matrix or object */
|
|
#define OP_ISCONFIG 103L /* whether value is a configuration state */
|
|
#define OP_ISHASH 104L /* whether value is a hash state */
|
|
#define OP_ISRAND 105L /* whether value is subtractive 100 state */
|
|
#define OP_ISRANDOM 106L /* whether value is a Blum random state */
|
|
#define OP_SHOW 107L /* show data about current state */
|
|
#define OP_INITFILL 108L /* fill new matrix with copies of a value */
|
|
#define OP_ASSIGNBACK 109L /* assign in reverse order */
|
|
#define OP_TEST 110L /* test whether value is "nonzero" */
|
|
#define OP_ISDEFINED 111L /* whether string names a function */
|
|
#define OP_ISOBJTYPE 112L /* whether string names an object type */
|
|
#define OP_ISBLK 113L /* whether value is a block */
|
|
#define OP_PTR 114L /* octet pointer */
|
|
#define OP_DEREF 115L /* dereference an octet pointer */
|
|
#define OP_ISOCTET 116L /* whether value is an octet */
|
|
#define OP_ISPTR 117L /* whether value is a pointer */
|
|
#define OP_SAVEVAL 118L /* activate updating */
|
|
#define OP_LINKS 119L /* return links for numbers and strings */
|
|
#define OP_BIT 120L /* whether specified bit is set */
|
|
#define OP_COMP 121L /* complement value */
|
|
#define OP_XOR 122L /* xor (~) of values */
|
|
#define OP_HIGHBIT 123L /* index of high bit of value */
|
|
#define OP_LOWBIT 124L /* index of low bit of value */
|
|
#define OP_CONTENT 125L /* value returned by unary # */
|
|
#define OP_HASHOP 126L /* binary # */
|
|
#define OP_BACKSLASH 127L /* unary backslash */
|
|
#define OP_SETMINUS 128L /* binary backslash */
|
|
#define OP_PLUS 129L /* unary + */
|
|
#define OP_JUMPNN 130L /* jump if top value is non-null */
|
|
#define OP_ABORT 131L /* abort operation */
|
|
#define MAX_OPCODE 131L /* highest legal opcode */
|
|
|
|
|
|
/*
|
|
* external declarations
|
|
*/
|
|
EXTERN char *funcname; /* function being executed */
|
|
EXTERN long funcline; /* function line being executed */
|
|
|
|
|
|
#endif /* !INCLUDE_OPCODES_H */
|