All pastes #2120639 Raw Edit

Miscellany

public text v1 · immutable
#2120639 ·published 2012-02-22 05:38 UTC
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;
	}