clipsruby 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (346) hide show
  1. checksums.yaml +7 -0
  2. data/ext/clipsruby/agenda.c +1373 -0
  3. data/ext/clipsruby/agenda.h +169 -0
  4. data/ext/clipsruby/analysis.c +1142 -0
  5. data/ext/clipsruby/analysis.h +61 -0
  6. data/ext/clipsruby/argacces.c +526 -0
  7. data/ext/clipsruby/argacces.h +77 -0
  8. data/ext/clipsruby/bload.c +884 -0
  9. data/ext/clipsruby/bload.h +94 -0
  10. data/ext/clipsruby/bmathfun.c +557 -0
  11. data/ext/clipsruby/bmathfun.h +66 -0
  12. data/ext/clipsruby/bsave.c +634 -0
  13. data/ext/clipsruby/bsave.h +130 -0
  14. data/ext/clipsruby/classcom.c +976 -0
  15. data/ext/clipsruby/classcom.h +115 -0
  16. data/ext/clipsruby/classexm.c +1376 -0
  17. data/ext/clipsruby/classexm.h +97 -0
  18. data/ext/clipsruby/classfun.c +1392 -0
  19. data/ext/clipsruby/classfun.h +164 -0
  20. data/ext/clipsruby/classinf.c +1245 -0
  21. data/ext/clipsruby/classinf.h +94 -0
  22. data/ext/clipsruby/classini.c +843 -0
  23. data/ext/clipsruby/classini.h +75 -0
  24. data/ext/clipsruby/classpsr.c +957 -0
  25. data/ext/clipsruby/classpsr.h +73 -0
  26. data/ext/clipsruby/clips.h +133 -0
  27. data/ext/clipsruby/clipsruby.c +619 -0
  28. data/ext/clipsruby/clsltpsr.c +931 -0
  29. data/ext/clipsruby/clsltpsr.h +72 -0
  30. data/ext/clipsruby/commline.c +1217 -0
  31. data/ext/clipsruby/commline.h +131 -0
  32. data/ext/clipsruby/conscomp.c +1593 -0
  33. data/ext/clipsruby/conscomp.h +150 -0
  34. data/ext/clipsruby/constant.h +264 -0
  35. data/ext/clipsruby/constrct.c +1090 -0
  36. data/ext/clipsruby/constrct.h +216 -0
  37. data/ext/clipsruby/constrnt.c +554 -0
  38. data/ext/clipsruby/constrnt.h +132 -0
  39. data/ext/clipsruby/crstrtgy.c +1088 -0
  40. data/ext/clipsruby/crstrtgy.h +85 -0
  41. data/ext/clipsruby/cstrcbin.c +185 -0
  42. data/ext/clipsruby/cstrcbin.h +61 -0
  43. data/ext/clipsruby/cstrccmp.h +43 -0
  44. data/ext/clipsruby/cstrccom.c +1791 -0
  45. data/ext/clipsruby/cstrccom.h +115 -0
  46. data/ext/clipsruby/cstrcpsr.c +835 -0
  47. data/ext/clipsruby/cstrcpsr.h +97 -0
  48. data/ext/clipsruby/cstrnbin.c +282 -0
  49. data/ext/clipsruby/cstrnbin.h +55 -0
  50. data/ext/clipsruby/cstrnchk.c +826 -0
  51. data/ext/clipsruby/cstrnchk.h +91 -0
  52. data/ext/clipsruby/cstrncmp.c +238 -0
  53. data/ext/clipsruby/cstrncmp.h +57 -0
  54. data/ext/clipsruby/cstrnops.c +1176 -0
  55. data/ext/clipsruby/cstrnops.h +47 -0
  56. data/ext/clipsruby/cstrnpsr.c +1394 -0
  57. data/ext/clipsruby/cstrnpsr.h +88 -0
  58. data/ext/clipsruby/cstrnutl.c +564 -0
  59. data/ext/clipsruby/cstrnutl.h +54 -0
  60. data/ext/clipsruby/default.c +454 -0
  61. data/ext/clipsruby/default.h +57 -0
  62. data/ext/clipsruby/defins.c +971 -0
  63. data/ext/clipsruby/defins.h +127 -0
  64. data/ext/clipsruby/developr.c +677 -0
  65. data/ext/clipsruby/developr.h +69 -0
  66. data/ext/clipsruby/dffctbin.c +477 -0
  67. data/ext/clipsruby/dffctbin.h +76 -0
  68. data/ext/clipsruby/dffctbsc.c +308 -0
  69. data/ext/clipsruby/dffctbsc.h +72 -0
  70. data/ext/clipsruby/dffctcmp.c +297 -0
  71. data/ext/clipsruby/dffctcmp.h +44 -0
  72. data/ext/clipsruby/dffctdef.c +364 -0
  73. data/ext/clipsruby/dffctdef.h +104 -0
  74. data/ext/clipsruby/dffctpsr.c +179 -0
  75. data/ext/clipsruby/dffctpsr.h +49 -0
  76. data/ext/clipsruby/dffnxbin.c +520 -0
  77. data/ext/clipsruby/dffnxbin.h +67 -0
  78. data/ext/clipsruby/dffnxcmp.c +378 -0
  79. data/ext/clipsruby/dffnxcmp.h +54 -0
  80. data/ext/clipsruby/dffnxexe.c +241 -0
  81. data/ext/clipsruby/dffnxexe.h +58 -0
  82. data/ext/clipsruby/dffnxfun.c +1192 -0
  83. data/ext/clipsruby/dffnxfun.h +155 -0
  84. data/ext/clipsruby/dffnxpsr.c +514 -0
  85. data/ext/clipsruby/dffnxpsr.h +57 -0
  86. data/ext/clipsruby/dfinsbin.c +509 -0
  87. data/ext/clipsruby/dfinsbin.h +66 -0
  88. data/ext/clipsruby/dfinscmp.c +345 -0
  89. data/ext/clipsruby/dfinscmp.h +48 -0
  90. data/ext/clipsruby/drive.c +1191 -0
  91. data/ext/clipsruby/drive.h +65 -0
  92. data/ext/clipsruby/emathfun.c +1213 -0
  93. data/ext/clipsruby/emathfun.h +99 -0
  94. data/ext/clipsruby/engine.c +1568 -0
  95. data/ext/clipsruby/engine.h +203 -0
  96. data/ext/clipsruby/entities.h +276 -0
  97. data/ext/clipsruby/envrnbld.c +514 -0
  98. data/ext/clipsruby/envrnbld.h +40 -0
  99. data/ext/clipsruby/envrnmnt.c +257 -0
  100. data/ext/clipsruby/envrnmnt.h +112 -0
  101. data/ext/clipsruby/evaluatn.c +1736 -0
  102. data/ext/clipsruby/evaluatn.h +211 -0
  103. data/ext/clipsruby/expressn.c +494 -0
  104. data/ext/clipsruby/expressn.h +154 -0
  105. data/ext/clipsruby/exprnbin.c +538 -0
  106. data/ext/clipsruby/exprnbin.h +60 -0
  107. data/ext/clipsruby/exprnops.c +564 -0
  108. data/ext/clipsruby/exprnops.h +67 -0
  109. data/ext/clipsruby/exprnpsr.c +1112 -0
  110. data/ext/clipsruby/exprnpsr.h +98 -0
  111. data/ext/clipsruby/extconf.rb +2 -0
  112. data/ext/clipsruby/extnfunc.c +1015 -0
  113. data/ext/clipsruby/extnfunc.h +157 -0
  114. data/ext/clipsruby/factbin.c +447 -0
  115. data/ext/clipsruby/factbin.h +56 -0
  116. data/ext/clipsruby/factbld.c +1035 -0
  117. data/ext/clipsruby/factbld.h +63 -0
  118. data/ext/clipsruby/factcmp.c +386 -0
  119. data/ext/clipsruby/factcmp.h +46 -0
  120. data/ext/clipsruby/factcom.c +759 -0
  121. data/ext/clipsruby/factcom.h +80 -0
  122. data/ext/clipsruby/factfile.c +1761 -0
  123. data/ext/clipsruby/factfile.h +54 -0
  124. data/ext/clipsruby/factfun.c +682 -0
  125. data/ext/clipsruby/factfun.h +77 -0
  126. data/ext/clipsruby/factgen.c +1305 -0
  127. data/ext/clipsruby/factgen.h +229 -0
  128. data/ext/clipsruby/facthsh.c +438 -0
  129. data/ext/clipsruby/facthsh.h +81 -0
  130. data/ext/clipsruby/factlhs.c +250 -0
  131. data/ext/clipsruby/factlhs.h +54 -0
  132. data/ext/clipsruby/factmch.c +905 -0
  133. data/ext/clipsruby/factmch.h +68 -0
  134. data/ext/clipsruby/factmngr.c +3373 -0
  135. data/ext/clipsruby/factmngr.h +325 -0
  136. data/ext/clipsruby/factprt.c +498 -0
  137. data/ext/clipsruby/factprt.h +60 -0
  138. data/ext/clipsruby/factqpsr.c +796 -0
  139. data/ext/clipsruby/factqpsr.h +61 -0
  140. data/ext/clipsruby/factqury.c +1267 -0
  141. data/ext/clipsruby/factqury.h +112 -0
  142. data/ext/clipsruby/factrete.c +978 -0
  143. data/ext/clipsruby/factrete.h +70 -0
  144. data/ext/clipsruby/factrhs.c +667 -0
  145. data/ext/clipsruby/factrhs.h +55 -0
  146. data/ext/clipsruby/filecom.c +353 -0
  147. data/ext/clipsruby/filecom.h +137 -0
  148. data/ext/clipsruby/filertr.c +481 -0
  149. data/ext/clipsruby/filertr.h +94 -0
  150. data/ext/clipsruby/fileutil.c +1020 -0
  151. data/ext/clipsruby/fileutil.h +50 -0
  152. data/ext/clipsruby/generate.c +1079 -0
  153. data/ext/clipsruby/generate.h +57 -0
  154. data/ext/clipsruby/genrcbin.c +902 -0
  155. data/ext/clipsruby/genrcbin.h +69 -0
  156. data/ext/clipsruby/genrccmp.c +640 -0
  157. data/ext/clipsruby/genrccmp.h +59 -0
  158. data/ext/clipsruby/genrccom.c +2017 -0
  159. data/ext/clipsruby/genrccom.h +119 -0
  160. data/ext/clipsruby/genrcexe.c +737 -0
  161. data/ext/clipsruby/genrcexe.h +73 -0
  162. data/ext/clipsruby/genrcfun.c +890 -0
  163. data/ext/clipsruby/genrcfun.h +185 -0
  164. data/ext/clipsruby/genrcpsr.c +1618 -0
  165. data/ext/clipsruby/genrcpsr.h +80 -0
  166. data/ext/clipsruby/globlbin.c +458 -0
  167. data/ext/clipsruby/globlbin.h +71 -0
  168. data/ext/clipsruby/globlbsc.c +361 -0
  169. data/ext/clipsruby/globlbsc.h +83 -0
  170. data/ext/clipsruby/globlcmp.c +330 -0
  171. data/ext/clipsruby/globlcmp.h +52 -0
  172. data/ext/clipsruby/globlcom.c +289 -0
  173. data/ext/clipsruby/globlcom.h +63 -0
  174. data/ext/clipsruby/globldef.c +1087 -0
  175. data/ext/clipsruby/globldef.h +151 -0
  176. data/ext/clipsruby/globlpsr.c +530 -0
  177. data/ext/clipsruby/globlpsr.h +59 -0
  178. data/ext/clipsruby/immthpsr.c +431 -0
  179. data/ext/clipsruby/immthpsr.h +55 -0
  180. data/ext/clipsruby/incrrset.c +530 -0
  181. data/ext/clipsruby/incrrset.h +73 -0
  182. data/ext/clipsruby/inherpsr.c +850 -0
  183. data/ext/clipsruby/inherpsr.h +52 -0
  184. data/ext/clipsruby/inscom.c +2076 -0
  185. data/ext/clipsruby/inscom.h +182 -0
  186. data/ext/clipsruby/insfile.c +1764 -0
  187. data/ext/clipsruby/insfile.h +96 -0
  188. data/ext/clipsruby/insfun.c +1451 -0
  189. data/ext/clipsruby/insfun.h +134 -0
  190. data/ext/clipsruby/insmngr.c +2550 -0
  191. data/ext/clipsruby/insmngr.h +125 -0
  192. data/ext/clipsruby/insmoddp.c +1041 -0
  193. data/ext/clipsruby/insmoddp.h +91 -0
  194. data/ext/clipsruby/insmult.c +804 -0
  195. data/ext/clipsruby/insmult.h +62 -0
  196. data/ext/clipsruby/inspsr.c +602 -0
  197. data/ext/clipsruby/inspsr.h +60 -0
  198. data/ext/clipsruby/insquery.c +1278 -0
  199. data/ext/clipsruby/insquery.h +115 -0
  200. data/ext/clipsruby/insqypsr.c +729 -0
  201. data/ext/clipsruby/insqypsr.h +63 -0
  202. data/ext/clipsruby/iofun.c +2045 -0
  203. data/ext/clipsruby/iofun.h +116 -0
  204. data/ext/clipsruby/lgcldpnd.c +644 -0
  205. data/ext/clipsruby/lgcldpnd.h +75 -0
  206. data/ext/clipsruby/main.c +112 -0
  207. data/ext/clipsruby/match.h +142 -0
  208. data/ext/clipsruby/memalloc.c +481 -0
  209. data/ext/clipsruby/memalloc.h +197 -0
  210. data/ext/clipsruby/miscfun.c +1801 -0
  211. data/ext/clipsruby/miscfun.h +132 -0
  212. data/ext/clipsruby/modulbin.c +607 -0
  213. data/ext/clipsruby/modulbin.h +84 -0
  214. data/ext/clipsruby/modulbsc.c +347 -0
  215. data/ext/clipsruby/modulbsc.h +67 -0
  216. data/ext/clipsruby/modulcmp.c +499 -0
  217. data/ext/clipsruby/modulcmp.h +54 -0
  218. data/ext/clipsruby/moduldef.c +817 -0
  219. data/ext/clipsruby/moduldef.h +271 -0
  220. data/ext/clipsruby/modulpsr.c +1150 -0
  221. data/ext/clipsruby/modulpsr.h +69 -0
  222. data/ext/clipsruby/modulutl.c +1036 -0
  223. data/ext/clipsruby/modulutl.h +84 -0
  224. data/ext/clipsruby/msgcom.c +1221 -0
  225. data/ext/clipsruby/msgcom.h +125 -0
  226. data/ext/clipsruby/msgfun.c +1076 -0
  227. data/ext/clipsruby/msgfun.h +118 -0
  228. data/ext/clipsruby/msgpass.c +1441 -0
  229. data/ext/clipsruby/msgpass.h +103 -0
  230. data/ext/clipsruby/msgpsr.c +698 -0
  231. data/ext/clipsruby/msgpsr.h +73 -0
  232. data/ext/clipsruby/multifld.c +1404 -0
  233. data/ext/clipsruby/multifld.h +130 -0
  234. data/ext/clipsruby/multifun.c +2182 -0
  235. data/ext/clipsruby/multifun.h +102 -0
  236. data/ext/clipsruby/network.h +142 -0
  237. data/ext/clipsruby/objbin.c +1522 -0
  238. data/ext/clipsruby/objbin.h +79 -0
  239. data/ext/clipsruby/objcmp.c +1507 -0
  240. data/ext/clipsruby/objcmp.h +71 -0
  241. data/ext/clipsruby/object.h +260 -0
  242. data/ext/clipsruby/objrtbin.c +701 -0
  243. data/ext/clipsruby/objrtbin.h +79 -0
  244. data/ext/clipsruby/objrtbld.c +2393 -0
  245. data/ext/clipsruby/objrtbld.h +66 -0
  246. data/ext/clipsruby/objrtcmp.c +734 -0
  247. data/ext/clipsruby/objrtcmp.h +66 -0
  248. data/ext/clipsruby/objrtfnx.c +1330 -0
  249. data/ext/clipsruby/objrtfnx.h +222 -0
  250. data/ext/clipsruby/objrtgen.c +736 -0
  251. data/ext/clipsruby/objrtgen.h +63 -0
  252. data/ext/clipsruby/objrtmch.c +1524 -0
  253. data/ext/clipsruby/objrtmch.h +160 -0
  254. data/ext/clipsruby/parsefun.c +415 -0
  255. data/ext/clipsruby/parsefun.h +67 -0
  256. data/ext/clipsruby/pattern.c +1265 -0
  257. data/ext/clipsruby/pattern.h +163 -0
  258. data/ext/clipsruby/pprint.c +328 -0
  259. data/ext/clipsruby/pprint.h +79 -0
  260. data/ext/clipsruby/prccode.c +1478 -0
  261. data/ext/clipsruby/prccode.h +145 -0
  262. data/ext/clipsruby/prcdrfun.c +640 -0
  263. data/ext/clipsruby/prcdrfun.h +95 -0
  264. data/ext/clipsruby/prcdrpsr.c +1068 -0
  265. data/ext/clipsruby/prcdrpsr.h +79 -0
  266. data/ext/clipsruby/prdctfun.c +869 -0
  267. data/ext/clipsruby/prdctfun.h +77 -0
  268. data/ext/clipsruby/prntutil.c +878 -0
  269. data/ext/clipsruby/prntutil.h +125 -0
  270. data/ext/clipsruby/proflfun.c +827 -0
  271. data/ext/clipsruby/proflfun.h +118 -0
  272. data/ext/clipsruby/reorder.c +2082 -0
  273. data/ext/clipsruby/reorder.h +172 -0
  274. data/ext/clipsruby/reteutil.c +1732 -0
  275. data/ext/clipsruby/reteutil.h +111 -0
  276. data/ext/clipsruby/retract.c +710 -0
  277. data/ext/clipsruby/retract.h +74 -0
  278. data/ext/clipsruby/router.c +737 -0
  279. data/ext/clipsruby/router.h +147 -0
  280. data/ext/clipsruby/rulebin.c +1136 -0
  281. data/ext/clipsruby/rulebin.h +153 -0
  282. data/ext/clipsruby/rulebld.c +1328 -0
  283. data/ext/clipsruby/rulebld.h +62 -0
  284. data/ext/clipsruby/rulebsc.c +517 -0
  285. data/ext/clipsruby/rulebsc.h +91 -0
  286. data/ext/clipsruby/rulecmp.c +733 -0
  287. data/ext/clipsruby/rulecmp.h +63 -0
  288. data/ext/clipsruby/rulecom.c +1583 -0
  289. data/ext/clipsruby/rulecom.h +116 -0
  290. data/ext/clipsruby/rulecstr.c +892 -0
  291. data/ext/clipsruby/rulecstr.h +53 -0
  292. data/ext/clipsruby/ruledef.c +559 -0
  293. data/ext/clipsruby/ruledef.h +179 -0
  294. data/ext/clipsruby/ruledlt.c +599 -0
  295. data/ext/clipsruby/ruledlt.h +58 -0
  296. data/ext/clipsruby/rulelhs.c +1216 -0
  297. data/ext/clipsruby/rulelhs.h +52 -0
  298. data/ext/clipsruby/rulepsr.c +1073 -0
  299. data/ext/clipsruby/rulepsr.h +61 -0
  300. data/ext/clipsruby/scanner.c +856 -0
  301. data/ext/clipsruby/scanner.h +112 -0
  302. data/ext/clipsruby/setup.h +488 -0
  303. data/ext/clipsruby/sortfun.c +433 -0
  304. data/ext/clipsruby/sortfun.h +55 -0
  305. data/ext/clipsruby/strngfun.c +1173 -0
  306. data/ext/clipsruby/strngfun.h +96 -0
  307. data/ext/clipsruby/strngrtr.c +523 -0
  308. data/ext/clipsruby/strngrtr.h +97 -0
  309. data/ext/clipsruby/symblbin.c +648 -0
  310. data/ext/clipsruby/symblbin.h +64 -0
  311. data/ext/clipsruby/symblcmp.c +893 -0
  312. data/ext/clipsruby/symblcmp.h +61 -0
  313. data/ext/clipsruby/symbol.c +1961 -0
  314. data/ext/clipsruby/symbol.h +243 -0
  315. data/ext/clipsruby/sysdep.c +894 -0
  316. data/ext/clipsruby/sysdep.h +164 -0
  317. data/ext/clipsruby/textpro.c +1388 -0
  318. data/ext/clipsruby/textpro.h +77 -0
  319. data/ext/clipsruby/tmpltbin.c +609 -0
  320. data/ext/clipsruby/tmpltbin.h +108 -0
  321. data/ext/clipsruby/tmpltbsc.c +327 -0
  322. data/ext/clipsruby/tmpltbsc.h +87 -0
  323. data/ext/clipsruby/tmpltcmp.c +450 -0
  324. data/ext/clipsruby/tmpltcmp.h +57 -0
  325. data/ext/clipsruby/tmpltdef.c +584 -0
  326. data/ext/clipsruby/tmpltdef.h +155 -0
  327. data/ext/clipsruby/tmpltfun.c +2477 -0
  328. data/ext/clipsruby/tmpltfun.h +122 -0
  329. data/ext/clipsruby/tmpltlhs.c +379 -0
  330. data/ext/clipsruby/tmpltlhs.h +50 -0
  331. data/ext/clipsruby/tmpltpsr.c +819 -0
  332. data/ext/clipsruby/tmpltpsr.h +59 -0
  333. data/ext/clipsruby/tmpltrhs.c +595 -0
  334. data/ext/clipsruby/tmpltrhs.h +55 -0
  335. data/ext/clipsruby/tmpltutl.c +637 -0
  336. data/ext/clipsruby/tmpltutl.h +82 -0
  337. data/ext/clipsruby/userdata.c +156 -0
  338. data/ext/clipsruby/userdata.h +72 -0
  339. data/ext/clipsruby/userfunctions.c +70 -0
  340. data/ext/clipsruby/usrsetup.h +7 -0
  341. data/ext/clipsruby/utility.c +1594 -0
  342. data/ext/clipsruby/utility.h +250 -0
  343. data/ext/clipsruby/watch.c +865 -0
  344. data/ext/clipsruby/watch.h +124 -0
  345. data/lib/clipsruby.rb +1 -0
  346. metadata +388 -0
