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,155 @@
1
+ /*******************************************************/
2
+ /* "C" Language Integrated Production System */
3
+ /* */
4
+ /* CLIPS Version 6.40 11/01/16 */
5
+ /* */
6
+ /* DEFFUNCTION HEADER FILE */
7
+ /*******************************************************/
8
+
9
+ /*************************************************************/
10
+ /* Purpose: */
11
+ /* */
12
+ /* Principal Programmer(s): */
13
+ /* Brian L. Dantes */
14
+ /* Gary D. Riley */
15
+ /* */
16
+ /* Contributing Programmer(s): */
17
+ /* */
18
+ /* Revision History: */
19
+ /* */
20
+ /* 6.23: Correction for FalseSymbol/TrueSymbol. DR0859 */
21
+ /* */
22
+ /* Corrected compilation errors for files */
23
+ /* generated by constructs-to-c. DR0861 */
24
+ /* */
25
+ /* Changed name of variable log to logName */
26
+ /* because of Unix compiler warnings of shadowed */
27
+ /* definitions. */
28
+ /* */
29
+ /* 6.24: Renamed BOOLEAN macro type to intBool. */
30
+ /* */
31
+ /* Corrected code to remove run-time program */
32
+ /* compiler warning. */
33
+ /* */
34
+ /* 6.30: Removed conditional code for unsupported */
35
+ /* compilers/operating systems (IBM_MCW, */
36
+ /* MAC_MCW, and IBM_TBC). */
37
+ /* */
38
+ /* Changed integer type/precision. */
39
+ /* */
40
+ /* Added missing initializer for ENTITY_RECORD. */
41
+ /* */
42
+ /* Added const qualifiers to remove C++ */
43
+ /* deprecation warnings. */
44
+ /* */
45
+ /* Converted API macros to function calls. */
46
+ /* */
47
+ /* Changed find construct functionality so that */
48
+ /* imported modules are search when locating a */
49
+ /* named construct. */
50
+ /* */
51
+ /* 6.40: Removed LOCALE definition. */
52
+ /* */
53
+ /* Pragma once and other inclusion changes. */
54
+ /* */
55
+ /* Added support for booleans with <stdbool.h>. */
56
+ /* */
57
+ /* Removed use of void pointers for specific */
58
+ /* data structures. */
59
+ /* */
60
+ /* ALLOW_ENVIRONMENT_GLOBALS no longer supported. */
61
+ /* */
62
+ /* UDF redesign. */
63
+ /* */
64
+ /*************************************************************/
65
+
66
+ #ifndef _H_dffnxfun
67
+
68
+ #pragma once
69
+
70
+ #define _H_dffnxfun
71
+
72
+ typedef struct deffunction Deffunction;
73
+ typedef struct deffunctionModuleData DeffunctionModuleData;
74
+
75
+ #include "entities.h"
76
+ #include "moduldef.h"
77
+ #include "constrct.h"
78
+ #include "evaluatn.h"
79
+
80
+ struct deffunctionModuleData
81
+ {
82
+ struct defmoduleItemHeader header;
83
+ };
84
+
85
+ struct deffunction
86
+ {
87
+ ConstructHeader header;
88
+ unsigned busy;
89
+ unsigned executing;
90
+ bool trace;
91
+ Expression *code;
92
+ unsigned short minNumberOfParameters;
93
+ unsigned short maxNumberOfParameters;
94
+ unsigned short numberOfLocalVars;
95
+ };
96
+
97
+ #define DEFFUNCTION_DATA 23
98
+
99
+ struct deffunctionData
100
+ {
101
+ Construct *DeffunctionConstruct;
102
+ unsigned DeffunctionModuleIndex;
103
+ EntityRecord DeffunctionEntityRecord;
104
+ #if DEBUGGING_FUNCTIONS
105
+ bool WatchDeffunctions;
106
+ #endif
107
+ struct CodeGeneratorItem *DeffunctionCodeItem;
108
+ Deffunction *ExecutingDeffunction;
109
+ };
110
+
111
+ #define DeffunctionData(theEnv) ((struct deffunctionData *) GetEnvironmentData(theEnv,DEFFUNCTION_DATA))
112
+
113
+ bool CheckDeffunctionCall(Environment *,Deffunction *,int);
114
+ void DeffunctionGetBind(UDFValue *);
115
+ void DFRtnUnknown(UDFValue *);
116
+ void DFWildargs(UDFValue *);
117
+ const char *DeffunctionModule(Deffunction *);
118
+ Deffunction *FindDeffunction(Environment *,const char *);
119
+ Deffunction *FindDeffunctionInModule(Environment *,const char *);
120
+ void GetDeffunctionList(Environment *,CLIPSValue *,Defmodule *);
121
+ const char *DeffunctionName(Deffunction *);
122
+ CLIPSLexeme *GetDeffunctionNamePointer(Environment *,Deffunction *);
123
+ const char *DeffunctionPPForm(Deffunction *);
124
+ Deffunction *GetNextDeffunction(Environment *,Deffunction *);
125
+ bool DeffunctionIsDeletable(Deffunction *);
126
+ void SetDeffunctionPPForm(Environment *,Deffunction *,const char *);
127
+ bool Undeffunction(Deffunction *,Environment *);
128
+ void GetDeffunctionListFunction(Environment *,UDFContext *,UDFValue *);
129
+ void GetDeffunctionModuleCommand(Environment *,UDFContext *,UDFValue *);
130
+ Deffunction *LookupDeffunctionByMdlOrScope(Environment *,const char *);
131
+ Deffunction *LookupDeffunctionInScope(Environment *,const char *);
132
+ #if (! BLOAD_ONLY) && (! RUN_TIME)
133
+ void RemoveDeffunction(Environment *,Deffunction *);
134
+ #endif
135
+ void SetupDeffunctions(Environment *);
136
+ void UndeffunctionCommand(Environment *,UDFContext *,UDFValue *);
137
+ #if DEBUGGING_FUNCTIONS
138
+ bool DeffunctionGetWatch(Deffunction *);
139
+ void ListDeffunctions(Environment *,const char *,Defmodule *);
140
+ void DeffunctionSetWatch(Deffunction *,bool);
141
+ void ListDeffunctionsCommand(Environment *,UDFContext *,UDFValue *);
142
+ void PPDeffunctionCommand(Environment *,UDFContext *,UDFValue *);
143
+ #endif
144
+
145
+ #if RUN_TIME
146
+ void DeffunctionRunTimeInitialize(Environment *);
147
+ #endif
148
+
149
+ #endif /* _H_dffnxfun */
150
+
151
+
152
+
153
+
154
+
155
+
@@ -0,0 +1,514 @@
1
+ /*******************************************************/
2
+ /* "C" Language Integrated Production System */
3
+ /* */
4
+ /* CLIPS Version 6.40 07/23/20 */
5
+ /* */
6
+ /* */
7
+ /*******************************************************/
8
+
9
+ /*************************************************************/
10
+ /* Purpose: Deffunction Parsing Routines */
11
+ /* */
12
+ /* Principal Programmer(s): */
13
+ /* Brian L. Dantes */
14
+ /* */
15
+ /* Contributing Programmer(s): */
16
+ /* Gary D. Riley */
17
+ /* */
18
+ /* Revision History: */
19
+ /* */
20
+ /* 6.24: Renamed BOOLEAN macro type to intBool. */
21
+ /* */
22
+ /* If the last construct in a loaded file is a */
23
+ /* deffunction or defmethod with no closing right */
24
+ /* parenthesis, an error should be issued, but is */
25
+ /* not. DR0872 */
26
+ /* */
27
+ /* Added pragmas to prevent unused variable */
28
+ /* warnings. */
29
+ /* */
30
+ /* 6.30: Removed conditional code for unsupported */
31
+ /* compilers/operating systems (IBM_MCW, */
32
+ /* MAC_MCW, and IBM_TBC). */
33
+ /* */
34
+ /* ENVIRONMENT_API_ONLY no longer supported. */
35
+ /* */
36
+ /* GetConstructNameAndComment API change. */
37
+ /* */
38
+ /* Added const qualifiers to remove C++ */
39
+ /* deprecation warnings. */
40
+ /* */
41
+ /* Converted API macros to function calls. */
42
+ /* */
43
+ /* Changed find construct functionality so that */
44
+ /* imported modules are search when locating a */
45
+ /* named construct. */
46
+ /* */
47
+ /* 6.32: Fixed typo in error ID. */
48
+ /* */
49
+ /* 6.40: Pragma once and other inclusion changes. */
50
+ /* */
51
+ /* Added support for booleans with <stdbool.h>. */
52
+ /* */
53
+ /* Removed use of void pointers for specific */
54
+ /* data structures. */
55
+ /* */
56
+ /*************************************************************/
57
+
58
+ /* =========================================
59
+ *****************************************
60
+ EXTERNAL DEFINITIONS
61
+ =========================================
62
+ ***************************************** */
63
+ #include "setup.h"
64
+
65
+ #if DEFFUNCTION_CONSTRUCT && (! BLOAD_ONLY) && (! RUN_TIME)
66
+
67
+ #if BLOAD || BLOAD_AND_BSAVE
68
+ #include "bload.h"
69
+ #endif
70
+
71
+ #if DEFRULE_CONSTRUCT
72
+ #include "network.h"
73
+ #endif
74
+
75
+ #if DEFGENERIC_CONSTRUCT
76
+ #include "genrccom.h"
77
+ #endif
78
+
79
+ #include "constant.h"
80
+ #include "cstrccom.h"
81
+ #include "cstrcpsr.h"
82
+ #include "constrct.h"
83
+ #include "dffnxfun.h"
84
+ #include "envrnmnt.h"
85
+ #include "expressn.h"
86
+ #include "exprnpsr.h"
87
+ #include "memalloc.h"
88
+ #include "modulutl.h"
89
+ #include "pprint.h"
90
+ #include "prccode.h"
91
+ #include "prntutil.h"
92
+ #include "router.h"
93
+ #include "scanner.h"
94
+ #include "symbol.h"
95
+
96
+ #include "dffnxpsr.h"
97
+
98
+ /***************************************/
99
+ /* LOCAL INTERNAL FUNCTION DEFINITIONS */
100
+ /***************************************/
101
+
102
+ static bool ValidDeffunctionName(Environment *,const char *);
103
+ static Deffunction *AddDeffunction(Environment *,CLIPSLexeme *,Expression *,unsigned short,unsigned short,unsigned short,bool);
104
+
105
+ /***************************************************************************
106
+ NAME : ParseDeffunction
107
+ DESCRIPTION : Parses the deffunction construct
108
+ INPUTS : The input logical name
109
+ RETURNS : False if successful parse, true otherwise
110
+ SIDE EFFECTS : Creates valid deffunction definition
111
+ NOTES : H/L Syntax :
112
+ (deffunction <name> [<comment>]
113
+ (<single-field-varible>* [<multifield-variable>])
114
+ <action>*)
115
+ ***************************************************************************/
116
+ bool ParseDeffunction(
117
+ Environment *theEnv,
118
+ const char *readSource)
119
+ {
120
+ CLIPSLexeme *deffunctionName;
121
+ Expression *actions;
122
+ Expression *parameterList;
123
+ CLIPSLexeme *wildcard;
124
+ unsigned short min, max;
125
+ unsigned short lvars;
126
+ bool deffunctionError = false;
127
+ bool overwrite = false;
128
+ unsigned short owMin = 0, owMax = 0;
129
+ Deffunction *dptr;
130
+ struct token inputToken;
131
+
132
+ SetPPBufferStatus(theEnv,true);
133
+
134
+ FlushPPBuffer(theEnv);
135
+ SetIndentDepth(theEnv,3);
136
+ SavePPBuffer(theEnv,"(deffunction ");
137
+
138
+ #if BLOAD || BLOAD_AND_BSAVE
139
+ if ((Bloaded(theEnv) == true) && (! ConstructData(theEnv)->CheckSyntaxMode))
140
+ {
141
+ CannotLoadWithBloadMessage(theEnv,"deffunctions");
142
+ return true;
143
+ }
144
+ #endif
145
+
146
+ /*=======================================================*/
147
+ /* Parse the name and comment fields of the deffunction. */
148
+ /*=======================================================*/
149
+
150
+ deffunctionName = GetConstructNameAndComment(theEnv,readSource,&inputToken,"deffunction",
151
+ (FindConstructFunction *) FindDeffunctionInModule,
152
+ NULL,
153
+ "!",true,true,true,false);
154
+
155
+ if (deffunctionName == NULL)
156
+ { return true; }
157
+
158
+ if (ValidDeffunctionName(theEnv,deffunctionName->contents) == false)
159
+ { return true; }
160
+
161
+ /*==========================*/
162
+ /* Parse the argument list. */
163
+ /*==========================*/
164
+
165
+ parameterList = ParseProcParameters(theEnv,readSource,&inputToken,
166
+ NULL,&wildcard,&min,&max,&deffunctionError,NULL);
167
+ if (deffunctionError)
168
+ { return true; }
169
+
170
+ /*===================================================================*/
171
+ /* Go ahead and add the deffunction so it can be recursively called. */
172
+ /*===================================================================*/
173
+
174
+ if (ConstructData(theEnv)->CheckSyntaxMode)
175
+ {
176
+ dptr = FindDeffunctionInModule(theEnv,deffunctionName->contents);
177
+ if (dptr == NULL)
178
+ { dptr = AddDeffunction(theEnv,deffunctionName,NULL,min,max,0,true); }
179
+ else
180
+ {
181
+ overwrite = true;
182
+ owMin = dptr->minNumberOfParameters;
183
+ owMax = dptr->maxNumberOfParameters;
184
+ dptr->minNumberOfParameters = min;
185
+ dptr->maxNumberOfParameters = max;
186
+ }
187
+ }
188
+ else
189
+ { dptr = AddDeffunction(theEnv,deffunctionName,NULL,min,max,0,true); }
190
+
191
+ if (dptr == NULL)
192
+ {
193
+ ReturnExpression(theEnv,parameterList);
194
+ return true;
195
+ }
196
+
197
+ /*==================================================*/
198
+ /* Parse the actions contained within the function. */
199
+ /*==================================================*/
200
+
201
+ PPCRAndIndent(theEnv);
202
+
203
+ ExpressionData(theEnv)->ReturnContext = true;
204
+ actions = ParseProcActions(theEnv,"deffunction",readSource,
205
+ &inputToken,parameterList,wildcard,
206
+ NULL,NULL,&lvars,NULL);
207
+
208
+ /*=============================================================*/
209
+ /* Check for the closing right parenthesis of the deffunction. */
210
+ /*=============================================================*/
211
+
212
+ if ((inputToken.tknType != RIGHT_PARENTHESIS_TOKEN) && /* DR0872 */
213
+ (actions != NULL))
214
+ {
215
+ SyntaxErrorMessage(theEnv,"deffunction");
216
+
217
+ ReturnExpression(theEnv,parameterList);
218
+ ReturnPackedExpression(theEnv,actions);
219
+
220
+ if (overwrite)
221
+ {
222
+ dptr->minNumberOfParameters = owMin;
223
+ dptr->maxNumberOfParameters = owMax;
224
+ }
225
+
226
+ if ((dptr->busy == 0) && (! overwrite))
227
+ {
228
+ RemoveConstructFromModule(theEnv,&dptr->header);
229
+ RemoveDeffunction(theEnv,dptr);
230
+ }
231
+
232
+ return true;
233
+ }
234
+
235
+ if (actions == NULL)
236
+ {
237
+ ReturnExpression(theEnv,parameterList);
238
+ if (overwrite)
239
+ {
240
+ dptr->minNumberOfParameters = owMin;
241
+ dptr->maxNumberOfParameters = owMax;
242
+ }
243
+
244
+ if ((dptr->busy == 0) && (! overwrite))
245
+ {
246
+ RemoveConstructFromModule(theEnv,&dptr->header);
247
+ RemoveDeffunction(theEnv,dptr);
248
+ }
249
+ return true;
250
+ }
251
+
252
+ /*==============================================*/
253
+ /* If we're only checking syntax, don't add the */
254
+ /* successfully parsed deffunction to the KB. */
255
+ /*==============================================*/
256
+
257
+ if (ConstructData(theEnv)->CheckSyntaxMode)
258
+ {
259
+ ReturnExpression(theEnv,parameterList);
260
+ ReturnPackedExpression(theEnv,actions);
261
+ if (overwrite)
262
+ {
263
+ dptr->minNumberOfParameters = owMin;
264
+ dptr->maxNumberOfParameters = owMax;
265
+ }
266
+ else
267
+ {
268
+ RemoveConstructFromModule(theEnv,&dptr->header);
269
+ RemoveDeffunction(theEnv,dptr);
270
+ }
271
+ return false;
272
+ }
273
+
274
+ /*=============================*/
275
+ /* Reformat the closing token. */
276
+ /*=============================*/
277
+
278
+ PPBackup(theEnv);
279
+ PPBackup(theEnv);
280
+ SavePPBuffer(theEnv,inputToken.printForm);
281
+ SavePPBuffer(theEnv,"\n");
282
+
283
+ /*======================*/
284
+ /* Add the deffunction. */
285
+ /*======================*/
286
+
287
+ AddDeffunction(theEnv,deffunctionName,actions,min,max,lvars,false);
288
+
289
+ ReturnExpression(theEnv,parameterList);
290
+
291
+ return(deffunctionError);
292
+ }
293
+
294
+ /* =========================================
295
+ *****************************************
296
+ INTERNALLY VISIBLE FUNCTIONS
297
+ =========================================
298
+ ***************************************** */
299
+
300
+ /************************************************************
301
+ NAME : ValidDeffunctionName
302
+ DESCRIPTION : Determines if a new deffunction of the given
303
+ name can be defined in the current module
304
+ INPUTS : The new deffunction name
305
+ RETURNS : True if OK, false otherwise
306
+ SIDE EFFECTS : Error message printed if not OK
307
+ NOTES : GetConstructNameAndComment() (called before
308
+ this function) ensures that the deffunction
309
+ name does not conflict with one from
310
+ another module
311
+ ************************************************************/
312
+ static bool ValidDeffunctionName(
313
+ Environment *theEnv,
314
+ const char *theDeffunctionName)
315
+ {
316
+ Deffunction *theDeffunction;
317
+ #if DEFGENERIC_CONSTRUCT
318
+ Defmodule *theModule;
319
+ Defgeneric *theDefgeneric;
320
+ #endif
321
+
322
+ /*==============================================*/
323
+ /* A deffunction cannot be named the same as a */
324
+ /* construct type, e.g, defclass, defrule, etc. */
325
+ /*==============================================*/
326
+
327
+ if (FindConstruct(theEnv,theDeffunctionName) != NULL)
328
+ {
329
+ PrintErrorID(theEnv,"DFFNXPSR",1,false);
330
+ WriteString(theEnv,STDERR,"Deffunctions are not allowed to replace constructs.\n");
331
+ return false;
332
+ }
333
+
334
+ /*========================================*/
335
+ /* A deffunction cannot be named the same */
336
+ /* as a pre-defined system function, e.g, */
337
+ /* watch, list-defrules, etc. */
338
+ /*========================================*/
339
+
340
+ if (FindFunction(theEnv,theDeffunctionName) != NULL)
341
+ {
342
+ PrintErrorID(theEnv,"DFFNXPSR",2,false);
343
+ WriteString(theEnv,STDERR,"Deffunctions are not allowed to replace external functions.\n");
344
+ return false;
345
+ }
346
+
347
+ #if DEFGENERIC_CONSTRUCT
348
+
349
+ /*===========================================*/
350
+ /* A deffunction cannot be named the same as */
351
+ /* a generic function (either in this module */
352
+ /* or imported from another). */
353
+ /*===========================================*/
354
+
355
+ theDefgeneric = LookupDefgenericInScope(theEnv,theDeffunctionName);
356
+
357
+ if (theDefgeneric != NULL)
358
+ {
359
+ theModule = GetConstructModuleItem(&theDefgeneric->header)->theModule;
360
+ if (theModule != GetCurrentModule(theEnv))
361
+ {
362
+ PrintErrorID(theEnv,"DFFNXPSR",5,false);
363
+ WriteString(theEnv,STDERR,"Defgeneric ");
364
+ WriteString(theEnv,STDERR,DefgenericName(theDefgeneric));
365
+ WriteString(theEnv,STDERR," imported from module ");
366
+ WriteString(theEnv,STDERR,DefmoduleName(theModule));
367
+ WriteString(theEnv,STDERR," conflicts with this deffunction.\n");
368
+ return false;
369
+ }
370
+ else
371
+ {
372
+ PrintErrorID(theEnv,"DFFNXPSR",3,false);
373
+ WriteString(theEnv,STDERR,"Deffunctions are not allowed to replace generic functions.\n");
374
+ }
375
+ return false;
376
+ }
377
+ #endif
378
+
379
+ theDeffunction = FindDeffunctionInModule(theEnv,theDeffunctionName);
380
+ if (theDeffunction != NULL)
381
+ {
382
+ /*=============================================*/
383
+ /* And a deffunction in the current module can */
384
+ /* only be redefined if it is not executing. */
385
+ /*=============================================*/
386
+
387
+ if (theDeffunction->executing)
388
+ {
389
+ PrintErrorID(theEnv,"DFFNXPSR",4,false);
390
+ WriteString(theEnv,STDERR,"Deffunction '");
391
+ WriteString(theEnv,STDERR,DeffunctionName(theDeffunction));
392
+ WriteString(theEnv,STDERR,"' may not be redefined while it is executing.\n");
393
+ return false;
394
+ }
395
+ }
396
+ return true;
397
+ }
398
+
399
+ /****************************************************
400
+ NAME : AddDeffunction
401
+ DESCRIPTION : Adds a deffunction to the list of
402
+ deffunctions
403
+ INPUTS : 1) The symbolic name
404
+ 2) The action expressions
405
+ 3) The minimum number of arguments
406
+ 4) The maximum number of arguments
407
+ (can be -1)
408
+ 5) The number of local variables
409
+ 6) A flag indicating if this is
410
+ a header call so that the
411
+ deffunction can be recursively
412
+ called
413
+ RETURNS : The new deffunction (NULL on errors)
414
+ SIDE EFFECTS : Deffunction structures allocated
415
+ NOTES : Assumes deffunction is not executing
416
+ ****************************************************/
417
+ static Deffunction *AddDeffunction(
418
+ Environment *theEnv,
419
+ CLIPSLexeme *name,
420
+ Expression *actions,
421
+ unsigned short min,
422
+ unsigned short max,
423
+ unsigned short lvars,
424
+ bool headerp)
425
+ {
426
+ Deffunction *dfuncPtr;
427
+ unsigned oldbusy;
428
+ #if DEBUGGING_FUNCTIONS
429
+ bool DFHadWatch = false;
430
+ #else
431
+ #if MAC_XCD
432
+ #pragma unused(headerp)
433
+ #endif
434
+ #endif
435
+
436
+ /*===============================================================*/
437
+ /* If the deffunction doesn't exist, create a new structure to */
438
+ /* contain it and add it to the List of deffunctions. Otherwise, */
439
+ /* use the existing structure and remove the pretty print form */
440
+ /* and interpretive code. */
441
+ /*===============================================================*/
442
+
443
+ dfuncPtr = FindDeffunctionInModule(theEnv,name->contents);
444
+ if (dfuncPtr == NULL)
445
+ {
446
+ dfuncPtr = get_struct(theEnv,deffunction);
447
+ InitializeConstructHeader(theEnv,"deffunction",DEFFUNCTION,&dfuncPtr->header,name);
448
+ IncrementLexemeCount(name);
449
+ dfuncPtr->code = NULL;
450
+ dfuncPtr->minNumberOfParameters = min;
451
+ dfuncPtr->maxNumberOfParameters = max;
452
+ dfuncPtr->numberOfLocalVars = lvars;
453
+ dfuncPtr->busy = 0;
454
+ dfuncPtr->executing = 0;
455
+ }
456
+ else
457
+ {
458
+ #if DEBUGGING_FUNCTIONS
459
+ DFHadWatch = DeffunctionGetWatch(dfuncPtr);
460
+ #endif
461
+ dfuncPtr->minNumberOfParameters = min;
462
+ dfuncPtr->maxNumberOfParameters = max;
463
+ dfuncPtr->numberOfLocalVars = lvars;
464
+ oldbusy = dfuncPtr->busy;
465
+ ExpressionDeinstall(theEnv,dfuncPtr->code);
466
+ dfuncPtr->busy = oldbusy;
467
+ ReturnPackedExpression(theEnv,dfuncPtr->code);
468
+ dfuncPtr->code = NULL;
469
+ SetDeffunctionPPForm(theEnv,dfuncPtr,NULL);
470
+
471
+ /*======================================*/
472
+ /* Remove the deffunction from the list */
473
+ /* so that it can be added at the end. */
474
+ /*======================================*/
475
+
476
+ RemoveConstructFromModule(theEnv,&dfuncPtr->header);
477
+ }
478
+
479
+ AddConstructToModule(&dfuncPtr->header);
480
+
481
+ /*====================================*/
482
+ /* Install the new interpretive code. */
483
+ /*====================================*/
484
+
485
+ if (actions != NULL)
486
+ {
487
+ /*=================================================*/
488
+ /* If a deffunction is recursive, do not increment */
489
+ /* its busy count based on self-references. */
490
+ /*=================================================*/
491
+
492
+ oldbusy = dfuncPtr->busy;
493
+ ExpressionInstall(theEnv,actions);
494
+ dfuncPtr->busy = oldbusy;
495
+ dfuncPtr->code = actions;
496
+ }
497
+
498
+ /*==================================*/
499
+ /* Install the pretty print form if */
500
+ /* memory is not being conserved. */
501
+ /*==================================*/
502
+
503
+ #if DEBUGGING_FUNCTIONS
504
+ DeffunctionSetWatch(dfuncPtr,DFHadWatch ? true : DeffunctionData(theEnv)->WatchDeffunctions);
505
+
506
+ if ((GetConserveMemory(theEnv) == false) && (headerp == false))
507
+ { SetDeffunctionPPForm(theEnv,dfuncPtr,CopyPPBuffer(theEnv)); }
508
+ #endif
509
+
510
+ return dfuncPtr;
511
+ }
512
+
513
+ #endif /* DEFFUNCTION_CONSTRUCT && (! BLOAD_ONLY) && (! RUN_TIME) */
514
+