57 lines
1.9 KiB
C
57 lines
1.9 KiB
C
#ifndef FUNC_H
|
|
#define FUNC_H
|
|
|
|
#define MAX_FUNC_NAME_LENGTH 20
|
|
|
|
typedef enum
|
|
/* The purpose of this enum is to enforce backward compatibility
|
|
of numeric function identifiers which may be recorded in old
|
|
save files. Hence, do NOT change the order of the items in this
|
|
enum, merely add new identifiers at the end, just before
|
|
N_FUNCTION_IDENTIFIERS.
|
|
*/
|
|
{
|
|
NOT_A_FUNCTION = -1,
|
|
FIRST_FUNCTION = 0,
|
|
FUNC_AT_SYMBOL = 0, FUNC_AMPERSAND, FUNC_X, FUNC_Y, FUNC_Z, FUNC_EVAL,
|
|
FUNC_ERROR, FUNC_STRING, FUNC_SUM, FUNC_N, FUNC_INT, FUNC_FRAC, FUNC_LEN,
|
|
FUNC_MIN, FUNC_MAX, FUNC_ABS, FUNC_DOLLAR_SIGN, FUNC_FLOAT, FUNC_STRFTIME,
|
|
FUNC_CLOCK, FUNC_POLY, FUNC_E, FUNC_LOG, FUNC_SIN, FUNC_COS, FUNC_TAN,
|
|
FUNC_SINH, FUNC_COSH, FUNC_TANH, FUNC_ASIN, FUNC_ACOS, FUNC_ATAN,
|
|
FUNC_ARSINH, FUNC_ARCOSH, FUNC_ARTANH, FUNC_DEG2RAD, FUNC_RAD2DEG,
|
|
FUNC_RND, FUNC_SUBSTR, FUNC_STRPTIME, FUNC_TIME, FUNC_BITAND, FUNC_BITOR,
|
|
FUNC_R, FUNC_D, FUNC_CAP_X, FUNC_X_AMPERSAND, FUNC_NEGATE, FUNC_PLUS_SYMBOL,
|
|
FUNC_MINUS_SYMBOL, FUNC_ASTERISK, FUNC_SLASH,
|
|
FUNC_LESS_EQUAL, FUNC_GREATER_EQUAL, FUNC_LESS_THAN, FUNC_GREATER_THAN,
|
|
FUNC_EQUAL_EQUAL, FUNC_TILDE_EQUAL, FUNC_BANG_EQUAL, FUNC_CARET,
|
|
FUNC_PER_CENT, FUNC_CONCAT, FUNC_TAU, FUNC_SQRT, FUNC_FLOOR, FUNC_CEIL,
|
|
FUNC_TRUNC, FUNC_ROUND, FUNC_DECIMAL, FUNC_SCIENTIFIC,
|
|
|
|
N_FUNCTION_IDS
|
|
} FunctionIdentifier;
|
|
|
|
/* Forward declaration of Token, since this header is used in scanner.h */
|
|
typedef struct Token_struc Token;
|
|
|
|
typedef enum /* In increasing order of precedence */
|
|
{
|
|
INFIX_CONC, INFIX_REL, INFIX_PLUS, INFIX_MUL, PREFIX_NEG,
|
|
INFIX_POW, PREFIX_FUNC
|
|
} FunctionPrecedence;
|
|
|
|
typedef enum { FUNCT, MACRO } EvaluationStrategy;
|
|
|
|
typedef struct
|
|
{
|
|
const char name[MAX_FUNC_NAME_LENGTH + 1];
|
|
Token (*func)(int, const Token*);
|
|
FunctionPrecedence precedence;
|
|
EvaluationStrategy eval_as;
|
|
const char* display_symbol;
|
|
} Tfunc;
|
|
|
|
FunctionIdentifier identcode(const char *s, size_t len);
|
|
extern Tfunc tfunc[];
|
|
|
|
#endif
|