Annotation of OpenXM/src/kan96xx/Kan/stackm.h, Revision 1.10
1.10 ! takayama 1: /* $OpenXM: OpenXM/src/kan96xx/Kan/stackm.h,v 1.9 2005/06/09 04:47:16 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.10 ! takayama 73: struct object *attr; /* Attribute list. See misc-2005/06/gfan/test1.sm1
! 74: as to performance test. */
1.1 maekawa 75: };
76:
77: struct dictionary {
78: char *key;
79: int h0; /* Value of hash functions */
80: int h1;
81: struct object obj;
82: int attr;
83: };
84:
85: struct operandStack {
86: struct object *ostack;
87: int sp;
88: int size;
89: };
90:
91: struct context {
92: struct dictionary *userDictionary;
93: struct context *super;
94: char *contextName;
95: struct operandStack *mystack; /* It is not used for now. */
96: };
97:
98: /* for the scanner */
99: typedef enum {INIT,GET,PUT,OPEN} actionType;
100:
101: struct tokens{
102: char *token;
103: int kind;
104: struct object object;
1.6 takayama 105: int tflag;
1.1 maekawa 106: };
107:
108: /* used in kind of tokens */
109: #define ID 2
110: #define DOLLAR 3 /* strings enclosed by dollar sign */
111: #define EXECUTABLE_STRING 4 /* strings enclosed by {} */
112: #define EXECUTABLE_ARRAY 8
113:
1.6 takayama 114: /* Used in tflag of tokens, bit wise */
115: #define NO_DELAY 0x2
1.1 maekawa 116:
117:
118: /********** macros to use Sarray **********************/
119: /* put to Object Array */
120: #define putoa(ob,i,cc) {\
121: if ((ob).tag != Sarray) {fprintf(stderr,"Warning: PUTOA is for an array of objects\n");} else \
122: {if ((0 <= (i)) && ((i) < (ob).lc.ival)) {\
123: (ob.rc.op)[i] = cc;\
124: }else{\
125: fprintf(stderr,"Warning: PUTOA, the size is %d.\n",(ob).lc.ival);\
126: }}}
127:
128: #define getoa(ob,i) ((ob.rc.op)[i])
129:
130: #define getoaSize(ob) ((ob).lc.ival)
131:
132: #define isObjectArray(ob) ((ob).tag == Sarray)
133:
134: #define isDollar(ob) ((ob).tag == Sdollar)
135:
136: /******** macros for lists ************/
137: #define isNullList(list) ((struct object *)NULL == list)
138: #define NULLLIST (struct object *)NULL
139:
1.5 takayama 140: /* For dictionary, flag bit */
1.1 maekawa 141: #define SET_ATTR_FOR_ALL_WORDS 0x10
1.7 takayama 142: #define OR_ATTR_FOR_ALL_WORDS 0x20
1.1 maekawa 143: #define PROTECT 0x1
144: #define ABSOLUTE_PROTECT 0x2
1.4 takayama 145: #define ATTR_INFIX 0x4
1.5 takayama 146: #define ATTR_EXPORT 0x8
1.3 takayama 147:
1.5 takayama 148: /* For status, flag bit */
1.4 takayama 149: #define STATUS_EOF -1
150: #define STATUS_BREAK 0x1
151: #define STATUS_INFIX 0x2
152: #define DO_QUOTE 0x10
1.1 maekawa 153:
154: typedef enum {CCPUSH,CCPOP,CCRESTORE} actionOfContextControl;
155:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>