console.c
author truelight
Tue, 24 Aug 2004 20:54:40 +0000
changeset 133 321532e90bc8
parent 129 df1a60bc0d70
child 135 638fb31434eb
permissions -rw-r--r--
(svn r134) -Fix: [976583] parent_list was too small
-Fix: [981934] Memoryleak in parent_list
-Add: General protection around Sprites
126
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
     1
#include "stdafx.h"
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
     2
#include "ttd.h"
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
     3
#include "window.h"
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
     4
#include "gui.h"
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
     5
#include "gfx.h"
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
     6
#include "player.h"
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
     7
#include "variables.h"
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
     8
#include "hal.h"
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
     9
#include <stdarg.h>
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
    10
#include "console.h"
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
    11
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
    12
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
    13
// ** main console ** //
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
    14
static bool _iconsole_inited;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
    15
static byte* _iconsole_buffer[80];
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
    16
static byte _iconsole_cbuffer[80];
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
    17
static byte _iconsole_cmdline[255];
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
    18
static byte _iconsole_cmdpos;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
    19
static byte _iconsole_mode;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
    20
static byte _iconsole_color_default = 1;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
    21
static byte _iconsole_color_error = 3;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
    22
static byte _iconsole_color_debug = 5;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
    23
static byte _iconsole_color_commands = 2;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
    24
static Window *_iconsole_win = NULL;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
    25
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
    26
// ** console cursor ** //
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
    27
static bool _icursor_state;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
    28
static byte _icursor_rate;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
    29
static byte _icursor_counter;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
    30
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
    31
// ** console window ** //
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
    32
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
    33
static void IConsoleWndProc(Window *w, WindowEvent *e);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
    34
static const Widget _iconsole_window_widgets[] = {{WWT_LAST}};
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
    35
static const WindowDesc _iconsole_window_desc = {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
    36
	0, 0, 2, 2,
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
    37
	WC_CONSOLE,0,
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
    38
	WDF_STD_TOOLTIPS | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS,
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
    39
	_iconsole_window_widgets,
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
    40
	IConsoleWndProc,
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
    41
};
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
    42
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
    43
// ** console parser ** //
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
    44
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
    45
static _iconsole_cmd * _iconsole_cmds; // list of registred commands
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
    46
static _iconsole_var * _iconsole_vars; // list of registred vars
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
    47
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
    48
// ** console std lib ** // 
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
    49
static byte _stdlib_developer=0;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
    50
static void IConsoleStdLibRegister();
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
    51
static byte * _stdlib_temp_string;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
    52
static byte * _stdlib_temp_pointer;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
    53
static uint32 _stdlib_temp_uint32;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
    54
static bool _stdlib_temp_bool;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
    55
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
    56
/* *************** */
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
    57
/*  end of header  */
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
    58
/* *************** */
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
    59
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
    60
void IConsoleClearCommand()
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
    61
{
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
    62
int i;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
    63
for (i=0; i<255; i++) _iconsole_cmdline[i]=0;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
    64
_iconsole_cmdpos=0;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
    65
SetWindowDirty(_iconsole_win);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
    66
}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
    67
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
    68
