1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
/*******************************************************/
/* "C" Language Integrated Production System */
/* */
/* CLIPS Version 6.40 11/01/16 */
/* */
/* DEFFUNCTION HEADER FILE */
/*******************************************************/
/*************************************************************/
/* Purpose: */
/* */
/* Principal Programmer(s): */
/* Brian L. Dantes */
/* Gary D. Riley */
/* */
/* Contributing Programmer(s): */
/* */
/* Revision History: */
/* */
/* 6.23: Correction for FalseSymbol/TrueSymbol. DR0859 */
/* */
/* Corrected compilation errors for files */
/* generated by constructs-to-c. DR0861 */
/* */
/* Changed name of variable log to logName */
/* because of Unix compiler warnings of shadowed */
/* definitions. */
/* */
/* 6.24: Renamed BOOLEAN macro type to intBool. */
/* */
/* Corrected code to remove run-time program */
/* compiler warning. */
/* */
/* 6.30: Removed conditional code for unsupported */
/* compilers/operating systems (IBM_MCW, */
/* MAC_MCW, and IBM_TBC). */
/* */
/* Changed integer type/precision. */
/* */
/* Added missing initializer for ENTITY_RECORD. */
/* */
/* Added const qualifiers to remove C++ */
/* deprecation warnings. */
/* */
/* Converted API macros to function calls. */
/* */
/* Changed find construct functionality so that */
/* imported modules are search when locating a */
/* named construct. */
/* */
/* 6.40: Removed LOCALE definition. */
/* */
/* Pragma once and other inclusion changes. */
/* */
/* Added support for booleans with <stdbool.h>. */
/* */
/* Removed use of void pointers for specific */
/* data structures. */
/* */
/* ALLOW_ENVIRONMENT_GLOBALS no longer supported. */
/* */
/* UDF redesign. */
/* */
/*************************************************************/
#ifndef _H_dffnxfun
#pragma once
#define _H_dffnxfun
typedef struct deffunction Deffunction;
typedef struct deffunctionModuleData DeffunctionModuleData;
#include "entities.h"
#include "moduldef.h"
#include "constrct.h"
#include "evaluatn.h"
struct deffunctionModuleData
{
struct defmoduleItemHeader header;
};
struct deffunction
{
ConstructHeader header;
unsigned busy;
unsigned executing;
bool trace;
Expression *code;
unsigned short minNumberOfParameters;
unsigned short maxNumberOfParameters;
unsigned short numberOfLocalVars;
};
#define DEFFUNCTION_DATA 23
struct deffunctionData
{
Construct *DeffunctionConstruct;
unsigned DeffunctionModuleIndex;
EntityRecord DeffunctionEntityRecord;
#if DEBUGGING_FUNCTIONS
bool WatchDeffunctions;
#endif
struct CodeGeneratorItem *DeffunctionCodeItem;
Deffunction *ExecutingDeffunction;
};
#define DeffunctionData(theEnv) ((struct deffunctionData *) GetEnvironmentData(theEnv,DEFFUNCTION_DATA))
bool CheckDeffunctionCall(Environment *,Deffunction *,int);
void DeffunctionGetBind(UDFValue *);
void DFRtnUnknown(UDFValue *);
void DFWildargs(UDFValue *);
const char *DeffunctionModule(Deffunction *);
Deffunction *FindDeffunction(Environment *,const char *);
Deffunction *FindDeffunctionInModule(Environment *,const char *);
void GetDeffunctionList(Environment *,CLIPSValue *,Defmodule *);
const char *DeffunctionName(Deffunction *);
CLIPSLexeme *GetDeffunctionNamePointer(Environment *,Deffunction *);
const char *DeffunctionPPForm(Deffunction *);
Deffunction *GetNextDeffunction(Environment *,Deffunction *);
bool DeffunctionIsDeletable(Deffunction *);
void SetDeffunctionPPForm(Environment *,Deffunction *,const char *);
bool Undeffunction(Deffunction *,Environment *);
void GetDeffunctionListFunction(Environment *,UDFContext *,UDFValue *);
void GetDeffunctionModuleCommand(Environment *,UDFContext *,UDFValue *);
Deffunction *LookupDeffunctionByMdlOrScope(Environment *,const char *);
Deffunction *LookupDeffunctionInScope(Environment *,const char *);
#if (! BLOAD_ONLY) && (! RUN_TIME)
void RemoveDeffunction(Environment *,Deffunction *);
#endif
void SetupDeffunctions(Environment *);
void UndeffunctionCommand(Environment *,UDFContext *,UDFValue *);
#if DEBUGGING_FUNCTIONS
bool DeffunctionGetWatch(Deffunction *);
void ListDeffunctions(Environment *,const char *,Defmodule *);
void DeffunctionSetWatch(Deffunction *,bool);
void ListDeffunctionsCommand(Environment *,UDFContext *,UDFValue *);
void PPDeffunctionCommand(Environment *,UDFContext *,UDFValue *);
#endif
#if RUN_TIME
void DeffunctionRunTimeInitialize(Environment *);
#endif
#endif /* _H_dffnxfun */