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,77 @@
1
+ /*******************************************************/
2
+ /* "C" Language Integrated Production System */
3
+ /* */
4
+ /* CLIPS Version 6.40 08/25/16 */
5
+ /* */
6
+ /* TEXT PROCESSING HEADER FILE */
7
+ /*******************************************************/
8
+
9
+ /*************************************************************/
10
+ /* Purpose: */
11
+ /* */
12
+ /* Principal Programmer(s): */
13
+ /* Brian L. Dantes */
14
+ /* */
15
+ /* Contributing Programmer(s): */
16
+ /* */
17
+ /* Revision History: */
18
+ /* */
19
+ /* 6.23: Modified error messages so that they were */
20
+ /* directly printed rather than storing them in */
21
+ /* a string buffer which might not be large */
22
+ /* enough to contain the entire message. DR0855 */
23
+ /* Correction for FalseSymbol/TrueSymbol. DR0859 */
24
+ /* */
25
+ /* 6.24: Added get-region function. */
26
+ /* */
27
+ /* Added environment parameter to GenClose. */
28
+ /* Added environment parameter to GenOpen. */
29
+ /* */
30
+ /* 6.30: Removed HELP_FUNCTIONS compilation flag and */
31
+ /* associated functionality. */
32
+ /* */
33
+ /* Used genstrcpy and genstrncpy instead of */
34
+ /* strcpy and strncpy. */
35
+ /* */
36
+ /* Support for long long integers. */
37
+ /* */
38
+ /* Changed integer type/precision. */
39
+ /* */
40
+ /* Removed conditional code for unsupported */
41
+ /* compilers/operating systems (IBM_TBC). */
42
+ /* */
43
+ /* Added const qualifiers to remove C++ */
44
+ /* deprecation warnings. */
45
+ /* */
46
+ /* 6.40: Removed LOCALE definition. */
47
+ /* */
48
+ /* Pragma once and other inclusion changes. */
49
+ /* */
50
+ /* Removed use of void pointers for specific */
51
+ /* data structures. */
52
+ /* */
53
+ /* UDF redesign. */
54
+ /* */
55
+ /*************************************************************/
56
+
57
+ #ifndef _H_textpro
58
+
59
+ #pragma once
60
+
61
+ #define _H_textpro
62
+
63
+ #if TEXTPRO_FUNCTIONS
64
+ void FetchCommand(Environment *,UDFContext *,UDFValue *);
65
+ void PrintRegionCommand(Environment *,UDFContext *,UDFValue *);
66
+ void GetRegionCommand(Environment *,UDFContext *,UDFValue *);
67
+ void TossCommand(Environment *,UDFContext *,UDFValue *);
68
+ #endif
69
+
70
+ void HelpFunctionDefinitions(Environment *);
71
+
72
+ #endif /* _H_textpro */
73
+
74
+
75
+
76
+
77
+
@@ -0,0 +1,609 @@
1
+ /*******************************************************/
2
+ /* "C" Language Integrated Production System */
3
+ /* */
4
+ /* CLIPS Version 6.40 07/30/16 */
5
+ /* */
6
+ /* DEFTEMPLATE BSAVE/BLOAD MODULE */
7
+ /*******************************************************/
8
+
9
+ /*************************************************************/
10
+ /* Purpose: Implements the binary save/load feature for the */
11
+ /* deftemplate construct. */
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.23: Added support for templates maintaining their */
22
+ /* own list of facts. */
23
+ /* */
24
+ /* 6.30: Changed integer type/precision. */
25
+ /* */
26
+ /* Support for deftemplate slot facets. */
27
+ /* */
28
+ /* 6.40: Pragma once and other inclusion changes. */
29
+ /* */
30
+ /* Added support for booleans with <stdbool.h>. */
31
+ /* */
32
+ /* Removed use of void pointers for specific */
33
+ /* data structures. */
34
+ /* */
35
+ /* Removed initial-fact support. */
36
+ /* */
37
+ /*************************************************************/
38
+
39
+ #include "setup.h"
40
+
41
+ #if DEFTEMPLATE_CONSTRUCT && (BLOAD || BLOAD_ONLY || BLOAD_AND_BSAVE) && (! RUN_TIME)
42
+
43
+ #include <stdio.h>
44
+
45
+ #include "bload.h"
46
+ #include "bsave.h"
47
+ #include "cstrnbin.h"
48
+ #include "envrnmnt.h"
49
+ #include "factbin.h"
50
+ #include "factmngr.h"
51
+ #include "memalloc.h"
52
+ #include "tmpltdef.h"
53
+ #include "tmpltpsr.h"
54
+ #include "tmpltutl.h"
55
+
56
+ #include "tmpltbin.h"
57
+
58
+ /***************************************/
59
+ /* LOCAL INTERNAL FUNCTION DEFINITIONS */
60
+ /***************************************/
61
+
62
+ #if BLOAD_AND_BSAVE
63
+ static void BsaveFind(Environment *);
64
+ static void BsaveStorage(Environment *,FILE *);
65
+ static void BsaveBinaryItem(Environment *,FILE *);
66
+ #endif
67
+ static void BloadStorage(Environment *);
68
+ static void BloadBinaryItem(Environment *);
69
+ static void UpdateDeftemplateModule(Environment *,void *,unsigned long);
70
+ static void UpdateDeftemplate(Environment *,void *,unsigned long);
71
+ static void UpdateDeftemplateSlot(Environment *,void *,unsigned long);
72
+ static void ClearBload(Environment *);
73
+ static void DeallocateDeftemplateBloadData(Environment *);
74
+
75
+ /***********************************************/
76
+ /* DeftemplateBinarySetup: Installs the binary */
77
+ /* save/load feature for deftemplates. */
78
+ /***********************************************/
79
+ void DeftemplateBinarySetup(
80
+ Environment *theEnv)
81
+ {
82
+ AllocateEnvironmentData(theEnv,TMPLTBIN_DATA,sizeof(struct deftemplateBinaryData),DeallocateDeftemplateBloadData);
83
+ #if BLOAD_AND_BSAVE
84
+ AddBinaryItem(theEnv,"deftemplate",0,BsaveFind,NULL,
85
+ BsaveStorage,BsaveBinaryItem,
86
+ BloadStorage,BloadBinaryItem,
87
+ ClearBload);
88
+ #endif
89
+ #if (BLOAD || BLOAD_ONLY)
90
+ AddBinaryItem(theEnv,"deftemplate",0,NULL,NULL,NULL,NULL,
91
+ BloadStorage,BloadBinaryItem,
92
+ ClearBload);
93
+ #endif
94
+ }
95
+
96
+ /***********************************************************/
97
+ /* DeallocateDeftemplateBloadData: Deallocates environment */
98
+ /* data for the deftemplate bsave functionality. */
99
+ /***********************************************************/
100
+ static void DeallocateDeftemplateBloadData(
101
+ Environment *theEnv)
102
+ {
103
+ size_t space;
104
+
105
+ space = DeftemplateBinaryData(theEnv)->NumberOfTemplateModules * sizeof(struct deftemplateModule);
106
+ if (space != 0) genfree(theEnv,DeftemplateBinaryData(theEnv)->ModuleArray,space);
107
+
108
+ space = DeftemplateBinaryData(theEnv)->NumberOfDeftemplates * sizeof(Deftemplate);
109
+ if (space != 0) genfree(theEnv,DeftemplateBinaryData(theEnv)->DeftemplateArray,space);
110
+
111
+ space = DeftemplateBinaryData(theEnv)->NumberOfTemplateSlots * sizeof(struct templateSlot);
112
+ if (space != 0) genfree(theEnv,DeftemplateBinaryData(theEnv)->SlotArray,space);
113
+ }
114
+
115
+ #if BLOAD_AND_BSAVE
116
+
117
+ /**************************************************************/
118
+ /* BsaveFind: Counts the number of data structures which must */
119
+ /* be saved in the binary image for the deftemplates in the */
120
+ /* current environment. */
121
+ /**************************************************************/
122
+ static void BsaveFind(
123
+ Environment *theEnv)
124
+ {
125
+ Deftemplate *theDeftemplate;
126
+ struct templateSlot *theSlot;
127
+ Defmodule *theModule;
128
+
129
+ /*=======================================================*/
130
+ /* If a binary image is already loaded, then temporarily */
131
+ /* save the count values since these will be overwritten */
132
+ /* in the process of saving the binary image. */
133
+ /*=======================================================*/
134
+
135
+ SaveBloadCount(theEnv,DeftemplateBinaryData(theEnv)->NumberOfDeftemplates);
136
+ SaveBloadCount(theEnv,DeftemplateBinaryData(theEnv)->NumberOfTemplateSlots);
137
+ SaveBloadCount(theEnv,DeftemplateBinaryData(theEnv)->NumberOfTemplateModules);
138
+
139
+ /*==================================================*/
140
+ /* Set the count of deftemplates, deftemplate slots */
141
+ /* and deftemplate module data structures to zero. */
142
+ /*==================================================*/
143
+
144
+ DeftemplateBinaryData(theEnv)->NumberOfDeftemplates = 0;
145
+ DeftemplateBinaryData(theEnv)->NumberOfTemplateSlots = 0;
146
+ DeftemplateBinaryData(theEnv)->NumberOfTemplateModules = 0;
147
+
148
+ /*===========================*/
149
+ /* Loop through each module. */
150
+ /*===========================*/
151
+
152
+ for (theModule = GetNextDefmodule(theEnv,NULL);
153
+ theModule != NULL;
154
+ theModule = GetNextDefmodule(theEnv,theModule))
155
+ {
156
+ /*============================================*/
157
+ /* Set the current module to the module being */
158
+ /* examined and increment the number of */
159
+ /* deftemplate modules encountered. */
160
+ /*============================================*/
161
+
162
+ SetCurrentModule(theEnv,theModule);
163
+ DeftemplateBinaryData(theEnv)->NumberOfTemplateModules++;
164
+
165
+ /*======================================================*/
166
+ /* Loop through each deftemplate in the current module. */
167
+ /*======================================================*/
168
+
169
+ for (theDeftemplate = GetNextDeftemplate(theEnv,NULL);
170
+ theDeftemplate != NULL;
171
+ theDeftemplate = GetNextDeftemplate(theEnv,theDeftemplate))
172
+ {
173
+ /*======================================================*/
174
+ /* Initialize the construct header for the binary save. */
175
+ /*======================================================*/
176
+
177
+ MarkConstructHeaderNeededItems(&theDeftemplate->header,
178
+ DeftemplateBinaryData(theEnv)->NumberOfDeftemplates++);
179
+
180
+ /*=============================================================*/
181
+ /* Loop through each slot in the deftemplate, incrementing the */
182
+ /* slot count and marking the slot names as needed symbols. */
183
+ /*=============================================================*/
184
+
185
+ for (theSlot = theDeftemplate->slotList;
186
+ theSlot != NULL;
187
+ theSlot = theSlot->next)
188
+ {
189
+ DeftemplateBinaryData(theEnv)->NumberOfTemplateSlots++;
190
+ theSlot->slotName->neededSymbol = true;
191
+ }
192
+ }
193
+
194
+ }
195
+ }
196
+
197
+ /*********************************************************/
198
+ /* BsaveStorage: Writes out the storage requirements for */
199
+ /* all deftemplate structures to the binary file. */
200
+ /*********************************************************/
201
+ static void BsaveStorage(
202
+ Environment *theEnv,
203
+ FILE *fp)
204
+ {
205
+ size_t space;
206
+
207
+ /*========================================================================*/
208
+ /* Three data structures are saved as part of a deftemplate binary image: */
209
+ /* the deftemplate data structure, the deftemplateModule data structure, */
210
+ /* and the templateSlot data structure. The data structures associated */
211
+ /* with default values and constraints are not save with the deftemplate */
212
+ /* portion of the binary image. */
213
+ /*========================================================================*/
214
+
215
+ space = sizeof(long) * 3;
216
+ GenWrite(&space,sizeof(size_t),fp);
217
+ GenWrite(&DeftemplateBinaryData(theEnv)->NumberOfDeftemplates,sizeof(long),fp);
218
+ GenWrite(&DeftemplateBinaryData(theEnv)->NumberOfTemplateSlots,sizeof(long),fp);
219
+ GenWrite(&DeftemplateBinaryData(theEnv)->NumberOfTemplateModules,sizeof(long),fp);
220
+ }
221
+
222
+ /***********************************************/
223
+ /* BsaveBinaryItem: Writes out all deftemplate */
224
+ /* structures to the binary file. */
225
+ /***********************************************/
226
+ static void BsaveBinaryItem(
227
+ Environment *theEnv,
228
+ FILE *fp)
229
+ {
230
+ size_t space;
231
+ Deftemplate *theDeftemplate;
232
+ struct bsaveDeftemplate tempDeftemplate;
233
+ struct templateSlot *theSlot;
234
+ struct bsaveTemplateSlot tempTemplateSlot;
235
+ struct bsaveDeftemplateModule tempTemplateModule;
236
+ Defmodule *theModule;
237
+ struct deftemplateModule *theModuleItem;
238
+
239
+ /*============================================================*/
240
+ /* Write out the amount of space taken up by the deftemplate, */
241
+ /* deftemplateModule, and templateSlot data structures in the */
242
+ /* binary image. */
243
+ /*============================================================*/
244
+
245
+ space = (DeftemplateBinaryData(theEnv)->NumberOfDeftemplates * sizeof(struct bsaveDeftemplate)) +
246
+ (DeftemplateBinaryData(theEnv)->NumberOfTemplateSlots * sizeof(struct bsaveTemplateSlot)) +
247
+ (DeftemplateBinaryData(theEnv)->NumberOfTemplateModules * sizeof(struct bsaveDeftemplateModule));
248
+ GenWrite(&space,sizeof(size_t),fp);
249
+
250
+ /*===================================================*/
251
+ /* Write out each deftemplate module data structure. */
252
+ /*===================================================*/
253
+
254
+ DeftemplateBinaryData(theEnv)->NumberOfDeftemplates = 0;
255
+ for (theModule = GetNextDefmodule(theEnv,NULL);
256
+ theModule != NULL;
257
+ theModule = GetNextDefmodule(theEnv,theModule))
258
+ {
259
+ SetCurrentModule(theEnv,theModule);
260
+
261
+ theModuleItem = (struct deftemplateModule *)
262
+ GetModuleItem(theEnv,NULL,FindModuleItem(theEnv,"deftemplate")->moduleIndex);
263
+ AssignBsaveDefmdlItemHdrVals(&tempTemplateModule.header,
264
+ &theModuleItem->header);
265
+ GenWrite(&tempTemplateModule,sizeof(struct bsaveDeftemplateModule),fp);
266
+ }
267
+
268
+ /*============================================*/
269
+ /* Write out each deftemplate data structure. */
270
+ /*============================================*/
271
+
272
+ DeftemplateBinaryData(theEnv)->NumberOfTemplateSlots = 0;
273
+ for (theModule = GetNextDefmodule(theEnv,NULL);
274
+ theModule != NULL;
275
+ theModule = GetNextDefmodule(theEnv,theModule))
276
+ {
277
+ SetCurrentModule(theEnv,theModule);
278
+
279
+ for (theDeftemplate = GetNextDeftemplate(theEnv,NULL);
280
+ theDeftemplate != NULL;
281
+ theDeftemplate = GetNextDeftemplate(theEnv,theDeftemplate))
282
+ {
283
+ AssignBsaveConstructHeaderVals(&tempDeftemplate.header,
284
+ &theDeftemplate->header);
285
+ tempDeftemplate.implied = theDeftemplate->implied;
286
+ tempDeftemplate.numberOfSlots = theDeftemplate->numberOfSlots;
287
+ tempDeftemplate.patternNetwork = BsaveFactPatternIndex(theDeftemplate->patternNetwork);
288
+
289
+ if (theDeftemplate->slotList != NULL)
290
+ { tempDeftemplate.slotList = DeftemplateBinaryData(theEnv)->NumberOfTemplateSlots; }
291
+ else
292
+ { tempDeftemplate.slotList = ULONG_MAX; }
293
+
294
+ GenWrite(&tempDeftemplate,sizeof(struct bsaveDeftemplate),fp);
295
+
296
+ DeftemplateBinaryData(theEnv)->NumberOfTemplateSlots += theDeftemplate->numberOfSlots;
297
+ }
298
+ }
299
+
300
+ /*=============================================*/
301
+ /* Write out each templateSlot data structure. */
302
+ /*=============================================*/
303
+
304
+ for (theModule = GetNextDefmodule(theEnv,NULL);
305
+ theModule != NULL;
306
+ theModule = GetNextDefmodule(theEnv,theModule))
307
+ {
308
+ SetCurrentModule(theEnv,theModule);
309
+
310
+ for (theDeftemplate = GetNextDeftemplate(theEnv,NULL);
311
+ theDeftemplate != NULL;
312
+ theDeftemplate = GetNextDeftemplate(theEnv,theDeftemplate))
313
+ {
314
+ for (theSlot = theDeftemplate->slotList;
315
+ theSlot != NULL;
316
+ theSlot = theSlot->next)
317
+ {
318
+ tempTemplateSlot.constraints = ConstraintIndex(theSlot->constraints);
319
+ tempTemplateSlot.slotName = theSlot->slotName->bucket;
320
+ tempTemplateSlot.multislot = theSlot->multislot;
321
+ tempTemplateSlot.noDefault = theSlot->noDefault;
322
+ tempTemplateSlot.defaultPresent = theSlot->defaultPresent;
323
+ tempTemplateSlot.defaultDynamic = theSlot->defaultDynamic;
324
+ tempTemplateSlot.defaultList = HashedExpressionIndex(theEnv,theSlot->defaultList);
325
+ tempTemplateSlot.facetList = HashedExpressionIndex(theEnv,theSlot->facetList);
326
+
327
+ if (theSlot->next != NULL) tempTemplateSlot.next = 0L;
328
+ else tempTemplateSlot.next = ULONG_MAX;
329
+
330
+ GenWrite(&tempTemplateSlot,sizeof(struct bsaveTemplateSlot),fp);
331
+ }
332
+ }
333
+ }
334
+
335
+ /*=============================================================*/
336
+ /* If a binary image was already loaded when the bsave command */
337
+ /* was issued, then restore the counts indicating the number */
338
+ /* of deftemplates, deftemplate modules, and deftemplate slots */
339
+ /* in the binary image (these were overwritten by the binary */
340
+ /* save). */
341
+ /*=============================================================*/
342
+
343
+ RestoreBloadCount(theEnv,&DeftemplateBinaryData(theEnv)->NumberOfDeftemplates);
344
+ RestoreBloadCount(theEnv,&DeftemplateBinaryData(theEnv)->NumberOfTemplateSlots);
345
+ RestoreBloadCount(theEnv,&DeftemplateBinaryData(theEnv)->NumberOfTemplateModules);
346
+ }
347
+
348
+ #endif /* BLOAD_AND_BSAVE */
349
+
350
+ /****************************************************/
351
+ /* BloadStorage: Allocates storage requirements for */
352
+ /* the deftemplates used by this binary image. */
353
+ /****************************************************/
354
+ static void BloadStorage(
355
+ Environment *theEnv)
356
+ {
357
+ size_t space;
358
+
359
+ /*=========================================================*/
360
+ /* Determine the number of deftemplate, deftemplateModule, */
361
+ /* and templateSlot data structures to be read. */
362
+ /*=========================================================*/
363
+
364
+ GenReadBinary(theEnv,&space,sizeof(size_t));
365
+ GenReadBinary(theEnv,&DeftemplateBinaryData(theEnv)->NumberOfDeftemplates,sizeof(long));
366
+ GenReadBinary(theEnv,&DeftemplateBinaryData(theEnv)->NumberOfTemplateSlots,sizeof(long));
367
+ GenReadBinary(theEnv,&DeftemplateBinaryData(theEnv)->NumberOfTemplateModules,sizeof(long));
368
+
369
+ /*====================================*/
370
+ /* Allocate the space needed for the */
371
+ /* deftemplateModule data structures. */
372
+ /*====================================*/
373
+
374
+ if (DeftemplateBinaryData(theEnv)->NumberOfTemplateModules == 0)
375
+ {
376
+ DeftemplateBinaryData(theEnv)->DeftemplateArray = NULL;
377
+ DeftemplateBinaryData(theEnv)->SlotArray = NULL;
378
+ DeftemplateBinaryData(theEnv)->ModuleArray = NULL;
379
+ return;
380
+ }
381
+
382
+ space = DeftemplateBinaryData(theEnv)->NumberOfTemplateModules * sizeof(struct deftemplateModule);
383
+ DeftemplateBinaryData(theEnv)->ModuleArray = (struct deftemplateModule *) genalloc(theEnv,space);
384
+
385
+ /*===================================*/
386
+ /* Allocate the space needed for the */
387
+ /* deftemplate data structures. */
388
+ /*===================================*/
389
+
390
+ if (DeftemplateBinaryData(theEnv)->NumberOfDeftemplates == 0)
391
+ {
392
+ DeftemplateBinaryData(theEnv)->DeftemplateArray = NULL;
393
+ DeftemplateBinaryData(theEnv)->SlotArray = NULL;
394
+ return;
395
+ }
396
+
397
+ space = DeftemplateBinaryData(theEnv)->NumberOfDeftemplates * sizeof(Deftemplate);
398
+ DeftemplateBinaryData(theEnv)->DeftemplateArray = (Deftemplate *) genalloc(theEnv,space);
399
+
400
+ /*===================================*/
401
+ /* Allocate the space needed for the */
402
+ /* templateSlot data structures. */
403
+ /*===================================*/
404
+
405
+ if (DeftemplateBinaryData(theEnv)->NumberOfTemplateSlots == 0)
406
+ {
407
+ DeftemplateBinaryData(theEnv)->SlotArray = NULL;
408
+ return;
409
+ }
410
+
411
+ space = DeftemplateBinaryData(theEnv)->NumberOfTemplateSlots * sizeof(struct templateSlot);
412
+ DeftemplateBinaryData(theEnv)->SlotArray = (struct templateSlot *) genalloc(theEnv,space);
413
+ }
414
+
415
+ /********************************************************/
416
+ /* BloadBinaryItem: Loads and refreshes the deftemplate */
417
+ /* constructs used by this binary image. */
418
+ /********************************************************/
419
+ static void BloadBinaryItem(
420
+ Environment *theEnv)
421
+ {
422
+ size_t space;
423
+
424
+ /*======================================================*/
425
+ /* Read in the amount of space used by the binary image */
426
+ /* (this is used to skip the construct in the event it */
427
+ /* is not available in the version being run). */
428
+ /*======================================================*/
429
+
430
+ GenReadBinary(theEnv,&space,sizeof(size_t));
431
+
432
+ /*===============================================*/
433
+ /* Read in the deftemplateModule data structures */
434
+ /* and refresh the pointers. */
435
+ /*===============================================*/
436
+
437
+ BloadandRefresh(theEnv,DeftemplateBinaryData(theEnv)->NumberOfTemplateModules,sizeof(struct bsaveDeftemplateModule),
438
+ UpdateDeftemplateModule);
439
+
440
+ /*===============================================*/
441
+ /* Read in the deftemplateModule data structures */
442
+ /* and refresh the pointers. */
443
+ /*===============================================*/
444
+
445
+ BloadandRefresh(theEnv,DeftemplateBinaryData(theEnv)->NumberOfDeftemplates,sizeof(struct bsaveDeftemplate),
446
+ UpdateDeftemplate);
447
+
448
+ /*==========================================*/
449
+ /* Read in the templateSlot data structures */
450
+ /* and refresh the pointers. */
451
+ /*==========================================*/
452
+
453
+ BloadandRefresh(theEnv,DeftemplateBinaryData(theEnv)->NumberOfTemplateSlots,sizeof(struct bsaveTemplateSlot),
454
+ UpdateDeftemplateSlot);
455
+ }
456
+
457
+ /**************************************************/
458
+ /* UpdateDeftemplateModule: Bload refresh routine */
459
+ /* for deftemplateModule data structures. */
460
+ /**************************************************/
461
+ static void UpdateDeftemplateModule(
462
+ Environment *theEnv,
463
+ void *buf,
464
+ unsigned long obji)
465
+ {
466
+ struct bsaveDeftemplateModule *bdmPtr;
467
+
468
+ bdmPtr = (struct bsaveDeftemplateModule *) buf;
469
+ UpdateDefmoduleItemHeader(theEnv,&bdmPtr->header,&DeftemplateBinaryData(theEnv)->ModuleArray[obji].header,
470
+ sizeof(Deftemplate),
471
+ (void *) DeftemplateBinaryData(theEnv)->DeftemplateArray);
472
+ }
473
+
474
+ /********************************************/
475
+ /* UpdateDeftemplate: Bload refresh routine */
476
+ /* for deftemplate data structures. */
477
+ /********************************************/
478
+ static void UpdateDeftemplate(
479
+ Environment *theEnv,
480
+ void *buf,
481
+ unsigned long obji)
482
+ {
483
+ Deftemplate *theDeftemplate;
484
+ struct bsaveDeftemplate *bdtPtr;
485
+
486
+ bdtPtr = (struct bsaveDeftemplate *) buf;
487
+ theDeftemplate = &DeftemplateBinaryData(theEnv)->DeftemplateArray[obji];
488
+
489
+ UpdateConstructHeader(theEnv,&bdtPtr->header,&theDeftemplate->header,DEFTEMPLATE,
490
+ sizeof(struct deftemplateModule),DeftemplateBinaryData(theEnv)->ModuleArray,
491
+ sizeof(Deftemplate),DeftemplateBinaryData(theEnv)->DeftemplateArray);
492
+
493
+ if (bdtPtr->slotList != ULONG_MAX)
494
+ { theDeftemplate->slotList = (struct templateSlot *) &DeftemplateBinaryData(theEnv)->SlotArray[bdtPtr->slotList]; }
495
+ else
496
+ { theDeftemplate->slotList = NULL; }
497
+
498
+ if (bdtPtr->patternNetwork != ULONG_MAX)
499
+ { theDeftemplate->patternNetwork = (struct factPatternNode *) BloadFactPatternPointer(bdtPtr->patternNetwork); }
500
+ else
501
+ { theDeftemplate->patternNetwork = NULL; }
502
+
503
+ theDeftemplate->implied = bdtPtr->implied;
504
+ #if DEBUGGING_FUNCTIONS
505
+ theDeftemplate->watch = FactData(theEnv)->WatchFacts;
506
+ #endif
507
+ theDeftemplate->inScope = false;
508
+ theDeftemplate->numberOfSlots = bdtPtr->numberOfSlots;
509
+ theDeftemplate->factList = NULL;
510
+ theDeftemplate->lastFact = NULL;
511
+ }
512
+
513
+ /************************************************/
514
+ /* UpdateDeftemplateSlot: Bload refresh routine */
515
+ /* for templateSlot data structures. */
516
+ /************************************************/
517
+ static void UpdateDeftemplateSlot(
518
+ Environment *theEnv,
519
+ void *buf,
520
+ unsigned long obji)
521
+ {
522
+ struct templateSlot *theSlot;
523
+ struct bsaveTemplateSlot *btsPtr;
524
+
525
+ btsPtr = (struct bsaveTemplateSlot *) buf;
526
+ theSlot = (struct templateSlot *) &DeftemplateBinaryData(theEnv)->SlotArray[obji];
527
+
528
+ theSlot->slotName = SymbolPointer(btsPtr->slotName);
529
+ IncrementLexemeCount(theSlot->slotName);
530
+ theSlot->defaultList = HashedExpressionPointer(btsPtr->defaultList);
531
+ theSlot->facetList = HashedExpressionPointer(btsPtr->facetList);
532
+ theSlot->constraints = ConstraintPointer(btsPtr->constraints);
533
+
534
+ theSlot->multislot = btsPtr->multislot;
535
+ theSlot->noDefault = btsPtr->noDefault;
536
+ theSlot->defaultPresent = btsPtr->defaultPresent;
537
+ theSlot->defaultDynamic = btsPtr->defaultDynamic;
538
+
539
+ if (btsPtr->next != ULONG_MAX)
540
+ { theSlot->next = (struct templateSlot *) &DeftemplateBinaryData(theEnv)->SlotArray[obji + 1]; }
541
+ else
542
+ { theSlot->next = NULL; }
543
+ }
544
+
545
+ /*****************************************/
546
+ /* ClearBload: Deftemplate clear routine */
547
+ /* when a binary load is in effect. */
548
+ /*****************************************/
549
+ static void ClearBload(
550
+ Environment *theEnv)
551
+ {
552
+ size_t space;
553
+ unsigned long i;
554
+
555
+ /*=============================================*/
556
+ /* Decrement in use counters for atomic values */
557
+ /* contained in the construct headers. */
558
+ /*=============================================*/
559
+
560
+ for (i = 0; i < DeftemplateBinaryData(theEnv)->NumberOfDeftemplates; i++)
561
+ { UnmarkConstructHeader(theEnv,&DeftemplateBinaryData(theEnv)->DeftemplateArray[i].header); }
562
+
563
+ /*=======================================*/
564
+ /* Decrement in use counters for symbols */
565
+ /* used as slot names. */
566
+ /*=======================================*/
567
+
568
+ for (i = 0; i < DeftemplateBinaryData(theEnv)->NumberOfTemplateSlots; i++)
569
+ { ReleaseLexeme(theEnv,DeftemplateBinaryData(theEnv)->SlotArray[i].slotName); }
570
+
571
+ /*======================================================================*/
572
+ /* Deallocate the space used for the deftemplateModule data structures. */
573
+ /*======================================================================*/
574
+
575
+ space = DeftemplateBinaryData(theEnv)->NumberOfTemplateModules * sizeof(struct deftemplateModule);
576
+ if (space != 0) genfree(theEnv,DeftemplateBinaryData(theEnv)->ModuleArray,space);
577
+ DeftemplateBinaryData(theEnv)->NumberOfTemplateModules = 0;
578
+
579
+ /*================================================================*/
580
+ /* Deallocate the space used for the deftemplate data structures. */
581
+ /*================================================================*/
582
+
583
+ space = DeftemplateBinaryData(theEnv)->NumberOfDeftemplates * sizeof(Deftemplate);
584
+ if (space != 0) genfree(theEnv,DeftemplateBinaryData(theEnv)->DeftemplateArray,space);
585
+ DeftemplateBinaryData(theEnv)->NumberOfDeftemplates = 0;
586
+
587
+ /*=================================================================*/
588
+ /* Deallocate the space used for the templateSlot data structures. */
589
+ /*=================================================================*/
590
+
591
+ space = DeftemplateBinaryData(theEnv)->NumberOfTemplateSlots * sizeof(struct templateSlot);
592
+ if (space != 0) genfree(theEnv,DeftemplateBinaryData(theEnv)->SlotArray,space);
593
+ DeftemplateBinaryData(theEnv)->NumberOfTemplateSlots = 0;
594
+ }
595
+
596
+ /************************************************************/
597
+ /* BloadDeftemplateModuleReference: Returns the deftemplate */
598
+ /* module pointer for use with the bload function. */
599
+ /************************************************************/
600
+ void *BloadDeftemplateModuleReference(
601
+ Environment *theEnv,
602
+ unsigned long theIndex)
603
+ {
604
+ return ((void *) &DeftemplateBinaryData(theEnv)->ModuleArray[theIndex]);
605
+ }
606
+
607
+ #endif /* DEFTEMPLATE_CONSTRUCT && (BLOAD || BLOAD_ONLY || BLOAD_AND_BSAVE) && (! RUN_TIME) */
608
+
609
+