本文整理汇总了C++中Q_strncpy函数的典型用法代码示例。如果您正苦于以下问题:C++ Q_strncpy函数的具体用法?C++ Q_strncpy怎么用?C++ Q_strncpy使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了Q_strncpy函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: Q_strncpy
//-----------------------------------------------------------------------------
// Purpose:
// Input : ttype -
// pszToken -
//-----------------------------------------------------------------------------
void TokenReader::Stuff(trtoken_t eType, const char *pszToken)
{
m_eStuffed = eType;
Q_strncpy(m_szStuffed, pszToken, sizeof( m_szStuffed ) );
m_bStuffed = true;
}
开发者ID:paralin,项目名称:hl2sdk,代码行数:11,代码来源:tokenreader.cpp
示例2: Reset
void C_HLTVCamera::FireGameEvent( IGameEvent * event)
{
if ( !g_bEngineIsHLTV )
return; // not in HLTV mode
const char *type = event->GetName();
if ( Q_strcmp( "game_newmap", type ) == 0 )
{
Reset(); // reset all camera settings
// show spectator UI
if ( !GetViewPortInterface() )
return;
if ( engine->IsPlayingDemo() )
{
// for demo playback show full menu
GetViewPortInterface()->ShowPanel( PANEL_SPECMENU, true );
SetMode( OBS_MODE_ROAMING );
}
else
{
// during live broadcast only show black bars
GetViewPortInterface()->ShowPanel( PANEL_SPECGUI, true );
}
return;
}
if ( Q_strcmp( "hltv_message", type ) == 0 )
{
wchar_t outputBuf[1024];
const char *pszText = event->GetString( "text", "" );
char *tmpStr = hudtextmessage->LookupString( pszText );
const wchar_t *pBuf = g_pVGuiLocalize->Find( tmpStr );
if ( pBuf )
{
// Copy pBuf into szBuf[i].
int nMaxChars = sizeof( outputBuf ) / sizeof( wchar_t );
wcsncpy( outputBuf, pBuf, nMaxChars );
outputBuf[nMaxChars-1] = 0;
}
else
{
g_pVGuiLocalize->ConvertANSIToUnicode( tmpStr, outputBuf, sizeof(outputBuf) );
}
GetCenterPrint()->Print( ConvertCRtoNL( outputBuf ) );
return ;
}
if ( Q_strcmp( "hltv_title", type ) == 0 )
{
Q_strncpy( m_szTitleText, event->GetString( "text", "" ), sizeof(m_szTitleText) );
return;
}
if ( Q_strcmp( "hltv_status", type ) == 0 )
{
int nNumProxies = event->GetInt( "proxies" );
m_nNumSpectators = event->GetInt( "clients" ) - nNumProxies;
return;
}
// after this only auto-director commands follow
// don't execute them is autodirector is off and PVS is unlocked
if ( !spec_autodirector.GetBool() && !IsPVSLocked() )
return;
if ( Q_strcmp( "hltv_cameraman", type ) == 0 )
{
Reset();
m_nCameraMode = OBS_MODE_ROAMING;
m_iCameraMan = event->GetInt( "index" );
return;
}
if ( Q_strcmp( "hltv_fixed", type ) == 0 )
{
m_iCameraMan = 0;
m_vCamOrigin.x = event->GetInt( "posx" );
m_vCamOrigin.y = event->GetInt( "posy" );
m_vCamOrigin.z = event->GetInt( "posz" );
QAngle angle;
angle.x = event->GetInt( "theta" );
angle.y = event->GetInt( "phi" );
angle.z = 0; // no roll yet
if ( m_nCameraMode != OBS_MODE_FIXED )
{
SetMode( OBS_MODE_FIXED );
SetCameraAngle( angle );
m_flFOV = event->GetFloat( "fov", 90 );
//.........这里部分代码省略.........
开发者ID:Cre3per,项目名称:hl2sdk-csgo,代码行数:101,代码来源:hltvcamera.cpp
示例3: CL_ChangeGame
/*
===============
CL_ChangeGame
This is experiment. Use with precaution
===============
*/
qboolean CL_ChangeGame( const char *gamefolder, qboolean bReset )
{
if( host.type == HOST_DEDICATED )
return false;
if( Q_stricmp( host.gamefolder, gamefolder ))
{
kbutton_t *mlook, *jlook;
qboolean mlook_active = false, jlook_active = false;
string mapname, maptitle;
int maxEntities;
mlook = (kbutton_t *)clgame.dllFuncs.KB_Find( "in_mlook" );
jlook = (kbutton_t *)clgame.dllFuncs.KB_Find( "in_jlook" );
if( mlook && ( mlook->state & 1 ))
mlook_active = true;
if( jlook && ( jlook->state & 1 ))
jlook_active = true;
// so reload all images (remote connect)
Mod_ClearAll( true );
R_ShutdownImages();
FS_LoadGameInfo( (bReset) ? host.gamefolder : gamefolder );
R_InitImages();
// save parms
maxEntities = clgame.maxEntities;
Q_strncpy( mapname, clgame.mapname, MAX_STRING );
Q_strncpy( maptitle, clgame.maptitle, MAX_STRING );
#ifdef PANDORA
if( !CL_LoadProgs( va( "%s/" CLIENTDLL, "." )))
#else
if( !CL_LoadProgs( va( "%s/%s", GI->dll_path, GI->client_lib)))
#endif
Host_Error( "can't initialize client library\n" );
// restore parms
clgame.maxEntities = maxEntities;
Q_strncpy( clgame.mapname, mapname, MAX_STRING );
Q_strncpy( clgame.maptitle, maptitle, MAX_STRING );
// invalidate fonts so we can reloading them again
Q_memset( &cls.creditsFont, 0, sizeof( cls.creditsFont ));
SCR_InstallParticlePalette();
SCR_LoadCreditsFont();
Con_InvalidateFonts();
SCR_RegisterTextures ();
CL_FreeEdicts ();
SCR_VidInit ();
if( cls.key_dest == key_game ) // restore mouse state
clgame.dllFuncs.IN_ActivateMouse();
// restore mlook state
if( mlook_active ) Cmd_ExecuteString( "+mlook\n", src_command );
if( jlook_active ) Cmd_ExecuteString( "+jlook\n", src_command );
return true;
}
return false;
}
开发者ID:ShaunNoWay,项目名称:xash3d,代码行数:72,代码来源:cl_main.c
示例4: Q_strncpy
void FilePlayerClassInfo_t::Parse( KeyValues *pKeyValuesData, const char *szPlayerClassName )
{
// Okay, we tried at least once to look this up...
m_bParsedScript = true;
// Classname
Q_strncpy( m_szPlayerClassName, szPlayerClassName, MAX_PLAYERCLASS_NAME_LENGTH );
// Printable name
Q_strncpy( m_szPrintName, pKeyValuesData->GetString( "printname", "!! Missing printname on Player Class" ), MAX_PLAYERCLASS_NAME_LENGTH );
// Player Model
Q_strncpy( m_szPlayerModel, pKeyValuesData->GetString( "playermodel", "!! Missing playermodel on Player Class" ), MAX_PLAYERCLASS_NAME_LENGTH );
// Select command
Q_strncpy( m_szSelectCmd, pKeyValuesData->GetString( "selectcmd", "!! Missing selectcmd on Player Class" ), 32 );
m_iTeam = TEAM_UNASSIGNED;
const char *pTeam = pKeyValuesData->GetString( "team", NULL );
if ( pTeam )
{
if ( Q_stricmp( pTeam, "BLUE" ) == 0 )
{
m_iTeam = SDK_TEAM_BLUE;
}
else if ( Q_stricmp( pTeam, "RED" ) == 0 )
{
m_iTeam = SDK_TEAM_RED;
}
else
{
Assert( false );
}
}
else
{
Assert( false );
}
const int keyLength = sizeof( "weapon_" ) + MAX_DIGITS;
char keyName[ keyLength ];
int ammoKeyLength = sizeof( "weapon__ammo" ) + MAX_DIGITS;
char ammoKeyName[ ammoKeyLength ];
for (int i = 1; i <= WEAPON_MAX; i++)
{
Q_snprintf( keyName, keyLength, "weapon_%d", i );
const char *pszWeapon = pKeyValuesData->GetString( keyName, NULL );
if( !pszWeapon )
{
Warning( "weapon_%s: %s requested by class %s not found\n", keyName, pszWeapon, m_szPlayerClassName );
break;
}
int weaponId = AliasToWeaponID( pszWeapon );
m_WeaponVector.AddToTail( weaponId );
Q_snprintf( ammoKeyName, ammoKeyLength, "weapon_%d_ammo", i );
int ammoCount = pKeyValuesData->GetInt( ammoKeyName, 0 );
m_AmmoVector.AddToTail( ammoCount );
m_iWeaponCount = i;
}
Q_strncpy( m_szLimitCvar, pKeyValuesData->GetString( "limitcvar", "!! Missing limit cvar on Player Class" ), sizeof(m_szLimitCvar) );
Assert( Q_strlen( m_szLimitCvar ) > 0 && "Every class must specify a limitcvar" );
// HUD player status health images (when the player is hurt)
Q_strncpy( m_szClassImage, pKeyValuesData->GetString( "classimage", "white" ), sizeof( m_szClassImage ) );
Q_strncpy( m_szClassImageBG, pKeyValuesData->GetString( "classimagebg", "white" ), sizeof( m_szClassImageBG ) );
m_iHealth = pKeyValuesData->GetFloat( "Health", 100 );
m_flRunSpeed = pKeyValuesData->GetFloat( "RunSpeed", 200 );
m_flSprintSpeed = pKeyValuesData->GetFloat( "SprintSpeed", 340 );
m_flProneSpeed = pKeyValuesData->GetFloat( "ProneSpeed", 160 );
m_flStaminaDrainRate = pKeyValuesData->GetFloat( "StaminaDrainRate", lf_combat_default_drainrate.GetFloat() );
m_flStaminaRestoreRate = pKeyValuesData->GetFloat( "StaminaRestoreRate", lf_combat_default_restorerate.GetFloat() );
m_iArmor = pKeyValuesData->GetInt( "armor", 0 );
}
开发者ID:hekar,项目名称:luminousforts-2013,代码行数:82,代码来源:playerclass_info_parse.cpp
示例5: NET_StringToSockaddr
/* <d3446> ../engine/net_ws.c:410 */
qboolean NET_StringToSockaddr(const char *s, struct sockaddr *sadr)
{
struct hostent *h;
char *colon;
int val;
char copy[128];
Q_memset(sadr, 0, sizeof(*sadr));
#ifdef _WIN32
if (Q_strlen(s) >= 24 && s[8] == ':' && s[21] == ':')
{
sadr->sa_family = AF_IPX;
copy[2] = 0;
copy[0] = s[0];
copy[1] = s[1];
sscanf(copy, "%x", &val);
sadr->sa_data[0] = (char)val;
copy[0] = s[2];
copy[1] = s[3];
sscanf(copy, "%x", &val);
sadr->sa_data[1] = (char)val;
copy[0] = s[4];
copy[1] = s[5];
sscanf(copy, "%x", &val);
sadr->sa_data[2] = (char)val;
copy[0] = s[6];
copy[1] = s[7];
sscanf(copy, "%x", &val);
sadr->sa_data[3] = (char)val;
copy[0] = s[9];
copy[1] = s[10];
sscanf(copy, "%x", &val);
sadr->sa_data[4] = (char)val;
copy[0] = s[11];
copy[1] = s[12];
sscanf(copy, "%x", &val);
sadr->sa_data[5] = (char)val;
copy[0] = s[13];
copy[1] = s[14];
sscanf(copy, "%x", &val);
sadr->sa_data[6] = (char)val;
copy[0] = s[15];
copy[1] = s[16];
sscanf(copy, "%x", &val);
sadr->sa_data[7] = (char)val;
copy[0] = s[17];
copy[1] = s[18];
sscanf(copy, "%x", &val);
sadr->sa_data[8] = (char)val;
copy[0] = s[19];
copy[1] = s[20];
sscanf(copy, "%x", &val);
sadr->sa_data[9] = (char)val;
sscanf(s + 22, "%u", &val);
*(uint16 *)&sadr->sa_data[10] = htons(val);
return TRUE;
}
#endif // _WIN32
((sockaddr_in *)sadr)->sin_family = AF_INET;
((sockaddr_in *)sadr)->sin_port = 0;
Q_strncpy(copy, s, sizeof(copy) - 1);
copy[sizeof(copy) - 1] = 0;
// Parse port
colon = copy;
while (*colon != 0)
{
if (*colon == ':')
{
*colon = 0;
val = atoi(colon + 1);
((sockaddr_in *)sadr)->sin_port = htons(val);
}
colon++;
}
// Parse address
((sockaddr_in *)sadr)->sin_addr.s_addr = inet_addr(copy);
if (((sockaddr_in *)sadr)->sin_addr.s_addr == INADDR_NONE)
{
h = CRehldsPlatformHolder::get()->gethostbyname(copy);
if (h == NULL || h->h_addr == NULL)
{
//.........这里部分代码省略.........
开发者ID:omertelli,项目名称:rehlds,代码行数:101,代码来源:net_ws.cpp
示例6: CL_Record_f
/*
====================
CL_Record_f
record <demoname>
Begins recording a demo from the current position
====================
*/
void CL_Record_f( void )
{
const char *name;
string demoname, demopath, demoshot;
int n;
if( Cmd_Argc() == 1 )
{
name = "new";
}
else if( Cmd_Argc() == 2 )
{
name = Cmd_Argv( 1 );
}
else
{
Msg( "Usage: record <demoname>\n" );
return;
}
if( cls.demorecording )
{
Msg( "Already recording.\n");
return;
}
if( cls.demoplayback )
{
Msg( "Can't record during demo playback.\n");
return;
}
if( !cls.demoheader || cls.state != ca_active )
{
Msg( "You must be in a level to record.\n");
return;
}
if( !Q_stricmp( name, "new" ))
{
// scan for a free filename
for( n = 0; n < 10000; n++ )
{
CL_DemoGetName( n, demoname );
if( !FS_FileExists( va( "demos/%s.dem", demoname ), true ))
break;
}
if( n == 10000 )
{
Msg( "^3ERROR: no free slots for demo recording\n" );
return;
}
}
else Q_strncpy( demoname, name, sizeof( demoname ));
// open the demo file
Q_sprintf( demopath, "demos/%s.dem", demoname );
Q_sprintf( demoshot, "demos/%s.bmp", demoname );
// make sure what old demo is removed
if( FS_FileExists( demopath, false )) FS_Delete( demopath );
if( FS_FileExists( demoshot, false )) FS_Delete( demoshot );
// write demoshot for preview
Cbuf_AddText( va( "demoshot \"%s\"\n", demoname ));
Q_strncpy( cls.demoname, demoname, sizeof( cls.demoname ));
Q_strncpy( menu.globals->demoname, demoname, sizeof( menu.globals->demoname ));
CL_WriteDemoHeader( demopath );
}
开发者ID:nekonomicon,项目名称:xash3d,代码行数:79,代码来源:cl_demo.c
示例7: ParseStatusString
void CHudStatusBar :: ParseStatusString( int line_num )
{
// localise string first
char szBuffer[MAX_STATUSTEXT_LENGTH];
memset( szBuffer, 0, sizeof szBuffer );
gHUD.m_TextMessage.LocaliseTextString( m_szStatusText[line_num], szBuffer, MAX_STATUSTEXT_LENGTH );
// parse m_szStatusText & m_iStatusValues into m_szStatusBar
memset( m_szStatusBar[line_num], 0, MAX_STATUSTEXT_LENGTH );
char *src = szBuffer;
char *dst = m_szStatusBar[line_num];
char *src_start = src, *dst_start = dst;
while( *src != 0 )
{
while( *src == '\n' )
src++; // skip over any newlines
if((( src - src_start ) >= MAX_STATUSTEXT_LENGTH ) || (( dst - dst_start ) >= MAX_STATUSTEXT_LENGTH ))
break;
int index = Q_atoi( src );
// should we draw this line?
if(( index >= 0 && index < MAX_STATUSBAR_VALUES ) && ( m_iStatusValues[index] != 0 ))
{
// parse this line and append result to the status bar
while( *src >= '0' && *src <= '9' )
src++;
if( *src == '\n' || *src == 0 )
continue; // no more left in this text line
// copy the text, char by char, until we hit a % or a \n
while( *src != '\n' && *src != 0 )
{
if( *src != '%' )
{
// just copy the character
*dst = *src;
dst++, src++;
}
else
{
// get the descriptor
char valtype = *(++src); // move over %
// if it's a %, draw a % sign
if( valtype == '%' )
{
*dst = valtype;
dst++, src++;
continue;
}
// move over descriptor, then get and move over the index
index = Q_atoi( ++src );
while( *src >= '0' && *src <= '9' )
src++;
if( index >= 0 && index < MAX_STATUSBAR_VALUES )
{
int indexval = m_iStatusValues[index];
// get the string to substitute in place of the %XX
char szRepString[MAX_PLAYER_NAME_LENGTH];
switch( valtype )
{
case 'p':
// player name
GetPlayerInfo( indexval, &g_PlayerInfoList[indexval] );
if ( g_PlayerInfoList[indexval].name != NULL )
{
Q_strncpy( szRepString, g_PlayerInfoList[indexval].name, MAX_PLAYER_NAME_LENGTH );
m_pflNameColors[line_num] = GetClientColor( indexval );
}
else
{
Q_strcpy( szRepString, "******" );
}
break;
case 'i':
// number
Q_snprintf( szRepString, sizeof( szRepString ), "%d", indexval );
break;
default:
szRepString[0] = 0;
break;
}
for( char *cp = szRepString; *cp != 0 && ((dst - dst_start) < MAX_STATUSTEXT_LENGTH); cp++, dst++ )
*dst = *cp;
}
}
}
}
else
{
//.........这里部分代码省略.........
开发者ID:mittorn,项目名称:XashXT,代码行数:101,代码来源:statusbar.cpp
示例8: HPAK_GetDataPointer
qboolean HPAK_GetDataPointer( const char *filename, resource_t *pResource, byte **buffer, int *size )
{
file_t *f;
int i, num_lumps;
hpak_dir_t *direntries;
byte *tmpbuf;
string pakname;
hpak_t *queue;
hpak_header_t hdr;
if( !filename || !filename[0] )
return false;
if( buffer ) *buffer = NULL;
if( size ) *size = 0;
for( queue = hpak_queue; queue != NULL; queue = queue->next )
{
if( !Q_stricmp(queue->name, filename ) && !Q_memcmp( queue->HpakResource.rgucMD5_hash, pResource->rgucMD5_hash, 16 ))
{
if( buffer )
{
tmpbuf = Z_Malloc( queue->size );
Q_memcpy( tmpbuf, queue->data, queue->size );
*buffer = tmpbuf;
}
if( size ) *size = queue->size;
return true;
}
}
Q_strncpy( pakname, filename, sizeof( pakname ));
FS_StripExtension( pakname );
FS_DefaultExtension( pakname, ".hpk" );
f = FS_Open( pakname, "rb", false );
if( !f ) return false;
FS_Read( f, &hdr, sizeof( hdr ));
if( hdr.ident != IDCUSTOMHEADER )
{
MsgDev( D_ERROR, "HPAK_GetDataPointer: %s it's not a HPK file.\n", pakname );
FS_Close( f );
return false;
}
if( hdr.version != IDCUSTOM_VERSION )
{
MsgDev( D_ERROR, "HPAK_GetDataPointer: %s has invalid version (%i should be %i).\n", pakname, hdr.version, IDCUSTOM_VERSION );
FS_Close( f );
return false;
}
FS_Seek( f, hdr.seek, SEEK_SET );
FS_Read( f, &num_lumps, sizeof( num_lumps ));
if( num_lumps < 1 || num_lumps > MAX_FILES_IN_WAD )
{
MsgDev( D_ERROR, "HPAK_GetDataPointer: %s has too many lumps %u.\n", filename, num_lumps );
FS_Close( f );
return false;
}
direntries = Z_Malloc( sizeof( hpak_dir_t ) * num_lumps );
FS_Read( f, direntries, sizeof( hpak_dir_t ) * num_lumps );
for( i = 0; i < num_lumps; i++ )
{
if( !Q_memcmp( direntries[i].DirectoryResource.rgucMD5_hash, pResource->rgucMD5_hash, 16 ))
{
FS_Seek( f, direntries[i].seek, SEEK_SET );
if( buffer && direntries[i].size > 0 )
{
tmpbuf = Z_Malloc( direntries[i].size );
FS_Read( f, tmpbuf, direntries[i].size );
*buffer = tmpbuf;
}
Mem_Free( direntries );
FS_Close( f );
return true;
}
}
Mem_Free( direntries );
FS_Close( f );
return false;
}
开发者ID:DavidKnight247,项目名称:xash3d,代码行数:92,代码来源:hpak.c
示例9: HPAK_RemoveLump
void HPAK_RemoveLump( const char *name, resource_t *resource )
{
string read_path;
string save_path;
file_t *f1, *f2;
hpak_container_t hpak_read;
hpak_container_t hpak_save;
int i, j;
if( !name || !name[0] || !resource )
return;
HPAK_FlushHostQueue();
Q_strncpy( read_path, name, sizeof( read_path ));
FS_StripExtension( read_path );
FS_DefaultExtension( read_path, ".hpk" );
f1 = FS_Open( read_path, "rb", false );
if( !f1 )
{
MsgDev( D_ERROR, "HPAK_RemoveLump: %s couldn't open.\n", read_path );
return;
}
Q_strncpy( save_path, read_path, sizeof( save_path ));
FS_StripExtension( save_path );
FS_DefaultExtension( save_path, ".hp2" );
f2 = FS_Open( save_path, "w+b", false );
if( !f2 )
{
MsgDev( D_ERROR, "HPAK_RemoveLump: %s couldn't open.\n", save_path );
FS_Close( f1 );
return;
}
FS_Seek( f1, 0, SEEK_SET );
FS_Seek( f2, 0, SEEK_SET );
// header copy
FS_Read( f1, &hash_pack_header, sizeof( hpak_header_t ));
FS_Write( f2, &hash_pack_header, sizeof( hpak_header_t ));
if( hash_pack_header.ident != IDCUSTOMHEADER || hash_pack_header.version != IDCUSTOM_VERSION )
{
MsgDev( D_ERROR, "HPAK_RemoveLump: %s has invalid header.\n", read_path );
FS_Close( f1 );
FS_Close( f2 );
FS_Delete( save_path ); // delete temp file
return;
}
FS_Seek( f1, hash_pack_header.seek, SEEK_SET );
FS_Read( f1, &hpak_read.count, sizeof( hpak_read.count ));
if( hpak_read.count < 1 || hpak_read.count > MAX_FILES_IN_WAD )
{
MsgDev( D_ERROR, "HPAK_RemoveLump: %s has invalid number of lumps.\n", read_path );
FS_Close( f1 );
FS_Close( f2 );
FS_Delete( save_path ); // delete temp file
return;
}
if( hpak_read.count == 1 )
{
MsgDev( D_ERROR, "HPAK_RemoveLump: %s only has one element, so it's not deleted.\n", read_path );
FS_Close( f1 );
FS_Close( f2 );
FS_Delete( read_path );
FS_Delete( save_path );
return;
}
hpak_save.count = hpak_read.count - 1;
hpak_read.dirs = Z_Malloc( sizeof( hpak_dir_t ) * hpak_read.count );
hpak_save.dirs = Z_Malloc( sizeof( hpak_dir_t ) * hpak_save.count );
FS_Read( f1, hpak_read.dirs, sizeof( hpak_dir_t ) * hpak_read.count );
if( !HPAK_FindResource( &hpak_read, resource->rgucMD5_hash, NULL ))
{
MsgDev( D_ERROR, "HPAK_RemoveLump: Couldn't find the lump %s in hpak %s.n", resource->szFileName, read_path );
Mem_Free( hpak_read.dirs );
Mem_Free( hpak_save.dirs );
FS_Close( f1 );
FS_Close( f2 );
FS_Delete( save_path );
return;
}
MsgDev( D_INFO, "Removing lump %s from %s.\n", resource->szFileName, read_path );
// If there's a collision, we've just corrupted this hpak.
for( i = 0, j = 0; i < hpak_read.count; i++ )
{
if( !Q_memcmp( hpak_read.dirs[i].DirectoryResource.rgucMD5_hash, resource->rgucMD5_hash, 16 ))
continue;
hpak_save.dirs[j] = hpak_read.dirs[i];
//.........这里部分代码省略.........
开发者ID:DavidKnight247,项目名称:xash3d,代码行数:101,代码来源:hpak.c
示例10: HPAK_Validate
static qboolean HPAK_Validate( const char *filename, qboolean quiet )
{
file_t *f;
hpak_dir_t *dataDir;
hpak_header_t hdr;
byte *dataPak;
int i, num_lumps;
MD5Context_t MD5_Hash;
string pakname;
resource_t *pRes;
char md5[16];
if( quiet ) HPAK_FlushHostQueue();
// not an error - just flush queue
if( !filename || !*filename )
return true;
Q_strncpy( pakname, filename, sizeof( pakname ));
FS_StripExtension( pakname );
FS_DefaultExtension( pakname, ".hpk" );
f = FS_Open( pakname, "rb", false );
if( !f )
{
MsgDev( D_INFO, "Couldn't find %s.\n", pakname );
return true;
}
if( !quiet ) MsgDev( D_INFO, "Validating %s\n", pakname );
FS_Read( f, &hdr, sizeof( hdr ));
if( hdr.ident != IDCUSTOMHEADER || hdr.version != IDCUSTOM_VERSION )
{
MsgDev( D_ERROR, "HPAK_ValidatePak: %s does not have a valid HPAK header.\n", pakname );
FS_Close( f );
return false;
}
FS_Seek( f, hdr.seek, SEEK_SET );
FS_Read( f, &num_lumps, sizeof( num_lumps ));
if( num_lumps < 1 || num_lumps > MAX_FILES_IN_WAD )
{
MsgDev( D_ERROR, "HPAK_ValidatePak: %s has too many lumps %u.\n", pakname, num_lumps );
FS_Close( f );
return false;
}
if( !quiet ) MsgDev( D_INFO, "# of Entries: %i\n", num_lumps );
dataDir = Z_Malloc( sizeof( hpak_dir_t ) * num_lumps );
FS_Read( f, dataDir, sizeof( hpak_dir_t ) * num_lumps );
if( !quiet ) MsgDev( D_INFO, "# Type Size FileName : MD5 Hash\n" );
for( i = 0; i < num_lumps; i++ )
{
if( dataDir[i].size < 1 || dataDir[i].size > 131071 )
{
// odd max size
MsgDev( D_ERROR, "HPAK_ValidatePak: lump %i has invalid size %s\n", i, Q_pretifymem( dataDir[i].size, 2 ));
Mem_Free( dataDir );
FS_Close(f);
return false;
}
dataPak = Z_Malloc( dataDir[i].size );
FS_Seek( f, dataDir[i].seek, SEEK_SET );
FS_Read( f, dataPak, dataDir[i].size );
Q_memset( &MD5_Hash, 0, sizeof( MD5Context_t ));
MD5Init( &MD5_Hash );
MD5Update( &MD5_Hash, dataPak, dataDir[i].size );
MD5Final( md5, &MD5_Hash );
pRes = &dataDir[i].DirectoryResource;
MsgDev( D_INFO, "%i: %s %s %s: ", i, HPAK_TypeFromIndex( pRes->type ),
Q_pretifymem( pRes->nDownloadSize, 2 ), pRes->szFileName );
if( Q_memcmp( md5, pRes->rgucMD5_hash, 0x10 ))
{
if( quiet )
{
MsgDev( D_ERROR, "HPAK_ValidatePak: %s has invalid checksum.\n", pakname );
Mem_Free( dataPak );
Mem_Free( dataDir );
FS_Close( f );
return false;
}
else MsgDev( D_INFO, "failed\n" );
}
else
{
if( !quiet ) MsgDev( D_INFO, "OK\n" );
}
// at this point, it's passed our checks.
Mem_Free( dataPak );
//.........这里部分代码省略.........
开发者ID:DavidKnight247,项目名称:xash3d,代码行数:101,代码来源:hpak.c
示例11: HPAK_ResourceForHash
qboolean HPAK_ResourceForHash( const char *filename, char *inHash, resource_t *pRes )
{
file_t *f;
hpak_t *hpak;
hpak_container_t hpakcontainer;
hpak_header_t hdr;
string pakname;
int ret;
if( !filename || !filename[0] )
return false;
for( hpak = hpak_queue; hpak != NULL; hpak = hpak->next )
{
if( !Q_stricmp( hpak->name, filename ) && !Q_memcmp( hpak->HpakResource.rgucMD5_hash, inHash, 0x10 ))
{
if( pRes != NULL ) *pRes = hpak->HpakResource;
return true;
}
}
Q_strncpy( pakname, filename, sizeof( pakname ));
FS_StripExtension( pakname );
FS_DefaultExtension( pakname, ".hpk" );
f = FS_Open( pakname, "rb", false );
if( !f ) return false;
FS_Read( f, &hdr, sizeof( hdr ));
if( hdr.ident != IDCUSTOMHEADER )
{
MsgDev( D_ERROR, "HPAK_ResourceForHash: %s it's not a HPK file.\n", pakname );
FS_Close( f );
return false;
}
if( hdr.version != IDCUSTOM_VERSION )
{
MsgDev( D_ERROR, "HPAK_ResourceForHash: %s has invalid version (%i should be %i).\n", pakname, hdr.version, IDCUSTOM_VERSION );
FS_Close( f );
return false;
}
FS_Seek( f, hdr.seek, SEEK_SET );
FS_Read( f, &hpakcontainer.count, sizeof( hpakcontainer.count ));
if( hpakcontainer.count < 1 || hpakcontainer.count > MAX_FILES_IN_WAD )
{
MsgDev( D_ERROR, "HPAK_ResourceForHash: %s has too many lumps %u.\n", pakname, hpakcontainer.count );
FS_Close( f );
return false;
}
hpakcontainer.dirs = Z_Malloc( sizeof( hpak_dir_t ) * hpakcontainer.count );
FS_Read( f, hpakcontainer.dirs, sizeof( hpak_dir_t ) * hpakcontainer.count );
ret = HPAK_FindResource( &hpakcontainer, inHash, pRes );
Mem_Free( hpakcontainer.dirs );
FS_Close( f );
return(ret);
}
开发者ID:DavidKnight247,项目名称:xash3d,代码行数:62,代码来源:hpak.c
示例12: HPAK_AddLump
void HPAK_AddLump( qboolean add_to_queue, const char *name, resource_t *DirEnt, byte *data, file_t *f )
{
int i, position, length;
string pakname1, pakname2;
char md5[16];
MD5Context_t MD5_Hash;
hpak_container_t hpak1, hpak2;
file_t *f1, *f2;
hpak_dir_t *dirs;
byte *temp;
if( !name || !name[0] )
{
MsgDev( D_ERROR, "HPAK_AddLump: NULL name\n" );
return;
}
if( !DirEnt )
{
MsgDev( D_ERROR, "HPAK_AddLump: invalid lump\n" );
return;
}
if( data == NULL && f == NULL )
{
MsgDev( D_ERROR, "HPAK_AddLump: missing lump data\n" );
return;
}
if( DirEnt->nDownloadSize < 1024 || DirEnt->nDownloadSize > 131072 )
{
MsgDev( D_ERROR, "HPAK_AddLump: invalid size %s\n", Q_pretifymem( DirEnt->nDownloadSize, 2 ));
return;
}
// hash it
Q_memset( &MD5_Hash, 0, sizeof( MD5Context_t ));
MD5Init( &MD5_Hash );
if( data == NULL )
{
// there are better ways
position = FS_Tell( f );
temp = Z_Malloc( DirEnt->nDownloadSize );
FS_Read( f, temp, DirEnt->nDownloadSize );
FS_Seek( f, position, SEEK_SET );
MD5Update( &MD5_Hash, temp, DirEnt->nDownloadSize );
Mem_Free( temp );
}
else
{
MD5Update( &MD5_Hash, data, DirEnt->nDownloadSize );
}
MD5Final( md5, &MD5_Hash );
if( Q_memcmp( md5, DirEnt->rgucMD5_hash, 0x10 ))
{
MsgDev( D_ERROR, "HPAK_AddLump: bad checksum for %s. Ignored\n", DirEnt->szFileName );
return;
}
if( add_to_queue )
{
HPAK_AddToQueue( name, DirEnt, data, f );
return;
}
Q_strncpy( pakname1, name, sizeof( pakname1 ));
FS_StripExtension( pakname1 );
FS_DefaultExtension( pakname1, ".hpk" );
f1 = FS_Open( pakname1, "rb", false );
if( !f1 )
{
// create new pack
HPAK_CreatePak( name, DirEnt, data, f );
return;
}
Q_strncpy( pakname2, pakname1, sizeof( pakname2 ));
FS_StripExtension( pakname2 );
FS_DefaultExtension( pakname2, ".hp2" );
f2 = FS_Open( pakname2, "w+b", false );
if( !f2 )
{
MsgDev( D_ERROR, "HPAK_AddLump: couldn't open %s.\n", pakname2 );
FS_Close( f1 );
return;
}
// load headers
FS_Read( f1, &hash_pack_header, sizeof( hpak_header_t ));
if( hash_pack_header.version != IDCUSTOM_VERSION )
{
//.........这里部分代码省略.........
开发者ID:DavidKnight247,项目名称:xash3d,代码行数:101,代码来源:hpak.c
示例13: Q_strncpy
//=========================================================
//=========================================================
void CTeamplayRules::RecountTeams( void )
{
char *pName;
char teamlist[TEAMPLAY_TEAMLISTLENGTH];
// loop through all teams, recounting everything
num_teams = 0;
// Copy all of the teams from the teamlist
// make a copy because strtok is destructive
Q_strncpy( teamlist, m_szTeamList, sizeof(teamlist) );
pName = teamlist;
pName = strtok( pName, ";" );
while ( pName != NULL && *pName )
{
if ( GetTeamIndex( pName ) < 0 )
{
Q_strncpy( team_names[num_teams], pName, sizeof(team_names[num_teams]));
num_teams++;
}
pName = strtok( NULL, ";" );
}
if ( num_teams < 2 )
{
num_teams = 0;
m_teamLimit = false;
}
// Sanity check
memset( team_scores, 0, sizeof(team_scores) );
// loop through all clients
for ( int i = 1; i <= gpGlobals->maxClients; i++ )
{
CBasePlayer *plr = UTIL_PlayerByIndex( i );
if ( plr )
{
const char *pTeamName = plr->TeamID();
// try add to existing team
int tm = GetTeamIndex( pTeamName );
if ( tm < 0 ) // no team match found
{
if ( !m_teamLimit )
{
// add to new team
tm = num_teams;
num_teams++;
team_scores[tm] = 0;
Q_strncpy( team_names[tm], pTeamName, MAX_TEAMNAME_LENGTH );
}
}
if ( tm >= 0 )
{
team_scores[tm] += plr->FragCount();
}
}
}
}
开发者ID:KermitAudio,项目名称:MSS,代码行数:64,代码来源:teamplay_gamerules.cpp
示例14: defined
void CHL2MPScriptedWeapon::InitScriptedWeapon( void )
{
#if defined ( LUA_SDK )
#ifndef CLIENT_DLL
// Let the instance reinitialize itself for the client.
if ( m_nTableReference != LUA_NOREF )
return;
#endif
char className[ MAX_WEAPON_STRING ];
#if defined ( CLIENT_DLL )
if ( strlen( GetScriptedClassname() ) > 0 )
Q_strncpy( className, GetScriptedClassname(), sizeof( className ) );
else
Q_strncpy( className, GetClassname(), sizeof( className ) );
#else
Q_strncpy( m_iScriptedClassname.GetForModify(), GetClassname(), sizeof( className ) );
Q_strncpy( className, GetClassname(), sizeof( className ) );
#endif
Q_strlower( className );
// Andrew; This redundancy is pretty annoying.
// Classname
Q_strncpy( m_pLuaWeaponInfo->szClassName, className, MAX_WEAPON_STRING );
SetClassname( className );
lua_getglobal( L, "weapon" );
if ( lua_istable( L, -1 ) )
{
lua_getfield( L, -1, "get" );
if ( lua_isfunction( L, -1 ) )
{
lua_remove( L, -2 );
lua_pushstring( L, className );
luasrc_pcall( L, 1, 1, 0 );
}
else
{
lua_pop( L, 2 );
}
}
else
{
lua_pop( L, 1 );
}
m_nTableReference = luaL_ref( L, LUA_REGISTRYINDEX );
#ifndef CLIENT_DLL
m_pLuaWeaponInfo->bParsedScript = true;
#endif
// Printable name
lua_getref( L, m_nTableReference );
lua_getfield( L, -1, "printname" );
lua_remove( L, -2 );
if ( lua_isstring( L, -1 ) )
{
Q_strncpy( m_pLuaWeaponInfo->szPrintName, lua_tostring( L, -1 ), MAX_WEAPON_STRING );
}
else
{
Q_strncpy( m_pLuaWeaponInfo->szPrintName, WEAPON_PRINTNAME_MISSING, MAX_WEAPON_STRING );
}
lua_pop( L, 1 );
// View model & world model
lua_getref( L, m_nTableReference );
lua_getfield( L, -1, "viewmodel" );
lua_remove( L, -2 );
if ( lua_isstring( L, -1 ) )
{
Q_strncpy( m_pLuaWeaponInfo->szViewModel, lua_tostring( L, -1 ), MAX_WEAPON_STRING );
}
lua_pop( L, 1 );
lua_getref( L, m_nTableReference );
lua_getfield( L, -1, "playermodel" );
lua_remove( L, -2 );
if ( lua_isstring( L, -1 ) )
{
Q_strncpy( m_pLuaWeaponInfo->szWorldModel, lua_tostring( L, -1 ), MAX_WEAPON_STRING );
}
lua_pop( L, 1 );
lua_getref( L, m_nTableReference );
lua_getfield( L, -1, "anim_prefix" );
lua_remove( L, -2 );
if ( lua_isstring( L, -1 ) )
{
Q_strncpy( m_pLuaWeaponInfo->szAnimationPrefix, lua_tostring( L, -1 ), MAX_WEAPON_PREFIX );
}
lua_pop( L, 1 );
lua_getref( L, m_nTableReference );
lua_getfield( L, -1, "bucket" );
lua_remove( L, -2 );
if ( lua_isnumber( L, -1 ) )
{
m_pLuaWeaponInfo->iSlot = lua_tonumber( L, -1 );
}
else
{
m_pLuaWeaponInfo->iSlot = 0;
}
lua_pop( L, 1 );
//.........这里部分代码省略.........
开发者ID:AluminumKen,项目名称:hl2sb-src,代码行数:101,代码来源:weapon_hl2mpbase_scriptedweapon.cpp
示例15: CL_WriteDemoHeader
/*
====================
CL_WriteDemoHeader
Write demo header
====================
*/
void CL_WriteDemoHeader( const char *name )
{
fs_offset_t copysize;
fs_offset_t savepos;
fs_offset_t curpos;
MsgDev( D_INFO, "recording to %s.\n", name );
cls.demofile = FS_Open( name, "wb", false );
cls.demotime = 0.0;
if( !cls.demofile )
{
MsgDev( D_ERROR, "couldn't open %s.\n", name );
return;
}
cls.demorecording = true;
cls.demowaiting = true; // don't start saving messages until a non-delta compressed message is received
Q_memset( &demo.header, 0, sizeof( demo.header ));
demo.header.id = IDEMOHEADER;
demo.header.dem_protocol = DEMO_PROTOCOL;
demo.header.net_protocol = PROTOCOL_VERSION;
Q_strncpy( demo.header.mapname, clgame.mapname, sizeof( demo.header.mapname ));
Q_strncpy( demo.header.gamedir, FS_Gamedir(), sizeof( demo.header.gamedir ));
// write header
FS_Write( cls.demofile, &demo.header, sizeof( demo.header ));
demo.directory.numentries = 2;
demo.directory.entries = Mem_Alloc( cls.mempool, sizeof( demoentry_t ) * demo.directory.numentries );
// DIRECTORY ENTRY # 0
demo.entry = &demo.directory.entries[0]; // only one here.
demo.entry->entrytype = DEMO_STARTUP;
demo.entry->playback_time = 0.0f; // startup takes 0 time.
demo.entry->offset = FS_Tell( cls.demofile ); // position for this chunk.
// finish off the startup info.
CL_WriteDemoCmdHeader( dem_stop, cls.demoheader );
// now copy the stuff we cached from the server.
copysize = savepos = FS_Tell( cls.demoheader );
FS_Seek( cls.demoheader, 0, SEEK_SET );
FS_FileCopy( cls.demofile, cls.demoheader, copysize );
// jump back to end, in case we record another demo for this session.
FS_Seek( cls.demoheader, savepos, SEEK_SET );
demo.starttime = CL_GetDemoRecordClock(); // setup the demo starttime
demo.realstarttime = demo.starttime;
demo.framecount = 0;
// now move on to entry # 1, the first data chunk.
curpos = FS_Tell( cls.demofile );
demo.entry->length = curpos - demo.entry->offset;
// now we are writing the first real lump.
demo.entry = &demo.directory.entries[1]; // first real data lump
demo.entry->entrytype = DEMO_NORMAL;
demo.entry->playback_time = 0.0f; // startup takes 0 time.
demo.entry->offset = FS_Tell( cls.demofile );
// demo playback should read this as an incoming message.
// write the client's realtime value out so we can synchronize the reads.
CL_WriteDemoCmdHeader( dem_jumptime, cls.demofile );
if( clgame.hInstance ) clgame.dllFuncs.pfnReset();
Cbuf_InsertText( "fullupdate\n" );
Cbuf_Execute();
}
开发者ID:nekonomicon,项目名称:xash3d,代码行数:83,代码来源:cl_demo.c
示例16: HPAK_CreatePak
void HPAK_CreatePak( const char *filename, resource_t *DirEnt, byte *data, file_t *f )
{
int filelocation;
string pakname;
char md5[16];
char *temp;
MD5Context_t MD5_Hash;
file_t *fout;
if( !filename || !filename[0] )
{
MsgDev( D_ERROR, "HPAK_CreatePak: NULL name\n" );
return;
}
if(( f != NULL && data != NULL ) || ( f == NULL && data == NULL ))
{
MsgDev( D_ERROR, "HPAK_CreatePak: too many sources, please leave one.\n" );
return;
}
Q_strncpy( pakname, filename, sizeof( pakname ));
FS_StripExtension( pakname );
FS_DefaultExtension( pakname, ".hpk" );
MsgDev( D_INFO, "creating HPAK %s.\n", pakname );
fout = FS_Open( pakname, "wb", false );
if( !fout )
{
MsgDev( D_ERROR, "HPAK_CreatePak: can't write %s.\n", pakname );
return;
}
// let's hash it.
Q_memset( &MD5_Hash, 0, sizeof( MD5Context_t ));
MD5Init( &MD5_Hash );
if( data == NULL )
{
// there are better ways
filelocation = FS_Tell( f );
temp = Z_Malloc( DirEnt->nDownloadSize );
FS_Read( f, temp, DirEnt->nDownloadSize );
FS_Seek( f, filelocation, SEEK_SET );
MD5Update( &MD5_Hash, temp, DirEnt->nDownloadSize );
Mem_Free( temp );
}
else
{
MD5Update( &MD5_Hash, data, DirEnt->nDownloadSize );
}
MD5Final( md5, &MD5_Hash );
if( Q_memcmp( md5, DirEnt->rgucMD5_hash, 16 ))
{
MsgDev( D_ERROR, "HPAK_CreatePak: bad checksum for %s. Ignored\n", pakname );
return;
}
hash_pack_header.ident = IDCUSTOMHEADER;
hash_pack_header.version = IDCUSTOM_VERSION;
hash_pack_header.seek = 0;
FS_Write( fout, &hash_pack_header, sizeof( hash_pack_header ));
hash_pack_dir.count = 1;
hash_pack_dir.dirs = Z_Malloc( sizeof( hpak_dir_t ));
hash_pack_dir.dirs[0].DirectoryResource = *DirEnt;
hash_pack_dir.dirs[0].seek = FS_Tell( fout );
hash_pack_dir.dirs[0].size = DirEnt->nDownloadSize;
if( data == NULL )
{
HPAK_FileCopy( fout, f, hash_pack_dir.dirs[0].size );
}
else
{
FS_Write( fout, data, hash_pack_dir.dirs[0].size );
}
filelocation = FS_Tell( fout );
FS_Write( fout, &hash_pack_dir.count, sizeof( hash_pack_dir.count ));
FS_Write( fout, &hash_pack_dir.dirs[0], sizeof( hpak_dir_t ));
Mem_Free( hash_pack_dir.dirs );
Q_memset( &hash_pack_dir, 0, sizeof( hpak_container_t ));
hash_pack_header.seek = filelocation;
FS_Seek( fout, 0, SEEK_SET );
FS_Write( fout, &hash_pack_header, sizeof( hpak_header_t ));
FS_Close( fout );
}
开发者ID:DavidKnight247,项目名称:xash3d,代码行数:94,代码来源:hpak.c
示例17: CL_GetComment
/*
==================
CL_GetComment
==================
*/
qboolean CL_GetComment( const char *demoname, char *comment )
{
file_t *demfile;
demoheader_t demohdr;
demodirectory_t directory;
demoentry_t entry;
float playtime = 0.0f;
int i;
if( !comment ) return false;
demfile = FS_Open( demoname, "rb", false );
if( !demfile )
{
Q_strncpy( comment, "", MAX_STRING );
return false;
}
// read in the m_DemoHeader
FS_Read( demfile, &demohdr, sizeof( demoheader_t ));
if( demohdr.id != IDEMOHEADER )
{
FS_Close( demfile );
Q_strncpy( comment, "<corrupted>", MAX_STRING );
return false;
}
if( demohdr.net_protocol != PROTOCOL_VERSION || demohdr.dem_protocol != DEMO_PROTOCOL )
{
FS_Close( demfile );
Q_strncpy( comment, "<invalid protocol>", MAX_STRING );
return false;
}
// now read in the directory structure.
FS_Seek( demfile, demohdr.directory_offset, SEEK_SET );
FS_Read( demfile, &directory.numentries, sizeof( int ));
if( directory.numentries < 1 || directory.numentries > 1024 )
{
FS_Close( demfile );
Q_strncpy( comment, "<corrupted>", MAX_STRING );
return false;
}
for( i = 0; i < directory.numentries; i++ )
{
FS_Read( demfile, &entry, sizeof( demoentry_t ));
playtime += entry.playback_time;
}
// split comment to sections
Q_strncpy( comment, demohdr.mapname, CS_SIZE );
Q_strncpy( comment + CS_SIZE, "<No Title>", CS_SIZE ); // TODO: write titles or somewhat
Q_strncpy( comment + CS_SIZE * 2, va( "%g sec", playtime ), CS_TIME );
// all done
FS_Close( demfile );
return true;
}
开发者ID:nekonomicon,项目名称:xash3d,代码行数:67,代码来源:cl_demo.c
示例18: Field_Key
qboolean Field_Key( menufield_s *f, 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_HOME:
key = '7';
break;
case K_KP_UPARROW:
key = '8';
break;
case K_KP_PGUP:
key = '9';
break;
case K_KP_LEFTARROW:
key = '4';
break;
case K_KP_5:
key = '5';
break;
case K_KP_RIGHTARROW:
key = '6';
break;
case K_KP_END:
key = '1';
break;
case K_KP_DOWNARROW:
key = '2';
break;
case K_KP_PGDN:
key = '3';
break;
case K_KP_INS:
key = '0';
break;
case K_KP_DEL:
key = '.';
break;
}
if ( key > 127 )
{
switch ( key )
{
case K_DEL:
default:
return false;
}
}
/*
** support pasting from the clipboard
*/
if ( ( toupper( key ) == 'V' && keydown[K_CTRL] ) ||
( ( ( key == K_INS ) || ( key == K_KP_INS ) ) && keydown[K_SHIFT] ) )
{
char *cbd;
if ( ( cbd = Sys_GetClipboardData() ) != 0 )
{
strtok( cbd, "\n\r\b" );
Q_strncpy (f->buffer, cbd, sizeof(f->buffer)-1);
f->cursor = (int)strlen( f->buffer );
f->visible
|
请发表评论