13 #include "gcp/util/common/String.h"
19 #define SC_HASH_SIZE 31
39 #define SC_NEW_FN(fn) void *(fn)(Script *sc)
40 #define SC_CLR_FN(fn) int (fn)(Script *sc, void *data)
41 #define SC_DEL_FN(fn) void *(fn)(Script *sc, void *data)
47 Script *new_Script(
void *project, SC_NEW_FN(*new_fn), SC_CLR_FN(*clr_fn),
57 InputStream *stream,
int restricted,
bool interactive);
58 int rewind_script(
Script *sc);
59 int discard_script(
Script *sc);
60 char *script_name(
Script *sc);
71 int script_is_polling(
Script *sc);
94 ScriptState exit_script(
Script *sc,
char *reason);
95 ScriptState script_state(
Script *sc);
105 CommandMem *new_CommandMem(
Script *sc);
108 FunctionMem *new_FunctionMem(
Script *sc);
111 ScOperatorMem *new_ScOperatorMem(
Script *sc);
114 DataTypeMem *new_DataTypeMem(
Script *sc);
117 StatementMem *new_StatementMem(
Script *sc);
120 ExprMem *new_ExprMem(
Script *sc);
123 ExprOperMem *new_ExprOperMem(
Script *sc);
126 LoopStateMem *new_LoopStateMem(
Script *sc);
129 TypeSpecMem *new_TypeSpecMem(
Script *sc);
132 ExeFrameMem *new_ExeFrameMem(
Script *sc);
135 ListVariableMem *new_ListVariableMem(
Script *sc);
183 void *new_ScriptObject(
Script *sc,
FreeList *fl,
size_t node_size);
219 std::string dataTypeName_;
220 std::string varName_;
225 CmdArg(std::string dataTypeName, std::string varName,
bool isOptional) {
226 dataTypeName_ = dataTypeName;
228 isOptional_ = isOptional;
239 void operator=(
const CmdArg& arg) {
243 void operator=(
CmdArg& arg) {
244 dataTypeName_ = arg.dataTypeName_;
245 varName_ = arg.varName_;
246 isOptional_ = arg.isOptional_;
257 ScriptDataType(std::string name, DataTypeId
id,
void* context=0) {
264 name_ = dataType.name_;
266 context_ = dataType.context_;
270 return name_ < cmd.name_;
274 return name_ == dataType.name_;
285 std::string declaration_;
286 std::string description_;
288 std::list<CmdArg> argList_;
300 declaration_ = cmd.declaration_;
301 description_ = cmd.description_;
303 retType_ = cmd.retType_;
306 for(std::list<CmdArg>::const_iterator iArg=cmd.argList_.begin(); iArg != cmd.argList_.end(); iArg++)
307 argList_.insert(argList_.end(), *iArg);
311 return name_ < cmd.name_;
330 FunctionMem *
function;
331 ScOperatorMem *scoperator;
332 DataTypeMem *datatype;
333 StatementMem *statement;
334 LoopStateMem *loopstate;
336 ExprOperMem *exproper;
337 TypeSpecMem *typespec;
338 ExeFrameMem *exeframe;
339 ListVariableMem *list_var;
370 StatementList *stmts;
375 CompStack *comp_stack;
377 StatementList *stmts;
392 std::list<ScriptCmd>* commands_;
393 std::list<ScriptCmd>* functions_;
394 std::list<ScriptCmd>* symbols_;
396 std::list<ScriptDataType>* dataTypes_;
400 if(!exists(dataType.name_))
401 dataTypes_->insert(dataTypes_->end(), dataType);
405 for(std::list<ScriptDataType>::iterator iDat=dataTypes_->begin();
406 iDat != dataTypes_->end(); iDat++)
407 if((*iDat).name_ == name)
418 if(!exists(cmdArg.dataTypeName_))
419 dataTypes_->insert(dataTypes_->end(),
422 cmd->argList_.insert(cmd->argList_.end(), cmdArg);
453 SYM_FUNCTION_KEYWORD,
500 TypeSpecList *new_TypeSpecList(
Script *sc);
506 StatementList *stmts;
523 #define CMD_FN(fn) int (fn)(Script *sc, VariableList *args)
548 Command *add_BuiltinCommand(
Script *sc,
char *declaration, CMD_FN(*cmd_fn), std::string description);
549 Command *add_BuiltinCommand(
Script *sc,
char *declaration, CMD_FN(*cmd_fn));
550 int add_UserAlias(
Script *sc,
char* command,
char* alias);
578 #define FUNC_FN(fn) int (fn)(Script *sc, VariableList *args, Variable *result, \
586 #define LOOP_FN(fn) void (fn)(Script *sc, Variable *state, LoopOper oper)
616 Function *add_BuiltinFunction(
Script *sc,
char *declaration, FUNC_FN(*func_fn), std::string description);
617 Function *add_BuiltinFunction(
Script *sc,
char *declaration, FUNC_FN(*func_fn));
619 FUNC_FN(*func_fn), LOOP_FN(*loop_fn),
625 #define OPER_FN(fn) int (fn)(Script *sc, VariableList *args, Variable *result)
654 #define DT_PARSE(fn) int (fn)(Script *sc, DataType *dt, \
655 InputStream *stream, Expr *e)
670 #define DT_CONST(fn) int (fn)(Script *sc, DataType *dt, \
671 InputStream *stream, Expr *e)
677 #define DT_PRINT(fn) int (fn)(Script *sc, OutputStream *output, Variable *var)
686 #define DT_CHECK(fn) int (fn)(Script *sc, Variable *var, InputStream *stream)
711 #define DT_ITER(fn) int (fn)(Script *sc, Variable *first, Variable *last, \
712 Variable *step, int multiplier, Variable *value)
721 DT_ITER(sc_iterate_double);
729 DT_ITER(sc_iterate_int);
738 DT_ITER(sc_iterate_uint);
749 TypeSpecList *fields;
754 DataType *add_BuiltinGroupDataType(
Script *sc,
char *declaration);
794 DataType *add_SetDataType(
Script *sc,
char *name,
int allow_bit_mask,
795 Enumerator *members,
unsigned nmember, DT_ITER(*iter_fn),
char *incr_name);
807 DT_CHECK(*check_fn));
821 DT_CHECK(*check_fn));
829 DataType *add_PathDataType(
Script *sc,
char *name, DT_CHECK(*check_fn));
859 #define DT_RELFN(fn) int (fn)(Variable *va, Variable *vb)
890 DataType *new_DataType(
Script *sc,
char *name, TypeClass dataclass,
891 void *context,
size_t vsize,
892 DT_CHECK(*check_fn), DT_PARSE(*parse_fn),
893 DT_CONST(*const_fn), DT_PRINT(*print_fn),
894 DT_RELFN(*equal_fn), DT_RELFN(*gt_fn), DT_RELFN(*in_fn),
895 DT_ITER(*iter_fn),
char *incr_name,
896 DataTypeId
id = DT_UNK);
909 DataType *add_UintDataType(
Script *sc,
char *name, DT_CHECK(*check_fn),
910 DT_ITER(*iter_fn),
char *incr_name);
914 DataType *add_IntDataType(
Script *sc,
char *name, DT_CHECK(*check_fn),
915 DT_ITER(*iter_fn),
char *incr_name,
920 DataType *add_DoubleDataType(
Script *sc,
char *name, DT_CHECK(*check_fn),
921 DT_ITER(*iter_fn),
char *incr_name,
931 DataType *add_SexagesimalDataType(
Script *sc,
char *name, DT_CHECK(*check_fn),
932 DT_ITER(*iter_fn),
char *incr_name,
935 DataType *add_Sexagesimal24DataType(
Script *sc,
char *name, DT_CHECK(*check_fn),
936 DT_ITER(*iter_fn),
char *incr_name,
964 int parse_procedure_arguments(
Script *sc,
char *name,
int is_func,
List *args,
1002 int get_Arguments(VariableList *vl, ...);
1004 VariableList *args);
1007 VariableList *new_VariableList(
Script *sc);
1015 #define OPTION_HAS_VALUE(arg) (~(arg)->flags & VAR_IS_NUL)
1025 #define LIST_VARIABLE(v) ((ListVariable *)(v))
1032 #define UINT_VARIABLE(v) ((UintVariable *)(v))
1034 DT_RELFN(sc_equal_uint);
1035 DT_RELFN(sc_gt_uint);
1043 #define SET_VARIABLE(v) ((SetVariable *)(v))
1050 #define CHOICE_VARIABLE(v) ((ChoiceVariable *)(v))
1058 #define BOOL_VARIABLE(v) ((BoolVariable *)(v))
1065 #define INT_VARIABLE(v) ((IntVariable *)(v))
1067 DT_RELFN(sc_equal_int);
1068 DT_RELFN(sc_gt_int);
1076 #define DOUBLE_VARIABLE(v) ((DoubleVariable *)(v))
1078 DT_RELFN(sc_equal_double);
1079 DT_RELFN(sc_gt_double);
1088 #define STRING_VARIABLE(v) ((StringVariable *)(v))
1090 DT_RELFN(sc_equal_string);
1091 DT_RELFN(sc_in_string);
1106 #define SYMBOL_VARIABLE(v) ((SymbolVariable *)(v))
1119 #define SIGNAL_VARIABLE(v) ((SignalVariable *)(v))
1164 VariableList *pop_ExprStackArgs(
Script *sc,
Expr *expr,
int narg);
1174 char *new_ScriptString(
Script *sc,
char *
string);
1180 int push_Scope(
Script *sc);
1181 int pop_Scope(
Script *sc);
1193 Symbol *add_ScriptSymbol(
Script *sc,
char *name, SymbolType code,
void *data,
bool isAlias=
false);
1194 Symbol *add_ScriptSymbol(
Script *sc,
char *name, SymbolType code, std::string description);
1222 char *new_StringPool_string(
StringPool *sp,
char *
string);
1228 int add_script_signal(
Script *sc,
char *name);
1231 int clear_script_signal(
Symbol *sig);
1232 int reset_script_signal(
Symbol *sig);
1246 CatchState catch_script_events(
Script *sc);
Definition: script.h:1052
Definition: script.h:1071
Definition: script.h:1027
Definition: script.h:1020
Definition: script.h:1094
Definition: statement.c:252
Definition: script.h:1114
Definition: stringpool.c:23
Definition: script.h:1060
Definition: freelist.c:13
Definition: script.h:1045
Definition: script.h:1253
Definition: script.h:1082
Definition: script.h:1264
Definition: statement.c:227
Definition: script.h:1038
Definition: statement.c:143