From d65849f64db708cb41e2c53d153769d1ab9bff79 Mon Sep 17 00:00:00 2001 From: Yamagi Burmeister Date: Mon, 18 Oct 2010 14:56:30 +0000 Subject: [PATCH] =?UTF-8?q?=C3=9Cberarbeite=20refresh.c?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/client/input/header/input.h | 2 - src/posix/header/unix.h | 1 - src/posix/qgl/input.c | 2 - src/posix/vid/refresh.c | 593 ++++++++++++++++---------------- 4 files changed, 303 insertions(+), 295 deletions(-) diff --git a/src/client/input/header/input.h b/src/client/input/header/input.h index ed419f27..45be15b8 100644 --- a/src/client/input/header/input.h +++ b/src/client/input/header/input.h @@ -38,7 +38,5 @@ void IN_Frame (void); /* add additional movement on top of the keyboard move cmd */ void IN_Move (usercmd_t *cmd); -void IN_Activate (qboolean active); - #endif diff --git a/src/posix/header/unix.h b/src/posix/header/unix.h index 8b53fd95..ef399cf5 100644 --- a/src/posix/header/unix.h +++ b/src/posix/header/unix.h @@ -32,7 +32,6 @@ extern void ( *KBD_Init_fp )( Key_Event_fp_t fp ); extern void ( *KBD_Close_fp )( void ); void RW_IN_PlatformInit (); -void RW_IN_Activate (); #define MOUSE_MAX 3000 #define MOUSE_MIN 40 diff --git a/src/posix/qgl/input.c b/src/posix/qgl/input.c index f49833cb..b65b6d59 100644 --- a/src/posix/qgl/input.c +++ b/src/posix/qgl/input.c @@ -105,8 +105,6 @@ RW_IN_Shutdown ( void ) { if ( mouse_avail ) { - RW_IN_Activate( false ); - mouse_avail = false; ri.Cmd_RemoveCommand( "+mlook" ); diff --git a/src/posix/vid/refresh.c b/src/posix/vid/refresh.c index b90d4b25..777f68d9 100644 --- a/src/posix/vid/refresh.c +++ b/src/posix/vid/refresh.c @@ -1,28 +1,39 @@ /* -Copyright (C) 1997-2001 Id Software, Inc. - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -*/ -// Main windowed and fullscreen graphics interface module. This module -// is used for both the software and OpenGL rendering versions of the -// Quake refresh engine. + * Copyright (C) 1997-2001 Id Software, Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + * See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + * 02111-1307, USA. + * + * ======================================================================= + * + * This is the "heart" of the id Tech 2 refresh engine. This file + * implements the main window in which Quake II is running. The window + * itself is created by the SDL backend, but here the refresh module is + * loaded, initialized and it's interaction with the operating system + * implemented. This code is also the interconnect between the input + * system (the mouse) and the keyboard system, both are here tied + * together with the refresher. The direct interaction between the + * refresher and those subsystems are the main cause for the very + * acurate and precise input controls of the id Tech 2. + * + * ======================================================================= + */ #include -#include // ELF dl loader +#include #include #include #include @@ -30,113 +41,103 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "../../client/header/client.h" #include "../header/unix.h" -// Structure containing functions exported from refresh DLL -refexport_t re; +/* Structure containing functions exported from refresh DLL */ +refexport_t re; -// Console variables that we need to access from this module -cvar_t *vid_gamma; -cvar_t *vid_ref; // Name of Refresh DLL loaded -cvar_t *vid_xpos; // X coordinate of window position -cvar_t *vid_ypos; // Y coordinate of window position -cvar_t *vid_fullscreen; +/* Console variables that we need to access from this module */ +cvar_t *vid_gamma; +cvar_t *vid_ref; /* Name of Refresh DLL loaded */ +cvar_t *vid_xpos; /* X coordinate of window position */ +cvar_t *vid_ypos; /* Y coordinate of window position */ +cvar_t *vid_fullscreen; -// Global variables used internally by this module -viddef_t viddef; // global video state; used by other modules -void *reflib_library; // Handle to refresh DLL -qboolean reflib_active = 0; +/* Global variables used internally by this module */ +viddef_t viddef; /* global video state; used by other modules */ +void *reflib_library; /* Handle to refresh DLL */ +qboolean reflib_active = 0; -#define VID_NUM_MODES ( sizeof( vid_modes ) / sizeof( vid_modes[0] ) ) +#define VID_NUM_MODES ( sizeof ( vid_modes ) / sizeof ( vid_modes [ 0 ] ) ) -/** KEYBOARD **************************************************************/ - -void Do_Key_Event(int key, qboolean down); - -void (*KBD_Update_fp)(void); -void (*KBD_Init_fp)(Key_Event_fp_t fp); -void (*KBD_Close_fp)(void); - -/** MOUSE *****************************************************************/ +/* KEYBOARD */ +void Do_Key_Event ( int key, qboolean down ); +void ( *KBD_Update_fp )( void ); +void ( *KBD_Init_fp )( Key_Event_fp_t fp ); +void ( *KBD_Close_fp )( void ); +/* MOUSE */ in_state_t in_state; -void (*RW_IN_Init_fp)(in_state_t *in_state_p); -void (*RW_IN_Shutdown_fp)(void); -void (*RW_IN_Activate_fp)(qboolean active); -void (*RW_IN_Commands_fp)(void); -void (*RW_IN_Move_fp)(usercmd_t *cmd); -void (*RW_IN_Frame_fp)(void); +void ( *RW_IN_Init_fp )( in_state_t *in_state_p ); +void ( *RW_IN_Shutdown_fp )( void ); +void ( *RW_IN_Activate_fp )( qboolean active ); +void ( *RW_IN_Commands_fp )( void ); +void ( *RW_IN_Move_fp )( usercmd_t *cmd ); +void ( *RW_IN_Frame_fp )( void ); -void IN_Init (void); +void IN_Init ( void ); -/** CLIPBOARD *************************************************************/ +/* CLIPBOARD */ +char *( *RW_Sys_GetClipboardData_fp )(void); -char *(*RW_Sys_GetClipboardData_fp)(void); +extern void VID_MenuShutdown ( void ); -extern void VID_MenuShutdown(void); -/* -========================================================================== +/* DLL GLUE */ -DLL GLUE +#define MAXPRINTMSG 4096 -========================================================================== -*/ - -#define MAXPRINTMSG 4096 -void VID_Printf (int print_level, char *fmt, ...) +void +VID_Printf ( int print_level, char *fmt, ... ) { - va_list argptr; - char msg[MAXPRINTMSG]; - - va_start (argptr,fmt); - vsnprintf (msg,MAXPRINTMSG,fmt,argptr); - va_end (argptr); + va_list argptr; + char msg [ MAXPRINTMSG ]; - if (print_level == PRINT_ALL) - Com_Printf ("%s", msg); + va_start( argptr, fmt ); + vsnprintf( msg, MAXPRINTMSG, fmt, argptr ); + va_end( argptr ); + + if ( print_level == PRINT_ALL ) + { + Com_Printf( "%s", msg ); + } else - Com_DPrintf ("%s", msg); + { + Com_DPrintf( "%s", msg ); + } } -void VID_Error (int err_level, char *fmt, ...) +void +VID_Error ( int err_level, char *fmt, ... ) { - va_list argptr; - char msg[MAXPRINTMSG]; - - va_start (argptr,fmt); - vsnprintf (msg,MAXPRINTMSG,fmt,argptr); - va_end (argptr); + va_list argptr; + char msg [ MAXPRINTMSG ]; - Com_Error (err_level,"%s", msg); + va_start( argptr, fmt ); + vsnprintf( msg, MAXPRINTMSG, fmt, argptr ); + va_end( argptr ); + + Com_Error( err_level, "%s", msg ); } -//========================================================================== - /* -============ -VID_Restart_f - -Console command to re-start the video mode and refresh DLL. We do this -simply by setting the modified flag for the vid_ref variable, which will -cause the entire video mode and refresh DLL to be reset on the next frame. -============ -*/ -void VID_Restart_f (void) + * Console command to re-start the video mode and refresh DLL. We do this + * simply by setting the modified flag for the vid_ref variable, which will + * cause the entire video mode and refresh DLL to be reset on the next frame. + */ +void +VID_Restart_f ( void ) { vid_ref->modified = true; } -/* -** VID_GetModeInfo -*/ typedef struct vidmode_s { const char *description; - int width, height; - int mode; + int width, height; + int mode; } vidmode_t; -vidmode_t vid_modes[] = -{ +/* This must be the same as in menu.c! */ +vidmode_t vid_modes[] = { { "Mode 0: 320x240", 320, 240, 0 }, { "Mode 1: 400x300", 400, 300, 1 }, { "Mode 2: 512x384", 512, 384, 2 }, @@ -150,43 +151,52 @@ vidmode_t vid_modes[] = { "Mode 10: 1024x768", 1024, 768, 10 }, { "Mode 11: 1152x768", 1152, 768, 11 }, { "Mode 12: 1152x864", 1152, 864, 12 }, - { "Mode 13: 1280x800", 1280, 800, 13 }, + { "Mode 13: 1280x800", 1280, 800, 13 }, { "Mode 14: 1280x854", 1280, 854, 14 }, { "Mode 15: 1280x1024", 1280, 1024, 15 }, { "Mode 16: 1600x1200", 1600, 1200, 16 }, - { "Mode 17: 1680x1050", 1680, 1050, 17 }, - { "Mode 18: 1920x1200", 1920, 1200, 18 }, + { "Mode 17: 1680x1050", 1680, 1050, 17 }, + { "Mode 18: 1920x1200", 1920, 1200, 18 }, { "Mode 19: 2048x1536", 2048, 1536, 19 }, }; -qboolean VID_GetModeInfo( int *width, int *height, int mode ) +qboolean +VID_GetModeInfo ( int *width, int *height, int mode ) { - if ( mode < 0 || mode >= VID_NUM_MODES ) - return false; + if ( ( mode < 0 ) || ( mode >= VID_NUM_MODES ) ) + { + return ( false ); + } - *width = vid_modes[mode].width; - *height = vid_modes[mode].height; + *width = vid_modes [ mode ].width; + *height = vid_modes [ mode ].height; - return true; + return ( true ); } -/* -** VID_NewWindow -*/ -void VID_NewWindow ( int width, int height) +void +VID_NewWindow ( int width, int height ) { viddef.width = width; viddef.height = height; } -void VID_FreeReflib (void) +void +VID_FreeReflib ( void ) { - if (reflib_library) { - if (KBD_Close_fp) + if ( reflib_library ) + { + if ( KBD_Close_fp ) + { KBD_Close_fp(); - if (RW_IN_Shutdown_fp) + } + + if ( RW_IN_Shutdown_fp ) + { RW_IN_Shutdown_fp(); - dlclose(reflib_library); + } + + dlclose( reflib_library ); } KBD_Init_fp = NULL; @@ -199,67 +209,59 @@ void VID_FreeReflib (void) RW_IN_Move_fp = NULL; RW_IN_Frame_fp = NULL; RW_Sys_GetClipboardData_fp = NULL; - - memset (&re, 0, sizeof(re)); + + memset( &re, 0, sizeof ( re ) ); reflib_library = NULL; reflib_active = false; } -/* -============== -VID_LoadRefresh -============== -*/ -qboolean VID_LoadRefresh( char *name ) +qboolean +VID_LoadRefresh ( char *name ) { - refimport_t ri; - GetRefAPI_t GetRefAPI; - char fn[MAX_OSPATH]; - char *path; + refimport_t ri; + GetRefAPI_t GetRefAPI; + char fn [ MAX_OSPATH ]; + char *path; struct stat st; extern uid_t saved_euid; - + if ( reflib_active ) { - if (KBD_Close_fp) + if ( KBD_Close_fp ) + { KBD_Close_fp(); - if (RW_IN_Shutdown_fp) + } + + if ( RW_IN_Shutdown_fp ) + { RW_IN_Shutdown_fp(); + } + KBD_Close_fp = NULL; RW_IN_Shutdown_fp = NULL; re.Shutdown(); - VID_FreeReflib (); + VID_FreeReflib(); } Com_Printf( "------- Loading %s -------\n", name ); - //regain root - seteuid(saved_euid); + /* regain root */ + seteuid( saved_euid ); - path = Cvar_Get ("basedir", ".", CVAR_NOSET)->string; + path = Cvar_Get( "basedir", ".", CVAR_NOSET )->string; - snprintf (fn, MAX_OSPATH, "%s/%s", path, name ); - - if (stat(fn, &st) == -1) { - Com_Printf( "LoadLibrary(\"%s\") failed: %s\n", name, strerror(errno)); - return false; - } - - // permission checking - if (strstr(fn, "softx") == NULL && - strstr(fn, "glx") == NULL && - strstr(fn, "softsdl") == NULL && - strstr(fn, "sdlgl") == NULL) { // softx doesn't require root - } else { - // softx requires we give up root now - setreuid(getuid(), getuid()); - setegid(getgid()); + snprintf( fn, MAX_OSPATH, "%s/%s", path, name ); + + if ( stat( fn, &st ) == -1 ) + { + Com_Printf( "LoadLibrary(\"%s\") failed: %s\n", name, strerror( errno ) ); + return ( false ); } if ( ( reflib_library = dlopen( fn, RTLD_LAZY ) ) == 0 ) { - Com_Printf( "LoadLibrary(\"%s\") failed: %s\n", name , dlerror()); - return false; + Com_Printf( "LoadLibrary(\"%s\") failed: %s\n", name, dlerror() ); + return ( false ); } Com_Printf( "LoadLibrary(\"%s\")\n", fn ); @@ -282,14 +284,16 @@ qboolean VID_LoadRefresh( char *name ) ri.Vid_NewWindow = VID_NewWindow; if ( ( GetRefAPI = (void *) dlsym( reflib_library, "GetRefAPI" ) ) == 0 ) + { Com_Error( ERR_FATAL, "dlsym failed on %s", name ); + } re = GetRefAPI( ri ); - if (re.api_version != API_VERSION) + if ( re.api_version != API_VERSION ) { - VID_FreeReflib (); - Com_Error (ERR_FATAL, "%s has incompatible api_version", name); + VID_FreeReflib(); + Com_Error( ERR_FATAL, "%s has incompatible api_version", name ); } /* Init IN (Mouse) */ @@ -299,216 +303,225 @@ qboolean VID_LoadRefresh( char *name ) in_state.in_strafe_state = &in_strafe.state; in_state.in_speed_state = &in_speed.state; - if ((RW_IN_Init_fp = dlsym(reflib_library, "RW_IN_Init")) == NULL || - (RW_IN_Shutdown_fp = dlsym(reflib_library, "RW_IN_Shutdown")) == NULL || - (RW_IN_Activate_fp = dlsym(reflib_library, "RW_IN_Activate")) == NULL || - (RW_IN_Commands_fp = dlsym(reflib_library, "RW_IN_Commands")) == NULL || - (RW_IN_Move_fp = dlsym(reflib_library, "RW_IN_Move")) == NULL || - (RW_IN_Frame_fp = dlsym(reflib_library, "RW_IN_Frame")) == NULL) - Sys_Error("No RW_IN functions in REF.\n"); + if ( ( ( RW_IN_Init_fp = dlsym( reflib_library, "RW_IN_Init" ) ) == NULL ) || + ( ( RW_IN_Shutdown_fp = dlsym( reflib_library, "RW_IN_Shutdown" ) ) == NULL ) || + ( ( RW_IN_Activate_fp = dlsym( reflib_library, "RW_IN_Activate" ) ) == NULL ) || + ( ( RW_IN_Commands_fp = dlsym( reflib_library, "RW_IN_Commands" ) ) == NULL ) || + ( ( RW_IN_Move_fp = dlsym( reflib_library, "RW_IN_Move" ) ) == NULL ) || + ( ( RW_IN_Frame_fp = dlsym( reflib_library, "RW_IN_Frame" ) ) == NULL ) ) + { + Sys_Error( "No RW_IN functions in REF.\n" ); + } /* this one is optional */ - RW_Sys_GetClipboardData_fp = dlsym(reflib_library, "RW_Sys_GetClipboardData"); - + RW_Sys_GetClipboardData_fp = dlsym( reflib_library, "RW_Sys_GetClipboardData" ); + IN_Init(); if ( re.Init( 0, 0 ) == -1 ) { re.Shutdown(); - VID_FreeReflib (); - return false; + VID_FreeReflib(); + return ( false ); } /* Init KBD */ - if ((KBD_Init_fp = dlsym(reflib_library, "KBD_Init")) == NULL || - (KBD_Update_fp = dlsym(reflib_library, "KBD_Update")) == NULL || - (KBD_Close_fp = dlsym(reflib_library, "KBD_Close")) == NULL) - Sys_Error("No KBD functions in REF.\n"); - KBD_Init_fp(Do_Key_Event); + if ( ( ( KBD_Init_fp = dlsym( reflib_library, "KBD_Init" ) ) == NULL ) || + ( ( KBD_Update_fp = dlsym( reflib_library, "KBD_Update" ) ) == NULL ) || + ( ( KBD_Close_fp = dlsym( reflib_library, "KBD_Close" ) ) == NULL ) ) + { + Sys_Error( "No KBD functions in REF.\n" ); + } + KBD_Init_fp( Do_Key_Event ); Key_ClearStates(); - - // give up root now - setreuid(getuid(), getuid()); - setegid(getgid()); - Com_Printf( "------------------------------------\n"); + /* give up root now */ + setreuid( getuid(), getuid() ); + setegid( getgid() ); + + Com_Printf( "------------------------------------\n" ); reflib_active = true; - return true; + return ( true ); } /* -============ -VID_CheckChanges - -This function gets called once just before drawing each frame, and it's sole purpose in life -is to check to see if any of the video mode parameters have changed, and if they have to -update the rendering DLL and/or video mode to match. -============ -*/ -void VID_CheckChanges (void) + * This function gets called once just before drawing each frame, and + * it's sole purpose in life is to check to see if any of the video mode + * parameters have changed, and if they have to update the rendering DLL + * and/or video mode to match. + */ +void +VID_CheckChanges ( void ) { - char name[100]; + char name [ 100 ]; if ( vid_ref->modified ) { S_StopAllSounds(); } - while (vid_ref->modified) + while ( vid_ref->modified ) { - /* - ** refresh has changed - */ + /* refresh has changed */ vid_ref->modified = false; vid_fullscreen->modified = true; cl.refresh_prepped = false; cls.disable_screen = true; sprintf( name, "ref_%s.so", vid_ref->string ); + if ( !VID_LoadRefresh( name ) ) { - /* prefer to fall back on X if active */ - if (getenv("DISPLAY")) - Cvar_Set( "vid_ref", "gl" ); - else - Cvar_Set( "vid_ref", "gl" ); - } + Cvar_Set( "vid_ref", "gl" ); + } + cls.disable_screen = false; } - } -/* -============ -VID_Init -============ -*/ -void VID_Init (void) + +void +VID_Init ( void ) { /* Create the video variables so we know how to start the graphics drivers */ - // if DISPLAY is defined, try X - if (getenv("DISPLAY")) - vid_ref = Cvar_Get ("vid_ref", "softx", CVAR_ARCHIVE); - else - vid_ref = Cvar_Get ("vid_ref", "soft", CVAR_ARCHIVE); - vid_xpos = Cvar_Get ("vid_xpos", "3", CVAR_ARCHIVE); - vid_ypos = Cvar_Get ("vid_ypos", "22", CVAR_ARCHIVE); - vid_fullscreen = Cvar_Get ("vid_fullscreen", "0", CVAR_ARCHIVE); + vid_ref = Cvar_Get( "vid_ref", "gl", CVAR_ARCHIVE ); + + vid_xpos = Cvar_Get( "vid_xpos", "3", CVAR_ARCHIVE ); + vid_ypos = Cvar_Get( "vid_ypos", "22", CVAR_ARCHIVE ); + vid_fullscreen = Cvar_Get( "vid_fullscreen", "0", CVAR_ARCHIVE ); vid_gamma = Cvar_Get( "vid_gamma", "1", CVAR_ARCHIVE ); /* Add some console commands that we want to handle */ - Cmd_AddCommand ("vid_restart", VID_Restart_f); + Cmd_AddCommand( "vid_restart", VID_Restart_f ); - /* Disable the 3Dfx splash screen */ - putenv("FX_GLIDE_NO_SPLASH=0"); - /* Start the graphics mode and load refresh DLL */ VID_CheckChanges(); } -/* -============ -VID_Shutdown -============ -*/ -void VID_Shutdown (void) +void +VID_Shutdown ( void ) { if ( reflib_active ) { - if (KBD_Close_fp) + if ( KBD_Close_fp ) + { KBD_Close_fp(); - if (RW_IN_Shutdown_fp) + } + + if ( RW_IN_Shutdown_fp ) + { RW_IN_Shutdown_fp(); + } + KBD_Close_fp = NULL; RW_IN_Shutdown_fp = NULL; - re.Shutdown (); - VID_FreeReflib (); + re.Shutdown(); + VID_FreeReflib(); } VID_MenuShutdown(); } /* -============ -VID_CheckRefExists - -Checks to see if the given ref_NAME.so exists. -Placed here to avoid complicating other code if the library .so files -ever have their names changed. -============ -*/ -qboolean VID_CheckRefExists (const char *ref) + * Checks to see if the given ref_NAME.so exists. + * Placed here to avoid complicating other code if the library .so files + * ever have their names changed. + */ +qboolean +VID_CheckRefExists ( const char *ref ) { - char fn[MAX_OSPATH]; - char *path; + char fn [ MAX_OSPATH ]; + char *path; struct stat st; - path = Cvar_Get ("basedir", ".", CVAR_NOSET)->string; - snprintf (fn, MAX_OSPATH, "%s/ref_%s.so", path, ref ); - - if (stat(fn, &st) == 0) - return true; - else - return false; -} + path = Cvar_Get( "basedir", ".", CVAR_NOSET )->string; + snprintf( fn, MAX_OSPATH, "%s/ref_%s.so", path, ref ); -/*****************************************************************************/ -/* INPUT */ -/*****************************************************************************/ - -void IN_Init (void) -{ - if (RW_IN_Init_fp) - RW_IN_Init_fp(&in_state); -} - -void IN_Shutdown (void) -{ - if (RW_IN_Shutdown_fp) - RW_IN_Shutdown_fp(); -} - -void IN_Commands (void) -{ - if (RW_IN_Commands_fp) - RW_IN_Commands_fp(); -} - -void IN_Move (usercmd_t *cmd) -{ - if (RW_IN_Move_fp) - RW_IN_Move_fp(cmd); -} - -void IN_Frame (void) -{ - if (RW_IN_Activate_fp) + if ( stat( fn, &st ) == 0 ) { - if ( !cl.refresh_prepped || cls.key_dest == key_console || cls.key_dest == key_menu) - RW_IN_Activate_fp(false); + return ( true ); + } + else + { + return ( false ); + } +} + +/* INPUT */ +void +IN_Init ( void ) +{ + if ( RW_IN_Init_fp ) + { + RW_IN_Init_fp( &in_state ); + } +} + +void +IN_Shutdown ( void ) +{ + if ( RW_IN_Shutdown_fp ) + { + RW_IN_Shutdown_fp(); + } +} + +void +IN_Commands ( void ) +{ + if ( RW_IN_Commands_fp ) + { + RW_IN_Commands_fp(); + } +} + +void +IN_Move ( usercmd_t *cmd ) +{ + if ( RW_IN_Move_fp ) + { + RW_IN_Move_fp( cmd ); + } +} + +void +IN_Frame ( void ) +{ + if ( RW_IN_Activate_fp ) + { + if ( !cl.refresh_prepped || ( cls.key_dest == key_console ) || ( cls.key_dest == key_menu ) ) + { + RW_IN_Activate_fp( false ); + } else - RW_IN_Activate_fp(true); + { + RW_IN_Activate_fp( true ); + } } - if (RW_IN_Frame_fp) + if ( RW_IN_Frame_fp ) + { RW_IN_Frame_fp(); + } } -void IN_Activate (qboolean active) +void +Do_Key_Event ( int key, qboolean down ) { + Key_Event( key, down, Sys_Milliseconds() ); } -void Do_Key_Event(int key, qboolean down) +char * +Sys_GetClipboardData ( void ) { - Key_Event(key, down, Sys_Milliseconds()); -} - -char *Sys_GetClipboardData(void) -{ - if (RW_Sys_GetClipboardData_fp) - return RW_Sys_GetClipboardData_fp(); + if ( RW_Sys_GetClipboardData_fp ) + { + return ( RW_Sys_GetClipboardData_fp() ); + } else - return NULL; + { + return ( NULL ); + } }