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,378 @@
1
+ /*******************************************************/
2
+ /* "C" Language Integrated Production System */
3
+ /* */
4
+ /* CLIPS Version 6.40 07/30/16 */
5
+ /* */
6
+ /* */
7
+ /*******************************************************/
8
+
9
+ /*************************************************************/
10
+ /* Purpose: Generic Function Construct Compiler Code */
11
+ /* */
12
+ /* Principal Programmer(s): */
13
+ /* Brian L. Dantes */
14
+ /* */
15
+ /* Contributing Programmer(s): */
16
+ /* */
17
+ /* Revision History: */
18
+ /* */
19
+ /* 6.30: Added support for path name argument to */
20
+ /* constructs-to-c. */
21
+ /* */
22
+ /* Added const qualifiers to remove C++ */
23
+ /* deprecation warnings. */
24
+ /* */
25
+ /* 6.40: Pragma once and other inclusion changes. */
26
+ /* */
27
+ /* Added support for booleans with <stdbool.h>. */
28
+ /* */
29
+ /* Removed use of void pointers for specific */
30
+ /* data structures. */
31
+ /* */
32
+ /*************************************************************/
33
+
34
+ /* =========================================
35
+ *****************************************
36
+ EXTERNAL DEFINITIONS
37
+ =========================================
38
+ ***************************************** */
39
+ #include "setup.h"
40
+
41
+ #if DEFFUNCTION_CONSTRUCT && CONSTRUCT_COMPILER && (! RUN_TIME)
42
+
43
+ #include "conscomp.h"
44
+ #include "envrnmnt.h"
45
+
46
+ #include "dffnxcmp.h"
47
+
48
+ /***************************************/
49
+ /* LOCAL INTERNAL FUNCTION DEFINITIONS */
50
+ /***************************************/
51
+
52
+ static void ReadyDeffunctionsForCode(Environment *);
53
+ static bool DeffunctionsToCode(Environment *,const char *,const char *,char *,
54
+ unsigned int,FILE *,unsigned int,unsigned int);
55
+ static void CloseDeffunctionFiles(Environment *,FILE *,FILE *,unsigned int);
56
+ static void DeffunctionModuleToCode(Environment *,FILE *,Defmodule *,unsigned int,unsigned int);
57
+ static void SingleDeffunctionToCode(Environment *,FILE *,Deffunction *,
58
+ unsigned int,unsigned int,unsigned int);
59
+ static void InitDeffunctionCode(Environment *,FILE *,unsigned int,unsigned int);
60
+
61
+ /* =========================================
62
+ *****************************************
63
+ EXTERNALLY VISIBLE FUNCTIONS
64
+ =========================================
65
+ ***************************************** */
66
+
67
+ /***************************************************
68
+ NAME : SetupDeffunctionCompiler
69
+ DESCRIPTION : Initializes the construct compiler
70
+ item for deffunctions
71
+ INPUTS : None
72
+ RETURNS : Nothing useful
73
+ SIDE EFFECTS : Code generator item initialized
74
+ NOTES : None
75
+ ***************************************************/
76
+ void SetupDeffunctionCompiler(
77
+ Environment *theEnv)
78
+ {
79
+ DeffunctionData(theEnv)->DeffunctionCodeItem = AddCodeGeneratorItem(theEnv,"deffunctions",0,ReadyDeffunctionsForCode,
80
+ InitDeffunctionCode,DeffunctionsToCode,2);
81
+ }
82
+
83
+
84
+ /***************************************************
85
+ NAME : PrintDeffunctionReference
86
+ DESCRIPTION : Prints a reference to the run-time
87
+ deffunction array for the construct
88
+ compiler
89
+ INPUTS : 1) The file output destination
90
+ 2) A pointer to the deffunction
91
+ 3) The id of the run-time image
92
+ 4) The maximum number of indices
93
+ in any array
94
+ RETURNS : Nothing useful
95
+ SIDE EFFECTS : Reference printed
96
+ NOTES : None
97
+ ***************************************************/
98
+ void PrintDeffunctionReference(
99
+ Environment *theEnv,
100
+ FILE *fp,
101
+ Deffunction *dfPtr,
102
+ unsigned imageID,
103
+ unsigned maxIndices)
104
+ {
105
+ if (dfPtr == NULL)
106
+ fprintf(fp,"NULL");
107
+ else
108
+ fprintf(fp,"&%s%d_%lu[%lu]",ConstructPrefix(DeffunctionData(theEnv)->DeffunctionCodeItem),imageID,
109
+ ((dfPtr->header.bsaveID / maxIndices) + 1),
110
+ (dfPtr->header.bsaveID % maxIndices));
111
+ }
112
+
113
+ /****************************************************
114
+ NAME : DeffunctionCModuleReference
115
+ DESCRIPTION : Prints out a reference to a
116
+ deffunction module
117
+ INPUTS : 1) The output file
118
+ 2) The id of the module item
119
+ 3) The id of the image
120
+ 4) The maximum number of elements
121
+ allowed in an array
122
+ RETURNS : Nothing useful
123
+ SIDE EFFECTS : Deffunction module reference printed
124
+ NOTES : None
125
+ ****************************************************/
126
+ void DeffunctionCModuleReference(
127
+ Environment *theEnv,
128
+ FILE *theFile,
129
+ unsigned long count,
130
+ unsigned int imageID,
131
+ unsigned int maxIndices)
132
+ {
133
+ fprintf(theFile,"MIHS &%s%u_%lu[%lu]",
134
+ ModulePrefix(DeffunctionData(theEnv)->DeffunctionCodeItem),
135
+ imageID,
136
+ (count / maxIndices) + 1,
137
+ (count % maxIndices));
138
+ }
139
+
140
+ /* =========================================
141
+ *****************************************
142
+ INTERNALLY VISIBLE FUNCTIONS
143
+ =========================================
144
+ ***************************************** */
145
+
146
+ /***************************************************
147
+ NAME : ReadyDeffunctionsForCode
148
+ DESCRIPTION : Sets index of deffunctions
149
+ for use in compiled expressions
150
+ INPUTS : None
151
+ RETURNS : Nothing useful
152
+ SIDE EFFECTS : BsaveIndices set
153
+ NOTES : None
154
+ ***************************************************/
155
+ static void ReadyDeffunctionsForCode(
156
+ Environment *theEnv)
157
+ {
158
+ MarkConstructBsaveIDs(theEnv,DeffunctionData(theEnv)->DeffunctionModuleIndex);
159
+ }
160
+
161
+ /**************************************************/
162
+ /* InitDeffunctionCode: Writes out initialization */
163
+ /* code for deffunction for a run-time module. */
164
+ /**************************************************/
165
+ static void InitDeffunctionCode(
166
+ Environment *theEnv,
167
+ FILE *initFP,
168
+ unsigned int imageID,
169
+ unsigned int maxIndices)
170
+ {
171
+ #if MAC_XCD
172
+ #pragma unused(maxIndices)
173
+ #pragma unused(imageID)
174
+ #pragma unused(theEnv)
175
+ #endif
176
+ fprintf(initFP," DeffunctionRunTimeInitialize(theEnv);\n");
177
+ }
178
+
179
+ /*******************************************************
180
+ NAME : DeffunctionsToCode
181
+ DESCRIPTION : Writes out static array code for
182
+ deffunctions
183
+ INPUTS : 1) The base name of the construct set
184
+ 2) The base id for this construct
185
+ 3) The file pointer for the header file
186
+ 4) The base id for the construct set
187
+ 5) The max number of indices allowed
188
+ in an array
189
+ RETURNS : False on errors,
190
+ True if deffunctions written
191
+ SIDE EFFECTS : Code written to files
192
+ NOTES : None
193
+ *******************************************************/
194
+ static bool DeffunctionsToCode(
195
+ Environment *theEnv,
196
+ const char *fileName,
197
+ const char *pathName,
198
+ char *fileNameBuffer,
199
+ unsigned int fileID,
200
+ FILE *headerFP,
201
+ unsigned int imageID,
202
+ unsigned int maxIndices)
203
+ {
204
+ unsigned int fileCount = 1;
205
+ Defmodule *theModule;
206
+ Deffunction *theDeffunction;
207
+ unsigned int moduleCount = 0, moduleArrayCount = 0, moduleArrayVersion = 1;
208
+ unsigned int deffunctionArrayCount = 0, deffunctionArrayVersion = 1;
209
+ FILE *moduleFile = NULL, *deffunctionFile = NULL;
210
+
211
+ /* ===============================================
212
+ Include the appropriate deffunction header file
213
+ =============================================== */
214
+ fprintf(headerFP,"#include \"dffnxfun.h\"\n");
215
+
216
+ /* =============================================================
217
+ Loop through all the modules and all the deffunctions writing
218
+ their C code representation to the file as they are traversed
219
+ ============================================================= */
220
+ theModule = GetNextDefmodule(theEnv,NULL);
221
+
222
+ while (theModule != NULL)
223
+ {
224
+ SetCurrentModule(theEnv,theModule);
225
+
226
+ moduleFile = OpenFileIfNeeded(theEnv,moduleFile,fileName,pathName,fileNameBuffer,fileID,imageID,&fileCount,
227
+ moduleArrayVersion,headerFP,
228
+ "DeffunctionModuleData",ModulePrefix(DeffunctionData(theEnv)->DeffunctionCodeItem),
229
+ false,NULL);
230
+
231
+ if (moduleFile == NULL)
232
+ {
233
+ CloseDeffunctionFiles(theEnv,moduleFile,deffunctionFile,maxIndices);
234
+ return false;
235
+ }
236
+
237
+ DeffunctionModuleToCode(theEnv,moduleFile,theModule,imageID,maxIndices);
238
+ moduleFile = CloseFileIfNeeded(theEnv,moduleFile,&moduleArrayCount,&moduleArrayVersion,
239
+ maxIndices,NULL,NULL);
240
+
241
+ theDeffunction = GetNextDeffunction(theEnv,NULL);
242
+
243
+ while (theDeffunction != NULL)
244
+ {
245
+ deffunctionFile = OpenFileIfNeeded(theEnv,deffunctionFile,fileName,pathName,fileNameBuffer,fileID,imageID,&fileCount,
246
+ deffunctionArrayVersion,headerFP,
247
+ "Deffunction",ConstructPrefix(DeffunctionData(theEnv)->DeffunctionCodeItem),
248
+ false,NULL);
249
+ if (deffunctionFile == NULL)
250
+ {
251
+ CloseDeffunctionFiles(theEnv,moduleFile,deffunctionFile,maxIndices);
252
+ return false;
253
+ }
254
+
255
+ SingleDeffunctionToCode(theEnv,deffunctionFile,theDeffunction,imageID,
256
+ maxIndices,moduleCount);
257
+ deffunctionArrayCount++;
258
+ deffunctionFile = CloseFileIfNeeded(theEnv,deffunctionFile,&deffunctionArrayCount,
259
+ &deffunctionArrayVersion,maxIndices,NULL,NULL);
260
+
261
+ theDeffunction = GetNextDeffunction(theEnv,theDeffunction);
262
+ }
263
+
264
+ theModule = GetNextDefmodule(theEnv,theModule);
265
+ moduleCount++;
266
+ moduleArrayCount++;
267
+ }
268
+
269
+ CloseDeffunctionFiles(theEnv,moduleFile,deffunctionFile,maxIndices);
270
+
271
+ return true;
272
+ }
273
+
274
+ /***************************************************
275
+ NAME : CloseDeffunctionFiles
276
+ DESCRIPTION : Closes construct compiler files
277
+ for deffunction structures
278
+ INPUTS : 1) The deffunction module file
279
+ 2) The deffunction structure file
280
+ 3) The maximum number of indices
281
+ allowed in an array
282
+ RETURNS : Nothing useful
283
+ SIDE EFFECTS : Files closed
284
+ NOTES : None
285
+ ***************************************************/
286
+ static void CloseDeffunctionFiles(
287
+ Environment *theEnv,
288
+ FILE *moduleFile,
289
+ FILE *deffunctionFile,
290
+ unsigned int maxIndices)
291
+ {
292
+ unsigned int count = maxIndices;
293
+ unsigned int arrayVersion = 0;
294
+
295
+ if (deffunctionFile != NULL)
296
+ {
297
+ count = maxIndices;
298
+ CloseFileIfNeeded(theEnv,deffunctionFile,&count,&arrayVersion,maxIndices,NULL,NULL);
299
+ }
300
+
301
+ if (moduleFile != NULL)
302
+ {
303
+ count = maxIndices;
304
+ CloseFileIfNeeded(theEnv,moduleFile,&count,&arrayVersion,maxIndices,NULL,NULL);
305
+ }
306
+ }
307
+
308
+ /***************************************************
309
+ NAME : DeffunctionModuleToCode
310
+ DESCRIPTION : Writes out the C values for a
311
+ deffunction module item
312
+ INPUTS : 1) The output file
313
+ 2) The module for the deffunctions
314
+ 3) The compile image id
315
+ 4) The maximum number of elements
316
+ in an array
317
+ RETURNS : Nothing useful
318
+ SIDE EFFECTS : Deffunction module item written
319
+ NOTES : None
320
+ ***************************************************/
321
+ static void DeffunctionModuleToCode(
322
+ Environment *theEnv,
323
+ FILE *theFile,
324
+ Defmodule *theModule,
325
+ unsigned int imageID,
326
+ unsigned int maxIndices)
327
+ {
328
+ fprintf(theFile,"{");
329
+ ConstructModuleToCode(theEnv,theFile,theModule,imageID,maxIndices,
330
+ DeffunctionData(theEnv)->DeffunctionModuleIndex,ConstructPrefix(DeffunctionData(theEnv)->DeffunctionCodeItem));
331
+ fprintf(theFile,"}");
332
+ }
333
+
334
+ /***************************************************
335
+ NAME : SingleDeffunctionToCode
336
+ DESCRIPTION : Writes out a single deffunction's
337
+ data to the file
338
+ INPUTS : 1) The output file
339
+ 2) The deffunction
340
+ 3) The compile image id
341
+ 4) The maximum number of
342
+ elements in an array
343
+ 5) The module index
344
+ RETURNS : Nothing useful
345
+ SIDE EFFECTS : Deffunction data written
346
+ NOTES : None
347
+ ***************************************************/
348
+ static void SingleDeffunctionToCode(
349
+ Environment *theEnv,
350
+ FILE *theFile,
351
+ Deffunction *theDeffunction,
352
+ unsigned int imageID,
353
+ unsigned int maxIndices,
354
+ unsigned int moduleCount)
355
+ {
356
+ /* ==================
357
+ Deffunction Header
358
+ ================== */
359
+
360
+ fprintf(theFile,"{");
361
+ ConstructHeaderToCode(theEnv,theFile,&theDeffunction->header,imageID,maxIndices,moduleCount,
362
+ ModulePrefix(DeffunctionData(theEnv)->DeffunctionCodeItem),
363
+ ConstructPrefix(DeffunctionData(theEnv)->DeffunctionCodeItem));
364
+
365
+ /* =========================
366
+ Deffunction specific data
367
+ ========================= */
368
+ fprintf(theFile,",0,0,0,");
369
+ ExpressionToCode(theEnv,theFile,theDeffunction->code);
370
+ fprintf(theFile,",%d,%d,%d",
371
+ theDeffunction->minNumberOfParameters,
372
+ theDeffunction->maxNumberOfParameters,
373
+ theDeffunction->numberOfLocalVars);
374
+
375
+ fprintf(theFile,"}");
376
+ }
377
+
378
+ #endif
@@ -0,0 +1,54 @@
1
+ /*******************************************************/
2
+ /* "C" Language Integrated Production System */
3
+ /* */
4
+ /* CLIPS Version 6.40 07/30/16 */
5
+ /* */
6
+ /* */
7
+ /*******************************************************/
8
+
9
+ /*************************************************************/
10
+ /* Purpose: Deffunction Construct Compiler Code */
11
+ /* */
12
+ /* Principal Programmer(s): */
13
+ /* Brian L. Dantes */
14
+ /* */
15
+ /* Contributing Programmer(s): */
16
+ /* */
17
+ /* Revision History: */
18
+ /* */
19
+ /* 6.30: Added support for path name argument to */
20
+ /* constructs-to-c. */
21
+ /* */
22
+ /* Added const qualifiers to remove C++ */
23
+ /* deprecation warnings. */
24
+ /* */
25
+ /* 6.40: Removed LOCALE definition. */
26
+ /* */
27
+ /* Pragma once and other inclusion changes. */
28
+ /* */
29
+ /* Removed use of void pointers for specific */
30
+ /* data structures. */
31
+ /* */
32
+ /*************************************************************/
33
+
34
+ #ifndef _H_dffnxcmp
35
+
36
+ #pragma once
37
+
38
+ #define _H_dffnxcmp
39
+
40
+ #if DEFFUNCTION_CONSTRUCT && CONSTRUCT_COMPILER && (! RUN_TIME)
41
+
42
+ #include <stdio.h>
43
+
44
+ #include "dffnxfun.h"
45
+
46
+ void SetupDeffunctionCompiler(Environment *);
47
+ void PrintDeffunctionReference(Environment *,FILE *,Deffunction *,unsigned,unsigned);
48
+ void DeffunctionCModuleReference(Environment *,FILE *,unsigned long,unsigned int,unsigned int);
49
+
50
+ #endif /* DEFFUNCTION_CONSTRUCT && CONSTRUCT_COMPILER && (! RUN_TIME) */
51
+
52
+ #endif /* _H_dffnxcmp */
53
+
54
+
@@ -0,0 +1,241 @@
1
+ /*******************************************************/
2
+ /* "C" Language Integrated Production System */
3
+ /* */
4
+ /* CLIPS Version 6.40 10/01/16 */
5
+ /* */
6
+ /* */
7
+ /*******************************************************/
8
+
9
+ /*************************************************************/
10
+ /* Purpose: Deffunction Execution Routines */
11
+ /* */
12
+ /* Principal Programmer(s): */
13
+ /* Brian L. Dantes */
14
+ /* */
15
+ /* Contributing Programmer(s): */
16
+ /* */
17
+ /* Revision History: */
18
+ /* */
19
+ /* 6.23: Correction for FalseSymbol/TrueSymbol. DR0859 */
20
+ /* */
21
+ /* 6.30: Changed garbage collection algorithm. */
22
+ /* */
23
+ /* Changed integer type/precision. */
24
+ /* */
25
+ /* Added const qualifiers to remove C++ */
26
+ /* deprecation warnings. */
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
+ /* UDF redesign. */
36
+ /* */
37
+ /* Added GCBlockStart and GCBlockEnd functions */
38
+ /* for garbage collection blocks. */
39
+ /* */
40
+ /*************************************************************/
41
+
42
+ /* =========================================
43
+ *****************************************
44
+ EXTERNAL DEFINITIONS
45
+ =========================================
46
+ ***************************************** */
47
+ #include "setup.h"
48
+
49
+ #if DEFFUNCTION_CONSTRUCT
50
+
51
+ #include <stdio.h>
52
+ #include <string.h>
53
+
54
+ #include "constrct.h"
55
+ #include "envrnmnt.h"
56
+ #include "prcdrfun.h"
57
+ #include "prccode.h"
58
+ #include "prntutil.h"
59
+ #include "proflfun.h"
60
+ #include "router.h"
61
+ #include "utility.h"
62
+ #include "watch.h"
63
+
64
+ #include "dffnxexe.h"
65
+
66
+ /* =========================================
67
+ *****************************************
68
+ CONSTANTS
69
+ =========================================
70
+ ***************************************** */
71
+ #define BEGIN_TRACE ">> "
72
+ #define END_TRACE "<< "
73
+
74
+ /* =========================================
75
+ *****************************************
76
+ INTERNALLY VISIBLE FUNCTION HEADERS
77
+ =========================================
78
+ ***************************************** */
79
+
80
+ static void UnboundDeffunctionErr(Environment *,const char *);
81
+
82
+ #if DEBUGGING_FUNCTIONS
83
+ static void WatchDeffunction(Environment *,const char *);
84
+ #endif
85
+
86
+ /* =========================================
87
+ *****************************************
88
+ EXTERNALLY VISIBLE FUNCTIONS
89
+ =========================================
90
+ ***************************************** */
91
+
92
+ /****************************************************
93
+ NAME : CallDeffunction
94
+ DESCRIPTION : Executes the body of a deffunction
95
+ INPUTS : 1) The deffunction
96
+ 2) Argument expressions
97
+ 3) Data object buffer to hold result
98
+ RETURNS : Nothing useful
99
+ SIDE EFFECTS : Deffunction executed and result
100
+ stored in data object buffer
101
+ NOTES : Used in EvaluateExpression(theEnv,)
102
+ ****************************************************/
103
+ void CallDeffunction(
104
+ Environment *theEnv,
105
+ Deffunction *dptr,
106
+ Expression *args,
107
+ UDFValue *returnValue)
108
+ {
109
+ bool oldce;
110
+ Deffunction *previouslyExecutingDeffunction;
111
+ GCBlock gcb;
112
+ #if PROFILING_FUNCTIONS
113
+ struct profileFrameInfo profileFrame;
114
+ #endif
115
+
116
+ returnValue->value = FalseSymbol(theEnv);
117
+ EvaluationData(theEnv)->EvaluationError = false;
118
+ if (EvaluationData(theEnv)->HaltExecution)
119
+ return;
120
+
121
+ GCBlockStart(theEnv,&gcb);
122
+
123
+ oldce = ExecutingConstruct(theEnv);
124
+ SetExecutingConstruct(theEnv,true);
125
+ previouslyExecutingDeffunction = DeffunctionData(theEnv)->ExecutingDeffunction;
126
+ DeffunctionData(theEnv)->ExecutingDeffunction = dptr;
127
+ EvaluationData(theEnv)->CurrentEvaluationDepth++;
128
+ dptr->executing++;
129
+ PushProcParameters(theEnv,args,CountArguments(args),DeffunctionName(dptr),
130
+ "deffunction",UnboundDeffunctionErr);
131
+ if (EvaluationData(theEnv)->EvaluationError)
132
+ {
133
+ dptr->executing--;
134
+ DeffunctionData(theEnv)->ExecutingDeffunction = previouslyExecutingDeffunction;
135
+ EvaluationData(theEnv)->CurrentEvaluationDepth--;
136
+
137
+ GCBlockEndUDF(theEnv,&gcb,returnValue);
138
+ CallPeriodicTasks(theEnv);
139
+
140
+ SetExecutingConstruct(theEnv,oldce);
141
+ return;
142
+ }
143
+
144
+ #if DEBUGGING_FUNCTIONS
145
+ if (dptr->trace)
146
+ WatchDeffunction(theEnv,BEGIN_TRACE);
147
+ #endif
148
+
149
+ #if PROFILING_FUNCTIONS
150
+ StartProfile(theEnv,&profileFrame,
151
+ &dptr->header.usrData,
152
+ ProfileFunctionData(theEnv)->ProfileConstructs);
153
+ #endif
154
+
155
+ EvaluateProcActions(theEnv,dptr->header.whichModule->theModule,
156
+ dptr->code,dptr->numberOfLocalVars,
157
+ returnValue,UnboundDeffunctionErr);
158
+
159
+ #if PROFILING_FUNCTIONS
160
+ EndProfile(theEnv,&profileFrame);
161
+ #endif
162
+
163
+ #if DEBUGGING_FUNCTIONS
164
+ if (dptr->trace)
165
+ WatchDeffunction(theEnv,END_TRACE);
166
+ #endif
167
+ ProcedureFunctionData(theEnv)->ReturnFlag = false;
168
+
169
+ dptr->executing--;
170
+ PopProcParameters(theEnv);
171
+ DeffunctionData(theEnv)->ExecutingDeffunction = previouslyExecutingDeffunction;
172
+ EvaluationData(theEnv)->CurrentEvaluationDepth--;
173
+
174
+ GCBlockEndUDF(theEnv,&gcb,returnValue);
175
+ CallPeriodicTasks(theEnv);
176
+
177
+ SetExecutingConstruct(theEnv,oldce);
178
+ }
179
+
180
+ /* =========================================
181
+ *****************************************
182
+ INTERNALLY VISIBLE FUNCTIONS
183
+ =========================================
184
+ ***************************************** */
185
+
186
+ /*******************************************************
187
+ NAME : UnboundDeffunctionErr
188
+ DESCRIPTION : Print out a synopis of the currently
189
+ executing deffunction for unbound
190
+ variable errors
191
+ INPUTS : None
192
+ RETURNS : Nothing useful
193
+ SIDE EFFECTS : Error synopsis printed to STDERR
194
+ NOTES : None
195
+ *******************************************************/
196
+ static void UnboundDeffunctionErr(
197
+ Environment *theEnv,
198
+ const char *logName)
199
+ {
200
+ WriteString(theEnv,logName,"deffunction '");
201
+ WriteString(theEnv,logName,DeffunctionName(DeffunctionData(theEnv)->ExecutingDeffunction));
202
+ WriteString(theEnv,logName,"'.\n");
203
+ }
204
+
205
+ #if DEBUGGING_FUNCTIONS
206
+
207
+ /***************************************************
208
+ NAME : WatchDeffunction
209
+ DESCRIPTION : Displays a message indicating when
210
+ a deffunction began and ended
211
+ execution
212
+ INPUTS : The beginning or end trace string
213
+ to print when deffunction starts
214
+ or finishes respectively
215
+ RETURNS : Nothing useful
216
+ SIDE EFFECTS : Watch message printed
217
+ NOTES : None
218
+ ***************************************************/
219
+ static void WatchDeffunction(
220
+ Environment *theEnv,
221
+ const char *tstring)
222
+ {
223
+ if (ConstructData(theEnv)->ClearReadyInProgress ||
224
+ ConstructData(theEnv)->ClearInProgress)
225
+ { return; }
226
+
227
+ WriteString(theEnv,STDOUT,"DFN ");
228
+ WriteString(theEnv,STDOUT,tstring);
229
+ if (DeffunctionData(theEnv)->ExecutingDeffunction->header.whichModule->theModule != GetCurrentModule(theEnv))
230
+ {
231
+ WriteString(theEnv,STDOUT,DeffunctionModule(DeffunctionData(theEnv)->ExecutingDeffunction));;
232
+ WriteString(theEnv,STDOUT,"::");
233
+ }
234
+ WriteString(theEnv,STDOUT,DeffunctionData(theEnv)->ExecutingDeffunction->header.name->contents);
235
+ WriteString(theEnv,STDOUT," ED:");
236
+ WriteInteger(theEnv,STDOUT,EvaluationData(theEnv)->CurrentEvaluationDepth);
237
+ PrintProcParamArray(theEnv,STDOUT);
238
+ }
239
+
240
+ #endif
241
+ #endif