diff options
author | tma <tma@edf5b092-35ff-0310-97b2-ce42778d08ea> | 2006-01-22 01:58:50 +0000 |
---|---|---|
committer | tma <tma@edf5b092-35ff-0310-97b2-ce42778d08ea> | 2006-01-22 01:58:50 +0000 |
commit | 670a7d99911d0663c5db663ed74019dbbb12a498 (patch) | |
tree | 047307e87cea2d216b1fd0a0cad92a591a5bd1e4 /code/qcommon/q_shared.c | |
parent | b411794fc8e0dc0e2d7ec044f813cfbe42bb8865 (diff) | |
download | ioquake3-aero-670a7d99911d0663c5db663ed74019dbbb12a498.tar.gz ioquake3-aero-670a7d99911d0663c5db663ed74019dbbb12a498.zip |
* Overhaul of console autocompletion
- No longer does weird stuff like move the cursor inappropriately
- Autocomplete works with compound commands
- Special autocomplete on some commands e.g. \map, \demo
- Removed various hacks used to counter the original autocomplete code
git-svn-id: svn://svn.icculus.org/quake3/trunk@514 edf5b092-35ff-0310-97b2-ce42778d08ea
Diffstat (limited to 'code/qcommon/q_shared.c')
-rw-r--r-- | code/qcommon/q_shared.c | 79 |
1 files changed, 76 insertions, 3 deletions
diff --git a/code/qcommon/q_shared.c b/code/qcommon/q_shared.c index af72ec2..2100390 100644 --- a/code/qcommon/q_shared.c +++ b/code/qcommon/q_shared.c @@ -59,10 +59,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; } @@ -1249,4 +1258,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; +} |