28 #include "table/strings.h" 
   32 static const uint ICON_HISTORY_SIZE       = 20;
 
   33 static const uint ICON_LINE_SPACING       =  2;
 
   34 static const uint ICON_RIGHT_BORDERWIDTH  = 10;
 
   35 static const uint ICON_BOTTOM_BORDERWIDTH = 12;
 
   81     while (index != 0 && item != NULL) {
 
   99     if (cur == NULL) 
return false;
 
  133 static char *_iconsole_history[ICON_HISTORY_SIZE];
 
  134 static int _iconsole_historypos;
 
  141 static void IConsoleClearCommand()
 
  144   _iconsole_cmdline.
chars = _iconsole_cmdline.
bytes = 1; 
 
  145   _iconsole_cmdline.
pixels = 0;
 
  151 static inline void IConsoleResetHistoryPos()
 
  153   _iconsole_historypos = -1;
 
  160 static const struct NWidgetPart _nested_console_window_widgets[] = {
 
  168   _nested_console_window_widgets, 
lengthof(_nested_console_window_widgets)
 
  200     IConsoleWindow::scroll = Clamp<int>(IConsoleWindow::scroll + amount, 0, max_scroll);
 
  206     const int right = this->
width - 5;
 
  216     int delta = this->
width - this->line_offset - _iconsole_cmdline.
pixels - ICON_RIGHT_BORDERWIDTH;
 
  227     if (_focused_window == 
this && _iconsole_cmdline.
caret) {
 
  262       case WKC_SHIFT | WKC_PAGEDOWN:
 
  263         this->
Scroll(-scroll_height);
 
  266       case WKC_SHIFT | WKC_PAGEUP:
 
  267         this->
Scroll(scroll_height);
 
  270       case WKC_SHIFT | WKC_DOWN:
 
  274       case WKC_SHIFT | WKC_UP:
 
  282       case WKC_RETURN: 
case WKC_NUM_ENTER: {
 
  288         IConsoleClearCommand();
 
  294       case WKC_CTRL | WKC_RETURN:
 
  300       case (WKC_CTRL | 
'L'):
 
  306           IConsoleWindow::scroll = 0;
 
  307           IConsoleResetHistoryPos();
 
  317   virtual void InsertTextString(
int wid, 
const char *str, 
bool marked, 
const char *caret, 
const char *insert_location, 
const char *replacement_end)
 
  319     if (_iconsole_cmdline.
InsertString(str, marked, caret, insert_location, replacement_end)) {
 
  320       IConsoleWindow::scroll = 0;
 
  321       IConsoleResetHistoryPos();
 
  328     return _iconsole_cmdline.
buf;
 
  333     return _iconsole_cmdline.
buf + _iconsole_cmdline.
caretpos;
 
  338     if (_iconsole_cmdline.
markend == 0) 
return NULL;
 
  341     return _iconsole_cmdline.
buf + _iconsole_cmdline.
markpos;
 
  346     int delta = 
min(this->
width - this->line_offset - _iconsole_cmdline.
pixels - ICON_RIGHT_BORDERWIDTH, 0);
 
  354     int delta = 
min(this->
width - this->line_offset - _iconsole_cmdline.
pixels - ICON_RIGHT_BORDERWIDTH, 0);
 
  365     int delta = 
min(this->
width - this->line_offset - _iconsole_cmdline.
pixels - ICON_RIGHT_BORDERWIDTH, 0);
 
  367     if (!
IsInsideMM(pt.y, this->height - this->line_height, this->height)) 
return NULL;
 
  383 int IConsoleWindow::scroll = 0;
 
  385 void IConsoleGUIInit()
 
  387   IConsoleResetHistoryPos();
 
  391   memset(_iconsole_history, 0, 
sizeof(_iconsole_history));
 
  397   IConsoleClearCommand();
 
  400 void IConsoleClearBuffer()
 
  405 void IConsoleGUIFree()
 
  407   IConsoleClearBuffer();
 
  413   switch (_iconsole_mode) {
 
  415       w->
height = _screen.height / 3;
 
  416       w->
width = _screen.width;
 
  419       w->
height = _screen.height - ICON_BOTTOM_BORDERWIDTH;
 
  420       w->
width = _screen.width;
 
  431   switch (_iconsole_mode) {
 
  465   if (_iconsole_history[0] == NULL || strcmp(_iconsole_history[0], cmd) != 0) {
 
  466     free(_iconsole_history[ICON_HISTORY_SIZE - 1]);
 
  467     memmove(&_iconsole_history[1], &_iconsole_history[0], 
sizeof(_iconsole_history[0]) * (ICON_HISTORY_SIZE - 1));
 
  468     _iconsole_history[0] = 
stredup(cmd);
 
  472   IConsoleResetHistoryPos();
 
  473   return _iconsole_history[0];
 
  482   if (_iconsole_history[0] == NULL) 
return; 
 
  483   _iconsole_historypos = 
Clamp(_iconsole_historypos + direction, -1, ICON_HISTORY_SIZE - 1);
 
  485   if (direction > 0 && _iconsole_history[_iconsole_historypos] == NULL) _iconsole_historypos--;
 
  487   if (_iconsole_historypos == -1) {
 
  490     _iconsole_cmdline.
Assign(_iconsole_history[_iconsole_historypos]);
 
  522   c &= ~TC_IS_PALETTE_COLOUR;
 
  523   for (uint i = COLOUR_BEGIN; i < COLOUR_END; i++) {