console.c
author truelight
Sat, 04 Dec 2004 15:02:45 +0000
changeset 542 de27e74b11bd
parent 518 979bb729efd9
child 543 946badd71033
permissions -rw-r--r--
(svn r939) -Fix: Fixed compiler errors
135
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
     1
#include "stdafx.h"
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
     2
#include "ttd.h"
507
04b5403aaf6b (svn r815) Include strings.h only in the files which need it.
tron
parents: 301
diff changeset
     3
#include "table/strings.h"
135
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
     4
#include "window.h"
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
     5
#include "gui.h"
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
     6
#include "gfx.h"
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
     7
#include "player.h"
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
     8
#include "variables.h"
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
     9
#include "hal.h"
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
    10
#include <stdarg.h>
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
    11
#include <string.h>
274
c50812e83a14 (svn r280) -Fix: ^M removement in console.c
signde
parents: 273
diff changeset
    12
#include "console.h"
c50812e83a14 (svn r280) -Fix: ^M removement in console.c
signde
parents: 273
diff changeset
    13
c50812e83a14 (svn r280) -Fix: ^M removement in console.c
signde
parents: 273
diff changeset
    14
#ifdef WIN32
c50812e83a14 (svn r280) -Fix: ^M removement in console.c
signde
parents: 273
diff changeset
    15
#include <windows.h>
273
17a10e5f9ea0 (svn r279) -Feature: [WIN32] Console now allows to paste data from the clipboard [ctrl + v]
signde
parents: 248
diff changeset
    16
#endif
135
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
    17
301
3b69e7025af9 (svn r307) -Fix: Several potential buffer-overflow fixes, and removal of 'magic-numbers' in favour of constants. (Tron)
darkvater
parents: 289
diff changeset
    18
#define ICON_BUFFER 79
3b69e7025af9 (svn r307) -Fix: Several potential buffer-overflow fixes, and removal of 'magic-numbers' in favour of constants. (Tron)
darkvater
parents: 289
diff changeset
    19
#define ICON_CMDBUF_SIZE 20
3b69e7025af9 (svn r307) -Fix: Several potential buffer-overflow fixes, and removal of 'magic-numbers' in favour of constants. (Tron)
darkvater
parents: 289
diff changeset
    20
#define ICON_CMDLN_SIZE 255
3b69e7025af9 (svn r307) -Fix: Several potential buffer-overflow fixes, and removal of 'magic-numbers' in favour of constants. (Tron)
darkvater
parents: 289
diff changeset
    21
#define ICON_LINE_HEIGHT 12
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
    22
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
    23
typedef enum {
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
    24
	ICONSOLE_OPENED,
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
    25
	ICONSOLE_CLOSED
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
    26
} _iconsole_modes;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
    27
135
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
    28
// ** main console ** //
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
    29
static bool _iconsole_inited;
301
3b69e7025af9 (svn r307) -Fix: Several potential buffer-overflow fixes, and removal of 'magic-numbers' in favour of constants. (Tron)
darkvater
parents: 289
diff changeset
    30
static char* _iconsole_buffer[ICON_BUFFER + 1];
3b69e7025af9 (svn r307) -Fix: Several potential buffer-overflow fixes, and removal of 'magic-numbers' in favour of constants. (Tron)
darkvater
parents: 289
diff changeset
    31
static char _iconsole_cbuffer[ICON_BUFFER + 1];
3b69e7025af9 (svn r307) -Fix: Several potential buffer-overflow fixes, and removal of 'magic-numbers' in favour of constants. (Tron)
darkvater
parents: 289
diff changeset
    32
static char _iconsole_cmdline[ICON_CMDLN_SIZE];
135
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
    33
static byte _iconsole_cmdpos;
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
    34
static _iconsole_modes _iconsole_mode = ICONSOLE_CLOSED;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
    35
static Window* _iconsole_win = NULL;
135
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
    36
static byte _iconsole_scroll;
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
    37
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
    38
// ** console cursor ** //
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
    39
static bool _icursor_state;
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
    40
static byte _icursor_rate;
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
    41
static byte _icursor_counter;
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
    42
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
    43
// ** stdlib ** //
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
    44
byte _stdlib_developer = 1;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
    45
bool _stdlib_con_developer = false;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
    46
FILE* _iconsole_output_file;
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
    47
301
3b69e7025af9 (svn r307) -Fix: Several potential buffer-overflow fixes, and removal of 'magic-numbers' in favour of constants. (Tron)
darkvater
parents: 289
diff changeset
    48
// ** main console cmd buffer
3b69e7025af9 (svn r307) -Fix: Several potential buffer-overflow fixes, and removal of 'magic-numbers' in favour of constants. (Tron)
darkvater
parents: 289
diff changeset
    49
static char* _iconsole_cmdbuffer[ICON_CMDBUF_SIZE];
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
    50
static byte _iconsole_cmdbufferpos;
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
    51
135
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
    52
// ** console window ** //
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
    53
static void IConsoleWndProc(Window* w, WindowEvent* e);
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
    54
static const Widget _iconsole_window_widgets[] = {
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
    55
	{WIDGETS_END}
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
    56
};
135
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
    57
static const WindowDesc _iconsole_window_desc = {
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
    58
	0, 0, 2, 2,
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
    59
	WC_CONSOLE, 0,
135
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
    60
	WDF_STD_TOOLTIPS | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS,
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
    61
	_iconsole_window_widgets,
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
    62
	IConsoleWndProc,
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
    63
};
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
    64
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
    65
/* *************** */
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
    66
/*  end of header  */
274
c50812e83a14 (svn r280) -Fix: ^M removement in console.c
signde
parents: 273
diff changeset
    67
/* *************** */
c50812e83a14 (svn r280) -Fix: ^M removement in console.c
signde
parents: 273
diff changeset
    68
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
    69
static void IConsoleAppendClipboard(void)
274
c50812e83a14 (svn r280) -Fix: ^M removement in console.c
signde
parents: 273
diff changeset
    70
{
c50812e83a14 (svn r280) -Fix: ^M removement in console.c
signde
parents: 273
diff changeset
    71
#ifdef WIN32
c50812e83a14 (svn r280) -Fix: ^M removement in console.c
signde
parents: 273
diff changeset
    72
	if (IsClipboardFormatAvailable(CF_TEXT)) {
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
    73
		const char* data;
274
c50812e83a14 (svn r280) -Fix: ^M removement in console.c
signde
parents: 273
diff changeset
    74
		HGLOBAL cbuf;
c50812e83a14 (svn r280) -Fix: ^M removement in console.c
signde
parents: 273
diff changeset
    75
c50812e83a14 (svn r280) -Fix: ^M removement in console.c
signde
parents: 273
diff changeset
    76
		OpenClipboard(NULL);
c50812e83a14 (svn r280) -Fix: ^M removement in console.c
signde
parents: 273
diff changeset
    77
		cbuf = GetClipboardData(CF_TEXT);
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
    78
		data = GlobalLock(cbuf);
274
c50812e83a14 (svn r280) -Fix: ^M removement in console.c
signde
parents: 273
diff changeset
    79
301
3b69e7025af9 (svn r307) -Fix: Several potential buffer-overflow fixes, and removal of 'magic-numbers' in favour of constants. (Tron)
darkvater
parents: 289
diff changeset
    80
		/* IS_INT_INSIDE = filter for ascii-function codes like BELL and so on [we need an special filter here later] */
3b69e7025af9 (svn r307) -Fix: Several potential buffer-overflow fixes, and removal of 'magic-numbers' in favour of constants. (Tron)
darkvater
parents: 289
diff changeset
    81
		for (; (IS_INT_INSIDE(*data, ' ', 256)) && (_iconsole_cmdpos < lengthof(_iconsole_cmdline) - 1); ++data)
3b69e7025af9 (svn r307) -Fix: Several potential buffer-overflow fixes, and removal of 'magic-numbers' in favour of constants. (Tron)
darkvater
parents: 289
diff changeset
    82
			_iconsole_cmdline[_iconsole_cmdpos++] = *data;
274
c50812e83a14 (svn r280) -Fix: ^M removement in console.c
signde
parents: 273
diff changeset
    83
c50812e83a14 (svn r280) -Fix: ^M removement in console.c
signde
parents: 273
diff changeset
    84
		GlobalUnlock(cbuf);
c50812e83a14 (svn r280) -Fix: ^M removement in console.c
signde
parents: 273
diff changeset
    85
		CloseClipboard();
c50812e83a14 (svn r280) -Fix: ^M removement in console.c
signde
parents: 273
diff changeset
    86
	}
c50812e83a14 (svn r280) -Fix: ^M removement in console.c
signde
parents: 273
diff changeset
    87
#endif
273
17a10e5f9ea0 (svn r279) -Feature: [WIN32] Console now allows to paste data from the clipboard [ctrl + v]
signde
parents: 248
diff changeset
    88
}
135
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
    89
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
    90
