00001 #ifndef HPSTACK_H
00002 #define HPSTACK_H
00003
00004 #include <stdarg.h>
00005 #include <hpparser.h>
00006
00011 #define isnan(x) (((*(unsigned long *)&(x) & 0x7ff00000)== 0x7ff00000) && (((*(unsigned long *)&(x) & 0x000fffff)!= 0) || ((*((unsigned long *)&(x) + 1) & 0xffffffff)!= 0)))
00012
00017 #define isinf(x) (((*(unsigned long *)&(x) & 0x7ff00000)== 0x7ff00000) && (((*(unsigned long *)&(x) & 0x000fffff)== 0) && ((*((unsigned long *)&(x) + 1) & 0xffffffff)== 0)))
00018
00023 #define isfinite(x) (((*(unsigned long *)&(x) & 0x7ff00000) != 0x7ff00000))
00024
00029 #define isneg (x) (((*(unsigned long *)&(x) & 0x80000000) != 0x80000000))
00030
00115
00116
00117
00118
00119 #include <saturn.h>
00120
00121
00122
00123
00124
00129
00130
00135 #define HPS_OK 0
00136
00140 #define HPS_ERROR_PAR 1
00141
00145 #define HPS_ERROR_STACK 2
00146
00150 #define HPS_ERROR_OVERFLOW 3
00151
00155 #define HPS_ERROR_SAT_MEMORY 4
00156
00160 #define HPS_ERROR_ARM_MEMORY 5
00161
00165 #define HPS_ERROR_TYPE 6
00166
00170 #define HPS_ERROR_NOT_IMPLEMENTED 99
00171
00172
00177
00178
00182 #define DOINT 0x02614
00183
00186 #define DOHXS 0x02A4E
00187
00190 #define DOREAL 0x02933
00191
00194 #define DOCMP 0x02977
00195
00198 #define DOCSTR 0x02A2C
00199
00202 #define DOLIST 0x02A74
00203
00206 #define DOARRY 0x029E8
00207
00210 #define DOMATRIX 0x20686
00211
00214 #define DOIDNT 0x02E48
00215
00218 #define DOSYMB 0x02AB8
00219
00222 #define SEMI 0x0312B
00223
00226 #define DOFUNC 0x01902
00227
00230 #define DOROMP 0x02E92
00231
00232
00237 typedef struct
00238 {
00243 double re;
00248 double im;
00249 } complex_t;
00250
00255 typedef struct hpobj hpobj_t;
00256
00261 typedef struct list list_t;
00262
00267 typedef list_t array_t;
00268
00282 extern int hps_init (unsigned *stack);
00283
00292 extern int hps_exit (unsigned stack);
00294
00299
00307 extern int hps_depth (int *depth);
00308
00316 extern int hps_avail (int *avail);
00323 extern int hps_drop (void);
00324
00332 extern int hps_dropn (int levels);
00333
00340 extern int hps_swap (void);
00341
00348 extern int hps_rot (void);
00349
00356 extern int hps_unrot (void);
00357
00365 extern int hps_roll (int levels);
00366
00374 extern int hps_rolld (int levels);
00375
00376
00381
00386
00397 extern int hps_convert (int flag);
00398
00411 extern int hps_pick_int (int level, LONGLONG *value);
00412
00423 extern int hps_pick_uint (int level, ULONGLONG *value);
00424
00437 extern int hps_pick_real (int level, double *value);
00438
00449 extern int hps_pick_complex (int level, complex_t *value);
00450
00461 extern int hps_pick_str (int level, char **value);
00462
00473 extern int hps_pick_list (int level, list_t **value);
00474
00485 extern int hps_pick_array (int level, array_t **value);
00486
00497 extern int hps_pick_ident (int level, char **value);
00498
00509 extern int hps_pick_symb (int level, entry_t **value);
00510
00519 extern int hps_pop_int (LONGLONG *value);
00520
00529 extern int hps_pop_uint (ULONGLONG *value);
00530
00539 extern int hps_pop_real (double *value);
00540
00549 extern int hps_pop_complex (complex_t *value);
00550
00559 extern int hps_pop_str (char **value);
00560
00569 extern int hps_pop_list (list_t **value);
00570
00579 extern int hps_pop_array (array_t **value);
00580
00589 extern int hps_pop_ident (char **value);
00590
00599 extern int hps_pop_symb (entry_t **value);
00600
00610 extern int hps_push_int (LONGLONG value);
00611
00621 extern int hps_push_uint (ULONGLONG value);
00622
00632 extern int hps_push_real (double value);
00633
00643 extern int hps_push_complex (complex_t *value);
00644
00654 extern int hps_push_str (char *value);
00655
00665 extern int hps_push_list (list_t *value);
00666
00676 extern int hps_push_array (array_t *value);
00677
00687 extern int hps_push_ident (char *value);
00688
00698 extern int hps_push_symb (entry_t *value);
00699
00700
00701
00706
00717 extern int hps_pick (int level, hpobj_t *obj);
00718
00731 extern int hps_pick_type (int level, int type, void *data);
00732
00742 extern int hps_pop (hpobj_t *obj);
00743
00755 extern int hps_pop_type (int type, void *data);
00756
00767 extern int hps_push (hpobj_t *obj);
00768
00779 extern int hps_push_type (int type, void *data);
00780
00781
00782
00783
00791 extern char *hps_error (int error);
00792
00797
00802
00810 extern int hps_list_create (list_t **list);
00811
00819 extern int hps_list_destroy (list_t **list);
00820
00829 extern int hps_list_add (list_t *list, hpobj_t *obj);
00830
00840 extern int hps_list_get (list_t *list, int ind, hpobj_t **obj);
00841
00851 extern int hps_list_get_int (list_t *list, int ind, LONGLONG *val);
00852
00862 extern int hps_list_get_uint (list_t *list, int ind, ULONGLONG *val);
00863
00873 extern int hps_list_get_real (list_t *list, int ind, double *val);
00874
00884 extern int hps_list_get_str (list_t *list, int ind, char **val);
00885
00895 extern int hps_list_get_list (list_t *list, int ind, list_t **val);
00896
00906 extern int hps_list_get_array (list_t *list, int ind, array_t **val);
00907
00917 extern int hps_list_get_ident (list_t *list, int ind, char **val);
00918
00928 extern int hps_list_get_symb (list_t *list, int ind, entry_t **val);
00929
00939 extern int hps_list_add_type (list_t *list, int type, void *data);
00940
00949 extern int hps_list_add_int (list_t *list, LONGLONG value);
00950
00959 extern int hps_list_add_uint (list_t *list, ULONGLONG value);
00960
00969 extern int hps_list_add_real (list_t *list, double value);
00970
00979 extern int hps_list_add_complex (list_t *list, complex_t *value);
00980
00989 extern int hps_list_add_str (list_t *list, char *value);
00990
00999 extern int hps_list_add_list (list_t *list, list_t *value);
01000
01009 extern int hps_list_add_array (list_t *list, array_t *value);
01010
01019 extern int hps_list_add_ident (list_t *list, char *value);
01020
01021
01026
01034 extern int hps_array_create (array_t **array);
01035
01047 extern int hps_array_build (array_t **array, void *data, int type, int nb, ...);
01048
01056 extern int hps_array_destroy (array_t **array);
01057
01069 extern int hps_array_get (array_t *array, hpobj_t **obj, int nb, ...);
01070
01079 extern int hps_array_add (array_t *array, hpobj_t *obj);
01080
01090 extern int hps_array_add_type (array_t *array, int type, void *data);
01091
01100 extern int hps_array_add_int (array_t *array, LONGLONG value);
01101
01110 extern int hps_array_add_uint (array_t *array, ULONGLONG value);
01111
01120 extern int hps_array_add_real (array_t *array, double value);
01121
01130 extern int hps_array_add_complex (array_t *array, complex_t *value);
01131
01140 extern int hps_array_add_str (array_t *array, char *value);
01141
01150 extern int hps_array_add_list (array_t *array, list_t *value);
01151
01160 extern int hps_array_add_array (array_t *array, array_t *value);
01161
01170 extern int hps_array_add_ident (array_t *array, char *value);
01171
01172
01177
01186 extern int hps_obj_create (hpobj_t **obj);
01187
01198 extern int hps_obj_create_type (int type, void *data, hpobj_t **obj);
01199
01208 extern int hps_obj_destroy (hpobj_t **obj);
01209
01218 extern int hps_obj_destroy_all (hpobj_t **obj);
01219
01229 extern int hps_obj_get (hpobj_t *obj, int * type, void **data);
01230
01239 extern int hps_obj_create_int (LONGLONG value, hpobj_t **obj);
01240
01249 extern int hps_obj_create_uint (ULONGLONG value, hpobj_t **obj);
01250
01259 extern int hps_obj_create_real (double value, hpobj_t **obj);
01260
01269 extern int hps_obj_create_complex (complex_t *value, hpobj_t **obj);
01270
01279 extern int hps_obj_create_str (char *value, hpobj_t **obj);
01280
01289 extern int hps_obj_create_list (list_t *value, hpobj_t **obj);
01290
01299 extern int hps_obj_create_array (array_t *value, hpobj_t **obj);
01300
01309 extern int hps_obj_create_ident (char *value, hpobj_t **obj);
01310
01318 extern char *hps_dump (hpobj_t *obj);
01319
01320
01321
01322 #endif