diff options
author | Tim Angus <tim@ngus.net> | 2006-01-24 05:04:21 +0000 |
---|---|---|
committer | Tim Angus <tim@ngus.net> | 2006-01-24 05:04:21 +0000 |
commit | 608a95f42c08146d7e85fa876476d98365339a32 (patch) | |
tree | bb413c295ce51aa6648090e9856c399989a5e2f4 /src/qcommon/q_shared.c | |
parent | 470f5cc7203a148289d6ad6f0f5c7b4d80a48d50 (diff) |
* Merged ioq3-r522
- i586 is now default -march
- Couple of OpenAL "bug" fixes
- Fancy autocompletion
- Delete key on *nix fixed
- Client now sleeps when inactive
- Persistent console history
Diffstat (limited to 'src/qcommon/q_shared.c')
-rw-r--r-- | src/qcommon/q_shared.c | 99 |
1 files changed, 96 insertions, 3 deletions
diff --git a/src/qcommon/q_shared.c b/src/qcommon/q_shared.c index 091847ca..9f152d62 100644 --- a/src/qcommon/q_shared.c +++ b/src/qcommon/q_shared.c @@ -60,10 +60,19 @@ COM_StripExtension ============ */ void COM_StripExtension( const char *in, char *out ) { - while ( *in && *in != '.' ) { - *out++ = *in++; + int length; + + strcpy( out, in ); + + length = strlen(out)-1; + while (length > 0 && out[length] != '.') + { + length--; + if (out[length] == '/') + return; // no extension } - *out = 0; + if (length) + out[length] = 0; } @@ -910,6 +919,26 @@ char * QDECL va( char *format, ... ) { return buf; } +/* +============ +Com_TruncateLongString + +Assumes buffer is atleast TRUNCATE_LENGTH big +============ +*/ +void Com_TruncateLongString( char *buffer, const char *s ) +{ + int length = strlen( s ); + + if( length <= TRUNCATE_LENGTH ) + Q_strncpyz( buffer, s, TRUNCATE_LENGTH ); + else + { + Q_strncpyz( buffer, s, ( TRUNCATE_LENGTH / 2 ) - 3 ); + Q_strcat( buffer, TRUNCATE_LENGTH, " ... " ); + Q_strcat( buffer, TRUNCATE_LENGTH, s + length - ( TRUNCATE_LENGTH / 2 ) + 3 ); + } +} /* ===================================================================== @@ -1250,4 +1279,68 @@ void Info_SetValueForKey_Big( char *s, const char *key, const char *value ) { //==================================================================== +/* +================== +Com_CharIsOneOfCharset +================== +*/ +static qboolean Com_CharIsOneOfCharset( char c, char *set ) +{ + int i; + + for( i = 0; i < strlen( set ); i++ ) + { + if( set[ i ] == c ) + return qtrue; + } + + return qfalse; +} + +/* +================== +Com_SkipCharset +================== +*/ +char *Com_SkipCharset( char *s, char *sep ) +{ + char *p = s; + + while( p ) + { + if( Com_CharIsOneOfCharset( *p, sep ) ) + p++; + else + break; + } + + return p; +} + +/* +================== +Com_SkipTokens +================== +*/ +char *Com_SkipTokens( char *s, int numTokens, char *sep ) +{ + int sepCount = 0; + char *p = s; + while( sepCount < numTokens ) + { + if( Com_CharIsOneOfCharset( *p++, sep ) ) + { + sepCount++; + while( Com_CharIsOneOfCharset( *p, sep ) ) + p++; + } + else if( *p == '\0' ) + break; + } + + if( sepCount == numTokens ) + return p; + else + return s; +} |