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
/*******************************************************/
/* "C" Language Integrated Production System */
/* */
/* CLIPS Version 6.40 08/06/16 */
/* */
/* MAIN MODULE */
/*******************************************************/
/*************************************************************/
/* Purpose: */
/* */
/* Principal Programmer(s): */
/* Gary D. Riley */
/* */
/* Contributing Programmer(s): */
/* */
/* Revision History: */
/* */
/* 6.24: Moved UserFunctions and EnvUserFunctions to */
/* the new userfunctions.c file. */
/* */
/* 6.40: Removed use of void pointers for specific */
/* data structures. */
/* */
/* Moved CatchCtrlC to main.c. */
/* */
/*************************************************************/
/***************************************************************************/
/* */
/* Permission is hereby granted, free of charge, to any person obtaining */
/* a copy of this software and associated documentation files (the */
/* "Software"), to deal in the Software without restriction, including */
/* without limitation the rights to use, copy, modify, merge, publish, */
/* distribute, and/or sell copies of the Software, and to permit persons */
/* to whom the Software is furnished to do so. */
/* */
/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS */
/* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT */
/* OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY */
/* CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES */
/* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN */
/* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF */
/* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
/* */
/***************************************************************************/
#include "clips.h"
#if UNIX_V || LINUX || DARWIN || UNIX_7 || WIN_GCC || WIN_MVC
#include <signal.h>
#endif
/***************************************/
/* LOCAL INTERNAL FUNCTION DEFINITIONS */
/***************************************/
#if UNIX_V || LINUX || DARWIN || UNIX_7 || WIN_GCC || WIN_MVC
static void CatchCtrlC(int);
#endif
/***************************************/
/* LOCAL INTERNAL VARIABLE DEFINITIONS */
/***************************************/
static Environment *mainEnv;
/****************************************/
/* main: Starts execution of the expert */
/* system development environment. */
/****************************************/
int main(
int argc,
char *argv[])
{
mainEnv = CreateEnvironment();
#if UNIX_V || LINUX || DARWIN || UNIX_7 || WIN_GCC || WIN_MVC
signal(SIGINT,CatchCtrlC);
#endif
RerouteStdin(mainEnv,argc,argv);
CommandLoop(mainEnv);
/*==================================================================*/
/* Control does not normally return from the CommandLoop function. */
/* However if you are embedding CLIPS, have replaced CommandLoop */
/* with your own embedded calls that will return to this point, and */
/* are running software that helps detect memory leaks, you need to */
/* add function calls here to deallocate memory still being used by */
/* CLIPS. If you have a multi-threaded application, no environments */
/* can be currently executing. */
/*==================================================================*/
DestroyEnvironment(mainEnv);
return -1;
}
#if UNIX_V || LINUX || DARWIN || UNIX_7 || WIN_GCC || WIN_MVC || DARWIN
/***************/
/* CatchCtrlC: */
/***************/
static void CatchCtrlC(
int sgnl)
{
SetHaltExecution(mainEnv,true);
CloseAllBatchSources(mainEnv);
signal(SIGINT,CatchCtrlC);
}
#endif