[BACK]Return to stackm.h CVS log [TXT][DIR] Up to [local] / OpenXM / src / kan96xx / Kan

Annotation of OpenXM/src/kan96xx/Kan/stackm.h, Revision 1.1.1.1

1.1       maekawa     1: #define LOAD_SM1_PATH "/usr/local/lib/sm1/"
                      2: /* Do not forget to put / at the tail.
                      3:    "/usr/local/lib/sm1" does not work.
                      4: */
                      5:
                      6:
                      7: /******************* stackm.h ******************************/
                      8: #include <setjmp.h>
                      9:
                     10:
                     11:
                     12: /**** data types (class identifiers) ************/
                     13: /* Never change the following orders.
                     14:    If you add a new class, add that class at the bottom and give the
                     15:    max number. */
                     16: #define Snull             0
                     17: #define Sinteger          1     /* integer */
                     18: #define Sstring           2     /* pointer to a string */
                     19: #define SexecutableArray  3     /* executable array */
                     20: #define Soperator         4     /* operators defined in the system dic */
                     21: #define Sdollar           5     /* pointer to a string obtained from $...$ */
                     22: #define Sarray            6     /* lc.ival is the size of array,
                     23:                                   (rc.op)[0], ..., (rc.op)[k] is the array
                     24:                                   of object */
                     25: #define SleftBraceTag    7     /* [ */
                     26: #define SrightBraceTag   8     /* ] */
                     27: #define Spoly            9
                     28: #define SarrayOfPOLY     10
                     29: #define SmatrixOfPOLY    11
                     30: #define Slist            12   /* list of object */
                     31: #define Sfile            13
                     32: #define Sring            14
                     33: #define SuniversalNumber 15
                     34: #define SrationalFunction 16
                     35: #define Sclass          17   /* class, for extension */
                     36: #define Sdouble         18
                     37:
                     38: #define TYPES            19   /* number of data types. */
                     39: /* NOTE! If you change the above, you need to change mklookup.c too. */
                     40: /* Change also dr.sm1 : datatype constants. */
                     41:
                     42: #define     CMO   1024    /* cf. plugin cmo.h. Object tag used in cmo. */
                     43: /*  CMO --- CMO+1024*3
                     44:     CMO + LARGEID ( cf.cmo.h ) --- CMO + LARGEID+256
                     45:     CMO + PRIVATEID ( cf.cmo.h ) --- CMO + PRIVATEID+256
                     46:     are reserved area.
                     47: */
                     48:
                     49: typedef struct object * objectp;
                     50: /*********** fundamental data types ****************/
                     51: union cell {
                     52:   int ival;
                     53:   char *str;
                     54:   struct object *op;
                     55:   POLY poly;
                     56:   struct arrayOfPOLY *arrayp;
                     57:   struct matrixOfPOLY *matrixp;
                     58:   struct tokens *tokenArray;
                     59:   FILE *file;
                     60:   struct ring *ringp;
                     61:   struct coeff *universalNumber;
                     62:   void *voidp;
                     63:   double *dbl;
                     64: };
                     65:
                     66: struct object{
                     67:   int tag;                /* class identifier */
                     68:   union cell lc;          /* left cell */
                     69:   union cell rc;          /* right cell */
                     70: };
                     71:
                     72: struct dictionary {
                     73:   char *key;
                     74:   int h0; /* Value of hash functions */
                     75:   int h1;
                     76:   struct object obj;
                     77:   int attr;
                     78: };
                     79:
                     80: struct operandStack {
                     81:   struct object *ostack;
                     82:   int sp;
                     83:   int size;
                     84: };
                     85:
                     86: struct context {
                     87:   struct dictionary *userDictionary;
                     88:   struct context *super;
                     89:   char *contextName;
                     90:   struct operandStack *mystack; /* It is not used for now. */
                     91: };
                     92:
                     93: /* for the scanner */
                     94: typedef enum {INIT,GET,PUT,OPEN} actionType;
                     95:
                     96: struct tokens{
                     97:   char *token;
                     98:   int kind;
                     99:   struct object object;
                    100: };
                    101:
                    102: /* used in kind of tokens */
                    103: #define ID   2
                    104: #define DOLLAR 3   /* strings enclosed by dollar sign */
                    105: #define EXECUTABLE_STRING 4 /* strings enclosed by {} */
                    106: #define EXECUTABLE_ARRAY  8
                    107:
                    108:
                    109:
                    110: /********** macros to use Sarray **********************/
                    111: /* put to Object Array */
                    112: #define putoa(ob,i,cc) {\
                    113: if ((ob).tag != Sarray) {fprintf(stderr,"Warning: PUTOA is for an array of objects\n");} else \
                    114: {if ((0 <= (i)) && ((i) < (ob).lc.ival)) {\
                    115:   (ob.rc.op)[i] = cc;\
                    116: }else{\
                    117:   fprintf(stderr,"Warning: PUTOA, the size is %d.\n",(ob).lc.ival);\
                    118: }}}
                    119:
                    120: #define getoa(ob,i) ((ob.rc.op)[i])
                    121:
                    122: #define getoaSize(ob) ((ob).lc.ival)
                    123:
                    124: #define isObjectArray(ob) ((ob).tag == Sarray)
                    125:
                    126: #define isDollar(ob) ((ob).tag == Sdollar)
                    127:
                    128: /******** macros for lists ************/
                    129: #define isNullList(list) ((struct object *)NULL == list)
                    130: #define NULLLIST (struct object *)NULL
                    131:
                    132: /* for dictionary */
                    133: #define SET_ATTR_FOR_ALL_WORDS 0x10
                    134: #define PROTECT 0x1
                    135: #define ABSOLUTE_PROTECT 0x2
                    136:
                    137: typedef enum {CCPUSH,CCPOP,CCRESTORE} actionOfContextControl;
                    138:

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>