src/console_gui.cpp
author truebrain
Fri, 18 Jul 2008 10:15:16 +0000
branchnoai
changeset 11168 3842648184cd
parent 10715 6bdf79ffb022
permissions -rw-r--r--
(svn r13726) [NoAI] -Add: AIVehicle::ReverseVehicle (Yexo)
10715
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
     1
/* $Id$ */
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
     2
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
     3
/** @file console.cpp Handling of the in-game console. */
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
     4
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
     5
#include "stdafx.h"
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
     6
#include "openttd.h"
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
     7
#include "textbuf_gui.h"
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
     8
#include "window_gui.h"
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
     9
#include "console_gui.h"
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
    10
#include <stdarg.h>
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
    11
#include <string.h>
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
    12
#include "console_internal.h"
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
    13
#include "window_func.h"
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
    14
#include "string_func.h"
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
    15
#include "gfx_func.h"
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
    16
#include "core/math_func.hpp"
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
    17
#include "rev.h"
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
    18
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
    19
#include "table/strings.h"
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
    20
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
    21
#define ICON_BUFFER 79
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
    22
#define ICON_HISTORY_SIZE 20
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
    23
#define ICON_LINE_HEIGHT 12
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
    24
#define ICON_RIGHT_BORDERWIDTH 10
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
    25
#define ICON_BOTTOM_BORDERWIDTH 12
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
    26
#define ICON_MAX_ALIAS_LINES 40
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
    27
#define ICON_TOKEN_COUNT 20
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
    28
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
    29
/* console modes */
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
    30
IConsoleModes _iconsole_mode;
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
    31
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
    32
/* ** main console ** */
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
    33
static char *_iconsole_buffer[ICON_BUFFER + 1];
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
    34
static uint16 _iconsole_cbuffer[ICON_BUFFER + 1];
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
    35
static Textbuf _iconsole_cmdline;
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
    36
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
    37
/* ** main console cmd buffer ** */
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
    38
static char *_iconsole_history[ICON_HISTORY_SIZE];
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
    39
static byte _iconsole_historypos;
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
    40
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
    41
/* *************** *
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
    42
 *  end of header  *
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
    43
 * *************** */
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
    44
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
    45
static void IConsoleClearCommand()
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
    46
{
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
    47
	memset(_iconsole_cmdline.buf, 0, ICON_CMDLN_SIZE);
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
    48
	_iconsole_cmdline.length = 0;
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
    49
	_iconsole_cmdline.width = 0;
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
    50
	_iconsole_cmdline.caretpos = 0;
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
    51
	_iconsole_cmdline.caretxoffs = 0;
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
    52
	SetWindowDirty(FindWindowById(WC_CONSOLE, 0));
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
    53
}
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
    54
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
    55
static inline void IConsoleResetHistoryPos() {_iconsole_historypos = ICON_HISTORY_SIZE - 1;}
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
    56
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
    57
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
    58
static void IConsoleHistoryAdd(const char *cmd);
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
    59
static void IConsoleHistoryNavigate(int direction);
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
    60
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
    61
