]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - console.c
removed unused leaf parameter on CompleteLightPoint
[xonotic/darkplaces.git] / console.c
index 592e338e3ebc4ceb81583c497c57216007a7e297..e6127a24add11f59abc65bc35f388ef83a68d67b 100644 (file)
--- a/console.c
+++ b/console.c
@@ -39,7 +39,7 @@ int con_backscroll;
 int con_current;
 // offset in current line for next print
 int con_x;
-char *con_text = 0;
+char con_text[CON_TEXTSIZE];
 
 //seconds
 cvar_t con_notifytime = {CVAR_SAVE, "con_notifytime","3"};
@@ -60,8 +60,6 @@ extern int key_insert;
 
 qboolean con_initialized;
 
-mempool_t *console_mempool;
-
 
 /*
 ==============================================================================
@@ -72,7 +70,6 @@ LOGGING
 */
 
 cvar_t log_file = {0, "log_file",""};
-cvar_t log_sync = {0, "log_sync","0"};
 char crt_log_file [MAX_OSPATH] = "";
 qfile_t* logfile = NULL;
 
@@ -100,9 +97,9 @@ const char* Log_Timestamp (const char *desc)
        strftime (timestring, sizeof (timestring), "%a %b %d %H:%M:%S %Y", crt_tm);
 
        if (desc != NULL)
-               snprintf (timestamp, sizeof (timestamp), "====== %s (%s) ======\n", desc, timestring);
+               dpsnprintf (timestamp, sizeof (timestamp), "====== %s (%s) ======\n", desc, timestring);
        else
-               snprintf (timestamp, sizeof (timestamp), "====== %s ======\n", timestring);
+               dpsnprintf (timestamp, sizeof (timestamp), "====== %s ======\n", timestring);
 
        return timestamp;
 }
@@ -121,16 +118,11 @@ void Log_Init (void)
        logq_ind = 0;
 
        Cvar_RegisterVariable (&log_file);
-       Cvar_RegisterVariable (&log_sync);
 
        // support for the classic Quake option
-// COMMANDLINEOPTION: Console: -condebug logs console messages to qconsole.log with sync on (so it keeps every message up to a crash), see also log_file and log_sync
+// COMMANDLINEOPTION: Console: -condebug logs console messages to qconsole.log, see also log_file
        if (COM_CheckParm ("-condebug") != 0)
-       {
                Cvar_SetQuick (&log_file, "qconsole.log");
-               Cvar_SetValueQuick (&log_sync, 1);
-               unlink (va("%s/qconsole.log", fs_gamedir));
-       }
 }
 
 
@@ -144,7 +136,7 @@ void Log_Open (void)
        if (logfile != NULL || log_file.string[0] == '\0')
                return;
 
-       logfile = FS_Open (log_file.string, "at", false);
+       logfile = FS_Open (log_file.string, "ab", false, false);
        if (logfile != NULL)
        {
                strlcpy (crt_log_file, log_file.string, sizeof (crt_log_file));
@@ -202,10 +194,12 @@ Log_ConPrint
 void Log_ConPrint (const char *msg)
 {
        static qboolean inprogress = false;
+
        // don't allow feedback loops with memory error reports
        if (inprogress)
                return;
        inprogress = true;
+
        // Until the host is completely initialized, we maintain a log queue
        // to store the messages, since the log can't be started before
        if (logqueue != NULL)
@@ -242,31 +236,11 @@ void Log_ConPrint (const char *msg)
 
        // If a log file is available
        if (logfile != NULL)
-       {
                FS_Print (logfile, msg);
-               if (log_sync.integer)
-                       FS_Flush (logfile);
-       }
        inprogress = false;
 }
 
 
-/*
-================
-Log_Print
-================
-*/
-void Log_Print (const char *logfilename, const char *msg)
-{
-       qfile_t *file;
-       file = FS_Open(logfilename, "at", true);
-       if (file)
-       {
-               FS_Print(file, msg);
-               FS_Close(file);
-       }
-}
-
 /*
 ================
 Log_Printf
@@ -276,7 +250,7 @@ void Log_Printf (const char *logfilename, const char *fmt, ...)
 {
        qfile_t *file;
 
-       file = FS_Open (logfilename, "at", true);
+       file = FS_Open (logfilename, "ab", true, false);
        if (file != NULL)
        {
                va_list argptr;
@@ -427,14 +401,10 @@ Con_Init
 */
 void Con_Init (void)
 {
-       console_mempool = Mem_AllocPool("console", 0, NULL);
-       con_text = Mem_Alloc(console_mempool, CON_TEXTSIZE);
        memset (con_text, ' ', CON_TEXTSIZE);
        con_linewidth = -1;
        Con_CheckResize ();
 
-       Con_Print("Console initialized.\n");
-
        // register our cvars
        Cvar_RegisterVariable (&con_notifytime);
        Cvar_RegisterVariable (&con_notify);
@@ -444,7 +414,9 @@ void Con_Init (void)
        Cmd_AddCommand ("messagemode", Con_MessageMode_f);
        Cmd_AddCommand ("messagemode2", Con_MessageMode2_f);
        Cmd_AddCommand ("clear", Con_Clear_f);
+
        con_initialized = true;
+       Con_Print("Console initialized.\n");
 }
 
 
@@ -480,8 +452,6 @@ void Con_PrintToHistory(const char *txt)
        if (txt[0] == 1)
        {
                mask = 128;             // go to colored text
-               S_LocalSound ("sound/misc/talk.wav");
-       // play talk wav
                txt++;
        }
        else if (txt[0] == 2)
@@ -549,6 +519,11 @@ void Con_PrintToHistory(const char *txt)
                }
 
        }
