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_SEPARATOR ',' /**< Command separator character */
59typedef enum __orxCOMMAND_VAR_TYPE_t
61 orxCOMMAND_VAR_TYPE_STRING = 0,
62 orxCOMMAND_VAR_TYPE_FLOAT,
63 orxCOMMAND_VAR_TYPE_S32,
64 orxCOMMAND_VAR_TYPE_U32,
65 orxCOMMAND_VAR_TYPE_S64,
66 orxCOMMAND_VAR_TYPE_U64,
67 orxCOMMAND_VAR_TYPE_BOOL,
68 orxCOMMAND_VAR_TYPE_VECTOR,
69 orxCOMMAND_VAR_TYPE_NUMERIC,
71 orxCOMMAND_VAR_TYPE_NUMBER,
73 orxCOMMAND_VAR_TYPE_NONE = orxENUM_NONE
80typedef struct __orxCOMMAND_VAR_DEF_t
82 const orxSTRING zName; /**< Name : 4 */
83 orxCOMMAND_VAR_TYPE eType; /**< Type : 8 */
88typedef struct __orxCOMMAND_VAR_t
92 orxVECTOR vValue; /**< Vector value : 12 */
93 const orxSTRING zValue; /**< String value : 4 */
94 orxU32 u32Value; /**< U32 value : 4 */
95 orxS32 s32Value; /**< S32 value : 4 */
96 orxU64 u64Value; /**< U64 value : 8 */
97 orxS64 s64Value; /**< S64 value : 8 */
98 orxFLOAT fValue; /**< Float value : 4 */
99 orxBOOL bValue; /**< Bool value : 4 */
102 orxCOMMAND_VAR_TYPE eType; /**< Type : 16 */
107typedef void (orxFASTCALL *orxCOMMAND_FUNCTION)(orxU32 _u32ArgNumber, const orxCOMMAND_VAR *_astArgList, orxCOMMAND_VAR *_pstResult);
112#define orxCOMMAND_REGISTER_CORE_COMMAND(MODULE, COMMAND, RESULT_NAME, RESULT_TYPE, REQ_PARAM_NUMBER, OPT_PARAM_NUMBER, ...) \
115 orxCOMMAND_VAR_DEF stResult; \
116 orxCOMMAND_VAR_DEF astParamList[REQ_PARAM_NUMBER + OPT_PARAM_NUMBER + 1] = {{"Dummy", orxCOMMAND_VAR_TYPE_NONE}, __VA_ARGS__}; \
118 stResult.eType = RESULT_TYPE; \
119 stResult.zName = RESULT_NAME; \
120 eStatus = orxCommand_Register(#MODULE"."#COMMAND, &orx##MODULE##_Command##COMMAND, REQ_PARAM_NUMBER, OPT_PARAM_NUMBER, &astParamList[1], &stResult);\
121 orxASSERT(eStatus != orxSTATUS_FAILURE); \
124#define orxCOMMAND_UNREGISTER_CORE_COMMAND(MODULE, COMMAND) \
127 orxCommand_Unregister(#MODULE"."#COMMAND); \
130#define orxCOMMAND_REGISTER(NAME, FUNCTION, RESULT_NAME, RESULT_TYPE, REQ_PARAM_NUMBER, OPT_PARAM_NUMBER, ...) \
133 orxCOMMAND_VAR_DEF stResult; \
134 orxCOMMAND_VAR_DEF astParamList[REQ_PARAM_NUMBER + OPT_PARAM_NUMBER + 1] = {{"Dummy", orxCOMMAND_VAR_TYPE_NONE}, __VA_ARGS__}; \
136 stResult.eType = RESULT_TYPE; \
137 stResult.zName = RESULT_NAME; \
138 eStatus = orxCommand_Register(NAME, &FUNCTION, REQ_PARAM_NUMBER, OPT_PARAM_NUMBER, &astParamList[1], &stResult); \
139 orxASSERT(eStatus != orxSTATUS_FAILURE); \
142#define orxCOMMAND_UNREGISTER(NAME) \
145 orxCommand_Unregister(NAME); \
151extern orxDLLAPI void orxFASTCALL orxCommand_Setup();
156extern orxDLLAPI orxSTATUS orxFASTCALL orxCommand_Init();
160extern orxDLLAPI void orxFASTCALL orxCommand_Exit();
172extern 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);
178extern orxDLLAPI orxSTATUS orxFASTCALL orxCommand_Unregister(const orxSTRING _zCommand);
184extern orxDLLAPI orxBOOL orxFASTCALL orxCommand_IsRegistered(const orxSTRING _zCommand);
193extern orxDLLAPI orxSTATUS orxFASTCALL orxCommand_AddAlias(const orxSTRING _zAlias, const orxSTRING _zCommand, const orxSTRING _zArgs);
199extern orxDLLAPI orxSTATUS orxFASTCALL orxCommand_RemoveAlias(const orxSTRING _zAlias);
205extern orxDLLAPI orxBOOL orxFASTCALL orxCommand_IsAlias(const orxSTRING _zAlias);
212extern orxDLLAPI const orxSTRING orxFASTCALL orxCommand_GetPrototype(const orxSTRING _zCommand);
220extern orxDLLAPI const orxSTRING orxFASTCALL orxCommand_GetNext(const orxSTRING _zBase, const orxSTRING _zPrevious, orxU32 *_pu32CommonLength);
228extern orxDLLAPI orxCOMMAND_VAR *orxFASTCALL orxCommand_Evaluate(const orxSTRING _zCommandLine, orxCOMMAND_VAR *_pstResult);
236extern orxDLLAPI orxCOMMAND_VAR *orxFASTCALL orxCommand_EvaluateWithGUID(const orxSTRING _zCommandLine, orxU64 _u64GUID, orxCOMMAND_VAR *_pstResult);
245extern orxDLLAPI orxCOMMAND_VAR *orxFASTCALL orxCommand_Execute(const orxSTRING _zCommand, orxU32 _u32ArgNumber, const orxCOMMAND_VAR *_astArgList, orxCOMMAND_VAR *_pstResult);
254extern orxDLLAPI orxSTATUS orxFASTCALL orxCommand_ParseNumericalArguments(orxU32 _u32ArgNumber, const orxCOMMAND_VAR *_astArgList, orxCOMMAND_VAR *_astOperandList);
262extern orxDLLAPI orxU32 orxFASTCALL orxCommand_PrintVar(orxSTRING _zDstString, orxU32 _u32Size, const orxCOMMAND_VAR *_pstVar);
265#endif /* _orxCOMMAND_H_ */