struct IConsoleWindow : Window
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
    62
{
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
    63
	static byte scroll;
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
    64
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
    65
	IConsoleWindow(const WindowDesc *desc) : Window(desc)
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
    66
	{
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
    67
		_iconsole_mode = ICONSOLE_OPENED;
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
    68
		SetBit(_no_scroll, SCROLL_CON); // override cursor arrows; the gamefield will not scroll
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
    69
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
    70
		this->height = _screen.height / 3;
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
    71
		this->width  = _screen.width;
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
    72
	}
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
    73
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
    74
	~IConsoleWindow()
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
    75
	{
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
    76
		_iconsole_mode = ICONSOLE_CLOSED;
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
    77
		ClrBit(_no_scroll, SCROLL_CON);
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
    78
	}
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
    79
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
    80
	virtual void OnPaint()
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
    81
	{
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
    82
		int i = IConsoleWindow::scroll;
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
    83
		int max = (this->height / ICON_LINE_HEIGHT) - 1;
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
    84
		int delta = 0;
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
    85
		GfxFillRect(this->left, this->top, this->width, this->height - 1, 0);
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
    86
		while ((i > 0) && (i > IConsoleWindow::scroll - max) && (_iconsole_buffer[i] != NULL)) {
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
    87
			DoDrawString(_iconsole_buffer[i], 5,
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
    88
				this->height - (IConsoleWindow::scroll + 2 - i) * ICON_LINE_HEIGHT, _iconsole_cbuffer[i]);
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
    89
			i--;
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
    90
		}
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
    91
		/* If the text is longer than the window, don't show the starting ']' */
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
    92
		delta = this->width - 10 - _iconsole_cmdline.width - ICON_RIGHT_BORDERWIDTH;
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
    93
		if (delta > 0) {
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
    94
			DoDrawString("]", 5, this->height - ICON_LINE_HEIGHT, CC_COMMAND);
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
    95
			delta = 0;
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
    96
		}
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
    97
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
    98
		DoDrawString(_iconsole_cmdline.buf, 10 + delta, this->height - ICON_LINE_HEIGHT, CC_COMMAND);
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
    99
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   100
		if (_iconsole_cmdline.caret) {
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   101
			DoDrawString("_", 10 + delta + _iconsole_cmdline.caretxoffs, this->height - ICON_LINE_HEIGHT, TC_WHITE);
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   102
		}
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   103
	}
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   104
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   105
	virtual void OnMouseLoop()
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   106
	{
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   107
		if (HandleCaret(&_iconsole_cmdline)) this->SetDirty();
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   108
	}
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   109
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   110
	virtual EventState OnKeyPress(uint16 key, uint16 keycode)
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   111
	{
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   112
		switch (keycode) {
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   113
			case WKC_UP:
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   114
				IConsoleHistoryNavigate(+1);
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   115
				this->SetDirty();
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   116
				break;
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   117
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   118
			case WKC_DOWN:
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   119
				IConsoleHistoryNavigate(-1);
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   120
				this->SetDirty();
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   121
				break;
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   122
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   123
			case WKC_SHIFT | WKC_PAGEUP:
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   124
				if (IConsoleWindow::scroll - (this->height / ICON_LINE_HEIGHT) - 1 < 0) {
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   125
					IConsoleWindow::scroll = 0;
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   126
				} else {
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   127
					IConsoleWindow::scroll -= (this->height / ICON_LINE_HEIGHT) - 1;
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   128
				}
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   129
				this->SetDirty();
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   130
				break;
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   131
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   132
			case WKC_SHIFT | WKC_PAGEDOWN:
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   133
				if (IConsoleWindow::scroll + (this->height / ICON_LINE_HEIGHT) - 1 > ICON_BUFFER) {
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   134
					IConsoleWindow::scroll = ICON_BUFFER;
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   135
				} else {
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   136
					IConsoleWindow::scroll += (this->height / ICON_LINE_HEIGHT) - 1;
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   137
				}
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   138
				this->SetDirty();
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   139
				break;
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   140
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   141
			case WKC_SHIFT | WKC_UP:
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   142
				if (IConsoleWindow::scroll <= 0) {
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   143
					IConsoleWindow::scroll = 0;
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   144
				} else {
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   145
					--IConsoleWindow::scroll;
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   146
				}
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   147
				this->SetDirty();
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   148
				break;
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   149
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   150
			case WKC_SHIFT | WKC_DOWN:
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   151
				if (IConsoleWindow::scroll >= ICON_BUFFER) {
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   152
					IConsoleWindow::scroll = ICON_BUFFER;
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   153
				} else {
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   154
					++IConsoleWindow::scroll;
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   155
				}
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   156
				this->SetDirty();
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   157
				break;
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   158
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   159
			case WKC_BACKQUOTE:
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   160
				IConsoleSwitch();
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   161
				break;
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   162
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   163
			case WKC_RETURN: case WKC_NUM_ENTER:
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   164
				IConsolePrintF(CC_COMMAND, "] %s", _iconsole_cmdline.buf);
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   165
				IConsoleHistoryAdd(_iconsole_cmdline.buf);
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   166
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   167
				IConsoleCmdExec(_iconsole_cmdline.buf);
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   168
				IConsoleClearCommand();
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   169
				break;
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   170
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   171
			case WKC_CTRL | WKC_RETURN:
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   172
				_iconsole_mode = (_iconsole_mode == ICONSOLE_FULL) ? ICONSOLE_OPENED : ICONSOLE_FULL;
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   173
				IConsoleResize(this);
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   174
				MarkWholeScreenDirty();
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   175
				break;
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   176
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   177
			case (WKC_CTRL | 'V'):
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   178
				if (InsertTextBufferClipboard(&_iconsole_cmdline)) {
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   179
					IConsoleResetHistoryPos();
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   180
					this->SetDirty();
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   181
				}
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   182
				break;
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   183
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   184
			case (WKC_CTRL | 'L'):
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   185
				IConsoleCmdExec("clear");
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   186
				break;
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   187
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   188
			case (WKC_CTRL | 'U'):
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   189
				DeleteTextBufferAll(&_iconsole_cmdline);
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   190
				this->SetDirty();
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   191
				break;
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   192
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   193
			case WKC_BACKSPACE: case WKC_DELETE:
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   194
				if (DeleteTextBufferChar(&_iconsole_cmdline, keycode)) {
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   195
					IConsoleResetHistoryPos();
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   196
					this->SetDirty();
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   197
				}
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   198
				break;
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   199
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   200
			case WKC_LEFT: case WKC_RIGHT: case WKC_END: case WKC_HOME:
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   201
				if (MoveTextBufferPos(&_iconsole_cmdline, keycode)) {
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   202
					IConsoleResetHistoryPos();
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   203
					this->SetDirty();
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   204
				}
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   205
				break;
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   206
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   207
			default:
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   208
				if (IsValidChar(key, CS_ALPHANUMERAL)) {
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   209
					IConsoleWindow::scroll = ICON_BUFFER;
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   210
					InsertTextBufferChar(&_iconsole_cmdline, key);
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   211
					IConsoleResetHistoryPos();
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   212
					this->SetDirty();
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   213
				} else {
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   214
					return ES_NOT_HANDLED;
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   215
				}
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   216
		}
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   217
		return ES_HANDLED;
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   218
	}
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   219
};
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   220
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   221
byte IConsoleWindow::scroll = ICON_BUFFER;
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   222
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   223
static const Widget _iconsole_window_widgets[] = {
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   224
	{WIDGETS_END}
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   225
};
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   226
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   227
static const WindowDesc _iconsole_window_desc = {
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   228
	0, 0, 2, 2, 2, 2,
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   229
	WC_CONSOLE, WC_NONE,
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   230
	WDF_STD_TOOLTIPS | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS,
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   231
	_iconsole_window_widgets,
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   232
};
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   233
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   234
void IConsoleGUIInit()
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   235
{
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   236
	_iconsole_historypos = ICON_HISTORY_SIZE - 1;
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   237
	_iconsole_mode = ICONSOLE_CLOSED;
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   238
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   239
	memset(_iconsole_history, 0, sizeof(_iconsole_history));
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   240
	memset(_iconsole_buffer, 0, sizeof(_iconsole_buffer));
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   241
	memset(_iconsole_cbuffer, 0, sizeof(_iconsole_cbuffer));
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   242
	_iconsole_cmdline.buf = CallocT<char>(ICON_CMDLN_SIZE); // create buffer and zero it
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   243
	_iconsole_cmdline.maxlength = ICON_CMDLN_SIZE;
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   244
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   245
	IConsolePrintF(CC_WARNING, "OpenTTD Game Console Revision 7 - %s", _openttd_revision);
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   246
	IConsolePrint(CC_WHITE,  "------------------------------------");
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   247
	IConsolePrint(CC_WHITE,  "use \"help\" for more information");
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   248
	IConsolePrint(CC_WHITE,  "");
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   249
	IConsoleClearCommand();
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   250
	IConsoleHistoryAdd("");
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   251
}
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   252
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   253
void IConsoleClearBuffer()
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   254
{
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   255
	uint i;
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   256
	for (i = 0; i <= ICON_BUFFER; i++) {
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   257
		free(_iconsole_buffer[i]);
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   258
		_iconsole_buffer[i] = NULL;
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   259
	}
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   260
}
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   261
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   262
void IConsoleGUIFree()
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   263
{
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   264
	free(_iconsole_cmdline.buf);
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   265
	IConsoleClearBuffer();
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   266
}
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   267
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   268
void IConsoleResize(Window *w)
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   269
{
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   270
	switch (_iconsole_mode) {
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   271
		case ICONSOLE_OPENED:
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   272
			w->height = _screen.height / 3;
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   273
			w->width = _screen.width;
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   274
			break;
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   275
		case ICONSOLE_FULL:
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   276
			w->height = _screen.height - ICON_BOTTOM_BORDERWIDTH;
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   277
			w->width = _screen.width;
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   278
			break;
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   279
		default: return;
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   280
	}
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   281
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   282
	MarkWholeScreenDirty();
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   283
}
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   284
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   285
void IConsoleSwitch()
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   286
{
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   287
	switch (_iconsole_mode) {
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   288
		case ICONSOLE_CLOSED:
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   289
			new IConsoleWindow(&_iconsole_window_desc);
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   290
			break;
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   291
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   292
		case ICONSOLE_OPENED: case ICONSOLE_FULL:
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   293
			DeleteWindowById(WC_CONSOLE, 0);
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   294
			break;
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   295
	}
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   296
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   297
	MarkWholeScreenDirty();
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   298
}
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   299
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   300
void IConsoleClose() {if (_iconsole_mode == ICONSOLE_OPENED) IConsoleSwitch();}
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   301
void IConsoleOpen()  {if (_iconsole_mode == ICONSOLE_CLOSED) IConsoleSwitch();}
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   302
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   303
/**
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   304
 * Add the entered line into the history so you can look it back
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   305
 * scroll, etc. Put it to the beginning as it is the latest text
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   306
 * @param cmd Text to be entered into the 'history'
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   307
 */
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   308
static void IConsoleHistoryAdd(const char *cmd)
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   309
{
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   310
	free(_iconsole_history[ICON_HISTORY_SIZE - 1]);
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   311
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   312
	memmove(&_iconsole_history[1], &_iconsole_history[0], sizeof(_iconsole_history[0]) * (ICON_HISTORY_SIZE - 1));
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   313
	_iconsole_history[0] = strdup(cmd);
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   314
	IConsoleResetHistoryPos();
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   315
}
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   316
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   317
/**
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   318
 * Navigate Up/Down in the history of typed commands
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   319
 * @param direction Go further back in history (+1), go to recently typed commands (-1)
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   320
 */
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   321
static void IConsoleHistoryNavigate(int direction)
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   322
{
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   323
	int i = _iconsole_historypos + direction;
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   324
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   325
	/* watch out for overflows, just wrap around */
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   326
	if (i < 0) i = ICON_HISTORY_SIZE - 1;
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   327
	if (i >= ICON_HISTORY_SIZE) i = 0;
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   328
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   329
	if (direction > 0) {
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   330
		if (_iconsole_history[i] == NULL) i = 0;
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   331
	}
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   332
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   333
	if (direction < 0) {
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   334
		while (i > 0 && _iconsole_history[i] == NULL) i--;
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   335
	}
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   336
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   337
	_iconsole_historypos = i;
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   338
	IConsoleClearCommand();
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   339
	/* copy history to 'command prompt / bash' */
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   340
	assert(_iconsole_history[i] != NULL && IsInsideMM(i, 0, ICON_HISTORY_SIZE));
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   341
	ttd_strlcpy(_iconsole_cmdline.buf, _iconsole_history[i], _iconsole_cmdline.maxlength);
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   342
	UpdateTextBufferSize(&_iconsole_cmdline);
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   343
}
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   344
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   345
/**
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   346
 * Handle the printing of text entered into the console or redirected there
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   347
 * by any other means. Text can be redirected to other players in a network game
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   348
 * as well as to a logfile. If the network server is a dedicated server, all activities
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   349
 * are also logged. All lines to print are added to a temporary buffer which can be
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   350
 * used as a history to print them onscreen
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   351
 * @param color_code the colour of the command. Red in case of errors, etc.
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   352
 * @param string the message entered or output on the console (notice, error, etc.)
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   353
 */
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   354
void IConsoleGUIPrint(ConsoleColour color_code, char *str)
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   355
{
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   356
	/* move up all the strings in the buffer one place and do the same for colour
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   357
	 * to accomodate for the new command/message */
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   358
	free(_iconsole_buffer[0]);
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   359
	memmove(&_iconsole_buffer[0], &_iconsole_buffer[1], sizeof(_iconsole_buffer[0]) * ICON_BUFFER);
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   360
	_iconsole_buffer[ICON_BUFFER] = str;
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   361
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   362
	memmove(&_iconsole_cbuffer[0], &_iconsole_cbuffer[1], sizeof(_iconsole_cbuffer[0]) * ICON_BUFFER);
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   363
	_iconsole_cbuffer[ICON_BUFFER] = color_code;
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   364
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   365
	SetWindowDirty(FindWindowById(WC_CONSOLE, 0));
6bdf79ffb022 (svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
diff changeset
   366
}