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,450 @@
1
+ /*******************************************************/
2
+ /* "C" Language Integrated Production System */
3
+ /* */
4
+ /* CLIPS Version 6.40 07/30/16 */
5
+ /* */
6
+ /* DEFTEMPLATE CONSTRUCTS-TO-C MODULE */
7
+ /*******************************************************/
8
+
9
+ /*************************************************************/
10
+ /* Purpose: Implements the constructs-to-c 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: Added support for path name argument to */
25
+ /* constructs-to-c. */
26
+ /* */
27
+ /* Removed conditional code for unsupported */
28
+ /* compilers/operating systems (IBM_MCW, */
29
+ /* MAC_MCW, and IBM_TBC). */
30
+ /* */
31
+ /* Support for deftemplate slot facets. */
32
+ /* */
33
+ /* Added code for deftemplate run time */
34
+ /* initialization of hashed comparisons to */
35
+ /* constants. */
36
+ /* */
37
+ /* Added const qualifiers to remove C++ */
38
+ /* deprecation warnings. */
39
+ /* */
40
+ /* 6.40: Pragma once and other inclusion changes. */
41
+ /* */
42
+ /* Added support for booleans with <stdbool.h>. */
43
+ /* */
44
+ /* Removed use of void pointers for specific */
45
+ /* data structures. */
46
+ /* */
47
+ /*************************************************************/
48
+
49
+ #include "setup.h"
50
+
51
+ #if DEFTEMPLATE_CONSTRUCT && CONSTRUCT_COMPILER && (! RUN_TIME)
52
+
53
+ #define SlotPrefix() ArbitraryPrefix(DeftemplateData(theEnv)->DeftemplateCodeItem,2)
54
+
55
+ #include <stdio.h>
56
+
57
+ #include "conscomp.h"
58
+ #include "cstrncmp.h"
59
+ #include "envrnmnt.h"
60
+ #include "factcmp.h"
61
+ #include "tmpltdef.h"
62
+
63
+ #include "tmpltcmp.h"
64
+
65
+ /***************************************/
66
+ /* LOCAL INTERNAL FUNCTION DEFINITIONS */
67
+ /***************************************/
68
+
69
+ static bool ConstructToCode(Environment *,const char *,const char *,char *,
70
+ unsigned int,FILE *,unsigned int,unsigned int);
71
+ static void SlotToCode(Environment *,FILE *,struct templateSlot *,
72
+ unsigned int,unsigned int,unsigned int);
73
+ static void DeftemplateModuleToCode(Environment *,FILE *,Defmodule *,unsigned int,
74
+ unsigned int,unsigned int);
75
+ static void DeftemplateToCode(Environment *,FILE *,Deftemplate *,
76
+ unsigned int,unsigned int,unsigned int,unsigned int);
77
+ static void CloseDeftemplateFiles(Environment *,FILE *,FILE *,FILE *,unsigned int);
78
+ static void InitDeftemplateCode(Environment *,FILE *,unsigned int,unsigned int);
79
+
80
+ /*********************************************************/
81
+ /* DeftemplateCompilerSetup: Initializes the deftemplate */
82
+ /* construct for use with the constructs-to-c command. */
83
+ /*********************************************************/
84
+ void DeftemplateCompilerSetup(
85
+ Environment *theEnv)
86
+ {
87
+ DeftemplateData(theEnv)->DeftemplateCodeItem =
88
+ AddCodeGeneratorItem(theEnv,"deftemplate",0,NULL,InitDeftemplateCode,ConstructToCode,3);
89
+ }
90
+
91
+ /*************************************************************/
92
+ /* ConstructToCode: Produces deftemplate code for a run-time */
93
+ /* module created using the constructs-to-c function. */
94
+ /*************************************************************/
95
+ static bool ConstructToCode(
96
+ Environment *theEnv,
97
+ const char *fileName,
98
+ const char *pathName,
99
+ char *fileNameBuffer,
100
+ unsigned int fileID,
101
+ FILE *headerFP,
102
+ unsigned int imageID,
103
+ unsigned int maxIndices)
104
+ {
105
+ unsigned int fileCount = 1;
106
+ Defmodule *theModule;
107
+ Deftemplate *theTemplate;
108
+ struct templateSlot *slotPtr;
109
+ unsigned int slotCount = 0, slotArrayCount = 0, slotArrayVersion = 1;
110
+ unsigned int moduleCount = 0, moduleArrayCount = 0, moduleArrayVersion = 1;
111
+ unsigned int templateArrayCount = 0, templateArrayVersion = 1;
112
+ FILE *slotFile = NULL, *moduleFile = NULL, *templateFile = NULL;
113
+
114
+ /*==================================================*/
115
+ /* Include the appropriate deftemplate header file. */
116
+ /*==================================================*/
117
+
118
+ fprintf(headerFP,"#include \"tmpltdef.h\"\n");
119
+
120
+ /*=============================================================*/
121
+ /* Loop through all the modules, all the deftemplates, and all */
122
+ /* the deftemplate slots writing their C code representation */
123
+ /* to the file as they are traversed. */
124
+ /*=============================================================*/
125
+
126
+ theModule = GetNextDefmodule(theEnv,NULL);
127
+
128
+ while (theModule != NULL)
129
+ {
130
+ SetCurrentModule(theEnv,theModule);
131
+
132
+ moduleFile = OpenFileIfNeeded(theEnv,moduleFile,fileName,pathName,fileNameBuffer,fileID,imageID,&fileCount,
133
+ moduleArrayVersion,headerFP,
134
+ "struct deftemplateModule",ModulePrefix(DeftemplateData(theEnv)->DeftemplateCodeItem),
135
+ false,NULL);
136
+
137
+ if (moduleFile == NULL)
138
+ {
139
+ CloseDeftemplateFiles(theEnv,moduleFile,templateFile,slotFile,maxIndices);
140
+ return false;
141
+ }
142
+
143
+ DeftemplateModuleToCode(theEnv,moduleFile,theModule,imageID,maxIndices,moduleCount);
144
+ moduleFile = CloseFileIfNeeded(theEnv,moduleFile,&moduleArrayCount,&moduleArrayVersion,
145
+ maxIndices,NULL,NULL);
146
+
147
+ /*=======================================================*/
148
+ /* Loop through each of the deftemplates in this module. */
149
+ /*=======================================================*/
150
+
151
+ theTemplate = GetNextDeftemplate(theEnv,NULL);
152
+
153
+ while (theTemplate != NULL)
154
+ {
155
+ templateFile = OpenFileIfNeeded(theEnv,templateFile,fileName,pathName,fileNameBuffer,fileID,imageID,&fileCount,
156
+ templateArrayVersion,headerFP,
157
+ "Deftemplate",ConstructPrefix(DeftemplateData(theEnv)->DeftemplateCodeItem),
158
+ false,NULL);
159
+ if (templateFile == NULL)
160
+ {
161
+ CloseDeftemplateFiles(theEnv,moduleFile,templateFile,slotFile,maxIndices);
162
+ return false;
163
+ }
164
+
165
+ DeftemplateToCode(theEnv,templateFile,theTemplate,imageID,maxIndices,
166
+ moduleCount,slotCount);
167
+ templateArrayCount++;
168
+ templateFile = CloseFileIfNeeded(theEnv,templateFile,&templateArrayCount,&templateArrayVersion,
169
+ maxIndices,NULL,NULL);
170
+
171
+ /*======================================================*/
172
+ /* Loop through each of the slots for this deftemplate. */
173
+ /*======================================================*/
174
+
175
+ slotPtr = theTemplate->slotList;
176
+ while (slotPtr != NULL)
177
+ {
178
+ slotFile = OpenFileIfNeeded(theEnv,slotFile,fileName,pathName,fileNameBuffer,fileID,imageID,&fileCount,
179
+ slotArrayVersion,headerFP,
180
+ "struct templateSlot",SlotPrefix(),false,NULL);
181
+ if (slotFile == NULL)
182
+ {
183
+ CloseDeftemplateFiles(theEnv,moduleFile,templateFile,slotFile,maxIndices);
184
+ return false;
185
+ }
186
+
187
+ SlotToCode(theEnv,slotFile,slotPtr,imageID,maxIndices,slotCount);
188
+ slotCount++;
189
+ slotArrayCount++;
190
+ slotFile = CloseFileIfNeeded(theEnv,slotFile,&slotArrayCount,&slotArrayVersion,
191
+ maxIndices,NULL,NULL);
192
+ slotPtr = slotPtr->next;
193
+ }
194
+
195
+ theTemplate = GetNextDeftemplate(theEnv,theTemplate);
196
+ }
197
+
198
+ theModule = GetNextDefmodule(theEnv,theModule);
199
+ moduleCount++;
200
+ moduleArrayCount++;
201
+
202
+ }
203
+
204
+ CloseDeftemplateFiles(theEnv,moduleFile,templateFile,slotFile,maxIndices);
205
+
206
+ return true;
207
+ }
208
+
209
+ /************************************************************/
210
+ /* CloseDeftemplateFiles: Closes all of the C files created */
211
+ /* for deftemplates. Called when an error occurs or when */
212
+ /* the deftemplates have all been written to the files. */
213
+ /************************************************************/
214
+ static void CloseDeftemplateFiles(
215
+ Environment *theEnv,
216
+ FILE *moduleFile,
217
+ FILE *templateFile,
218
+ FILE *slotFile,
219
+ unsigned int maxIndices)
220
+ {
221
+ unsigned int count = maxIndices;
222
+ unsigned int arrayVersion = 0;
223
+
224
+ if (slotFile != NULL)
225
+ {
226
+ count = maxIndices;
227
+ CloseFileIfNeeded(theEnv,slotFile,&count,&arrayVersion,maxIndices,NULL,NULL);
228
+ }
229
+
230
+ if (templateFile != NULL)
231
+ {
232
+ count = maxIndices;
233
+ CloseFileIfNeeded(theEnv,templateFile,&count,&arrayVersion,maxIndices,NULL,NULL);
234
+ }
235
+
236
+ if (moduleFile != NULL)
237
+ {
238
+ count = maxIndices;
239
+ CloseFileIfNeeded(theEnv,moduleFile,&count,&arrayVersion,maxIndices,NULL,NULL);
240
+ }
241
+ }
242
+
243
+ /*************************************************************/
244
+ /* DeftemplateModuleToCode: Writes the C code representation */
245
+ /* of a single deftemplate module to the specified file. */
246
+ /*************************************************************/
247
+ static void DeftemplateModuleToCode(
248
+ Environment *theEnv,
249
+ FILE *theFile,
250
+ Defmodule *theModule,
251
+ unsigned int imageID,
252
+ unsigned int maxIndices,
253
+ unsigned int moduleCount)
254
+ {
255
+ #if MAC_XCD
256
+ #pragma unused(moduleCount)
257
+ #endif
258
+
259
+ fprintf(theFile,"{");
260
+
261
+ ConstructModuleToCode(theEnv,theFile,theModule,imageID,maxIndices,
262
+ DeftemplateData(theEnv)->DeftemplateModuleIndex,ConstructPrefix(DeftemplateData(theEnv)->DeftemplateCodeItem));
263
+
264
+ fprintf(theFile,"}");
265
+ }
266
+
267
+ /************************************************************/
268
+ /* DeftemplateToCode: Writes the C code representation of a */
269
+ /* single deftemplate construct to the specified file. */
270
+ /************************************************************/
271
+ static void DeftemplateToCode(
272
+ Environment *theEnv,
273
+ FILE *theFile,
274
+ Deftemplate *theTemplate,
275
+ unsigned int imageID,
276
+ unsigned int maxIndices,
277
+ unsigned int moduleCount,
278
+ unsigned int slotCount)
279
+ {
280
+ /*====================*/
281
+ /* Deftemplate Header */
282
+ /*====================*/
283
+
284
+ fprintf(theFile,"{");
285
+
286
+ ConstructHeaderToCode(theEnv,theFile,&theTemplate->header,imageID,maxIndices,
287
+ moduleCount,ModulePrefix(DeftemplateData(theEnv)->DeftemplateCodeItem),
288
+ ConstructPrefix(DeftemplateData(theEnv)->DeftemplateCodeItem));
289
+ fprintf(theFile,",");
290
+
291
+ /*===========*/
292
+ /* Slot List */
293
+ /*===========*/
294
+
295
+ if (theTemplate->slotList == NULL)
296
+ { fprintf(theFile,"NULL,"); }
297
+ else
298
+ {
299
+ fprintf(theFile,"&%s%d_%d[%d],",SlotPrefix(),
300
+ imageID,
301
+ (slotCount / maxIndices) + 1,
302
+ slotCount % maxIndices);
303
+ }
304
+
305
+ /*==========================================*/
306
+ /* Implied Flag, Watch Flag, In Scope Flag, */
307
+ /* Number of Slots, and Busy Count. */
308
+ /*==========================================*/
309
+
310
+ fprintf(theFile,"%d,0,0,%d,%ld,",theTemplate->implied,theTemplate->numberOfSlots,theTemplate->busyCount);
311
+
312
+ /*=================*/
313
+ /* Pattern Network */
314
+ /*=================*/
315
+
316
+ if (theTemplate->patternNetwork == NULL)
317
+ { fprintf(theFile,"NULL"); }
318
+ else
319
+ { FactPatternNodeReference(theEnv,theTemplate->patternNetwork,theFile,imageID,maxIndices); }
320
+
321
+ /*============================================*/
322
+ /* Print the factList and lastFact references */
323
+ /* and close the structure. */
324
+ /*============================================*/
325
+
326
+ fprintf(theFile,",NULL,NULL}");
327
+ }
328
+
329
+ /*****************************************************/
330
+ /* SlotToCode: Writes the C code representation of a */
331
+ /* single deftemplate slot to the specified file. */
332
+ /*****************************************************/
333
+ static void SlotToCode(
334
+ Environment *theEnv,
335
+ FILE *theFile,
336
+ struct templateSlot *theSlot,
337
+ unsigned int imageID,
338
+ unsigned int maxIndices,
339
+ unsigned int slotCount)
340
+ {
341
+ /*===========*/
342
+ /* Slot Name */
343
+ /*===========*/
344
+
345
+ fprintf(theFile,"{");
346
+ PrintSymbolReference(theEnv,theFile,theSlot->slotName);
347
+
348
+ /*=============================*/
349
+ /* Multislot and Default Flags */
350
+ /*=============================*/
351
+
352
+ fprintf(theFile,",%d,%d,%d,%d,",theSlot->multislot,theSlot->noDefault,
353
+ theSlot->defaultPresent,theSlot->defaultDynamic);
354
+
355
+ /*=============*/
356
+ /* Constraints */
357
+ /*=============*/
358
+
359
+ PrintConstraintReference(theEnv,theFile,theSlot->constraints,imageID,maxIndices);
360
+
361
+ /*===============*/
362
+ /* Default Value */
363
+ /*===============*/
364
+
365
+ fprintf(theFile,",");
366
+ PrintHashedExpressionReference(theEnv,theFile,theSlot->defaultList,imageID,maxIndices);
367
+
368
+ /*============*/
369
+ /* Facet List */
370
+ /*============*/
371
+
372
+ fprintf(theFile,",");
373
+ PrintHashedExpressionReference(theEnv,theFile,theSlot->facetList,imageID,maxIndices);
374
+ fprintf(theFile,",");
375
+
376
+ /*===========*/
377
+ /* Next Slot */
378
+ /*===========*/
379
+
380
+ if (theSlot->next == NULL)
381
+ { fprintf(theFile,"NULL}"); }
382
+ else
383
+ {
384
+ fprintf(theFile,"&%s%d_%d[%d]}",SlotPrefix(),imageID,
385
+ ((slotCount+1) / maxIndices) + 1,
386
+ (slotCount+1) % maxIndices);
387
+ }
388
+ }
389
+
390
+ /*****************************************************************/
391
+ /* DeftemplateCModuleReference: Writes the C code representation */
392
+ /* of a reference to a deftemplate module data structure. */
393
+ /*****************************************************************/
394
+ void DeftemplateCModuleReference(
395
+ Environment *theEnv,
396
+ FILE *theFile,
397
+ unsigned long count,
398
+ unsigned int imageID,
399
+ unsigned int maxIndices)
400
+ {
401
+ fprintf(theFile,"MIHS &%s%u_%lu[%lu]",ModulePrefix(DeftemplateData(theEnv)->DeftemplateCodeItem),
402
+ imageID,
403
+ (count / maxIndices) + 1,
404
+ (count % maxIndices));
405
+ }
406
+
407
+ /********************************************************************/
408
+ /* DeftemplateCConstructReference: Writes the C code representation */
409
+ /* of a reference to a deftemplate data structure. */
410
+ /********************************************************************/
411
+ void DeftemplateCConstructReference(
412
+ Environment *theEnv,
413
+ FILE *theFile,
414
+ Deftemplate *theDeftemplate,
415
+ unsigned int imageID,
416
+ unsigned int maxIndices)
417
+ {
418
+ if (theDeftemplate == NULL)
419
+ { fprintf(theFile,"NULL"); }
420
+ else
421
+ {
422
+ fprintf(theFile,"&%s%u_%lu[%lu]",ConstructPrefix(DeftemplateData(theEnv)->DeftemplateCodeItem),
423
+ imageID,
424
+ (theDeftemplate->header.bsaveID / maxIndices) + 1,
425
+ theDeftemplate->header.bsaveID % maxIndices);
426
+ }
427
+
428
+ }
429
+
430
+ /*******************************************/
431
+ /* InitDeftemplateCode: Writes out runtime */
432
+ /* initialization code for deftemplates. */
433
+ /*******************************************/
434
+ static void InitDeftemplateCode(
435
+ Environment *theEnv,
436
+ FILE *initFP,
437
+ unsigned int imageID,
438
+ unsigned int maxIndices)
439
+ {
440
+ #if MAC_XCD
441
+ #pragma unused(theEnv)
442
+ #pragma unused(imageID)
443
+ #pragma unused(maxIndices)
444
+ #endif
445
+
446
+ fprintf(initFP," DeftemplateRunTimeInitialize(theEnv);\n");
447
+ }
448
+
449
+ #endif /* DEFTEMPLATE_CONSTRUCT && CONSTRUCT_COMPILER && (! RUN_TIME) */
450
+
@@ -0,0 +1,57 @@
1
+ /*******************************************************/
2
+ /* "C" Language Integrated Production System */
3
+ /* */
4
+ /* CLIPS Version 6.40 07/30/16 */
5
+ /* */
6
+ /* DEFTEMPLATE CONSTRUCT COMPILER HEADER FILE */
7
+ /*******************************************************/
8
+
9
+ /*************************************************************/
10
+ /* Purpose: */
11
+ /* */
12
+ /* Principal Programmer(s): */
13
+ /* Gary D. Riley */
14
+ /* */
15
+ /* Contributing Programmer(s): */
16
+ /* */
17
+ /* Revision History: */
18
+ /* */
19
+ /* 6.23: Added support for templates maintaining their */
20
+ /* own list of facts. */
21
+ /* */
22
+ /* 6.30: Added support for path name argument to */
23
+ /* constructs-to-c. */
24
+ /* */
25
+ /* Removed conditional code for unsupported */
26
+ /* compilers/operating systems (IBM_MCW, */
27
+ /* MAC_MCW, and IBM_TBC). */
28
+ /* */
29
+ /* Support for deftemplate slot facets. */
30
+ /* */
31
+ /* Added code for deftemplate run time */
32
+ /* initialization of hashed comparisons to */
33
+ /* constants. */
34
+ /* */
35
+ /* Added const qualifiers to remove C++ */
36
+ /* deprecation warnings. */
37
+ /* */
38
+ /* 6.40: Removed LOCALE definition. */
39
+ /* */
40
+ /* Pragma once and other inclusion changes. */
41
+ /* */
42
+ /*************************************************************/
43
+
44
+ #ifndef _H_tmpltcmp
45
+
46
+ #pragma once
47
+
48
+ #define _H_tmpltcmp
49
+
50
+ #include "tmpltdef.h"
51
+
52
+ void DeftemplateCompilerSetup(Environment *);
53
+ void DeftemplateCModuleReference(Environment *,FILE *,unsigned long,unsigned int,unsigned int);
54
+ void DeftemplateCConstructReference(Environment *,FILE *,Deftemplate *,
55
+ unsigned int,unsigned int);
56
+
57
+ #endif /* _H_tmpltcmp */