Annotation of OpenXM/src/kan96xx/Kan/stackm.h, Revision 1.7
1.7 ! takayama 1: /* $OpenXM: OpenXM/src/kan96xx/Kan/stackm.h,v 1.6 2004/09/12 00:26:21 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
38:
39: #define TYPES 19 /* number of data types. */
40: /* NOTE! If you change the above, you need to change mklookup.c too. */
41: /* Change also dr.sm1 : datatype constants. */
42:
43: #define CMO 1024 /* cf. plugin cmo.h. Object tag used in cmo. */
44: /* CMO --- CMO+1024*3
45: CMO + LARGEID ( cf.cmo.h ) --- CMO + LARGEID+256
46: CMO + PRIVATEID ( cf.cmo.h ) --- CMO + PRIVATEID+256
47: are reserved area.
48: */
49:
50: typedef struct object * objectp;
51: /*********** fundamental data types ****************/
52: union cell {
53: int ival;
54: char *str;
55: struct object *op;
56: POLY poly;
57: struct arrayOfPOLY *arrayp;
58: struct matrixOfPOLY *matrixp;
59: struct tokens *tokenArray;
60: FILE *file;
61: struct ring *ringp;
62: struct coeff *universalNumber;
63: void *voidp;
64: double *dbl;
65: };
66:
67: struct object{
68: int tag; /* class identifier */
69: union cell lc; /* left cell */
70: union cell rc; /* right cell */
71: };
72:
73: struct dictionary {
74: char *key;
75: int h0; /* Value of hash functions */
76: int h1;
77: struct object obj;
78: int attr;
79: };
80:
81: struct operandStack {
82: struct object *ostack;
83: int sp;
84: int size;
85: };
86:
87: struct context {
88: struct dictionary *userDictionary;
89: struct context *super;
90: char *contextName;
91: struct operandStack *mystack; /* It is not used for now. */
92: };
93:
94: /* for the scanner */
95: typedef enum {INIT,GET,PUT,OPEN} actionType;
96:
97: struct tokens{
98: char *token;
99: int kind;
100: struct object object;
1.6 takayama 101: int tflag;
1.1 maekawa 102: };
103:
104: /* used in kind of tokens */
105: #define ID 2
106: #define DOLLAR 3 /* strings enclosed by dollar sign */
107: #define EXECUTABLE_STRING 4 /* strings enclosed by {} */
108: #define EXECUTABLE_ARRAY 8
109:
1.6 takayama 110: /* Used in tflag of tokens, bit wise */
111: #define NO_DELAY 0x2
1.1 maekawa 112:
113:
114: /********** macros to use Sarray **********************/
115: /* put to Object Array */
116: #define putoa(ob,i,cc) {\
117: if ((ob).tag != Sarray) {fprintf(stderr,"Warning: PUTOA is for an array of objects\n");} else \
118: {if ((0 <= (i)) && ((i) < (ob).lc.ival)) {\
119: (ob.rc.op)[i] = cc;\
120: }else{\
121: fprintf(stderr,"Warning: PUTOA, the size is %d.\n",(ob).lc.ival);\
122: }}}
123:
124: #define getoa(ob,i) ((ob.rc.op)[i])
125:
126: #define getoaSize(ob) ((ob).lc.ival)
127:
128: #define isObjectArray(ob) ((ob).tag == Sarray)
129:
130: #define isDollar(ob) ((ob).tag == Sdollar)
131:
132: /******** macros for lists ************/
133: #define isNullList(list) ((struct object *)NULL == list)
134: #define NULLLIST (struct object *)NULL
135:
1.5 takayama 136: /* For dictionary, flag bit */
1.1 maekawa 137: #define SET_ATTR_FOR_ALL_WORDS 0x10
1.7 ! takayama 138: #define OR_ATTR_FOR_ALL_WORDS 0x20
1.1 maekawa 139: #define PROTECT 0x1
140: #define ABSOLUTE_PROTECT 0x2
1.4 takayama 141: #define ATTR_INFIX 0x4
1.5 takayama 142: #define ATTR_EXPORT 0x8
1.3 takayama 143:
1.5 takayama 144: /* For status, flag bit */
1.4 takayama 145: #define STATUS_EOF -1
146: #define STATUS_BREAK 0x1
147: #define STATUS_INFIX 0x2
148: #define DO_QUOTE 0x10
1.1 maekawa 149:
150: typedef enum {CCPUSH,CCPOP,CCRESTORE} actionOfContextControl;
151:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>