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,122 @@
1
+ /*******************************************************/
2
+ /* "C" Language Integrated Production System */
3
+ /* */
4
+ /* CLIPS Version 6.40 11/01/16 */
5
+ /* */
6
+ /* DEFTEMPLATE FUNCTION 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: Correction for FalseSymbol/TrueSymbol. DR0859 */
20
+ /* */
21
+ /* 6.24: Added deftemplate-slot-names, */
22
+ /* deftemplate-slot-default-value, */
23
+ /* deftemplate-slot-cardinality, */
24
+ /* deftemplate-slot-allowed-values, */
25
+ /* deftemplate-slot-range, */
26
+ /* deftemplate-slot-types, */
27
+ /* deftemplate-slot-multip, */
28
+ /* deftemplate-slot-singlep, */
29
+ /* deftemplate-slot-existp, and */
30
+ /* deftemplate-slot-defaultp functions. */
31
+ /* */
32
+ /* Renamed BOOLEAN macro type to intBool. */
33
+ /* */
34
+ /* 6.30: Support for deftemplate slot facets. */
35
+ /* */
36
+ /* Added deftemplate-slot-facet-existp and */
37
+ /* deftemplate-slot-facet-value functions. */
38
+ /* */
39
+ /* Support for long long integers. */
40
+ /* */
41
+ /* Used gensprintf instead of sprintf. */
42
+ /* */
43
+ /* Support for modify callback function. */
44
+ /* */
45
+ /* Added additional argument to function */
46
+ /* CheckDeftemplateAndSlotArguments to specify */
47
+ /* the expected number of arguments. */
48
+ /* */
49
+ /* Added const qualifiers to remove C++ */
50
+ /* deprecation warnings. */
51
+ /* */
52
+ /* Converted API macros to function calls. */
53
+ /* */
54
+ /* Added code to prevent a clear command from */
55
+ /* being executed during fact assertions via */
56
+ /* Increment/DecrementClearReadyLocks API. */
57
+ /* */
58
+ /* 6.40: Removed LOCALE definition. */
59
+ /* */
60
+ /* Pragma once and other inclusion changes. */
61
+ /* */
62
+ /* Added support for booleans with <stdbool.h>. */
63
+ /* */
64
+ /* Removed use of void pointers for specific */
65
+ /* data structures. */
66
+ /* */
67
+ /* ALLOW_ENVIRONMENT_GLOBALS no longer supported. */
68
+ /* */
69
+ /* UDF redesign. */
70
+ /* */
71
+ /* Modify command preserves fact id and address. */
72
+ /* */
73
+ /*************************************************************/
74
+
75
+ #ifndef _H_tmpltfun
76
+
77
+ #pragma once
78
+
79
+ #define _H_tmpltfun
80
+
81
+ #include "expressn.h"
82
+ #include "factmngr.h"
83
+ #include "symbol.h"
84
+ #include "tmpltdef.h"
85
+
86
+ bool UpdateModifyDuplicate(Environment *,struct expr *,const char *,void *);
87
+ struct expr *ModifyParse(Environment *,struct expr *,const char *);
88
+ struct expr *DuplicateParse(Environment *,struct expr *,const char *);
89
+ void DeftemplateFunctions(Environment *);
90
+ void ModifyCommand(Environment *,UDFContext *,UDFValue *);
91
+ void DuplicateCommand(Environment *,UDFContext *,UDFValue *);
92
+ void DeftemplateSlotNamesFunction(Environment *,UDFContext *,UDFValue *);
93
+ void DeftemplateSlotNames(Deftemplate *,CLIPSValue *);
94
+ void DeftemplateSlotDefaultValueFunction(Environment *,UDFContext *,UDFValue *);
95
+ bool DeftemplateSlotDefaultValue(Deftemplate *,const char *,CLIPSValue *);
96
+ void DeftemplateSlotCardinalityFunction(Environment *,UDFContext *,UDFValue *);
97
+ bool DeftemplateSlotCardinality(Deftemplate *,const char *,CLIPSValue *);
98
+ void DeftemplateSlotAllowedValuesFunction(Environment *,UDFContext *,UDFValue *);
99
+ bool DeftemplateSlotAllowedValues(Deftemplate *,const char *,CLIPSValue *);
100
+ void DeftemplateSlotRangeFunction(Environment *,UDFContext *,UDFValue *);
101
+ bool DeftemplateSlotRange(Deftemplate *,const char *,CLIPSValue *);
102
+ void DeftemplateSlotTypesFunction(Environment *,UDFContext *,UDFValue *);
103
+ bool DeftemplateSlotTypes(Deftemplate *,const char *,CLIPSValue *);
104
+ void DeftemplateSlotMultiPFunction(Environment *,UDFContext *,UDFValue *);
105
+ bool DeftemplateSlotMultiP(Deftemplate *,const char *);
106
+ void DeftemplateSlotSinglePFunction(Environment *,UDFContext *,UDFValue *);
107
+ bool DeftemplateSlotSingleP(Deftemplate *,const char *);
108
+ void DeftemplateSlotExistPFunction(Environment *,UDFContext *,UDFValue *);
109
+ bool DeftemplateSlotExistP(Deftemplate *,const char *);
110
+ void DeftemplateSlotDefaultPFunction(Environment *,UDFContext *,UDFValue *);
111
+ DefaultType DeftemplateSlotDefaultP(Deftemplate *,const char *);
112
+ void DeftemplateSlotFacetExistPFunction(Environment *,UDFContext *,UDFValue *);
113
+ bool DeftemplateSlotFacetExistP(Environment *,Deftemplate *,const char *,const char *);
114
+ void DeftemplateSlotFacetValueFunction(Environment *,UDFContext *,UDFValue *);
115
+ bool DeftemplateSlotFacetValue(Environment *,Deftemplate *,const char *,const char *,UDFValue *);
116
+ Fact *ReplaceFact(Environment *,Fact *,CLIPSValue *,char *);
117
+
118
+ #endif /* _H_tmpltfun */
119
+
120
+
121
+
122
+
@@ -0,0 +1,379 @@
1
+ /*******************************************************/
2
+ /* "C" Language Integrated Production System */
3
+ /* */
4
+ /* CLIPS Version 6.40 07/30/16 */
5
+ /* */
6
+ /* DEFTEMPLATE LHS MODULE */
7
+ /*******************************************************/
8
+
9
+ /*************************************************************/
10
+ /* Purpose: Parses LHS deftemplate patterns. */
11
+ /* */
12
+ /* Principal Programmer(s): */
13
+ /* Gary D. Riley */
14
+ /* */
15
+ /* Contributing Programmer(s): */
16
+ /* */
17
+ /* Revision History: */
18
+ /* */
19
+ /* 6.24: Renamed BOOLEAN macro type to intBool. */
20
+ /* */
21
+ /* 6.30: Support for rete network exists node. */
22
+ /* */
23
+ /* Added const qualifiers to remove C++ */
24
+ /* deprecation warnings. */
25
+ /* */
26
+ /* 6.40: Pragma once and other inclusion changes. */
27
+ /* */
28
+ /* Added support for booleans with <stdbool.h>. */
29
+ /* */
30
+ /* Removed use of void pointers for specific */
31
+ /* data structures. */
32
+ /* */
33
+ /*************************************************************/
34
+
35
+ #include "setup.h"
36
+
37
+ #if DEFTEMPLATE_CONSTRUCT && DEFRULE_CONSTRUCT && (! RUN_TIME) && (! BLOAD_ONLY)
38
+
39
+ #include <stdio.h>
40
+ #include <string.h>
41
+
42
+ #include "constant.h"
43
+ #include "constrct.h"
44
+ #include "constrnt.h"
45
+ #include "envrnmnt.h"
46
+ #include "exprnpsr.h"
47
+ #include "factrhs.h"
48
+ #include "memalloc.h"
49
+ #include "modulutl.h"
50
+ #include "pattern.h"
51
+ #include "pprint.h"
52
+ #include "prntutil.h"
53
+ #include "reorder.h"
54
+ #include "router.h"
55
+ #include "scanner.h"
56
+ #include "symbol.h"
57
+ #include "tmpltdef.h"
58
+ #include "tmpltutl.h"
59
+
60
+ #include "tmpltlhs.h"
61
+
62
+ /***************************************/
63
+ /* LOCAL INTERNAL FUNCTION DEFINITIONS */
64
+ /***************************************/
65
+
66
+ static struct lhsParseNode *GetLHSSlots(Environment *,const char *,struct token *,Deftemplate *,bool *);
67
+ static struct lhsParseNode *GetSingleLHSSlot(Environment *,const char *,struct token *,
68
+ struct templateSlot *,bool *,unsigned short);
69
+ static bool MultiplyDefinedLHSSlots(Environment *,struct lhsParseNode *,CLIPSLexeme *);
70
+
71
+ /*********************************************/
72
+ /* DeftemplateLHSParse: Parses a LHS pattern */
73
+ /* that uses the deftemplate format. */
74
+ /*********************************************/
75
+ struct lhsParseNode *DeftemplateLHSParse(
76
+ Environment *theEnv,
77
+ const char *readSource,
78
+ Deftemplate *theDeftemplate)
79
+ {
80
+ struct lhsParseNode *head, *firstSlot;
81
+ struct token theToken;
82
+ bool error;
83
+
84
+ /*===============================================================*/
85
+ /* Make sure the deftemplate name is not connected to subfields. */
86
+ /*===============================================================*/
87
+
88
+ GetToken(theEnv,readSource,&theToken);
89
+ if ((theToken.tknType == OR_CONSTRAINT_TOKEN) ||
90
+ (theToken.tknType == AND_CONSTRAINT_TOKEN))
91
+ {
92
+ SyntaxErrorMessage(theEnv,"deftemplate patterns");
93
+ return NULL;
94
+ }
95
+
96
+ /*===================================================*/
97
+ /* Create the pattern node for the deftemplate name. */
98
+ /*===================================================*/
99
+
100
+ head = GetLHSParseNode(theEnv);
101
+ head->pnType = SF_WILDCARD_NODE;
102
+ head->negated = false;
103
+ head->exists = false;
104
+ head->index = 0;
105
+ head->slotNumber = 1;
106
+ head->bottom = GetLHSParseNode(theEnv);
107
+ head->bottom->pnType = SYMBOL_NODE;
108
+ head->bottom->negated = false;
109
+ head->bottom->exists = false;
110
+ head->bottom->value = theDeftemplate->header.name;
111
+
112
+ /*==========================================*/
113
+ /* Get the other fields in the deftemplate. */
114
+ /*==========================================*/
115
+
116
+ error = false;
117
+ firstSlot = GetLHSSlots(theEnv,readSource,&theToken,theDeftemplate,&error);
118
+ if (error)
119
+ {
120
+ ReturnLHSParseNodes(theEnv,firstSlot);
121
+ ReturnLHSParseNodes(theEnv,head);
122
+ return NULL;
123
+ }
124
+
125
+ /*=========================*/
126
+ /* Return the LHS pattern. */
127
+ /*=========================*/
128
+
129
+ head->right = firstSlot;
130
+ return(head);
131
+ }
132
+
133
+ /******************************************/
134
+ /* GetLHSSlots: Retrieves all of the slot */
135
+ /* values used in a LHS pattern. */
136
+ /******************************************/
137
+ static struct lhsParseNode *GetLHSSlots(
138
+ Environment *theEnv,
139
+ const char *readSource,
140
+ struct token *tempToken,
141
+ Deftemplate *theDeftemplate,
142
+ bool *error)
143
+ {
144
+ struct lhsParseNode *firstSlot = NULL, *nextSlot, *lastSlot = NULL;
145
+ struct templateSlot *slotPtr;
146
+ unsigned short position;
147
+
148
+ /*=======================================================*/
149
+ /* Continue parsing slot definitions until the pattern's */
150
+ /* closing right parenthesis is encountered. */
151
+ /*=======================================================*/
152
+
153
+ while (tempToken->tknType != RIGHT_PARENTHESIS_TOKEN)
154
+ {
155
+ PPBackup(theEnv);
156
+ SavePPBuffer(theEnv," ");
157
+ SavePPBuffer(theEnv,tempToken->printForm);
158
+
159
+ /*=================================================*/
160
+ /* Slot definitions begin with a left parenthesis. */
161
+ /*=================================================*/
162
+
163
+ if (tempToken->tknType != LEFT_PARENTHESIS_TOKEN)
164
+ {
165
+ *error = true;
166
+ SyntaxErrorMessage(theEnv,"deftemplate patterns");
167
+ ReturnLHSParseNodes(theEnv,firstSlot);
168
+ return NULL;
169
+ }
170
+
171
+ /*====================*/
172
+ /* Get the slot name. */
173
+ /*====================*/
174
+
175
+ GetToken(theEnv,readSource,tempToken);
176
+ if (tempToken->tknType != SYMBOL_TOKEN)
177
+ {
178
+ *error = true;
179
+ SyntaxErrorMessage(theEnv,"deftemplate patterns");
180
+ ReturnLHSParseNodes(theEnv,firstSlot);
181
+ return NULL;
182
+ }
183
+
184
+ /*==========================================================*/
185
+ /* Determine if the slot name is valid for the deftemplate. */
186
+ /*==========================================================*/
187
+
188
+ if ((slotPtr = FindSlot(theDeftemplate,tempToken->lexemeValue,&position)) == NULL)
189
+ {
190
+ *error = true;
191
+ InvalidDeftemplateSlotMessage(theEnv,tempToken->lexemeValue->contents,
192
+ theDeftemplate->header.name->contents,true);
193
+ ReturnLHSParseNodes(theEnv,firstSlot);
194
+ return NULL;
195
+ }
196
+
197
+ /*============================================*/
198
+ /* Determine if the slot is multiply defined. */
199
+ /*============================================*/
200
+
201
+ if (MultiplyDefinedLHSSlots(theEnv,firstSlot,tempToken->lexemeValue) == true)
202
+ {
203
+ *error = true;
204
+ ReturnLHSParseNodes(theEnv,firstSlot);
205
+ return NULL;
206
+ }
207
+
208
+ /*==============================================================*/
209
+ /* Get the pattern matching values used in the slot definition. */
210
+ /*==============================================================*/
211
+
212
+ nextSlot = GetSingleLHSSlot(theEnv,readSource,tempToken,slotPtr,error,position+1);
213
+ if (*error)
214
+ {
215
+ ReturnLHSParseNodes(theEnv,firstSlot);
216
+ ReturnLHSParseNodes(theEnv,nextSlot);
217
+ return NULL;
218
+ }
219
+
220
+ /*=====================================*/
221
+ /* Add the slot definition to the list */
222
+ /* of slot definitions already parsed. */
223
+ /*=====================================*/
224
+
225
+ if (lastSlot == NULL)
226
+ { firstSlot = nextSlot; }
227
+ else
228
+ { lastSlot->right = nextSlot; }
229
+
230
+ while (nextSlot->right != NULL) nextSlot = nextSlot->right;
231
+ lastSlot = nextSlot;
232
+
233
+ /*==============================*/
234
+ /* Begin parsing the next slot. */
235
+ /*==============================*/
236
+
237
+ GetToken(theEnv,readSource,tempToken);
238
+ }
239
+
240
+ /*===========================================================*/
241
+ /* Return all the slot definitions found in the lhs pattern. */
242
+ /*===========================================================*/
243
+
244
+ return(firstSlot);
245
+ }
246
+
247
+ /*****************************************************/
248
+ /* GetSingleLHSSlot: Get the pattern matching values */
249
+ /* to be associated with a slot name. */
250
+ /*****************************************************/
251
+ static struct lhsParseNode *GetSingleLHSSlot(
252
+ Environment *theEnv,
253
+ const char *readSource,
254
+ struct token *tempToken,
255
+ struct templateSlot *slotPtr,
256
+ bool *error,
257
+ unsigned short position)
258
+ {
259
+ struct lhsParseNode *nextSlot;
260
+ CLIPSLexeme *slotName;
261
+
262
+ /*================================================*/
263
+ /* Get the slot name and read in the first token. */
264
+ /*================================================*/
265
+
266
+ slotName = tempToken->lexemeValue;
267
+ SavePPBuffer(theEnv," ");
268
+ GetToken(theEnv,readSource,tempToken);
269
+
270
+ /*====================================*/
271
+ /* Get value for a single field slot. */
272
+ /*====================================*/
273
+
274
+ if (slotPtr->multislot == false)
275
+ {
276
+ /*=======================*/
277
+ /* Get the single value. */
278
+ /*=======================*/
279
+
280
+ nextSlot = RestrictionParse(theEnv,readSource,tempToken,false,
281
+ slotPtr->slotName,position,
282
+ slotPtr->constraints,0);
283
+ if (nextSlot == NULL)
284
+ {
285
+ *error = true;
286
+ return NULL;
287
+ }
288
+
289
+ /*======================================*/
290
+ /* Multi field wildcards and variables */
291
+ /* not allowed in a single field slot. */
292
+ /*======================================*/
293
+
294
+ if ((nextSlot->pnType == MF_VARIABLE_NODE) ||
295
+ (nextSlot->pnType == MF_WILDCARD_NODE))
296
+ {
297
+ SingleFieldSlotCardinalityError(theEnv,slotPtr->slotName->contents);
298
+ *error = true;
299
+ ReturnLHSParseNodes(theEnv,nextSlot);
300
+ return NULL;
301
+ }
302
+ }
303
+
304
+ /*===================================*/
305
+ /* Get values for a multifield slot. */
306
+ /*===================================*/
307
+
308
+ else
309
+ {
310
+ nextSlot = RestrictionParse(theEnv,readSource,tempToken,true,slotName,position,
311
+ slotPtr->constraints,1);
312
+ if (nextSlot == NULL)
313
+ {
314
+ *error = true;
315
+ return NULL;
316
+ }
317
+ }
318
+
319
+ /*========================================================*/
320
+ /* The slot definition must end with a right parenthesis. */
321
+ /*========================================================*/
322
+
323
+ if (tempToken->tknType != RIGHT_PARENTHESIS_TOKEN)
324
+ {
325
+ PPBackup(theEnv);
326
+ SavePPBuffer(theEnv," ");
327
+ SavePPBuffer(theEnv,tempToken->printForm);
328
+ SyntaxErrorMessage(theEnv,"deftemplate patterns");
329
+ *error = true;
330
+ ReturnLHSParseNodes(theEnv,nextSlot);
331
+ return NULL;
332
+ }
333
+
334
+ /*===============================================*/
335
+ /* Fix the pretty print output if the multifield */
336
+ /* slot contained no restrictions. */
337
+ /*===============================================*/
338
+
339
+ if ((nextSlot->bottom == NULL) && slotPtr->multislot)
340
+ {
341
+ PPBackup(theEnv);
342
+ PPBackup(theEnv);
343
+ SavePPBuffer(theEnv,")");
344
+ }
345
+
346
+ /*=================================*/
347
+ /* Add the slot values to the slot */
348
+ /* structure and return it. */
349
+ /*=================================*/
350
+
351
+ return(nextSlot);
352
+ }
353
+
354
+ /******************************************************/
355
+ /* MultiplyDefinedLHSSlots: Determines if a slot name */
356
+ /* was used more than once in a LHS pattern. */
357
+ /******************************************************/
358
+ static bool MultiplyDefinedLHSSlots(
359
+ Environment *theEnv,
360
+ struct lhsParseNode *theSlots,
361
+ CLIPSLexeme *slotName)
362
+ {
363
+ for (;
364
+ theSlots != NULL;
365
+ theSlots = theSlots->right)
366
+ {
367
+ if (theSlots->slot == slotName)
368
+ {
369
+ AlreadyParsedErrorMessage(theEnv,"slot ",slotName->contents);
370
+ return true;
371
+ }
372
+ }
373
+
374
+ return false;
375
+ }
376
+
377
+ #endif /* DEFTEMPLATE_CONSTRUCT && DEFRULE_CONSTRUCT && (! RUN_TIME) && (! BLOAD_ONLY) */
378
+
379
+
@@ -0,0 +1,50 @@
1
+ /*******************************************************/
2
+ /* "C" Language Integrated Production System */
3
+ /* */
4
+ /* CLIPS Version 6.40 07/30/16 */
5
+ /* */
6
+ /* DEFTEMPLATE LHS 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.24: Renamed BOOLEAN macro type to intBool. */
20
+ /* */
21
+ /* 6.30: Support for rete network exists node. */
22
+ /* */
23
+ /* Added const qualifiers to remove C++ */
24
+ /* deprecation warnings. */
25
+ /* */
26
+ /* 6.40: Removed LOCALE definition. */
27
+ /* */
28
+ /* Pragma once and other inclusion changes. */
29
+ /* */
30
+ /* Removed use of void pointers for specific */
31
+ /* data structures. */
32
+ /* */
33
+ /*************************************************************/
34
+
35
+ #ifndef _H_tmpltlhs
36
+
37
+ #pragma once
38
+
39
+ #define _H_tmpltlhs
40
+
41
+ #include "symbol.h"
42
+ #include "tmpltdef.h"
43
+
44
+ struct lhsParseNode *DeftemplateLHSParse(Environment *,const char *,Deftemplate *);
45
+
46
+ #endif /* _H_tmpltlhs */
47
+
48
+
49
+
50
+