@@ -26,12 +26,9 @@
#define ICON_TOKEN_COUNT 20
// ** main console ** //
static Window *_iconsole_win; // Pointer to console window
static bool _iconsole_inited;
static char *_iconsole_buffer[ICON_BUFFER + 1];
static uint16 _iconsole_cbuffer[ICON_BUFFER + 1];
static Textbuf _iconsole_cmdline;
static byte _iconsole_scroll;
// ** stdlib ** //
byte _stdlib_developer = 1;
@@ -53,7 +50,7 @@ static void IConsoleClearCommand(void)
_iconsole_cmdline.width = 0;
_iconsole_cmdline.caretpos = 0;
_iconsole_cmdline.caretxoffs = 0;
SetWindowDirty(_iconsole_win);
SetWindowDirty(FindWindowById(WC_CONSOLE, 0));
}
static inline void IConsoleResetHistoryPos(void) {_iconsole_historypos = ICON_HISTORY_SIZE - 1;}
@@ -65,15 +62,17 @@ static void IConsoleHistoryNavigate(int
// ** console window ** //
static void IConsoleWndProc(Window *w, WindowEvent *e)
{
static byte iconsole_scroll = ICON_BUFFER;
switch (e->event) {
case WE_PAINT: {
int i = _iconsole_scroll;
int i = iconsole_scroll;
int max = (w->height / ICON_LINE_HEIGHT) - 1;
int delta = 0;
GfxFillRect(w->left, w->top, w->width, w->height - 1, 0);
while ((i > 0) && (i > _iconsole_scroll - max) && (_iconsole_buffer[i] != NULL)) {
while ((i > 0) && (i > iconsole_scroll - max) && (_iconsole_buffer[i] != NULL)) {
DoDrawString(_iconsole_buffer[i], 5,
w->height - (_iconsole_scroll + 2 - i) * ICON_LINE_HEIGHT, _iconsole_cbuffer[i]);
w->height - (iconsole_scroll + 2 - i) * ICON_LINE_HEIGHT, _iconsole_cbuffer[i]);
i--;
/* If the text is longer than the window, don't show the starting ']' */
@@ -94,7 +93,6 @@ static void IConsoleWndProc(Window *w, W
SetWindowDirty(w);
break;
case WE_DESTROY:
_iconsole_win = NULL;
_iconsole_mode = ICONSOLE_CLOSED;
case WE_KEYPRESS:
@@ -109,34 +107,34 @@ static void IConsoleWndProc(Window *w, W
case WKC_SHIFT | WKC_PAGEUP:
if (_iconsole_scroll - (w->height / ICON_LINE_HEIGHT) - 1 < 0) {
_iconsole_scroll = 0;
if (iconsole_scroll - (w->height / ICON_LINE_HEIGHT) - 1 < 0) {
iconsole_scroll = 0;
} else {
_iconsole_scroll -= (w->height / ICON_LINE_HEIGHT) - 1;
iconsole_scroll -= (w->height / ICON_LINE_HEIGHT) - 1;
case WKC_SHIFT | WKC_PAGEDOWN:
if (_iconsole_scroll + (w->height / ICON_LINE_HEIGHT) - 1 > ICON_BUFFER) {
_iconsole_scroll = ICON_BUFFER;
if (iconsole_scroll + (w->height / ICON_LINE_HEIGHT) - 1 > ICON_BUFFER) {
iconsole_scroll = ICON_BUFFER;
_iconsole_scroll += (w->height / ICON_LINE_HEIGHT) - 1;
iconsole_scroll += (w->height / ICON_LINE_HEIGHT) - 1;
case WKC_SHIFT | WKC_UP:
if (_iconsole_scroll <= 0) {
if (iconsole_scroll <= 0) {
--_iconsole_scroll;
--iconsole_scroll;
case WKC_SHIFT | WKC_DOWN:
if (_iconsole_scroll >= ICON_BUFFER) {
if (iconsole_scroll >= ICON_BUFFER) {
++_iconsole_scroll;
++iconsole_scroll;
@@ -152,7 +150,7 @@ static void IConsoleWndProc(Window *w, W
case WKC_CTRL | WKC_RETURN:
_iconsole_mode = (_iconsole_mode == ICONSOLE_FULL) ? ICONSOLE_OPENED : ICONSOLE_FULL;
IConsoleResize();
IConsoleResize(w);
MarkWholeScreenDirty();
case (WKC_CTRL | 'V'):
@@ -182,7 +180,7 @@ static void IConsoleWndProc(Window *w, W
default:
if (IsValidChar(e->we.keypress.key, CS_ALPHANUMERAL)) {
InsertTextBufferChar(&_iconsole_cmdline, e->we.keypress.key);
IConsoleResetHistoryPos();
@@ -215,11 +213,8 @@ void IConsoleInit(void)
_icolour_warn = 13;
_icolour_dbg = 5;
_icolour_cmd = 2;
_iconsole_historypos = ICON_HISTORY_SIZE - 1;
_iconsole_inited = true;
#ifdef ENABLE_NETWORK /* Initialize network only variables */
_redirect_console_to_client = 0;
@@ -278,21 +273,20 @@ bool CloseConsoleLogIfActive(void)
void IConsoleFree(void)
_iconsole_inited = false;
IConsoleClear();
CloseConsoleLogIfActive();
void IConsoleResize(void)
void IConsoleResize(Window *w)
switch (_iconsole_mode) {
case ICONSOLE_OPENED:
_iconsole_win->height = _screen.height / 3;
_iconsole_win->width = _screen.width;
w->height = _screen.height / 3;
w->width = _screen.width;
case ICONSOLE_FULL:
_iconsole_win->height = _screen.height - ICON_BOTTOM_BORDERWIDTH;
w->height = _screen.height - ICON_BOTTOM_BORDERWIDTH;
default: return;
@@ -303,16 +297,15 @@ void IConsoleResize(void)
void IConsoleSwitch(void)
case ICONSOLE_CLOSED:
_iconsole_win = AllocateWindowDesc(&_iconsole_window_desc);
case ICONSOLE_CLOSED: {
Window *w = AllocateWindowDesc(&_iconsole_window_desc);
_iconsole_mode = ICONSOLE_OPENED;
SETBIT(_no_scroll, SCROLL_CON); // override cursor arrows; the gamefield will not scroll
} break;
case ICONSOLE_OPENED: case ICONSOLE_FULL:
DeleteWindowById(WC_CONSOLE, 0);
CLRBIT(_no_scroll, SCROLL_CON);
@@ -390,8 +383,6 @@ void IConsolePrint(uint16 color_code, co
return;
if (!_iconsole_inited) return;
/* move up all the strings in the buffer one place and do the same for colour
* to accomodate for the new command/message */
free(_iconsole_buffer[0]);
@@ -406,7 +397,7 @@ void IConsolePrint(uint16 color_code, co
IConsoleWriteToLogFile(string);
if (_iconsole_win != NULL) SetWindowDirty(_iconsole_win);
/**
@@ -118,7 +118,7 @@ VARDEF IConsoleModes _iconsole_mode;
void IConsoleInit(void);
void IConsoleFree(void);
void IConsoleClearBuffer(void);
void IConsoleResize(void);
void IConsoleResize(Window *w);
void IConsoleSwitch(void);
void IConsoleClose(void);
void IConsoleOpen(void);
@@ -1917,7 +1917,7 @@ void RelocateAllWindows(int neww, int ne
case WC_CONSOLE:
continue;
Status change: