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,481 @@
1
+ /*******************************************************/
2
+ /* "C" Language Integrated Production System */
3
+ /* */
4
+ /* CLIPS Version 6.40 10/19/17 */
5
+ /* */
6
+ /* FILE I/O ROUTER MODULE */
7
+ /*******************************************************/
8
+
9
+ /*************************************************************/
10
+ /* Purpose: I/O Router routines which allow files to be used */
11
+ /* as input and output sources. */
12
+ /* */
13
+ /* Principal Programmer(s): */
14
+ /* Gary D. Riley */
15
+ /* */
16
+ /* Contributing Programmer(s): */
17
+ /* Brian L. Dantes */
18
+ /* */
19
+ /* Revision History: */
20
+ /* */
21
+ /* 6.24: Added environment parameter to GenClose. */
22
+ /* Added environment parameter to GenOpen. */
23
+ /* */
24
+ /* Added pragmas to remove compilation warnings. */
25
+ /* */
26
+ /* 6.30: Removed conditional code for unsupported */
27
+ /* compilers/operating systems (IBM_MCW, */
28
+ /* MAC_MCW, and IBM_TBC). */
29
+ /* */
30
+ /* Used gengetc and genungetchar rather than */
31
+ /* getc and ungetc. */
32
+ /* */
33
+ /* Replaced BASIC_IO and ADVANCED_IO compiler */
34
+ /* flags with the single IO_FUNCTIONS compiler */
35
+ /* flag. */
36
+ /* */
37
+ /* Added const qualifiers to remove C++ */
38
+ /* deprecation warnings. */
39
+ /* */
40
+ /* Added STDOUT and STDIN logical name */
41
+ /* definitions. */
42
+ /* */
43
+ /* 6.31: Output to logical WERROR is now sent to stderr */
44
+ /* rather than stdout. */
45
+ /* */
46
+ /* 6.40: Pragma once and other inclusion changes. */
47
+ /* */
48
+ /* Added support for booleans with <stdbool.h>. */
49
+ /* */
50
+ /* Changed return values for router functions. */
51
+ /* */
52
+ /* Removed use of void pointers for specific */
53
+ /* data structures. */
54
+ /* */
55
+ /* Added flush, rewind, tell, and seek functions. */
56
+ /* */
57
+ /*************************************************************/
58
+
59
+ #include <stdio.h>
60
+ #include <string.h>
61
+
62
+ #include "setup.h"
63
+
64
+ #include "constant.h"
65
+ #include "envrnmnt.h"
66
+ #include "memalloc.h"
67
+ #include "router.h"
68
+ #include "sysdep.h"
69
+
70
+ #include "filertr.h"
71
+
72
+ /***************************************/
73
+ /* LOCAL INTERNAL FUNCTION DEFINITIONS */
74
+ /***************************************/
75
+
76
+ static void ExitFileCallback(Environment *,int,void *);
77
+ static void WriteFileCallback(Environment *,const char *,const char *,void *);
78
+ static int ReadFileCallback(Environment *,const char *,void *);
79
+ static int UnreadFileCallback(Environment *,const char *,int,void *);
80
+ static void DeallocateFileRouterData(Environment *);
81
+
82
+ /***************************************************************/
83
+ /* InitializeFileRouter: Initializes file input/output router. */
84
+ /***************************************************************/
85
+ void InitializeFileRouter(
86
+ Environment *theEnv)
87
+ {
88
+ AllocateEnvironmentData(theEnv,FILE_ROUTER_DATA,sizeof(struct fileRouterData),DeallocateFileRouterData);
89
+
90
+ AddRouter(theEnv,"fileio",0,FindFile,
91
+ WriteFileCallback,ReadFileCallback,
92
+ UnreadFileCallback,ExitFileCallback,NULL);
93
+ }
94
+
95
+ /*****************************************/
96
+ /* DeallocateFileRouterData: Deallocates */
97
+ /* environment data for file routers. */
98
+ /*****************************************/
99
+ static void DeallocateFileRouterData(
100
+ Environment *theEnv)
101
+ {
102
+ struct fileRouter *tmpPtr, *nextPtr;
103
+
104
+ tmpPtr = FileRouterData(theEnv)->ListOfFileRouters;
105
+ while (tmpPtr != NULL)
106
+ {
107
+ nextPtr = tmpPtr->next;
108
+ GenClose(theEnv,tmpPtr->stream);
109
+ rm(theEnv,(void *) tmpPtr->logicalName,strlen(tmpPtr->logicalName) + 1);
110
+ rtn_struct(theEnv,fileRouter,tmpPtr);
111
+ tmpPtr = nextPtr;
112
+ }
113
+ }
114
+
115
+ /*****************************************/
116
+ /* FindFptr: Returns a pointer to a file */
117
+ /* stream for a given logical name. */
118
+ /*****************************************/
119
+ FILE *FindFptr(
120
+ Environment *theEnv,
121
+ const char *logicalName)
122
+ {
123
+ struct fileRouter *fptr;
124
+
125
+ /*========================================================*/
126
+ /* Check to see if standard input or output is requested. */
127
+ /*========================================================*/
128
+
129
+ if (strcmp(logicalName,STDOUT) == 0)
130
+ { return stdout; }
131
+ else if (strcmp(logicalName,STDIN) == 0)
132
+ { return stdin; }
133
+ else if (strcmp(logicalName,STDERR) == 0)
134
+ { return stderr; }
135
+ else if (strcmp(logicalName,STDWRN) == 0)
136
+ { return stdout; }
137
+
138
+ /*==============================================================*/
139
+ /* Otherwise, look up the logical name on the global file list. */
140
+ /*==============================================================*/
141
+
142
+ fptr = FileRouterData(theEnv)->ListOfFileRouters;
143
+ while ((fptr != NULL) ? (strcmp(logicalName,fptr->logicalName) != 0) : false)
144
+ { fptr = fptr->next; }
145
+
146
+ if (fptr != NULL) return fptr->stream;
147
+
148
+ return NULL;
149
+ }
150
+
151
+ /*****************************************************/
152
+ /* FindFile: Find routine for file router logical */
153
+ /* names. Returns true if the specified logical */
154
+ /* name has an associated file stream (which means */
155
+ /* that the logical name can be handled by the */
156
+ /* file router). Otherwise, false is returned. */
157
+ /*****************************************************/
158
+ bool FindFile(
159
+ Environment *theEnv,
160
+ const char *logicalName,
161
+ void *context)
162
+ {
163
+ if (FindFptr(theEnv,logicalName) != NULL) return true;
164
+
165
+ return false;
166
+ }
167
+
168
+ /***************************************************/
169
+ /* ExitFileCallback: Exit routine for file router. */
170
+ /***************************************************/
171
+ static void ExitFileCallback(
172
+ Environment *theEnv,
173
+ int num,
174
+ void *context)
175
+ {
176
+ #if MAC_XCD
177
+ #pragma unused(num)
178
+ #endif
179
+ #if IO_FUNCTIONS
180
+ CloseAllFiles(theEnv);
181
+ #else
182
+ #if MAC_XCD
183
+ #pragma unused(theEnv)
184
+ #endif
185
+ #endif
186
+ }
187
+
188
+ /******************************************************/
189
+ /* WriteFileCallback: Write callback for file router. */
190
+ /******************************************************/
191
+ static void WriteFileCallback(
192
+ Environment *theEnv,
193
+ const char *logicalName,
194
+ const char *str,
195
+ void *context)
196
+ {
197
+ FILE *fptr;
198
+
199
+ fptr = FindFptr(theEnv,logicalName);
200
+
201
+ genprintfile(theEnv,fptr,str);
202
+ }
203
+
204
+ /****************************************************/
205
+ /* ReadFileCallback: Read callback for file router. */
206
+ /****************************************************/
207
+ static int ReadFileCallback(
208
+ Environment *theEnv,
209
+ const char *logicalName,
210
+ void *context)
211
+ {
212
+ FILE *fptr;
213
+ int theChar;
214
+
215
+ fptr = FindFptr(theEnv,logicalName);
216
+
217
+ if (fptr == stdin)
218
+ { theChar = gengetchar(theEnv); }
219
+ else
220
+ { theChar = getc(fptr); }
221
+
222
+ /*=================================================*/
223
+ /* The following code prevents Control-D on UNIX */
224
+ /* machines from terminating all input from stdin. */
225
+ /*=================================================*/
226
+
227
+ if ((fptr == stdin) && (theChar == EOF)) clearerr(stdin);
228
+
229
+ return theChar;
230
+ }
231
+
232
+ /********************************************************/
233
+ /* UnreadFileCallback: Unread callback for file router. */
234
+ /********************************************************/
235
+ static int UnreadFileCallback(
236
+ Environment *theEnv,
237
+ const char *logicalName,
238
+ int ch,
239
+ void *context)
240
+ {
241
+ FILE *fptr;
242
+
243
+ fptr = FindFptr(theEnv,logicalName);
244
+
245
+ if (fptr == stdin)
246
+ { return genungetchar(theEnv,ch); }
247
+ else
248
+ { return ungetc(ch,fptr); }
249
+ }
250
+
251
+ /*********************************************************/
252
+ /* OpenFile: Opens a file with the specified access mode */
253
+ /* and stores the opened stream on the list of files */
254
+ /* associated with logical names Returns true if the */
255
+ /* file was succesfully opened, otherwise false. */
256
+ /*********************************************************/
257
+ bool OpenAFile(
258
+ Environment *theEnv,
259
+ const char *fileName,
260
+ const char *accessMode,
261
+ const char *logicalName)
262
+ {
263
+ FILE *newstream;
264
+ struct fileRouter *newRouter;
265
+ char *theName;
266
+
267
+ /*==================================*/
268
+ /* Make sure the file can be opened */
269
+ /* with the specified access mode. */
270
+ /*==================================*/
271
+
272
+ if ((newstream = GenOpen(theEnv,fileName,accessMode)) == NULL)
273
+ { return false; }
274
+
275
+ /*===========================*/
276
+ /* Create a new file router. */
277
+ /*===========================*/
278
+
279
+ newRouter = get_struct(theEnv,fileRouter);
280
+ theName = (char *) gm2(theEnv,strlen(logicalName) + 1);
281
+ genstrcpy(theName,logicalName);
282
+ newRouter->logicalName = theName;
283
+ newRouter->stream = newstream;
284
+
285
+ /*==========================================*/
286
+ /* Add the newly opened file to the list of */
287
+ /* files associated with logical names. */
288
+ /*==========================================*/
289
+
290
+ newRouter->next = FileRouterData(theEnv)->ListOfFileRouters;
291
+ FileRouterData(theEnv)->ListOfFileRouters = newRouter;
292
+
293
+ /*==================================*/
294
+ /* Return true to indicate the file */
295
+ /* was opened successfully. */
296
+ /*==================================*/
297
+
298
+ return true;
299
+ }
300
+
301
+ /*************************************************************/
302
+ /* CloseFile: Closes the file associated with the specified */
303
+ /* logical name. Returns true if the file was successfully */
304
+ /* closed, otherwise false. */
305
+ /*************************************************************/
306
+ bool CloseFile(
307
+ Environment *theEnv,
308
+ const char *fid)
309
+ {
310
+ struct fileRouter *fptr, *prev;
311
+
312
+ for (fptr = FileRouterData(theEnv)->ListOfFileRouters, prev = NULL;
313
+ fptr != NULL;
314
+ fptr = fptr->next)
315
+ {
316
+ if (strcmp(fptr->logicalName,fid) == 0)
317
+ {
318
+ GenClose(theEnv,fptr->stream);
319
+ rm(theEnv,(void *) fptr->logicalName,strlen(fptr->logicalName) + 1);
320
+ if (prev == NULL)
321
+ { FileRouterData(theEnv)->ListOfFileRouters = fptr->next; }
322
+ else
323
+ { prev->next = fptr->next; }
324
+ rm(theEnv,fptr,sizeof(struct fileRouter));
325
+
326
+ return true;
327
+ }
328
+
329
+ prev = fptr;
330
+ }
331
+
332
+ return false;
333
+ }
334
+
335
+ /**********************************************/
336
+ /* CloseAllFiles: Closes all files associated */
337
+ /* with a file I/O router. Returns true if */
338
+ /* any file was closed, otherwise false. */
339
+ /**********************************************/
340
+ bool CloseAllFiles(
341
+ Environment *theEnv)
342
+ {
343
+ struct fileRouter *fptr, *prev;
344
+
345
+ if (FileRouterData(theEnv)->ListOfFileRouters == NULL) return false;
346
+
347
+ fptr = FileRouterData(theEnv)->ListOfFileRouters;
348
+
349
+ while (fptr != NULL)
350
+ {
351
+ GenClose(theEnv,fptr->stream);
352
+ prev = fptr;
353
+ rm(theEnv,(void *) fptr->logicalName,strlen(fptr->logicalName) + 1);
354
+ fptr = fptr->next;
355
+ rm(theEnv,prev,sizeof(struct fileRouter));
356
+ }
357
+
358
+ FileRouterData(theEnv)->ListOfFileRouters = NULL;
359
+
360
+ return true;
361
+ }
362
+
363
+ /*************************************************************/
364
+ /* FlushFile: Flushes the file associated with the specified */
365
+ /* logical name. Returns true if the file was successfully */
366
+ /* flushed, otherwise false. */
367
+ /*************************************************************/
368
+ bool FlushFile(
369
+ Environment *theEnv,
370
+ const char *fid)
371
+ {
372
+ struct fileRouter *fptr;
373
+
374
+ for (fptr = FileRouterData(theEnv)->ListOfFileRouters;
375
+ fptr != NULL;
376
+ fptr = fptr->next)
377
+ {
378
+ if (strcmp(fptr->logicalName,fid) == 0)
379
+ {
380
+ GenFlush(theEnv,fptr->stream);
381
+ return true;
382
+ }
383
+ }
384
+
385
+ return false;
386
+ }
387
+
388
+ /***********************************************/
389
+ /* FlushAllFiles: Flushes all files associated */
390
+ /* with a file I/O router. Returns true if */
391
+ /* any file was flushed, otherwise false. */
392
+ /***********************************************/
393
+ bool FlushAllFiles(
394
+ Environment *theEnv)
395
+ {
396
+ struct fileRouter *fptr;
397
+
398
+ if (FileRouterData(theEnv)->ListOfFileRouters == NULL) return false;
399
+
400
+ for (fptr = FileRouterData(theEnv)->ListOfFileRouters;
401
+ fptr != NULL;
402
+ fptr = fptr->next)
403
+ { GenFlush(theEnv,fptr->stream); }
404
+
405
+ return true;
406
+ }
407
+
408
+ /*****************************************************/
409
+ /* RewindFile: Rewinds the file associated with the */
410
+ /* specified logical name. Returns true if the */
411
+ /* file was successfully rewound, otherwise false. */
412
+ /*****************************************************/
413
+ bool RewindFile(
414
+ Environment *theEnv,
415
+ const char *fid)
416
+ {
417
+ struct fileRouter *fptr;
418
+
419
+ for (fptr = FileRouterData(theEnv)->ListOfFileRouters;
420
+ fptr != NULL;
421
+ fptr = fptr->next)
422
+ {
423
+ if (strcmp(fptr->logicalName,fid) == 0)
424
+ {
425
+ GenRewind(theEnv,fptr->stream);
426
+ return true;
427
+ }
428
+ }
429
+
430
+ return false;
431
+ }
432
+
433
+ /**************************************************/
434
+ /* TellFile: Returns the file position associated */
435
+ /* with the specified logical name. */
436
+ /**************************************************/
437
+ long long TellFile(
438
+ Environment *theEnv,
439
+ const char *fid)
440
+ {
441
+ struct fileRouter *fptr;
442
+
443
+ for (fptr = FileRouterData(theEnv)->ListOfFileRouters;
444
+ fptr != NULL;
445
+ fptr = fptr->next)
446
+ {
447
+ if (strcmp(fptr->logicalName,fid) == 0)
448
+ { return GenTell(theEnv,fptr->stream); }
449
+ }
450
+
451
+ return LLONG_MIN;
452
+ }
453
+
454
+ /***********************************************/
455
+ /* SeekFile: Sets the file position associated */
456
+ /* with the specified logical name. */
457
+ /***********************************************/
458
+ bool SeekFile(
459
+ Environment *theEnv,
460
+ const char *fid,
461
+ long offset,
462
+ int whereFrom)
463
+ {
464
+ struct fileRouter *fptr;
465
+
466
+ for (fptr = FileRouterData(theEnv)->ListOfFileRouters;
467
+ fptr != NULL;
468
+ fptr = fptr->next)
469
+ {
470
+ if (strcmp(fptr->logicalName,fid) == 0)
471
+ {
472
+ if (GenSeek(theEnv,fptr->stream,offset,whereFrom))
473
+ { return false; }
474
+ else
475
+ { return true; }
476
+ }
477
+ }
478
+
479
+ return false;
480
+ }
481
+
@@ -0,0 +1,94 @@
1
+ /*******************************************************/
2
+ /* "C" Language Integrated Production System */
3
+ /* */
4
+ /* CLIPS Version 6.40 10/19/17 */
5
+ /* */
6
+ /* FILE I/O ROUTER HEADER FILE */
7
+ /*******************************************************/
8
+
9
+ /*************************************************************/
10
+ /* Purpose: I/O Router routines which allow files to be used */
11
+ /* as input and output sources. */
12
+ /* */
13
+ /* Principal Programmer(s): */
14
+ /* Gary D. Riley */
15
+ /* */
16
+ /* Contributing Programmer(s): */
17
+ /* */
18
+ /* Revision History: */
19
+ /* */
20
+ /* 6.24: Added environment parameter to GenClose. */
21
+ /* Added environment parameter to GenOpen. */
22
+ /* */
23
+ /* Added pragmas to remove compilation warnings. */
24
+ /* */
25
+ /* 6.30: Removed conditional code for unsupported */
26
+ /* compilers/operating systems (IBM_MCW, */
27
+ /* MAC_MCW, and IBM_TBC). */
28
+ /* */
29
+ /* Used gengetc and genungetchar rather than */
30
+ /* getc and ungetc. */
31
+ /* */
32
+ /* Replaced BASIC_IO and ADVANCED_IO compiler */
33
+ /* flags with the single IO_FUNCTIONS compiler */
34
+ /* flag. */
35
+ /* */
36
+ /* Added const qualifiers to remove C++ */
37
+ /* deprecation warnings. */
38
+ /* */
39
+ /* 6.40: Removed LOCALE definition. */
40
+ /* */
41
+ /* Pragma once and other inclusion changes. */
42
+ /* */
43
+ /* Added support for booleans with <stdbool.h>. */
44
+ /* */
45
+ /* Removed use of void pointers for specific */
46
+ /* data structures. */
47
+ /* */
48
+ /* Added flush, rewind, tell, and seek functions. */
49
+ /* */
50
+ /*************************************************************/
51
+
52
+ #ifndef _H_filertr
53
+
54
+ #pragma once
55
+
56
+ #define _H_filertr
57
+
58
+ #include <stdio.h>
59
+
60
+ #define FILE_ROUTER_DATA 47
61
+
62
+ struct fileRouter
63
+ {
64
+ const char *logicalName;
65
+ FILE *stream;
66
+ struct fileRouter *next;
67
+ };
68
+
69
+ struct fileRouterData
70
+ {
71
+ struct fileRouter *ListOfFileRouters;
72
+ };
73
+
74
+ #define FileRouterData(theEnv) ((struct fileRouterData *) GetEnvironmentData(theEnv,FILE_ROUTER_DATA))
75
+
76
+ void InitializeFileRouter(Environment *);
77
+ FILE *FindFptr(Environment *,const char *);
78
+ bool OpenAFile(Environment *,const char *,const char *,const char *);
79
+ bool CloseAllFiles(Environment *);
80
+ bool CloseFile(Environment *,const char *);
81
+ bool FindFile(Environment *,const char *,void *);
82
+ bool FlushAllFiles(Environment *);
83
+ bool FlushFile(Environment *,const char *);
84
+ bool RewindFile(Environment *,const char *);
85
+ long long TellFile(Environment *,const char *);
86
+ bool SeekFile(Environment *,const char *,long,int);
87
+
88
+ #endif /* _H_filertr */
89
+
90
+
91
+
92
+
93
+
94
+