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