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,648 @@
1
+ /*******************************************************/
2
+ /* "C" Language Integrated Production System */
3
+ /* */
4
+ /* CLIPS Version 6.40 07/23/20 */
5
+ /* */
6
+ /* SYMBOL BSAVE MODULE */
7
+ /*******************************************************/
8
+
9
+ /*************************************************************/
10
+ /* Purpose: Implements the binary save/load feature for */
11
+ /* atomic data values. */
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
+ /* Support for long long integers. */
24
+ /* */
25
+ /* 6.32: Fixed _SYMBLBIN_SOURCE_ typo. */
26
+ /* */
27
+ /* 6.40: Pragma once and other inclusion changes. */
28
+ /* */
29
+ /* Added support for booleans with <stdbool.h>. */
30
+ /* */
31
+ /* Removed use of void pointers for specific */
32
+ /* data structures. */
33
+ /* */
34
+ /*************************************************************/
35
+
36
+ #include "setup.h"
37
+
38
+ #if BLOAD || BLOAD_ONLY || BLOAD_AND_BSAVE || BLOAD_INSTANCES || BSAVE_INSTANCES
39
+
40
+ #include "argacces.h"
41
+ #include "bload.h"
42
+ #include "bsave.h"
43
+ #include "cstrnbin.h"
44
+ #include "envrnmnt.h"
45
+ #include "exprnpsr.h"
46
+ #include "memalloc.h"
47
+ #include "moduldef.h"
48
+ #include "router.h"
49
+
50
+ #include "symblbin.h"
51
+
52
+ /***************************************/
53
+ /* LOCAL INTERNAL FUNCTION DEFINITIONS */
54
+ /***************************************/
55
+
56
+ static void ReadNeededBitMaps(Environment *);
57
+ #if BLOAD_AND_BSAVE || BSAVE_INSTANCES
58
+ static void WriteNeededBitMaps(Environment *,FILE *);
59
+ #endif
60
+
61
+ #if BLOAD_AND_BSAVE || BSAVE_INSTANCES
62
+
63
+ /**********************************************/
64
+ /* WriteNeededAtomicValues: Save all symbols, */
65
+ /* floats, integers, and bitmaps needed by */
66
+ /* this binary image to the binary file. */
67
+ /**********************************************/
68
+ void WriteNeededAtomicValues(
69
+ Environment *theEnv,
70
+ FILE *fp)
71
+ {
72
+ WriteNeededSymbols(theEnv,fp);
73
+ WriteNeededFloats(theEnv,fp);
74
+ WriteNeededIntegers(theEnv,fp);
75
+ WriteNeededBitMaps(theEnv,fp);
76
+ }
77
+
78
+ /********************************************************/
79
+ /* InitAtomicValueNeededFlags: Initializes all symbols, */
80
+ /* floats, integers, and bitmaps as being unneeded by */
81
+ /* the binary image being saved. */
82
+ /********************************************************/
83
+ void InitAtomicValueNeededFlags(
84
+ Environment *theEnv)
85
+ {
86
+ unsigned long i;
87
+ CLIPSLexeme *symbolPtr, **symbolArray;
88
+ CLIPSFloat *floatPtr, **floatArray;
89
+ CLIPSInteger *integerPtr, **integerArray;
90
+ CLIPSBitMap *bitMapPtr, **bitMapArray;
91
+
92
+ /*===============*/
93
+ /* Mark symbols. */
94
+ /*===============*/
95
+
96
+ symbolArray = GetSymbolTable(theEnv);
97
+
98
+ for (i = 0; i < SYMBOL_HASH_SIZE; i++)
99
+ {
100
+ symbolPtr = symbolArray[i];
101
+ while (symbolPtr != NULL)
102
+ {
103
+ symbolPtr->neededSymbol = false;
104
+ symbolPtr = symbolPtr->next;
105
+ }
106
+ }
107
+
108
+ /*==============*/
109
+ /* Mark floats. */
110
+ /*==============*/
111
+
112
+ floatArray = GetFloatTable(theEnv);
113
+
114
+ for (i = 0; i < FLOAT_HASH_SIZE; i++)
115
+ {
116
+ floatPtr = floatArray[i];
117
+ while (floatPtr != NULL)
118
+ {
119
+ floatPtr->neededFloat = false;
120
+ floatPtr = floatPtr->next;
121
+ }
122
+ }
123
+
124
+ /*================*/
125
+ /* Mark integers. */
126
+ /*================*/
127
+
128
+ integerArray = GetIntegerTable(theEnv);
129
+
130
+ for (i = 0; i < INTEGER_HASH_SIZE; i++)
131
+ {
132
+ integerPtr = integerArray[i];
133
+ while (integerPtr != NULL)
134
+ {
135
+ integerPtr->neededInteger = false;
136
+ integerPtr = integerPtr->next;
137
+ }
138
+ }
139
+
140
+ /*===============*/
141
+ /* Mark bitmaps. */
142
+ /*===============*/
143
+
144
+ bitMapArray = GetBitMapTable(theEnv);
145
+
146
+ for (i = 0; i < BITMAP_HASH_SIZE; i++)
147
+ {
148
+ bitMapPtr = bitMapArray[i];
149
+ while (bitMapPtr != NULL)
150
+ {
151
+ bitMapPtr->neededBitMap = false;
152
+ bitMapPtr = bitMapPtr->next;
153
+ }
154
+ }
155
+ }
156
+
157
+ /*****************************************************************/
158
+ /* WriteNeededSymbols: Stores all of the symbols in the symbol */
159
+ /* table needed for this binary image in the binary save file. */
160
+ /*****************************************************************/
161
+ void WriteNeededSymbols(
162
+ Environment *theEnv,
163
+ FILE *fp)
164
+ {
165
+ unsigned long i;
166
+ size_t length;
167
+ CLIPSLexeme **symbolArray;
168
+ CLIPSLexeme *symbolPtr;
169
+ unsigned long numberOfUsedSymbols = 0;
170
+ size_t size = 0;
171
+
172
+ /*=================================*/
173
+ /* Get a copy of the symbol table. */
174
+ /*=================================*/
175
+
176
+ symbolArray = GetSymbolTable(theEnv);
177
+
178
+ /*======================================================*/
179
+ /* Get the number of symbols and the total string size. */
180
+ /*======================================================*/
181
+
182
+ for (i = 0; i < SYMBOL_HASH_SIZE; i++)
183
+ {
184
+ for (symbolPtr = symbolArray[i];
185
+ symbolPtr != NULL;
186
+ symbolPtr = symbolPtr->next)
187
+ {
188
+ if (symbolPtr->neededSymbol)
189
+ {
190
+ numberOfUsedSymbols++;
191
+ size += strlen(symbolPtr->contents) + 1;
192
+ }
193
+ }
194
+ }
195
+
196
+ /*=============================================*/
197
+ /* Write out the symbols and the string sizes. */
198
+ /*=============================================*/
199
+
200
+ GenWrite(&numberOfUsedSymbols,sizeof(unsigned long),fp);
201
+ GenWrite(&size,sizeof(unsigned long),fp);
202
+
203
+ /*=============================*/
204
+ /* Write out the symbol types. */
205
+ /*=============================*/
206
+
207
+ for (i = 0; i < SYMBOL_HASH_SIZE; i++)
208
+ {
209
+ for (symbolPtr = symbolArray[i];
210
+ symbolPtr != NULL;
211
+ symbolPtr = symbolPtr->next)
212
+ {
213
+ if (symbolPtr->neededSymbol)
214
+ { GenWrite(&symbolPtr->header.type,sizeof(unsigned short),fp); }
215
+ }
216
+ }
217
+
218
+ /*========================*/
219
+ /* Write out the symbols. */
220
+ /*========================*/
221
+
222
+ for (i = 0; i < SYMBOL_HASH_SIZE; i++)
223
+ {
224
+ for (symbolPtr = symbolArray[i];
225
+ symbolPtr != NULL;
226
+ symbolPtr = symbolPtr->next)
227
+ {
228
+ if (symbolPtr->neededSymbol)
229
+ {
230
+ length = strlen(symbolPtr->contents) + 1;
231
+ GenWrite((void *) symbolPtr->contents,length,fp);
232
+ }
233
+ }
234
+ }
235
+ }
236
+
237
+ /*****************************************************************/
238
+ /* WriteNeededFloats: Stores all of the floats in the float */
239
+ /* table needed for this binary image in the binary save file. */
240
+ /*****************************************************************/
241
+ void WriteNeededFloats(
242
+ Environment *theEnv,
243
+ FILE *fp)
244
+ {
245
+ int i;
246
+ CLIPSFloat **floatArray;
247
+ CLIPSFloat *floatPtr;
248
+ unsigned long numberOfUsedFloats = 0;
249
+
250
+ /*================================*/
251
+ /* Get a copy of the float table. */
252
+ /*================================*/
253
+
254
+ floatArray = GetFloatTable(theEnv);
255
+
256
+ /*===========================*/
257
+ /* Get the number of floats. */
258
+ /*===========================*/
259
+
260
+ for (i = 0; i < FLOAT_HASH_SIZE; i++)
261
+ {
262
+ for (floatPtr = floatArray[i];
263
+ floatPtr != NULL;
264
+ floatPtr = floatPtr->next)
265
+ { if (floatPtr->neededFloat) numberOfUsedFloats++; }
266
+ }
267
+
268
+ /*======================================================*/
269
+ /* Write out the number of floats and the float values. */
270
+ /*======================================================*/
271
+
272
+ GenWrite(&numberOfUsedFloats,sizeof(unsigned long),fp);
273
+
274
+ for (i = 0 ; i < FLOAT_HASH_SIZE; i++)
275
+ {
276
+ for (floatPtr = floatArray[i];
277
+ floatPtr != NULL;
278
+ floatPtr = floatPtr->next)
279
+ {
280
+ if (floatPtr->neededFloat)
281
+ { GenWrite(&floatPtr->contents,
282
+ sizeof(floatPtr->contents),fp); }
283
+ }
284
+ }
285
+ }
286
+
287
+ /******************************************************************/
288
+ /* WriteNeededIntegers: Stores all of the integers in the integer */
289
+ /* table needed for this binary image in the binary save file. */
290
+ /******************************************************************/
291
+ void WriteNeededIntegers(
292
+ Environment *theEnv,
293
+ FILE *fp)
294
+ {
295
+ int i;
296
+ CLIPSInteger **integerArray;
297
+ CLIPSInteger *integerPtr;
298
+ unsigned long numberOfUsedIntegers = 0;
299
+
300
+ /*==================================*/
301
+ /* Get a copy of the integer table. */
302
+ /*==================================*/
303
+
304
+ integerArray = GetIntegerTable(theEnv);
305
+
306
+ /*=============================*/
307
+ /* Get the number of integers. */
308
+ /*=============================*/
309
+
310
+ for (i = 0 ; i < INTEGER_HASH_SIZE; i++)
311
+ {
312
+ for (integerPtr = integerArray[i];
313
+ integerPtr != NULL;
314
+ integerPtr = integerPtr->next)
315
+ {
316
+ if (integerPtr->neededInteger) numberOfUsedIntegers++;
317
+ }
318
+ }
319
+
320
+ /*==========================================================*/
321
+ /* Write out the number of integers and the integer values. */
322
+ /*==========================================================*/
323
+
324
+ GenWrite(&numberOfUsedIntegers,sizeof(unsigned long),fp);
325
+
326
+ for (i = 0 ; i < INTEGER_HASH_SIZE; i++)
327
+ {
328
+ for (integerPtr = integerArray[i];
329
+ integerPtr != NULL;
330
+ integerPtr = integerPtr->next)
331
+ {
332
+ if (integerPtr->neededInteger)
333
+ {
334
+ GenWrite(&integerPtr->contents,
335
+ sizeof(integerPtr->contents),fp);
336
+ }
337
+ }
338
+ }
339
+ }
340
+
341
+ /*****************************************************************/
342
+ /* WriteNeededBitMaps: Stores all of the bitmaps in the bitmap */
343
+ /* table needed for this binary image in the binary save file. */
344
+ /*****************************************************************/
345
+ static void WriteNeededBitMaps(
346
+ Environment *theEnv,
347
+ FILE *fp)
348
+ {
349
+ int i;
350
+ CLIPSBitMap **bitMapArray;
351
+ CLIPSBitMap *bitMapPtr;
352
+ unsigned long numberOfUsedBitMaps = 0, size = 0;
353
+ unsigned short tempSize;
354
+
355
+ /*=================================*/
356
+ /* Get a copy of the bitmap table. */
357
+ /*=================================*/
358
+
359
+ bitMapArray = GetBitMapTable(theEnv);
360
+
361
+ /*======================================================*/
362
+ /* Get the number of bitmaps and the total bitmap size. */
363
+ /*======================================================*/
364
+
365
+ for (i = 0; i < BITMAP_HASH_SIZE; i++)
366
+ {
367
+ for (bitMapPtr = bitMapArray[i];
368
+ bitMapPtr != NULL;
369
+ bitMapPtr = bitMapPtr->next)
370
+ {
371
+ if (bitMapPtr->neededBitMap)
372
+ {
373
+ numberOfUsedBitMaps++;
374
+ size += (unsigned long) (bitMapPtr->size + sizeof(unsigned short));
375
+ }
376
+ }
377
+ }
378
+
379
+ /*========================================*/
380
+ /* Write out the bitmaps and their sizes. */
381
+ /*========================================*/
382
+
383
+ GenWrite(&numberOfUsedBitMaps,sizeof(unsigned long),fp);
384
+ GenWrite(&size,sizeof(unsigned long),fp);
385
+
386
+ for (i = 0; i < BITMAP_HASH_SIZE; i++)
387
+ {
388
+ for (bitMapPtr = bitMapArray[i];
389
+ bitMapPtr != NULL;
390
+ bitMapPtr = bitMapPtr->next)
391
+ {
392
+ if (bitMapPtr->neededBitMap)
393
+ {
394
+ tempSize = bitMapPtr->size;
395
+ GenWrite(&tempSize,sizeof(unsigned short),fp);
396
+ GenWrite((void *) bitMapPtr->contents,bitMapPtr->size,fp);
397
+ }
398
+ }
399
+ }
400
+ }
401
+
402
+ #endif /* BLOAD_AND_BSAVE || BSAVE_INSTANCES */
403
+
404
+ /*********************************************/
405
+ /* ReadNeededAtomicValues: Read all symbols, */
406
+ /* floats, integers, and bitmaps needed by */
407
+ /* this binary image from the binary file. */
408
+ /*********************************************/
409
+ void ReadNeededAtomicValues(
410
+ Environment *theEnv)
411
+ {
412
+ ReadNeededSymbols(theEnv);
413
+ ReadNeededFloats(theEnv);
414
+ ReadNeededIntegers(theEnv);
415
+ ReadNeededBitMaps(theEnv);
416
+ }
417
+
418
+ /*******************************************/
419
+ /* ReadNeededSymbols: Reads in the symbols */
420
+ /* used by the binary image. */
421
+ /*******************************************/
422
+ void ReadNeededSymbols(
423
+ Environment *theEnv)
424
+ {
425
+ char *symbolNames, *namePtr;
426
+ unsigned long space;
427
+ unsigned short *types;
428
+ unsigned long i;
429
+
430
+ /*=================================================*/
431
+ /* Determine the number of symbol names to be read */
432
+ /* and space required for them. */
433
+ /*=================================================*/
434
+
435
+ GenReadBinary(theEnv,&SymbolData(theEnv)->NumberOfSymbols,sizeof(long));
436
+ GenReadBinary(theEnv,&space,sizeof(unsigned long));
437
+ if (SymbolData(theEnv)->NumberOfSymbols == 0)
438
+ {
439
+ SymbolData(theEnv)->SymbolArray = NULL;
440
+ return;
441
+ }
442
+
443
+ /*=======================================*/
444
+ /* Allocate area for strings to be read. */
445
+ /*=======================================*/
446
+
447
+ types = (unsigned short *) gm2(theEnv,sizeof(unsigned short) * SymbolData(theEnv)->NumberOfSymbols);
448
+ GenReadBinary(theEnv,types,sizeof(unsigned short) * SymbolData(theEnv)->NumberOfSymbols);
449
+
450
+ symbolNames = (char *) gm2(theEnv,space);
451
+ GenReadBinary(theEnv,symbolNames,space);
452
+
453
+ /*================================================*/
454
+ /* Store the symbol pointers in the symbol array. */
455
+ /*================================================*/
456
+
457
+ SymbolData(theEnv)->SymbolArray = (CLIPSLexeme **)
458
+ gm2(theEnv,sizeof(CLIPSLexeme *) * SymbolData(theEnv)->NumberOfSymbols);
459
+ namePtr = symbolNames;
460
+ for (i = 0; i < SymbolData(theEnv)->NumberOfSymbols; i++)
461
+ {
462
+ if (types[i] == SYMBOL_TYPE)
463
+ { SymbolData(theEnv)->SymbolArray[i] = CreateSymbol(theEnv,namePtr); }
464
+ else if (types[i] == STRING_TYPE)
465
+ { SymbolData(theEnv)->SymbolArray[i] = CreateString(theEnv,namePtr); }
466
+ else
467
+ { SymbolData(theEnv)->SymbolArray[i] = CreateInstanceName(theEnv,namePtr); }
468
+
469
+ namePtr += strlen(namePtr) + 1;
470
+ }
471
+
472
+ /*=======================*/
473
+ /* Free the name buffer. */
474
+ /*=======================*/
475
+
476
+ rm(theEnv,types,sizeof(unsigned short) * SymbolData(theEnv)->NumberOfSymbols);
477
+ rm(theEnv,symbolNames,space);
478
+ }
479
+
480
+ /*****************************************/
481
+ /* ReadNeededFloats: Reads in the floats */
482
+ /* used by the binary image. */
483
+ /*****************************************/
484
+ void ReadNeededFloats(
485
+ Environment *theEnv)
486
+ {
487
+ double *floatValues;
488
+ unsigned long i;
489
+
490
+ /*============================================*/
491
+ /* Determine the number of floats to be read. */
492
+ /*============================================*/
493
+
494
+ GenReadBinary(theEnv,&SymbolData(theEnv)->NumberOfFloats,sizeof(long));
495
+ if (SymbolData(theEnv)->NumberOfFloats == 0)
496
+ {
497
+ SymbolData(theEnv)->FloatArray = NULL;
498
+ return;
499
+ }
500
+
501
+ /*===============================*/
502
+ /* Allocate area for the floats. */
503
+ /*===============================*/
504
+
505
+ floatValues = (double *) gm2(theEnv,sizeof(double) * SymbolData(theEnv)->NumberOfFloats);
506
+ GenReadBinary(theEnv,floatValues,(sizeof(double) * SymbolData(theEnv)->NumberOfFloats));
507
+
508
+ /*======================================*/
509
+ /* Store the floats in the float array. */
510
+ /*======================================*/
511
+
512
+ SymbolData(theEnv)->FloatArray = (CLIPSFloat **)
513
+ gm2(theEnv,sizeof(CLIPSFloat *) * SymbolData(theEnv)->NumberOfFloats);
514
+ for (i = 0; i < SymbolData(theEnv)->NumberOfFloats; i++)
515
+ { SymbolData(theEnv)->FloatArray[i] = CreateFloat(theEnv,floatValues[i]); }
516
+
517
+ /*========================*/
518
+ /* Free the float buffer. */
519
+ /*========================*/
520
+
521
+ rm(theEnv,floatValues,(sizeof(double) * SymbolData(theEnv)->NumberOfFloats));
522
+ }
523
+
524
+ /*********************************************/
525
+ /* ReadNeededIntegers: Reads in the integers */
526
+ /* used by the binary image. */
527
+ /*********************************************/
528
+ void ReadNeededIntegers(
529
+ Environment *theEnv)
530
+ {
531
+ long long *integerValues;
532
+ unsigned long i;
533
+
534
+ /*==============================================*/
535
+ /* Determine the number of integers to be read. */
536
+ /*==============================================*/
537
+
538
+ GenReadBinary(theEnv,&SymbolData(theEnv)->NumberOfIntegers,sizeof(unsigned long));
539
+ if (SymbolData(theEnv)->NumberOfIntegers == 0)
540
+ {
541
+ SymbolData(theEnv)->IntegerArray = NULL;
542
+ return;
543
+ }
544
+
545
+ /*=================================*/
546
+ /* Allocate area for the integers. */
547
+ /*=================================*/
548
+
549
+ integerValues = (long long *) gm2(theEnv,(sizeof(long long) * SymbolData(theEnv)->NumberOfIntegers));
550
+ GenReadBinary(theEnv,integerValues,(sizeof(long long) * SymbolData(theEnv)->NumberOfIntegers));
551
+
552
+ /*==========================================*/
553
+ /* Store the integers in the integer array. */
554
+ /*==========================================*/
555
+
556
+ SymbolData(theEnv)->IntegerArray = (CLIPSInteger **)
557
+ gm2(theEnv,(sizeof(CLIPSInteger *) * SymbolData(theEnv)->NumberOfIntegers));
558
+ for (i = 0; i < SymbolData(theEnv)->NumberOfIntegers; i++)
559
+ { SymbolData(theEnv)->IntegerArray[i] = CreateInteger(theEnv,integerValues[i]); }
560
+
561
+ /*==========================*/
562
+ /* Free the integer buffer. */
563
+ /*==========================*/
564
+
565
+ rm(theEnv,integerValues,(sizeof(long long) * SymbolData(theEnv)->NumberOfIntegers));
566
+ }
567
+
568
+ /*******************************************/
569
+ /* ReadNeededBitMaps: Reads in the bitmaps */
570
+ /* used by the binary image. */
571
+ /*******************************************/
572
+ static void ReadNeededBitMaps(
573
+ Environment *theEnv)
574
+ {
575
+ char *bitMapStorage, *bitMapPtr;
576
+ unsigned long space;
577
+ unsigned long i;
578
+ unsigned short *tempSize;
579
+
580
+ /*=======================================*/
581
+ /* Determine the number of bitmaps to be */
582
+ /* read and space required for them. */
583
+ /*=======================================*/
584
+
585
+ GenReadBinary(theEnv,&SymbolData(theEnv)->NumberOfBitMaps,sizeof(long));
586
+ GenReadBinary(theEnv,&space,sizeof(unsigned long));
587
+ if (SymbolData(theEnv)->NumberOfBitMaps == 0)
588
+ {
589
+ SymbolData(theEnv)->BitMapArray = NULL;
590
+ return;
591
+ }
592
+
593
+ /*=======================================*/
594
+ /* Allocate area for bitmaps to be read. */
595
+ /*=======================================*/
596
+
597
+ bitMapStorage = (char *) gm2(theEnv,space);
598
+ GenReadBinary(theEnv,bitMapStorage,space);
599
+
600
+ /*================================================*/
601
+ /* Store the bitMap pointers in the bitmap array. */
602
+ /*================================================*/
603
+
604
+ SymbolData(theEnv)->BitMapArray = (CLIPSBitMap **)
605
+ gm2(theEnv,sizeof(CLIPSBitMap *) * SymbolData(theEnv)->NumberOfBitMaps);
606
+ bitMapPtr = bitMapStorage;
607
+ for (i = 0; i < SymbolData(theEnv)->NumberOfBitMaps; i++)
608
+ {
609
+ tempSize = (unsigned short *) bitMapPtr;
610
+ SymbolData(theEnv)->BitMapArray[i] = (CLIPSBitMap *) AddBitMap(theEnv,bitMapPtr+sizeof(unsigned short),*tempSize);
611
+ bitMapPtr += *tempSize + sizeof(unsigned short);
612
+ }
613
+
614
+ /*=========================*/
615
+ /* Free the bitmap buffer. */
616
+ /*=========================*/
617
+
618
+ rm(theEnv,bitMapStorage,space);
619
+ }
620
+
621
+ /**********************************************************/
622
+ /* FreeAtomicValueStorage: Returns the memory allocated */
623
+ /* for storing the pointers to atomic data values used */
624
+ /* in refreshing expressions and other data structures. */
625
+ /**********************************************************/
626
+ void FreeAtomicValueStorage(
627
+ Environment *theEnv)
628
+ {
629
+ if (SymbolData(theEnv)->SymbolArray != NULL)
630
+ rm(theEnv,SymbolData(theEnv)->SymbolArray,sizeof(CLIPSLexeme *) * SymbolData(theEnv)->NumberOfSymbols);
631
+ if (SymbolData(theEnv)->FloatArray != NULL)
632
+ rm(theEnv,SymbolData(theEnv)->FloatArray,sizeof(CLIPSFloat *) * SymbolData(theEnv)->NumberOfFloats);
633
+ if (SymbolData(theEnv)->IntegerArray != NULL)
634
+ rm(theEnv,SymbolData(theEnv)->IntegerArray,sizeof(CLIPSInteger *) * SymbolData(theEnv)->NumberOfIntegers);
635
+ if (SymbolData(theEnv)->BitMapArray != NULL)
636
+ rm(theEnv,SymbolData(theEnv)->BitMapArray,sizeof(CLIPSBitMap *) * SymbolData(theEnv)->NumberOfBitMaps);
637
+
638
+ SymbolData(theEnv)->SymbolArray = NULL;
639
+ SymbolData(theEnv)->FloatArray = NULL;
640
+ SymbolData(theEnv)->IntegerArray = NULL;
641
+ SymbolData(theEnv)->BitMapArray = NULL;
642
+ SymbolData(theEnv)->NumberOfSymbols = 0;
643
+ SymbolData(theEnv)->NumberOfFloats = 0;
644
+ SymbolData(theEnv)->NumberOfIntegers = 0;
645
+ SymbolData(theEnv)->NumberOfBitMaps = 0;
646
+ }
647
+
648
+ #endif /* BLOAD || BLOAD_ONLY || BLOAD_AND_BSAVE || BLOAD_INSTANCES || BSAVE_INSTANCES */