X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=console.c;h=e68ca4fa2fc6b1fc29fc968fcbc70e08da81aae5;hb=18f60226fe7f34d6c3d37c4ca9fcdbbb7c525fff;hp=7c1977155096752b6d2bb05b0412f6ca9cd8ba7a;hpb=abbb212844ad049e90d9e52c59ee228995e7320a;p=xonotic%2Fdarkplaces.git diff --git a/console.c b/console.c index 7c197715..e68ca4fa 100644 --- a/console.c +++ b/console.c @@ -53,6 +53,11 @@ int con_vislines; qboolean con_initialized; +// used for server replies to rcon command +qboolean rcon_redirect = false; +int rcon_redirect_bufferpos = 0; +char rcon_redirect_buffer[1400]; + /* ============================================================================== @@ -148,10 +153,11 @@ void Log_Start (void) // Dump the contents of the log queue into the log file and free it if (logqueue != NULL) { - if (logfile != NULL && logq_ind != 0) - FS_Write (logfile, logqueue, logq_ind); - Mem_Free (logqueue); + unsigned char *temp = logqueue; logqueue = NULL; + if (logfile != NULL && logq_ind != 0) + FS_Write (logfile, temp, logq_ind); + Mem_Free (temp); logq_ind = 0; logq_size = 0; } @@ -387,7 +393,7 @@ void Con_Init (void) con_linewidth = 80; con_totallines = CON_TEXTSIZE / con_linewidth; - // Allocate a log queue + // Allocate a log queue, this will be freed after configs are parsed logq_size = MAX_INPUTLINE; logqueue = (unsigned char *)Mem_Alloc (tempmempool, logq_size); logq_ind = 0; @@ -561,9 +567,13 @@ void Con_Print(const char *msg) for (;*msg;msg++) { + // if this print is in response to an rcon command, add the character + // to the rcon redirect buffer + if (rcon_redirect && rcon_redirect_bufferpos < (int)sizeof(rcon_redirect_buffer) - 1) + rcon_redirect_buffer[rcon_redirect_bufferpos++] = *msg; + // if this is the beginning of a new line, print timestamp if (index == 0) { - // if this is the beginning of a new line, print timestamp const 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! @@ -572,23 +582,13 @@ void Con_Print(const char *msg) 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) + if (*msg == 1 || *msg == 2) { + // play talk wav if (*msg == 1) - { - // play talk wav S_LocalSound ("sound/misc/talk.wav"); - } - //if (gamemode == GAME_NEXUIZ) - //{ - line[index++] = STRING_COLOR_TAG; - line[index++] = '3'; - //} - //else - //{ - // // go to colored text - // mask = 128; - //} + line[index++] = STRING_COLOR_TAG; + line[index++] = '3'; msg++; } // store timestamp @@ -747,7 +747,7 @@ void Con_DrawNotify (void) { float x, v; char *text; - int i; + int i, stop; float time; char temptext[MAX_INPUTLINE]; int colorindex = -1; //-1 for default @@ -760,7 +760,9 @@ void Con_DrawNotify (void) v = 8; else v = 0; - for (i= con_current-con_notify.integer+1 ; i<=con_current ; i++) + // make a copy of con_current here so that we can't get in a runaway loop printing new messages while drawing the notify text + stop = con_current; + for (i= stop-con_notify.integer+1 ; i<=stop ; i++) { if (i < 0) @@ -774,10 +776,25 @@ void Con_DrawNotify (void) text = con_text + (i % con_totallines)*con_linewidth; if (gamemode == GAME_NEXUIZ) { - int linewidth; + int chars = 0; + int finalchars = 0; + int j; - for (linewidth = con_linewidth; linewidth && text[linewidth-1] == ' '; linewidth--); - x = (vid_conwidth.integer - linewidth * con_textsize.value) * 0.5; + // count up to the last non-whitespace, and ignore color codes + for (j = 0;j < con_linewidth && text[j];j++) + { + if (text[j] == '^' && (text[j+1] >= '0' && text[j+1] <= '9')) + { + j++; + continue; + } + chars++; + if (text[j] == ' ') + continue; + finalchars = chars; + } + // center the line using the calculated width + x = (vid_conwidth.integer - finalchars * con_textsize.value) * 0.5; } else x = 0; @@ -822,7 +839,7 @@ The typing input line at the bottom should only be drawn if typing is allowed */ void Con_DrawConsole (int lines) { - int i, rows, j; + int i, rows, j, stop; float y; char *text; int colorindex = -1; @@ -831,10 +848,7 @@ void Con_DrawConsole (int lines) return; // draw the background - if (scr_conbrightness.value >= 0.01f) - DrawQ_Pic(0, lines - vid_conheight.integer, "gfx/conback", vid_conwidth.integer, vid_conheight.integer, scr_conbrightness.value, scr_conbrightness.value, scr_conbrightness.value, scr_conalpha.value, 0); - else - DrawQ_Fill(0, lines - vid_conheight.integer, vid_conwidth.integer, vid_conheight.integer, 0, 0, 0, scr_conalpha.value, 0); + DrawQ_Pic(0, lines - vid_conheight.integer, scr_conbrightness.value >= 0.01f ? Draw_CachePic("gfx/conback", true) : NULL, vid_conwidth.integer, vid_conheight.integer, scr_conbrightness.value, scr_conbrightness.value, scr_conbrightness.value, scr_conalpha.value, 0); DrawQ_String(vid_conwidth.integer - strlen(engineversion) * con_textsize.value - con_textsize.value, lines - con_textsize.value, engineversion, 0, con_textsize.value, con_textsize.value, 1, 0, 0, 1, 0); // draw the text @@ -843,7 +857,9 @@ void Con_DrawConsole (int lines) rows = (int)ceil((lines/con_textsize.value)-2); // rows of text to draw y = lines - (rows+2)*con_textsize.value; // may start slightly negative - for (i = con_current - rows + 1;i <= con_current;i++, y += con_textsize.value) + // make a copy of con_current here so that we can't get in a runaway loop printing new messages while drawing the notify text + stop = con_current; + for (i = stop - rows + 1;i <= stop;i++, y += con_textsize.value) { j = max(i - con_backscroll, 0); text = con_text + (j % con_totallines)*con_linewidth; @@ -881,7 +897,7 @@ qboolean GetMapList (const char *s, char *completedname, int completednamebuffer return false; if (t->numfilenames > 1) Con_Printf("^1 %i maps found :\n", t->numfilenames); - len = Z_Malloc(t->numfilenames); + len = (unsigned char *)Z_Malloc(t->numfilenames); min = 666; for(max=i=0;inumfilenames;i++) { @@ -949,7 +965,7 @@ qboolean GetMapList (const char *s, char *completedname, int completednamebuffer if (!entities && lumplen >= 10) { FS_Seek(f, lumpofs, SEEK_SET); - entities = Z_Malloc(lumplen + 1); + entities = (char *)Z_Malloc(lumplen + 1); FS_Read(f, entities, lumplen); } if (entities) @@ -974,7 +990,7 @@ qboolean GetMapList (const char *s, char *completedname, int completednamebuffer keyname[l] = 0; if (!COM_ParseToken(&data, false)) break; - if (developer.integer >= 2) + if (developer.integer >= 100) Con_Printf("key: %s %s\n", keyname, com_token); if (!strcmp(keyname, "message")) {