orx 1.17
Portable Game Engine
Loading...
Searching...
No Matches
orxCommand.h
Go to the documentation of this file.
1/* Orx - Portable Game Engine
2 *
3 * Copyright (c) 2008- Orx-Project
4 *
5 * This software is provided 'as-is', without any express or implied
6 * warranty. In no event will the authors be held liable for any damages
7 * arising from the use of this software.
8 *
9 * Permission is granted to anyone to use this software for any purpose,
10 * including commercial applications, and to alter it and redistribute it
11 * freely, subject to the following restrictions:
12 *
13 * 1. The origin of this software must not be misrepresented; you must not
14 * claim that you wrote the original software. If you use this software
15 * in a product, an acknowledgment in the product documentation would be
16 * appreciated but is not required.
17 *
18 * 2. Altered source versions must be plainly marked as such, and must not be
19 * misrepresented as being the original software.
20 *
21 * 3. This notice may not be removed or altered from any source
22 * distribution.
23 */
24
31
39
40#ifndef _orxCOMMAND_H_
41#define _orxCOMMAND_H_
42
43
44#include "orxInclude.h"
45#include "math/orxVector.h"
46
47
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 */
56
57
60typedef enum __orxCOMMAND_VAR_TYPE_t
61{
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,
71
72 orxCOMMAND_VAR_TYPE_NUMBER,
73
74 orxCOMMAND_VAR_TYPE_NONE = orxENUM_NONE
75
76} orxCOMMAND_VAR_TYPE;
77
78
81typedef struct __orxCOMMAND_VAR_DEF_t
82{
83 const orxSTRING zName; /**< Name : 4 */
84 orxCOMMAND_VAR_TYPE eType; /**< Type : 8 */
85
86} orxCOMMAND_VAR_DEF;
87
89typedef struct __orxCOMMAND_VAR_t
90{
91 union
92 {
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 */
101 };
102
103 orxCOMMAND_VAR_TYPE eType; /**< Type : 16 */
104
105} orxCOMMAND_VAR;
106
108typedef void (orxFASTCALL *orxCOMMAND_FUNCTION)(orxU32 _u32ArgNumber, const orxCOMMAND_VAR *_astArgList, orxCOMMAND_VAR *_pstResult);
109
110
113#define orxCOMMAND_REGISTER_CORE_COMMAND(MODULE, COMMAND, RESULT_NAME, RESULT_TYPE, REQ_PARAM_NUMBER, OPT_PARAM_NUMBER, ...) \
114do \
115{ \
116 orxCOMMAND_VAR_DEF stResult; \
117 orxCOMMAND_VAR_DEF astParamList[REQ_PARAM_NUMBER + OPT_PARAM_NUMBER + 1] = {{"Dummy", orxCOMMAND_VAR_TYPE_NONE}, __VA_ARGS__}; \
118 orxSTATUS eStatus; \
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); \
123} while(orxFALSE)
124
125#define orxCOMMAND_UNREGISTER_CORE_COMMAND(MODULE, COMMAND) \
126do \
127{ \
128 orxCommand_Unregister(#MODULE"."#COMMAND); \
129} while(orxFALSE)
130
131#define orxCOMMAND_REGISTER(NAME, FUNCTION, RESULT_NAME, RESULT_TYPE, REQ_PARAM_NUMBER, OPT_PARAM_NUMBER, ...) \
132do \
133{ \
134 orxCOMMAND_VAR_DEF stResult; \
135 orxCOMMAND_VAR_DEF astParamList[REQ_PARAM_NUMBER + OPT_PARAM_NUMBER + 1] = {{"Dummy", orxCOMMAND_VAR_TYPE_NONE}, __VA_ARGS__}; \
136 orxSTATUS eStatus; \
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); \
141} while(orxFALSE)
142
143#define orxCOMMAND_UNREGISTER(NAME) \
144do \
145{ \
146 orxCommand_Unregister(NAME); \
147} while(orxFALSE)
148
149
152extern orxDLLAPI void orxFASTCALL orxCommand_Setup();
153
157extern orxDLLAPI orxSTATUS orxFASTCALL orxCommand_Init();
158
161extern orxDLLAPI void orxFASTCALL orxCommand_Exit();
162
163
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);
174
179extern orxDLLAPI orxSTATUS orxFASTCALL orxCommand_Unregister(const orxSTRING _zCommand);
180
185extern orxDLLAPI orxBOOL orxFASTCALL orxCommand_IsRegistered(const orxSTRING _zCommand);
186
187
194extern orxDLLAPI orxSTATUS orxFASTCALL orxCommand_AddAlias(const orxSTRING _zAlias, const orxSTRING _zCommand, const orxSTRING _zArgs);
195
200extern orxDLLAPI orxSTATUS orxFASTCALL orxCommand_RemoveAlias(const orxSTRING _zAlias);
201
206extern orxDLLAPI orxBOOL orxFASTCALL orxCommand_IsAlias(const orxSTRING _zAlias);
207
208
213extern orxDLLAPI const orxSTRING orxFASTCALL orxCommand_GetPrototype(const orxSTRING _zCommand);
214
221extern orxDLLAPI const orxSTRING orxFASTCALL orxCommand_GetNext(const orxSTRING _zBase, const orxSTRING _zPrevious, orxU32 *_pu32CommonLength);
222
223
229extern orxDLLAPI orxCOMMAND_VAR *orxFASTCALL orxCommand_Evaluate(const orxSTRING _zCommandLine, orxCOMMAND_VAR *_pstResult);
230
237extern orxDLLAPI orxCOMMAND_VAR *orxFASTCALL orxCommand_EvaluateWithGUID(const orxSTRING _zCommandLine, orxU64 _u64GUID, orxCOMMAND_VAR *_pstResult);
238
246extern orxDLLAPI orxCOMMAND_VAR *orxFASTCALL orxCommand_Execute(const orxSTRING _zCommand, orxU32 _u32ArgNumber, const orxCOMMAND_VAR *_astArgList, orxCOMMAND_VAR *_pstResult);
247
248
255extern orxDLLAPI orxSTATUS orxFASTCALL orxCommand_ParseNumericalArguments(orxU32 _u32ArgNumber, const orxCOMMAND_VAR *_astArgList, orxCOMMAND_VAR *_astOperandList);
256
263extern orxDLLAPI orxU32 orxFASTCALL orxCommand_PrintVar(orxSTRING _zDstString, orxU32 _u32Size, const orxCOMMAND_VAR *_pstVar);
264
265
266#endif /* _orxCOMMAND_H_ */
267

Generated for orx by doxygen 1.8.11