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.
- checksums.yaml +7 -0
- data/ext/clipsruby/agenda.c +1373 -0
- data/ext/clipsruby/agenda.h +169 -0
- data/ext/clipsruby/analysis.c +1142 -0
- data/ext/clipsruby/analysis.h +61 -0
- data/ext/clipsruby/argacces.c +526 -0
- data/ext/clipsruby/argacces.h +77 -0
- data/ext/clipsruby/bload.c +884 -0
- data/ext/clipsruby/bload.h +94 -0
- data/ext/clipsruby/bmathfun.c +557 -0
- data/ext/clipsruby/bmathfun.h +66 -0
- data/ext/clipsruby/bsave.c +634 -0
- data/ext/clipsruby/bsave.h +130 -0
- data/ext/clipsruby/classcom.c +976 -0
- data/ext/clipsruby/classcom.h +115 -0
- data/ext/clipsruby/classexm.c +1376 -0
- data/ext/clipsruby/classexm.h +97 -0
- data/ext/clipsruby/classfun.c +1392 -0
- data/ext/clipsruby/classfun.h +164 -0
- data/ext/clipsruby/classinf.c +1245 -0
- data/ext/clipsruby/classinf.h +94 -0
- data/ext/clipsruby/classini.c +843 -0
- data/ext/clipsruby/classini.h +75 -0
- data/ext/clipsruby/classpsr.c +957 -0
- data/ext/clipsruby/classpsr.h +73 -0
- data/ext/clipsruby/clips.h +133 -0
- data/ext/clipsruby/clipsruby.c +619 -0
- data/ext/clipsruby/clsltpsr.c +931 -0
- data/ext/clipsruby/clsltpsr.h +72 -0
- data/ext/clipsruby/commline.c +1217 -0
- data/ext/clipsruby/commline.h +131 -0
- data/ext/clipsruby/conscomp.c +1593 -0
- data/ext/clipsruby/conscomp.h +150 -0
- data/ext/clipsruby/constant.h +264 -0
- data/ext/clipsruby/constrct.c +1090 -0
- data/ext/clipsruby/constrct.h +216 -0
- data/ext/clipsruby/constrnt.c +554 -0
- data/ext/clipsruby/constrnt.h +132 -0
- data/ext/clipsruby/crstrtgy.c +1088 -0
- data/ext/clipsruby/crstrtgy.h +85 -0
- data/ext/clipsruby/cstrcbin.c +185 -0
- data/ext/clipsruby/cstrcbin.h +61 -0
- data/ext/clipsruby/cstrccmp.h +43 -0
- data/ext/clipsruby/cstrccom.c +1791 -0
- data/ext/clipsruby/cstrccom.h +115 -0
- data/ext/clipsruby/cstrcpsr.c +835 -0
- data/ext/clipsruby/cstrcpsr.h +97 -0
- data/ext/clipsruby/cstrnbin.c +282 -0
- data/ext/clipsruby/cstrnbin.h +55 -0
- data/ext/clipsruby/cstrnchk.c +826 -0
- data/ext/clipsruby/cstrnchk.h +91 -0
- data/ext/clipsruby/cstrncmp.c +238 -0
- data/ext/clipsruby/cstrncmp.h +57 -0
- data/ext/clipsruby/cstrnops.c +1176 -0
- data/ext/clipsruby/cstrnops.h +47 -0
- data/ext/clipsruby/cstrnpsr.c +1394 -0
- data/ext/clipsruby/cstrnpsr.h +88 -0
- data/ext/clipsruby/cstrnutl.c +564 -0
- data/ext/clipsruby/cstrnutl.h +54 -0
- data/ext/clipsruby/default.c +454 -0
- data/ext/clipsruby/default.h +57 -0
- data/ext/clipsruby/defins.c +971 -0
- data/ext/clipsruby/defins.h +127 -0
- data/ext/clipsruby/developr.c +677 -0
- data/ext/clipsruby/developr.h +69 -0
- data/ext/clipsruby/dffctbin.c +477 -0
- data/ext/clipsruby/dffctbin.h +76 -0
- data/ext/clipsruby/dffctbsc.c +308 -0
- data/ext/clipsruby/dffctbsc.h +72 -0
- data/ext/clipsruby/dffctcmp.c +297 -0
- data/ext/clipsruby/dffctcmp.h +44 -0
- data/ext/clipsruby/dffctdef.c +364 -0
- data/ext/clipsruby/dffctdef.h +104 -0
- data/ext/clipsruby/dffctpsr.c +179 -0
- data/ext/clipsruby/dffctpsr.h +49 -0
- data/ext/clipsruby/dffnxbin.c +520 -0
- data/ext/clipsruby/dffnxbin.h +67 -0
- data/ext/clipsruby/dffnxcmp.c +378 -0
- data/ext/clipsruby/dffnxcmp.h +54 -0
- data/ext/clipsruby/dffnxexe.c +241 -0
- data/ext/clipsruby/dffnxexe.h +58 -0
- data/ext/clipsruby/dffnxfun.c +1192 -0
- data/ext/clipsruby/dffnxfun.h +155 -0
- data/ext/clipsruby/dffnxpsr.c +514 -0
- data/ext/clipsruby/dffnxpsr.h +57 -0
- data/ext/clipsruby/dfinsbin.c +509 -0
- data/ext/clipsruby/dfinsbin.h +66 -0
- data/ext/clipsruby/dfinscmp.c +345 -0
- data/ext/clipsruby/dfinscmp.h +48 -0
- data/ext/clipsruby/drive.c +1191 -0
- data/ext/clipsruby/drive.h +65 -0
- data/ext/clipsruby/emathfun.c +1213 -0
- data/ext/clipsruby/emathfun.h +99 -0
- data/ext/clipsruby/engine.c +1568 -0
- data/ext/clipsruby/engine.h +203 -0
- data/ext/clipsruby/entities.h +276 -0
- data/ext/clipsruby/envrnbld.c +514 -0
- data/ext/clipsruby/envrnbld.h +40 -0
- data/ext/clipsruby/envrnmnt.c +257 -0
- data/ext/clipsruby/envrnmnt.h +112 -0
- data/ext/clipsruby/evaluatn.c +1736 -0
- data/ext/clipsruby/evaluatn.h +211 -0
- data/ext/clipsruby/expressn.c +494 -0
- data/ext/clipsruby/expressn.h +154 -0
- data/ext/clipsruby/exprnbin.c +538 -0
- data/ext/clipsruby/exprnbin.h +60 -0
- data/ext/clipsruby/exprnops.c +564 -0
- data/ext/clipsruby/exprnops.h +67 -0
- data/ext/clipsruby/exprnpsr.c +1112 -0
- data/ext/clipsruby/exprnpsr.h +98 -0
- data/ext/clipsruby/extconf.rb +2 -0
- data/ext/clipsruby/extnfunc.c +1015 -0
- data/ext/clipsruby/extnfunc.h +157 -0
- data/ext/clipsruby/factbin.c +447 -0
- data/ext/clipsruby/factbin.h +56 -0
- data/ext/clipsruby/factbld.c +1035 -0
- data/ext/clipsruby/factbld.h +63 -0
- data/ext/clipsruby/factcmp.c +386 -0
- data/ext/clipsruby/factcmp.h +46 -0
- data/ext/clipsruby/factcom.c +759 -0
- data/ext/clipsruby/factcom.h +80 -0
- data/ext/clipsruby/factfile.c +1761 -0
- data/ext/clipsruby/factfile.h +54 -0
- data/ext/clipsruby/factfun.c +682 -0
- data/ext/clipsruby/factfun.h +77 -0
- data/ext/clipsruby/factgen.c +1305 -0
- data/ext/clipsruby/factgen.h +229 -0
- data/ext/clipsruby/facthsh.c +438 -0
- data/ext/clipsruby/facthsh.h +81 -0
- data/ext/clipsruby/factlhs.c +250 -0
- data/ext/clipsruby/factlhs.h +54 -0
- data/ext/clipsruby/factmch.c +905 -0
- data/ext/clipsruby/factmch.h +68 -0
- data/ext/clipsruby/factmngr.c +3373 -0
- data/ext/clipsruby/factmngr.h +325 -0
- data/ext/clipsruby/factprt.c +498 -0
- data/ext/clipsruby/factprt.h +60 -0
- data/ext/clipsruby/factqpsr.c +796 -0
- data/ext/clipsruby/factqpsr.h +61 -0
- data/ext/clipsruby/factqury.c +1267 -0
- data/ext/clipsruby/factqury.h +112 -0
- data/ext/clipsruby/factrete.c +978 -0
- data/ext/clipsruby/factrete.h +70 -0
- data/ext/clipsruby/factrhs.c +667 -0
- data/ext/clipsruby/factrhs.h +55 -0
- data/ext/clipsruby/filecom.c +353 -0
- data/ext/clipsruby/filecom.h +137 -0
- data/ext/clipsruby/filertr.c +481 -0
- data/ext/clipsruby/filertr.h +94 -0
- data/ext/clipsruby/fileutil.c +1020 -0
- data/ext/clipsruby/fileutil.h +50 -0
- data/ext/clipsruby/generate.c +1079 -0
- data/ext/clipsruby/generate.h +57 -0
- data/ext/clipsruby/genrcbin.c +902 -0
- data/ext/clipsruby/genrcbin.h +69 -0
- data/ext/clipsruby/genrccmp.c +640 -0
- data/ext/clipsruby/genrccmp.h +59 -0
- data/ext/clipsruby/genrccom.c +2017 -0
- data/ext/clipsruby/genrccom.h +119 -0
- data/ext/clipsruby/genrcexe.c +737 -0
- data/ext/clipsruby/genrcexe.h +73 -0
- data/ext/clipsruby/genrcfun.c +890 -0
- data/ext/clipsruby/genrcfun.h +185 -0
- data/ext/clipsruby/genrcpsr.c +1618 -0
- data/ext/clipsruby/genrcpsr.h +80 -0
- data/ext/clipsruby/globlbin.c +458 -0
- data/ext/clipsruby/globlbin.h +71 -0
- data/ext/clipsruby/globlbsc.c +361 -0
- data/ext/clipsruby/globlbsc.h +83 -0
- data/ext/clipsruby/globlcmp.c +330 -0
- data/ext/clipsruby/globlcmp.h +52 -0
- data/ext/clipsruby/globlcom.c +289 -0
- data/ext/clipsruby/globlcom.h +63 -0
- data/ext/clipsruby/globldef.c +1087 -0
- data/ext/clipsruby/globldef.h +151 -0
- data/ext/clipsruby/globlpsr.c +530 -0
- data/ext/clipsruby/globlpsr.h +59 -0
- data/ext/clipsruby/immthpsr.c +431 -0
- data/ext/clipsruby/immthpsr.h +55 -0
- data/ext/clipsruby/incrrset.c +530 -0
- data/ext/clipsruby/incrrset.h +73 -0
- data/ext/clipsruby/inherpsr.c +850 -0
- data/ext/clipsruby/inherpsr.h +52 -0
- data/ext/clipsruby/inscom.c +2076 -0
- data/ext/clipsruby/inscom.h +182 -0
- data/ext/clipsruby/insfile.c +1764 -0
- data/ext/clipsruby/insfile.h +96 -0
- data/ext/clipsruby/insfun.c +1451 -0
- data/ext/clipsruby/insfun.h +134 -0
- data/ext/clipsruby/insmngr.c +2550 -0
- data/ext/clipsruby/insmngr.h +125 -0
- data/ext/clipsruby/insmoddp.c +1041 -0
- data/ext/clipsruby/insmoddp.h +91 -0
- data/ext/clipsruby/insmult.c +804 -0
- data/ext/clipsruby/insmult.h +62 -0
- data/ext/clipsruby/inspsr.c +602 -0
- data/ext/clipsruby/inspsr.h +60 -0
- data/ext/clipsruby/insquery.c +1278 -0
- data/ext/clipsruby/insquery.h +115 -0
- data/ext/clipsruby/insqypsr.c +729 -0
- data/ext/clipsruby/insqypsr.h +63 -0
- data/ext/clipsruby/iofun.c +2045 -0
- data/ext/clipsruby/iofun.h +116 -0
- data/ext/clipsruby/lgcldpnd.c +644 -0
- data/ext/clipsruby/lgcldpnd.h +75 -0
- data/ext/clipsruby/main.c +112 -0
- data/ext/clipsruby/match.h +142 -0
- data/ext/clipsruby/memalloc.c +481 -0
- data/ext/clipsruby/memalloc.h +197 -0
- data/ext/clipsruby/miscfun.c +1801 -0
- data/ext/clipsruby/miscfun.h +132 -0
- data/ext/clipsruby/modulbin.c +607 -0
- data/ext/clipsruby/modulbin.h +84 -0
- data/ext/clipsruby/modulbsc.c +347 -0
- data/ext/clipsruby/modulbsc.h +67 -0
- data/ext/clipsruby/modulcmp.c +499 -0
- data/ext/clipsruby/modulcmp.h +54 -0
- data/ext/clipsruby/moduldef.c +817 -0
- data/ext/clipsruby/moduldef.h +271 -0
- data/ext/clipsruby/modulpsr.c +1150 -0
- data/ext/clipsruby/modulpsr.h +69 -0
- data/ext/clipsruby/modulutl.c +1036 -0
- data/ext/clipsruby/modulutl.h +84 -0
- data/ext/clipsruby/msgcom.c +1221 -0
- data/ext/clipsruby/msgcom.h +125 -0
- data/ext/clipsruby/msgfun.c +1076 -0
- data/ext/clipsruby/msgfun.h +118 -0
- data/ext/clipsruby/msgpass.c +1441 -0
- data/ext/clipsruby/msgpass.h +103 -0
- data/ext/clipsruby/msgpsr.c +698 -0
- data/ext/clipsruby/msgpsr.h +73 -0
- data/ext/clipsruby/multifld.c +1404 -0
- data/ext/clipsruby/multifld.h +130 -0
- data/ext/clipsruby/multifun.c +2182 -0
- data/ext/clipsruby/multifun.h +102 -0
- data/ext/clipsruby/network.h +142 -0
- data/ext/clipsruby/objbin.c +1522 -0
- data/ext/clipsruby/objbin.h +79 -0
- data/ext/clipsruby/objcmp.c +1507 -0
- data/ext/clipsruby/objcmp.h +71 -0
- data/ext/clipsruby/object.h +260 -0
- data/ext/clipsruby/objrtbin.c +701 -0
- data/ext/clipsruby/objrtbin.h +79 -0
- data/ext/clipsruby/objrtbld.c +2393 -0
- data/ext/clipsruby/objrtbld.h +66 -0
- data/ext/clipsruby/objrtcmp.c +734 -0
- data/ext/clipsruby/objrtcmp.h +66 -0
- data/ext/clipsruby/objrtfnx.c +1330 -0
- data/ext/clipsruby/objrtfnx.h +222 -0
- data/ext/clipsruby/objrtgen.c +736 -0
- data/ext/clipsruby/objrtgen.h +63 -0
- data/ext/clipsruby/objrtmch.c +1524 -0
- data/ext/clipsruby/objrtmch.h +160 -0
- data/ext/clipsruby/parsefun.c +415 -0
- data/ext/clipsruby/parsefun.h +67 -0
- data/ext/clipsruby/pattern.c +1265 -0
- data/ext/clipsruby/pattern.h +163 -0
- data/ext/clipsruby/pprint.c +328 -0
- data/ext/clipsruby/pprint.h +79 -0
- data/ext/clipsruby/prccode.c +1478 -0
- data/ext/clipsruby/prccode.h +145 -0
- data/ext/clipsruby/prcdrfun.c +640 -0
- data/ext/clipsruby/prcdrfun.h +95 -0
- data/ext/clipsruby/prcdrpsr.c +1068 -0
- data/ext/clipsruby/prcdrpsr.h +79 -0
- data/ext/clipsruby/prdctfun.c +869 -0
- data/ext/clipsruby/prdctfun.h +77 -0
- data/ext/clipsruby/prntutil.c +878 -0
- data/ext/clipsruby/prntutil.h +125 -0
- data/ext/clipsruby/proflfun.c +827 -0
- data/ext/clipsruby/proflfun.h +118 -0
- data/ext/clipsruby/reorder.c +2082 -0
- data/ext/clipsruby/reorder.h +172 -0
- data/ext/clipsruby/reteutil.c +1732 -0
- data/ext/clipsruby/reteutil.h +111 -0
- data/ext/clipsruby/retract.c +710 -0
- data/ext/clipsruby/retract.h +74 -0
- data/ext/clipsruby/router.c +737 -0
- data/ext/clipsruby/router.h +147 -0
- data/ext/clipsruby/rulebin.c +1136 -0
- data/ext/clipsruby/rulebin.h +153 -0
- data/ext/clipsruby/rulebld.c +1328 -0
- data/ext/clipsruby/rulebld.h +62 -0
- data/ext/clipsruby/rulebsc.c +517 -0
- data/ext/clipsruby/rulebsc.h +91 -0
- data/ext/clipsruby/rulecmp.c +733 -0
- data/ext/clipsruby/rulecmp.h +63 -0
- data/ext/clipsruby/rulecom.c +1583 -0
- data/ext/clipsruby/rulecom.h +116 -0
- data/ext/clipsruby/rulecstr.c +892 -0
- data/ext/clipsruby/rulecstr.h +53 -0
- data/ext/clipsruby/ruledef.c +559 -0
- data/ext/clipsruby/ruledef.h +179 -0
- data/ext/clipsruby/ruledlt.c +599 -0
- data/ext/clipsruby/ruledlt.h +58 -0
- data/ext/clipsruby/rulelhs.c +1216 -0
- data/ext/clipsruby/rulelhs.h +52 -0
- data/ext/clipsruby/rulepsr.c +1073 -0
- data/ext/clipsruby/rulepsr.h +61 -0
- data/ext/clipsruby/scanner.c +856 -0
- data/ext/clipsruby/scanner.h +112 -0
- data/ext/clipsruby/setup.h +488 -0
- data/ext/clipsruby/sortfun.c +433 -0
- data/ext/clipsruby/sortfun.h +55 -0
- data/ext/clipsruby/strngfun.c +1173 -0
- data/ext/clipsruby/strngfun.h +96 -0
- data/ext/clipsruby/strngrtr.c +523 -0
- data/ext/clipsruby/strngrtr.h +97 -0
- data/ext/clipsruby/symblbin.c +648 -0
- data/ext/clipsruby/symblbin.h +64 -0
- data/ext/clipsruby/symblcmp.c +893 -0
- data/ext/clipsruby/symblcmp.h +61 -0
- data/ext/clipsruby/symbol.c +1961 -0
- data/ext/clipsruby/symbol.h +243 -0
- data/ext/clipsruby/sysdep.c +894 -0
- data/ext/clipsruby/sysdep.h +164 -0
- data/ext/clipsruby/textpro.c +1388 -0
- data/ext/clipsruby/textpro.h +77 -0
- data/ext/clipsruby/tmpltbin.c +609 -0
- data/ext/clipsruby/tmpltbin.h +108 -0
- data/ext/clipsruby/tmpltbsc.c +327 -0
- data/ext/clipsruby/tmpltbsc.h +87 -0
- data/ext/clipsruby/tmpltcmp.c +450 -0
- data/ext/clipsruby/tmpltcmp.h +57 -0
- data/ext/clipsruby/tmpltdef.c +584 -0
- data/ext/clipsruby/tmpltdef.h +155 -0
- data/ext/clipsruby/tmpltfun.c +2477 -0
- data/ext/clipsruby/tmpltfun.h +122 -0
- data/ext/clipsruby/tmpltlhs.c +379 -0
- data/ext/clipsruby/tmpltlhs.h +50 -0
- data/ext/clipsruby/tmpltpsr.c +819 -0
- data/ext/clipsruby/tmpltpsr.h +59 -0
- data/ext/clipsruby/tmpltrhs.c +595 -0
- data/ext/clipsruby/tmpltrhs.h +55 -0
- data/ext/clipsruby/tmpltutl.c +637 -0
- data/ext/clipsruby/tmpltutl.h +82 -0
- data/ext/clipsruby/userdata.c +156 -0
- data/ext/clipsruby/userdata.h +72 -0
- data/ext/clipsruby/userfunctions.c +70 -0
- data/ext/clipsruby/usrsetup.h +7 -0
- data/ext/clipsruby/utility.c +1594 -0
- data/ext/clipsruby/utility.h +250 -0
- data/ext/clipsruby/watch.c +865 -0
- data/ext/clipsruby/watch.h +124 -0
- data/lib/clipsruby.rb +1 -0
- metadata +388 -0
@@ -0,0 +1,499 @@
|
|
1
|
+
/*******************************************************/
|
2
|
+
/* "C" Language Integrated Production System */
|
3
|
+
/* */
|
4
|
+
/* CLIPS Version 6.40 07/30/16 */
|
5
|
+
/* */
|
6
|
+
/* DEFMODULE CONSTRUCTS-TO-C MODULE */
|
7
|
+
/*******************************************************/
|
8
|
+
|
9
|
+
/*************************************************************/
|
10
|
+
/* Purpose: Implements the constructs-to-c feature for the */
|
11
|
+
/* defmodule construct. */
|
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
|
+
/* */
|
22
|
+
/* 6.30: Removed conditional code for unsupported */
|
23
|
+
/* compilers/operating systems (IBM_MCW, */
|
24
|
+
/* MAC_MCW, and IBM_TBC). */
|
25
|
+
/* */
|
26
|
+
/* Added support for path name argument to */
|
27
|
+
/* constructs-to-c. */
|
28
|
+
/* */
|
29
|
+
/* Added const qualifiers to remove C++ */
|
30
|
+
/* deprecation warnings. */
|
31
|
+
/* */
|
32
|
+
/* 6.40: Pragma once and other inclusion changes. */
|
33
|
+
/* */
|
34
|
+
/* Added support for booleans with <stdbool.h>. */
|
35
|
+
/* */
|
36
|
+
/* Removed use of void pointers for specific */
|
37
|
+
/* data structures. */
|
38
|
+
/* */
|
39
|
+
/*************************************************************/
|
40
|
+
|
41
|
+
#include "setup.h"
|
42
|
+
|
43
|
+
#if CONSTRUCT_COMPILER && (! RUN_TIME)
|
44
|
+
|
45
|
+
#include <stdio.h>
|
46
|
+
|
47
|
+
#include "conscomp.h"
|
48
|
+
#include "envrnmnt.h"
|
49
|
+
#include "moduldef.h"
|
50
|
+
#include "sysdep.h"
|
51
|
+
|
52
|
+
#include "modulcmp.h"
|
53
|
+
|
54
|
+
/***************/
|
55
|
+
/* DEFINITIONS */
|
56
|
+
/***************/
|
57
|
+
|
58
|
+
#define ItemPrefix() ArbitraryPrefix(DefmoduleData(theEnv)->DefmoduleCodeItem,0)
|
59
|
+
#define DefmodulePrefix() ArbitraryPrefix(DefmoduleData(theEnv)->DefmoduleCodeItem,1)
|
60
|
+
#define PortPrefix() ArbitraryPrefix(DefmoduleData(theEnv)->DefmoduleCodeItem,2)
|
61
|
+
|
62
|
+
/***************************************/
|
63
|
+
/* LOCAL INTERNAL FUNCTION DEFINITIONS */
|
64
|
+
/***************************************/
|
65
|
+
|
66
|
+
static bool ConstructToCode(Environment *,const char *,const char *,char *,unsigned int,
|
67
|
+
FILE *,unsigned int,unsigned int);
|
68
|
+
static void InitDefmoduleCode(Environment *,FILE *,unsigned int,unsigned int);
|
69
|
+
static struct portItem *GetNextPortItem(Environment *,Defmodule **,struct portItem **,
|
70
|
+
bool *,bool *);
|
71
|
+
static bool PortItemsToCode(Environment *,const char *,const char *,char *,unsigned int,
|
72
|
+
FILE *,unsigned int,unsigned int,unsigned int *);
|
73
|
+
static void BeforeDefmodulesToCode(Environment *);
|
74
|
+
|
75
|
+
/***************************************************************/
|
76
|
+
/* DefmoduleCompilerSetup: Initializes the defmodule construct */
|
77
|
+
/* for use with the constructs-to-c command. */
|
78
|
+
/***************************************************************/
|
79
|
+
void DefmoduleCompilerSetup(
|
80
|
+
Environment *theEnv)
|
81
|
+
{
|
82
|
+
DefmoduleData(theEnv)->DefmoduleCodeItem =
|
83
|
+
AddCodeGeneratorItem(theEnv,"defmodule",200,BeforeDefmodulesToCode,
|
84
|
+
InitDefmoduleCode,ConstructToCode,3);
|
85
|
+
}
|
86
|
+
|
87
|
+
/***********************************************************/
|
88
|
+
/* BeforeDefmodulesToCode: Assigns each defmodule a unique */
|
89
|
+
/* ID which will be used for pointer references when the */
|
90
|
+
/* data structures are written to a file as C code */
|
91
|
+
/***********************************************************/
|
92
|
+
static void BeforeDefmodulesToCode(
|
93
|
+
Environment *theEnv)
|
94
|
+
{
|
95
|
+
unsigned int value = 0;
|
96
|
+
Defmodule *theModule;
|
97
|
+
|
98
|
+
for (theModule = GetNextDefmodule(theEnv,NULL);
|
99
|
+
theModule != NULL;
|
100
|
+
theModule = GetNextDefmodule(theEnv,theModule))
|
101
|
+
{ theModule->header.bsaveID = value++; }
|
102
|
+
}
|
103
|
+
|
104
|
+
/*************************************************************/
|
105
|
+
/* PrintDefmoduleReference: Writes the C code representation */
|
106
|
+
/* of a reference to a defmodule data structure. */
|
107
|
+
/*************************************************************/
|
108
|
+
void PrintDefmoduleReference(
|
109
|
+
Environment *theEnv,
|
110
|
+
FILE *theFile,
|
111
|
+
Defmodule *theModule)
|
112
|
+
{
|
113
|
+
if (theModule == NULL) fprintf(theFile,"NULL");
|
114
|
+
else fprintf(theFile,"&%s%u_%lu[%lu]",DefmodulePrefix(),ConstructCompilerData(theEnv)->ImageID,
|
115
|
+
((theModule->header.bsaveID / ConstructCompilerData(theEnv)->MaxIndices) + 1),
|
116
|
+
(theModule->header.bsaveID % ConstructCompilerData(theEnv)->MaxIndices));
|
117
|
+
}
|
118
|
+
|
119
|
+
/************************************************/
|
120
|
+
/* InitDefmoduleCode: Writes out initialization */
|
121
|
+
/* code for defmodules for a run-time module. */
|
122
|
+
/************************************************/
|
123
|
+
static void InitDefmoduleCode(
|
124
|
+
Environment *theEnv,
|
125
|
+
FILE *initFP,
|
126
|
+
unsigned int imageID,
|
127
|
+
unsigned int maxIndices)
|
128
|
+
{
|
129
|
+
#if MAC_XCD
|
130
|
+
#pragma unused(maxIndices)
|
131
|
+
#endif
|
132
|
+
|
133
|
+
if (GetNextDefmodule(theEnv,NULL) != NULL)
|
134
|
+
{ fprintf(initFP," SetListOfDefmodules(theEnv,%s%d_1);\n",DefmodulePrefix(),imageID); }
|
135
|
+
else
|
136
|
+
{ fprintf(initFP," SetListOfDefmodules(theEnv,NULL);\n"); }
|
137
|
+
fprintf(initFP," SetCurrentModule(theEnv,GetNextDefmodule(theEnv,NULL));\n");
|
138
|
+
}
|
139
|
+
|
140
|
+
/***********************************************************/
|
141
|
+
/* ConstructToCode: Produces defmodule code for a run-time */
|
142
|
+
/* module created using the constructs-to-c function. */
|
143
|
+
/***********************************************************/
|
144
|
+
static bool ConstructToCode(
|
145
|
+
Environment *theEnv,
|
146
|
+
const char *fileName,
|
147
|
+
const char *pathName,
|
148
|
+
char *fileNameBuffer,
|
149
|
+
unsigned int fileID,
|
150
|
+
FILE *headerFP,
|
151
|
+
unsigned int imageID,
|
152
|
+
unsigned int maxIndices)
|
153
|
+
{
|
154
|
+
Defmodule *theConstruct;
|
155
|
+
FILE *moduleFile = NULL, *itemsFile;
|
156
|
+
unsigned int portItemCount = 0;
|
157
|
+
struct portItem *portItemPtr;
|
158
|
+
unsigned int mihCount = 0, moduleCount = 0;
|
159
|
+
unsigned int j;
|
160
|
+
struct moduleItem *theItem;
|
161
|
+
unsigned int moduleArrayVersion = 1;
|
162
|
+
unsigned int fileCount = 2;
|
163
|
+
|
164
|
+
/*================================================*/
|
165
|
+
/* Include the appropriate defmodule header file. */
|
166
|
+
/*================================================*/
|
167
|
+
|
168
|
+
fprintf(headerFP,"#include \"moduldef.h\"\n");
|
169
|
+
|
170
|
+
/*============================================*/
|
171
|
+
/* Open up the items file for the defmodules. */
|
172
|
+
/* Only one file of this type is created so */
|
173
|
+
/* the maximum number of indices is ignored. */
|
174
|
+
/*============================================*/
|
175
|
+
|
176
|
+
if ((itemsFile = NewCFile(theEnv,fileName,pathName,fileNameBuffer,fileID,1,false)) == NULL)
|
177
|
+
{ return false; }
|
178
|
+
fprintf(itemsFile,"struct defmoduleItemHeader *%s%d_%d[] = {\n",ItemPrefix(),imageID,1);
|
179
|
+
fprintf(headerFP,"extern struct defmoduleItemHeader *%s%d_%d[];\n",ItemPrefix(),imageID,1);
|
180
|
+
|
181
|
+
/*======================================================*/
|
182
|
+
/* Loop through all the defmodules writing their C code */
|
183
|
+
/* representation to the file as they are traversed. */
|
184
|
+
/*======================================================*/
|
185
|
+
|
186
|
+
for (theConstruct = GetNextDefmodule(theEnv,NULL);
|
187
|
+
theConstruct != NULL;
|
188
|
+
theConstruct = GetNextDefmodule(theEnv,theConstruct))
|
189
|
+
{
|
190
|
+
/*===========================================*/
|
191
|
+
/* Open a new file to write to if necessary. */
|
192
|
+
/*===========================================*/
|
193
|
+
|
194
|
+
moduleFile = OpenFileIfNeeded(theEnv,moduleFile,fileName,pathName,fileNameBuffer,fileID,imageID,
|
195
|
+
&fileCount,moduleArrayVersion,headerFP,
|
196
|
+
"Defmodule",DefmodulePrefix(),
|
197
|
+
false,NULL);
|
198
|
+
|
199
|
+
if (moduleFile == NULL)
|
200
|
+
{
|
201
|
+
moduleCount = maxIndices;
|
202
|
+
CloseFileIfNeeded(theEnv,moduleFile,&moduleCount,
|
203
|
+
&moduleArrayVersion,maxIndices,NULL,NULL);
|
204
|
+
GenClose(theEnv,itemsFile);
|
205
|
+
return false;
|
206
|
+
}
|
207
|
+
|
208
|
+
/*======================================*/
|
209
|
+
/* Write the construct name and ppform. */
|
210
|
+
/*======================================*/
|
211
|
+
|
212
|
+
fprintf(moduleFile,"{");
|
213
|
+
|
214
|
+
ConstructHeaderToCode(theEnv,moduleFile,&theConstruct->header,imageID,maxIndices,
|
215
|
+
moduleCount,ModulePrefix(DefmoduleData(theEnv)->DefmoduleCodeItem),
|
216
|
+
ConstructPrefix(DefmoduleData(theEnv)->DefmoduleCodeItem));
|
217
|
+
|
218
|
+
fprintf(moduleFile,",");
|
219
|
+
|
220
|
+
/*=====================================================*/
|
221
|
+
/* Write the items array pointers to other constructs. */
|
222
|
+
/*=====================================================*/
|
223
|
+
|
224
|
+
fprintf(moduleFile,"&%s%d_1[%d],",ItemPrefix(),imageID,mihCount);
|
225
|
+
|
226
|
+
for (j = 0, theItem = GetListOfModuleItems(theEnv);
|
227
|
+
(j < GetNumberOfModuleItems(theEnv)) && (theItem != NULL) ;
|
228
|
+
j++, theItem = theItem->next)
|
229
|
+
{
|
230
|
+
mihCount++;
|
231
|
+
if (theItem->constructsToCModuleReference == NULL)
|
232
|
+
{ fprintf(itemsFile,"NULL"); }
|
233
|
+
else
|
234
|
+
{ (*theItem->constructsToCModuleReference)(theEnv,itemsFile,theConstruct->header.bsaveID,imageID,maxIndices); }
|
235
|
+
|
236
|
+
if ((j + 1) < GetNumberOfModuleItems(theEnv)) fprintf(itemsFile,",");
|
237
|
+
else if (theConstruct->header.next != NULL) fprintf(itemsFile,",\n");
|
238
|
+
}
|
239
|
+
|
240
|
+
/*=================================*/
|
241
|
+
/* Write the importList reference. */
|
242
|
+
/*=================================*/
|
243
|
+
|
244
|
+
if (theConstruct->importList == NULL)
|
245
|
+
{ fprintf(moduleFile,"NULL,"); }
|
246
|
+
else
|
247
|
+
{
|
248
|
+
fprintf(moduleFile,"&%s%d_%d[%d],",PortPrefix(),imageID,
|
249
|
+
(portItemCount / maxIndices) + 1,
|
250
|
+
portItemCount % maxIndices);
|
251
|
+
for (portItemPtr = theConstruct->importList;
|
252
|
+
portItemPtr != NULL;
|
253
|
+
portItemPtr = portItemPtr->next)
|
254
|
+
{ portItemCount++; }
|
255
|
+
}
|
256
|
+
|
257
|
+
/*=================================*/
|
258
|
+
/* Write the exportList reference. */
|
259
|
+
/*=================================*/
|
260
|
+
|
261
|
+
if (theConstruct->exportList == NULL)
|
262
|
+
{ fprintf(moduleFile,"NULL,"); }
|
263
|
+
else
|
264
|
+
{
|
265
|
+
fprintf(moduleFile,"&%s%d_%d[%d],",PortPrefix(),imageID,
|
266
|
+
(portItemCount / maxIndices) + 1,
|
267
|
+
portItemCount % maxIndices);
|
268
|
+
for (portItemPtr = theConstruct->exportList;
|
269
|
+
portItemPtr != NULL;
|
270
|
+
portItemPtr = portItemPtr->next)
|
271
|
+
{ portItemCount++; }
|
272
|
+
}
|
273
|
+
|
274
|
+
/*========================*/
|
275
|
+
/* Write the visitedFlag. */
|
276
|
+
/*========================*/
|
277
|
+
|
278
|
+
fprintf(moduleFile,"0}");
|
279
|
+
|
280
|
+
/*===================================================*/
|
281
|
+
/* Increment the number of defmodule data structures */
|
282
|
+
/* written and close the output file if necessary. */
|
283
|
+
/*===================================================*/
|
284
|
+
|
285
|
+
moduleCount++;
|
286
|
+
moduleFile = CloseFileIfNeeded(theEnv,moduleFile,&moduleCount,&moduleArrayVersion,
|
287
|
+
maxIndices,NULL,NULL);
|
288
|
+
|
289
|
+
}
|
290
|
+
|
291
|
+
/*=========================*/
|
292
|
+
/* Close the output files. */
|
293
|
+
/*=========================*/
|
294
|
+
|
295
|
+
moduleCount = maxIndices;
|
296
|
+
CloseFileIfNeeded(theEnv,moduleFile,&moduleCount,
|
297
|
+
&moduleArrayVersion,maxIndices,NULL,NULL);
|
298
|
+
fprintf(itemsFile,"};\n");
|
299
|
+
GenClose(theEnv,itemsFile);
|
300
|
+
|
301
|
+
/*=========================================*/
|
302
|
+
/* Write out the portItem data structures. */
|
303
|
+
/*=========================================*/
|
304
|
+
|
305
|
+
if (portItemCount == 0) return true;
|
306
|
+
return PortItemsToCode(theEnv,fileName,pathName,fileNameBuffer,fileID,headerFP,imageID,maxIndices,&fileCount);
|
307
|
+
}
|
308
|
+
|
309
|
+
/************************************************************/
|
310
|
+
/* PortItemsToCode: Writes the C code representation of all */
|
311
|
+
/* portItem data structure nodes the specified file. */
|
312
|
+
/************************************************************/
|
313
|
+
static bool PortItemsToCode(
|
314
|
+
Environment *theEnv,
|
315
|
+
const char *fileName,
|
316
|
+
const char *pathName,
|
317
|
+
char *fileNameBuffer,
|
318
|
+
unsigned int fileID,
|
319
|
+
FILE *headerFP,
|
320
|
+
unsigned int imageID,
|
321
|
+
unsigned int maxIndices,
|
322
|
+
unsigned int *fileCount)
|
323
|
+
{
|
324
|
+
Defmodule *theDefmodule = NULL;
|
325
|
+
struct portItem *thePortItem = NULL;
|
326
|
+
unsigned int portItemCount = 0;
|
327
|
+
bool importChecked = false;
|
328
|
+
bool exportChecked = false;
|
329
|
+
FILE *portItemsFile = NULL;
|
330
|
+
unsigned int portItemArrayVersion = 1;
|
331
|
+
|
332
|
+
/*=================================================================*/
|
333
|
+
/* Loop through each of the portItem data structures writing their */
|
334
|
+
/* C code representation to the file as they are traversed. */
|
335
|
+
/*=================================================================*/
|
336
|
+
|
337
|
+
for (thePortItem = GetNextPortItem(theEnv,&theDefmodule,&thePortItem,&importChecked,&exportChecked);
|
338
|
+
thePortItem != NULL;
|
339
|
+
thePortItem = GetNextPortItem(theEnv,&theDefmodule,&thePortItem,&importChecked,&exportChecked))
|
340
|
+
{
|
341
|
+
/*===========================================*/
|
342
|
+
/* Open a new file to write to if necessary. */
|
343
|
+
/*===========================================*/
|
344
|
+
|
345
|
+
portItemsFile = OpenFileIfNeeded(theEnv,portItemsFile,fileName,pathName,fileNameBuffer,fileID,imageID,
|
346
|
+
fileCount,portItemArrayVersion,headerFP,
|
347
|
+
"struct portItem",PortPrefix(),
|
348
|
+
false,NULL);
|
349
|
+
|
350
|
+
if (portItemsFile == NULL)
|
351
|
+
{
|
352
|
+
portItemCount = maxIndices;
|
353
|
+
CloseFileIfNeeded(theEnv,portItemsFile,&portItemCount,
|
354
|
+
&portItemArrayVersion,maxIndices,NULL,NULL);
|
355
|
+
return false;
|
356
|
+
}
|
357
|
+
|
358
|
+
/*================================================*/
|
359
|
+
/* Write the portItem data structure to the file. */
|
360
|
+
/*================================================*/
|
361
|
+
|
362
|
+
fprintf(portItemsFile,"{");
|
363
|
+
PrintSymbolReference(theEnv,portItemsFile,thePortItem->moduleName);
|
364
|
+
fprintf(portItemsFile,",");
|
365
|
+
PrintSymbolReference(theEnv,portItemsFile,thePortItem->constructType);
|
366
|
+
fprintf(portItemsFile,",");
|
367
|
+
PrintSymbolReference(theEnv,portItemsFile,thePortItem->constructName);
|
368
|
+
fprintf(portItemsFile,",");
|
369
|
+
|
370
|
+
if (thePortItem->next == NULL)
|
371
|
+
{ fprintf(portItemsFile,"NULL}"); }
|
372
|
+
else
|
373
|
+
{
|
374
|
+
fprintf(portItemsFile,"&%s%d_%d[%d]}",PortPrefix(),imageID,
|
375
|
+
((portItemCount+1) / maxIndices) + 1,
|
376
|
+
(portItemCount+1) % maxIndices);
|
377
|
+
}
|
378
|
+
|
379
|
+
/*==================================================*/
|
380
|
+
/* Increment the number of portItem data structures */
|
381
|
+
/* written and close the output file if necessary. */
|
382
|
+
/*==================================================*/
|
383
|
+
|
384
|
+
portItemCount++;
|
385
|
+
CloseFileIfNeeded(theEnv,portItemsFile,&portItemCount,&portItemArrayVersion,
|
386
|
+
maxIndices,NULL,NULL);
|
387
|
+
}
|
388
|
+
|
389
|
+
/*===================================================*/
|
390
|
+
/* Close the output file and return true to indicate */
|
391
|
+
/* the data structures were successfully written. */
|
392
|
+
/*===================================================*/
|
393
|
+
|
394
|
+
portItemCount = maxIndices;
|
395
|
+
CloseFileIfNeeded(theEnv,portItemsFile,&portItemCount,
|
396
|
+
&portItemArrayVersion,maxIndices,NULL,NULL);
|
397
|
+
|
398
|
+
return true;
|
399
|
+
}
|
400
|
+
|
401
|
+
/*********************************************************************/
|
402
|
+
/* GetNextPortItem: Given a pointer to a portItem data structure */
|
403
|
+
/* and its defmodule, returns the "next" portItem data structure. */
|
404
|
+
/* If passed a NULL value for both the defmodule and portItem */
|
405
|
+
/* data structure, it returns the "first" portItem data structure. */
|
406
|
+
/*********************************************************************/
|
407
|
+
static struct portItem *GetNextPortItem(
|
408
|
+
Environment *theEnv,
|
409
|
+
Defmodule **theDefmodule,
|
410
|
+
struct portItem **thePortItem,
|
411
|
+
bool *importChecked,
|
412
|
+
bool *exportChecked)
|
413
|
+
{
|
414
|
+
/*====================================================*/
|
415
|
+
/* If the defmodule pointer is NULL, then the "first" */
|
416
|
+
/* portItem data structure should be returned. Start */
|
417
|
+
/* the search in the "first" defmodule. */
|
418
|
+
/*====================================================*/
|
419
|
+
|
420
|
+
if (*theDefmodule == NULL)
|
421
|
+
{
|
422
|
+
*theDefmodule = GetNextDefmodule(theEnv,NULL);
|
423
|
+
*thePortItem = NULL;
|
424
|
+
*importChecked = false;
|
425
|
+
*exportChecked = false;
|
426
|
+
}
|
427
|
+
|
428
|
+
/*==============================================*/
|
429
|
+
/* Loop through all of the defmodules until the */
|
430
|
+
/* "next" portItem data structure is found. */
|
431
|
+
/*==============================================*/
|
432
|
+
|
433
|
+
while (*theDefmodule != NULL)
|
434
|
+
{
|
435
|
+
/*==========================================*/
|
436
|
+
/* Check to see if there's another portItem */
|
437
|
+
/* in the import/export list that's being */
|
438
|
+
/* checked in the module being examined. */
|
439
|
+
/*==========================================*/
|
440
|
+
|
441
|
+
if (*thePortItem != NULL) *thePortItem = (*thePortItem)->next;
|
442
|
+
if (*thePortItem != NULL) return(*thePortItem);
|
443
|
+
|
444
|
+
/*==================================================*/
|
445
|
+
/* If we haven't checked the import list yet, begin */
|
446
|
+
/* checking it. If there aren't any items in the */
|
447
|
+
/* import list, then check the export list. */
|
448
|
+
/*==================================================*/
|
449
|
+
|
450
|
+
if (! (*importChecked))
|
451
|
+
{
|
452
|
+
*thePortItem = (*theDefmodule)->importList;
|
453
|
+
*importChecked = true;
|
454
|
+
if (*thePortItem == NULL)
|
455
|
+
{
|
456
|
+
*thePortItem = (*theDefmodule)->exportList;
|
457
|
+
*exportChecked = true;
|
458
|
+
}
|
459
|
+
}
|
460
|
+
|
461
|
+
/*======================================*/
|
462
|
+
/* Otherwise, if we haven't checked the */
|
463
|
+
/* export list yet, begin checking it. */
|
464
|
+
/*======================================*/
|
465
|
+
|
466
|
+
else if (! (*exportChecked))
|
467
|
+
{
|
468
|
+
*exportChecked = true;
|
469
|
+
*thePortItem = (*theDefmodule)->exportList;
|
470
|
+
}
|
471
|
+
|
472
|
+
/*==========================================*/
|
473
|
+
/* If the import or export list contained a */
|
474
|
+
/* portItem data structure, then return it. */
|
475
|
+
/*==========================================*/
|
476
|
+
|
477
|
+
if (*thePortItem != NULL) return(*thePortItem);
|
478
|
+
|
479
|
+
/*==================================*/
|
480
|
+
/* Otherwise, check the next module */
|
481
|
+
/* for a portItem data structure. */
|
482
|
+
/*==================================*/
|
483
|
+
|
484
|
+
*theDefmodule = GetNextDefmodule(theEnv,*theDefmodule);
|
485
|
+
*importChecked = false;
|
486
|
+
*exportChecked = false;
|
487
|
+
}
|
488
|
+
|
489
|
+
/*=======================================================*/
|
490
|
+
/* All the portItem data structures have been traversed. */
|
491
|
+
/* Return NULL to indicate that none are left. */
|
492
|
+
/*=======================================================*/
|
493
|
+
|
494
|
+
return NULL;
|
495
|
+
}
|
496
|
+
|
497
|
+
#endif /* CONSTRUCT_COMPILER && (! RUN_TIME) */
|
498
|
+
|
499
|
+
|
@@ -0,0 +1,54 @@
|
|
1
|
+
/*******************************************************/
|
2
|
+
/* "C" Language Integrated Production System */
|
3
|
+
/* */
|
4
|
+
/* CLIPS Version 6.40 07/30/16 */
|
5
|
+
/* */
|
6
|
+
/* DEFMODULE CONSTRUCT COMPILER HEADER FILE */
|
7
|
+
/*******************************************************/
|
8
|
+
|
9
|
+
/*************************************************************/
|
10
|
+
/* Purpose: Implements the constructs-to-c feature for the */
|
11
|
+
/* defmodule construct. */
|
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
|
+
/* */
|
22
|
+
/* 6.30: Removed conditional code for unsupported */
|
23
|
+
/* compilers/operating systems (IBM_MCW, */
|
24
|
+
/* MAC_MCW, and IBM_TBC). */
|
25
|
+
/* */
|
26
|
+
/* Added support for path name argument to */
|
27
|
+
/* constructs-to-c. */
|
28
|
+
/* */
|
29
|
+
/* Added const qualifiers to remove C++ */
|
30
|
+
/* deprecation warnings. */
|
31
|
+
/* */
|
32
|
+
/* 6.40: Removed LOCALE definition. */
|
33
|
+
/* */
|
34
|
+
/* Pragma once and other inclusion changes. */
|
35
|
+
/* */
|
36
|
+
/* Removed use of void pointers for specific */
|
37
|
+
/* data structures. */
|
38
|
+
/* */
|
39
|
+
/*************************************************************/
|
40
|
+
|
41
|
+
#ifndef _H_modulcmp
|
42
|
+
|
43
|
+
#pragma once
|
44
|
+
|
45
|
+
#define _H_modulcmp
|
46
|
+
|
47
|
+
#include <stdio.h>
|
48
|
+
|
49
|
+
#include "moduldef.h"
|
50
|
+
|
51
|
+
void DefmoduleCompilerSetup(Environment *);
|
52
|
+
void PrintDefmoduleReference(Environment *,FILE *,Defmodule *);
|
53
|
+
|
54
|
+
#endif /* _H_modulcmp */
|