*/
static int vg_console_tokenize( const char *src, char *dst, const char *args[32] )
{
- int arg_count = 0,
- in_token = 0;
+ int arg_count = 0;
+ bool in_token = 0, in_string = 0;
for( int i=0;; i ++ )
{
- if( src[i] )
+ char c = src[i];
+ dst[i] = c;
+
+ if( c == '\0' )
+ break;
+
+ if( c == '"' )
{
- if( src[i] == ' ' || src[i] == '\t' )
+ if( in_string )
{
if( in_token )
+ {
dst[i] = '\0';
+ in_token = 0;
+ }
- in_token = 0;
-
- if( arg_count == 32 )
- break;
- }
- else
+ in_string = 0;
+ }
+ else
+ in_string = 1;
+ }
+ else
+ {
+ if( !in_string && (c == ' ' || c == '\t') )
{
- dst[i] = src[i];
-
- if( !in_token )
+ if( in_token )
{
- args[ arg_count ++ ] = &dst[i];
- in_token = 1;
- }
- }
- }
- else
- {
- dst[i] = '\0';
- break;
- }
+ dst[i] = '\0';
+ in_token = 0;
+ }
+ else
+ dst[i] = '\0';
+ }
+ else
+ {
+ if( in_token ) {}
+ else
+ {
+ if( arg_count == 32 )
+ {
+ vg_error( "Console input exceeded maximum command tokens (>32)\n" );
+ break;
+ }
+ else
+ {
+ args[ arg_count ++ ] = &dst[i];
+ in_token = 1;
+ }
+ }
+ }
+ }
}
return arg_count;
/*
* FIXME: Negative numbers
*/
-void vg_strcati32( vg_str *str, i32 value )
+void vg_strcati32( vg_str *str, i32 value ){ vg_strcatu64( str, (u64)value ); }
+void vg_strcatu64( vg_str *str, u64 value )
{
if( value )
{
for( int j=0; j<i; j ++ )
reverse[j] = temp[ i-1-j ];
reverse[i] = '\0';
-
vg_strcat( str, reverse );
}
else
* Append character to vg_str
*/
void vg_strcatch( vg_str *str, char c );
+void vg_strcatu64( vg_str *str, u64 value );
void vg_strcati32( vg_str *str, i32 value );
void vg_strcati32r( vg_str *str, i32 value, i32 n, char alt );
/*