本文整理汇总了C++中Q_strrchr函数的典型用法代码示例。如果您正苦于以下问题:C++ Q_strrchr函数的具体用法?C++ Q_strrchr怎么用?C++ Q_strrchr使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了Q_strrchr函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: CG_LoadViewWeapon
//=========================================================
// Description:
// Loads a view weapon.
//=========================================================
static void CG_LoadViewWeapon ( weaponInfo_t *weapon, const char *modelPath )
{
char file[MAX_QPATH];
char *slash;
//int root;
//int model;
Q_strncpyz (file, modelPath, sizeof (file));
slash = Q_strrchr (file, '/');
Q_strncpyz (slash, "/model_default.skin", sizeof (file) - (slash - file));
weapon->viewModelSkin = trap->R_RegisterSkin (file);
trap->G2API_InitGhoul2Model (&weapon->g2ViewModel, modelPath, 0, weapon->viewModelSkin, 0, 0, 0);
if ( !trap->G2_HaveWeGhoul2Models (weapon->g2ViewModel) )
{
return;
}
/*root = trap->G2API_AddBolt (weapon->g2ViewModel, 0, "model_root");
model = trap->G2API_InitGhoul2Model (&weapon->g2ViewModel, "models/weapons2/test3_r_hand/model.glm", 1, 0, trap->R_RegisterSkin ("models/weapons2/test3_r_hand/model_default.skin"), 0, 0);
if ( !trap->G2API_HasGhoul2ModelOnIndex (&weapon->g2ViewModel, 1) )
{
trap->Print (S_COLOR_YELLOW "WARNING: Failed to load right hand model.\n");
}
trap->G2API_SetBoltInfo (weapon->g2ViewModel, 0, root);
trap->G2API_InitGhoul2Model (&weapon->g2ViewModel, "models/weapons2/test3_l_hand/model.glm", 2, 0, trap->R_RegisterSkin ("models/weapons2/test3_l_hand/model_default.skin"), 0, 0);
if ( !trap->G2API_HasGhoul2ModelOnIndex (&weapon->g2ViewModel, 2) )
{
trap->Print (S_COLOR_YELLOW "WARNING: Failed to load left hand model.\n");
}
trap->G2API_SetBoltInfo (weapon->g2ViewModel, 0, root);*/
memset (weapon->viewModelAnims, 0, sizeof (weapon->viewModelAnims));
trap->G2API_GetGLAName (weapon->g2ViewModel, 0, file);
if ( !file[0] )
{
return;
}
slash = Q_strrchr (file, '/');
Q_strncpyz (slash, "/animation.cfg", sizeof (file) - (slash - file));
CG_LoadViewWeaponAnimations (weapon, file);
}
开发者ID:JKGDevs,项目名称:JediKnightGalaxies,代码行数:53,代码来源:cg_weaponinit.cpp
示例2: Q_strrchr
//-----------------------------------------------------------------------------
// The SDK launches the game with the full path to gameinfo.txt, so we need
// to strip off the path.
//-----------------------------------------------------------------------------
const char *GetModDirFromPath( const char *pszPath )
{
char *pszSlash = Q_strrchr( pszPath, '\\' );
if ( pszSlash )
{
return pszSlash + 1;
}
else if ( ( pszSlash = Q_strrchr( pszPath, '/' ) ) != NULL )
{
return pszSlash + 1;
}
// Must just be a mod directory already.
return pszPath;
}
开发者ID:Axitonium,项目名称:SourceEngine2007,代码行数:19,代码来源:sys_dll2.cpp
示例3: S_Play_f
void S_Play_f( void )
{
int i;
sfxHandle_t h;
char name[256];
i = 1;
while ( i<Cmd_Argc() )
{
if ( !Q_strrchr(Cmd_Argv(i), '.') )
{
Com_sprintf( name, sizeof(name), "%s.wav", Cmd_Argv(1) );
}
else
{
Q_strncpyz( name, Cmd_Argv(i), sizeof(name) );
}
h = S_RegisterSound( name, qfalse );
if( h )
{
S_StartLocalSound( h, CHAN_LOCAL_SOUND );
}
i++;
}
}
开发者ID:zturtleman,项目名称:recoil,代码行数:25,代码来源:snd_dma.c
示例4: Q_strrchr
//============
// UTIL_FileExtension
// returns file extension
//============
const char *UTIL_FileExtension( const char *in )
{
const char *separator, *backslash, *colon, *dot;
separator = Q_strrchr( in, '/' );
backslash = Q_strrchr( in, '\\' );
if( !separator || separator < backslash )
separator = backslash;
colon = Q_strrchr( in, ':' );
if( !separator || separator < colon )
separator = colon;
dot = Q_strrchr( in, '.' );
if( dot == NULL || (separator && ( dot < separator )))
return "";
return dot + 1;
}
开发者ID:FWGS,项目名称:XashXT,代码行数:20,代码来源:stringlib.cpp
示例5: CG_LoadG2ModelWithSkin
static void CG_LoadG2ModelWithSkin ( const char *modelPath, void **g2ModelPtr )
{
void *g2Model = NULL;
trap->G2API_InitGhoul2Model (g2ModelPtr, modelPath, 0, 0, 0, 0, 0);
g2Model = *g2ModelPtr;
if ( trap->G2_HaveWeGhoul2Models (g2Model) && trap->G2API_SkinlessModel (g2Model, 0) )
{
char skinName[MAX_QPATH];
char *slash = NULL;
int skinLen = 0;
qhandle_t skin;
Q_strncpyz (skinName, modelPath, sizeof (skinName));
skinLen = strlen (skinName);
slash = Q_strrchr (skinName, '/');
Q_strncpyz (slash, "/model_default.skin", sizeof (skinName) - (slash - skinName));
skin = trap->R_RegisterSkin (skinName);
trap->G2API_SetSkin (g2Model, 0, skin, skin);
}
}
开发者ID:JKGDevs,项目名称:JediKnightGalaxies,代码行数:25,代码来源:cg_weaponinit.cpp
示例6: main
int main ( int argc, char* argv[] )
#endif // IPHONE
{
// int oldtime, newtime; // bk001204 - unused
int len, i;
char *cmdline;
char *cdpath, *sep;
void Sys_SetDefaultCDPath(const char *path);
// go back to real user for config loads
saved_euid = geteuid();
seteuid(getuid());
Sys_ParseArgs( argc, argv ); // bk010104 - added this for support
// Can't use CopyString() or Z_Free() yet:
cdpath = strdup(argv[0]);
if ((sep = Q_strrchr(cdpath, '/')))
*sep = '\0';
Sys_SetDefaultCDPath(cdpath);
free(cdpath);
// merge the command line, this is kinda silly
for (len = 1, i = 1; i < argc; i++)
len += strlen(argv[i]) + 1;
cmdline = malloc(len);
*cmdline = 0;
for (i = 1; i < argc; i++)
{
if (i > 1)
strcat(cmdline, " ");
strcat(cmdline, argv[i]);
}
// bk000306 - clear queues
memset( &eventQue[0], 0, MAX_QUED_EVENTS*sizeof(sysEvent_t) );
memset( &sys_packetReceived[0], 0, MAX_MSGLEN*sizeof(qbyte) );
Com_Init(cmdline);
NET_Init();
Sys_ConsoleInputInit();
fcntl(0, F_SETFL, fcntl (0, F_GETFL, 0) | FNDELAY);
#ifdef DEDICATED
// init here for dedicated, as we don't have GLimp_Init
InitSig();
#endif
#ifndef IPHONE
while (1)
{
#ifdef __linux__
Sys_ConfigureFPU();
#endif
Com_Frame ();
}
#endif // !IPHONE
}
开发者ID:alexander-pick,项目名称:Quake3-HD--iPAD-,代码行数:60,代码来源:unix_main.c
示例7: CG_LoadingClient
/*
===================
CG_LoadingClient
===================
*/
void CG_LoadingClient( int clientNum ) {
const char *info;
char *skin;
char personality[MAX_QPATH];
char model[MAX_QPATH];
char iconName[MAX_QPATH];
info = CG_ConfigString( CS_PLAYERS + clientNum );
if ( loadingPlayerIconCount < MAX_LOADING_PLAYER_ICONS ) {
Q_strncpyz( model, Info_ValueForKey( info, "model" ), sizeof( model ) );
skin = Q_strrchr( model, '/' );
if ( skin ) {
*skin++ = '\0';
} else {
skin = "default";
}
Com_sprintf( iconName, MAX_QPATH, "models/aw_players/%s/icon_%s.tga", model, skin );
loadingPlayerIcons[loadingPlayerIconCount] = trap_R_RegisterShaderNoMip( iconName );
if ( !loadingPlayerIcons[loadingPlayerIconCount] ) {
Com_sprintf( iconName, MAX_QPATH, "models/aw_players/%s/icon_%s.tga", DEFAULT_MODEL, "default" );
loadingPlayerIcons[loadingPlayerIconCount] = trap_R_RegisterShaderNoMip( iconName );
}
if ( loadingPlayerIcons[loadingPlayerIconCount] ) {
loadingPlayerIconCount++;
}
}
Q_strncpyz( personality, Info_ValueForKey( info, "n" ), sizeof(personality) );
Q_CleanStr( personality );
CG_LoadingString( personality );
}
开发者ID:ElderPlayerX,项目名称:Afterwards,代码行数:40,代码来源:cg_info.c
示例8: skin
/*
===========
ForceClientSkin
Forces a client's skin (for teamplay)
===========
*/
static void ForceClientSkin( gclient_t *client, char *model, const char *skin ) {
char *p;
if ((p = Q_strrchr(model, '/')) != 0) {
*p = 0;
}
Q_strcat(model, MAX_QPATH, "/");
Q_strcat(model, MAX_QPATH, skin);
}
开发者ID:linux26,项目名称:corkscrew,代码行数:17,代码来源:g_client.c
示例9: __MsgFunc_PyNetworkCls
// Message handler for PyNetworkCls
void __MsgFunc_PyNetworkCls( bf_read &msg )
{
char clientClass[PYNETCLS_BUFSIZE];
char networkName[PYNETCLS_BUFSIZE];
int iType = msg.ReadByte();
msg.ReadString(clientClass, PYNETCLS_BUFSIZE);
msg.ReadString(networkName, PYNETCLS_BUFSIZE);
DbgStrPyMsg( "__MsgFunc_PyNetworkCls: Registering Python network class message %d %s %s\n", iType, clientClass, networkName );
// Get module path
const char *pch = Q_strrchr( networkName, '.' );
if( !pch )
{
Warning( "Invalid python class name %s\n", networkName );
return;
}
int n = pch - networkName + 1;
char modulePath[PYNETCLS_BUFSIZE];
Q_strncpy( modulePath, networkName, n );
// Make sure the client class is imported
SrcPySystem()->Import( modulePath );
// Read which client class we are modifying
PyClientClassBase *p = FindPyClientClass( clientClass );
if( !p )
{
Warning( "__MsgFunc_PyNetworkCls: Invalid networked class %s\n", clientClass );
return;
}
// Set type
p->SetType( iType );
SetupClientClassRecv( p, iType );
// Read network class name
Q_strncpy( p->m_strPyNetworkedClassName, networkName, PYNETCLS_BUFSIZE );
// Attach if a network class exists
unsigned short lookup = m_NetworkClassDatabase.Find( networkName );
if ( lookup != m_NetworkClassDatabase.InvalidIndex() )
{
m_NetworkClassDatabase.Element(lookup)->AttachClientClass( p );
}
else
{
Warning( "__MsgFunc_PyNetworkCls: Invalid networked class %s\n", networkName );
}
}
开发者ID:detoxhby,项目名称:lambdawars,代码行数:53,代码来源:srcpy_client_class.cpp
示例10: PlayerIntroSound
/*
=================
PlayerIntroSound
=================
*/
static void PlayerIntroSound( const char *modelAndSkin ) {
char model[MAX_QPATH];
char *skin;
Q_strncpyz( model, modelAndSkin, sizeof( model ) );
skin = Q_strrchr( model, '/' );
if ( skin ) {
*skin++ = '\0';
} else {
skin = model;
}
if ( Q_stricmp( skin, "default" ) == 0 ) {
skin = model;
}
trap_SendConsoleCommand( EXEC_APPEND, va( "play sound/player/announce/%s.wav\n", skin ) );
}
开发者ID:TheDushan,项目名称:OpenWolf,代码行数:23,代码来源:g_bot.cpp
示例11: PlayerIcon
/*
=================
PlayerIcon
=================
*/
static void PlayerIcon( const char *modelAndSkin, char *iconName, int iconNameMaxSize ) {
char *skin;
char model[MAX_QPATH];
Q_strncpyz( model, modelAndSkin, sizeof(model));
skin = Q_strrchr( model, '/' );
if ( skin ) {
*skin++ = '\0';
}
else {
skin = "default";
}
Com_sprintf(iconName, iconNameMaxSize, "models/players/%s/icon_%s.tga", model, skin );
if( !trap_R_RegisterShaderNoMip( iconName ) && Q_stricmp( skin, "default" ) != 0 ) {
Com_sprintf(iconName, iconNameMaxSize, "models/players/%s/icon_default.tga", model );
}
}
开发者ID:ElderPlayerX,项目名称:Rune,代码行数:24,代码来源:ui_splevel.c
示例12: UDP_Init
int
UDP_Init ( void )
{
struct hostent *local;
char buff[MAXHOSTNAMELEN];
struct qsockaddr addr;
char *colon;
if (COM_CheckParm ("-noudp"))
return -1;
// determine my name & address
gethostname(buff, MAXHOSTNAMELEN);
if ((local = gethostbyname(buff)) == NULL)
myAddr = INADDR_LOOPBACK;
else
myAddr = *(int *)local->h_addr_list[0];
// if the quake hostname isn't set, set it to the machine name
if (Q_strcmp(hostname->string, "UNNAMED") == 0)
{
buff[15] = 0;
Cvar_Set (hostname, buff);
}
if ((net_controlsocket = UDP_OpenSocket (0)) == -1)
Sys_Error("UDP_Init: Unable to open control socket\n");
((struct sockaddr_in *)&broadcastaddr)->sin_family = AF_INET;
((struct sockaddr_in *)&broadcastaddr)->sin_addr.s_addr = INADDR_BROADCAST;
((struct sockaddr_in *)&broadcastaddr)->sin_port = htons(net_hostport);
UDP_GetSocketAddr (net_controlsocket, &addr);
Q_strcpy(my_tcpip_address, UDP_AddrToString (&addr));
colon = Q_strrchr (my_tcpip_address, ':');
if (colon)
*colon = 0;
Con_Printf("UDP Initialized\n");
tcpipAvailable = true;
return net_controlsocket;
}
开发者ID:luaman,项目名称:qforge-old,代码行数:43,代码来源:net_udp.c
示例13: Q_snprintf
//-----------------------------------------------------------------------------
// Finds all .VMT files in a particular directory
//-----------------------------------------------------------------------------
bool CMaterial::LoadMaterialsInDirectory( char const* pDirectoryName, int nDirectoryNameLen,
IMaterialEnumerator *pEnum, int nContext, int nFlags )
{
//Assert( Q_strnicmp( pDirectoryName, "materials", 9 ) == 0 );
char *pWildCard;
pWildCard = ( char * )stackalloc( nDirectoryNameLen + 7 );
Q_snprintf( pWildCard, nDirectoryNameLen + 7, "%s/*.vmt", pDirectoryName );
if ( !g_pFileSystem )
{
return false;
}
FileFindHandle_t findHandle;
const char *pFileName = g_pFullFileSystem->FindFirstEx( pWildCard, "GAME", &findHandle );
while( pFileName )
{
if( !g_pFullFileSystem->FindIsDirectory( findHandle ) )
{
// Strip off the 'materials/' part of the material name.
char *pFileNameWithPath;
int nAllocSize = nDirectoryNameLen + Q_strlen(pFileName) + 2;
pFileNameWithPath = (char *)stackalloc( nAllocSize );
Q_snprintf( pFileNameWithPath, nAllocSize, "%s/%s", &pDirectoryName[MATERIAL_PREFIX_LEN], pFileName );
Q_strnlwr( pFileNameWithPath, nAllocSize );
// Strip off the extension...
char *pExt = Q_strrchr( pFileNameWithPath, '.');
if (pExt)
*pExt = 0;
if (!pEnum->EnumMaterial( pFileNameWithPath, nContext ))
{
return false;
}
}
pFileName = g_pFullFileSystem->FindNext( findHandle );
}
g_pFullFileSystem->FindClose( findHandle );
return true;
}
开发者ID:DeadZoneLuna,项目名称:SourceEngine2007,代码行数:45,代码来源:material.cpp
示例14: S_Play
static void S_Play (void)
{
static int hash = 345;
int i;
char name[256];
sfx_t *sfx;
i = 1;
while (i < Cmd_Argc())
{
q_strlcpy(name, Cmd_Argv(i), sizeof(name));
if (!Q_strrchr(Cmd_Argv(i), '.'))
{
q_strlcat(name, ".wav", sizeof(name));
}
sfx = S_PrecacheSound(name);
S_StartSound(hash++, 0, sfx, listener_origin, 1.0, 1.0);
i++;
}
}
开发者ID:Darktori,项目名称:vkQuake,代码行数:20,代码来源:snd_dma.c
示例15: q_strlcpy
// recognize ip:port (based on ProQuake)
static const char *Strip_Port (const char *host)
{
static char noport[MAX_QPATH];
/* array size as in Host_Connect_f() */
char *p;
int port;
if (!host || !*host)
return host;
q_strlcpy (noport, host, sizeof(noport));
if ((p = Q_strrchr(noport, ':')) == NULL)
return host;
*p++ = '\0';
port = Q_atoi (p);
if (port > 0 && port < 65536 && port != net_hostport)
{
net_hostport = port;
Con_Printf("Port set to %d\n", net_hostport);
}
return noport;
}
开发者ID:Novum,项目名称:vkQuake,代码行数:22,代码来源:net_dgrm.c
示例16: CG_LoadingClient
/*
===================
CG_LoadingClient
===================
*/
void CG_LoadingClient( int clientNum ) {
const char *info;
char *skin;
char personality[MAX_QPATH];
char model[MAX_QPATH];
char iconName[MAX_QPATH];
if ( cgs.gametype == GT_SINGLE_PLAYER && clientNum > 0 ) { // for now only show the player's icon in SP games
return;
}
info = CG_ConfigString( CS_PLAYERS + clientNum );
Q_strncpyz( model, Info_ValueForKey( info, "model" ), sizeof( model ) );
skin = Q_strrchr( model, '/' );
if ( skin ) {
*skin++ = '\0';
} else {
skin = "default";
}
Com_sprintf( iconName, MAX_QPATH, "models/players/%s/icon_%s.tga", model, skin );
// (SA) ignore player icons for the moment
if ( !( cg_entities[clientNum].currentState.aiChar ) ) {
// if ( loadingPlayerIconCount < MAX_LOADING_PLAYER_ICONS ) {
// loadingPlayerIcons[loadingPlayerIconCount++] = trap_R_RegisterShaderNoMip( iconName );
// }
}
Q_strncpyz( personality, Info_ValueForKey( info, "n" ), sizeof( personality ) );
Q_CleanStr( personality );
if ( cgs.gametype == GT_SINGLE_PLAYER ) {
trap_S_RegisterSound( va( "sound/player/announce/%s.wav", personality ) );
}
CG_LoadingString( personality );
}
开发者ID:Justasic,项目名称:RTCW-MP,代码行数:44,代码来源:cg_info.c
示例17: S_PlayVol
static void S_PlayVol (void)
{
static int hash = 543;
int i;
float vol;
char name[256];
sfx_t *sfx;
i = 1;
while (i < Cmd_Argc())
{
q_strlcpy(name, Cmd_Argv(i), sizeof(name));
if (!Q_strrchr(Cmd_Argv(i), '.'))
{
q_strlcat(name, ".wav", sizeof(name));
}
sfx = S_PrecacheSound(name);
vol = Q_atof(Cmd_Argv(i + 1));
S_StartSound(hash++, 0, sfx, listener_origin, vol, 1.0);
i += 2;
}
}
开发者ID:Darktori,项目名称:vkQuake,代码行数:22,代码来源:snd_dma.c
示例18: SetupGameGhoul2Model
void SetupGameGhoul2Model(gclient_t *client, char *modelname)
{
int handle;
char afilename[MAX_QPATH];
char /**GLAName,*/ *slash;
char GLAName[MAX_QPATH];
vec3_t tempVec = {0,0,0};
// First things first. If this is a ghoul2 model, then let's make sure we demolish this first.
if (client->ghoul2 && trap_G2_HaveWeGhoul2Models(client->ghoul2))
{
trap_G2API_CleanGhoul2Models(&(client->ghoul2));
}
/*
Com_sprintf( afilename, sizeof( afilename ), "models/players/%s/model.glm", modelname );
handle = trap_G2API_InitGhoul2Model(&client->ghoul2, afilename, 0, 0, -20, 0, 0);
if (handle<0)
{
Com_sprintf( afilename, sizeof( afilename ), "models/players/kyle/model.glm" );
handle = trap_G2API_InitGhoul2Model(&client->ghoul2, afilename, 0, 0, -20, 0, 0);
if (handle<0)
{
return;
}
}
*/
//rww - just load the "standard" model for the server"
if (!precachedKyle)
{
Com_sprintf( afilename, sizeof( afilename ), "models/players/kyle/model.glm" );
handle = trap_G2API_InitGhoul2Model(&precachedKyle, afilename, 0, 0, -20, 0, 0);
if (handle<0)
{
return;
}
}
if (precachedKyle && trap_G2_HaveWeGhoul2Models(precachedKyle))
{
trap_G2API_DuplicateGhoul2Instance(precachedKyle, &client->ghoul2);
}
else
{
return;
}
// The model is now loaded.
GLAName[0] = 0;
if (!BGPAFtextLoaded)
{
//get the location of the animation.cfg
//GLAName = trap_G2API_GetGLAName( client->ghoul2, 0);
trap_G2API_GetGLAName( client->ghoul2, 0, GLAName);
if (!GLAName[0])
{
if (!BG_ParseAnimationFile("models/players/_humanoid/animation.cfg"))
{
Com_Printf( "Failed to load animation file %s\n", afilename );
return;
}
return;
}
Q_strncpyz( afilename, GLAName, sizeof( afilename ));
slash = Q_strrchr( afilename, '/' );
if ( slash )
{
strcpy(slash, "/animation.cfg");
} // Now afilename holds just the path to the animation.cfg
else
{ // Didn't find any slashes, this is a raw filename right in base (whish isn't a good thing)
return;
}
// Try to load the animation.cfg for this model then.
if ( !BG_ParseAnimationFile( afilename ) )
{ // The GLA's animations failed
if (!BG_ParseAnimationFile("models/players/_humanoid/animation.cfg"))
{
Com_Printf( "Failed to load animation file %s\n", afilename );
return;
}
}
}
trap_G2API_AddBolt(client->ghoul2, 0, "*r_hand");
trap_G2API_AddBolt(client->ghoul2, 0, "*l_hand");
// NOTE - ensure this sequence of bolt and bone accessing are always the same because the client expects them in a certain order
trap_G2API_SetBoneAnim(client->ghoul2, 0, "model_root", 0, 12, BONE_ANIM_OVERRIDE_LOOP, 1.0f, level.time, -1, -1);
trap_G2API_SetBoneAngles(client->ghoul2, 0, "upper_lumbar", tempVec, BONE_ANGLES_POSTMULT, POSITIVE_X, NEGATIVE_Y, NEGATIVE_Z, NULL, 0, level.time);
trap_G2API_SetBoneAngles(client->ghoul2, 0, "cranium", tempVec, BONE_ANGLES_POSTMULT, POSITIVE_Z, NEGATIVE_Y, POSITIVE_X, NULL, 0, level.time);
if (!g2SaberInstance)
//.........这里部分代码省略.........
开发者ID:Boothand,项目名称:SaberShenanigans,代码行数:101,代码来源:g_client.c
示例19: WIPX_Init
int WIPX_Init (void)
{
int i;
char buff[MAXHOSTNAMELEN];
struct qsockaddr addr;
char *p;
int r;
WORD wVersionRequested;
if (COM_CheckParm ("-noipx"))
return -1;
// make sure LoadLibrary has happened successfully
if (!winsock_lib_initialized)
return -1;
if (winsock_initialized == 0)
{
wVersionRequested = MAKEWORD(1, 1);
r = pWSAStartup (MAKEWORD(1, 1), &winsockdata);
if (r)
{
Con_Printf ("Winsock initialization failed.\n");
return -1;
}
}
winsock_initialized++;
for (i = 0; i < IPXSOCKETS; i++)
ipxsocket[i] = 0;
// determine my name & address
if (pgethostname(buff, MAXHOSTNAMELEN) == 0)
{
// if the quake hostname isn't set, set it to the machine name
if (Q_strcmp(hostname.string, "UNNAMED") == 0)
{
// see if it's a text IP address (well, close enough)
for (p = buff; *p; p++)
if ((*p < '0' || *p > '9') && *p != '.')
break;
// if it is a real name, strip off the domain; we only want the host
if (*p)
{
for (i = 0; i < 15; i++)
if (buff[i] == '.')
break;
buff[i] = 0;
}
Cvar_Set ("hostname", buff);
}
}
if ((net_controlsocket = WIPX_OpenSocket (0)) == -1)
{
Con_Printf("WIPX_Init: Unable to open control socket\n");
if (--winsock_initialized == 0)
pWSACleanup ();
return -1;
}
((struct sockaddr_ipx *)&broadcastaddr)->sa_family = AF_IPX;
memset(((struct sockaddr_ipx *)&broadcastaddr)->sa_netnum, 0, 4);
memset(((struct sockaddr_ipx *)&broadcastaddr)->sa_nodenum, 0xff, 6);
((struct sockaddr_ipx *)&broadcastaddr)->sa_socket = htons((unsigned short)net_hostport);
WIPX_GetSocketAddr (net_controlsocket, &addr);
Q_strcpy(my_ipx_address, WIPX_AddrToString (&addr));
p = Q_strrchr (my_ipx_address, ':');
if (p)
*p = 0;
Con_Printf("Winsock IPX Initialized\n");
ipxAvailable = true;
return net_controlsocket;
}
开发者ID:JacobSimmer,项目名称:QuakeFlash,代码行数:80,代码来源:net_wipx.c
示例20: Netchan_CopyFileFragments
//.........这里部分代码省略.........
Con_Printf("Buffer allocation failed on %i bytes\n", nsize + 1);
Netchan_FlushIncoming(chan, 1);
return FALSE;
}
p = chan->incomingbufs[FRAG_FILE_STREAM];
pos = 0;
while (p)
{
n = p->next;
cursize = p->frag_message.cursize;
// First message has the file name, don't write that into the data stream, just write the rest of the actual data
if (p == chan->incomingbufs[FRAG_FILE_STREAM])
{
// Copy it in
cursize -= msg_readcount;
Q_memcpy(&buffer[pos], &p->frag_message.data[msg_readcount], cursize);
p->frag_message.cursize = cursize;
}
else
{
Q_memcpy(&buffer[pos], p->frag_message.data, cursize);
}
pos += p->frag_message.cursize;
Mem_Free(p);
p = n;
}
if (bCompressed)
{
unsigned char* uncompressedBuffer = (unsigned char*)Mem_Malloc(uncompressedSize);
Con_DPrintf("Decompressing file %s (%d -> %d)\n", filename, nsize, uncompressedSize);
BZ2_bzBuffToBuffDecompress((char*)uncompressedBuffer, &uncompressedSize, (char*)buffer, nsize, 1, 0);
Mem_Free(buffer);
pos = uncompressedSize;
buffer = uncompressedBuffer;
}
if (filename[0] == '!')
{
if (chan->tempbuffer)
{
Con_DPrintf("Netchan_CopyFragments: Freeing holdover tempbuffer\n");
Mem_Free(chan->tempbuffer);
}
chan->tempbuffer = buffer;
chan->tempbuffersize = pos;
}
else
{
char filedir[MAX_PATH];
char *pszFileName;
FileHandle_t handle;
#ifdef REHLDS_CHECKS
Q_strncpy(filedir, filename, sizeof(filedir) - 1);
filedir[sizeof(filedir) - 1] = 0;
#else
Q_strncpy(filedir, filename, sizeof(filedir));
#endif // REHLDS_CHECKS
COM_FixSlashes(filedir);
pszFileName = Q_strrchr(filedir, '\\');
if (pszFileName)
{
*pszFileName = 0;
#ifdef REHLDS_FIXES
FS_CreateDirHierarchy(filedir, "GAMEDOWNLOAD");
#endif
}
#ifndef REHLDS_FIXES
FS_CreateDirHierarchy(filedir, "GAMEDOWNLOAD");
#endif
handle = FS_OpenPathID(filename, "wb", "GAMEDOWNLOAD");
if (!handle)
{
Con_Printf("File open failed %s\n", filename);
Netchan_FlushIncoming(chan, 1);
#ifdef REHLDS_FIXES
Mem_Free(buffer);
#endif
return FALSE;
}
Sys_Printf("COM_WriteFile: %s\n", filename);
FS_Write(buffer, pos, 1, handle);
FS_Close(handle);
Mem_Free(buffer);
}
SZ_Clear(&net_message);
chan->incomingbufs[FRAG_FILE_STREAM] = nullptr;
chan->incomingready[FRAG_FILE_STREAM] = FALSE;
msg_readcount = 0;
return TRUE;
}
开发者ID:Chuvi-w,项目名称:rehlds,代码行数:101,代码来源:net_chan.cpp
注:本文中的Q_strrchr函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论