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,856 @@
1
+ /*******************************************************/
2
+ /* "C" Language Integrated Production System */
3
+ /* */
4
+ /* CLIPS Version 6.40 07/30/16 */
5
+ /* */
6
+ /* SCANNER MODULE */
7
+ /*******************************************************/
8
+
9
+ /*************************************************************/
10
+ /* Purpose: Routines for scanning lexical tokens from an */
11
+ /* input source. */
12
+ /* */
13
+ /* Principal Programmer(s): */
14
+ /* Gary D. Riley */
15
+ /* */
16
+ /* Contributing Programmer(s): */
17
+ /* Chris Culbert */
18
+ /* Brian Dantes */
19
+ /* */
20
+ /* Revision History: */
21
+ /* */
22
+ /* 6.30: Changed integer type/precision. */
23
+ /* */
24
+ /* Support for long long integers. */
25
+ /* */
26
+ /* Added SetLineCount function. */
27
+ /* */
28
+ /* Added UTF-8 support. */
29
+ /* */
30
+ /* Added const qualifiers to remove C++ */
31
+ /* deprecation warnings. */
32
+ /* */
33
+ /* 6.40: Pragma once and other inclusion changes. */
34
+ /* */
35
+ /* Added support for booleans with <stdbool.h>. */
36
+ /* */
37
+ /* Removed use of void pointers for specific */
38
+ /* data structures. */
39
+ /* */
40
+ /*************************************************************/
41
+
42
+ #include <ctype.h>
43
+ #include <stdio.h>
44
+ #include <string.h>
45
+ #include <errno.h>
46
+ #include <stdlib.h>
47
+
48
+ #include "setup.h"
49
+
50
+ #include "constant.h"
51
+ #include "envrnmnt.h"
52
+ #include "memalloc.h"
53
+ #include "pprint.h"
54
+ #include "prntutil.h"
55
+ #include "router.h"
56
+ #include "symbol.h"
57
+ #include "sysdep.h"
58
+ #include "utility.h"
59
+
60
+ #include "scanner.h"
61
+
62
+ /***************************************/
63
+ /* LOCAL INTERNAL FUNCTION DEFINITIONS */
64
+ /***************************************/
65
+
66
+ static CLIPSLexeme *ScanSymbol(Environment *,const char *,int,TokenType *);
67
+ static CLIPSLexeme *ScanString(Environment *,const char *);
68
+ static void ScanNumber(Environment *,const char *,struct token *);
69
+ static void DeallocateScannerData(Environment *);
70
+
71
+ /************************************************/
72
+ /* InitializeScannerData: Allocates environment */
73
+ /* data for scanner routines. */
74
+ /************************************************/
75
+ void InitializeScannerData(
76
+ Environment *theEnv)
77
+ {
78
+ AllocateEnvironmentData(theEnv,SCANNER_DATA,sizeof(struct scannerData),DeallocateScannerData);
79
+ }
80
+
81
+ /**************************************************/
82
+ /* DeallocateScannerData: Deallocates environment */
83
+ /* data for scanner routines. */
84
+ /**************************************************/
85
+ static void DeallocateScannerData(
86
+ Environment *theEnv)
87
+ {
88
+ if (ScannerData(theEnv)->GlobalMax != 0)
89
+ { genfree(theEnv,ScannerData(theEnv)->GlobalString,ScannerData(theEnv)->GlobalMax); }
90
+ }
91
+
92
+ /***********************************************************************/
93
+ /* GetToken: Reads next token from the input stream. The pointer to */
94
+ /* the token data structure passed as an argument is set to contain */
95
+ /* the type of token (e.g., symbol, string, integer, etc.), the data */
96
+ /* value for the token (i.e., a symbol table location if it is a */
97
+ /* symbol or string, an integer table location if it is an integer), */
98
+ /* and the pretty print representation. */
99
+ /***********************************************************************/
100
+ void GetToken(
101
+ Environment *theEnv,
102
+ const char *logicalName,
103
+ struct token *theToken)
104
+ {
105
+ int inchar;
106
+ TokenType type;
107
+
108
+ /*=======================================*/
109
+ /* Set Unknown default values for token. */
110
+ /*=======================================*/
111
+
112
+ theToken->tknType = UNKNOWN_VALUE_TOKEN;
113
+ theToken->value = NULL;
114
+ theToken->printForm = "unknown";
115
+ ScannerData(theEnv)->GlobalPos = 0;
116
+ ScannerData(theEnv)->GlobalMax = 0;
117
+
118
+ /*==============================================*/
119
+ /* Remove all white space before processing the */
120
+ /* GetToken() request. */
121
+ /*==============================================*/
122
+
123
+ inchar = ReadRouter(theEnv,logicalName);
124
+ while ((inchar == ' ') || (inchar == '\n') || (inchar == '\f') ||
125
+ (inchar == '\r') || (inchar == ';') || (inchar == '\t'))
126
+ {
127
+ /*=======================*/
128
+ /* Remove comment lines. */
129
+ /*=======================*/
130
+
131
+ if (inchar == ';')
132
+ {
133
+ inchar = ReadRouter(theEnv,logicalName);
134
+ while ((inchar != '\n') && (inchar != '\r') && (inchar != EOF) )
135
+ { inchar = ReadRouter(theEnv,logicalName); }
136
+ }
137
+ inchar = ReadRouter(theEnv,logicalName);
138
+ }
139
+
140
+ /*==========================*/
141
+ /* Process Symbolic Tokens. */
142
+ /*==========================*/
143
+
144
+ if (isalpha(inchar) || IsUTF8MultiByteStart(inchar))
145
+ {
146
+ theToken->tknType = SYMBOL_TOKEN;
147
+ UnreadRouter(theEnv,logicalName,inchar);
148
+ theToken->lexemeValue = ScanSymbol(theEnv,logicalName,0,&type);
149
+ theToken->printForm = theToken->lexemeValue->contents;
150
+ }
151
+
152
+ /*===============================================*/
153
+ /* Process Number Tokens beginning with a digit. */
154
+ /*===============================================*/
155
+
156
+ else if (isdigit(inchar))
157
+ {
158
+ UnreadRouter(theEnv,logicalName,inchar);
159
+ ScanNumber(theEnv,logicalName,theToken);
160
+ }
161
+
162
+ else switch (inchar)
163
+ {
164
+ /*========================*/
165
+ /* Process String Tokens. */
166
+ /*========================*/
167
+
168
+ case '"':
169
+ theToken->lexemeValue = ScanString(theEnv,logicalName);
170
+ theToken->tknType = STRING_TOKEN;
171
+ theToken->printForm = StringPrintForm(theEnv,theToken->lexemeValue->contents);
172
+ break;
173
+
174
+ /*=======================================*/
175
+ /* Process Tokens that might be numbers. */
176
+ /*=======================================*/
177
+
178
+ case '-':
179
+ case '.':
180
+ case '+':
181
+ UnreadRouter(theEnv,logicalName,inchar);
182
+ ScanNumber(theEnv,logicalName,theToken);
183
+ break;
184
+
185
+ /*===================================*/
186
+ /* Process ? and ?<variable> Tokens. */
187
+ /*===================================*/
188
+
189
+ case '?':
190
+ inchar = ReadRouter(theEnv,logicalName);
191
+ if (isalpha(inchar) || IsUTF8MultiByteStart(inchar)
192
+ #if DEFGLOBAL_CONSTRUCT
193
+ || (inchar == '*'))
194
+ #else
195
+ )
196
+ #endif
197
+ {
198
+ UnreadRouter(theEnv,logicalName,inchar);
199
+ theToken->lexemeValue = ScanSymbol(theEnv,logicalName,0,&type);
200
+ theToken->tknType = SF_VARIABLE_TOKEN;
201
+ #if DEFGLOBAL_CONSTRUCT
202
+ if ((theToken->lexemeValue->contents[0] == '*') &&
203
+ ((strlen(theToken->lexemeValue->contents)) > 1) &&
204
+ (theToken->lexemeValue->contents[strlen(theToken->lexemeValue->contents) - 1] == '*'))
205
+ {
206
+ size_t count;
207
+
208
+ theToken->tknType = GBL_VARIABLE_TOKEN;
209
+ theToken->printForm = AppendStrings(theEnv,"?",theToken->lexemeValue->contents);
210
+ count = strlen(ScannerData(theEnv)->GlobalString);
211
+ ScannerData(theEnv)->GlobalString[count-1] = EOS;
212
+ theToken->lexemeValue = CreateSymbol(theEnv,ScannerData(theEnv)->GlobalString+1);
213
+ ScannerData(theEnv)->GlobalString[count-1] = (char) inchar;
214
+
215
+ }
216
+ else
217
+ #endif
218
+ theToken->printForm = AppendStrings(theEnv,"?",theToken->lexemeValue->contents);
219
+ }
220
+ else
221
+ {
222
+ theToken->tknType = SF_WILDCARD_TOKEN;
223
+ theToken->lexemeValue = CreateSymbol(theEnv,"?");
224
+ UnreadRouter(theEnv,logicalName,inchar);
225
+ theToken->printForm = "?";
226
+ }
227
+ break;
228
+
229
+ /*=====================================*/
230
+ /* Process $? and $?<variable> Tokens. */
231
+ /*=====================================*/
232
+
233
+ case '$':
234
+ if ((inchar = ReadRouter(theEnv,logicalName)) == '?')
235
+ {
236
+ inchar = ReadRouter(theEnv,logicalName);
237
+ if (isalpha(inchar) || IsUTF8MultiByteStart(inchar)
238
+ #if DEFGLOBAL_CONSTRUCT
239
+ || (inchar == '*'))
240
+ #else
241
+ )
242
+ #endif
243
+ {
244
+ UnreadRouter(theEnv,logicalName,inchar);
245
+ theToken->lexemeValue = ScanSymbol(theEnv,logicalName,0,&type);
246
+ theToken->tknType = MF_VARIABLE_TOKEN;
247
+ #if DEFGLOBAL_CONSTRUCT
248
+ if ((theToken->lexemeValue->contents[0] == '*') &&
249
+ (strlen(theToken->lexemeValue->contents) > 1) &&
250
+ (theToken->lexemeValue->contents[strlen(theToken->lexemeValue->contents) - 1] == '*'))
251
+ {
252
+ size_t count;
253
+
254
+ theToken->tknType = MF_GBL_VARIABLE_TOKEN;
255
+ theToken->printForm = AppendStrings(theEnv,"$?",theToken->lexemeValue->contents);
256
+ count = strlen(ScannerData(theEnv)->GlobalString);
257
+ ScannerData(theEnv)->GlobalString[count-1] = EOS;
258
+ theToken->lexemeValue = CreateSymbol(theEnv,ScannerData(theEnv)->GlobalString+1);
259
+ ScannerData(theEnv)->GlobalString[count-1] = (char) inchar;
260
+ }
261
+ else
262
+ #endif
263
+ theToken->printForm = AppendStrings(theEnv,"$?",theToken->lexemeValue->contents);
264
+ }
265
+ else
266
+ {
267
+ theToken->tknType = MF_WILDCARD_TOKEN;
268
+ theToken->lexemeValue = CreateSymbol(theEnv,"$?");
269
+ theToken->printForm = "$?";
270
+ UnreadRouter(theEnv,logicalName,inchar);
271
+ }
272
+ }
273
+ else
274
+ {
275
+ theToken->tknType = SYMBOL_TOKEN;
276
+ ScannerData(theEnv)->GlobalString = ExpandStringWithChar(theEnv,'$',ScannerData(theEnv)->GlobalString,&ScannerData(theEnv)->GlobalPos,&ScannerData(theEnv)->GlobalMax,ScannerData(theEnv)->GlobalMax+80);
277
+ UnreadRouter(theEnv,logicalName,inchar);
278
+ theToken->lexemeValue = ScanSymbol(theEnv,logicalName,1,&type);
279
+ theToken->printForm = theToken->lexemeValue->contents;
280
+ }
281
+ break;
282
+
283
+ /*============================*/
284
+ /* Symbols beginning with '<' */
285
+ /*============================*/
286
+
287
+ case '<':
288
+ theToken->tknType = SYMBOL_TOKEN;
289
+ ScannerData(theEnv)->GlobalString = ExpandStringWithChar(theEnv,'<',ScannerData(theEnv)->GlobalString,&ScannerData(theEnv)->GlobalPos,&ScannerData(theEnv)->GlobalMax,ScannerData(theEnv)->GlobalMax+80);
290
+ theToken->lexemeValue = ScanSymbol(theEnv,logicalName,1,&type);
291
+ theToken->printForm = theToken->lexemeValue->contents;
292
+ break;
293
+
294
+ /*=============================================*/
295
+ /* Process "(", ")", "~", "|", and "&" Tokens. */
296
+ /*=============================================*/
297
+
298
+ case '(':
299
+ theToken->tknType = LEFT_PARENTHESIS_TOKEN;
300
+ theToken->lexemeValue = CreateString(theEnv,"(");
301
+ theToken->printForm = "(";
302
+ break;
303
+
304
+ case ')':
305
+ theToken->tknType= RIGHT_PARENTHESIS_TOKEN;
306
+ theToken->lexemeValue = CreateString(theEnv,")");
307
+ theToken->printForm = ")";
308
+ break;
309
+
310
+ case '~':
311
+ theToken->tknType = NOT_CONSTRAINT_TOKEN;
312
+ theToken->lexemeValue = CreateString(theEnv,"~");
313
+ theToken->printForm = "~";
314
+ break;
315
+
316
+ case '|':
317
+ theToken->tknType = OR_CONSTRAINT_TOKEN;
318
+ theToken->lexemeValue = CreateString(theEnv,"|");
319
+ theToken->printForm = "|";
320
+ break;
321
+
322
+ case '&':
323
+ theToken->tknType = AND_CONSTRAINT_TOKEN;
324
+ theToken->lexemeValue = CreateString(theEnv,"&");
325
+ theToken->printForm = "&";
326
+ break;
327
+
328
+ /*============================*/
329
+ /* Process End-of-File Token. */
330
+ /*============================*/
331
+
332
+ case EOF:
333
+ case 0:
334
+ case 3:
335
+ theToken->tknType = STOP_TOKEN;
336
+ theToken->lexemeValue = CreateSymbol(theEnv,"stop");
337
+ theToken->printForm = "";
338
+ break;
339
+
340
+ /*=======================*/
341
+ /* Process Other Tokens. */
342
+ /*=======================*/
343
+
344
+ default:
345
+ if (isprint(inchar))
346
+ {
347
+ UnreadRouter(theEnv,logicalName,inchar);
348
+ theToken->lexemeValue = ScanSymbol(theEnv,logicalName,0,&type);
349
+ theToken->tknType = type;
350
+ theToken->printForm = theToken->lexemeValue->contents;
351
+ }
352
+ else
353
+ { theToken->printForm = "<<<unprintable character>>>"; }
354
+ break;
355
+ }
356
+
357
+ /*===============================================*/
358
+ /* Put the new token in the pretty print buffer. */
359
+ /*===============================================*/
360
+
361
+ #if (! RUN_TIME) && (! BLOAD_ONLY)
362
+ if (theToken->tknType == INSTANCE_NAME_TOKEN)
363
+ {
364
+ SavePPBuffer(theEnv,"[");
365
+ SavePPBuffer(theEnv,theToken->printForm);
366
+ SavePPBuffer(theEnv,"]");
367
+ }
368
+ else
369
+ { SavePPBuffer(theEnv,theToken->printForm); }
370
+ #endif
371
+
372
+ /*=========================================================*/
373
+ /* Return the temporary memory used in scanning the token. */
374
+ /*=========================================================*/
375
+
376
+ if (ScannerData(theEnv)->GlobalString != NULL)
377
+ {
378
+ rm(theEnv,ScannerData(theEnv)->GlobalString,ScannerData(theEnv)->GlobalMax);
379
+ ScannerData(theEnv)->GlobalString = NULL;
380
+ ScannerData(theEnv)->GlobalMax = 0;
381
+ ScannerData(theEnv)->GlobalPos = 0;
382
+ }
383
+
384
+ return;
385
+ }
386
+
387
+ /*************************************/
388
+ /* ScanSymbol: Scans a symbol token. */
389
+ /*************************************/
390
+ static CLIPSLexeme *ScanSymbol(
391
+ Environment *theEnv,
392
+ const char *logicalName,
393
+ int count,
394
+ TokenType *type)
395
+ {
396
+ int inchar;
397
+ #if OBJECT_SYSTEM
398
+ CLIPSLexeme *symbol;
399
+ #endif
400
+
401
+ /*=====================================*/
402
+ /* Scan characters and add them to the */
403
+ /* symbol until a delimiter is found. */
404
+ /*=====================================*/
405
+
406
+ inchar = ReadRouter(theEnv,logicalName);
407
+ while ( (inchar != '<') && (inchar != '"') &&
408
+ (inchar != '(') && (inchar != ')') &&
409
+ (inchar != '&') && (inchar != '|') && (inchar != '~') &&
410
+ (inchar != ' ') && (inchar != ';') &&
411
+ (IsUTF8MultiByteStart(inchar) ||
412
+ IsUTF8MultiByteContinuation(inchar) ||
413
+ isprint(inchar)))
414
+ {
415
+ ScannerData(theEnv)->GlobalString = ExpandStringWithChar(theEnv,inchar,ScannerData(theEnv)->GlobalString,&ScannerData(theEnv)->GlobalPos,&ScannerData(theEnv)->GlobalMax,ScannerData(theEnv)->GlobalMax+80);
416
+
417
+ count++;
418
+ inchar = ReadRouter(theEnv,logicalName);
419
+ }
420
+
421
+ /*===================================================*/
422
+ /* Return the last character scanned (the delimiter) */
423
+ /* to the input stream so it will be scanned as part */
424
+ /* of the next token. */
425
+ /*===================================================*/
426
+
427
+ UnreadRouter(theEnv,logicalName,inchar);
428
+
429
+ /*====================================================*/
430
+ /* Add the symbol to the symbol table and return the */
431
+ /* symbol table address of the symbol. Symbols of the */
432
+ /* form [<symbol>] are instance names, so the type */
433
+ /* returned is INSTANCE_NAME_TYPE rather than SYMBOL_TYPE. */
434
+ /*====================================================*/
435
+
436
+ #if OBJECT_SYSTEM
437
+ if (count > 2)
438
+ {
439
+ if ((ScannerData(theEnv)->GlobalString[0] == '[') ? (ScannerData(theEnv)->GlobalString[count-1] == ']') : false)
440
+ {
441
+ *type = INSTANCE_NAME_TOKEN;
442
+ inchar = ']';
443
+ }
444
+ else
445
+ {
446
+ *type = SYMBOL_TOKEN;
447
+ return CreateSymbol(theEnv,ScannerData(theEnv)->GlobalString);
448
+ }
449
+ ScannerData(theEnv)->GlobalString[count-1] = EOS;
450
+ symbol = CreateInstanceName(theEnv,ScannerData(theEnv)->GlobalString+1);
451
+ ScannerData(theEnv)->GlobalString[count-1] = (char) inchar;
452
+ return symbol;
453
+ }
454
+ else
455
+ {
456
+ *type = SYMBOL_TOKEN;
457
+ return CreateSymbol(theEnv,ScannerData(theEnv)->GlobalString);
458
+ }
459
+ #else
460
+ *type = SYMBOL_TOKEN;
461
+ return CreateSymbol(theEnv,ScannerData(theEnv)->GlobalString);
462
+ #endif
463
+ }
464
+
465
+ /*************************************/
466
+ /* ScanString: Scans a string token. */
467
+ /*************************************/
468
+ static CLIPSLexeme *ScanString(
469
+ Environment *theEnv,
470
+ const char *logicalName)
471
+ {
472
+ int inchar;
473
+ size_t pos = 0;
474
+ size_t max = 0;
475
+ char *theString = NULL;
476
+ CLIPSLexeme *thePtr;
477
+
478
+ /*============================================*/
479
+ /* Scan characters and add them to the string */
480
+ /* until the " delimiter is found. */
481
+ /*============================================*/
482
+
483
+ inchar = ReadRouter(theEnv,logicalName);
484
+ while ((inchar != '"') && (inchar != EOF))
485
+ {
486
+ if (inchar == '\\')
487
+ { inchar = ReadRouter(theEnv,logicalName); }
488
+
489
+ theString = ExpandStringWithChar(theEnv,inchar,theString,&pos,&max,max+80);
490
+ inchar = ReadRouter(theEnv,logicalName);
491
+ }
492
+
493
+ if ((inchar == EOF) && (ScannerData(theEnv)->IgnoreCompletionErrors == false))
494
+ {
495
+ PrintErrorID(theEnv,"SCANNER",1,true);
496
+ WriteString(theEnv,STDERR,"Encountered End-Of-File while scanning a string\n");
497
+ }
498
+
499
+ /*===============================================*/
500
+ /* Add the string to the symbol table and return */
501
+ /* the symbol table address of the string. */
502
+ /*===============================================*/
503
+
504
+ if (theString == NULL)
505
+ { thePtr = CreateString(theEnv,""); }
506
+ else
507
+ {
508
+ thePtr = CreateString(theEnv,theString);
509
+ rm(theEnv,theString,max);
510
+ }
511
+
512
+ return thePtr;
513
+ }
514
+
515
+ /**************************************/
516
+ /* ScanNumber: Scans a numeric token. */
517
+ /**************************************/
518
+ static void ScanNumber(
519
+ Environment *theEnv,
520
+ const char *logicalName,
521
+ struct token *theToken)
522
+ {
523
+ int count = 0;
524
+ int inchar, phase;
525
+ bool digitFound = false;
526
+ bool processFloat = false;
527
+ double fvalue;
528
+ long long lvalue;
529
+ TokenType type;
530
+
531
+ /* Phases: */
532
+ /* -1 = sign */
533
+ /* 0 = integral */
534
+ /* 1 = decimal */
535
+ /* 2 = exponent-begin */
536
+ /* 3 = exponent-value */
537
+ /* 5 = done */
538
+ /* 9 = error */
539
+
540
+ inchar = ReadRouter(theEnv,logicalName);
541
+ phase = -1;
542
+
543
+ while ((phase != 5) && (phase != 9))
544
+ {
545
+ if (phase == -1)
546
+ {
547
+ if (isdigit(inchar))
548
+ {
549
+ phase = 0;
550
+ digitFound = true;
551
+ ScannerData(theEnv)->GlobalString = ExpandStringWithChar(theEnv,inchar,ScannerData(theEnv)->GlobalString,&ScannerData(theEnv)->GlobalPos,&ScannerData(theEnv)->GlobalMax,ScannerData(theEnv)->GlobalMax+80);
552
+ count++;
553
+ }
554
+ else if ((inchar == '+') || (inchar == '-'))
555
+ {
556
+ phase = 0;
557
+ ScannerData(theEnv)->GlobalString = ExpandStringWithChar(theEnv,inchar,ScannerData(theEnv)->GlobalString,&ScannerData(theEnv)->GlobalPos,&ScannerData(theEnv)->GlobalMax,ScannerData(theEnv)->GlobalMax+80);
558
+ count++;
559
+ }
560
+ else if (inchar == '.')
561
+ {
562
+ processFloat = true;
563
+ ScannerData(theEnv)->GlobalString = ExpandStringWithChar(theEnv,inchar,ScannerData(theEnv)->GlobalString,&ScannerData(theEnv)->GlobalPos,&ScannerData(theEnv)->GlobalMax,ScannerData(theEnv)->GlobalMax+80);
564
+ count++;
565
+ phase = 1;
566
+ }
567
+ else if ((inchar == 'E') || (inchar == 'e'))
568
+ {
569
+ processFloat = true;
570
+ ScannerData(theEnv)->GlobalString = ExpandStringWithChar(theEnv,inchar,ScannerData(theEnv)->GlobalString,&ScannerData(theEnv)->GlobalPos,&ScannerData(theEnv)->GlobalMax,ScannerData(theEnv)->GlobalMax+80);
571
+ count++;
572
+ phase = 2;
573
+ }
574
+ else if ( (inchar == '<') || (inchar == '"') ||
575
+ (inchar == '(') || (inchar == ')') ||
576
+ (inchar == '&') || (inchar == '|') || (inchar == '~') ||
577
+ (inchar == ' ') || (inchar == ';') ||
578
+ (isprint(inchar) == 0) )
579
+ { phase = 5; }
580
+ else
581
+ {
582
+ phase = 9;
583
+ ScannerData(theEnv)->GlobalString = ExpandStringWithChar(theEnv,inchar,ScannerData(theEnv)->GlobalString,&ScannerData(theEnv)->GlobalPos,&ScannerData(theEnv)->GlobalMax,ScannerData(theEnv)->GlobalMax+80);
584
+ count++;
585
+ }
586
+ }
587
+ else if (phase == 0)
588
+ {
589
+ if (isdigit(inchar))
590
+ {
591
+ digitFound = true;
592
+ ScannerData(theEnv)->GlobalString = ExpandStringWithChar(theEnv,inchar,ScannerData(theEnv)->GlobalString,&ScannerData(theEnv)->GlobalPos,&ScannerData(theEnv)->GlobalMax,ScannerData(theEnv)->GlobalMax+80);
593
+ count++;
594
+ }
595
+ else if (inchar == '.')
596
+ {
597
+ processFloat = true;
598
+ ScannerData(theEnv)->GlobalString = ExpandStringWithChar(theEnv,inchar,ScannerData(theEnv)->GlobalString,&ScannerData(theEnv)->GlobalPos,&ScannerData(theEnv)->GlobalMax,ScannerData(theEnv)->GlobalMax+80);
599
+ count++;
600
+ phase = 1;
601
+ }
602
+ else if ((inchar == 'E') || (inchar == 'e'))
603
+ {
604
+ processFloat = true;
605
+ ScannerData(theEnv)->GlobalString = ExpandStringWithChar(theEnv,inchar,ScannerData(theEnv)->GlobalString,&ScannerData(theEnv)->GlobalPos,&ScannerData(theEnv)->GlobalMax,ScannerData(theEnv)->GlobalMax+80);
606
+ count++;
607
+ phase = 2;
608
+ }
609
+ else if ( (inchar == '<') || (inchar == '"') ||
610
+ (inchar == '(') || (inchar == ')') ||
611
+ (inchar == '&') || (inchar == '|') || (inchar == '~') ||
612
+ (inchar == ' ') || (inchar == ';') ||
613
+ ((! IsUTF8MultiByteStart(inchar) && (isprint(inchar) == 0))))
614
+ { phase = 5; }
615
+ else
616
+ {
617
+ phase = 9;
618
+ ScannerData(theEnv)->GlobalString = ExpandStringWithChar(theEnv,inchar,ScannerData(theEnv)->GlobalString,&ScannerData(theEnv)->GlobalPos,&ScannerData(theEnv)->GlobalMax,ScannerData(theEnv)->GlobalMax+80);
619
+ count++;
620
+ }
621
+ }
622
+ else if (phase == 1)
623
+ {
624
+ if (isdigit(inchar))
625
+ {
626
+ digitFound = true;
627
+ ScannerData(theEnv)->GlobalString = ExpandStringWithChar(theEnv,inchar,ScannerData(theEnv)->GlobalString,&ScannerData(theEnv)->GlobalPos,&ScannerData(theEnv)->GlobalMax,ScannerData(theEnv)->GlobalMax+80);
628
+ count++;
629
+ }
630
+ else if ((inchar == 'E') || (inchar == 'e'))
631
+ {
632
+ ScannerData(theEnv)->GlobalString = ExpandStringWithChar(theEnv,inchar,ScannerData(theEnv)->GlobalString,&ScannerData(theEnv)->GlobalPos,&ScannerData(theEnv)->GlobalMax,ScannerData(theEnv)->GlobalMax+80);
633
+ count++;
634
+ phase = 2;
635
+ }
636
+ else if ( (inchar == '<') || (inchar == '"') ||
637
+ (inchar == '(') || (inchar == ')') ||
638
+ (inchar == '&') || (inchar == '|') || (inchar == '~') ||
639
+ (inchar == ' ') || (inchar == ';') ||
640
+ ((! IsUTF8MultiByteStart(inchar)) && (isprint(inchar) == 0)) )
641
+ { phase = 5; }
642
+ else
643
+ {
644
+ phase = 9;
645
+ ScannerData(theEnv)->GlobalString = ExpandStringWithChar(theEnv,inchar,ScannerData(theEnv)->GlobalString,&ScannerData(theEnv)->GlobalPos,&ScannerData(theEnv)->GlobalMax,ScannerData(theEnv)->GlobalMax+80);
646
+ count++;
647
+ }
648
+ }
649
+ else if (phase == 2)
650
+ {
651
+ if (isdigit(inchar))
652
+ {
653
+ ScannerData(theEnv)->GlobalString = ExpandStringWithChar(theEnv,inchar,ScannerData(theEnv)->GlobalString,&ScannerData(theEnv)->GlobalPos,&ScannerData(theEnv)->GlobalMax,ScannerData(theEnv)->GlobalMax+80);
654
+ count++;
655
+ phase = 3;
656
+ }
657
+ else if ((inchar == '+') || (inchar == '-'))
658
+ {
659
+ ScannerData(theEnv)->GlobalString = ExpandStringWithChar(theEnv,inchar,ScannerData(theEnv)->GlobalString,&ScannerData(theEnv)->GlobalPos,&ScannerData(theEnv)->GlobalMax,ScannerData(theEnv)->GlobalMax+80);
660
+ count++;
661
+ phase = 3;
662
+ }
663
+ else if ( (inchar == '<') || (inchar == '"') ||
664
+ (inchar == '(') || (inchar == ')') ||
665
+ (inchar == '&') || (inchar == '|') || (inchar == '~') ||
666
+ (inchar == ' ') || (inchar == ';') ||
667
+ ((! IsUTF8MultiByteStart(inchar)) && (isprint(inchar) == 0)) )
668
+ {
669
+ digitFound = false;
670
+ phase = 5;
671
+ }
672
+ else
673
+ {
674
+ phase = 9;
675
+ ScannerData(theEnv)->GlobalString = ExpandStringWithChar(theEnv,inchar,ScannerData(theEnv)->GlobalString,&ScannerData(theEnv)->GlobalPos,&ScannerData(theEnv)->GlobalMax,ScannerData(theEnv)->GlobalMax+80);
676
+ count++;
677
+ }
678
+ }
679
+ else if (phase == 3)
680
+ {
681
+ if (isdigit(inchar))
682
+ {
683
+ ScannerData(theEnv)->GlobalString = ExpandStringWithChar(theEnv,inchar,ScannerData(theEnv)->GlobalString,&ScannerData(theEnv)->GlobalPos,&ScannerData(theEnv)->GlobalMax,ScannerData(theEnv)->GlobalMax+80);
684
+ count++;
685
+ }
686
+ else if ( (inchar == '<') || (inchar == '"') ||
687
+ (inchar == '(') || (inchar == ')') ||
688
+ (inchar == '&') || (inchar == '|') || (inchar == '~') ||
689
+ (inchar == ' ') || (inchar == ';') ||
690
+ ((! IsUTF8MultiByteStart(inchar)) && (isprint(inchar) == 0)) )
691
+ {
692
+ if ((ScannerData(theEnv)->GlobalString[count-1] == '+') || (ScannerData(theEnv)->GlobalString[count-1] == '-'))
693
+ { digitFound = false; }
694
+ phase = 5;
695
+ }
696
+ else
697
+ {
698
+ phase = 9;
699
+ ScannerData(theEnv)->GlobalString = ExpandStringWithChar(theEnv,inchar,ScannerData(theEnv)->GlobalString,&ScannerData(theEnv)->GlobalPos,&ScannerData(theEnv)->GlobalMax,ScannerData(theEnv)->GlobalMax+80);
700
+ count++;
701
+ }
702
+ }
703
+
704
+ if ((phase != 5) && (phase != 9))
705
+ { inchar = ReadRouter(theEnv,logicalName); }
706
+ }
707
+
708
+ if (phase == 9)
709
+ {
710
+ theToken->lexemeValue = ScanSymbol(theEnv,logicalName,count,&type);
711
+ theToken->tknType = type;
712
+ theToken->printForm = theToken->lexemeValue->contents;
713
+ return;
714
+ }
715
+
716
+ /*=======================================*/
717
+ /* Stuff last character back into buffer */
718
+ /* and return the number. */
719
+ /*=======================================*/
720
+
721
+ UnreadRouter(theEnv,logicalName,inchar);
722
+
723
+ if (! digitFound)
724
+ {
725
+ theToken->tknType = SYMBOL_TOKEN;
726
+ theToken->lexemeValue = CreateSymbol(theEnv,ScannerData(theEnv)->GlobalString);
727
+ theToken->printForm = theToken->lexemeValue->contents;
728
+ return;
729
+ }
730
+
731
+ if (processFloat)
732
+ {
733
+ fvalue = atof(ScannerData(theEnv)->GlobalString);
734
+ theToken->tknType = FLOAT_TOKEN;
735
+ theToken->floatValue = CreateFloat(theEnv,fvalue);
736
+ theToken->printForm = FloatToString(theEnv,theToken->floatValue->contents);
737
+ }
738
+ else
739
+ {
740
+ errno = 0;
741
+ #if WIN_MVC
742
+ lvalue = _strtoi64(ScannerData(theEnv)->GlobalString,NULL,10);
743
+ #else
744
+ lvalue = strtoll(ScannerData(theEnv)->GlobalString,NULL,10);
745
+ #endif
746
+ if (errno)
747
+ {
748
+ PrintWarningID(theEnv,"SCANNER",1,false);
749
+ WriteString(theEnv,STDWRN,"Over or underflow of long long integer.\n");
750
+ }
751
+ theToken->tknType = INTEGER_TOKEN;
752
+ theToken->integerValue = CreateInteger(theEnv,lvalue);
753
+ theToken->printForm = LongIntegerToString(theEnv,theToken->integerValue->contents);
754
+ }
755
+
756
+ return;
757
+ }
758
+
759
+ /***********************************************************/
760
+ /* CopyToken: Copies values of one token to another token. */
761
+ /***********************************************************/
762
+ void CopyToken(
763
+ struct token *destination,
764
+ struct token *source)
765
+ {
766
+ destination->tknType = source->tknType;
767
+ destination->value = source->value;
768
+ destination->printForm = source->printForm;
769
+ }
770
+
771
+ /****************************************/
772
+ /* ResetLineCount: Resets the scanner's */
773
+ /* line count to zero. */
774
+ /****************************************/
775
+ void ResetLineCount(
776
+ Environment *theEnv)
777
+ {
778
+ ScannerData(theEnv)->LineCount = 0;
779
+ }
780
+
781
+ /***************************************************/
782
+ /* GetLineCount: Returns the scanner's line count. */
783
+ /***************************************************/
784
+ long GetLineCount(
785
+ Environment *theEnv)
786
+ {
787
+ return(ScannerData(theEnv)->LineCount);
788
+ }
789
+
790
+ /***********************************************/
791
+ /* SetLineCount: Sets the scanner's line count */
792
+ /* and returns the previous value. */
793
+ /***********************************************/
794
+ long SetLineCount(
795
+ Environment *theEnv,
796
+ long value)
797
+ {
798
+ long oldValue;
799
+
800
+ oldValue = ScannerData(theEnv)->LineCount;
801
+
802
+ ScannerData(theEnv)->LineCount = value;
803
+
804
+ return(oldValue);
805
+ }
806
+
807
+ /**********************************/
808
+ /* IncrementLineCount: Increments */
809
+ /* the scanner's line count. */
810
+ /**********************************/
811
+ void IncrementLineCount(
812
+ Environment *theEnv)
813
+ {
814
+ ScannerData(theEnv)->LineCount++;
815
+ }
816
+
817
+ /**********************************/
818
+ /* DecrementLineCount: Decrements */
819
+ /* the scanner's line count. */
820
+ /**********************************/
821
+ void DecrementLineCount(
822
+ Environment *theEnv)
823
+ {
824
+ ScannerData(theEnv)->LineCount--;
825
+ }
826
+
827
+ /********************/
828
+ /* TokenTypeToType: */
829
+ /********************/
830
+ unsigned short TokenTypeToType(
831
+ TokenType theType)
832
+ {
833
+ switch (theType)
834
+ {
835
+ case FLOAT_TOKEN:
836
+ return FLOAT_TYPE;
837
+ case INTEGER_TOKEN:
838
+ return INTEGER_TYPE;
839
+ case SYMBOL_TOKEN:
840
+ return SYMBOL_TYPE;
841
+ case STRING_TOKEN:
842
+ return STRING_TYPE;
843
+ case INSTANCE_NAME_TOKEN:
844
+ return INSTANCE_NAME_TYPE;
845
+ case SF_VARIABLE_TOKEN:
846
+ return SF_VARIABLE;
847
+ case MF_VARIABLE_TOKEN:
848
+ return MF_VARIABLE;
849
+ case GBL_VARIABLE_TOKEN:
850
+ return GBL_VARIABLE;
851
+ case MF_GBL_VARIABLE_TOKEN:
852
+ return MF_GBL_VARIABLE;
853
+ default:
854
+ return VOID_TYPE;
855
+ }
856
+ }