00001 #ifndef HPSTACK_H
00002 #define HPSTACK_H
00003
00004 #include <stdarg.h>
00005 #include <hpparser.h>
00006
00091
00092
00093
00094
00095 #include <saturn.h>
00096
00097
00098
00099
00100
00105
00106
00111 #define HPS_OK 0
00112
00116 #define HPS_ERROR_PAR 1
00117
00121 #define HPS_ERROR_STACK 2
00122
00126 #define HPS_ERROR_OVERFLOW 3
00127
00131 #define HPS_ERROR_SAT_MEMORY 4
00132
00136 #define HPS_ERROR_ARM_MEMORY 5
00137
00141 #define HPS_ERROR_TYPE 6
00142
00146 #define HPS_ERROR_NOT_IMPLEMENTED 99
00147
00148
00153
00154
00158 #define DOINT 0x2614
00159
00162 #define DOHXS 0x2a4e
00163
00166 #define DOREAL 0x2933
00167
00170 #define DOCMP 0x2977
00171
00174 #define DOCSTR 0x2a2c
00175
00178 #define DOLIST 0x2A74
00179
00182 #define DOARRY 0x29e8
00183
00186 #define DOMATRIX 0x2686
00187
00190 #define DOIDNT 0x2e48
00191
00194 #define DOSYMB 0x2AB8
00195
00198 #define SEMI 0x312b
00199
00202 #define DOFUNC 0x01902
00203
00204
00209 typedef struct
00210 {
00215 double re;
00220 double im;
00221 } complex_t;
00222
00227 typedef struct hpobj hpobj_t;
00228
00233 typedef struct list list_t;
00234
00239 typedef list_t array_t;
00240
00254 extern int hps_init (unsigned *stack);
00255
00264 extern int hps_exit (unsigned stack);
00266
00271
00279 extern int hps_depth (int *depth);
00280
00288 extern int hps_avail (int *avail);
00295 extern int hps_drop (void);
00296
00304 extern int hps_dropn (int levels);
00305
00312 extern int hps_swap (void);
00313
00320 extern int hps_rot (void);
00321
00328 extern int hps_unrot (void);
00329
00337 extern int hps_roll (int levels);
00338
00346 extern int hps_rolld (int levels);
00347
00348
00353
00358
00369 extern int hps_convert (int flag);
00370
00383 extern int hps_pick_int (int level, long long *value);
00384
00395 extern int hps_pick_uint (int level, unsigned long long *value);
00396
00409 extern int hps_pick_real (int level, double *value);
00410
00421 extern int hps_pick_complex (int level, complex_t *value);
00422
00433 extern int hps_pick_str (int level, char **value);
00434
00445 extern int hps_pick_list (int level, list_t **value);
00446
00457 extern int hps_pick_array (int level, array_t **value);
00458
00469 extern int hps_pick_ident (int level, char **value);
00470
00481 extern int hps_pick_symb (int level, entry_t **value);
00482
00491 extern int hps_pop_int (long long *value);
00492
00501 extern int hps_pop_uint (unsigned long long *value);
00502
00511 extern int hps_pop_real (double *value);
00512
00521 extern int hps_pop_complex (complex_t *value);
00522
00531 extern int hps_pop_str (char **value);
00532
00541 extern int hps_pop_list (list_t **value);
00542
00551 extern int hps_pop_array (array_t **value);
00552
00561 extern int hps_pop_ident (char **value);
00562
00571 extern int hps_pop_symb (entry_t **value);
00572
00582 extern int hps_push_int (long long value);
00583
00593 extern int hps_push_uint (unsigned long long value);
00594
00604 extern int hps_push_real (double value);
00605
00615 extern int hps_push_complex (complex_t *value);
00616
00626 extern int hps_push_str (char *value);
00627
00637 extern int hps_push_list (list_t *value);
00638
00648 extern int hps_push_array (array_t *value);
00649
00659 extern int hps_push_ident (char *value);
00660
00670 extern int hps_push_symb (entry_t *value);
00671
00672
00673
00678
00689 extern int hps_pick (int level, hpobj_t *obj);
00690
00703 extern int hps_pick_type (int level, int type, void *data);
00704
00714 extern int hps_pop (hpobj_t *obj);
00715
00727 extern int hps_pop_type (int type, void *data);
00728
00739 extern int hps_push (hpobj_t *obj);
00740
00751 extern int hps_push_type (int type, void *data);
00752
00753
00754
00755
00763 extern char *hps_error (int error);
00764
00769
00774
00782 extern int hps_list_create (list_t **list);
00783
00791 extern int hps_list_destroy (list_t **list);
00792
00801 extern int hps_list_add (list_t *list, hpobj_t *obj);
00802
00812 extern int hps_list_get (list_t *list, int ind, hpobj_t **obj);
00813
00823 extern int hps_list_get_int (list_t *list, int ind, long long *val);
00824
00834 extern int hps_list_get_uint (list_t *list, int ind, unsigned long long *val);
00835
00845 extern int hps_list_get_real (list_t *list, int ind, double *val);
00846
00856 extern int hps_list_get_str (list_t *list, int ind, char **val);
00857
00867 extern int hps_list_get_list (list_t *list, int ind, list_t **val);
00868
00878 extern int hps_list_get_array (list_t *list, int ind, array_t **val);
00879
00889 extern int hps_list_get_ident (list_t *list, int ind, char **val);
00890
00900 extern int hps_list_get_symb (list_t *list, int ind, entry_t **val);
00901
00911 extern int hps_list_add_type (list_t *list, int type, void *data);
00912
00921 extern int hps_list_add_int (list_t *list, long long value);
00922
00931 extern int hps_list_add_uint (list_t *list, unsigned long long value);
00932
00941 extern int hps_list_add_real (list_t *list, double value);
00942
00951 extern int hps_list_add_complex (list_t *list, complex_t *value);
00952
00961 extern int hps_list_add_str (list_t *list, char *value);
00962
00971 extern int hps_list_add_list (list_t *list, list_t *value);
00972
00981 extern int hps_list_add_array (list_t *list, array_t *value);
00982
00991 extern int hps_list_add_ident (list_t *list, char *value);
00992
00993
00998
01006 extern int hps_array_create (array_t **array);
01007
01019 extern int hps_array_build (array_t **array, void *data, int type, int nb, ...);
01020
01028 extern int hps_array_destroy (array_t **array);
01029
01041 extern int hps_array_get (array_t *array, hpobj_t **obj, int nb, ...);
01042
01051 extern int hps_array_add (array_t *array, hpobj_t *obj);
01052
01062 extern int hps_array_add_type (array_t *array, int type, void *data);
01063
01072 extern int hps_array_add_int (array_t *array, long long value);
01073
01082 extern int hps_array_add_uint (array_t *array, unsigned long long value);
01083
01092 extern int hps_array_add_real (array_t *array, double value);
01093
01102 extern int hps_array_add_complex (array_t *array, complex_t *value);
01103
01112 extern int hps_array_add_str (array_t *array, char *value);
01113
01122 extern int hps_array_add_list (array_t *array, list_t *value);
01123
01132 extern int hps_array_add_array (array_t *array, array_t *value);
01133
01142 extern int hps_array_add_ident (array_t *array, char *value);
01143
01144
01149
01158 extern int hps_obj_create (hpobj_t **obj);
01159
01170 extern int hps_obj_create_type (int type, void *data, hpobj_t **obj);
01171
01180 extern int hps_obj_destroy (hpobj_t **obj);
01181
01190 extern int hps_obj_destroy_all (hpobj_t **obj);
01191
01201 extern int hps_obj_get (hpobj_t *obj, int * type, void **data);
01202
01211 extern int hps_obj_create_int (long long value, hpobj_t **obj);
01212
01221 extern int hps_obj_create_uint (unsigned long long value, hpobj_t **obj);
01222
01231 extern int hps_obj_create_real (double value, hpobj_t **obj);
01232
01241 extern int hps_obj_create_complex (complex_t *value, hpobj_t **obj);
01242
01251 extern int hps_obj_create_str (char *value, hpobj_t **obj);
01252
01261 extern int hps_obj_create_list (list_t *value, hpobj_t **obj);
01262
01271 extern int hps_obj_create_array (array_t *value, hpobj_t **obj);
01272
01281 extern int hps_obj_create_ident (char *value, hpobj_t **obj);
01282
01283
01284
01285
01286 #endif