static void IConsoleWndProc(Window *w, WindowEvent *e)
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
    69
{
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
    70
	switch(e->event) {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
    71
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
    72
	case WE_PAINT:
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
    73
		GfxFillRect(w->left,w->top,w->width,w->height-1,0);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
    74
		{
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
    75
		int i=79;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
    76
		int max=(w->height/12)-1;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
    77
		while ((i>79-max) && (_iconsole_buffer[i]!=NULL)) {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
    78
			DoDrawString(_iconsole_buffer[i],5,w->height-((81-i)*12),_iconsole_cbuffer[i]);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
    79
			i--;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
    80
			}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
    81
		DoDrawString((char *)&_iconsole_cmdline,5,w->height-12,_iconsole_color_commands);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
    82
		}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
    83
		break;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
    84
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
    85
	case WE_TICK:
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
    86
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
    87
		if (_iconsole_mode==ICONSOLE_OPENING) {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
    88
			_iconsole_mode=ICONSOLE_OPENED;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
    89
			}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
    90
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
    91
		_icursor_counter++;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
    92
		if (_icursor_counter>_icursor_rate) {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
    93
			_icursor_state=!_icursor_state;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
    94
			{
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
    95
				int posx;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
    96
				int posy;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
    97
				int color;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
    98
				_cur_dpi=&_screen;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
    99
				if (_icursor_state) color=14; else color=0;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   100
				posx=5+GetStringWidth((char *)&_iconsole_cmdline);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   101
				posy=w->height-3;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   102
				GfxFillRect(posx,posy,posx+5,posy+1,color);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   103
				_video_driver->make_dirty(posx,posy,5,1);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   104
			}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   105
			_icursor_counter=0;			
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   106
			}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   107
		break;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   108
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   109
	case WE_KEYPRESS:
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   110
		e->keypress.cont=false;
129
df1a60bc0d70 (svn r130) Change: hotkey for console is Backquote (the key left to '1', regardless of keyboard layout
dominik
parents: 126
diff changeset
   111
		if (e->keypress.keycode == WKC_BACKQUOTE)
126
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   112
			{
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   113
			IConsoleSwitch();
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   114
			} else
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   115
		if (e->keypress.keycode == WKC_RETURN) 
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   116
			{
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   117
			IConsolePrintF(_iconsole_color_commands, "] %s", _iconsole_cmdline);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   118
			IConsoleCmdExec((byte *) _iconsole_cmdline);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   119
			IConsoleClearCommand();
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   120
			} else
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   121
		if (e->keypress.keycode == WKC_BACKSPACE) 
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   122
			{
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   123
			if (_iconsole_cmdpos!=0) _iconsole_cmdpos--;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   124
			_iconsole_cmdline[_iconsole_cmdpos]=0;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   125
			SetWindowDirty(w);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   126
			} else
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   127
		if (IS_INT_INSIDE((e->keypress.ascii), 32, 256))
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   128
			{
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   129
			_iconsole_cmdline[_iconsole_cmdpos]=e->keypress.ascii;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   130
			if (_iconsole_cmdpos!=255) _iconsole_cmdpos++;	
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   131
			SetWindowDirty(w);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   132
			e->keypress.keycode=0;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   133
			} else e->keypress.cont=true;	
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   134
		break;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   135
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   136
	}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   137
}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   138
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   139
void IConsoleInit()
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   140
{
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   141
int i;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   142
_iconsole_inited=true;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   143
_iconsole_mode=ICONSOLE_CLOSED;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   144
_iconsole_win=NULL;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   145
_icursor_state=false;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   146
_icursor_rate=5;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   147
_icursor_counter=0;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   148
for (i=0;i<80;i++) _iconsole_buffer[i]=NULL;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   149
IConsoleStdLibRegister();
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   150
IConsolePrint(12,"OpenTTD Game Console Build #");	
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   151
IConsolePrint(12,"---------------------------------");
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   152
IConsoleClearCommand();
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   153
}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   154
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   155
void IConsoleClear()
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   156
{
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   157
int i;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   158
for (i=0;i<80;i++) if (_iconsole_buffer[i]!=NULL) {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   159
	free(_iconsole_buffer[i]);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   160
	}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   161
}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   162
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   163
void IConsoleFree()
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   164
{
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   165
_iconsole_inited=false;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   166
IConsoleClear();
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   167
}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   168
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   169
void IConsoleResize() {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   170
	if (_iconsole_win!=NULL) {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   171
		_iconsole_win->height = _screen.height / 3;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   172
		_iconsole_win->width= _screen.width;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   173
	}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   174
}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   175
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   176
void IConsoleSwitch()
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   177
{
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   178
	if (_iconsole_mode==ICONSOLE_CLOSED) {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   179
		_iconsole_win = AllocateWindowDesc(&_iconsole_window_desc);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   180
		_iconsole_win->height = _screen.height / 3;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   181
		_iconsole_win->width= _screen.width;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   182
		_iconsole_mode=ICONSOLE_OPENING;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   183
		} else
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   184
	if (_iconsole_mode==ICONSOLE_OPENED) {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   185
		DeleteWindow(_iconsole_win);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   186
		_iconsole_win=NULL;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   187
		_iconsole_mode=ICONSOLE_CLOSED;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   188
		}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   189
	MarkWholeScreenDirty();
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   190
	MarkAllViewportsDirty(0,0,_screen.width,_screen.height);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   191
	_video_driver->make_dirty(0,0,_screen.width,_screen.height);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   192
}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   193
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   194
void IConsoleClose() {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   195
if (_iconsole_mode==ICONSOLE_OPENED)  IConsoleSwitch();
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   196
}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   197
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   198
void IConsoleOpen() {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   199
if (_iconsole_mode==ICONSOLE_CLOSED) IConsoleSwitch();
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   200
}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   201
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   202
void IConsolePrint(byte color_code, byte* string)
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   203
{
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   204
byte * _ex;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   205
byte * _new;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   206
byte _exc;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   207
byte _newc;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   208
int i,j;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   209
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   210
if (!_iconsole_inited) return;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   211
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   212
_newc=color_code;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   213
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   214
i=strlen((char *)string);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   215
_new=malloc(i+1);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   216
memset(_new,0,i+1);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   217
memcpy(_new,string,i);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   218
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   219
for (j=0;j<i;j++) {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   220
	if (_new[j]<0x1F) _new[j]=0x20;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   221
	}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   222
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   223
i=79;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   224
while (i>=0) {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   225
	_ex=_iconsole_buffer[i];
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   226
	_exc=_iconsole_cbuffer[i];
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   227
	_iconsole_buffer[i]=_new;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   228
	_iconsole_cbuffer[i]=_newc;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   229
	_new=_ex;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   230
	_newc=_exc;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   231
	i--;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   232
	}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   233
if (_ex!=NULL) free(_ex);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   234
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   235
if (_iconsole_win!=NULL) SetWindowDirty(_iconsole_win);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   236
}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   237
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   238
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   239
void IConsolePrintF(byte color_code, const char *s, ...)
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   240
{
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   241
	va_list va;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   242
	char buf[1024];
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   243
	va_start(va, s);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   244
	vsprintf(buf, s, va);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   245
	va_end(va);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   246
	IConsolePrint(color_code, (byte *) &buf);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   247
}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   248
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   249
void IConsoleDebug(byte* string) {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   250
if (_stdlib_developer>1) IConsolePrintF(_iconsole_color_debug, "DEBUG: %s", string);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   251
}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   252
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   253
void IConsoleError(byte* string) {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   254
if (_stdlib_developer>0) IConsolePrintF(_iconsole_color_error, "ERROR: %s", string);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   255
}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   256
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   257
void IConsoleCmdRegister(byte * name, void * addr) {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   258
byte * _new;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   259
_iconsole_cmd * item;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   260
_iconsole_cmd * item_new;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   261
int i;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   262
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   263
	i=strlen((char *)name);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   264
	_new=malloc(i+1);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   265
	memset(_new,0,i+1);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   266
	memcpy(_new,name,i);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   267
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   268
item_new = malloc(sizeof(_iconsole_cmd));
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   269
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   270
item_new->_next = NULL;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   271
item_new->addr  = addr;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   272
item_new->name  = _new;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   273
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   274
item = _iconsole_cmds;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   275
if (item == NULL) {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   276
	_iconsole_cmds = item_new;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   277
	} else {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   278
	while (item->_next != NULL) { item = item->_next; };
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   279
	item->_next = item_new;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   280
	}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   281
}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   282
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   283
static void* IConsoleCmdGetAddr(byte * name) {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   284
_iconsole_cmd * item;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   285
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   286
item = _iconsole_cmds;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   287
while (item != NULL) { 
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   288
	if (strcmp(item->name,name)==0) return item->addr;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   289
	item = item->_next;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   290
	}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   291
return NULL;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   292
}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   293
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   294
void IConsoleVarRegister(byte * name, void * addr, byte type) {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   295
byte * _new;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   296
_iconsole_var * item;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   297
_iconsole_var * item_new;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   298
int i;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   299
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   300
	i=strlen((char *)name)+1;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   301
	_new=malloc(i+1);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   302
	memset(_new,0,i+1);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   303
	_new[0]='*';
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   304
	memcpy(_new+1,name,i);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   305
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   306
item_new = malloc(sizeof(_iconsole_var));
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   307
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   308
item_new->_next = NULL;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   309
item_new->addr  = addr;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   310
item_new->name  = _new;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   311
item_new->type  = type;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   312
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   313
item = _iconsole_vars;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   314
if (item == NULL) {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   315
	_iconsole_vars = item_new;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   316
	} else {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   317
	while (item->_next != NULL) { item = item->_next; };
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   318
	item->_next = item_new;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   319
	}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   320
}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   321
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   322
_iconsole_var * IConsoleVarGet(byte * name) {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   323
_iconsole_var * item;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   324
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   325
item = _iconsole_vars;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   326
while (item != NULL) { 
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   327
	if (strcmp(item->name,name)==0) return item;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   328
	item = item->_next;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   329
	}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   330
return NULL;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   331
}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   332
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   333
static void IConsoleVarStringSet(_iconsole_var * var, byte * string) {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   334
int l;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   335
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   336
if (strlen((byte *) var->addr)!=0) {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   337
	free(var->addr);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   338
	}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   339
l=strlen((char *) string);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   340
var->addr=malloc(l+1);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   341
memset(var->addr,0,l);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   342
memcpy((void *) var->addr,(void *) string, l);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   343
((byte *)var->addr)[l]=0;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   344
}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   345
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   346
void IConsoleCmdExec(byte * cmdstr) {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   347
void (*function)(byte argc, byte* argv[], byte argt[]);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   348
byte * tokens[20];
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   349
byte tokentypes[20];
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   350
byte * tokenstream;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   351
byte * tokenstream_s;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   352
byte execution_mode;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   353
_iconsole_var * var = NULL;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   354
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   355
byte var_b; // TYPE BYTE
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   356
unsigned short var_ui16; // TYPE UINT16
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   357
unsigned int var_ui32; // TYPE UINT32
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   358
signed short var_i16; // TYPE INT16
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   359
signed int var_i32; // TYPE INT32
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   360
byte * var_s; // TYPE STRING
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   361
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   362
bool longtoken;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   363
bool valid_token;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   364
bool skip_lt_change;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   365
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   366
int c;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   367
int i;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   368
int l;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   369
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   370
//** clearing buffer **//
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   371
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   372
for (i=0;i<20;i++) { tokens[i]=NULL; tokentypes[i]=ICONSOLE_VAR_NONE; };
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   373
tokenstream_s=tokenstream=malloc(1024);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   374
memset(tokenstream,0,1024);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   375
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   376
//** parsing **//
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   377
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   378
longtoken=false;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   379
valid_token=false;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   380
skip_lt_change=false;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   381
l=strlen((char *) cmdstr);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   382
i=0;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   383
c=0;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   384
tokens[c] = tokenstream;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   385
while (i<l) {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   386
	if (cmdstr[i]=='"') {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   387
		if (longtoken) {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   388
			if (cmdstr[i+1]=='"') {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   389
				i++;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   390
				*tokenstream = '"';
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   391
				tokenstream++;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   392
				skip_lt_change=true;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   393
				} else {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   394
				longtoken=!longtoken;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   395
				}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   396
			} else {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   397
			longtoken=!longtoken;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   398
			}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   399
		if (!skip_lt_change) {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   400
			if (!longtoken) {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   401
				if (valid_token) {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   402
					c++;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   403
					*tokenstream = 0;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   404
					tokenstream++;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   405
					tokens[c] = tokenstream;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   406
					valid_token = false;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   407
					}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   408
				}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   409
			skip_lt_change=false;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   410
			}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   411
		}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   412
	else if ((!longtoken) && (cmdstr[i]==' ')) {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   413
		if (valid_token) {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   414
			c++;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   415
			*tokenstream = 0;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   416
			tokenstream++;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   417
			tokens[c] = tokenstream;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   418
			valid_token = false;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   419
			}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   420
		}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   421
	else {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   422
		valid_token=true;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   423
		*tokenstream = cmdstr[i];
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   424
		tokenstream++;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   425
		}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   426
	i++;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   427
	}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   428
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   429
tokenstream--;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   430
if (!(*tokenstream==0)) {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   431
	c++;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   432
	tokenstream++;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   433
	*tokenstream = 0;	
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   434
	}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   435
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   436
//** interpreting **//
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   437
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   438
for (i=0; i<c; i++) {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   439
	if (i>0) if (strlen((char *) tokens[i])>0) {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   440
		if (tokens[i][0]=='*') {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   441
			var = IConsoleVarGet(tokens[i]);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   442
			if (var!=NULL) {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   443
				tokens[i]=(byte *)var->addr;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   444
				tokentypes[i]=var->type;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   445
				}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   446
			} else { 
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   447
			tokentypes[i]=ICONSOLE_VAR_STRING;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   448
			}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   449
		}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   450
	}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   451
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   452
execution_mode=0;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   453
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   454
function = IConsoleCmdGetAddr(tokens[0]);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   455
if (function != NULL) {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   456
	execution_mode=1; // this is a command
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   457
	} else {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   458
	var = IConsoleVarGet(tokens[0]);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   459
	if (var != NULL) {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   460
		execution_mode=2; // this is a variable
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   461
		}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   462
	}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   463
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   464
//** executing **//
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   465
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   466
switch (execution_mode) {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   467
case 0: 
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   468
	{
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   469
	// not found
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   470
	IConsoleError("command or variable not found");
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   471
	}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   472
	break;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   473
case 1:
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   474
	{
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   475
	// execution with command syntax
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   476
	function(c,tokens,tokentypes);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   477
	}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   478
	break;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   479
case 2:
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   480
	{
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   481
	// execution with variable syntax
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   482
if ((c==2) || (c==3)) {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   483
		// ** variable modifications ** //
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   484
		switch (var->type) {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   485
		case ICONSOLE_VAR_BOOLEAN:
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   486
				{
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   487
				if (strcmp(tokens[1],"=")==0) {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   488
					if (c==3) {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   489
						*(bool *)var->addr=(atoi((char *) tokens[2])==1);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   490
						c=1;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   491
						} else {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   492
						*(bool *)var->addr=false;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   493
						c=1;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   494
						}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   495
					}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   496
				else if (strcmp(tokens[1],"++")==0) {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   497
					*(bool *)var->addr=!*(bool *)var->addr;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   498
					c=1;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   499
					}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   500
				else if (strcmp(tokens[1],"--")==0) {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   501
					*(bool *)var->addr=!*(bool *)var->addr;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   502
					c=1;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   503
					}	 
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   504
				else { IConsoleError("operation not supported"); }
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   505
				}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   506
				break;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   507
		case ICONSOLE_VAR_BYTE:
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   508
				{
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   509
				if (strcmp(tokens[1],"=")==0) {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   510
					if (c==3) {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   511
						*(byte *)var->addr=atoi((char *) tokens[2]);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   512
						c=1;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   513
						} else {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   514
						*(byte *)var->addr=0;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   515
						c=1;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   516
						}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   517
					}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   518
				else if (strcmp(tokens[1],"++")==0) {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   519
					(*(byte *)var->addr)++;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   520
					c=1;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   521
					}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   522
				else if (strcmp(tokens[1],"--")==0) {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   523
					(*(byte *)var->addr)--;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   524
					c=1;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   525
					}	 
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   526
				else { IConsoleError("operation not supported"); }
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   527
				}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   528
				break;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   529
		case ICONSOLE_VAR_UINT16:
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   530
				{
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   531
				if (strcmp(tokens[1],"=")==0) {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   532
					if (c==3) {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   533
						*(unsigned short *)var->addr=atoi((char *) tokens[2]);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   534
						c=1;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   535
						} else {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   536
						*(unsigned short *)var->addr=0;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   537
						c=1;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   538
						}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   539
					}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   540
				else if (strcmp(tokens[1],"++")==0) {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   541
					(*(unsigned short *)var->addr)++;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   542
					c=1;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   543
					}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   544
				else if (strcmp(tokens[1],"--")==0) {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   545
					(*(unsigned short *)var->addr)--;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   546
					c=1;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   547
					}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   548
				else { IConsoleError("operation not supported"); }
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   549
				}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   550
				break;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   551
		case ICONSOLE_VAR_UINT32:
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   552
				{
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   553
				if (strcmp(tokens[1],"=")==0) {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   554
					if (c==3) {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   555
						*(unsigned int *)var->addr=atoi((char *) tokens[2]);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   556
						c=1;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   557
						} else {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   558
						*(unsigned int *)var->addr=0;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   559
						c=1;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   560
						}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   561
					}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   562
				else if (strcmp(tokens[1],"++")==0) {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   563
					(*(unsigned int *)var->addr)++;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   564
					c=1;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   565
					}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   566
				else if (strcmp(tokens[1],"--")==0) {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   567
					(*(unsigned int *)var->addr)--;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   568
					c=1;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   569
					}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   570
				else { IConsoleError("operation not supported"); }
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   571
				}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   572
				break;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   573
		case ICONSOLE_VAR_INT16:
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   574
				{
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   575
				if (strcmp(tokens[1],"=")==0) {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   576
					if (c==3) {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   577
						*(signed short *)var->addr=atoi((char *) tokens[2]);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   578
						c=1;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   579
						} else {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   580
						*(signed short *)var->addr=0;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   581
						c=1;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   582
						}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   583
					}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   584
				else if (strcmp(tokens[1],"++")==0) {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   585
					(*(signed short *)var->addr)++;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   586
					c=1;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   587
					}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   588
				else if (strcmp(tokens[1],"--")==0) {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   589
					(*(signed short *)var->addr)--;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   590
					c=1;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   591
					}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   592
				else { IConsoleError("operation not supported"); }
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   593
				}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   594
				break;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   595
		case ICONSOLE_VAR_INT32:
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   596
				{
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   597
				if (strcmp(tokens[1],"=")==0) {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   598
					if (c==3) {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   599
						*(signed int *)var->addr=atoi((char *) tokens[2]);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   600
						c=1;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   601
						} else {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   602
						*(signed int *)var->addr=0;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   603
						c=1;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   604
						}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   605
					}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   606
				else if (strcmp(tokens[1],"++")==0) {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   607
					(*(signed int *)var->addr)++;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   608
					c=1;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   609
					}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   610
				else if (strcmp(tokens[1],"--")==0) {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   611
					(*(signed int *)var->addr)--;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   612
					c=1;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   613
					}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   614
				else { IConsoleError("operation not supported"); }
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   615
				}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   616
				break;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   617
		case ICONSOLE_VAR_STRING:
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   618
				{
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   619
				if (strcmp(tokens[1],"=")==0) {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   620
					if (c==3) {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   621
						IConsoleVarStringSet(var, tokens[2]);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   622
						c=1;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   623
						} else {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   624
						IConsoleVarStringSet(var, "");
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   625
						c=1;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   626
						}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   627
					}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   628
				else { IConsoleError("operation not supported"); }
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   629
				}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   630
				break;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   631
		case ICONSOLE_VAR_POINTER:
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   632
				{
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   633
				if (strcmp(tokens[1],"=")==0) {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   634
					if (c==3) {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   635
						var->addr = tokens[2];
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   636
						c=1;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   637
						} else {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   638
						var->addr = NULL;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   639
						c=1;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   640
						}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   641
					}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   642
				else if (strcmp(tokens[1],"++")==0) {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   643
					var->addr = ((char *)var->addr)+1;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   644
					c=1;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   645
					}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   646
				else if (strcmp(tokens[1],"--")==0) {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   647
					var->addr = ((char *)var->addr)-1;;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   648
					c=1;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   649
					}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   650
				else { IConsoleError("operation not supported"); }
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   651
				}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   652
				break;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   653
			}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   654
	}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   655
	if (c==1) {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   656
		// ** variable output ** //
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   657
		switch (var->type) {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   658
		case ICONSOLE_VAR_BOOLEAN:
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   659
				{
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   660
				if (*(bool *)var->addr) {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   661
					IConsolePrintF(_iconsole_color_default, "%s = true",var->name);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   662
					} else {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   663
					IConsolePrintF(_iconsole_color_default, "%s = false",var->name);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   664
					}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   665
				}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   666
				break;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   667
		case ICONSOLE_VAR_BYTE:
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   668
				{
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   669
				var_b=*(byte *)var->addr;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   670
				IConsolePrintF(_iconsole_color_default, "%s = %i",var->name,var_b);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   671
				}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   672
				break;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   673
		case ICONSOLE_VAR_UINT16:
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   674
				{
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   675
				var_ui16=*(unsigned short *)var->addr;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   676
				IConsolePrintF(_iconsole_color_default, "%s = %i",var->name,var_ui16);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   677
				}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   678
				break;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   679
		case ICONSOLE_VAR_UINT32:
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   680
				{
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   681
				var_ui32=*(unsigned int *)var->addr;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   682
				IConsolePrintF(_iconsole_color_default, "%s = %i",var->name,var_ui32);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   683
				}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   684
				break;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   685
		case ICONSOLE_VAR_INT16:
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   686
				{
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   687
				var_i16=*(signed short *)var->addr;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   688
				IConsolePrintF(_iconsole_color_default, "%s = %i",var->name,var_i16);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   689
				}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   690
				break;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   691
		case ICONSOLE_VAR_INT32:
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   692
				{
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   693
				var_i32=*(signed int *)var->addr;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   694
				IConsolePrintF(_iconsole_color_default, "%s = %i",var->name,var_i32);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   695
				}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   696
				break;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   697
		case ICONSOLE_VAR_STRING:
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   698
				{
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   699
				var_s=(byte *)var->addr;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   700
				IConsolePrintF(_iconsole_color_default, "%s = %s",var->name,var_s);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   701
				}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   702
				break;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   703
		case ICONSOLE_VAR_UNKNOWN:
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   704
		case ICONSOLE_VAR_VARPTR:
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   705
		case ICONSOLE_VAR_POINTER:
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   706
				{
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   707
				var_i32=(signed int)((byte *)var->addr);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   708
				IConsolePrintF(_iconsole_color_default, "%s = @%i",var->name,var_i32);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   709
				}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   710
				break;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   711
			}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   712
		}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   713
	}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   714
	break;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   715
default:
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   716
	{
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   717
	// execution mode invalid
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   718
	IConsoleError("invalid execution mode");
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   719
	}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   720
}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   721
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   722
//** freeing the tokens **//
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   723
for (i=0;i<20;i++) tokens[i]=NULL;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   724
free(tokenstream_s);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   725
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   726
}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   727
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   728
/* **************************** */
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   729
/*   default console commands   */
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   730
/* **************************** */
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   731
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   732
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   733
static void IConsoleStdLibEcho(byte argc, byte * argv[], byte argt[]) {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   734
	if (argc<2) return;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   735
	IConsolePrint(_iconsole_color_default, argv[1]);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   736
}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   737
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   738
static void IConsoleStdLibEchoC(byte argc, byte * argv[], byte argt[]) {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   739
	if (argc<3) return;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   740
	IConsolePrint(atoi(argv[1]), argv[2]);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   741
}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   742
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   743
static void IConsoleStdLibPrintF(byte argc, byte * argv[], byte argt[]) {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   744
	if (argc<3) return;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   745
	IConsolePrintF(_iconsole_color_default, argv[1] ,argv[2],argv[3],argv[4],argv[5],argv[6],argv[7],argv[8],argv[9],argv[10],argv[11],argv[12],argv[13],argv[14],argv[15],argv[16],argv[17],argv[18],argv[19]);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   746
}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   747
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   748
static void IConsoleStdLibPrintFC(byte argc, byte * argv[], byte argt[]) {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   749
	if (argc<3) return;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   750
	IConsolePrintF(atoi(argv[1]), argv[2] ,argv[3],argv[4],argv[5],argv[6],argv[7],argv[8],argv[9],argv[10],argv[11],argv[12],argv[13],argv[14],argv[15],argv[16],argv[17],argv[18],argv[19]);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   751
}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   752
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   753
static void IConsoleStdLibScreenShot(byte argc, byte * argv[], byte argt[]) {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   754
	
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   755
	if (argc<2) {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   756
		_make_screenshot=1;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   757
	} else {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   758
		if (strcmp(argv[1],"big")==0) {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   759
			_make_screenshot=2;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   760
			}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   761
		}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   762
}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   763
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   764
static void IConsoleStdLibDebugLevel(byte argc, byte * argv[], byte argt[]) {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   765
	if (argc<2) return;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   766
	SetDebugString(argv[1]);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   767
}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   768
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   769
static void IConsoleStdLibExit(byte argc, byte * argv[], byte argt[]) {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   770
	_exit_game = true;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   771
}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   772
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   773
static void IConsoleStdLibListCommands(byte argc, byte * argv[], byte argt[]) {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   774
_iconsole_cmd * item;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   775
int l = 0;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   776
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   777
if (argv[1]!=NULL) l = strlen((char *) argv[1]);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   778
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   779
item = _iconsole_cmds;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   780
while (item != NULL) { 
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   781
	if (argv[1]!=NULL) {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   782
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   783
		if (memcmp((void *) item->name, (void *) argv[1],l)==0)
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   784
				IConsolePrintF(_iconsole_color_default,"%s",item->name);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   785
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   786
		} else {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   787
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   788
		IConsolePrintF(_iconsole_color_default,"%s",item->name);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   789
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   790
		}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   791
	item = item->_next;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   792
	}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   793
}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   794
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   795
static void IConsoleStdLibListVariables(byte argc, byte * argv[], byte argt[]) {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   796
_iconsole_var * item;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   797
int l = 0;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   798
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   799
if (argv[1]!=NULL) l = strlen((char *) argv[1]);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   800
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   801
item = _iconsole_vars;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   802
while (item != NULL) { 
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   803
	if (argv[1]!=NULL) {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   804
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   805
		if (memcmp((void *) item->name, (void *) argv[1],l)==0)
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   806
				IConsolePrintF(_iconsole_color_default,"%s",item->name);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   807
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   808
		} else {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   809
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   810
		IConsolePrintF(_iconsole_color_default,"%s",item->name);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   811
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   812
		}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   813
	item = item->_next;
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   814
	}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   815
}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   816
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   817
static void IConsoleStdLibRegister() {
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   818
	IConsoleCmdRegister("echo",IConsoleStdLibEcho);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   819
	IConsoleCmdRegister("echoc",IConsoleStdLibEchoC);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   820
	IConsoleCmdRegister("printf",IConsoleStdLibPrintF);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   821
	IConsoleCmdRegister("printfc",IConsoleStdLibPrintFC);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   822
	IConsoleCmdRegister("list_cmds",IConsoleStdLibListCommands);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   823
	IConsoleCmdRegister("list_vars",IConsoleStdLibListVariables);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   824
	IConsoleCmdRegister("screenshot",IConsoleStdLibScreenShot);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   825
	IConsoleCmdRegister("debug_level",IConsoleStdLibDebugLevel);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   826
	IConsoleCmdRegister("exit",IConsoleStdLibExit);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   827
	IConsoleVarRegister("developer",(void *) &_stdlib_developer,ICONSOLE_VAR_BYTE);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   828
	IConsoleVarRegister("cursor_rate",(void *) &_icursor_rate,ICONSOLE_VAR_BYTE);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   829
	IConsoleVarRegister("temp_string",(void *) &_stdlib_temp_string,ICONSOLE_VAR_STRING);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   830
	IConsoleVarRegister("temp_pointer",(void *) &_stdlib_temp_pointer,ICONSOLE_VAR_POINTER);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   831
	IConsoleVarRegister("temp_uint32",(void *) &_stdlib_temp_uint32,ICONSOLE_VAR_UINT32);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   832
	IConsoleVarRegister("temp_bool",(void *) &_stdlib_temp_bool,ICONSOLE_VAR_BOOLEAN);
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   833
}
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   834
152df0cc4ac2 (svn r127) New feature: ingame console. (sign_de)
dominik
parents:
diff changeset
   835