X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=console.c;h=03671837fbdabba91f1e363d7bcfdd4e6ade0928;hb=14bec1a4c2a0623c08d1e746a023971e311fda36;hp=3d613a813ba8fb86be5142aa41da92669924791c;hpb=62bc56e9c2d45afe69ba3f1ebb87f40d5753eeab;p=xonotic%2Fdarkplaces.git diff --git a/console.c b/console.c index 3d613a81..03671837 100644 --- a/console.c +++ b/console.c @@ -391,6 +391,47 @@ static void Con_Maps_f (void) GetMapList("", NULL, 0); } +void Con_ConDump_f (void) +{ + int i, l; + qboolean allblankssofar; + const char *text; + qfile_t *file; + char temp[MAX_INPUTLINE+2]; + if (Cmd_Argc() != 2) + { + Con_Printf("usage: condump \n"); + return; + } + file = FS_Open(Cmd_Argv(1), "wb", false, false); + if (!file) + { + Con_Printf("condump: unable to write file \"%s\"\n", Cmd_Argv(1)); + return; + } + // iterate over the entire console history buffer line by line + allblankssofar = true; + for (i = 0;i < con_totallines;i++) + { + text = con_text + ((con_current + 1 + i) % con_totallines)*con_linewidth; + // count the used characters on this line + for (l = min(con_linewidth, (int)sizeof(temp));l > 0 && text[l-1] == ' ';l--); + // if not a blank line, begin output + if (l) + allblankssofar = false; + // output the current line to the file + if (!allblankssofar) + { + if (l) + memcpy(temp, text, l); + temp[l] = '\n'; + temp[l+1] = 0; + FS_Print(file, temp); + } + } + FS_Close(file); +} + /* ================ Con_Init @@ -428,6 +469,7 @@ void Con_Init (void) Cmd_AddCommand ("messagemode2", Con_MessageMode2_f, "input a chat message to say to only your team"); Cmd_AddCommand ("clear", Con_Clear_f, "clear console history"); Cmd_AddCommand ("maps", Con_Maps_f, "list information about available maps"); // By [515] + Cmd_AddCommand ("condump", Con_ConDump_f, "output console history to a file (see also log_file)"); con_initialized = true; Con_Print("Console initialized.\n"); @@ -639,12 +681,12 @@ void Con_Print(const char *msg) { switch(*in) { - case '^': + case STRING_COLOR_TAG: switch(in[1]) { - case '^': + case STRING_COLOR_TAG: ++in; - *out++ = '^'; + *out++ = STRING_COLOR_TAG; break; case '0': case '7': @@ -698,7 +740,7 @@ void Con_Print(const char *msg) *out++ = 0x1B; *out++ = '['; *out++ = '0'; *out++ = ';'; *out++ = '1'; *out++ = 'm'; break; default: - *out++ = '^'; + *out++ = STRING_COLOR_TAG; break; } break; @@ -737,12 +779,12 @@ void Con_Print(const char *msg) { switch(*in) { - case '^': + case STRING_COLOR_TAG: switch(in[1]) { - case '^': + case STRING_COLOR_TAG: ++in; - *out++ = '^'; + *out++ = STRING_COLOR_TAG; break; case '0': case '1': @@ -757,7 +799,7 @@ void Con_Print(const char *msg) ++in; break; default: - *out++ = '^'; + *out++ = STRING_COLOR_TAG; break; } break; @@ -938,7 +980,7 @@ void Con_DrawNotify (void) // 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')) + if (text[j] == STRING_COLOR_TAG && (text[j+1] >= '0' && text[j+1] <= '9')) { j++; continue;