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
/*******************************************************/
/* "C" Language Integrated Production System */
/* */
/* CLIPS Version 6.40 11/01/16 */
/* */
/* */
/*******************************************************/
/*************************************************************/
/* Purpose: */
/* */
/* Principal Programmer(s): */
/* Brian L. Dantes */
/* */
/* Contributing Programmer(s): */
/* */
/* Revision History: */
/* */
/* 6.23: Correction for FalseSymbol/TrueSymbol. DR0859 */
/* */
/* Changed name of variable log to logName */
/* because of Unix compiler warnings of shadowed */
/* definitions. */
/* */
/* 6.24: Renamed BOOLEAN macro type to intBool. */
/* */
/* Added pragmas to remove compilation warnings. */
/* */
/* 6.30: Updated ENTITY_RECORD definitions to include */
/* additional NULL initializers. */
/* */
/* Added ReleaseProcParameters call. */
/* */
/* Added tracked memory calls. */
/* */
/* Removed conditional code for unsupported */
/* compilers/operating systems (IBM_MCW, */
/* MAC_MCW, and IBM_TBC). */
/* */
/* Added const qualifiers to remove C++ */
/* deprecation warnings. */
/* */
/* 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. */
/* */
/* UDF redesign. */
/* */
/*************************************************************/
#ifndef _H_prccode
#pragma once
#define _H_prccode
#include "expressn.h"
#include "evaluatn.h"
#include "moduldef.h"
#include "scanner.h"
#include "symbol.h"
typedef struct ProcParamStack
{
UDFValue *ParamArray;
#if DEFGENERIC_CONSTRUCT
Expression *ParamExpressions;
#endif
unsigned int ParamArraySize;
UDFValue *WildcardValue;
void (*UnboundErrFunc)(Environment *,const char *);
struct ProcParamStack *nxt;
} PROC_PARAM_STACK;
#define PROCEDURAL_PRIMITIVE_DATA 37
struct proceduralPrimitiveData
{
Multifield *NoParamValue;
UDFValue *ProcParamArray;
unsigned int ProcParamArraySize;
Expression *CurrentProcActions;
#if DEFGENERIC_CONSTRUCT
Expression *ProcParamExpressions;
#endif
PROC_PARAM_STACK *pstack;
UDFValue *WildcardValue;
UDFValue *LocalVarArray;
void (*ProcUnboundErrFunc)(Environment *,const char *);
EntityRecord ProcParameterInfo;
EntityRecord ProcWildInfo;
EntityRecord ProcGetInfo;
EntityRecord ProcBindInfo;
#if ! DEFFUNCTION_CONSTRUCT
EntityRecord DeffunctionEntityRecord;
#endif
#if ! DEFGENERIC_CONSTRUCT
EntityRecord GenericEntityRecord;
#endif
unsigned int Oldindex;
};
#define ProceduralPrimitiveData(theEnv) ((struct proceduralPrimitiveData *) GetEnvironmentData(theEnv,PROCEDURAL_PRIMITIVE_DATA))
void InstallProcedurePrimitives(Environment *);
#if (! BLOAD_ONLY) && (! RUN_TIME)
#if DEFFUNCTION_CONSTRUCT || OBJECT_SYSTEM
Expression *ParseProcParameters(Environment *,const char *,struct token *,Expression *,
CLIPSLexeme **,unsigned short *,unsigned short *,bool *,
bool (*)(Environment *,const char *));
#endif
Expression *ParseProcActions(Environment *,const char *,const char *,struct token *,Expression *,CLIPSLexeme *,
int (*)(Environment *,Expression *,void *),
int (*)(Environment *,Expression *,void *),
unsigned short *,void *);
int ReplaceProcVars(Environment *,const char *,Expression *,Expression *,CLIPSLexeme *,
int (*)(Environment *,Expression *,void *),void *);
#if DEFGENERIC_CONSTRUCT
Expression *GenProcWildcardReference(Environment *,int);
#endif
#endif
void PushProcParameters(Environment *,Expression *,unsigned int,const char *,const char *,void (*)(Environment *,const char *));
void PopProcParameters(Environment *);
#if DEFGENERIC_CONSTRUCT
Expression *GetProcParamExpressions(Environment *);
#endif
void EvaluateProcActions(Environment *,Defmodule *,Expression *,unsigned short,
UDFValue *,void (*)(Environment *,const char *));
void PrintProcParamArray(Environment *,const char *);
void GrabProcWildargs(Environment *,UDFValue *,unsigned int);
#endif /* _H_prccode */