mirror of
https://git.code.sf.net/p/quake/quakeforge
synced 2024-11-13 08:27:39 +00:00
ff901a312f
to start. More will follow. Switched to doubles from floats and allowed numbers with exponents to be parsed properly. Also changed the number of significant digits printed to 10. Changed fov so it is now capped at 1, not 10. The float value of fov is now used instead of int, so more precision can be attained at small values.
91 lines
2.2 KiB
C
91 lines
2.2 KiB
C
/*
|
|
|
|
EXP equation evaluation routines
|
|
Copyright (C) 2000, 2001 Brian Koropoff
|
|
|
|
This program is free software; you can redistribute it and/or
|
|
modify it under the terms of the GNU General Public License
|
|
as published by the Free Software Foundation; either version 2
|
|
of the License, or (at your option) any later version.
|
|
|
|
This program 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 General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program; if not, write to the Free Software
|
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, US
|
|
|
|
*/
|
|
|
|
#ifndef __exp_h
|
|
#define __exp_h
|
|
|
|
typedef enum {TOKEN_GENERIC, TOKEN_NUM, TOKEN_OP, TOKEN_FUNC, TOKEN_OPAREN, TOKEN_CPAREN, TOKEN_COMMA}
|
|
token_type;
|
|
typedef enum {EXP_E_NORMAL = 0, EXP_E_PARSE, EXP_E_INVOP, EXP_E_PAREN,
|
|
EXP_E_INVPARAM, EXP_E_SYNTAX} exp_error_t;
|
|
typedef double (*opfunc) (double op1, double op2);
|
|
typedef double (*funcfunc) (double *oplist, unsigned int numops);
|
|
|
|
typedef struct optable_s
|
|
{
|
|
char *str;
|
|
opfunc func;
|
|
unsigned int operands;
|
|
} optable_t;
|
|
|
|
typedef struct functable_s
|
|
{
|
|
char *str;
|
|
funcfunc func; // Heh
|
|
unsigned int operands;
|
|
} functable_t;
|
|
|
|
typedef struct token_generic_s
|
|
{
|
|
token_type type;
|
|
union token_u *prev, *next;
|
|
} token_generic;
|
|
|
|
typedef struct token_num_s
|
|
{
|
|
token_type type;
|
|
union token_u *prev, *next;
|
|
double value;
|
|
} token_num;
|
|
|
|
typedef struct token_op_s
|
|
{
|
|
token_type type;
|
|
union token_u *prev, *next;
|
|
optable_t *op;
|
|
} token_op;
|
|
|
|
typedef struct token_func_s
|
|
{
|
|
token_type type;
|
|
union token_u *prev, *next;
|
|
functable_t *func;
|
|
} token_func;
|
|
|
|
typedef union token_u
|
|
{
|
|
token_generic generic;
|
|
token_num num;
|
|
token_op op;
|
|
token_func func;
|
|
} token;
|
|
|
|
extern exp_error_t EXP_ERROR;
|
|
|
|
token *EXP_ParseString (char *str);
|
|
exp_error_t EXP_SimplifyTokens (token *chain);
|
|
void EXP_RemoveToken (token *tok);
|
|
void EXP_DestroyTokens (token *chain);
|
|
double EXP_Evaluate (char *str);
|
|
void EXP_InsertTokenAfter (token *spot, token *new);
|
|
exp_error_t EXP_Validate (token *chain);
|
|
void EXP_PrintTokens (token *chain);
|
|
#endif // __exp_h
|