@@ -0,0 +1,151 @@
1
+ /*******************************************************/
2
+ /* "C" Language Integrated Production System */
3
+ /* */
4
+ /* CLIPS Version 6.40 11/13/17 */
5
+ /* */
6
+ /* DEFGLOBAL HEADER FILE */
7
+ /*******************************************************/
8
+
9
+ /*************************************************************/
10
+ /* Purpose: */
11
+ /* */
12
+ /* Principal Programmer(s): */
13
+ /* Gary D. Riley */
14
+ /* */
15
+ /* Contributing Programmer(s): */
16
+ /* Brian L. Dantes */
17
+ /* */
18
+ /* Revision History: */
19
+ /* */
20
+ /* 6.23: Correction for FalseSymbol/TrueSymbol. DR0859 */
21
+ /* */
22
+ /* 6.24: Renamed BOOLEAN macro type to intBool. */
23
+ /* */
24
+ /* Corrected code to remove run-time program */
25
+ /* compiler warning. */
26
+ /* */
27
+ /* 6.30: Removed conditional code for unsupported */
28
+ /* compilers/operating systems (IBM_MCW, */
29
+ /* MAC_MCW, and IBM_TBC). */
30
+ /* */
31
+ /* Changed garbage collection algorithm. */
32
+ /* */
33
+ /* Added const qualifiers to remove C++ */
34
+ /* deprecation warnings. */
35
+ /* */
36
+ /* Converted API macros to function calls. */
37
+ /* */
38
+ /* Fixed linkage issue when BLOAD_ONLY compiler */
39
+ /* flag is set to 1. */
40
+ /* */
41
+ /* Changed find construct functionality so that */
42
+ /* imported modules are search when locating a */
43
+ /* named construct. */
44
+ /* */
45
+ /* 6.40: Removed LOCALE definition. */
46
+ /* */
47
+ /* Pragma once and other inclusion changes. */
48
+ /* */
49
+ /* Added support for booleans with <stdbool.h>. */
50
+ /* */
51
+ /* Removed use of void pointers for specific */
52
+ /* data structures. */
53
+ /* */
54
+ /* ALLOW_ENVIRONMENT_GLOBALS no longer supported. */
55
+ /* */
56
+ /* UDF redesign. */
57
+ /* */
58
+ /*************************************************************/
59
+
60
+ #ifndef _H_globldef
61
+
62
+ #pragma once
63
+
64
+ #define _H_globldef
65
+
66
+ typedef struct defglobal Defglobal;
67
+
68
+ #include "conscomp.h"
69
+ #include "constrct.h"
70
+ #include "cstrccom.h"
71
+ #include "evaluatn.h"
72
+ #include "expressn.h"
73
+ #include "moduldef.h"
74
+ #include "symbol.h"
75
+
76
+ #define DEFGLOBAL_DATA 1
77
+
78
+ struct defglobalData
79
+ {
80
+ Construct *DefglobalConstruct;
81
+ unsigned DefglobalModuleIndex;
82
+ bool ChangeToGlobals;
83
+ #if DEBUGGING_FUNCTIONS
84
+ bool WatchGlobals;
85
+ #endif
86
+ bool ResetGlobals;
87
+ struct entityRecord GlobalInfo;
88
+ struct entityRecord DefglobalPtrRecord;
89
+ long LastModuleIndex;
90
+ Defmodule *TheDefmodule;
91
+ #if CONSTRUCT_COMPILER && (! RUN_TIME)
92
+ struct CodeGeneratorItem *DefglobalCodeItem;
93
+ #endif
94
+ };
95
+
96
+ struct defglobal
97
+ {
98
+ ConstructHeader header;
99
+ unsigned int watch : 1;
100
+ unsigned int inScope : 1;
101
+ long busyCount;
102
+ CLIPSValue current;
103
+ struct expr *initial;
104
+ };
105
+
106
+ struct defglobalModule
107
+ {
108
+ struct defmoduleItemHeader header;
109
+ };
110
+
111
+ #define DefglobalData(theEnv) ((struct defglobalData *) GetEnvironmentData(theEnv,DEFGLOBAL_DATA))
112
+
113
+ void InitializeDefglobals(Environment *);
114
+ Defglobal *FindDefglobal(Environment *,const char *);
115
+ Defglobal *FindDefglobalInModule(Environment *,const char *);
116
+ Defglobal *GetNextDefglobal(Environment *,Defglobal *);
117
+ void CreateInitialFactDefglobal(void);
118
+ bool DefglobalIsDeletable(Defglobal *);
119
+ struct defglobalModule *GetDefglobalModuleItem(Environment *,Defmodule *);
120
+ void QSetDefglobalValue(Environment *,Defglobal *,UDFValue *,bool);
121
+ Defglobal *QFindDefglobal(Environment *,CLIPSLexeme *);
122
+ void DefglobalValueForm(Defglobal *,StringBuilder *);
123
+ bool GetGlobalsChanged(Environment *);
124
+ void SetGlobalsChanged(Environment *,bool);
125
+ void DefglobalGetValue(Defglobal *,CLIPSValue *);
126
+ void DefglobalSetValue(Defglobal *,CLIPSValue *);
127
+ void DefglobalSetInteger(Defglobal *,long long);
128
+ void DefglobalSetFloat(Defglobal *,double);
129
+ void DefglobalSetSymbol(Defglobal *,const char *);
130
+ void DefglobalSetString(Defglobal *,const char *);
131
+ void DefglobalSetInstanceName(Defglobal *,const char *);
132
+ void DefglobalSetCLIPSInteger(Defglobal *,CLIPSInteger *);
133
+ void DefglobalSetCLIPSFloat(Defglobal *,CLIPSFloat *);
134
+ void DefglobalSetCLIPSLexeme(Defglobal *,CLIPSLexeme *);
135
+ void DefglobalSetFact(Defglobal *,Fact *);
136
+ void DefglobalSetInstance(Defglobal *,Instance *);
137
+ void DefglobalSetMultifield(Defglobal *,Multifield *);
138
+ void DefglobalSetCLIPSExternalAddress(Defglobal *,CLIPSExternalAddress *);
139
+ void UpdateDefglobalScope(Environment *);
140
+ Defglobal *GetNextDefglobalInScope(Environment *,Defglobal *);
141
+ bool QGetDefglobalUDFValue(Environment *,Defglobal *,UDFValue *);
142
+ const char *DefglobalModule(Defglobal *);
143
+ const char *DefglobalName(Defglobal *);
144
+ const char *DefglobalPPForm(Defglobal *);
145
+ #if RUN_TIME
146
+ void DefglobalRunTimeInitialize(Environment *);
147
+ #endif
148
+
149
+ #endif /* _H_globldef */
150
+
151
+
@@ -0,0 +1,530 @@
1
+ /*******************************************************/
2
+ /* "C" Language Integrated Production System */
3
+ /* */
4
+ /* CLIPS Version 6.41 04/30/21 */
5
+ /* */
6
+ /* DEFGLOBAL PARSER MODULE */
7
+ /*******************************************************/
8
+
9
+ /*************************************************************/
10
+ /* Purpose: Parses the defglobal construct. */
11
+ /* */
12
+ /* Principal Programmer(s): */
13
+ /* Gary D. Riley */
14
+ /* */
15
+ /* Contributing Programmer(s): */
16
+ /* Brian L. Dantes */
17
+ /* */
18
+ /* Revision History: */
19
+ /* */
20
+ /* 6.24: Renamed BOOLEAN macro type to intBool. */
21
+ /* */
22
+ /* Made the construct redefinition message more */
23
+ /* prominent. */
24
+ /* */
25
+ /* 6.30: Removed conditional code for unsupported */
26
+ /* compilers/operating systems (IBM_MCW and */
27
+ /* MAC_MCW). */
28
+ /* */
29
+ /* Added const qualifiers to remove C++ */
30
+ /* deprecation warnings. */
31
+ /* */
32
+ /* Moved WatchGlobals global to defglobalData. */
33
+ /* */
34
+ /* 6.40: Added Env prefix to GetEvaluationError and */
35
+ /* SetEvaluationError functions. */
36
+ /* */
37
+ /* Pragma once and other inclusion changes. */
38
+ /* */
39
+ /* Added support for booleans with <stdbool.h>. */
40
+ /* */
41
+ /* Removed use of void pointers for specific */
42
+ /* data structures. */
43
+ /* */
44
+ /* UDF redesign. */
45
+ /* */
46
+ /* Eval support for run time and bload only. */
47
+ /* */
48
+ /* 6.41: Normalized multifields intially assigned to */
49
+ /* global variables so that subsequences of */
50
+ /* larger multifields are correctly assigned. */
51
+ /* */
52
+ /*************************************************************/
53
+
54
+ #include "setup.h"
55
+
56
+ #if DEFGLOBAL_CONSTRUCT
57
+
58
+ #include <string.h>
59
+
60
+ #if BLOAD || BLOAD_ONLY || BLOAD_AND_BSAVE
61
+ #include "bload.h"
62
+ #endif
63
+ #include "constrct.h"
64
+ #include "cstrcpsr.h"
65
+ #include "envrnmnt.h"
66
+ #include "evaluatn.h"
67
+ #include "exprnpsr.h"
68
+ #include "globlbsc.h"
69
+ #include "globldef.h"
70
+ #include "memalloc.h"
71
+ #include "modulpsr.h"
72
+ #include "modulutl.h"
73
+ #include "multifld.h"
74
+ #include "pprint.h"
75
+ #include "prntutil.h"
76
+ #include "router.h"
77
+ #include "scanner.h"
78
+ #include "watch.h"
79
+
80
+ #include "globlpsr.h"
81
+
82
+ /***************************************/
83
+ /* LOCAL INTERNAL FUNCTION DEFINITIONS */
84
+ /***************************************/
85
+
86
+ #if (! RUN_TIME) && (! BLOAD_ONLY)
87
+ static bool GetVariableDefinition(Environment *,const char *,bool *,bool,struct token *);
88
+ static void AddDefglobal(Environment *,CLIPSLexeme *,UDFValue *,struct expr *);
89
+ #endif
90
+
91
+ /*********************************************************************/
92
+ /* ParseDefglobal: Coordinates all actions necessary for the parsing */
93
+ /* and creation of a defglobal into the current environment. */
94
+ /*********************************************************************/
95
+ bool ParseDefglobal(
96
+ Environment *theEnv,
97
+ const char *readSource)
98
+ {
99
+ bool defglobalError = false;
100
+ #if (! RUN_TIME) && (! BLOAD_ONLY)
101
+
102
+ struct token theToken;
103
+ bool tokenRead = true;
104
+ Defmodule *theModule;
105
+
106
+ /*=====================================*/
107
+ /* Pretty print buffer initialization. */
108
+ /*=====================================*/
109
+
110
+ SetPPBufferStatus(theEnv,true);
111
+ FlushPPBuffer(theEnv);
112
+ SetIndentDepth(theEnv,3);
113
+ SavePPBuffer(theEnv,"(defglobal ");
114
+
115
+ /*=================================================*/
116
+ /* Individual defglobal constructs can't be parsed */
117
+ /* while a binary load is in effect. */
118
+ /*=================================================*/
119
+
120
+ #if BLOAD || BLOAD_ONLY || BLOAD_AND_BSAVE
121
+ if ((Bloaded(theEnv) == true) && (! ConstructData(theEnv)->CheckSyntaxMode))
122
+ {
123
+ CannotLoadWithBloadMessage(theEnv,"defglobal");
124
+ return true;
125
+ }
126
+ #endif
127
+
128
+ /*===========================*/
129
+ /* Look for the module name. */
130
+ /*===========================*/
131
+
132
+ GetToken(theEnv,readSource,&theToken);
133
+ if (theToken.tknType == SYMBOL_TOKEN)
134
+ {
135
+ /*=================================================*/
136
+ /* The optional module name can't contain a module */
137
+ /* separator like other constructs. For example, */
138
+ /* (defrule X::foo is OK for rules, but the right */
139
+ /* syntax for defglobals is (defglobal X ?*foo*. */
140
+ /*=================================================*/
141
+
142
+ tokenRead = false;
143
+ if (FindModuleSeparator(theToken.lexemeValue->contents))
144
+ {
145
+ SyntaxErrorMessage(theEnv,"defglobal");
146
+ return true;
147
+ }
148
+
149
+ /*=================================*/
150
+ /* Determine if the module exists. */
151
+ /*=================================*/
152
+
153
+ theModule = FindDefmodule(theEnv,theToken.lexemeValue->contents);
154
+ if (theModule == NULL)
155
+ {
156
+ CantFindItemErrorMessage(theEnv,"defmodule",theToken.lexemeValue->contents,true);
157
+ return true;
158
+ }
159
+
160
+ /*=========================================*/
161
+ /* If the module name was OK, then set the */
162
+ /* current module to the specified module. */
163
+ /*=========================================*/
164
+
165
+ SavePPBuffer(theEnv," ");
166
+ SetCurrentModule(theEnv,theModule);
167
+ }
168
+
169
+ /*===========================================*/
170
+ /* If the module name wasn't specified, then */
171
+ /* use the current module's name in the */
172
+ /* defglobal's pretty print representation. */
173
+ /*===========================================*/
174
+
175
+ else
176
+ {
177
+ PPBackup(theEnv);
178
+ SavePPBuffer(theEnv,DefmoduleName(GetCurrentModule(theEnv)));
179
+ SavePPBuffer(theEnv," ");
180
+ SavePPBuffer(theEnv,theToken.printForm);
181
+ }
182
+
183
+ /*======================*/
184
+ /* Parse the variables. */
185
+ /*======================*/
186
+
187
+ while (GetVariableDefinition(theEnv,readSource,&defglobalError,tokenRead,&theToken))
188
+ {
189
+ tokenRead = false;
190
+
191
+ FlushPPBuffer(theEnv);
192
+ SavePPBuffer(theEnv,"(defglobal ");
193
+ SavePPBuffer(theEnv,DefmoduleName(GetCurrentModule(theEnv)));
194
+ SavePPBuffer(theEnv," ");
195
+ }
196
+
197
+ #endif
198
+
199
+ /*==================================*/
200
+ /* Return the parsing error status. */
201
+ /*==================================*/
202
+
203
+ return(defglobalError);
204
+ }
205
+
206
+ #if (! RUN_TIME) && (! BLOAD_ONLY)
207
+
208
+ /***************************************************************/
209
+ /* GetVariableDefinition: Parses and evaluates a single global */
210
+ /* variable in a defglobal construct. Returns true if the */
211
+ /* variable was successfully parsed and false if a right */
212
+ /* parenthesis is encountered (signifying the end of the */
213
+ /* defglobal construct) or an error occurs. The error status */
214
+ /* flag is also set if an error occurs. */
215
+ /***************************************************************/
216
+ static bool GetVariableDefinition(
217
+ Environment *theEnv,
218
+ const char *readSource,
219
+ bool *defglobalError,
220
+ bool tokenRead,
221
+ struct token *theToken)
222
+ {
223
+ CLIPSLexeme *variableName;
224
+ struct expr *assignPtr;
225
+ UDFValue assignValue;
226
+
227
+ /*========================================*/
228
+ /* Get next token, which should either be */
229
+ /* a closing parenthesis or a variable. */
230
+ /*========================================*/
231
+
232
+ if (! tokenRead) GetToken(theEnv,readSource,theToken);
233
+ if (theToken->tknType == RIGHT_PARENTHESIS_TOKEN) return false;
234
+
235
+ if (theToken->tknType == SF_VARIABLE_TOKEN)
236
+ {
237
+ SyntaxErrorMessage(theEnv,"defglobal");
238
+ *defglobalError = true;
239
+ return false;
240
+ }
241
+ else if (theToken->tknType != GBL_VARIABLE_TOKEN)
242
+ {
243
+ SyntaxErrorMessage(theEnv,"defglobal");
244
+ *defglobalError = true;
245
+ return false;
246
+ }
247
+
248
+ variableName = theToken->lexemeValue;
249
+
250
+ SavePPBuffer(theEnv," ");
251
+
252
+ /*================================*/
253
+ /* Print out compilation message. */
254
+ /*================================*/
255
+
256
+ #if DEBUGGING_FUNCTIONS
257
+ if ((GetWatchItem(theEnv,"compilations") == 1) && GetPrintWhileLoading(theEnv))
258
+ {
259
+ const char *outRouter = STDOUT;
260
+ if (QFindDefglobal(theEnv,variableName) != NULL)
261
+ {
262
+ outRouter = STDWRN;
263
+ PrintWarningID(theEnv,"CSTRCPSR",1,true);
264
+ WriteString(theEnv,outRouter,"Redefining defglobal: ");
265
+ }
266
+ else WriteString(theEnv,outRouter,"Defining defglobal: ");
267
+ WriteString(theEnv,outRouter,variableName->contents);
268
+ WriteString(theEnv,outRouter,"\n");
269
+ }
270
+ else
271
+ #endif
272
+ { if (GetPrintWhileLoading(theEnv)) WriteString(theEnv,STDOUT,":"); }
273
+
274
+ /*==================================================================*/
275
+ /* Check for import/export conflicts from the construct definition. */
276
+ /*==================================================================*/
277
+
278
+ #if DEFMODULE_CONSTRUCT
279
+ if (FindImportExportConflict(theEnv,"defglobal",GetCurrentModule(theEnv),variableName->contents))
280
+ {
281
+ ImportExportConflictMessage(theEnv,"defglobal",variableName->contents,NULL,NULL);
282
+ *defglobalError = true;
283
+ return false;
284
+ }
285
+ #endif
286
+
287
+ /*==============================*/
288
+ /* The next token must be an =. */
289
+ /*==============================*/
290
+
291
+ GetToken(theEnv,readSource,theToken);
292
+ if (strcmp(theToken->printForm,"=") != 0)
293
+ {
294
+ SyntaxErrorMessage(theEnv,"defglobal");
295
+ *defglobalError = true;
296
+ return false;
297
+ }
298
+
299
+ SavePPBuffer(theEnv," ");
300
+
301
+ /*======================================================*/
302
+ /* Parse the expression to be assigned to the variable. */
303
+ /*======================================================*/
304
+
305
+ assignPtr = ParseAtomOrExpression(theEnv,readSource,NULL);
306
+ if (assignPtr == NULL)
307
+ {
308
+ *defglobalError = true;
309
+ return false;
310
+ }
311
+
312
+ /*==========================*/
313
+ /* Evaluate the expression. */
314
+ /*==========================*/
315
+
316
+ if (! ConstructData(theEnv)->CheckSyntaxMode)
317
+ {
318
+ SetEvaluationError(theEnv,false);
319
+ if (EvaluateExpression(theEnv,assignPtr,&assignValue))
320
+ {
321
+ ReturnExpression(theEnv,assignPtr);
322
+ *defglobalError = true;
323
+ return false;
324
+ }
325
+ }
326
+ else
327
+ { ReturnExpression(theEnv,assignPtr); }
328
+
329
+ SavePPBuffer(theEnv,")");
330
+
331
+ /*======================================*/
332
+ /* Add the variable to the global list. */
333
+ /*======================================*/
334
+
335
+ if (! ConstructData(theEnv)->CheckSyntaxMode)
336
+ { AddDefglobal(theEnv,variableName,&assignValue,assignPtr); }
337
+
338
+ /*==================================================*/
339
+ /* Return true to indicate that the global variable */
340
+ /* definition was successfully parsed. */
341
+ /*==================================================*/
342
+
343
+ return true;
344
+ }
345
+
346
+ /*********************************************************/
347
+ /* AddDefglobal: Adds a defglobal to the current module. */
348
+ /*********************************************************/
349
+ static void AddDefglobal(
350
+ Environment *theEnv,
351
+ CLIPSLexeme *name,
352
+ UDFValue *vPtr,
353
+ struct expr *ePtr)
354
+ {
355
+ Defglobal *defglobalPtr;
356
+ bool newGlobal = false;
357
+ #if DEBUGGING_FUNCTIONS
358
+ bool globalHadWatch = false;
359
+ #endif
360
+
361
+ /*========================================================*/
362
+ /* If the defglobal is already defined, then use the old */
363
+ /* data structure and substitute new values. If it hasn't */
364
+ /* been defined, then create a new data structure. */
365
+ /*========================================================*/
366
+
367
+ defglobalPtr = QFindDefglobal(theEnv,name);
368
+ if (defglobalPtr == NULL)
369
+ {
370
+ newGlobal = true;
371
+ defglobalPtr = get_struct(theEnv,defglobal);
372
+ }
373
+ else
374
+ {
375
+ DeinstallConstructHeader(theEnv,&defglobalPtr->header);
376
+ #if DEBUGGING_FUNCTIONS
377
+ globalHadWatch = defglobalPtr->watch;
378
+ #endif
379
+ }
380
+
381
+ /*===========================================*/
382
+ /* Remove the old values from the defglobal. */
383
+ /*===========================================*/
384
+
385
+ if (newGlobal == false)
386
+ {
387
+ Release(theEnv,defglobalPtr->current.header);
388
+ if (defglobalPtr->current.header->type == MULTIFIELD_TYPE)
389
+ { ReturnMultifield(theEnv,defglobalPtr->current.multifieldValue); }
390
+
391
+ RemoveHashedExpression(theEnv,defglobalPtr->initial);
392
+ }
393
+
394
+ /*=======================================*/
395
+ /* Copy the new values to the defglobal. */
396
+ /*=======================================*/
397
+
398
+ NormalizeMultifield(theEnv,vPtr);
399
+ if (vPtr->header->type != MULTIFIELD_TYPE)
400
+ { defglobalPtr->current.value = vPtr->value; }
401
+ else
402
+ { defglobalPtr->current.value = CopyMultifield(theEnv,vPtr->multifieldValue); }
403
+ Retain(theEnv,defglobalPtr->current.header);
404
+
405
+ defglobalPtr->initial = AddHashedExpression(theEnv,ePtr);
406
+ ReturnExpression(theEnv,ePtr);
407
+ DefglobalData(theEnv)->ChangeToGlobals = true;
408
+
409
+ /*=================================*/
410
+ /* Restore the old watch value to */
411
+ /* the defglobal if redefined. */
412
+ /*=================================*/
413
+
414
+ #if DEBUGGING_FUNCTIONS
415
+ defglobalPtr->watch = globalHadWatch ? true : DefglobalData(theEnv)->WatchGlobals;
416
+ #endif
417
+
418
+ /*======================================*/
419
+ /* Save the name and pretty print form. */
420
+ /*======================================*/
421
+
422
+ defglobalPtr->header.name = name;
423
+ defglobalPtr->header.usrData = NULL;
424
+ defglobalPtr->header.constructType = DEFGLOBAL;
425
+ defglobalPtr->header.env = theEnv;
426
+ IncrementLexemeCount(name);
427
+
428
+ SavePPBuffer(theEnv,"\n");
429
+ if (GetConserveMemory(theEnv) == true)
430
+ { defglobalPtr->header.ppForm = NULL; }
431
+ else
432
+ { defglobalPtr->header.ppForm = CopyPPBuffer(theEnv); }
433
+
434
+ defglobalPtr->inScope = true;
435
+
436
+ /*=============================================*/
437
+ /* If the defglobal was redefined, we're done. */
438
+ /*=============================================*/
439
+
440
+ if (newGlobal == false) return;
441
+
442
+ /*===================================*/
443
+ /* Copy the defglobal variable name. */
444
+ /*===================================*/
445
+
446
+ defglobalPtr->busyCount = 0;
447
+ defglobalPtr->header.whichModule = (struct defmoduleItemHeader *)
448
+ GetModuleItem(theEnv,NULL,FindModuleItem(theEnv,"defglobal")->moduleIndex);
449
+
450
+ /*=============================================*/
451
+ /* Add the defglobal to the list of defglobals */
452
+ /* for the current module. */
453
+ /*=============================================*/
454
+
455
+ AddConstructToModule(&defglobalPtr->header);
456
+ }
457
+
458
+ /*****************************************************************/
459
+ /* ReplaceGlobalVariable: Replaces a global variable found in an */
460
+ /* expression with the appropriate primitive data type which */
461
+ /* can later be used to retrieve the global variable's value. */
462
+ /*****************************************************************/
463
+ bool ReplaceGlobalVariable(
464
+ Environment *theEnv,
465
+ struct expr *ePtr)
466
+ {
467
+ Defglobal *theGlobal;
468
+ unsigned int count;
469
+
470
+ /*=================================*/
471
+ /* Search for the global variable. */
472
+ /*=================================*/
473
+
474
+ theGlobal = (Defglobal *)
475
+ FindImportedConstruct(theEnv,"defglobal",NULL,ePtr->lexemeValue->contents,
476
+ &count,true,NULL);
477
+
478
+ /*=============================================*/
479
+ /* If it wasn't found, print an error message. */
480
+ /*=============================================*/
481
+
482
+ if (theGlobal == NULL)
483
+ {
484
+ GlobalReferenceErrorMessage(theEnv,ePtr->lexemeValue->contents);
485
+ return false;
486
+ }
487
+
488
+ /*========================================================*/
489
+ /* The current implementation of the defmodules shouldn't */
490
+ /* allow a construct to be defined which would cause an */
491
+ /* ambiguous reference, but we'll check for it anyway. */
492
+ /*========================================================*/
493
+
494
+ if (count > 1)
495
+ {
496
+ AmbiguousReferenceErrorMessage(theEnv,"defglobal",ePtr->lexemeValue->contents);
497
+ return false;
498
+ }
499
+
500
+ /*==============================================*/
501
+ /* Replace the symbolic reference of the global */
502
+ /* variable with a direct pointer reference. */
503
+ /*==============================================*/
504
+
505
+ ePtr->type = DEFGLOBAL_PTR;
506
+ ePtr->value = theGlobal;
507
+
508
+ return true;
509
+ }
510
+
511
+ #endif /* (! RUN_TIME) && (! BLOAD_ONLY) */
512
+
513
+ /*****************************************************************/
514
+ /* GlobalReferenceErrorMessage: Prints an error message when a */
515
+ /* symbolic reference to a global variable cannot be resolved. */
516
+ /*****************************************************************/
517
+ void GlobalReferenceErrorMessage(
518
+ Environment *theEnv,
519
+ const char *variableName)
520
+ {
521
+ PrintErrorID(theEnv,"GLOBLPSR",1,true);
522
+ WriteString(theEnv,STDERR,"\nGlobal variable ?*");
523
+ WriteString(theEnv,STDERR,variableName);
524
+ WriteString(theEnv,STDERR,"* was referenced, but is not defined.\n");
525
+ }
526
+
527
+ #endif /* DEFGLOBAL_CONSTRUCT */
528
+
529
+
530
+