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,538 @@
1
+ /*******************************************************/
2
+ /* "C" Language Integrated Production System */
3
+ /* */
4
+ /* CLIPS Version 6.40 02/02/21 */
5
+ /* */
6
+ /* EXPRESSION BSAVE/BLOAD MODULE */
7
+ /*******************************************************/
8
+
9
+ /*************************************************************/
10
+ /* Purpose: Implements the binary save/load feature for the */
11
+ /* expression data structure. */
12
+ /* */
13
+ /* Principal Programmer(s): */
14
+ /* Gary D. Riley */
15
+ /* */
16
+ /* Contributing Programmer(s): */
17
+ /* Brian L. Dantes */
18
+ /* */
19
+ /* Revision History: */
20
+ /* */
21
+ /* 6.30: Changed integer type/precision. */
22
+ /* */
23
+ /* 6.32: Bsave crash fix for external address type. */
24
+ /* */
25
+ /* 6.40: Pragma once and other inclusion changes. */
26
+ /* */
27
+ /* Removed use of void pointers for specific */
28
+ /* data structures. */
29
+ /* */
30
+ /*************************************************************/
31
+
32
+ #include "setup.h"
33
+
34
+ #if (BLOAD || BLOAD_ONLY || BLOAD_AND_BSAVE)
35
+
36
+ #include <stdio.h>
37
+
38
+ #include "bload.h"
39
+ #include "bsave.h"
40
+ #include "constrct.h"
41
+ #include "dffctdef.h"
42
+ #include "envrnmnt.h"
43
+ #include "extnfunc.h"
44
+ #include "memalloc.h"
45
+ #include "moduldef.h"
46
+
47
+ #if DEFRULE_CONSTRUCT
48
+ #include "network.h"
49
+ #endif
50
+
51
+ #if DEFGENERIC_CONSTRUCT
52
+ #include "genrcbin.h"
53
+ #endif
54
+
55
+ #if DEFFUNCTION_CONSTRUCT
56
+ #include "dffnxbin.h"
57
+ #endif
58
+
59
+ #if DEFTEMPLATE_CONSTRUCT
60
+ #include "factmngr.h"
61
+ #include "tmpltbin.h"
62
+ #endif
63
+
64
+ #if DEFGLOBAL_CONSTRUCT
65
+ #include "globlbin.h"
66
+ #endif
67
+
68
+ #if OBJECT_SYSTEM
69
+ #include "objbin.h"
70
+ #include "insfun.h"
71
+ #include "inscom.h"
72
+ #endif
73
+
74
+ #include "exprnbin.h"
75
+
76
+ /***************************************/
77
+ /* LOCAL INTERNAL FUNCTION DEFINITIONS */
78
+ /***************************************/
79
+
80
+ static void UpdateExpression(Environment *,void *,unsigned long);
81
+
82
+ /***********************************************************/
83
+ /* AllocateExpressions: Determines the amount of space */
84
+ /* required for loading the binary image of expressions */
85
+ /* and allocates that amount of space. */
86
+ /***********************************************************/
87
+ void AllocateExpressions(
88
+ Environment *theEnv)
89
+ {
90
+ size_t space;
91
+
92
+ GenReadBinary(theEnv,&ExpressionData(theEnv)->NumberOfExpressions,sizeof(long));
93
+ if (ExpressionData(theEnv)->NumberOfExpressions == 0L)
94
+ ExpressionData(theEnv)->ExpressionArray = NULL;
95
+ else
96
+ {
97
+ space = ExpressionData(theEnv)->NumberOfExpressions * sizeof(struct expr);
98
+ ExpressionData(theEnv)->ExpressionArray = (struct expr *) genalloc(theEnv,space);
99
+ }
100
+ }
101
+
102
+ /**********************************************/
103
+ /* RefreshExpressions: Refreshes the pointers */
104
+ /* used by the expression binary image. */
105
+ /**********************************************/
106
+ void RefreshExpressions(
107
+ Environment *theEnv)
108
+ {
109
+ if (ExpressionData(theEnv)->ExpressionArray == NULL) return;
110
+
111
+ BloadandRefresh(theEnv,ExpressionData(theEnv)->NumberOfExpressions,
112
+ sizeof(BSAVE_EXPRESSION),UpdateExpression);
113
+ }
114
+
115
+ /*********************************************************
116
+ NAME : UpdateExpression
117
+ DESCRIPTION : Given a bloaded expression buffer,
118
+ this routine refreshes the pointers
119
+ in the expression array
120
+ INPUTS : 1) a bloaded expression buffer
121
+ 2) the index of the expression to refresh
122
+ RETURNS : Nothing useful
123
+ SIDE EFFECTS : Expression updated
124
+ NOTES : None
125
+ *********************************************************/
126
+ static void UpdateExpression(
127
+ Environment *theEnv,
128
+ void *buf,
129
+ unsigned long obji)
130
+ {
131
+ BSAVE_EXPRESSION *bexp;
132
+ unsigned long theIndex;
133
+
134
+ bexp = (BSAVE_EXPRESSION *) buf;
135
+ ExpressionData(theEnv)->ExpressionArray[obji].type = bexp->type;
136
+ switch(bexp->type)
137
+ {
138
+ case FCALL:
139
+ ExpressionData(theEnv)->ExpressionArray[obji].value = BloadData(theEnv)->FunctionArray[bexp->value];
140
+ break;
141
+
142
+ case GCALL:
143
+ #if DEFGENERIC_CONSTRUCT
144
+ ExpressionData(theEnv)->ExpressionArray[obji].value = GenericPointer(bexp->value);
145
+ #else
146
+ ExpressionData(theEnv)->ExpressionArray[obji].value = NULL;
147
+ #endif
148
+ break;
149
+
150
+ case PCALL:
151
+ #if DEFFUNCTION_CONSTRUCT
152
+ ExpressionData(theEnv)->ExpressionArray[obji].value = DeffunctionPointer(bexp->value);
153
+ #else
154
+ ExpressionData(theEnv)->ExpressionArray[obji].value = NULL;
155
+ #endif
156
+ break;
157
+
158
+ case DEFTEMPLATE_PTR:
159
+ #if DEFTEMPLATE_CONSTRUCT
160
+ ExpressionData(theEnv)->ExpressionArray[obji].value = DeftemplatePointer(bexp->value);
161
+ #else
162
+ ExpressionData(theEnv)->ExpressionArray[obji].value = NULL;
163
+ #endif
164
+ break;
165
+
166
+ case DEFCLASS_PTR:
167
+ #if OBJECT_SYSTEM
168
+ ExpressionData(theEnv)->ExpressionArray[obji].value = DefclassPointer(bexp->value);
169
+ #else
170
+ ExpressionData(theEnv)->ExpressionArray[obji].value = NULL;
171
+ #endif
172
+ break;
173
+
174
+ case DEFGLOBAL_PTR:
175
+
176
+ #if DEFGLOBAL_CONSTRUCT
177
+ ExpressionData(theEnv)->ExpressionArray[obji].value = DefglobalPointer(bexp->value);
178
+ #else
179
+ ExpressionData(theEnv)->ExpressionArray[obji].value = NULL;
180
+ #endif
181
+ break;
182
+
183
+
184
+ case INTEGER_TYPE:
185
+ ExpressionData(theEnv)->ExpressionArray[obji].value = SymbolData(theEnv)->IntegerArray[bexp->value];
186
+ IncrementIntegerCount(ExpressionData(theEnv)->ExpressionArray[obji].integerValue);
187
+ break;
188
+
189
+ case FLOAT_TYPE:
190
+ ExpressionData(theEnv)->ExpressionArray[obji].value = SymbolData(theEnv)->FloatArray[bexp->value];
191
+ IncrementFloatCount(ExpressionData(theEnv)->ExpressionArray[obji].floatValue);
192
+ break;
193
+
194
+ case INSTANCE_NAME_TYPE:
195
+ #if ! OBJECT_SYSTEM
196
+ ExpressionData(theEnv)->ExpressionArray[obji].type = SYMBOL_TYPE;
197
+ #endif
198
+ case GBL_VARIABLE:
199
+ case SYMBOL_TYPE:
200
+ case STRING_TYPE:
201
+ ExpressionData(theEnv)->ExpressionArray[obji].value = SymbolData(theEnv)->SymbolArray[bexp->value];
202
+ IncrementLexemeCount(ExpressionData(theEnv)->ExpressionArray[obji].lexemeValue);
203
+ break;
204
+
205
+ #if DEFTEMPLATE_CONSTRUCT
206
+ case FACT_ADDRESS_TYPE:
207
+ ExpressionData(theEnv)->ExpressionArray[obji].value = &FactData(theEnv)->DummyFact;
208
+ RetainFact((Fact *) ExpressionData(theEnv)->ExpressionArray[obji].value);
209
+ break;
210
+ #endif
211
+
212
+ #if OBJECT_SYSTEM
213
+ case INSTANCE_ADDRESS_TYPE:
214
+ ExpressionData(theEnv)->ExpressionArray[obji].value = &InstanceData(theEnv)->DummyInstance;
215
+ RetainInstance((Instance *) ExpressionData(theEnv)->ExpressionArray[obji].value);
216
+ break;
217
+ #endif
218
+
219
+ case EXTERNAL_ADDRESS_TYPE:
220
+ ExpressionData(theEnv)->ExpressionArray[obji].value = CreateCExternalAddress(theEnv,NULL);
221
+ IncrementExternalAddressCount(ExpressionData(theEnv)->ExpressionArray[obji].value);
222
+ break;
223
+
224
+ case VOID_TYPE:
225
+ break;
226
+
227
+ default:
228
+ if (EvaluationData(theEnv)->PrimitivesArray[bexp->type] == NULL) break;
229
+ if (EvaluationData(theEnv)->PrimitivesArray[bexp->type]->bitMap)
230
+ {
231
+ ExpressionData(theEnv)->ExpressionArray[obji].value = SymbolData(theEnv)->BitMapArray[bexp->value];
232
+ IncrementBitMapCount((CLIPSBitMap *) ExpressionData(theEnv)->ExpressionArray[obji].value);
233
+ }
234
+ break;
235
+ }
236
+
237
+ theIndex = bexp->nextArg;
238
+ if (theIndex == ULONG_MAX)
239
+ { ExpressionData(theEnv)->ExpressionArray[obji].nextArg = NULL; }
240
+ else
241
+ { ExpressionData(theEnv)->ExpressionArray[obji].nextArg = (struct expr *) &ExpressionData(theEnv)->ExpressionArray[theIndex]; }
242
+
243
+ theIndex = bexp->argList;
244
+ if (theIndex == ULONG_MAX)
245
+ { ExpressionData(theEnv)->ExpressionArray[obji].argList = NULL; }
246
+ else
247
+ { ExpressionData(theEnv)->ExpressionArray[obji].argList = (struct expr *) &ExpressionData(theEnv)->ExpressionArray[theIndex]; }
248
+ }
249
+
250
+ /*********************************************/
251
+ /* ClearBloadedExpressions: Clears the space */
252
+ /* utilized by an expression binary image. */
253
+ /*********************************************/
254
+ void ClearBloadedExpressions(
255
+ Environment *theEnv)
256
+ {
257
+ unsigned long i;
258
+ size_t space;
259
+
260
+ /*===============================================*/
261
+ /* Update the busy counts of atomic data values. */
262
+ /*===============================================*/
263
+
264
+ for (i = 0; i < ExpressionData(theEnv)->NumberOfExpressions; i++)
265
+ {
266
+ switch (ExpressionData(theEnv)->ExpressionArray[i].type)
267
+ {
268
+ case SYMBOL_TYPE :
269
+ case STRING_TYPE :
270
+ case INSTANCE_NAME_TYPE :
271
+ case GBL_VARIABLE :
272
+ ReleaseLexeme(theEnv,ExpressionData(theEnv)->ExpressionArray[i].lexemeValue);
273
+ break;
274
+ case FLOAT_TYPE :
275
+ ReleaseFloat(theEnv,ExpressionData(theEnv)->ExpressionArray[i].floatValue);
276
+ break;
277
+ case INTEGER_TYPE :
278
+ ReleaseInteger(theEnv,ExpressionData(theEnv)->ExpressionArray[i].integerValue);
279
+ break;
280
+
281
+ #if DEFTEMPLATE_CONSTRUCT
282
+ case FACT_ADDRESS_TYPE :
283
+ ReleaseFact(ExpressionData(theEnv)->ExpressionArray[i].factValue);
284
+ break;
285
+ #endif
286
+
287
+ #if OBJECT_SYSTEM
288
+ case INSTANCE_ADDRESS_TYPE :
289
+ ReleaseInstance(ExpressionData(theEnv)->ExpressionArray[i].instanceValue);
290
+ break;
291
+ #endif
292
+
293
+ case EXTERNAL_ADDRESS_TYPE:
294
+ ReleaseExternalAddress(theEnv,ExpressionData(theEnv)->ExpressionArray[i].externalAddressValue);
295
+ break;
296
+
297
+ case VOID_TYPE:
298
+ break;
299
+
300
+ default:
301
+ if (EvaluationData(theEnv)->PrimitivesArray[ExpressionData(theEnv)->ExpressionArray[i].type] == NULL) break;
302
+ if (EvaluationData(theEnv)->PrimitivesArray[ExpressionData(theEnv)->ExpressionArray[i].type]->bitMap)
303
+ { DecrementBitMapReferenceCount(theEnv,ExpressionData(theEnv)->ExpressionArray[i].bitMapValue); }
304
+ break;
305
+ }
306
+ }
307
+
308
+ /*===================================*/
309
+ /* Free the binary expression array. */
310
+ /*===================================*/
311
+
312
+ space = ExpressionData(theEnv)->NumberOfExpressions * sizeof(struct expr);
313
+ if (space != 0) genfree(theEnv,ExpressionData(theEnv)->ExpressionArray,space);
314
+ ExpressionData(theEnv)->ExpressionArray = 0;
315
+ }
316
+
317
+
318
+ #if BLOAD_AND_BSAVE
319
+
320
+ /***************************************************
321
+ NAME : FindHashedExpressions
322
+ DESCRIPTION : Sets the bsave expression array
323
+ indices for hashed expression nodes
324
+ and marks the items needed by
325
+ these expressions
326
+ INPUTS : None
327
+ RETURNS : Nothing useful
328
+ SIDE EFFECTS : Atoms marked and ids set
329
+ NOTES : None
330
+ ***************************************************/
331
+ void FindHashedExpressions(
332
+ Environment *theEnv)
333
+ {
334
+ unsigned i;
335
+ EXPRESSION_HN *exphash;
336
+
337
+ for (i = 0 ; i < EXPRESSION_HASH_SIZE ; i++)
338
+ for (exphash = ExpressionData(theEnv)->ExpressionHashTable[i] ; exphash != NULL ; exphash = exphash->next)
339
+ {
340
+ MarkNeededItems(theEnv,exphash->exp);
341
+ exphash->bsaveID = ExpressionData(theEnv)->ExpressionCount;
342
+ ExpressionData(theEnv)->ExpressionCount += ExpressionSize(exphash->exp);
343
+ }
344
+ }
345
+
346
+ /***************************************************
347
+ NAME : BsaveHashedExpressions
348
+ DESCRIPTION : Writes out hashed expressions
349
+ INPUTS : Bsave file stream pointer
350
+ RETURNS : Nothing useful
351
+ SIDE EFFECTS : Expressions written
352
+ NOTES : None
353
+ ***************************************************/
354
+ void BsaveHashedExpressions(
355
+ Environment *theEnv,
356
+ FILE *fp)
357
+ {
358
+ unsigned i;
359
+ EXPRESSION_HN *exphash;
360
+
361
+ for (i = 0 ; i < EXPRESSION_HASH_SIZE ; i++)
362
+ for (exphash = ExpressionData(theEnv)->ExpressionHashTable[i] ; exphash != NULL ; exphash = exphash->next)
363
+ BsaveExpression(theEnv,exphash->exp,fp);
364
+ }
365
+
366
+ /***************************************************************/
367
+ /* BsaveConstructExpressions: Writes all expression needed by */
368
+ /* constructs for this binary image to the binary save file. */
369
+ /***************************************************************/
370
+ void BsaveConstructExpressions(
371
+ Environment *theEnv,
372
+ FILE *fp)
373
+ {
374
+ struct BinaryItem *biPtr;
375
+
376
+ for (biPtr = BsaveData(theEnv)->ListOfBinaryItems;
377
+ biPtr != NULL;
378
+ biPtr = biPtr->next)
379
+ {
380
+ if (biPtr->expressionFunction != NULL)
381
+ { (*biPtr->expressionFunction)(theEnv,fp); }
382
+ }
383
+ }
384
+
385
+ /***************************************/
386
+ /* BsaveExpression: Recursively saves */
387
+ /* an expression to the binary file. */
388
+ /***************************************/
389
+ void BsaveExpression(
390
+ Environment *theEnv,
391
+ struct expr *testPtr,
392
+ FILE *fp)
393
+ {
394
+ BSAVE_EXPRESSION newTest;
395
+ unsigned long newIndex;
396
+
397
+ while (testPtr != NULL)
398
+ {
399
+ ExpressionData(theEnv)->ExpressionCount++;
400
+
401
+ /*================*/
402
+ /* Copy the type. */
403
+ /*================*/
404
+
405
+ newTest.type = testPtr->type;
406
+
407
+ /*=======================================*/
408
+ /* Convert the argList slot to an index. */
409
+ /*=======================================*/
410
+
411
+ if (testPtr->argList == NULL)
412
+ { newTest.argList = ULONG_MAX; }
413
+ else
414
+ { newTest.argList = ExpressionData(theEnv)->ExpressionCount; }
415
+
416
+ /*========================================*/
417
+ /* Convert the nextArg slot to an index. */
418
+ /*========================================*/
419
+
420
+ if (testPtr->nextArg == NULL)
421
+ { newTest.nextArg = ULONG_MAX; }
422
+ else
423
+ {
424
+ newIndex = ExpressionData(theEnv)->ExpressionCount + ExpressionSize(testPtr->argList);
425
+ newTest.nextArg = newIndex;
426
+ }
427
+
428
+ /*=========================*/
429
+ /* Convert the value slot. */
430
+ /*=========================*/
431
+
432
+ switch(testPtr->type)
433
+ {
434
+ case FLOAT_TYPE:
435
+ newTest.value = testPtr->floatValue->bucket;
436
+ break;
437
+
438
+ case INTEGER_TYPE:
439
+ newTest.value = testPtr->integerValue->bucket;
440
+ break;
441
+
442
+ case FCALL:
443
+ newTest.value = testPtr->functionValue->bsaveIndex;
444
+ break;
445
+
446
+ case GCALL:
447
+ #if DEFGENERIC_CONSTRUCT
448
+ if (testPtr->value != NULL)
449
+ newTest.value = testPtr->constructValue->bsaveID;
450
+ else
451
+ #endif
452
+ newTest.value = ULONG_MAX;
453
+ break;
454
+
455
+ case PCALL:
456
+ #if DEFFUNCTION_CONSTRUCT
457
+ if (testPtr->value != NULL)
458
+ newTest.value = testPtr->constructValue->bsaveID;
459
+ else
460
+ #endif
461
+ newTest.value = ULONG_MAX;
462
+ break;
463
+
464
+ case DEFTEMPLATE_PTR:
465
+ #if DEFTEMPLATE_CONSTRUCT
466
+ if (testPtr->value != NULL)
467
+ newTest.value = testPtr->constructValue->bsaveID;
468
+ else
469
+ #endif
470
+ newTest.value = ULONG_MAX;
471
+ break;
472
+
473
+ case DEFCLASS_PTR:
474
+ #if OBJECT_SYSTEM
475
+ if (testPtr->value != NULL)
476
+ newTest.value = testPtr->constructValue->bsaveID;
477
+ else
478
+ #endif
479
+ newTest.value = ULONG_MAX;
480
+ break;
481
+
482
+ case DEFGLOBAL_PTR:
483
+ #if DEFGLOBAL_CONSTRUCT
484
+ if (testPtr->value != NULL)
485
+ newTest.value = testPtr->constructValue->bsaveID;
486
+ else
487
+ #endif
488
+ newTest.value = ULONG_MAX;
489
+ break;
490
+
491
+ #if OBJECT_SYSTEM
492
+ case INSTANCE_NAME_TYPE:
493
+ #endif
494
+ case SYMBOL_TYPE:
495
+ case GBL_VARIABLE:
496
+ case STRING_TYPE:
497
+ newTest.value = testPtr->lexemeValue->bucket;
498
+ break;
499
+
500
+ case FACT_ADDRESS_TYPE:
501
+ case INSTANCE_ADDRESS_TYPE:
502
+ case EXTERNAL_ADDRESS_TYPE:
503
+ newTest.value = ULONG_MAX;
504
+ break;
505
+
506
+ case VOID_TYPE:
507
+ break;
508
+
509
+ default:
510
+ if (EvaluationData(theEnv)->PrimitivesArray[testPtr->type] == NULL) break;
511
+ if (EvaluationData(theEnv)->PrimitivesArray[testPtr->type]->bitMap)
512
+ { newTest.value = ((CLIPSBitMap *) testPtr->value)->bucket; }
513
+ break;
514
+ }
515
+
516
+ /*===========================*/
517
+ /* Write out the expression. */
518
+ /*===========================*/
519
+
520
+ GenWrite(&newTest,sizeof(BSAVE_EXPRESSION),fp);
521
+
522
+ /*==========================*/
523
+ /* Write out argument list. */
524
+ /*==========================*/
525
+
526
+ if (testPtr->argList != NULL)
527
+ {
528
+ BsaveExpression(theEnv,testPtr->argList,fp);
529
+ }
530
+
531
+ testPtr = testPtr->nextArg;
532
+ }
533
+ }
534
+
535
+ #endif /* BLOAD_AND_BSAVE */
536
+
537
+ #endif /* (BLOAD || BLOAD_ONLY || BLOAD_AND_BSAVE) */
538
+
@@ -0,0 +1,60 @@
1
+ /*******************************************************/
2
+ /* "C" Language Integrated Production System */
3
+ /* */
4
+ /* CLIPS Version 6.40 07/30/16 */
5
+ /* */
6
+ /* EXPRESSION BLOAD/BSAVE HEADER FILE */
7
+ /*******************************************************/
8
+
9
+ /*************************************************************/
10
+ /* Purpose: Implements the binary save/load feature for the */
11
+ /* expression data structure. */
12
+ /* */
13
+ /* Principal Programmer(s): */
14
+ /* Gary D. Riley */
15
+ /* Brian L. Dantes */
16
+ /* */
17
+ /* Contributing Programmer(s): */
18
+ /* */
19
+ /* Revision History: */
20
+ /* */
21
+ /* 6.30: Changed integer type/precision. */
22
+ /* */
23
+ /* 6.40: Removed LOCALE definition. */
24
+ /* */
25
+ /* Pragma once and other inclusion changes. */
26
+ /* */
27
+ /* Removed use of void pointers for specific */
28
+ /* data structures. */
29
+ /* */
30
+ /*************************************************************/
31
+
32
+ #ifndef _H_exprnbin
33
+
34
+ #pragma once
35
+
36
+ #define _H_exprnbin
37
+
38
+ #include <stdio.h>
39
+
40
+ #include "expressn.h"
41
+
42
+ #define ExpressionPointer(i) ((struct expr *) (((i) == ULONG_MAX) ? NULL : &ExpressionData(theEnv)->ExpressionArray[i]))
43
+ #define HashedExpressionPointer(i) ExpressionPointer(i)
44
+
45
+ void AllocateExpressions(Environment *);
46
+ void RefreshExpressions(Environment *);
47
+ void ClearBloadedExpressions(Environment *);
48
+ void FindHashedExpressions(Environment *);
49
+ void BsaveHashedExpressions(Environment *,FILE *);
50
+ void BsaveConstructExpressions(Environment *,FILE *);
51
+ void BsaveExpression(Environment *,struct expr *,FILE *);
52
+
53
+ #endif /* _H_exprnbin */
54
+
55
+
56
+
57
+
58
+
59
+
60
+