aboutsummaryrefslogtreecommitdiffstats
path: root/evaluator.h
diff options
context:
space:
mode:
authorreinelt <reinelt@3ae390bd-cb1e-0410-b409-cd5a39f66f1f>2003-10-06 04:34:06 +0000
committerreinelt <reinelt@3ae390bd-cb1e-0410-b409-cd5a39f66f1f>2003-10-06 04:34:06 +0000
commit9cda8378d11759032315ef79032e1ac3dc6beddb (patch)
treee98d75bdf53bfa0c7aa67165c13e647bb6e2e6c7 /evaluator.h
parent54945a6e1b3f8556a87c37d74693548321ae09e1 (diff)
downloadlcd4linux-9cda8378d11759032315ef79032e1ac3dc6beddb.tar.gz
[lcd4linux @ 2003-10-06 04:34:06 by reinelt]
expression evaluator added git-svn-id: https://ssl.bulix.org/svn/lcd4linux/trunk@256 3ae390bd-cb1e-0410-b409-cd5a39f66f1f
Diffstat (limited to 'evaluator.h')
-rw-r--r--evaluator.h90
1 files changed, 90 insertions, 0 deletions
diff --git a/evaluator.h b/evaluator.h
new file mode 100644
index 0000000..661b967
--- /dev/null
+++ b/evaluator.h
@@ -0,0 +1,90 @@
+/* $Id: evaluator.h,v 1.1 2003/10/06 04:34:06 reinelt Exp $
+ *
+ * expression evaluation
+ *
+ * based on EE (Expression Evaluator) which is
+ * (c) 1992 Mark Morley <morley@Camosun.BC.CA>
+ *
+ * heavily modified 2003 by Michael Reinelt <reinelt@eunet.at>
+ *
+ * FIXME: GPL or not GPL????
+ *
+ * $Log: evaluator.h,v $
+ * Revision 1.1 2003/10/06 04:34:06 reinelt
+ * expression evaluator added
+ *
+ */
+
+
+/***************************************************************************
+ ** **
+ ** EE.C Expression Evaluator **
+ ** **
+ ** AUTHOR: Mark Morley **
+ ** COPYRIGHT: (c) 1992 by Mark Morley **
+ ** DATE: December 1991 **
+ ** HISTORY: Jan 1992 - Made it squash all command line arguments **
+ ** into one big long string. **
+ ** - It now can set/get VMS symbols as if they **
+ ** were variables. **
+ ** - Changed max variable name length from 5 to 15 **
+ ** Jun 1992 - Updated comments and docs **
+ ** **
+ ** You are free to incorporate this code into your own works, even if it **
+ ** is a commercial application. However, you may not charge anyone else **
+ ** for the use of this code! If you intend to distribute your code, **
+ ** I'd appreciate it if you left this message intact. I'd like to **
+ ** receive credit wherever it is appropriate. Thanks! **
+ ** **
+ ** I don't promise that this code does what you think it does... **
+ ** **
+ ** Please mail any bug reports/fixes/enhancments to me at: **
+ ** morley@camosun.bc.ca **
+ ** or **
+ ** Mark Morley **
+ ** 3889 Mildred Street **
+ ** Victoria, BC Canada **
+ ** V8Z 7G1 **
+ ** (604) 479-7861 **
+ ** **
+ ***************************************************************************/
+
+
+#ifndef _EVALUATOR_H_
+#define _EVALUATOR_H_
+
+
+// RESULT bitmask
+#define R_NUMBER 1
+#define R_STRING 2
+
+typedef struct {
+ int type;
+ double number;
+ char *string;
+} RESULT;
+
+
+// error codes
+#define E_OK 0 /* Successful evaluation */
+#define E_SYNTAX 1 /* Syntax error */
+#define E_UNBALAN 2 /* Unbalanced parenthesis */
+#define E_DIVZERO 3 /* Attempted division by zero */
+#define E_UNKNOWN 4 /* Reference to unknown variable */
+#define E_BADFUNC 5 /* Unrecognised function */
+#define E_NUMARGS 6 /* Wrong number of arguments to function */
+#define E_NOARG 7 /* Missing an argument to a function */
+#define E_EMPTY 8 /* Empty expression */
+
+
+int AddConstant (char *name, double value);
+int AddFunction (char *name, int args, void (*func)());
+
+RESULT* SetResult (RESULT **result, int type, void *value);
+
+double R2N (RESULT *result);
+char* R2S (RESULT *result);
+
+int Eval (char* expression, RESULT *result);
+
+#endif