define.h 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421
  1. /****** define.h *****/
  2. /* the declaration of main data structures of
  3. s-space for rigal/ unix;
  4. (c) rigal v.00-v.2.xx
  5. */
  6. #define rigal_version "4.45"
  7. /* descriptor sizes ******************************** */
  8. #define listnodenumb 5 /* number of nodes for list descriptor */
  9. #define mainlistelnum 5
  10. /* was = 6 before 1.60 */
  11. /* = (listnodenumb - 2) * 2 -1 number of list elements in the
  12. main list descriptor */
  13. #define fragmlistelnum 8
  14. /*= (listnodenumb - 1) * 2 number of list elements in
  15. auxilary list descriptors */
  16. #define treenodenumb 5 /* number of nodes for tree descriptor */
  17. #define maintreearcnum 3
  18. /* (treenodenumb - 2) number of list elements in the
  19. main tree descriptor */
  20. #define fragmtreearcnum 4
  21. /* (treenodenumb - 1) in auxilary */
  22. #define null_ 0 /* empty object */
  23. #define maxvarnumb 127 /* maximal number of variables in one rule */
  24. #define filenum 5 /* maximal number of opened files */
  25. /* following s-addresses are reserved for internal purposes
  26. - for the interpretable code. they are x*512 , they are in 0 <= x < 64k */
  27. /* 0 512 1024 1536 2048 2560 3072 */
  28. /* 3584 4096 4608 5120 5632 6144 6656 */
  29. /* 7168 7680 8192 8704 9216 9728 10240 */
  30. /* 10752 11264 11776 12288 12800 13312 13824 */
  31. /* 14336 14848 15360 15872 16384 16896 17408 */
  32. /* 17920 18432 18944 19456 19968 20480 20992 */
  33. /* 21504 22016 22528 23040 23552 24064 24576 */
  34. /* 25088 25600 26112 26624 27136 27648 28160 */
  35. /* 28672 29184 29696 30208 30720 31232 31744 */
  36. /* codes used in the interpreter */
  37. #define tr 512 /* tree <. .> */
  38. #define li 1024 /* list (. .) */
  39. #define al 1536 /* alternatiwa ( ! ) */
  40. #define fa 2048 /* fakultatiw [ ] */
  41. #define se 2560 /* star el. ( * * ) */
  42. #define ps 3072 /* plus (+ +) */
  43. #define ti 3584 /* tree iteration <* *> */
  44. #define vpat 6144 /* v -pattern */
  45. #define spat 6656 /* s -pattern */
  46. /* separatori w s-kodah rigal */
  47. #define tdelim 4096 /* separatorx wetwej derewa */
  48. #define adelim 4608 /* separatorx wetwej alxternatiwy */
  49. #define asdelim 5632 /* razd.lew. i praw. ~astej := */
  50. #define opdelim 28672 /* separatorx / */
  51. #define clistdelim 14336
  52. #define ctreedelim 15872
  53. #define seldelim 30720 /* razd.selektora i obxekta */
  54. /* statements and operators */
  55. #define cfail 12288
  56. #define creturn 11776
  57. #define cass1 6144
  58. #define cass2 6656
  59. #define cass3 7168
  60. #define cass4 7680
  61. #define cass5 8192
  62. #define cnull 29184 /* $e:= null w {ablone */
  63. #define clast 17408
  64. #define crule 17920
  65. #define cselect 18432
  66. #define cindex 18944
  67. #define cname 19456
  68. #define cmult 19968
  69. #define cdiv 20480
  70. #define cmod 20992
  71. #define cconc 21504
  72. #define clconc 22016
  73. #define ctradd 22528
  74. #define cadd 23040
  75. #define cminus 23552
  76. #define cequ 24064
  77. #define cnequ 24576
  78. #define cgt 25088
  79. #define clt 25600
  80. #define cge 26112
  81. #define cle 26624
  82. #define cin 27136
  83. #define cand 27648
  84. #define cor 28160
  85. #define cnot 16384
  86. #define cunminus 16896
  87. #define ccopy 29696
  88. #define clist1 13312
  89. #define clist2 13824
  90. #define ctree1 14848
  91. #define ctree2 15360
  92. /* data types */
  93. typedef long longint;
  94. typedef unsigned short word;
  95. /* must be 2 byte positive integer */
  96. typedef Char string80[81];
  97. typedef short byte_type;
  98. /* string80=string[80];*/
  99. typedef long a;
  100. typedef long aa;
  101. /* adresses of a-space */
  102. typedef Char c2[2]; /* =2. bytes */
  103. typedef Char c4[4];
  104. /* c8 = packed array [1..8] of char;*/
  105. typedef Char bl80[80];
  106. typedef Char a80[80];
  107. typedef Char real_char[sizeof(double)]; /*added 17-feb-92*/
  108. #define dummy 0
  109. #define listmain 1
  110. #define listfragm 2
  111. #define treemain 3
  112. #define treefragm 4
  113. #define atom 5
  114. #define idatom 6
  115. #define keyword 7
  116. #define number 8
  117. #define tatom 9
  118. #define fatom 10
  119. #define variable 11
  120. #define idvariable 12
  121. #define nvariable 13
  122. #define fvariable 14
  123. #define rulename 15
  124. #define object_d 16
  125. #define set_coord 17
  126. #define spec 18
  127. #define xxx_19 19
  128. #define complex_desk 20
  129. #define start_list 21
  130. #define end_list 22
  131. #define start_tree 23
  132. #define end_tree 24
  133. #define name_obj 25
  134. #define eof_desk 26
  135. /* !! internal representation of these enumerable constants
  136. is important !! */
  137. /* =1. bytes */
  138. /*0*/
  139. /*1*/
  140. /*2*/
  141. /*3*/
  142. /*4*/
  143. /*5*/
  144. /*6*/
  145. /* identifier */
  146. /*7*/
  147. /*8*/
  148. /*9*/
  149. /* text constant */
  150. /*10*/
  151. /* float constant */
  152. /*11*/
  153. /*17*/
  154. /* sets coordinate */
  155. /*18*/
  156. /* special delimiter 0,512,1024,..*/
  157. /* reserved */
  158. /*20*/
  159. /*21*/
  160. /*22*/
  161. /*23*/
  162. /*24*/
  163. /*25*/
  164. /*26*/
  165. /* these structures are important,
  166. if something is shifted, it must be marked in
  167. defpage.pas tables */
  168. /* "dtype" and "flags" must be 2 first bytes */
  169. /* "next" must be the last 37-40 bytes */
  170. /* "xx", "xxx" are reserved fields */
  171. /* "cord" is unsigned integer, 2 bytes */
  172. /* "val" is signed long integer */
  173. /* old version :
  174. mainlistdescriptor= record (* =40. bytes *)
  175. dtype : descriptortype; (* =1. bytes *)
  176. flags : 0 ..31; (* =1. bytes *)
  177. xx : array [ 1 .. 1 ] of boolean;(* =1. bytes *)
  178. elnum : 0 ..mainlistelnum; (* =1. bytes *)
  179. totalelnum : longint; (* =4. bytes *)
  180. name : aa; (* =4. bytes *)
  181. elt : array[ 1 ..mainlistelnum] of a; (* =6*4=24. bytes *)
  182. next : a; end; (* =4. bytes *)
  183. */
  184. typedef struct mainlistdescriptor {
  185. /* =40. bytes */
  186. char dtype; /* =1. bytes */
  187. char flags; /* =1. bytes */
  188. boolean xx[1]; /* =1. bytes */
  189. char elnum; /* =1. bytes */
  190. longint totalelnum; /* =4. bytes */
  191. aa name; /* =4. bytes */
  192. a elt[mainlistelnum]; /* =5*4=20. bytes */
  193. a lastfragm; /* last descriptor address =4. bytes */
  194. a next;
  195. } mainlistdescriptor; /* =4. bytes */
  196. typedef struct fragmlistdescriptor {
  197. /* =40. bytes */
  198. char dtype; /* =1. bytes */
  199. char flags; /* =1. bytes */
  200. char elnum; /* =1. bytes */
  201. boolean xx[1]; /* =1. bytes */
  202. a elt[fragmlistelnum]; /* =8*4=32. bytes */
  203. a next;
  204. } fragmlistdescriptor; /* =4. bytes */
  205. typedef struct te {
  206. aa arcname; /* =8=4+4. bytes */
  207. a elt;
  208. } te;
  209. typedef struct maintreedescriptor {
  210. /* =40. bytes */
  211. char dtype; /* =1. bytes */
  212. char flags; /* =1. bytes */
  213. char arcnum; /* =1. bytes */
  214. boolean xx[1]; /* =1. bytes */
  215. longint totalarcnum; /* =4. bytes */
  216. aa name; /* =4. bytes */
  217. te arc[maintreearcnum]; /* =8*3=24. bytes */
  218. a next;
  219. } maintreedescriptor; /* =4. bytes */
  220. typedef struct fragmtreedescriptor {
  221. /* =40. bytes */
  222. char dtype; /* =1. bytes */
  223. char flags; /* =1. bytes */
  224. char arcnum; /* =1. bytes */
  225. boolean xx[1]; /* =1. bytes */
  226. te arc[fragmtreearcnum]; /* =8*4=32. bytes */
  227. a next;
  228. } fragmtreedescriptor; /* =4. bytes */
  229. typedef struct atomdescriptor {
  230. /* =8. bytes */
  231. char dtype; /* =1. bytes */
  232. char flags; /* =1. bytes */
  233. word cord;
  234. /* unsigned */
  235. /* =2. bytes */
  236. aa name; /* =4. bytes */
  237. } atomdescriptor;
  238. typedef struct numberdescriptor {
  239. /* =8. bytes */
  240. char dtype; /* =1. bytes */
  241. char flags; /* =1. bytes */
  242. word cord; /* =2. bytes */
  243. longint val; /* signed */
  244. } numberdescriptor; /* =4. bytes */
  245. typedef struct vardescriptor {
  246. /* =8. bytes */
  247. char dtype; /* =1. bytes */
  248. char flags; /* =1. bytes */
  249. boolean guard; /* =1. bytes */
  250. char location; /* =1. bytes */
  251. aa name;
  252. } vardescriptor; /* =4. bytes */
  253. typedef struct ruledescriptor {
  254. /* =16. bytes */
  255. char dtype; /* =1. bytes */
  256. char flags; /* =1. bytes */
  257. word cord; /* =2. bytes */
  258. aa name; /* =4. bytes */
  259. a fragmadr; /* =4. bytes */
  260. a nomintab; /* =4. bytes */
  261. } ruledescriptor;
  262. typedef struct specdescriptor {
  263. /* =8. bytes */
  264. char dtype; /* =1. bytes */
  265. char flags; /* =1. bytes */
  266. boolean xx[2]; /* =2. bytes */
  267. longint val;
  268. } specdescriptor; /* =4. bytes */
  269. typedef struct objdescriptor {
  270. /* =16. bytes */
  271. char dtype; /* =1. bytes */
  272. char flags; /* =1. bytes */
  273. boolean variable_; /* =1. bytes */
  274. char nel; /* =1. bytes */
  275. a fragmorvar; /* =4. bytes */
  276. a glavn; /* =4. bytes */
  277. a rezerv; /* =4. bytes */
  278. } objdescriptor;
  279. typedef a a10_type[10];
  280. typedef union mpd {
  281. /* multiply pointers to descriptors */
  282. a sa;
  283. mainlistdescriptor *smld;
  284. fragmlistdescriptor *sfld;
  285. maintreedescriptor *smtd;
  286. fragmtreedescriptor *sftd;
  287. atomdescriptor *sad;
  288. numberdescriptor *snd;
  289. vardescriptor *svd;
  290. ruledescriptor *srd;
  291. atomdescriptor *sc8;
  292. specdescriptor *sspec;
  293. objdescriptor *sobj;
  294. Char *sbl80;
  295. long *sa10;
  296. } mpd; /* =4. bytes */
  297. #define ptrlist 0
  298. #define ptrtree 1
  299. #define packedlist 2
  300. /*------------------------------------------------*/
  301. typedef struct ptr_ {
  302. /* refers to the current element of agregate */
  303. unsigned ptrtype : 2;
  304. /* p2c: defsun3.z, line 337: Note:
  305. * Field width for PTRTYPE assumes enum ptrtype_enum has 3 elements [105] */
  306. /* type of agregate */
  307. unsigned nel : 4;
  308. /* number of element in current fragment of agregate,
  309. or in array */
  310. /* =0 if no more elements */
  311. unsigned plistsize : 3;
  312. /* current size of array;
  313. used for rule call optimization
  314. with <= 4 arguments.
  315. used only if ptrtype=packedlist ,
  316. undefined otherwise */
  317. a cel; /* refers to the current element */
  318. union {
  319. struct {
  320. a arc; /* arc selector a-address */
  321. a curfragment; /* current fragment descriptor */
  322. /* main fragment */
  323. a mainadr;
  324. } U1;
  325. /* number "4" is fixed in compiler code-generation phase
  326. file stmt2.rig rule #g_call */
  327. a plistelt[3];
  328. } UU;
  329. } ptr_;
  330. /*======================================*/
  331. /* this is used for access to os file names */
  332. typedef Char filename_type[81];
  333. typedef Char checker_message_type[81];
  334. typedef Char filespecification[81];
  335. /* this is used for checker and editor common variables */
  336. typedef struct error_rec_type {
  337. checker_message_type message;
  338. filename_type filename;
  339. word address;
  340. } error_rec_type;
  341. typedef struct _REC_filetab {
  342. a name; /* a-address of rigal file */
  343. boolean isopen; /* */
  344. boolean screen;
  345. long strlen; /* specified max length */
  346. long curlen; /* current length */
  347. } _REC_filetab;
  348. /* character set *********************************** */
  349. long digit[9], letter[9], symbols[9];
  350. _REC_filetab filetab[filenum];
  351. FILE *files[filenum];