50#define orxCOMMAND_KC_BLOCK_MARKER '"' /**< Block marker character */
51#define orxCOMMAND_KC_PUSH_MARKER '>' /**< Push marker character */
52#define orxCOMMAND_KC_POP_MARKER '<' /**< Pop marker character */
53#define orxCOMMAND_KC_GUID_MARKER '^' /**< GUID marker character */
54#define orxCOMMAND_KC_VARIABLE_MARKER '&' /**< Variable marker character */
55#define orxCOMMAND_KC_SEPARATOR ',' /**< Command separator character */
60typedef enum __orxCOMMAND_VAR_TYPE_t
62 orxCOMMAND_VAR_TYPE_STRING = 0,
63 orxCOMMAND_VAR_TYPE_FLOAT,
64 orxCOMMAND_VAR_TYPE_S32,
65 orxCOMMAND_VAR_TYPE_U32,
66 orxCOMMAND_VAR_TYPE_S64,
67 orxCOMMAND_VAR_TYPE_U64,
68 orxCOMMAND_VAR_TYPE_BOOL,
69 orxCOMMAND_VAR_TYPE_VECTOR,
70 orxCOMMAND_VAR_TYPE_NUMERIC,
72 orxCOMMAND_VAR_TYPE_NUMBER,
74 orxCOMMAND_VAR_TYPE_NONE = orxENUM_NONE
81typedef struct __orxCOMMAND_VAR_DEF_t
83 const orxSTRING zName; /**< Name : 4 */
84 orxCOMMAND_VAR_TYPE eType; /**< Type : 8 */
89typedef struct __orxCOMMAND_VAR_t
93 orxVECTOR vValue; /**< Vector value : 12 */
94 const orxSTRING zValue; /**< String value : 4 */
95 orxU32 u32Value; /**< U32 value : 4 */
96 orxS32 s32Value; /**< S32 value : 4 */
97 orxU64 u64Value; /**< U64 value : 8 */
98 orxS64 s64Value; /**< S64 value : 8 */
99 orxFLOAT fValue; /**< Float value : 4 */
100 orxBOOL bValue; /**< Bool value : 4 */
103 orxCOMMAND_VAR_TYPE eType; /**< Type : 16 */
108typedef void (orxFASTCALL *orxCOMMAND_FUNCTION)(orxU32 _u32ArgNumber, const orxCOMMAND_VAR *_astArgList, orxCOMMAND_VAR *_pstResult);
113#define orxCOMMAND_REGISTER_CORE_COMMAND(MODULE, COMMAND, RESULT_NAME, RESULT_TYPE, REQ_PARAM_NUMBER, OPT_PARAM_NUMBER, ...) \
116 orxCOMMAND_VAR_DEF stResult; \
117 orxCOMMAND_VAR_DEF astParamList[REQ_PARAM_NUMBER + OPT_PARAM_NUMBER + 1] = {{"Dummy", orxCOMMAND_VAR_TYPE_NONE}, __VA_ARGS__}; \
119 stResult.eType = RESULT_TYPE; \
120 stResult.zName = RESULT_NAME; \
121 eStatus = orxCommand_Register(#MODULE"."#COMMAND, &orx##MODULE##_Command##COMMAND, REQ_PARAM_NUMBER, OPT_PARAM_NUMBER, &astParamList[1], &stResult);\
122 orxASSERT(eStatus != orxSTATUS_FAILURE); \
125#define orxCOMMAND_UNREGISTER_CORE_COMMAND(MODULE, COMMAND) \
128 orxCommand_Unregister(#MODULE"."#COMMAND); \
131#define orxCOMMAND_REGISTER(NAME, FUNCTION, RESULT_NAME, RESULT_TYPE, REQ_PARAM_NUMBER, OPT_PARAM_NUMBER, ...) \
134 orxCOMMAND_VAR_DEF stResult; \
135 orxCOMMAND_VAR_DEF astParamList[REQ_PARAM_NUMBER + OPT_PARAM_NUMBER + 1] = {{"Dummy", orxCOMMAND_VAR_TYPE_NONE}, __VA_ARGS__}; \
137 stResult.eType = RESULT_TYPE; \
138 stResult.zName = RESULT_NAME; \
139 eStatus = orxCommand_Register(NAME, &FUNCTION, REQ_PARAM_NUMBER, OPT_PARAM_NUMBER, &astParamList[1], &stResult); \
140 orxASSERT(eStatus != orxSTATUS_FAILURE); \
143#define orxCOMMAND_UNREGISTER(NAME) \
146 orxCommand_Unregister(NAME); \
152extern orxDLLAPI void orxFASTCALL orxCommand_Setup();
157extern orxDLLAPI orxSTATUS orxFASTCALL orxCommand_Init();
161extern orxDLLAPI void orxFASTCALL orxCommand_Exit();
173extern orxDLLAPI orxSTATUS orxFASTCALL orxCommand_Register(const orxSTRING _zCommand, const orxCOMMAND_FUNCTION _pfnFunction, orxU32 _u32RequiredParamNumber, orxU32 _u32OptionalParamNumber, const orxCOMMAND_VAR_DEF *_astParamList, const orxCOMMAND_VAR_DEF *_pstResult);
179extern orxDLLAPI orxSTATUS orxFASTCALL orxCommand_Unregister(const orxSTRING _zCommand);
185extern orxDLLAPI orxBOOL orxFASTCALL orxCommand_IsRegistered(const orxSTRING _zCommand);
194extern orxDLLAPI orxSTATUS orxFASTCALL orxCommand_AddAlias(const orxSTRING _zAlias, const orxSTRING _zCommand, const orxSTRING _zArgs);
200extern orxDLLAPI orxSTATUS orxFASTCALL orxCommand_RemoveAlias(const orxSTRING _zAlias);
206extern orxDLLAPI orxBOOL orxFASTCALL orxCommand_IsAlias(const orxSTRING _zAlias);
213extern orxDLLAPI const orxSTRING orxFASTCALL orxCommand_GetPrototype(const orxSTRING _zCommand);
221extern orxDLLAPI const orxSTRING orxFASTCALL orxCommand_GetNext(const orxSTRING _zBase, const orxSTRING _zPrevious, orxU32 *_pu32CommonLength);
229extern orxDLLAPI orxCOMMAND_VAR *orxFASTCALL orxCommand_Evaluate(const orxSTRING _zCommandLine, orxCOMMAND_VAR *_pstResult);
237extern orxDLLAPI orxCOMMAND_VAR *orxFASTCALL orxCommand_EvaluateWithGUID(const orxSTRING _zCommandLine, orxU64 _u64GUID, orxCOMMAND_VAR *_pstResult);
246extern orxDLLAPI orxCOMMAND_VAR *orxFASTCALL orxCommand_Execute(const orxSTRING _zCommand, orxU32 _u32ArgNumber, const orxCOMMAND_VAR *_astArgList, orxCOMMAND_VAR *_pstResult);
255extern orxDLLAPI orxSTATUS orxFASTCALL orxCommand_ParseNumericalArguments(orxU32 _u32ArgNumber, const orxCOMMAND_VAR *_astArgList, orxCOMMAND_VAR *_astOperandList);
263extern orxDLLAPI orxU32 orxFASTCALL orxCommand_PrintVar(orxSTRING _zDstString, orxU32 _u32Size, const orxCOMMAND_VAR *_pstVar);
266#endif /* _orxCOMMAND_H_ */