author | rubidium |
Fri, 30 May 2008 09:23:05 +0000 | |
changeset 9426 | a77c8a4abcf5 |
parent 9339 | 189117c9c937 |
child 9905 | 591248f0d341 |
permissions | -rw-r--r-- |
9336 | 1 |
/* $Id$ */ |
2 |
||
3 |
/** @file console_internal.h Internally used functions for the console. */ |
|
4 |
||
5 |
#ifndef CONSOLE_INTERNAL_H |
|
6 |
#define CONSOLE_INTERNAL_H |
|
7 |
||
8 |
#include "console_func.h" |
|
9 |
||
10 |
/* maximum length of a typed in command */ |
|
11 |
#define ICON_CMDLN_SIZE 255 |
|
12 |
/* maximum length of a totally expanded command */ |
|
13 |
#define ICON_MAX_STREAMSIZE 1024 |
|
14 |
||
15 |
enum IConsoleVarTypes { |
|
16 |
ICONSOLE_VAR_BOOLEAN, |
|
17 |
ICONSOLE_VAR_BYTE, |
|
18 |
ICONSOLE_VAR_UINT16, |
|
19 |
ICONSOLE_VAR_UINT32, |
|
20 |
ICONSOLE_VAR_INT16, |
|
21 |
ICONSOLE_VAR_INT32, |
|
22 |
ICONSOLE_VAR_STRING |
|
23 |
}; |
|
24 |
||
25 |
enum IConsoleHookTypes { |
|
26 |
ICONSOLE_HOOK_ACCESS, |
|
27 |
ICONSOLE_HOOK_PRE_ACTION, |
|
28 |
ICONSOLE_HOOK_POST_ACTION |
|
29 |
}; |
|
30 |
||
31 |
/** --Hooks-- |
|
32 |
* Hooks are certain triggers get get accessed/executed on either |
|
33 |
* access, before execution/change or after execution/change. This allows |
|
34 |
* for general flow of permissions or special action needed in some cases |
|
35 |
*/ |
|
36 |
typedef bool IConsoleHook(); |
|
37 |
struct IConsoleHooks{ |
|
38 |
IConsoleHook *access; ///< trigger when accessing the variable/command |
|
39 |
IConsoleHook *pre; ///< trigger before the variable/command is changed/executed |
|
40 |
IConsoleHook *post; ///< trigger after the variable/command is changed/executed |
|
41 |
}; |
|
42 |
||
43 |
/** --Commands-- |
|
44 |
* Commands are commands, or functions. They get executed once and any |
|
45 |
* effect they produce are carried out. The arguments to the commands |
|
46 |
* are given to them, each input word seperated by a double-quote (") is an argument |
|
47 |
* If you want to handle multiple words as one, enclose them in double-quotes |
|
48 |
* eg. 'say "hello sexy boy"' |
|
49 |
*/ |
|
50 |
typedef bool (IConsoleCmdProc)(byte argc, char *argv[]); |
|
51 |
||
52 |
struct IConsoleCmd { |
|
53 |
char *name; ///< name of command |
|
54 |
IConsoleCmd *next; ///< next command in list |
|
55 |
||
56 |
IConsoleCmdProc *proc; ///< process executed when command is typed |
|
57 |
IConsoleHooks hook; ///< any special trigger action that needs executing |
|
58 |
}; |
|
59 |
||
60 |
/** --Variables-- |
|
61 |
* Variables are pointers to real ingame variables which allow for |
|
62 |
* changing while ingame. After changing they keep their new value |
|
63 |
* and can be used for debugging, gameplay, etc. It accepts: |
|
64 |
* - no arguments; just print out current value |
|
65 |
* - '= <new value>' to assign a new value to the variable |
|
66 |
* - '++' to increase value by one |
|
67 |
* - '--' to decrease value by one |
|
68 |
*/ |
|
69 |
struct IConsoleVar { |
|
70 |
char *name; ///< name of the variable |
|
71 |
IConsoleVar *next; ///< next variable in list |
|
72 |
||
73 |
void *addr; ///< the address where the variable is pointing at |
|
74 |
uint32 size; ///< size of the variable, used for strings |
|
75 |
char *help; ///< the optional help string shown when requesting information |
|
76 |
IConsoleVarTypes type; ///< type of variable (for correct assignment/output) |
|
77 |
IConsoleCmdProc *proc; ///< some variables need really special handling, use a callback function for that |
|
78 |
IConsoleHooks hook; ///< any special trigger action that needs executing |
|
79 |
}; |
|
80 |
||
81 |
/** --Aliases-- |
|
82 |
* Aliases are like shortcuts for complex functions, variable assignments, |
|
83 |
* etc. You can use a simple alias to rename a longer command (eg 'lv' for |
|
84 |
* 'list_vars' for example), or concatenate more commands into one |
|
85 |
* (eg. 'ng' for 'load %A; unpause; debug_level 5'). Aliases can parse the arguments |
|
86 |
* given to them in the command line. |
|
87 |
* - "%A - %Z" substitute arguments 1 t/m 26 |
|
88 |
* - "%+" lists all parameters keeping them seperated |
|
89 |
* - "%!" also lists all parameters but presenting them to the aliased command as one argument |
|
90 |
* - ";" allows for combining commands (see example 'ng') |
|
91 |
*/ |
|
92 |
struct IConsoleAlias { |
|
93 |
char *name; ///< name of the alias |
|
94 |
IConsoleAlias *next; ///< next alias in list |
|
95 |
||
96 |
char *cmdline; ///< command(s) that is/are being aliased |
|
97 |
}; |
|
98 |
||
99 |
/* console parser */ |
|
100 |
extern IConsoleCmd *_iconsole_cmds; ///< list of registred commands |
|
101 |
extern IConsoleVar *_iconsole_vars; ///< list of registred vars |
|
102 |
extern IConsoleAlias *_iconsole_aliases; ///< list of registred aliases |
|
103 |
||
104 |
/* console functions */ |
|
105 |
void IConsoleClearBuffer(); |
|
106 |
void IConsoleOpen(); |
|
107 |
||
108 |
/* Commands */ |
|
109 |
void IConsoleCmdRegister(const char *name, IConsoleCmdProc *proc); |
|
110 |
void IConsoleAliasRegister(const char *name, const char *cmd); |
|
111 |
IConsoleCmd *IConsoleCmdGet(const char *name); |
|
112 |
IConsoleAlias *IConsoleAliasGet(const char *name); |
|
113 |
||
114 |
/* Variables */ |
|
115 |
void IConsoleVarRegister(const char *name, void *addr, IConsoleVarTypes type, const char *help); |
|
116 |
void IConsoleVarStringRegister(const char *name, void *addr, uint32 size, const char *help); |
|
117 |
IConsoleVar* IConsoleVarGet(const char *name); |
|
118 |
void IConsoleVarPrintGetValue(const IConsoleVar *var); |
|
119 |
void IConsoleVarPrintSetValue(const IConsoleVar *var); |
|
120 |
||
121 |
/* Parser */ |
|
122 |
void IConsoleVarExec(const IConsoleVar *var, byte tokencount, char *token[]); |
|
123 |
||
124 |
/* console std lib (register ingame commands/aliases/variables) */ |
|
125 |
void IConsoleStdLibRegister(); |
|
126 |
||
127 |
/* Hooking code */ |
|
128 |
void IConsoleCmdHookAdd(const char *name, IConsoleHookTypes type, IConsoleHook *proc); |
|
129 |
void IConsoleVarHookAdd(const char *name, IConsoleHookTypes type, IConsoleHook *proc); |
|
130 |
void IConsoleVarProcAdd(const char *name, IConsoleCmdProc *proc); |
|
131 |
||
132 |
/* Supporting functions */ |
|
133 |
bool GetArgumentInteger(uint32 *value, const char *arg); |
|
9339
189117c9c937
(svn r13231) -Codechange: split the core console code and the console GUI.
rubidium
parents:
9336
diff
changeset
|
134 |
|
189117c9c937
(svn r13231) -Codechange: split the core console code and the console GUI.
rubidium
parents:
9336
diff
changeset
|
135 |
void IConsoleGUIInit(); |
189117c9c937
(svn r13231) -Codechange: split the core console code and the console GUI.
rubidium
parents:
9336
diff
changeset
|
136 |
void IConsoleGUIFree(); |
189117c9c937
(svn r13231) -Codechange: split the core console code and the console GUI.
rubidium
parents:
9336
diff
changeset
|
137 |
void IConsoleGUIPrint(ConsoleColour color_code, char *string); |
189117c9c937
(svn r13231) -Codechange: split the core console code and the console GUI.
rubidium
parents:
9336
diff
changeset
|
138 |
|
189117c9c937
(svn r13231) -Codechange: split the core console code and the console GUI.
rubidium
parents:
9336
diff
changeset
|
139 |
#endif /* CONSOLE_INTERNAL_H */ |