rendered paste body
#pragma message ("// FS: fix CheckForCommand for con_chat")
qboolean CheckForCommand (void) // FS: From QuakeWorld
{
char command[128];
char *cmd, *s;
int i;
s = key_lines[edit_line]+1;
for (i=0 ; i<127 ; i++)
{
if (s[i] <= ' ')
break;
else
command[i] = s[i];
}
command[i] = 0;
cmd = Cmd_CompleteCommand (command);
Com_Printf("cmd: %s\n", cmd); // FS
Com_Printf("Command: %s\n", command); // FS
if (!cmd || strcmp (cmd, command))
cmd = Cvar_CompleteVariable (command);
if (!cmd || strcmp (cmd, command) )
{
Com_Printf("No\n"); // FS
return false; // just a chat message
}
Com_Printf("Yes\n"); // FS
return true;
}
void CompleteCommand (void)
{
char *cmd, *s;
s = key_lines[edit_line]+1;
if (*s == '\\' || *s == '/')
s++;
cmd = Cmd_CompleteCommand (s);
if (!cmd)
cmd = Cvar_CompleteVariable (s);
if (cmd)
{
key_lines[edit_line][1] = '/';
strcpy (key_lines[edit_line]+2, cmd);
key_linepos = strlen(cmd)+2;
key_lines[edit_line][key_linepos] = ' ';
key_linepos++;
key_lines[edit_line][key_linepos] = 0;
return;
}
}
#ifdef JPN
//#ifdef CONSOLE
// Japanese console
void ImeKey_Console (int leadbyte, int trailbyte)
{
if (leadbyte && key_linepos < MAXCMDLINE-2) // Kanji
{
key_lines[edit_line][key_linepos] = leadbyte;
key_linepos++;
key_lines[edit_line][key_linepos] = trailbyte;
key_linepos++;
key_lines[edit_line][key_linepos] = 0;
}
else if (key_linepos < MAXCMDLINE-1) // Hankaku
{
key_lines[edit_line][key_linepos] = trailbyte;
key_linepos++;
key_lines[edit_line][key_linepos] = 0;
}
}
//#endif
#endif // JPN
/*
====================
Key_Console
Interactive line editing and console scrollback
====================
*/
void Key_Console (int key)
{
switch ( key )
{
case K_KP_SLASH:
key = '/';
break;
case K_KP_MINUS:
key = '-';
break;
case K_KP_PLUS:
key = '+';
break;
case K_KP_DEL:
key = '.';
break;
}
if ( ( toupper( key ) == 'V' && keydown[K_CTRL] ) ||
( ( ( key == K_INS ) || ( key == K_KP_INS ) ) && keydown[K_SHIFT] ) )
{
char *cbd;
if ( ( cbd = Sys_GetClipboardData() ) != 0 )
{
int i;
strtok( cbd, "\n\r\b" );
i = strlen( cbd );
if ( i + key_linepos >= MAXCMDLINE)
i= MAXCMDLINE - key_linepos;
if ( i > 0 )
{
cbd[i]=0;
strcat( key_lines[edit_line], cbd );
key_linepos += i;
}
X_Free( cbd ); // FS: was free(cbd) and fucking it up!
}
return;
}
if( key == 'c' )
{
if ( keydown[K_CTRL] )
{
Cbuf_AddText ("disconnect\n");
return;
}
}
if ( key == 'l' )
{
if ( keydown[K_CTRL] )
{
Cbuf_AddText ("clear\n");
return;
}
}
if( key == 'r' ) // FS: Wanted this
{
if ( keydown[K_CTRL] )
{
Cbuf_AddText ("reconnect\n");
return;
}
}
if ( key == K_ENTER || key == K_KP_ENTER )
{ // backslash text are commands, else chat
if (key_lines[edit_line][1] == '\\' || key_lines[edit_line][1] == '/')
Cbuf_AddText (key_lines[edit_line]+2); // skip the >
else //if(CheckForCommand())
{
if(Cmd_Exists(key_lines[edit_line]+1))
Com_Printf("Dun goofd!\n");
Cbuf_AddText (key_lines[edit_line]+1); // valid command
}
/* else if (con_chat->value) // FS: From QW
{ // convert to a chat message
if (cls.state >= ca_connected)
Cbuf_AddText ("say_all ");
Cbuf_AddText (key_lines[edit_line]+1); // skip the >
}
*/
Cbuf_AddText ("\n");
edit_line = (edit_line + 1) & 31;
history_line = edit_line;
key_lines[edit_line][0] = '>';
key_linepos = 1;
if (cls.state == ca_disconnected)
SCR_UpdateScreen (); // force an update, because the command
// may take some time
return;
}