X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=console.c;h=b99f7c4b02b0f8a6dde2dba2959d7d873ec668fe;hb=ac0f5054e02d4a5b855c5125f989b39770002a7a;hp=a7e3b3af1c06d742ef4fde8fb0234cc2a9e9dcc6;hpb=7d9b2407c16f91d50b4b05e6dbbabc8d60d996b5;p=xonotic%2Fdarkplaces.git diff --git a/console.c b/console.c index a7e3b3af..b99f7c4b 100644 --- a/console.c +++ b/console.c @@ -51,13 +51,6 @@ float con_times[MAX_NOTIFYLINES]; int con_vislines; -#define MAXCMDLINE 256 -extern char key_lines[32][MAXCMDLINE]; -extern int edit_line; -extern int key_linepos; -extern int key_insert; - - qboolean con_initialized; @@ -189,7 +182,7 @@ void Log_ConPrint (const char *msg) // If we need to enlarge the log queue if (len > remain) { - unsigned int factor = ((logq_ind + len) / logq_size) + 1; + size_t factor = ((logq_ind + len) / logq_size) + 1; qbyte* newqueue; logq_size *= factor; @@ -550,6 +543,11 @@ void Con_Print(const char *msg) { // if this is the beginning of a new line, print timestamp char *timestamp = timestamps.integer ? Sys_TimeString(timeformat.string) : ""; + // reset the color + // FIXME: 1. perhaps we should use a terminal system 2. use a constant instead of 7! + line[index++] = STRING_COLOR_TAG; + // assert( STRING_COLOR_DEFAULT < 10 ) + line[index++] = STRING_COLOR_DEFAULT + '0'; // special color codes for chat messages must always come first // for Con_PrintToHistory to work properly if (*msg <= 2) @@ -573,7 +571,7 @@ void Con_Print(const char *msg) } // store timestamp for (;*timestamp;index++, timestamp++) - if (index < sizeof(line) - 2) + if (index < (int)sizeof(line) - 2) line[index] = *timestamp; } // append the character @@ -670,86 +668,6 @@ DRAWING ============================================================================== */ -static vec4_t _con_colors[] = -{ - // Quake3 colors - // LordHavoc: why on earth is cyan before magenta in Quake3? - // LordHavoc: note: Doom3 uses white for [0] and [7] - {0.0, 0.0, 0.0, 1.0}, // black - {1.0, 0.0, 0.0, 1.0}, // red - {0.0, 1.0, 0.0, 1.0}, // green - {1.0, 1.0, 0.0, 1.0}, // yellow - {0.0, 0.0, 1.0, 1.0}, // blue - {0.0, 1.0, 1.0, 1.0}, // cyan - {1.0, 0.0, 1.0, 1.0}, // magenta - {1.0, 1.0, 1.0, 1.0} // white - // Black's color table - //{1.0, 1.0, 1.0, 1.0}, - //{1.0, 0.0, 0.0, 1.0}, - //{0.0, 1.0, 0.0, 1.0}, - //{0.0, 0.0, 1.0, 1.0}, - //{1.0, 1.0, 0.0, 1.0}, - //{0.0, 1.0, 1.0, 1.0}, - //{1.0, 0.0, 1.0, 1.0}, - //{0.1, 0.1, 0.1, 1.0} -}; - -#define _con_colors_count (sizeof(_con_colors) / sizeof(vec3_t)) -#define _con_color_tag '^' - -// color is read and changed in the end -static void _Con_DrawString( float x, float y, const char *text, int maxlen, float scalex, float scaley, int flags ) -{ - vec_t *color; - const char *first, *last; - int len; - - color = _con_colors[7]; - if( maxlen < 1) - len = strlen( text ); - else - len = min( maxlen, (signed) strlen( text )); - - first = last = text; - while( 1 ) { - // iterate until we get the next color tag or reach the end of the text part to draw - for( ; len && *last != _con_color_tag ; len--, last++ ) - ; - // only draw the partial string if we have read anything - if( last != first ) { - // draw the string - DrawQ_String( x, y, first, last - first, scalex, scaley, color[0], color[1], color[2], color[3], flags ); - // update x to be at the new start position - x += (last - first) * scalex; - // if we have reached the end, we have finished - if( !len ) - break; - } - first = last; - // jump over the tag - last++; - len--; - if( len && '0' <= *last && *last <= '9' ) { - int index = 0; - - while( '0' <= *last && *last <= '9' && len ) { - index = index * 10 + *last - '0'; - if( index < _con_colors_count ) { - last++; - len--; - } else { - index /= 10; - break; - } - } - - color = _con_colors[index]; - // we dont want to display the color tag and the color index - first = last; - } - } -} - /* ================ Con_DrawInput @@ -775,7 +693,7 @@ void Con_DrawInput (void) // use strlen of edit_line instead of key_linepos to allow editing // of early characters w/o erasing - y = strlen(text); + y = (int)strlen(text); // fill out remainder with spaces for (i = y; i < 256; i++) @@ -792,7 +710,7 @@ void Con_DrawInput (void) text += 1 + key_linepos - con_linewidth; // draw it - _Con_DrawString(0, con_vislines - 16, text, con_linewidth, 8, 8, 0); + DrawQ_ColoredString(0, con_vislines - 16, text, con_linewidth, 8, 8, 1.0, 1.0, 1.0, 1.0, 0, NULL ); // remove cursor // key_lines[edit_line][key_linepos] = 0; @@ -814,6 +732,7 @@ void Con_DrawNotify (void) float time; extern char chat_buffer[]; char temptext[256]; + int colorindex = -1; //-1 for default if (con_notify.integer < 0) Cvar_SetValueQuick(&con_notify, 0); @@ -825,6 +744,7 @@ void Con_DrawNotify (void) v = 0; for (i= con_current-con_notify.integer+1 ; i<=con_current ; i++) { + if (i < 0) continue; time = con_times[i % con_notify.integer]; @@ -843,7 +763,7 @@ void Con_DrawNotify (void) } else x = 0; - _Con_DrawString(x, v, text, con_linewidth, 8, 8, 0); + DrawQ_ColoredString( x, v, text, con_linewidth, 8, 8, 1.0, 1.0, 1.0, 1.0, 0, &colorindex ); v += 8; } @@ -851,6 +771,8 @@ void Con_DrawNotify (void) if (key_dest == key_message) { + int colorindex = -1; + x = 0; // LordHavoc: speedup, and other improvements @@ -858,15 +780,15 @@ void Con_DrawNotify (void) sprintf(temptext, "say_team:%s%c", chat_buffer, (int) 10+((int)(realtime*con_cursorspeed)&1)); else sprintf(temptext, "say:%s%c", chat_buffer, (int) 10+((int)(realtime*con_cursorspeed)&1)); - while (strlen(temptext) >= (size_t) con_linewidth) + while ((int)strlen(temptext) >= con_linewidth) { - _Con_DrawString (0, v, temptext, con_linewidth, 8, 8, 0); + DrawQ_ColoredString( 0, v, temptext, con_linewidth, 8, 8, 1.0, 1.0, 1.0, 1.0, 0, &colorindex ); strcpy(temptext, &temptext[con_linewidth]); v += 8; } if (strlen(temptext) > 0) { - _Con_DrawString (0, v, temptext, 0, 8, 8, 0); + DrawQ_ColoredString( 0, v, temptext, 0, 8, 8, 1.0, 1.0, 1.0, 1.0, 0, &colorindex ); v += 8; } } @@ -885,6 +807,7 @@ void Con_DrawConsole (int lines) { int i, y, rows, j; char *text; + int colorindex = -1; if (lines <= 0) return; @@ -907,7 +830,7 @@ void Con_DrawConsole (int lines) j = max(i - con_backscroll, 0); text = con_text + (j % con_totallines)*con_linewidth; - _Con_DrawString(0, y, text, con_linewidth, 8, 8, 0); + DrawQ_ColoredString( 0, y, text, con_linewidth, 8, 8, 1.0, 1.0, 1.0, 1.0, 0, &colorindex ); } // draw the input prompt, user text, and cursor if desired @@ -928,7 +851,7 @@ void Con_DisplayList(const char **list) const char **walk = list; while (*walk) { - len = strlen(*walk); + len = (int)strlen(*walk); if (len > maxlen) maxlen = len; walk++; @@ -936,7 +859,7 @@ void Con_DisplayList(const char **list) maxlen += 1; while (*list) { - len = strlen(*list); + len = (int)strlen(*list); if (pos + maxlen >= width) { Con_Print("\n"); pos = 0; @@ -986,7 +909,7 @@ void Con_CompleteCommandLine (void) else list[0] = Cmd_CompleteAliasBuildList(s); cmd = *list[0]; - cmd_len = strlen (cmd); + cmd_len = (int)strlen (cmd); } else { if (c) cmd = *(list[0] = Cmd_CompleteBuildList(s)); @@ -995,7 +918,7 @@ void Con_CompleteCommandLine (void) if (a) cmd = *(list[2] = Cmd_CompleteAliasBuildList(s)); - cmd_len = strlen (s); + cmd_len = (int)strlen (s); do { for (i = 0; i < 3; i++) { char ch = cmd[cmd_len];