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