]> git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - console.c
bound by 0.1 again (this bounding had its reason) AND by sv_clmovement_waitforinput...
[xonotic/darkplaces.git] / console.c
index 126cd3a8a53d2fdd16916708b6ed5dec864e4c20..feb70bacfbdc1474ef315c0b0baa01fc966711b9 100644 (file)
--- a/console.c
+++ b/console.c
@@ -106,7 +106,8 @@ int con_vislines;
 qboolean con_initialized;
 
 // used for server replies to rcon command
-qboolean rcon_redirect = false;
+lhnetsocket_t *rcon_redirect_sock = NULL;
+lhnetaddress_t *rcon_redirect_dest = NULL;
 int rcon_redirect_bufferpos = 0;
 char rcon_redirect_buffer[1400];
 
@@ -192,13 +193,22 @@ const char* Log_Timestamp (const char *desc)
 {
        static char timestamp [128];
        time_t crt_time;
-       const struct tm *crt_tm;
+#if _MSC_VER >= 1400
+       struct tm crt_tm;
+#else
+       struct tm *crt_tm;
+#endif
        char timestring [64];
 
        // Build the time stamp (ex: "Wed Jun 30 21:49:08 1993");
        time (&crt_time);
+#if _MSC_VER >= 1400
+       localtime_s (&crt_tm, &crt_time);
+       strftime (timestring, sizeof (timestring), "%a %b %d %H:%M:%S %Y", &crt_tm);
+#else
        crt_tm = localtime (&crt_time);
        strftime (timestring, sizeof (timestring), "%a %b %d %H:%M:%S %Y", crt_tm);
+#endif
 
        if (desc != NULL)
                dpsnprintf (timestamp, sizeof (timestamp), "====== %s (%s) ======\n", desc, timestring);
@@ -219,7 +229,7 @@ void Log_Open (void)
        if (logfile != NULL || log_file.string[0] == '\0')
                return;
 
-       logfile = FS_Open (log_file.string, "ab", false, false);
+       logfile = FS_OpenRealFile(log_file.string, "a", false);
        if (logfile != NULL)
        {
                strlcpy (crt_log_file, log_file.string, sizeof (crt_log_file));
@@ -353,7 +363,7 @@ void Log_Printf (const char *logfilename, const char *fmt, ...)
 {
        qfile_t *file;
 
-       file = FS_Open (logfilename, "ab", true, false);
+       file = FS_OpenRealFile(logfilename, "a", true);
        if (file != NULL)
        {
                va_list argptr;
@@ -491,7 +501,7 @@ void Con_ConDump_f (void)
                Con_Printf("usage: condump <filename>\n");
                return;
        }
-       file = FS_Open(Cmd_Argv(1), "wb", false, false);
+       file = FS_OpenRealFile(Cmd_Argv(1), "w", false);
        if (!file)
        {
                Con_Printf("condump: unable to write file \"%s\"\n", Cmd_Argv(1));
@@ -782,6 +792,35 @@ static char qfont_table[256] = {
        'x',  'y',  'z',  '{',  '|',  '}',  '~',  '<'
 };
 
+void Con_Rcon_Redirect_Init(lhnetsocket_t *sock, lhnetaddress_t *dest)
+{
+       rcon_redirect_sock = sock;
+       rcon_redirect_dest = dest;
+       memcpy(rcon_redirect_buffer, "\377\377\377\377n", 5); // QW rcon print
+       rcon_redirect_bufferpos = 5;
+}
+
+void Con_Rcon_Redirect_Flush()
+{
+       rcon_redirect_buffer[rcon_redirect_bufferpos] = 0;
+       NetConn_WriteString(rcon_redirect_sock, rcon_redirect_buffer, rcon_redirect_dest);
+       memcpy(rcon_redirect_buffer, "\377\377\377\377n", 5); // QW rcon print
+       rcon_redirect_bufferpos = 5;
+}
+
+void Con_Rcon_Redirect_End()
+{
+       Con_Rcon_Redirect_Flush();
+       rcon_redirect_dest = NULL;
+       rcon_redirect_sock = NULL;
+}
+
+void Con_Rcon_Redirect_Abort()
+{
+       rcon_redirect_dest = NULL;
+       rcon_redirect_sock = NULL;
+}
+
 /*
 ================
 Con_Rcon_AddChar
@@ -798,8 +837,12 @@ void Con_Rcon_AddChar(char c)
        // 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)
+       if (rcon_redirect_dest)
+       {
                rcon_redirect_buffer[rcon_redirect_bufferpos++] = c;
+               if(rcon_redirect_bufferpos >= (int)sizeof(rcon_redirect_buffer) - 1)
+                       Con_Rcon_Redirect_Flush();
+       }
        else if(*log_dest_udp.string) // don't duplicate rcon command responses here, these are sent another way
        {
                if(log_dest_buffer_pos == 0)
@@ -1186,7 +1229,7 @@ float Con_WordWidthFunc(void *passthrough, const char *w, size_t *length, float
        if(w == NULL)
        {
                ti->colorindex = -1;
-               return ti->fontsize * ti->font->width_of[0];
+               return ti->fontsize * ti->font->maxwidth;
        }
        if(maxWidth >= 0)
                return DrawQ_TextWidth_Font_UntilWidth(w, length, false, ti->font, maxWidth / ti->fontsize) * ti->fontsize;
@@ -1386,9 +1429,9 @@ void Con_DrawNotify (void)
 
                // LordHavoc: speedup, and other improvements
                if (chat_team)
-                       sprintf(temptext, "say_team:%s%c", chat_buffer, (int) 10+((int)(realtime*con_cursorspeed)&1));
+                       dpsnprintf(temptext, sizeof(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));
+                       dpsnprintf(temptext, sizeof(temptext), "say:%s%c", chat_buffer, (int) 10+((int)(realtime*con_cursorspeed)&1));
 
                // FIXME word wrap
                inputsize = (numChatlines ? con_chatsize : con_notifysize).value;
@@ -1561,13 +1604,13 @@ its format (q1/q2/q3/hl) and even its message
 qboolean GetMapList (const char *s, char *completedname, int completednamebufferlength)
 {
        fssearch_t      *t;
-       char            message[64];
+       char            message[1024];
        int                     i, k, max, p, o, min;
        unsigned char *len;
        qfile_t         *f;
        unsigned char buf[1024];
 
-       sprintf(message, "maps/%s*.bsp", s);
+       dpsnprintf(message, sizeof(message), "maps/%s*.bsp", s);
        t = FS_Search(message, 1, true);
        if(!t)
                return false;
@@ -1596,7 +1639,7 @@ qboolean GetMapList (const char *s, char *completedname, int completednamebuffer
                char entfilename[MAX_QPATH];
                strlcpy(message, "^1**ERROR**^7", sizeof(message));
                p = 0;
-               f = FS_Open(t->filenames[i], "rb", true, false);
+               f = FS_OpenVirtualFile(t->filenames[i], true);
                if(f)
                {
                        memset(buf, 0, 1024);