Files
@ r5312:ffd375effb01
Branch filter:
Location: cpp/openttd-patchpack/source/console.h - annotation
r5312:ffd375effb01
5.8 KiB
text/x-c
(svn r7468) -Codechange: [win32] Add some comments to MB/WIDE_TO_WIDE/MB_[BUFFER] macros and
use them some more in win32 code. Also for the clipboard use the convert_from_fs
function instead of calling Win32 API directly. Make the static buffers in OTTD2FS
and FS2OTTD the same size (character-length wise)
use them some more in win32 code. Also for the clipboard use the convert_from_fs
function instead of calling Win32 API directly. Make the static buffers in OTTD2FS
and FS2OTTD the same size (character-length wise)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 | r2186:5ee653b1b5e1 r2186:5ee653b1b5e1 r205:49a2f624db4e r205:49a2f624db4e r220:dbd559d29b3c r1739:7cb77e0b4dd1 r1739:7cb77e0b4dd1 r1739:7cb77e0b4dd1 r1739:7cb77e0b4dd1 r135:83948fe02372 r1739:7cb77e0b4dd1 r135:83948fe02372 r135:83948fe02372 r135:83948fe02372 r135:83948fe02372 r135:83948fe02372 r135:83948fe02372 r1739:7cb77e0b4dd1 r1739:7cb77e0b4dd1 r135:83948fe02372 r1739:7cb77e0b4dd1 r543:efdb197f91ad r543:efdb197f91ad r543:efdb197f91ad r1739:7cb77e0b4dd1 r543:efdb197f91ad r1739:7cb77e0b4dd1 r220:dbd559d29b3c r1739:7cb77e0b4dd1 r1739:7cb77e0b4dd1 r1739:7cb77e0b4dd1 r1739:7cb77e0b4dd1 r1739:7cb77e0b4dd1 r1739:7cb77e0b4dd1 r1739:7cb77e0b4dd1 r1739:7cb77e0b4dd1 r1739:7cb77e0b4dd1 r1739:7cb77e0b4dd1 r1739:7cb77e0b4dd1 r1739:7cb77e0b4dd1 r1739:7cb77e0b4dd1 r1739:7cb77e0b4dd1 r1739:7cb77e0b4dd1 r220:dbd559d29b3c r1739:7cb77e0b4dd1 r1739:7cb77e0b4dd1 r1739:7cb77e0b4dd1 r1739:7cb77e0b4dd1 r1739:7cb77e0b4dd1 r1739:7cb77e0b4dd1 r1739:7cb77e0b4dd1 r1739:7cb77e0b4dd1 r1739:7cb77e0b4dd1 r1739:7cb77e0b4dd1 r1739:7cb77e0b4dd1 r1739:7cb77e0b4dd1 r1739:7cb77e0b4dd1 r1739:7cb77e0b4dd1 r1739:7cb77e0b4dd1 r1739:7cb77e0b4dd1 r1739:7cb77e0b4dd1 r135:83948fe02372 r1739:7cb77e0b4dd1 r1739:7cb77e0b4dd1 r1739:7cb77e0b4dd1 r1739:7cb77e0b4dd1 r1739:7cb77e0b4dd1 r1739:7cb77e0b4dd1 r1739:7cb77e0b4dd1 r1739:7cb77e0b4dd1 r1739:7cb77e0b4dd1 r1739:7cb77e0b4dd1 r1739:7cb77e0b4dd1 r1739:7cb77e0b4dd1 r1739:7cb77e0b4dd1 r289:071a0d96c419 r1739:7cb77e0b4dd1 r1739:7cb77e0b4dd1 r1739:7cb77e0b4dd1 r1739:7cb77e0b4dd1 r1739:7cb77e0b4dd1 r1739:7cb77e0b4dd1 r1739:7cb77e0b4dd1 r289:071a0d96c419 r1739:7cb77e0b4dd1 r1739:7cb77e0b4dd1 r1739:7cb77e0b4dd1 r1739:7cb77e0b4dd1 r1739:7cb77e0b4dd1 r1739:7cb77e0b4dd1 r1739:7cb77e0b4dd1 r1739:7cb77e0b4dd1 r1739:7cb77e0b4dd1 r1739:7cb77e0b4dd1 r1739:7cb77e0b4dd1 r1739:7cb77e0b4dd1 r1739:7cb77e0b4dd1 r1739:7cb77e0b4dd1 r1739:7cb77e0b4dd1 r135:83948fe02372 r1739:7cb77e0b4dd1 r1739:7cb77e0b4dd1 r644:a55719ab0889 r4432:882116c46ee9 r3900:1c2675abec23 r3900:1c2675abec23 r3900:1c2675abec23 r220:dbd559d29b3c r4432:882116c46ee9 r1805:fc29191fa6bf r1805:fc29191fa6bf r1805:fc29191fa6bf r1805:fc29191fa6bf r1805:fc29191fa6bf r1739:7cb77e0b4dd1 r141:ed23912abdee r4432:882116c46ee9 r289:071a0d96c419 r289:071a0d96c419 r1827:25fd3dcd4baa r5143:617d00a45304 r289:071a0d96c419 r289:071a0d96c419 r289:071a0d96c419 r135:83948fe02372 r4432:882116c46ee9 r1739:7cb77e0b4dd1 r1739:7cb77e0b4dd1 r1739:7cb77e0b4dd1 r1739:7cb77e0b4dd1 r1739:7cb77e0b4dd1 r135:83948fe02372 r4432:882116c46ee9 r1739:7cb77e0b4dd1 r1739:7cb77e0b4dd1 r1739:7cb77e0b4dd1 r1739:7cb77e0b4dd1 r135:83948fe02372 r4432:882116c46ee9 r1739:7cb77e0b4dd1 r1739:7cb77e0b4dd1 r1739:7cb77e0b4dd1 r1739:7cb77e0b4dd1 r1739:7cb77e0b4dd1 r135:83948fe02372 r4432:882116c46ee9 r1739:7cb77e0b4dd1 r1739:7cb77e0b4dd1 r135:83948fe02372 r4432:882116c46ee9 r289:071a0d96c419 r220:dbd559d29b3c r4432:882116c46ee9 r1739:7cb77e0b4dd1 r1739:7cb77e0b4dd1 r1739:7cb77e0b4dd1 r220:dbd559d29b3c r4432:882116c46ee9 r1739:7cb77e0b4dd1 r205:49a2f624db4e | /* $Id$ */
#ifndef CONSOLE_H
#define CONSOLE_H
// maximum length of a typed in command
#define ICON_CMDLN_SIZE 255
// maximum length of a totally expanded command
#define ICON_MAX_STREAMSIZE 1024
typedef enum IConsoleVarTypes {
ICONSOLE_VAR_BOOLEAN,
ICONSOLE_VAR_BYTE,
ICONSOLE_VAR_UINT16,
ICONSOLE_VAR_UINT32,
ICONSOLE_VAR_INT16,
ICONSOLE_VAR_INT32,
ICONSOLE_VAR_STRING
} IConsoleVarTypes;
typedef enum IConsoleModes {
ICONSOLE_FULL,
ICONSOLE_OPENED,
ICONSOLE_CLOSED
} IConsoleModes;
typedef enum IConsoleHookTypes {
ICONSOLE_HOOK_ACCESS,
ICONSOLE_HOOK_PRE_ACTION,
ICONSOLE_HOOK_POST_ACTION
} IConsoleHookTypes;
/** --Hooks--
* Hooks are certain triggers get get accessed/executed on either
* access, before execution/change or after execution/change. This allows
* for general flow of permissions or special action needed in some cases
*/
typedef bool IConsoleHook(void);
typedef struct IConsoleHooks{
IConsoleHook *access; // trigger when accessing the variable/command
IConsoleHook *pre; // trigger before the variable/command is changed/executed
IConsoleHook *post; // trigger after the variable/command is changed/executed
} IConsoleHooks;
/** --Commands--
* Commands are commands, or functions. They get executed once and any
* effect they produce are carried out. The arguments to the commands
* are given to them, each input word seperated by a double-quote (") is an argument
* If you want to handle multiple words as one, enclose them in double-quotes
* eg. 'say "hello sexy boy"'
*/
typedef bool (IConsoleCmdProc)(byte argc, char *argv[]);
struct IConsoleCmd;
typedef struct IConsoleCmd {
char *name; // name of command
struct IConsoleCmd *next; // next command in list
IConsoleCmdProc *proc; // process executed when command is typed
IConsoleHooks hook; // any special trigger action that needs executing
} IConsoleCmd;
/** --Variables--
* Variables are pointers to real ingame variables which allow for
* changing while ingame. After changing they keep their new value
* and can be used for debugging, gameplay, etc. It accepts:
* - no arguments; just print out current value
* - '= <new value>' to assign a new value to the variable
* - '++' to increase value by one
* - '--' to decrease value by one
*/
struct IConsoleVar;
typedef struct IConsoleVar {
char *name; // name of the variable
struct IConsoleVar *next; // next variable in list
void *addr; // the address where the variable is pointing at
uint32 size; // size of the variable, used for strings
char *help; // the optional help string shown when requesting information
IConsoleVarTypes type; // type of variable (for correct assignment/output)
IConsoleCmdProc *proc; // some variables need really special handling, use a callback function for that
IConsoleHooks hook; // any special trigger action that needs executing
} IConsoleVar;
/** --Aliases--
* Aliases are like shortcuts for complex functions, variable assignments,
* etc. You can use a simple alias to rename a longer command (eg 'lv' for
* 'list_vars' for example), or concatenate more commands into one
* (eg. 'ng' for 'load %A; unpause; debug_level 5'). Aliases can parse the arguments
* given to them in the command line.
* - "%A - %Z" substitute arguments 1 t/m 26
* - "%+" lists all parameters keeping them seperated
* - "%!" also lists all parameters but presenting them to the aliased command as one argument
* - ";" allows for combining commands (see example 'ng')
*/
struct IConsoleAlias;
typedef struct IConsoleAlias {
char *name; // name of the alias
struct IConsoleAlias *next; // next alias in list
char *cmdline; // command(s) that is/are being aliased
} IConsoleAlias;
/* console parser */
VARDEF IConsoleCmd *_iconsole_cmds; // list of registred commands
VARDEF IConsoleVar *_iconsole_vars; // list of registred vars
VARDEF IConsoleAlias *_iconsole_aliases; // list of registred aliases
/* console colors/modes */
VARDEF byte _icolour_def;
VARDEF byte _icolour_err;
VARDEF byte _icolour_warn;
VARDEF byte _icolour_dbg;
VARDEF byte _icolour_cmd;
VARDEF IConsoleModes _iconsole_mode;
/* console functions */
void IConsoleInit(void);
void IConsoleFree(void);
void IConsoleClearBuffer(void);
void IConsoleResize(Window *w);
void IConsoleSwitch(void);
void IConsoleClose(void);
void IConsoleOpen(void);
/* console output */
void IConsolePrint(uint16 color_code, const char *string);
void CDECL IConsolePrintF(uint16 color_code, const char *s, ...);
void IConsoleDebug(const char *string);
void IConsoleWarning(const char *string);
void IConsoleError(const char *string);
/* Commands */
void IConsoleCmdRegister(const char *name, IConsoleCmdProc *proc);
void IConsoleAliasRegister(const char *name, const char *cmd);
IConsoleCmd *IConsoleCmdGet(const char *name);
IConsoleAlias *IConsoleAliasGet(const char *name);
/* Variables */
void IConsoleVarRegister(const char *name, void *addr, IConsoleVarTypes type, const char *help);
void IConsoleVarStringRegister(const char *name, void *addr, uint32 size, const char *help);
IConsoleVar* IConsoleVarGet(const char *name);
void IConsoleVarPrintGetValue(const IConsoleVar *var);
void IConsoleVarPrintSetValue(const IConsoleVar *var);
/* Parser */
void IConsoleCmdExec(const char *cmdstr);
void IConsoleVarExec(const IConsoleVar *var, byte tokencount, char *token[]);
/* console std lib (register ingame commands/aliases/variables) */
void IConsoleStdLibRegister(void);
/* Hooking code */
void IConsoleCmdHookAdd(const char *name, IConsoleHookTypes type, IConsoleHook *proc);
void IConsoleVarHookAdd(const char *name, IConsoleHookTypes type, IConsoleHook *proc);
void IConsoleVarProcAdd(const char *name, IConsoleCmdProc *proc);
/* Supporting functions */
bool GetArgumentInteger(uint32 *value, const char *arg);
#endif /* CONSOLE_H */
|