00001 #ifndef HPPARSER_H
00002 #define HPPARSER_H
00003
00004 #include <util.h>
00005
00038
00039
00044 #define PRS_OK 0
00045
00049 #define PRS_ERROR_PAR 1
00050
00054 #define PRS_ERROR_MEMORY 2
00055
00059 #define PRS_ERROR_VARIABLE 3
00060
00064 #define PRS_ERROR_ARG 4
00065
00069 #define PRS_ERROR_STACK 5
00070
00074 #define PRS_ERROR_SLOT_VAR 6
00075
00079 #define PRS_ERROR_SLOT_FUNC 7
00080
00084 #define PRS_ERROR_INFINITE_SUM 8
00085
00089 #define PRS_ERROR_NOT_IMPLEMENTED 99
00090
00091
00096
00097
00102 #define xNEG 0x39976
00103
00108 #define xNEGNEG 0x39CD5
00109
00114 #define xABS 0x39a07
00115
00120 #define xPLUS 0x39b58
00121
00126 #define xMINUS 0x39cfc
00127
00132 #define xMULTIPLY 0x39de8
00133
00138 #define xDIVIDE 0x39f49
00139
00144 #define xPOW 0x3a097
00145
00150 #define xROOT 0x3a200
00151
00156 #define xSIGN 0x3a3ee
00157
00162 #define xSQRT 0x3a442
00163
00168 #define xSQ 0x3a4ef
00169
00174 #define xSIN 0x3a57c
00175
00180 #define xCOS 0x3a5d0
00181
00186 #define xTAN 0x3a624
00187
00192 #define xSINH 0x3a678 // Not yet implemented
00193
00198 #define xCOSH 0x3a6c2 // Not yet implemented
00199
00204 #define xTANH 0x3a70c // Not yet implemented
00205
00210 #define xASIN 0x3a756
00211
00216 #define xACOS 0x3a7dc
00217
00222 #define xATAN 0x3a844
00223
00228 #define xASINH 0x3a88e // Not yet implemented
00229
00234 #define xACOSH 0x3a8d8 // Not yet implemented
00235
00240 #define xATANH 0x3a94f // Not yet implemented
00241
00246 #define xEXP 0x3a9b7
00247
00252 #define xLN 0x3aa01
00253
00258 #define xLOG 0x3aa73
00259
00264 #define xALOG 0x3aae5
00265
00270 #define xFACT 0x3abaf
00271
00276 #define xIP 0x3ac3d
00277
00282 #define xFP 0x3ac87
00283
00288 #define xFLOOR 0x3acd1 // Not yet implemented
00289
00294 #define xCEIL 0x3ad1b // Not yet implemented
00295
00300 #define xMOD 0x3afcb // Not yet implemented
00301
00306 #define xRAND 0x3b3e6 // Not yet implemented
00307
00312 #define xAND 0x3ca07 // Not yet implemented
00313
00318 #define xOR 0x3ca8d // Not yet implemented
00319
00324 #define xNOT 0x3cb13 // Not yet implemented
00325
00330 #define xXOR 0x3cb7a // Not yet implemented
00331
00336 #define xEQ 0x3cbf6
00337
00342 #define xDIFF 0x3cd21
00343
00348 #define xLT 0x3ce42
00349
00354 #define xGT 0x3cee1
00355
00360 #define xLE 0x3cf80
00361
00366 #define xGE 0x3d01f
00367
00372 #define xDER 0x3d258 // Not yet implemented
00373
00378 #define xINTEGRAL 0x3d47e // Not yet implemented
00379
00384 #define xSUM 0x3d503
00385
00386
00391
00392
00393 #define C_TypeVal 1
00394 #define C_TypeFunc 2
00395 #define C_TypeIdent 3
00396 #define C_TypeSymb 4
00397
00398
00399
00404 typedef struct entry entry_t;
00405
00410 typedef struct function function_t;
00411
00416 typedef struct stackeval stackeval_t;
00417
00422 typedef struct
00423 {
00424 int Type;
00425 union
00426 {
00427 double Val;
00428 char *Ident;
00429 int Func;
00430 entry_t *Symb;
00431 } data;
00432 } element_t;
00433
00434 extern int prs_get_error ();
00435
00443 extern char *prs_error (int error);
00444
00453 void prs_alg_set_angle (int angmode);
00454
00464 extern int prs_alg_create (entry_t **stack, int size);
00465
00475 extern int prs_alg_add_val (entry_t *stack, int level, double value);
00476
00486 extern int prs_alg_add_ident (entry_t *stack, int level, char *ident);
00487
00497 extern int prs_alg_add_func (entry_t *stack, int level, int code);
00498
00508 extern int prs_alg_add_symb (entry_t *stack, int level, entry_t *expr);
00509
00519 extern int prs_alg_eval (entry_t *stack, double *value);
00520
00529 extern int prs_alg_set_var (char *var, double value);
00530
00539 extern int prs_alg_get_size (entry_t *stack, int *size);
00540
00549 extern int prs_alg_set_size (entry_t *stack, int size);
00550
00560 extern int prs_alg_first_var (entry_t *stack, char **name);
00561
00571 extern int prs_alg_next_var (entry_t *stack, char **name);
00572
00582 extern int prs_alg_get_element (entry_t *stack, int level, element_t *element);
00583
00594 extern function_t *prs_alg_func_create (int code, int nbarg, void *newfunc);
00595
00607 extern int prs_alg_func_reg (function_t *newfunc, function_t **oldfunc);
00608
00609 extern double prs_val (stackeval_t *x);
00610
00611 #endif