2021-10-11 19:38:01 -03:00

102 lines
1.9 KiB
C
Executable File

#ident "@(#)streval.h 1.6 93/06/08 SMI" /* From AT&T Toolchest */
/*
* G. S. Fowler
* D. G. Korn
* AT&T Bell Laboratories
*
* long integer arithmetic expression evaluator
*/
/* The following only is needed for const */
#include "sh_config.h"
struct lval
{
char *value;
int flag;
};
#ifdef FLOAT
typedef double number;
#else
typedef long number;
#endif /* FLOAT */
#define MAXPREC 15 /* maximum precision level */
#define SEQPOINT 0200 /* sequence point */
#define NOASSIGN 0100 /* assignment legal with this operator */
#define RASSOC 040 /* right associative */
#define NOFLOAT 020 /* illegal with floating point */
#define PRECMASK 017 /* precision bit mask */
#define DEFAULT 0
#define LPAREN 1
#define RPAREN 2
#define COMMA 3
#define ASSIGNMENT 4
#define MOD 5
#define LSHIFT 6
#define RSHIFT 7
#define PLUS 8
#define MINUS 9
#define DIVIDE 10
#define EQ 11
#define NEQ 12
#define LT 13
#define GT 14
#define LE 15
#define GE 16
#define AND 17
#define OR 18
#define XOR 19
#define ANDAND 20
#define OROR 21
#define DONE 22
#define NOT 23
#define QUEST 24
#define QCOLON 25
#define TIMES 26
#define ARROW 27
#define DOT 28
#define LBRACKET 29
#define RBRACKET 30
#define PLUSPLUS 31
#define MINUSMINUS 32
#define COLON 33
struct Optable
{
unsigned char opcode;
unsigned char precedence;
char name[2];
};
/* define error messages */
extern const char e_moretokens[];
extern const char e_paren[];
extern const char e_number[];
extern const char e_badcolon[];
extern const char e_recursive[];
extern const char e_divzero[];
extern const char e_synbad[];
extern const char e_notlvalue[];
#ifdef FLOAT
extern const char e_incompatible[];
#endif /* FLOAT */
/* function code for the convert function */
#define LOOKUP 0
#define ASSIGN 1
#define VALUE 2
#define ERRMSG 3
#ifdef PROTO
extern number streval(char*,char**,number(*)());
#else
extern number streval();
#endif /* PROTO */