static void IConsoleClearCommand(void)
135
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
    91
{
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
    92
	memset(_iconsole_cmdline, 0, sizeof(_iconsole_cmdline));
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
    93
	_iconsole_cmdpos = 0;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
    94
	SetWindowDirty(_iconsole_win);
135
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
    95
}
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
    96
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
    97
static void IConsoleWndProc(Window* w, WindowEvent* e)
135
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
    98
{
209
fd1ec5041eeb (svn r210) -Fix: Console key closes window in front
signde
parents: 205
diff changeset
    99
	// only do window events with the console
fd1ec5041eeb (svn r210) -Fix: Console key closes window in front
signde
parents: 205
diff changeset
   100
	w = FindWindowById(WC_CONSOLE, 0);
fd1ec5041eeb (svn r210) -Fix: Console key closes window in front
signde
parents: 205
diff changeset
   101
135
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
   102
	switch(e->event) {
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   103
		case WE_PAINT:
135
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
   104
		{
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   105
			int i = _iconsole_scroll;
301
3b69e7025af9 (svn r307) -Fix: Several potential buffer-overflow fixes, and removal of 'magic-numbers' in favour of constants. (Tron)
darkvater
parents: 289
diff changeset
   106
			int max = (w->height / ICON_LINE_HEIGHT) - 1;
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   107
			GfxFillRect(w->left, w->top, w->width, w->height - 1, 0);
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   108
			while ((i > _iconsole_scroll - max) && (_iconsole_buffer[i] != NULL)) {
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   109
				DoDrawString(_iconsole_buffer[i], 5,
301
3b69e7025af9 (svn r307) -Fix: Several potential buffer-overflow fixes, and removal of 'magic-numbers' in favour of constants. (Tron)
darkvater
parents: 289
diff changeset
   110
					w->height - (_iconsole_scroll + 2 - i) * ICON_LINE_HEIGHT, _iconsole_cbuffer[i]);
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   111
				i--;
135
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
   112
			}
301
3b69e7025af9 (svn r307) -Fix: Several potential buffer-overflow fixes, and removal of 'magic-numbers' in favour of constants. (Tron)
darkvater
parents: 289
diff changeset
   113
			DoDrawString("]", 5, w->height - ICON_LINE_HEIGHT, _iconsole_color_commands);
3b69e7025af9 (svn r307) -Fix: Several potential buffer-overflow fixes, and removal of 'magic-numbers' in favour of constants. (Tron)
darkvater
parents: 289
diff changeset
   114
			DoDrawString(_iconsole_cmdline, 10, w->height - ICON_LINE_HEIGHT, _iconsole_color_commands);
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   115
			break;
135
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
   116
		}
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   117
		case WE_TICK:
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   118
			_icursor_counter++;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   119
			if (_icursor_counter > _icursor_rate) {
135
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
   120
				int posx;
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
   121
				int posy;
169
4081f1d1f393 (svn r170) -Fix: [1022902] network fix .. console fix bug [1018523]. Fixes some variable initialization errors and a console.h warning (sign_de)
darkvater
parents: 141
diff changeset
   122
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   123
				_icursor_state = !_icursor_state;
135
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
   124
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   125
				_cur_dpi = &_screen;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   126
				posx = 10 + GetStringWidth(_iconsole_cmdline);
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   127
				posy = w->height - 3;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   128
				GfxFillRect(posx, posy, posx + 5, posy + 1, _icursor_state ? 14 : 0);
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   129
				_video_driver->make_dirty(posx, posy, 5, 1);
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   130
				_icursor_counter = 0;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   131
			}
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   132
			break;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   133
		case WE_DESTROY:
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   134
			_iconsole_win = NULL;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   135
			_iconsole_mode = ICONSOLE_CLOSED;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   136
			break;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   137
		case WE_KEYPRESS:
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   138
		{
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   139
			e->keypress.cont = false;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   140
			switch (e->keypress.keycode) {
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   141
				case WKC_CTRL | 'V':
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   142
					IConsoleAppendClipboard();
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   143
					SetWindowDirty(w);
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   144
					break;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   145
				case WKC_UP:
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   146
					IConsoleCmdBufferNavigate(+1);
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   147
					SetWindowDirty(w);
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   148
					break;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   149
				case WKC_DOWN:
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   150
					IConsoleCmdBufferNavigate(-1);
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   151
					SetWindowDirty(w);
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   152
					break;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   153
				case WKC_SHIFT | WKC_PAGEUP:
301
3b69e7025af9 (svn r307) -Fix: Several potential buffer-overflow fixes, and removal of 'magic-numbers' in favour of constants. (Tron)
darkvater
parents: 289
diff changeset
   154
					if (_iconsole_scroll - (w->height / ICON_LINE_HEIGHT) - 1 < 0)
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   155
						_iconsole_scroll = 0;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   156
					else
301
3b69e7025af9 (svn r307) -Fix: Several potential buffer-overflow fixes, and removal of 'magic-numbers' in favour of constants. (Tron)
darkvater
parents: 289
diff changeset
   157
						_iconsole_scroll -= (w->height / ICON_LINE_HEIGHT) - 1;
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   158
					SetWindowDirty(w);
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   159
					break;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   160
				case WKC_SHIFT | WKC_PAGEDOWN:
301
3b69e7025af9 (svn r307) -Fix: Several potential buffer-overflow fixes, and removal of 'magic-numbers' in favour of constants. (Tron)
darkvater
parents: 289
diff changeset
   161
					if (_iconsole_scroll + (w->height / ICON_LINE_HEIGHT) - 1 > ICON_BUFFER)
3b69e7025af9 (svn r307) -Fix: Several potential buffer-overflow fixes, and removal of 'magic-numbers' in favour of constants. (Tron)
darkvater
parents: 289
diff changeset
   162
						_iconsole_scroll = ICON_BUFFER;
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   163
					else
301
3b69e7025af9 (svn r307) -Fix: Several potential buffer-overflow fixes, and removal of 'magic-numbers' in favour of constants. (Tron)
darkvater
parents: 289
diff changeset
   164
						_iconsole_scroll += (w->height / ICON_LINE_HEIGHT) - 1;
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   165
					SetWindowDirty(w);
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   166
					break;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   167
				case WKC_SHIFT | WKC_UP:
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   168
					if (_iconsole_scroll <= 0)
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   169
						_iconsole_scroll = 0;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   170
					else
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   171
						--_iconsole_scroll;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   172
					SetWindowDirty(w);
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   173
					break;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   174
				case WKC_SHIFT | WKC_DOWN:
301
3b69e7025af9 (svn r307) -Fix: Several potential buffer-overflow fixes, and removal of 'magic-numbers' in favour of constants. (Tron)
darkvater
parents: 289
diff changeset
   175
					if (_iconsole_scroll >= ICON_BUFFER)
3b69e7025af9 (svn r307) -Fix: Several potential buffer-overflow fixes, and removal of 'magic-numbers' in favour of constants. (Tron)
darkvater
parents: 289
diff changeset
   176
						_iconsole_scroll = ICON_BUFFER;
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   177
					else
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   178
						++_iconsole_scroll;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   179
					SetWindowDirty(w);
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   180
					break;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   181
				case WKC_BACKQUOTE:
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   182
					IConsoleSwitch();
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   183
					break;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   184
				case WKC_RETURN:
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   185
					IConsolePrintF(_iconsole_color_commands, "] %s", _iconsole_cmdline);
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   186
					IConsoleCmdBufferAdd(_iconsole_cmdline);
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   187
					IConsoleCmdExec(_iconsole_cmdline);
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   188
					IConsoleClearCommand();
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   189
					break;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   190
				case WKC_BACKSPACE:
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   191
					if (_iconsole_cmdpos != 0) _iconsole_cmdpos--;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   192
					_iconsole_cmdline[_iconsole_cmdpos] = 0;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   193
					SetWindowDirty(w);
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   194
					_iconsole_cmdbufferpos = 19;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   195
					break;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   196
				default:
301
3b69e7025af9 (svn r307) -Fix: Several potential buffer-overflow fixes, and removal of 'magic-numbers' in favour of constants. (Tron)
darkvater
parents: 289
diff changeset
   197
					/* IS_INT_INSIDE = filter for ascii-function codes like BELL and so on [we need an special filter here later] */
3b69e7025af9 (svn r307) -Fix: Several potential buffer-overflow fixes, and removal of 'magic-numbers' in favour of constants. (Tron)
darkvater
parents: 289
diff changeset
   198
					if (IS_INT_INSIDE(e->keypress.ascii, ' ', 256)) {
3b69e7025af9 (svn r307) -Fix: Several potential buffer-overflow fixes, and removal of 'magic-numbers' in favour of constants. (Tron)
darkvater
parents: 289
diff changeset
   199
						_iconsole_scroll = ICON_BUFFER;
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   200
						_iconsole_cmdline[_iconsole_cmdpos] = e->keypress.ascii;
301
3b69e7025af9 (svn r307) -Fix: Several potential buffer-overflow fixes, and removal of 'magic-numbers' in favour of constants. (Tron)
darkvater
parents: 289
diff changeset
   201
						if (_iconsole_cmdpos != lengthof(_iconsole_cmdline))
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   202
							_iconsole_cmdpos++;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   203
						SetWindowDirty(w);
301
3b69e7025af9 (svn r307) -Fix: Several potential buffer-overflow fixes, and removal of 'magic-numbers' in favour of constants. (Tron)
darkvater
parents: 289
diff changeset
   204
						_iconsole_cmdbufferpos = ICON_CMDBUF_SIZE - 1;
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   205
					}
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   206
					else
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   207
						e->keypress.cont = true;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   208
			}
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   209
			break;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   210
		}
135
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
   211
	}
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
   212
}
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
   213
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   214
void IConsoleInit(void)
135
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
   215
{
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   216
	uint i;
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   217
	#if defined(WITH_REV)
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   218
	extern char _openttd_revision[];
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   219
	#endif
247
1cbc32ff06eb (svn r248) -Feature: console script files "exec myscript.file"
darkvater
parents: 229
diff changeset
   220
	_iconsole_output_file = NULL;
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   221
	_iconsole_color_default = 1;
247
1cbc32ff06eb (svn r248) -Feature: console script files "exec myscript.file"
darkvater
parents: 229
diff changeset
   222
	_iconsole_color_error = 3;
229
b94bfdf02bae (svn r230) -Feature: IConsoleWarning for warning messages
signde
parents: 228
diff changeset
   223
	_iconsole_color_warning = 13;
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   224
	_iconsole_color_debug = 5;
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   225
	_iconsole_color_commands = 2;
301
3b69e7025af9 (svn r307) -Fix: Several potential buffer-overflow fixes, and removal of 'magic-numbers' in favour of constants. (Tron)
darkvater
parents: 289
diff changeset
   226
	_iconsole_scroll = ICON_BUFFER;
3b69e7025af9 (svn r307) -Fix: Several potential buffer-overflow fixes, and removal of 'magic-numbers' in favour of constants. (Tron)
darkvater
parents: 289
diff changeset
   227
	_iconsole_cmdbufferpos = ICON_CMDBUF_SIZE - 1;
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   228
	_iconsole_inited = true;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   229
	_iconsole_mode = ICONSOLE_CLOSED;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   230
	_iconsole_win = NULL;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   231
	_icursor_state = false;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   232
	_icursor_rate = 5;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   233
	_icursor_counter = 0;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   234
	for (i = 0; i < lengthof(_iconsole_cmdbuffer); i++)
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   235
		_iconsole_cmdbuffer[i] = NULL;
301
3b69e7025af9 (svn r307) -Fix: Several potential buffer-overflow fixes, and removal of 'magic-numbers' in favour of constants. (Tron)
darkvater
parents: 289
diff changeset
   236
	for (i = 0; i <= ICON_BUFFER; i++) {
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   237
		_iconsole_buffer[i] = NULL;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   238
		_iconsole_cbuffer[i] = 0;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   239
	}
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   240
	IConsoleStdLibRegister();
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   241
	#if defined(WITH_REV)
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   242
	IConsolePrintF(13, "OpenTTD Game Console Revision 4 - %s", _openttd_revision);
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   243
	#else
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   244
	IConsolePrint(13, "OpenTTD Game Console Revision 4");
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   245
	#endif
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   246
	IConsolePrint(12, "---------------------------------");
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   247
	IConsolePrint(12, "use \"help\" for more info");
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   248
	IConsolePrint(12, "");
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   249
	IConsoleClearCommand();
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   250
	IConsoleCmdBufferAdd("");
135
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
   251
}
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
   252
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   253
void IConsoleClear(void)
135
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
   254
{
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   255
	uint i;
301
3b69e7025af9 (svn r307) -Fix: Several potential buffer-overflow fixes, and removal of 'magic-numbers' in favour of constants. (Tron)
darkvater
parents: 289
diff changeset
   256
	for (i = 0; i <= ICON_BUFFER; i++)
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   257
		free(_iconsole_buffer[i]);
135
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
   258
}
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
   259
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   260
void IConsoleFree(void)
135
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
   261
{
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   262
	_iconsole_inited = false;
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   263
	IConsoleClear();
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   264
	if (_iconsole_output_file != NULL) fclose(_iconsole_output_file);
135
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
   265
}
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
   266
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   267
void IConsoleResize(void)
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   268
{
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   269
	if (_iconsole_win != NULL) {
135
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
   270
		_iconsole_win->height = _screen.height / 3;
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   271
		_iconsole_win->width = _screen.width;
135
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
   272
	}
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
   273
}
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
   274
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   275
void IConsoleSwitch(void)
135
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
   276
{
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   277
	switch (_iconsole_mode) {
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   278
		case ICONSOLE_CLOSED:
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   279
			_iconsole_win = AllocateWindowDesc(&_iconsole_window_desc);
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   280
			_iconsole_win->height = _screen.height / 3;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   281
			_iconsole_win->width = _screen.width;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   282
			_iconsole_mode = ICONSOLE_OPENED;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   283
			break;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   284
		case ICONSOLE_OPENED:
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   285
			DeleteWindowById(WC_CONSOLE, 0);
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   286
			_iconsole_win = NULL;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   287
			_iconsole_mode = ICONSOLE_CLOSED;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   288
			break;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   289
	}
135
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
   290
}
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
   291
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   292
void IConsoleClose(void)
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   293
{
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   294
	if (_iconsole_mode == ICONSOLE_OPENED) IConsoleSwitch();
135
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
   295
}
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
   296
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   297
void IConsoleOpen(void)
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   298
{
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   299
	if (_iconsole_mode == ICONSOLE_CLOSED) IConsoleSwitch();
141
29cc31c87ede (svn r142) -Feature development: [1016299] Console Rev #3 allowes variable references and has a new commandline buffer (sign_de)
darkvater
parents: 136
diff changeset
   300
}
29cc31c87ede (svn r142) -Feature development: [1016299] Console Rev #3 allowes variable references and has a new commandline buffer (sign_de)
darkvater
parents: 136
diff changeset
   301
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   302
void IConsoleCmdBufferAdd(const char* cmd)
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   303
{
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   304
	int i;
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   305
	if (_iconsole_cmdbufferpos != 19) return;
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   306
	free(_iconsole_cmdbuffer[18]);
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   307
	for (i = 18; i > 0; i--) _iconsole_cmdbuffer[i] = _iconsole_cmdbuffer[i - 1];
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   308
	_iconsole_cmdbuffer[0] = strdup(cmd);
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   309
}
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   310
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   311
void IConsoleCmdBufferNavigate(signed char direction)
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   312
{
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   313
	int i;
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   314
	i = _iconsole_cmdbufferpos + direction;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   315
	if (i < 0) i = 19;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   316
	if (i > 19) i = 0;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   317
	if (direction > 0)
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   318
		while (_iconsole_cmdbuffer[i] == NULL) {
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   319
			++i;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   320
			if (i > 19) i = 0;
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   321
		}
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   322
	if (direction < 0)
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   323
		while (_iconsole_cmdbuffer[i] == NULL) {
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   324
			--i;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   325
			if (i < 0) i = 19;
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   326
		}
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   327
	_iconsole_cmdbufferpos = i;
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   328
	IConsoleClearCommand();
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   329
	memcpy(_iconsole_cmdline, _iconsole_cmdbuffer[i],
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   330
		strlen(_iconsole_cmdbuffer[i]));
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   331
	_iconsole_cmdpos = strlen(_iconsole_cmdbuffer[i]);
141
29cc31c87ede (svn r142) -Feature development: [1016299] Console Rev #3 allowes variable references and has a new commandline buffer (sign_de)
darkvater
parents: 136
diff changeset
   332
}
29cc31c87ede (svn r142) -Feature development: [1016299] Console Rev #3 allowes variable references and has a new commandline buffer (sign_de)
darkvater
parents: 136
diff changeset
   333
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   334
void IConsolePrint(byte color_code, const char* string)
135
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
   335
{
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   336
	char* _ex;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   337
	char* _new;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   338
	char _exc;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   339
	char _newc;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   340
	char* i;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   341
	int j;
135
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
   342
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   343
	if (!_iconsole_inited) return;
135
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
   344
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   345
	_newc = color_code;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   346
	_new = strdup(string);
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   347
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   348
	for (i = _new; *i != '\0'; ++i)
301
3b69e7025af9 (svn r307) -Fix: Several potential buffer-overflow fixes, and removal of 'magic-numbers' in favour of constants. (Tron)
darkvater
parents: 289
diff changeset
   349
		if (*i < ' ') *i = ' '; /* filter for ascii-function codes like BELL and so on [we need an special filter here later] */
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   350
301
3b69e7025af9 (svn r307) -Fix: Several potential buffer-overflow fixes, and removal of 'magic-numbers' in favour of constants. (Tron)
darkvater
parents: 289
diff changeset
   351
	for (j = ICON_BUFFER; j >= 0; --j) {
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   352
		_ex = _iconsole_buffer[j];
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   353
		_exc = _iconsole_cbuffer[j];
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   354
		_iconsole_buffer[j] = _new;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   355
		_iconsole_cbuffer[j] = _newc;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   356
		_new = _ex;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   357
		_newc = _exc;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   358
	}
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   359
	free(_ex);
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   360
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   361
	if (_iconsole_win != NULL) SetWindowDirty(_iconsole_win);
135
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
   362
}
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
   363
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
   364
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   365
void CDECL IConsolePrintF(byte color_code, const char* s, ...)
135
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
   366
{
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
   367
	va_list va;
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
   368
	char buf[1024];
247
1cbc32ff06eb (svn r248) -Feature: console script files "exec myscript.file"
darkvater
parents: 229
diff changeset
   369
	int len;
1cbc32ff06eb (svn r248) -Feature: console script files "exec myscript.file"
darkvater
parents: 229
diff changeset
   370
135
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
   371
	va_start(va, s);
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   372
	len = vsnprintf(buf, sizeof(buf), s, va);
135
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
   373
	va_end(va);
247
1cbc32ff06eb (svn r248) -Feature: console script files "exec myscript.file"
darkvater
parents: 229
diff changeset
   374
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   375
	IConsolePrint(color_code, buf);
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   376
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   377
	if (_iconsole_output_file != NULL) {
247
1cbc32ff06eb (svn r248) -Feature: console script files "exec myscript.file"
darkvater
parents: 229
diff changeset
   378
		// if there is an console output file ... also print it there
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   379
		fwrite(buf, len, 1, _iconsole_output_file);
301
3b69e7025af9 (svn r307) -Fix: Several potential buffer-overflow fixes, and removal of 'magic-numbers' in favour of constants. (Tron)
darkvater
parents: 289
diff changeset
   380
		fwrite("\n", 1, 1, _iconsole_output_file);
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   381
	}
135
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
   382
}
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
   383
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   384
void IConsoleDebug(const char* string)
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   385
{
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   386
	if (_stdlib_developer > 1)
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   387
		IConsolePrintF(_iconsole_color_debug, "DEBUG: %s", string);
247
1cbc32ff06eb (svn r248) -Feature: console script files "exec myscript.file"
darkvater
parents: 229
diff changeset
   388
}
135
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
   389
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   390
void IConsoleError(const char* string)
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   391
{
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   392
	if (_stdlib_developer > 0)
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   393
		IConsolePrintF(_iconsole_color_error, "ERROR: %s", string);
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   394
}
135
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
   395
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   396
void IConsoleWarning(const char* string)
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   397
{
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   398
	if (_stdlib_developer > 0)
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   399
		IConsolePrintF(_iconsole_color_warning, "WARNING: %s", string);
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   400
}
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   401
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   402
void IConsoleCmdRegister(const char* name, _iconsole_cmd_addr addr)
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   403
{
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   404
	char* _new;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   405
	_iconsole_cmd* item;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   406
	_iconsole_cmd* item_new;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   407
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   408
	_new = strdup(name);
135
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
   409
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   410
	item_new = malloc(sizeof(_iconsole_cmd));
135
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
   411
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   412
	item_new->_next = NULL;
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   413
	item_new->addr = addr;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   414
	item_new->name = _new;
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   415
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   416
	item_new->hook_access = NULL;
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   417
	item_new->hook_after_exec = NULL;
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   418
	item_new->hook_before_exec = NULL;
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   419
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   420
	item = _iconsole_cmds;
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   421
	if (item == NULL) {
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   422
		_iconsole_cmds = item_new;
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   423
	} else {
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   424
		while (item->_next != NULL) item = item->_next;
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   425
		item->_next = item_new;
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   426
	}
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   427
}
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   428
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   429
_iconsole_cmd* IConsoleCmdGet(const char* name)
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   430
{
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   431
	_iconsole_cmd* item;
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   432
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   433
	item = _iconsole_cmds;
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   434
	while (item != NULL) {
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   435
		if (strcmp(item->name, name) == 0) return item;
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   436
		item = item->_next;
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   437
	}
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   438
	return NULL;
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   439
}
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   440
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   441
void IConsoleVarRegister(const char* name, void* addr, _iconsole_var_types type)
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   442
{
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   443
	_iconsole_var* item;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   444
	_iconsole_var* item_new;
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   445
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   446
	item_new = malloc(sizeof(_iconsole_var)); /* XXX unchecked malloc */
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   447
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   448
	item_new->name = malloc(strlen(name) + 2); /* XXX unchecked malloc */
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   449
	sprintf(item_new->name, "*%s", name);
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   450
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   451
	item_new->_next = NULL;
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   452
	switch (type) {
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   453
		case ICONSOLE_VAR_BOOLEAN:
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   454
			item_new->data.bool_ = addr;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   455
			break;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   456
		case ICONSOLE_VAR_BYTE:
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   457
			item_new->data.byte_ = addr;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   458
			break;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   459
		case ICONSOLE_VAR_UINT16:
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   460
			item_new->data.uint16_ = addr;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   461
			break;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   462
		case ICONSOLE_VAR_UINT32:
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   463
			item_new->data.uint32_ = addr;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   464
			break;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   465
		case ICONSOLE_VAR_INT16:
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   466
			item_new->data.int16_ = addr;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   467
			break;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   468
		case ICONSOLE_VAR_INT32:
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   469
			item_new->data.int32_ = addr;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   470
			break;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   471
		case ICONSOLE_VAR_STRING:
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   472
			item_new->data.string_ = addr;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   473
			break;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   474
		default:
301
3b69e7025af9 (svn r307) -Fix: Several potential buffer-overflow fixes, and removal of 'magic-numbers' in favour of constants. (Tron)
darkvater
parents: 289
diff changeset
   475
			error("unknown console variable type");
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   476
			break;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   477
	}
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   478
	item_new->type = type;
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   479
	item_new->_malloc = false;
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   480
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   481
	item_new->hook_access = NULL;
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   482
	item_new->hook_after_change = NULL;
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   483
	item_new->hook_before_change = NULL;
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   484
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   485
	item = _iconsole_vars;
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   486
	if (item == NULL) {
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   487
		_iconsole_vars = item_new;
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   488
	} else {
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   489
		while (item->_next != NULL) item = item->_next;
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   490
		item->_next = item_new;
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   491
	}
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   492
}
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   493
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   494
void IConsoleVarMemRegister(const char* name, _iconsole_var_types type)
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   495
{
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   496
	_iconsole_var* item;
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   497
	item = IConsoleVarAlloc(type);
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   498
	IConsoleVarInsert(item, name);
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   499
}
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   500
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   501
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   502
void IConsoleVarInsert(_iconsole_var* var, const char* name)
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   503
{
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   504
	_iconsole_var* item;
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   505
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   506
	// disallow building variable rings
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   507
	if (var->_next != NULL) return;
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   508
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   509
	var->name = malloc(strlen(name) + 2); /* XXX unchecked malloc */
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   510
	sprintf(var->name, "*%s", name);
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   511
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   512
	item = _iconsole_vars;
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   513
	if (item == NULL) {
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   514
		_iconsole_vars = var;
135
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
   515
	} else {
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   516
		while (item->_next != NULL) item = item->_next;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   517
		item->_next = var;
135
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
   518
	}
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
   519
}
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
   520
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
   521
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   522
_iconsole_var* IConsoleVarGet(const char* name)
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   523
{
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   524
	_iconsole_var* item;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   525
	for (item = _iconsole_vars; item != NULL; item = item->_next)
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   526
		if (strcmp(item->name, name) == 0) return item;
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   527
	return NULL;
135
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
   528
}
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
   529
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   530
_iconsole_var* IConsoleVarAlloc(_iconsole_var_types type)
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   531
{
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   532
	_iconsole_var* item = malloc(sizeof(_iconsole_var)); /* XXX unchecked malloc */
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   533
	item->_next = NULL;
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   534
	item->name = NULL;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   535
	item->type = type;
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   536
	switch (item->type) {
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   537
		case ICONSOLE_VAR_BOOLEAN:
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   538
			item->data.bool_ = malloc(sizeof(*item->data.bool_));
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   539
			*item->data.bool_ = false;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   540
			item->_malloc = true;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   541
			break;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   542
		case ICONSOLE_VAR_BYTE:
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   543
			item->data.byte_ = malloc(sizeof(*item->data.byte_));
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   544
			*item->data.byte_ = 0;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   545
			item->_malloc = true;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   546
			break;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   547
		case ICONSOLE_VAR_UINT16:
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   548
			item->data.uint16_ = malloc(sizeof(*item->data.uint16_));
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   549
			*item->data.uint16_ = 0;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   550
			item->_malloc = true;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   551
			break;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   552
		case ICONSOLE_VAR_UINT32:
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   553
			item->data.uint32_ = malloc(sizeof(*item->data.uint32_));
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   554
			*item->data.uint32_ = 0;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   555
			item->_malloc = true;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   556
			break;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   557
		case ICONSOLE_VAR_INT16:
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   558
			item->data.int16_ = malloc(sizeof(*item->data.int16_));
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   559
			*item->data.int16_ = 0;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   560
			item->_malloc = true;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   561
			break;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   562
		case ICONSOLE_VAR_INT32:
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   563
			item->data.int32_ = malloc(sizeof(*item->data.int32_));
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   564
			*item->data.int32_ = 0;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   565
			item->_malloc = true;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   566
			break;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   567
		case ICONSOLE_VAR_POINTER:
301
3b69e7025af9 (svn r307) -Fix: Several potential buffer-overflow fixes, and removal of 'magic-numbers' in favour of constants. (Tron)
darkvater
parents: 289
diff changeset
   568
		case ICONSOLE_VAR_STRING:
3b69e7025af9 (svn r307) -Fix: Several potential buffer-overflow fixes, and removal of 'magic-numbers' in favour of constants. (Tron)
darkvater
parents: 289
diff changeset
   569
			// needs no memory ... it gets memory when it is set to an value
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   570
			item->data.addr = NULL;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   571
			item->_malloc = false;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   572
			break;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   573
		default:
301
3b69e7025af9 (svn r307) -Fix: Several potential buffer-overflow fixes, and removal of 'magic-numbers' in favour of constants. (Tron)
darkvater
parents: 289
diff changeset
   574
			error("unknown console variable type");
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   575
			break;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   576
	}
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   577
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   578
	item->hook_access = NULL;
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   579
	item->hook_after_change = NULL;
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   580
	item->hook_before_change = NULL;
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   581
	return item;
135
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
   582
}
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
   583
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
   584
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   585
void IConsoleVarFree(_iconsole_var* var)
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   586
{
222
b88456001397 (svn r223) -Fix: Const correctness and miscellaneous fixes. Thank you Tron for your diligent fixing of warnings (and some possibly bugs) (Tron)
darkvater
parents: 220
diff changeset
   587
	if (var->_malloc)
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   588
		free(var->data.addr);
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   589
	free(var->name);
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   590
	free(var);
135
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
   591
}
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
   592
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   593
void IConsoleVarSetString(_iconsole_var* var, const char* string)
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   594
{
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   595
	if (string == NULL) return;
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   596
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   597
	if (var->_malloc)
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   598
		free(var->data.string_);
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   599
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   600
	var->data.string_ = strdup(string);
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   601
	var->_malloc = true;
222
b88456001397 (svn r223) -Fix: Const correctness and miscellaneous fixes. Thank you Tron for your diligent fixing of warnings (and some possibly bugs) (Tron)
darkvater
parents: 220
diff changeset
   602
}
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   603
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   604
void IConsoleVarSetValue(_iconsole_var* var, int value) {
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   605
	switch (var->type) {
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   606
		case ICONSOLE_VAR_BOOLEAN:
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   607
			*var->data.bool_ = (value != 0);
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   608
			break;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   609
		case ICONSOLE_VAR_BYTE:
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   610
			*var->data.byte_ = value;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   611
			break;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   612
		case ICONSOLE_VAR_UINT16:
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   613
			*var->data.uint16_ = value;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   614
			break;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   615
		case ICONSOLE_VAR_UINT32:
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   616
			*var->data.uint32_ = value;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   617
			break;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   618
		case ICONSOLE_VAR_INT16:
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   619
			*var->data.int16_ = value;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   620
			break;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   621
		case ICONSOLE_VAR_INT32:
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   622
			*var->data.int32_ = value;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   623
			break;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   624
		default:
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   625
			assert(0);
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   626
			break;
222
b88456001397 (svn r223) -Fix: Const correctness and miscellaneous fixes. Thank you Tron for your diligent fixing of warnings (and some possibly bugs) (Tron)
darkvater
parents: 220
diff changeset
   627
	}
135
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
   628
}
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
   629
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   630
void IConsoleVarDump(const _iconsole_var* var, const char* dump_desc)
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   631
{
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   632
	if (dump_desc == NULL) dump_desc = var->name;
135
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
   633
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
   634
	switch (var->type) {
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
   635
		case ICONSOLE_VAR_BOOLEAN:
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   636
			IConsolePrintF(_iconsole_color_default, "%s = %s",
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   637
				dump_desc, *var->data.bool_ ? "true" : "false");
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   638
			break;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   639
		break;
135
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
   640
		case ICONSOLE_VAR_BYTE:
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   641
			IConsolePrintF(_iconsole_color_default, "%s = %u",
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   642
				dump_desc, *var->data.byte_);
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   643
			break;
135
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
   644
		case ICONSOLE_VAR_UINT16:
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   645
			IConsolePrintF(_iconsole_color_default, "%s = %u",
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   646
				dump_desc, *var->data.uint16_);
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   647
			break;
135
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
   648
		case ICONSOLE_VAR_UINT32:
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   649
			IConsolePrintF(_iconsole_color_default, "%s = %u",
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   650
				dump_desc, *var->data.uint32_);
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   651
			break;
135
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
   652
		case ICONSOLE_VAR_INT16:
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   653
			IConsolePrintF(_iconsole_color_default, "%s = %i",
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   654
				dump_desc, *var->data.int16_);
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   655
			break;
135
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
   656
		case ICONSOLE_VAR_INT32:
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   657
			IConsolePrintF(_iconsole_color_default, "%s = %i",
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   658
				dump_desc, *var->data.int32_);
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   659
			break;
135
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
   660
		case ICONSOLE_VAR_STRING:
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   661
			IConsolePrintF(_iconsole_color_default, "%s = %s",
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   662
				dump_desc, var->data.string_);
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   663
			break;
141
29cc31c87ede (svn r142) -Feature development: [1016299] Console Rev #3 allowes variable references and has a new commandline buffer (sign_de)
darkvater
parents: 136
diff changeset
   664
		case ICONSOLE_VAR_REFERENCE:
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   665
			IConsolePrintF(_iconsole_color_default, "%s = @%s",
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   666
				dump_desc, var->data.reference_);
135
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
   667
		case ICONSOLE_VAR_UNKNOWN:
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
   668
		case ICONSOLE_VAR_POINTER:
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   669
			IConsolePrintF(_iconsole_color_default, "%s = @%p",
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   670
				dump_desc, var->data.addr);
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   671
			break;
301
3b69e7025af9 (svn r307) -Fix: Several potential buffer-overflow fixes, and removal of 'magic-numbers' in favour of constants. (Tron)
darkvater
parents: 289
diff changeset
   672
		case ICONSOLE_VAR_NONE:
3b69e7025af9 (svn r307) -Fix: Several potential buffer-overflow fixes, and removal of 'magic-numbers' in favour of constants. (Tron)
darkvater
parents: 289
diff changeset
   673
			IConsolePrintF(_iconsole_color_default, "%s = [nothing]",
3b69e7025af9 (svn r307) -Fix: Several potential buffer-overflow fixes, and removal of 'magic-numbers' in favour of constants. (Tron)
darkvater
parents: 289
diff changeset
   674
				dump_desc);
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   675
			break;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   676
	}
135
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
   677
}
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
   678
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   679
// * ************************* * //
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   680
// * hooking code              * //
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   681
// * ************************* * //
135
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
   682
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   683
void IConsoleVarHook(const char* name, _iconsole_hook_types type, iconsole_var_hook proc)
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   684
{
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   685
	_iconsole_var* hook_var = IConsoleVarGet(name);
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   686
	if (hook_var == NULL) return;
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   687
	switch (type) {
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   688
		case ICONSOLE_HOOK_BEFORE_CHANGE:
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   689
			hook_var->hook_before_change = proc;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   690
			break;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   691
		case ICONSOLE_HOOK_AFTER_CHANGE:
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   692
			hook_var->hook_after_change = proc;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   693
			break;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   694
		case ICONSOLE_HOOK_ACCESS:
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   695
			hook_var->hook_access = proc;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   696
			break;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   697
		case ICONSOLE_HOOK_BEFORE_EXEC:
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   698
		case ICONSOLE_HOOK_AFTER_EXEC:
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   699
			assert(0);
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   700
			break;
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   701
	}
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   702
}
135
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
   703
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   704
bool IConsoleVarHookHandle(_iconsole_var* hook_var, _iconsole_hook_types type)
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   705
{
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   706
	iconsole_var_hook proc = NULL;
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   707
	switch (type) {
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   708
		case ICONSOLE_HOOK_BEFORE_CHANGE:
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   709
			proc = hook_var->hook_before_change;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   710
			break;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   711
		case ICONSOLE_HOOK_AFTER_CHANGE:
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   712
			proc = hook_var->hook_after_change;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   713
			break;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   714
		case ICONSOLE_HOOK_ACCESS:
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   715
			proc = hook_var->hook_access;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   716
			break;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   717
		case ICONSOLE_HOOK_BEFORE_EXEC:
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   718
		case ICONSOLE_HOOK_AFTER_EXEC:
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   719
			assert(0);
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   720
			break;
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   721
	}
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   722
	return proc == NULL ? true : proc(hook_var);
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   723
}
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   724
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   725
void IConsoleCmdHook(const char* name, _iconsole_hook_types type, iconsole_cmd_hook proc)
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   726
{
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   727
	_iconsole_cmd* hook_cmd = IConsoleCmdGet(name);
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   728
	if (hook_cmd == NULL) return;
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   729
	switch (type) {
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   730
		case ICONSOLE_HOOK_AFTER_EXEC:
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   731
			hook_cmd->hook_after_exec = proc;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   732
			break;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   733
		case ICONSOLE_HOOK_BEFORE_EXEC:
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   734
			hook_cmd->hook_before_exec = proc;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   735
			break;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   736
		case ICONSOLE_HOOK_ACCESS:
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   737
			hook_cmd->hook_access = proc;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   738
			break;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   739
		case ICONSOLE_HOOK_BEFORE_CHANGE:
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   740
		case ICONSOLE_HOOK_AFTER_CHANGE:
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   741
			assert(0);
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   742
			break;
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   743
	}
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   744
}
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   745
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   746
bool IConsoleCmdHookHandle(_iconsole_cmd* hook_cmd, _iconsole_hook_types type)
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   747
{
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   748
	iconsole_cmd_hook proc = NULL;
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   749
	switch (type) {
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   750
		case ICONSOLE_HOOK_AFTER_EXEC:
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   751
			proc = hook_cmd->hook_after_exec;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   752
			break;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   753
		case ICONSOLE_HOOK_BEFORE_EXEC:
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   754
			proc = hook_cmd->hook_before_exec;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   755
			break;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   756
		case ICONSOLE_HOOK_ACCESS:
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   757
			proc = hook_cmd->hook_access;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   758
			break;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   759
		case ICONSOLE_HOOK_BEFORE_CHANGE:
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   760
		case ICONSOLE_HOOK_AFTER_CHANGE:
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   761
			assert(0);
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   762
			break;
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   763
	}
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   764
	return proc == NULL ? true : proc(hook_cmd);
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   765
}
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   766
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   767
void IConsoleCmdExec(const char* cmdstr)
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   768
{
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   769
	_iconsole_cmd_addr function;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   770
	char* tokens[20];
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   771
	byte  tokentypes[20];
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   772
	char* tokenstream;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   773
	char* tokenstream_s;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   774
	byte  execution_mode;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   775
	_iconsole_var* var    = NULL;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   776
	_iconsole_var* result = NULL;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   777
	_iconsole_cmd* cmd    = NULL;
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   778
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   779
	bool longtoken;
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   780
	bool valid_token;
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   781
	bool skip_lt_change;
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   782
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   783
	int c;
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   784
	int i;
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   785
	int l;
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   786
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   787
	//** clearing buffer **//
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   788
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   789
	for (i = 0; i < 20; i++) {
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   790
		tokens[i] = NULL;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   791
		tokentypes[i] = ICONSOLE_VAR_NONE;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   792
	}
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   793
	tokenstream_s = tokenstream = malloc(1024);
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   794
	memset(tokenstream, 0, 1024);
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   795
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   796
	//** parsing **//
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   797
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   798
	longtoken = false;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   799
	valid_token = false;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   800
	skip_lt_change = false;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   801
	l = strlen(cmdstr);
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   802
	i = 0;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   803
	c = 0;
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   804
	tokens[c] = tokenstream;
301
3b69e7025af9 (svn r307) -Fix: Several potential buffer-overflow fixes, and removal of 'magic-numbers' in favour of constants. (Tron)
darkvater
parents: 289
diff changeset
   805
	while (i < l && c < lengthof(tokens) - 1) {
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   806
		if (cmdstr[i] == '"') {
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   807
			if (longtoken) {
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   808
				if (cmdstr[i + 1] == '"') {
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   809
					i++;
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   810
					*tokenstream = '"';
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   811
					tokenstream++;
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   812
					skip_lt_change = true;
135
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
   813
				} else {
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   814
					longtoken = !longtoken;
135
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
   815
				}
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   816
			} else
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   817
				longtoken = !longtoken;
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   818
			if (!skip_lt_change) {
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   819
				if (!longtoken) {
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   820
					if (valid_token) {
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   821
						c++;
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   822
						*tokenstream = '\0';
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   823
						tokenstream++;
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   824
						tokens[c] = tokenstream;
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   825
						valid_token = false;
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   826
					}
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   827
				}
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   828
				skip_lt_change=false;
135
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
   829
			}
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   830
		} else if (!longtoken && cmdstr[i] == ' ') {
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   831
			if (valid_token) {
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   832
				c++;
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   833
				*tokenstream = '\0';
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   834
				tokenstream++;
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   835
				tokens[c] = tokenstream;
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   836
				valid_token = false;
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   837
			}
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   838
		} else {
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   839
			valid_token = true;
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   840
			*tokenstream = cmdstr[i];
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   841
			tokenstream++;
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   842
		}
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   843
		i++;
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   844
	}
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   845
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   846
	tokenstream--;
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   847
	if (*tokenstream != '\0') {
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   848
		c++;
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   849
		tokenstream++;
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   850
		*tokenstream = '\0';
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   851
	}
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   852
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   853
	//** interpreting **//
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   854
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   855
	for (i = 0; i < c; i++) {
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   856
		tokentypes[i] = ICONSOLE_VAR_UNKNOWN;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   857
		if (tokens[i] != NULL && i > 0 && strlen(tokens[i]) > 0) {
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   858
			if (tokens[i][0] == '*') {
301
3b69e7025af9 (svn r307) -Fix: Several potential buffer-overflow fixes, and removal of 'magic-numbers' in favour of constants. (Tron)
darkvater
parents: 289
diff changeset
   859
				// change the variable to an pointer if execution_mode != 4 is
3b69e7025af9 (svn r307) -Fix: Several potential buffer-overflow fixes, and removal of 'magic-numbers' in favour of constants. (Tron)
darkvater
parents: 289
diff changeset
   860
				// being prepared. execution_mode 4 is used to assign 
3b69e7025af9 (svn r307) -Fix: Several potential buffer-overflow fixes, and removal of 'magic-numbers' in favour of constants. (Tron)
darkvater
parents: 289
diff changeset
   861
				// one variables data to another one
3b69e7025af9 (svn r307) -Fix: Several potential buffer-overflow fixes, and removal of 'magic-numbers' in favour of constants. (Tron)
darkvater
parents: 289
diff changeset
   862
				// [token 0 and 2]
3b69e7025af9 (svn r307) -Fix: Several potential buffer-overflow fixes, and removal of 'magic-numbers' in favour of constants. (Tron)
darkvater
parents: 289
diff changeset
   863
				if (!((i == 2) && (tokentypes[1] == ICONSOLE_VAR_UNKNOWN) &&
3b69e7025af9 (svn r307) -Fix: Several potential buffer-overflow fixes, and removal of 'magic-numbers' in favour of constants. (Tron)
darkvater
parents: 289
diff changeset
   864
					(strcmp(tokens[1], "<<") == 0))) {
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   865
					var = IConsoleVarGet(tokens[i]);
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   866
					if (var != NULL) {
301
3b69e7025af9 (svn r307) -Fix: Several potential buffer-overflow fixes, and removal of 'magic-numbers' in favour of constants. (Tron)
darkvater
parents: 289
diff changeset
   867
						// pointer to the data --> token
3b69e7025af9 (svn r307) -Fix: Several potential buffer-overflow fixes, and removal of 'magic-numbers' in favour of constants. (Tron)
darkvater
parents: 289
diff changeset
   868
						tokens[i] = (char *) var->data.addr; /* XXX: maybe someone finds an cleaner way to do this */ 
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   869
						tokentypes[i] = var->type;
141
29cc31c87ede (svn r142) -Feature development: [1016299] Console Rev #3 allowes variable references and has a new commandline buffer (sign_de)
darkvater
parents: 136
diff changeset
   870
					}
135
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
   871
				}
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
   872
			}
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   873
			if (tokens[i] != NULL && tokens[i][0] == '@' && tokens[i][1] == '*') {
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   874
				var = IConsoleVarGet(tokens[i] + 1);
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   875
				if (var != NULL) {
301
3b69e7025af9 (svn r307) -Fix: Several potential buffer-overflow fixes, and removal of 'magic-numbers' in favour of constants. (Tron)
darkvater
parents: 289
diff changeset
   876
					// pointer to the _iconsole_var struct --> token
3b69e7025af9 (svn r307) -Fix: Several potential buffer-overflow fixes, and removal of 'magic-numbers' in favour of constants. (Tron)
darkvater
parents: 289
diff changeset
   877
					tokens[i] = (char *) var; /* XXX: maybe someone finds an cleaner way to do this */ 
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   878
					tokentypes[i] = ICONSOLE_VAR_REFERENCE;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   879
				}
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   880
			}
135
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
   881
		}
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   882
	}
135
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
   883
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   884
	execution_mode=0;
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   885
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   886
	function = NULL;
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   887
	cmd = IConsoleCmdGet(tokens[0]);
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   888
	if (cmd != NULL) function = cmd->addr;
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   889
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   890
	if (function != NULL) {
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   891
		execution_mode = 1; // this is a command
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   892
	} else {
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   893
		var = IConsoleVarGet(tokens[0]);
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   894
		if (var != NULL) {
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   895
			execution_mode = 2; // this is a variable
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   896
			if (c > 2 && strcmp(tokens[1], "<<") == 0) {
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   897
				// this is command to variable mode [normal]
222
b88456001397 (svn r223) -Fix: Const correctness and miscellaneous fixes. Thank you Tron for your diligent fixing of warnings (and some possibly bugs) (Tron)
darkvater
parents: 220
diff changeset
   898
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   899
				function = NULL;
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   900
				cmd = IConsoleCmdGet(tokens[2]);
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   901
				if (cmd != NULL) function = cmd->addr;
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   902
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   903
				if (function != NULL) {
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   904
					execution_mode = 3;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   905
				} else {
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   906
					result = IConsoleVarGet(tokens[2]);
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   907
					if (result != NULL)
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   908
						execution_mode=4;
135
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
   909
				}
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   910
			}
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   911
		}
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   912
	}
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   913
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   914
	//** executing **//
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   915
	if (_stdlib_con_developer)
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   916
		IConsolePrintF(_iconsole_color_debug, "CONDEBUG: execution_mode: %i",
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   917
			execution_mode);
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   918
	switch (execution_mode) {
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   919
		case 0:
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   920
			// not found
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   921
			IConsoleError("command or variable not found");
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   922
			break;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   923
		case 1:
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   924
			if (IConsoleCmdHookHandle(cmd, ICONSOLE_HOOK_ACCESS)) {
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   925
				// execution with command syntax
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   926
				IConsoleCmdHookHandle(cmd, ICONSOLE_HOOK_BEFORE_EXEC);
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   927
				result = function(c, tokens, tokentypes);
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   928
				if (result != NULL) {
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   929
					IConsoleVarDump(result, "result");
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   930
					IConsoleVarFree(result);
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   931
				}
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   932
				IConsoleCmdHookHandle(cmd, ICONSOLE_HOOK_AFTER_EXEC);
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   933
				break;
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   934
			}
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   935
		case 2:
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   936
		{
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   937
			// execution with variable syntax
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   938
			if (IConsoleVarHookHandle(var, ICONSOLE_HOOK_ACCESS) && (c == 2 || c == 3)) {
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   939
				// ** variable modifications ** //
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   940
				IConsoleVarHookHandle(var, ICONSOLE_HOOK_BEFORE_CHANGE);
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   941
				switch (var->type) {
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   942
					case ICONSOLE_VAR_BOOLEAN:
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   943
					{
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   944
						if (strcmp(tokens[1], "=") == 0) {
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   945
							if (c == 3) {
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   946
								*var->data.bool_ = (atoi(tokens[2]) != 0);
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   947
							} else {
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   948
								*var->data.bool_ = false;
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   949
							}
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   950
							IConsoleVarDump(var, NULL);
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   951
						} else if (strcmp(tokens[1], "++") == 0) {
301
3b69e7025af9 (svn r307) -Fix: Several potential buffer-overflow fixes, and removal of 'magic-numbers' in favour of constants. (Tron)
darkvater
parents: 289
diff changeset
   952
							*var->data.bool_ = true;
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   953
							IConsoleVarDump(var, NULL);
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   954
						} else if (strcmp(tokens[1], "--") == 0) {
301
3b69e7025af9 (svn r307) -Fix: Several potential buffer-overflow fixes, and removal of 'magic-numbers' in favour of constants. (Tron)
darkvater
parents: 289
diff changeset
   955
							*var->data.bool_ = false;
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   956
							IConsoleVarDump(var, NULL);
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   957
						}
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   958
						else
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   959
							IConsoleError("operation not supported");
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   960
						break;
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   961
					}
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   962
					case ICONSOLE_VAR_BYTE:
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   963
					{
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   964
						if (strcmp(tokens[1], "=") == 0) {
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   965
							if (c == 3)
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   966
								*var->data.byte_ = atoi(tokens[2]);
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   967
							else
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   968
								*var->data.byte_ = 0;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   969
							IConsoleVarDump(var, NULL);
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   970
						} else if (strcmp(tokens[1], "++") == 0) {
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   971
							++*var->data.byte_;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   972
							IConsoleVarDump(var, NULL);
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   973
						} else if (strcmp(tokens[1], "--")==0) {
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   974
							--*var->data.byte_;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   975
							IConsoleVarDump(var, NULL);
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   976
						}
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   977
						else
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   978
							IConsoleError("operation not supported");
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   979
						break;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   980
					}
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   981
					case ICONSOLE_VAR_UINT16:
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   982
					{
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   983
						if (strcmp(tokens[1], "=") == 0) {
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   984
							if (c == 3)
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   985
								*var->data.uint16_ = atoi(tokens[2]);
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   986
							else
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   987
								*var->data.uint16_ = 0;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   988
							IConsoleVarDump(var, NULL);
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   989
						} else if (strcmp(tokens[1], "++") == 0) {
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   990
							++*var->data.uint16_;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   991
							IConsoleVarDump(var, NULL);
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   992
						} else if (strcmp(tokens[1], "--") == 0) {
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   993
							--*var->data.uint16_;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   994
							IConsoleVarDump(var, NULL);
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   995
						}
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   996
						else
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   997
							IConsoleError("operation not supported");
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
   998
						break;
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
   999
					}
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1000
					case ICONSOLE_VAR_UINT32:
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1001
					{
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1002
						if (strcmp(tokens[1], "=") == 0) {
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1003
							if (c == 3)
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1004
								*var->data.uint32_ = atoi(tokens[2]);
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1005
							else
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1006
								*var->data.uint32_ = 0;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1007
							IConsoleVarDump(var, NULL);
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1008
						} else if (strcmp(tokens[1], "++") == 0) {
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1009
							++*var->data.uint32_;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1010
							IConsoleVarDump(var, NULL);
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1011
						} else if (strcmp(tokens[1], "--") == 0) {
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1012
							--*var->data.uint32_;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1013
							IConsoleVarDump(var, NULL);
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1014
						}
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1015
						else
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1016
							IConsoleError("operation not supported");
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1017
						break;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1018
					}
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1019
					case ICONSOLE_VAR_INT16:
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1020
					{
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1021
						if (strcmp(tokens[1], "=") == 0) {
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1022
							if (c == 3)
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1023
								*var->data.int16_ = atoi(tokens[2]);
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1024
							else
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1025
								*var->data.int16_ = 0;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1026
							IConsoleVarDump(var, NULL);
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1027
						} else if (strcmp(tokens[1], "++") == 0) {
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1028
							++*var->data.int16_;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1029
							IConsoleVarDump(var, NULL);
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1030
						} else if (strcmp(tokens[1], "--") == 0) {
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1031
							--*var->data.int16_;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1032
							IConsoleVarDump(var, NULL);
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1033
						}
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1034
						else
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1035
							IConsoleError("operation not supported");
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1036
						break;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1037
					}
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1038
					case ICONSOLE_VAR_INT32:
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1039
					{
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1040
						if (strcmp(tokens[1], "=") == 0) {
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1041
							if (c == 3)
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1042
								*var->data.int32_ = atoi(tokens[2]);
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1043
							else
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1044
								*var->data.int32_ = 0;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1045
							IConsoleVarDump(var, NULL);
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1046
						} else if (strcmp(tokens[1], "++") == 0) {
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1047
							++*var->data.int32_;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1048
							IConsoleVarDump(var, NULL);
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1049
						} else if (strcmp(tokens[1], "--") == 0) {
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1050
							--*var->data.int32_;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1051
							IConsoleVarDump(var, NULL);
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1052
						}
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1053
						else { IConsoleError("operation not supported"); }
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1054
						break;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1055
					}
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1056
					case ICONSOLE_VAR_STRING:
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1057
					{
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1058
						if (strcmp(tokens[1], "=") == 0) {
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1059
							if (c == 3)
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1060
								IConsoleVarSetString(var, tokens[2]);
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1061
							else
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1062
								IConsoleVarSetString(var, "");
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1063
							IConsoleVarDump(var, NULL);
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1064
						}
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1065
						else
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1066
							IConsoleError("operation not supported");
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1067
						break;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1068
					}
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1069
					case ICONSOLE_VAR_POINTER:
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1070
					{
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1071
						if (strcmp(tokens[1], "=") == 0) {
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1072
							if (c == 3) {
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1073
								if (tokentypes[2] == ICONSOLE_VAR_UNKNOWN)
301
3b69e7025af9 (svn r307) -Fix: Several potential buffer-overflow fixes, and removal of 'magic-numbers' in favour of constants. (Tron)
darkvater
parents: 289
diff changeset
  1074
									var->data.addr = (void*)atoi(tokens[2]); /* direct access on memory [by address] */
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1075
								else
301
3b69e7025af9 (svn r307) -Fix: Several potential buffer-overflow fixes, and removal of 'magic-numbers' in favour of constants. (Tron)
darkvater
parents: 289
diff changeset
  1076
									var->data.addr = (void*)tokens[2]; /* direct acces on memory [by variable] */
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1077
							} else
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1078
								var->data.addr = NULL;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1079
							IConsoleVarDump(var, NULL);
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1080
						} else if (strcmp(tokens[1], "++") == 0) {
301
3b69e7025af9 (svn r307) -Fix: Several potential buffer-overflow fixes, and removal of 'magic-numbers' in favour of constants. (Tron)
darkvater
parents: 289
diff changeset
  1081
							++*(char*)&var->data.addr; /* change the address + 1 */
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1082
							IConsoleVarDump(var, NULL);
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1083
						} else if (strcmp(tokens[1], "--") == 0) {
301
3b69e7025af9 (svn r307) -Fix: Several potential buffer-overflow fixes, and removal of 'magic-numbers' in favour of constants. (Tron)
darkvater
parents: 289
diff changeset
  1084
							--*(char*)&var->data.addr; /* change the address - 1 */
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1085
							IConsoleVarDump(var, NULL);
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1086
						}
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1087
						else
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1088
							IConsoleError("operation not supported");
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1089
						break;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1090
					}
301
3b69e7025af9 (svn r307) -Fix: Several potential buffer-overflow fixes, and removal of 'magic-numbers' in favour of constants. (Tron)
darkvater
parents: 289
diff changeset
  1091
					case ICONSOLE_VAR_NONE: 
3b69e7025af9 (svn r307) -Fix: Several potential buffer-overflow fixes, and removal of 'magic-numbers' in favour of constants. (Tron)
darkvater
parents: 289
diff changeset
  1092
					case ICONSOLE_VAR_REFERENCE: 
3b69e7025af9 (svn r307) -Fix: Several potential buffer-overflow fixes, and removal of 'magic-numbers' in favour of constants. (Tron)
darkvater
parents: 289
diff changeset
  1093
					case ICONSOLE_VAR_UNKNOWN: 
3b69e7025af9 (svn r307) -Fix: Several potential buffer-overflow fixes, and removal of 'magic-numbers' in favour of constants. (Tron)
darkvater
parents: 289
diff changeset
  1094
						IConsoleError("operation not supported");
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1095
						break;
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
  1096
				}
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1097
				IConsoleVarHookHandle(var, ICONSOLE_HOOK_AFTER_CHANGE);
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1098
			}
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1099
			if (c == 1) // ** variable output ** //
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1100
				IConsoleVarDump(var, NULL);
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1101
			break;
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
  1102
		}
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1103
		case 3:
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1104
		case 4:
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
  1105
		{
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1106
			// execute command with result or assign a variable
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1107
			if (execution_mode == 3) {
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1108
				if (IConsoleCmdHookHandle(cmd, ICONSOLE_HOOK_ACCESS)) {
222
b88456001397 (svn r223) -Fix: Const correctness and miscellaneous fixes. Thank you Tron for your diligent fixing of warnings (and some possibly bugs) (Tron)
darkvater
parents: 220
diff changeset
  1109
					int i;
b88456001397 (svn r223) -Fix: Const correctness and miscellaneous fixes. Thank you Tron for your diligent fixing of warnings (and some possibly bugs) (Tron)
darkvater
parents: 220
diff changeset
  1110
					int diff;
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1111
					void* temp;
222
b88456001397 (svn r223) -Fix: Const correctness and miscellaneous fixes. Thank you Tron for your diligent fixing of warnings (and some possibly bugs) (Tron)
darkvater
parents: 220
diff changeset
  1112
					byte temp2;
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
  1113
222
b88456001397 (svn r223) -Fix: Const correctness and miscellaneous fixes. Thank you Tron for your diligent fixing of warnings (and some possibly bugs) (Tron)
darkvater
parents: 220
diff changeset
  1114
					// tokenshifting
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1115
					for (diff = 0; diff < 2; diff++) {
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1116
						temp = tokens[0];
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1117
						temp2 = tokentypes[0];
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1118
						for (i = 0; i < 19; i++) {
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1119
							tokens[i] = tokens[i + 1];
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1120
							tokentypes[i] = tokentypes[i + 1];
222
b88456001397 (svn r223) -Fix: Const correctness and miscellaneous fixes. Thank you Tron for your diligent fixing of warnings (and some possibly bugs) (Tron)
darkvater
parents: 220
diff changeset
  1121
						}
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1122
						tokens[19] = temp;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1123
						tokentypes[19] = temp2;
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
  1124
					}
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1125
					IConsoleCmdHookHandle(cmd, ICONSOLE_HOOK_BEFORE_EXEC);
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1126
					result = function(c, tokens, tokentypes);
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1127
					IConsoleCmdHookHandle(cmd, ICONSOLE_HOOK_AFTER_EXEC);
222
b88456001397 (svn r223) -Fix: Const correctness and miscellaneous fixes. Thank you Tron for your diligent fixing of warnings (and some possibly bugs) (Tron)
darkvater
parents: 220
diff changeset
  1128
				} else
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1129
					execution_mode = 255;
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
  1130
			}
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
  1131
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1132
			if (IConsoleVarHookHandle(var, ICONSOLE_HOOK_ACCESS) && result != NULL) {
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1133
				if (result->type != var->type) {
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1134
					IConsoleError("variable type missmatch");
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
  1135
				} else {
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1136
					IConsoleVarHookHandle(var, ICONSOLE_HOOK_BEFORE_CHANGE);
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1137
					switch (result->type) {
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1138
						case ICONSOLE_VAR_BOOLEAN:
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1139
							*var->data.bool_ = *result->data.bool_;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1140
							IConsoleVarDump(var, NULL);
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1141
							break;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1142
						case ICONSOLE_VAR_BYTE:
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1143
							*var->data.byte_ = *result->data.byte_;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1144
							IConsoleVarDump(var, NULL);
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1145
							break;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1146
						case ICONSOLE_VAR_UINT16:
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1147
							*var->data.uint16_ = *result->data.uint16_;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1148
							IConsoleVarDump(var, NULL);
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1149
							break;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1150
						case ICONSOLE_VAR_UINT32:
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1151
							*var->data.uint32_ = *result->data.uint32_;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1152
							IConsoleVarDump(var, NULL);
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1153
							break;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1154
						case ICONSOLE_VAR_INT16:
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1155
							*var->data.int16_ = *result->data.int16_;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1156
							IConsoleVarDump(var, NULL);
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1157
							break;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1158
						case ICONSOLE_VAR_INT32:
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1159
							*var->data.int32_ = *result->data.int32_;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1160
							IConsoleVarDump(var, NULL);
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1161
							break;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1162
						case ICONSOLE_VAR_POINTER:
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1163
							var->data.addr = result->data.addr;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1164
							IConsoleVarDump(var, NULL);
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1165
							break;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1166
						case ICONSOLE_VAR_STRING:
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1167
							IConsoleVarSetString(var, result->data.string_);
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1168
							IConsoleVarDump(var, NULL);
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1169
							break;
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1170
						default:
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1171
							IConsoleError("variable type missmatch");
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1172
							break;
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
  1173
					}
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1174
					IConsoleVarHookHandle(var, ICONSOLE_HOOK_AFTER_CHANGE);
135
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
  1175
				}
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
  1176
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1177
				if (execution_mode == 3) {
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1178
					IConsoleVarFree(result);
135
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
  1179
				}
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
  1180
			}
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1181
			break;
135
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
  1182
		}
289
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1183
		default:
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1184
			// execution mode invalid
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1185
			IConsoleError("invalid execution mode");
6dd77b0ac456 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
darkvater
parents: 274
diff changeset
  1186
			break;
135
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
  1187
	}
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
  1188
301
3b69e7025af9 (svn r307) -Fix: Several potential buffer-overflow fixes, and removal of 'magic-numbers' in favour of constants. (Tron)
darkvater
parents: 289
diff changeset
  1189
	//** freeing the tokenstream **//
220
dc1710f96b39 (svn r221) -Feature: console command and variable hooking
signde
parents: 209
diff changeset
  1190
	free(tokenstream_s);
135
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
  1191
}