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,584 @@
|
|
1
|
+
/*******************************************************/
|
2
|
+
/* "C" Language Integrated Production System */
|
3
|
+
/* */
|
4
|
+
/* CLIPS Version 6.40 11/01/16 */
|
5
|
+
/* */
|
6
|
+
/* DEFTEMPLATE MODULE */
|
7
|
+
/*******************************************************/
|
8
|
+
|
9
|
+
/*************************************************************/
|
10
|
+
/* Purpose: Defines basic deftemplate primitive functions */
|
11
|
+
/* such as allocating and deallocating, traversing, and */
|
12
|
+
/* finding deftemplate data structures. */
|
13
|
+
/* */
|
14
|
+
/* Principal Programmer(s): */
|
15
|
+
/* Gary D. Riley */
|
16
|
+
/* */
|
17
|
+
/* Contributing Programmer(s): */
|
18
|
+
/* Brian L. Dantes */
|
19
|
+
/* */
|
20
|
+
/* Revision History: */
|
21
|
+
/* */
|
22
|
+
/* 6.23: Added support for templates maintaining their */
|
23
|
+
/* own list of facts. */
|
24
|
+
/* */
|
25
|
+
/* 6.24: Renamed BOOLEAN macro type to intBool. */
|
26
|
+
/* */
|
27
|
+
/* Corrected code to remove run-time program */
|
28
|
+
/* compiler warnings. */
|
29
|
+
/* */
|
30
|
+
/* 6.30: Added code for deftemplate run time */
|
31
|
+
/* initialization of hashed comparisons to */
|
32
|
+
/* constants. */
|
33
|
+
/* */
|
34
|
+
/* Removed conditional code for unsupported */
|
35
|
+
/* compilers/operating systems (IBM_MCW, */
|
36
|
+
/* MAC_MCW, and IBM_TBC). */
|
37
|
+
/* */
|
38
|
+
/* Support for deftemplate slot facets. */
|
39
|
+
/* */
|
40
|
+
/* Added const qualifiers to remove C++ */
|
41
|
+
/* deprecation warnings. */
|
42
|
+
/* */
|
43
|
+
/* Converted API macros to function calls. */
|
44
|
+
/* */
|
45
|
+
/* Changed find construct functionality so that */
|
46
|
+
/* imported modules are search when locating a */
|
47
|
+
/* named construct. */
|
48
|
+
/* */
|
49
|
+
/* 6.40: Pragma once and other inclusion changes. */
|
50
|
+
/* */
|
51
|
+
/* Added support for booleans with <stdbool.h>. */
|
52
|
+
/* */
|
53
|
+
/* Removed use of void pointers for specific */
|
54
|
+
/* data structures. */
|
55
|
+
/* */
|
56
|
+
/* ALLOW_ENVIRONMENT_GLOBALS no longer supported. */
|
57
|
+
/* */
|
58
|
+
/*************************************************************/
|
59
|
+
|
60
|
+
#include "setup.h"
|
61
|
+
|
62
|
+
#if DEFTEMPLATE_CONSTRUCT
|
63
|
+
|
64
|
+
#include <stdio.h>
|
65
|
+
|
66
|
+
#include "cstrccom.h"
|
67
|
+
#include "cstrnchk.h"
|
68
|
+
#include "envrnmnt.h"
|
69
|
+
#include "exprnops.h"
|
70
|
+
#include "memalloc.h"
|
71
|
+
#include "modulpsr.h"
|
72
|
+
#include "modulutl.h"
|
73
|
+
#include "network.h"
|
74
|
+
#include "pattern.h"
|
75
|
+
#include "router.h"
|
76
|
+
#include "tmpltbsc.h"
|
77
|
+
#include "tmpltfun.h"
|
78
|
+
#include "tmpltpsr.h"
|
79
|
+
#include "tmpltutl.h"
|
80
|
+
|
81
|
+
#if BLOAD || BLOAD_ONLY || BLOAD_AND_BSAVE
|
82
|
+
#include "bload.h"
|
83
|
+
#include "tmpltbin.h"
|
84
|
+
#endif
|
85
|
+
|
86
|
+
#if CONSTRUCT_COMPILER && (! RUN_TIME)
|
87
|
+
#include "tmpltcmp.h"
|
88
|
+
#endif
|
89
|
+
|
90
|
+
#include "tmpltdef.h"
|
91
|
+
|
92
|
+
/***************************************/
|
93
|
+
/* LOCAL INTERNAL FUNCTION DEFINITIONS */
|
94
|
+
/***************************************/
|
95
|
+
|
96
|
+
static void *AllocateModule(Environment *);
|
97
|
+
static void ReturnModule(Environment *,void *);
|
98
|
+
static void ReturnDeftemplate(Environment *,Deftemplate *);
|
99
|
+
static void InitializeDeftemplateModules(Environment *);
|
100
|
+
static void DeallocateDeftemplateData(Environment *);
|
101
|
+
static void DestroyDeftemplateAction(Environment *,ConstructHeader *,void *);
|
102
|
+
static void DestroyDeftemplate(Environment *,Deftemplate *);
|
103
|
+
#if RUN_TIME
|
104
|
+
static void RuntimeDeftemplateAction(Environment *,ConstructHeader *,void *);
|
105
|
+
static void SearchForHashedPatternNodes(Environment *,struct factPatternNode *);
|
106
|
+
#endif
|
107
|
+
|
108
|
+
/******************************************************************/
|
109
|
+
/* InitializeDeftemplates: Initializes the deftemplate construct. */
|
110
|
+
/******************************************************************/
|
111
|
+
void InitializeDeftemplates(
|
112
|
+
Environment *theEnv)
|
113
|
+
{
|
114
|
+
struct entityRecord deftemplatePtrRecord =
|
115
|
+
{ "DEFTEMPLATE_PTR",
|
116
|
+
DEFTEMPLATE_PTR,1,0,0,
|
117
|
+
NULL,
|
118
|
+
NULL,NULL,
|
119
|
+
NULL,
|
120
|
+
NULL,
|
121
|
+
(EntityBusyCountFunction *) DecrementDeftemplateBusyCount,
|
122
|
+
(EntityBusyCountFunction *) IncrementDeftemplateBusyCount,
|
123
|
+
NULL,NULL,NULL,NULL,NULL };
|
124
|
+
AllocateEnvironmentData(theEnv,DEFTEMPLATE_DATA,sizeof(struct deftemplateData),DeallocateDeftemplateData);
|
125
|
+
|
126
|
+
memcpy(&DeftemplateData(theEnv)->DeftemplatePtrRecord,&deftemplatePtrRecord,sizeof(struct entityRecord));
|
127
|
+
|
128
|
+
InitializeFacts(theEnv);
|
129
|
+
|
130
|
+
InitializeDeftemplateModules(theEnv);
|
131
|
+
|
132
|
+
DeftemplateBasicCommands(theEnv);
|
133
|
+
|
134
|
+
DeftemplateFunctions(theEnv);
|
135
|
+
|
136
|
+
DeftemplateData(theEnv)->DeftemplateConstruct =
|
137
|
+
AddConstruct(theEnv,"deftemplate","deftemplates",ParseDeftemplate,
|
138
|
+
(FindConstructFunction *) FindDeftemplate,
|
139
|
+
GetConstructNamePointer,GetConstructPPForm,
|
140
|
+
GetConstructModuleItem,
|
141
|
+
(GetNextConstructFunction *) GetNextDeftemplate,
|
142
|
+
SetNextConstruct,
|
143
|
+
(IsConstructDeletableFunction *) DeftemplateIsDeletable,
|
144
|
+
(DeleteConstructFunction *) Undeftemplate,
|
145
|
+
(FreeConstructFunction *) ReturnDeftemplate);
|
146
|
+
|
147
|
+
InstallPrimitive(theEnv,(EntityRecord *) &DeftemplateData(theEnv)->DeftemplatePtrRecord,DEFTEMPLATE_PTR);
|
148
|
+
}
|
149
|
+
|
150
|
+
/******************************************************/
|
151
|
+
/* DeallocateDeftemplateData: Deallocates environment */
|
152
|
+
/* data for the deftemplate construct. */
|
153
|
+
/******************************************************/
|
154
|
+
static void DeallocateDeftemplateData(
|
155
|
+
Environment *theEnv)
|
156
|
+
{
|
157
|
+
#if ! RUN_TIME
|
158
|
+
struct deftemplateModule *theModuleItem;
|
159
|
+
Defmodule *theModule;
|
160
|
+
#endif
|
161
|
+
#if BLOAD || BLOAD_AND_BSAVE
|
162
|
+
if (Bloaded(theEnv)) return;
|
163
|
+
#endif
|
164
|
+
|
165
|
+
DoForAllConstructs(theEnv,DestroyDeftemplateAction,DeftemplateData(theEnv)->DeftemplateModuleIndex,false,NULL);
|
166
|
+
|
167
|
+
#if ! RUN_TIME
|
168
|
+
for (theModule = GetNextDefmodule(theEnv,NULL);
|
169
|
+
theModule != NULL;
|
170
|
+
theModule = GetNextDefmodule(theEnv,theModule))
|
171
|
+
{
|
172
|
+
theModuleItem = (struct deftemplateModule *)
|
173
|
+
GetModuleItem(theEnv,theModule,
|
174
|
+
DeftemplateData(theEnv)->DeftemplateModuleIndex);
|
175
|
+
rtn_struct(theEnv,deftemplateModule,theModuleItem);
|
176
|
+
}
|
177
|
+
#endif
|
178
|
+
}
|
179
|
+
|
180
|
+
/*****************************************************/
|
181
|
+
/* DestroyDeftemplateAction: Action used to remove */
|
182
|
+
/* deftemplates as a result of DestroyEnvironment. */
|
183
|
+
/*****************************************************/
|
184
|
+
static void DestroyDeftemplateAction(
|
185
|
+
Environment *theEnv,
|
186
|
+
ConstructHeader *theConstruct,
|
187
|
+
void *buffer)
|
188
|
+
{
|
189
|
+
#if MAC_XCD
|
190
|
+
#pragma unused(buffer)
|
191
|
+
#endif
|
192
|
+
Deftemplate *theDeftemplate = (Deftemplate *) theConstruct;
|
193
|
+
|
194
|
+
if (theDeftemplate == NULL) return;
|
195
|
+
|
196
|
+
DestroyDeftemplate(theEnv,theDeftemplate);
|
197
|
+
}
|
198
|
+
|
199
|
+
|
200
|
+
/*************************************************************/
|
201
|
+
/* InitializeDeftemplateModules: Initializes the deftemplate */
|
202
|
+
/* construct for use with the defmodule construct. */
|
203
|
+
/*************************************************************/
|
204
|
+
static void InitializeDeftemplateModules(
|
205
|
+
Environment *theEnv)
|
206
|
+
{
|
207
|
+
DeftemplateData(theEnv)->DeftemplateModuleIndex = RegisterModuleItem(theEnv,"deftemplate",
|
208
|
+
AllocateModule,
|
209
|
+
ReturnModule,
|
210
|
+
#if BLOAD_AND_BSAVE || BLOAD || BLOAD_ONLY
|
211
|
+
BloadDeftemplateModuleReference,
|
212
|
+
#else
|
213
|
+
NULL,
|
214
|
+
#endif
|
215
|
+
#if CONSTRUCT_COMPILER && (! RUN_TIME)
|
216
|
+
DeftemplateCModuleReference,
|
217
|
+
#else
|
218
|
+
NULL,
|
219
|
+
#endif
|
220
|
+
(FindConstructFunction *) FindDeftemplateInModule);
|
221
|
+
|
222
|
+
#if (! BLOAD_ONLY) && (! RUN_TIME) && DEFMODULE_CONSTRUCT
|
223
|
+
AddPortConstructItem(theEnv,"deftemplate",SYMBOL_TOKEN);
|
224
|
+
#endif
|
225
|
+
}
|
226
|
+
|
227
|
+
/***************************************************/
|
228
|
+
/* AllocateModule: Allocates a deftemplate module. */
|
229
|
+
/***************************************************/
|
230
|
+
static void *AllocateModule(
|
231
|
+
Environment *theEnv)
|
232
|
+
{
|
233
|
+
return((void *) get_struct(theEnv,deftemplateModule));
|
234
|
+
}
|
235
|
+
|
236
|
+
/*************************************************/
|
237
|
+
/* ReturnModule: Deallocates a deftemplate module. */
|
238
|
+
/*************************************************/
|
239
|
+
static void ReturnModule(
|
240
|
+
Environment *theEnv,
|
241
|
+
void *theItem)
|
242
|
+
{
|
243
|
+
FreeConstructHeaderModule(theEnv,(struct defmoduleItemHeader *) theItem,DeftemplateData(theEnv)->DeftemplateConstruct);
|
244
|
+
rtn_struct(theEnv,deftemplateModule,theItem);
|
245
|
+
}
|
246
|
+
|
247
|
+
/****************************************************************/
|
248
|
+
/* GetDeftemplateModuleItem: Returns a pointer to the defmodule */
|
249
|
+
/* item for the specified deftemplate or defmodule. */
|
250
|
+
/****************************************************************/
|
251
|
+
struct deftemplateModule *GetDeftemplateModuleItem(
|
252
|
+
Environment *theEnv,
|
253
|
+
Defmodule *theModule)
|
254
|
+
{
|
255
|
+
return((struct deftemplateModule *) GetConstructModuleItemByIndex(theEnv,theModule,DeftemplateData(theEnv)->DeftemplateModuleIndex));
|
256
|
+
}
|
257
|
+
|
258
|
+
/***************************************************/
|
259
|
+
/* FindDeftemplate: Searches for a deftemplate in */
|
260
|
+
/* the list of deftemplates. Returns a pointer */
|
261
|
+
/* to the deftemplate if found, otherwise NULL. */
|
262
|
+
/***************************************************/
|
263
|
+
Deftemplate *FindDeftemplate(
|
264
|
+
Environment *theEnv,
|
265
|
+
const char *deftemplateName)
|
266
|
+
{
|
267
|
+
return (Deftemplate *) FindNamedConstructInModuleOrImports(theEnv,deftemplateName,DeftemplateData(theEnv)->DeftemplateConstruct);
|
268
|
+
}
|
269
|
+
|
270
|
+
/*******************************************************/
|
271
|
+
/* FindDeftemplateInModule: Searches for a deftemplate */
|
272
|
+
/* in the list of deftemplates. Returns a pointer */
|
273
|
+
/* to the deftemplate if found, otherwise NULL. */
|
274
|
+
/*******************************************************/
|
275
|
+
Deftemplate *FindDeftemplateInModule(
|
276
|
+
Environment *theEnv,
|
277
|
+
const char *deftemplateName)
|
278
|
+
{
|
279
|
+
return (Deftemplate *) FindNamedConstructInModule(theEnv,deftemplateName,DeftemplateData(theEnv)->DeftemplateConstruct);
|
280
|
+
}
|
281
|
+
|
282
|
+
/***********************************************************************/
|
283
|
+
/* GetNextDeftemplate: If passed a NULL pointer, returns the first */
|
284
|
+
/* deftemplate in the ListOfDeftemplates. Otherwise returns the next */
|
285
|
+
/* deftemplate following the deftemplate passed as an argument. */
|
286
|
+
/***********************************************************************/
|
287
|
+
Deftemplate *GetNextDeftemplate(
|
288
|
+
Environment *theEnv,
|
289
|
+
Deftemplate *deftemplatePtr)
|
290
|
+
{
|
291
|
+
return (Deftemplate *) GetNextConstructItem(theEnv,&deftemplatePtr->header,DeftemplateData(theEnv)->DeftemplateModuleIndex);
|
292
|
+
}
|
293
|
+
|
294
|
+
/**********************************************************/
|
295
|
+
/* DeftemplateIsDeletable: Returns true if a particular */
|
296
|
+
/* deftemplate can be deleted, otherwise returns false. */
|
297
|
+
/**********************************************************/
|
298
|
+
bool DeftemplateIsDeletable(
|
299
|
+
Deftemplate *theDeftemplate)
|
300
|
+
{
|
301
|
+
Environment *theEnv = theDeftemplate->header.env;
|
302
|
+
|
303
|
+
if (! ConstructsDeletable(theEnv))
|
304
|
+
{ return false; }
|
305
|
+
|
306
|
+
if (theDeftemplate->busyCount > 0) return false;
|
307
|
+
if (theDeftemplate->patternNetwork != NULL) return false;
|
308
|
+
|
309
|
+
return true;
|
310
|
+
}
|
311
|
+
|
312
|
+
/**************************************************************/
|
313
|
+
/* ReturnDeftemplate: Returns the data structures associated */
|
314
|
+
/* with a deftemplate construct to the pool of free memory. */
|
315
|
+
/**************************************************************/
|
316
|
+
static void ReturnDeftemplate(
|
317
|
+
Environment *theEnv,
|
318
|
+
Deftemplate *theDeftemplate)
|
319
|
+
{
|
320
|
+
#if (! BLOAD_ONLY) && (! RUN_TIME)
|
321
|
+
struct templateSlot *slotPtr;
|
322
|
+
|
323
|
+
if (theDeftemplate == NULL) return;
|
324
|
+
|
325
|
+
/*====================================================================*/
|
326
|
+
/* If a template is redefined, then we want to save its debug status. */
|
327
|
+
/*====================================================================*/
|
328
|
+
|
329
|
+
#if DEBUGGING_FUNCTIONS
|
330
|
+
DeftemplateData(theEnv)->DeletedTemplateDebugFlags = 0;
|
331
|
+
if (theDeftemplate->watch) BitwiseSet(DeftemplateData(theEnv)->DeletedTemplateDebugFlags,0);
|
332
|
+
#endif
|
333
|
+
|
334
|
+
/*===========================================*/
|
335
|
+
/* Free storage used by the templates slots. */
|
336
|
+
/*===========================================*/
|
337
|
+
|
338
|
+
slotPtr = theDeftemplate->slotList;
|
339
|
+
while (slotPtr != NULL)
|
340
|
+
{
|
341
|
+
ReleaseLexeme(theEnv,slotPtr->slotName);
|
342
|
+
RemoveHashedExpression(theEnv,slotPtr->defaultList);
|
343
|
+
slotPtr->defaultList = NULL;
|
344
|
+
RemoveHashedExpression(theEnv,slotPtr->facetList);
|
345
|
+
slotPtr->facetList = NULL;
|
346
|
+
RemoveConstraint(theEnv,slotPtr->constraints);
|
347
|
+
slotPtr->constraints = NULL;
|
348
|
+
slotPtr = slotPtr->next;
|
349
|
+
}
|
350
|
+
|
351
|
+
ReturnSlots(theEnv,theDeftemplate->slotList);
|
352
|
+
|
353
|
+
/*==================================*/
|
354
|
+
/* Free storage used by the header. */
|
355
|
+
/*==================================*/
|
356
|
+
|
357
|
+
DeinstallConstructHeader(theEnv,&theDeftemplate->header);
|
358
|
+
|
359
|
+
rtn_struct(theEnv,deftemplate,theDeftemplate);
|
360
|
+
#endif
|
361
|
+
}
|
362
|
+
|
363
|
+
/**************************************************************/
|
364
|
+
/* DestroyDeftemplate: Returns the data structures associated */
|
365
|
+
/* with a deftemplate construct to the pool of free memory. */
|
366
|
+
/**************************************************************/
|
367
|
+
static void DestroyDeftemplate(
|
368
|
+
Environment *theEnv,
|
369
|
+
Deftemplate *theDeftemplate)
|
370
|
+
{
|
371
|
+
#if (! BLOAD_ONLY) && (! RUN_TIME)
|
372
|
+
struct templateSlot *slotPtr, *nextSlot;
|
373
|
+
#endif
|
374
|
+
if (theDeftemplate == NULL) return;
|
375
|
+
|
376
|
+
#if (! BLOAD_ONLY) && (! RUN_TIME)
|
377
|
+
slotPtr = theDeftemplate->slotList;
|
378
|
+
|
379
|
+
while (slotPtr != NULL)
|
380
|
+
{
|
381
|
+
nextSlot = slotPtr->next;
|
382
|
+
rtn_struct(theEnv,templateSlot,slotPtr);
|
383
|
+
slotPtr = nextSlot;
|
384
|
+
}
|
385
|
+
#endif
|
386
|
+
|
387
|
+
DestroyFactPatternNetwork(theEnv,theDeftemplate->patternNetwork);
|
388
|
+
|
389
|
+
/*==================================*/
|
390
|
+
/* Free storage used by the header. */
|
391
|
+
/*==================================*/
|
392
|
+
|
393
|
+
#if (! BLOAD_ONLY) && (! RUN_TIME)
|
394
|
+
DeinstallConstructHeader(theEnv,&theDeftemplate->header);
|
395
|
+
|
396
|
+
rtn_struct(theEnv,deftemplate,theDeftemplate);
|
397
|
+
#endif
|
398
|
+
}
|
399
|
+
|
400
|
+
/***********************************************/
|
401
|
+
/* ReturnSlots: Returns the slot structures of */
|
402
|
+
/* a deftemplate to free memory. */
|
403
|
+
/***********************************************/
|
404
|
+
void ReturnSlots(
|
405
|
+
Environment *theEnv,
|
406
|
+
struct templateSlot *slotPtr)
|
407
|
+
{
|
408
|
+
#if (! BLOAD_ONLY) && (! RUN_TIME)
|
409
|
+
struct templateSlot *nextSlot;
|
410
|
+
|
411
|
+
while (slotPtr != NULL)
|
412
|
+
{
|
413
|
+
nextSlot = slotPtr->next;
|
414
|
+
ReturnExpression(theEnv,slotPtr->defaultList);
|
415
|
+
ReturnExpression(theEnv,slotPtr->facetList);
|
416
|
+
RemoveConstraint(theEnv,slotPtr->constraints);
|
417
|
+
rtn_struct(theEnv,templateSlot,slotPtr);
|
418
|
+
slotPtr = nextSlot;
|
419
|
+
}
|
420
|
+
#endif
|
421
|
+
}
|
422
|
+
|
423
|
+
/*************************************************/
|
424
|
+
/* DecrementDeftemplateBusyCount: Decrements the */
|
425
|
+
/* busy count of a deftemplate data structure. */
|
426
|
+
/*************************************************/
|
427
|
+
void DecrementDeftemplateBusyCount(
|
428
|
+
Environment *theEnv,
|
429
|
+
Deftemplate *theTemplate)
|
430
|
+
{
|
431
|
+
if (! ConstructData(theEnv)->ClearInProgress) theTemplate->busyCount--;
|
432
|
+
}
|
433
|
+
|
434
|
+
/*************************************************/
|
435
|
+
/* IncrementDeftemplateBusyCount: Increments the */
|
436
|
+
/* busy count of a deftemplate data structure. */
|
437
|
+
/*************************************************/
|
438
|
+
void IncrementDeftemplateBusyCount(
|
439
|
+
Environment *theEnv,
|
440
|
+
Deftemplate *theTemplate)
|
441
|
+
{
|
442
|
+
#if MAC_XCD
|
443
|
+
#pragma unused(theEnv)
|
444
|
+
#endif
|
445
|
+
|
446
|
+
theTemplate->busyCount++;
|
447
|
+
}
|
448
|
+
|
449
|
+
/*******************************************************************/
|
450
|
+
/* GetNextFactInTemplate: If passed a NULL pointer, returns the */
|
451
|
+
/* first fact in the template's fact-list. Otherwise returns the */
|
452
|
+
/* next template fact following the fact passed as an argument. */
|
453
|
+
/*******************************************************************/
|
454
|
+
Fact *GetNextFactInTemplate(
|
455
|
+
Deftemplate *theTemplate,
|
456
|
+
Fact *factPtr)
|
457
|
+
{
|
458
|
+
if (factPtr == NULL)
|
459
|
+
{ return(theTemplate->factList); }
|
460
|
+
|
461
|
+
if (factPtr->garbage) return NULL;
|
462
|
+
|
463
|
+
return(factPtr->nextTemplateFact);
|
464
|
+
}
|
465
|
+
|
466
|
+
#if ! RUN_TIME
|
467
|
+
|
468
|
+
/******************************/
|
469
|
+
/* CreateDeftemplateScopeMap: */
|
470
|
+
/******************************/
|
471
|
+
void *CreateDeftemplateScopeMap(
|
472
|
+
Environment *theEnv,
|
473
|
+
Deftemplate *theDeftemplate)
|
474
|
+
{
|
475
|
+
unsigned short scopeMapSize;
|
476
|
+
char *scopeMap;
|
477
|
+
const char *templateName;
|
478
|
+
Defmodule *matchModule, *theModule;
|
479
|
+
unsigned long moduleID;
|
480
|
+
unsigned int count;
|
481
|
+
void *theBitMap;
|
482
|
+
|
483
|
+
templateName = theDeftemplate->header.name->contents;
|
484
|
+
matchModule = theDeftemplate->header.whichModule->theModule;
|
485
|
+
|
486
|
+
scopeMapSize = (sizeof(char) * ((GetNumberOfDefmodules(theEnv) / BITS_PER_BYTE) + 1));
|
487
|
+
scopeMap = (char *) gm2(theEnv,scopeMapSize);
|
488
|
+
|
489
|
+
ClearBitString((void *) scopeMap,scopeMapSize);
|
490
|
+
SaveCurrentModule(theEnv);
|
491
|
+
for (theModule = GetNextDefmodule(theEnv,NULL) ;
|
492
|
+
theModule != NULL ;
|
493
|
+
theModule = GetNextDefmodule(theEnv,theModule))
|
494
|
+
{
|
495
|
+
SetCurrentModule(theEnv,theModule);
|
496
|
+
moduleID = theModule->header.bsaveID;
|
497
|
+
if (FindImportedConstruct(theEnv,"deftemplate",matchModule,
|
498
|
+
templateName,&count,true,NULL) != NULL)
|
499
|
+
SetBitMap(scopeMap,moduleID);
|
500
|
+
}
|
501
|
+
RestoreCurrentModule(theEnv);
|
502
|
+
theBitMap = AddBitMap(theEnv,scopeMap,scopeMapSize);
|
503
|
+
IncrementBitMapCount(theBitMap);
|
504
|
+
rm(theEnv,scopeMap,scopeMapSize);
|
505
|
+
return(theBitMap);
|
506
|
+
}
|
507
|
+
|
508
|
+
#endif
|
509
|
+
|
510
|
+
#if RUN_TIME
|
511
|
+
|
512
|
+
/**************************************************/
|
513
|
+
/* RuntimeDeftemplateAction: Action to be applied */
|
514
|
+
/* to each deftemplate construct when a runtime */
|
515
|
+
/* initialization occurs. */
|
516
|
+
/**************************************************/
|
517
|
+
static void RuntimeDeftemplateAction(
|
518
|
+
Environment *theEnv,
|
519
|
+
ConstructHeader *theConstruct,
|
520
|
+
void *buffer)
|
521
|
+
{
|
522
|
+
#if MAC_XCD
|
523
|
+
#pragma unused(buffer)
|
524
|
+
#endif
|
525
|
+
Deftemplate *theDeftemplate = (Deftemplate *) theConstruct;
|
526
|
+
|
527
|
+
theDeftemplate->header.env = theEnv;
|
528
|
+
SearchForHashedPatternNodes(theEnv,theDeftemplate->patternNetwork);
|
529
|
+
}
|
530
|
+
|
531
|
+
/********************************/
|
532
|
+
/* SearchForHashedPatternNodes: */
|
533
|
+
/********************************/
|
534
|
+
static void SearchForHashedPatternNodes(
|
535
|
+
Environment *theEnv,
|
536
|
+
struct factPatternNode *theNode)
|
537
|
+
{
|
538
|
+
while (theNode != NULL)
|
539
|
+
{
|
540
|
+
if ((theNode->lastLevel != NULL) && (theNode->lastLevel->header.selector))
|
541
|
+
{ AddHashedPatternNode(theEnv,theNode->lastLevel,theNode,theNode->networkTest->type,theNode->networkTest->value); }
|
542
|
+
|
543
|
+
SearchForHashedPatternNodes(theEnv,theNode->nextLevel);
|
544
|
+
|
545
|
+
theNode = theNode->rightNode;
|
546
|
+
}
|
547
|
+
}
|
548
|
+
|
549
|
+
/*********************************/
|
550
|
+
/* DeftemplateRunTimeInitialize: */
|
551
|
+
/*********************************/
|
552
|
+
void DeftemplateRunTimeInitialize(
|
553
|
+
Environment *theEnv)
|
554
|
+
{
|
555
|
+
DoForAllConstructs(theEnv,RuntimeDeftemplateAction,DeftemplateData(theEnv)->DeftemplateModuleIndex,true,NULL);
|
556
|
+
}
|
557
|
+
|
558
|
+
#endif /* RUN_TIME */
|
559
|
+
|
560
|
+
/*##################################*/
|
561
|
+
/* Additional Environment Functions */
|
562
|
+
/*##################################*/
|
563
|
+
|
564
|
+
const char *DeftemplateModule(
|
565
|
+
Deftemplate *theDeftemplate)
|
566
|
+
{
|
567
|
+
return GetConstructModuleName(&theDeftemplate->header);
|
568
|
+
}
|
569
|
+
|
570
|
+
const char *DeftemplateName(
|
571
|
+
Deftemplate *theDeftemplate)
|
572
|
+
{
|
573
|
+
return GetConstructNameString(&theDeftemplate->header);
|
574
|
+
}
|
575
|
+
|
576
|
+
const char *DeftemplatePPForm(
|
577
|
+
Deftemplate *theDeftemplate)
|
578
|
+
{
|
579
|
+
return GetConstructPPForm(&theDeftemplate->header);
|
580
|
+
}
|
581
|
+
|
582
|
+
#endif /* DEFTEMPLATE_CONSTRUCT */
|
583
|
+
|
584
|
+
|