+
+       if( txt[0] == 1 ) {
+               // play talk wav
+               S_LocalSound ("sound/misc/talk.wav");
+       }
 }
 
 /* The translation table between the graphical font and plain ASCII  --KB */
@@ -661,7 +636,7 @@ void Con_Printf(const char *fmt, ...)
        char msg[MAXPRINTMSG];
 
        va_start(argptr,fmt);
-       vsprintf(msg,fmt,argptr);
+       dpvsnprintf(msg,sizeof(msg),fmt,argptr);
        va_end(argptr);
 
        Con_Print(msg);
@@ -697,7 +672,7 @@ void Con_DPrintf(const char *fmt, ...)
                return;                 // don't confuse non-developers with techie stuff...
 
        va_start(argptr,fmt);
-       vsprintf(msg,fmt,argptr);
+       dpvsnprintf(msg,sizeof(msg),fmt,argptr);
        va_end(argptr);
 
        Con_Print(msg);
@@ -705,46 +680,81 @@ void Con_DPrintf(const char *fmt, ...)
 
 
 /*
-================
-Con_SafePrint
+==============================================================================
 
-Okay to call even when the screen can't be updated
-==================
+DRAWING
+
+==============================================================================
 */
-void Con_SafePrint(const char *msg)
+
+static vec4_t _con_colors[] =
 {
-       Con_Print(msg);
-}
+       {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}
+};
 
-/*
-==================
-Con_SafePrintf
+#define _con_colors_count      (sizeof(_con_colors) / sizeof(vec3_t))
+#define _con_color_tag         '^'
 
-Okay to call even when the screen can't be updated
-==================
-*/
-void Con_SafePrintf(const char *fmt, ...)
+// 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 )
 {
-       va_list argptr;
-       char msg[MAXPRINTMSG];
+       vec_t *color;
+       const char *first, *last;
+       int len;
 
-       va_start(argptr,fmt);
-       vsprintf(msg,fmt,argptr);
-       va_end(argptr);
+       color = _con_colors[0];
+       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;
+                               }
+                       }
 
-       Con_Print(msg);
+                       color = _con_colors[index];
+                       // we dont want to display the color tag and the color index
+                       first = last;
+               }
+       }
 }
 
-
-/*
-==============================================================================
-
-DRAWING
-
-==============================================================================
-*/
-
-
 /*
 ================
 Con_DrawInput
@@ -787,7 +797,7 @@ void Con_DrawInput (void)
                text += 1 + key_linepos - con_linewidth;
 
        // draw it
-       DrawQ_String(0, con_vislines - 16, text, con_linewidth, 8, 8, 1, 1, 1, 1, 0);
+       _Con_DrawString(0, con_vislines - 16, text, con_linewidth, 8, 8, 0);
 
        // remove cursor
 //     key_lines[edit_line][key_linepos] = 0;
@@ -830,7 +840,15 @@ void Con_DrawNotify (void)
                        continue;
                text = con_text + (i % con_totallines)*con_linewidth;
 
-               DrawQ_String(0, v, text, con_linewidth, 8, 8, 1, 1, 1, 1, 0);
+               if (gamemode == GAME_NEXUIZ) {
+                       int linewidth;
+
+                       for (linewidth = con_linewidth; linewidth && text[linewidth-1] == ' '; linewidth--);
+                       x = (vid.conwidth - linewidth * 8) / 2;
+               } else
+                       x = 0;
+
+               _Con_DrawString(x, v, text, con_linewidth, 8, 8, 0);
 
                v += 8;
        }
@@ -847,13 +865,13 @@ void Con_DrawNotify (void)
                        sprintf(temptext, "say:%s%c", chat_buffer, (int) 10+((int)(realtime*con_cursorspeed)&1));
                while (strlen(temptext) >= (size_t) con_linewidth)
                {
-                       DrawQ_String (0, v, temptext, con_linewidth, 8, 8, 1, 1, 1, 1, 0);
+                       _Con_DrawString (0, v, temptext, con_linewidth, 8, 8, 0);
                        strcpy(temptext, &temptext[con_linewidth]);
                        v += 8;
                }
                if (strlen(temptext) > 0)
                {
-                       DrawQ_String (0, v, temptext, 0, 8, 8, 1, 1, 1, 1, 0);
+                       _Con_DrawString (0, v, temptext, 0, 8, 8, 0);
                        v += 8;
                }
        }
@@ -894,7 +912,7 @@ void Con_DrawConsole (int lines)
                j = max(i - con_backscroll, 0);
                text = con_text + (j % con_totallines)*con_linewidth;
 
-               DrawQ_String(0, y, text, con_linewidth, 8, 8, 1, 1, 1, 1, 0);
+               _Con_DrawString(0, y, text, con_linewidth, 8, 8, 0);
        }
 
 // draw the input prompt, user text, and cursor if desired