diff options
Diffstat (limited to 'modules/mod_string/mod_string.c')
-rw-r--r-- | modules/mod_string/mod_string.c | 317 |
1 files changed, 317 insertions, 0 deletions
diff --git a/modules/mod_string/mod_string.c b/modules/mod_string/mod_string.c new file mode 100644 index 0000000..060d649 --- /dev/null +++ b/modules/mod_string/mod_string.c @@ -0,0 +1,317 @@ +/* + * Copyright © 2006-2016 SplinterGU (Fenix/Bennugd) + * Copyright © 2002-2006 Fenix Team (Fenix) + * Copyright © 1999-2002 José Luis Cebrián Pagüe (Fenix) + * + * This file is part of Bennu - Game Development + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * + * 3. This notice may not be removed or altered from any source + * distribution. + * + */ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#include "bgddl.h" + +#include "files.h" +#include "xstrings.h" + +/* STRINGS */ + +/** LEN (STRING SOURCE) + * Returns the size of a string + */ + +static int modstring_strlen( INSTANCE * my, int * params ) +{ + const char * str = string_get( params[0] ) ; + int r = str ? strlen( str ) : 0 ; + string_discard( params[0] ) ; + return r ; +} + +/** STRING UCASE (STRING SOURCE) + * Converts a string to upper-case + */ + +static int modstring_strupper( INSTANCE * my, int * params ) +{ + int r = string_ucase( params[0] ) ; + string_discard( params[0] ) ; + string_use( r ) ; + return r ; +} + +/** STRING LCASE (STRING SOURCE) + * Converts a string to lower-case + */ + +static int modstring_strlower( INSTANCE * my, int * params ) +{ + int r = string_lcase( params[0] ) ; + string_discard( params[0] ) ; + string_use( r ) ; + return r ; +} + +/** STRCASECMP (STRING S1, STRING S2) + * Compares two strings, case-insensitive + */ + +static int modstring_strcasecmp( INSTANCE * my, int * params ) +{ + int r = string_casecmp( params[0], params[1] ) ; + string_discard( params[0] ) ; + string_discard( params[1] ) ; + return r ; +} + +/** SUBSTR (STRING SOURCE, INT FIRST_CHARACTER, INT COUNT) + * Returns part of a given string, starting at the given character position + * and returning a string limited to COUNT characters + */ + +static int modstring_substr( INSTANCE * my, int * params ) +{ + int r = string_substr( params[0], params[1], ( params[2] < 0 ) ? ( params[2] - 1 ) : params[2] ) ; + string_discard( params[0] ) ; + string_use( r ) ; + return r ; +} + +/** SUBSTR (STRING SOURCE, INT FIRST_CHARACTER) + * Returns a substring, from the character given to the end of the source string + */ + +static int modstring_substr2( INSTANCE * my, int * params ) +{ + int r = string_substr( params[0], params[1], -1 ) ; + string_discard( params[0] ) ; + string_use( r ) ; + return r ; +} + +/** FIND (STRING SOURCE, STRING SUBSTRING) + * Searchs a substring in a string, and returns its position + */ + +static int modstring_strfind( INSTANCE * my, int * params ) +{ + int r = string_find( params[0], params[1], 0 ) ; + string_discard( params[0] ) ; + string_discard( params[1] ) ; + return r ; +} + +/** FIND (STRING SOURCE, STRING SUBSTRING, INT FIRST) + * Searchs a substring in a string, starting from the given position, and returns its position + */ + +static int modstring_strfindSSI( INSTANCE * my, int * params ) +{ + int r = string_find( params[0], params[1], params[2] ) ; + string_discard( params[0] ) ; + string_discard( params[1] ) ; + return r ; +} + +/** STRING LPAD (STRING SOURCE, LENGTH) + * Expands the string up to the given length, adding spaces at the left + */ + +static int modstring_lpad( INSTANCE * my, int * params ) +{ + int r = string_pad( params[0], params[1], 0 ); + string_discard( params[0] ); + string_use( r ); + return r; +} + +/** STRING RPAD (STRING SOURCE, LENGTH) + * Expands the string up to the given length, adding spaces at the right + */ + +static int modstring_rpad( INSTANCE * my, int * params ) +{ + int r = string_pad( params[0], params[1], 1 ); + string_discard( params[0] ); + string_use( r ); + return r; +} + +/** ITOA (INT VALUE) + * Converts an integer to string + */ + +static int modstring_itos( INSTANCE * my, int * params ) +{ + int r = string_itoa( params[0] ) ; + string_use( r ) ; + return r ; +} + +/** FTOA (FLOAT VALUE) + * Converts a floating-point number to string + */ + +static int modstring_ftos( INSTANCE * my, int * params ) +{ + int r = string_ftoa( *( float * ) & params[0] ) ; + string_use( r ) ; + return r ; +} + +/** ATOI (STRING VALUE) + * Converts a string to integer + */ + +static int modstring_stoi( INSTANCE * my, int * params ) +{ + const char * str = string_get( params[0] ) ; + int r = str ? atoi( str ) : 0 ; + string_discard( params[0] ) ; + return r ; +} + +/** ATOF (STRING VALUE) + * Converts a string to floating-point number + */ + +static int modstring_stof( INSTANCE * my, int * params ) +{ + const char * str = string_get( params[0] ) ; + float res = ( float )( str ? atof( str ) : 0 ); + string_discard( params[0] ) ; + return *(( int * )&res ) ; +} + +/** ASC(STRING C) + * Return the ASCII code of the first character at the string + */ + +static int modstring_asc( INSTANCE * my, int * params ) +{ + const unsigned char * str = ( unsigned char * ) string_get( params[0] ) ; + int r = str ? *str : '\0' ; + string_discard( params[0] ) ; + return r ; +} + +/** CHR(ASCII) + * Returns a string of length 1, with the character of the given ASCII code + */ + +static int modstring_chr( INSTANCE * my, int * params ) +{ + unsigned char buffer[2] = " " ; int r ; + buffer[0] = ( unsigned char ) params[0] ; + r = string_new( ( char * ) buffer ) ; + string_use( r ) ; + return r ; +} + +/** STRING TRIM(STRING SOURCE) + * Returns the given string, stripping any space characters at the beginning or the end + */ + +static int modstring_trim( INSTANCE * my, int * params ) +{ + int r = string_strip( params[0] ) ; + string_discard( params[0] ) ; + string_use( r ) ; + return r; +} + +#ifndef WIN32 +static char * strrev( char * str ) +{ + char *start = str; + char *left = str; + char ch; + + while ( *str++ ); str -= 2; + + while ( left < str ) + { + ch = *left; + *left++ = *str; + *str-- = ch; + } + + return( start ); +} +#endif + +/** STRING STRREV (STRING SOURCE) + * Returns the reverse of the source string + */ + +static int modstring_strrev( INSTANCE * my, int * params ) +{ + int r = string_new( string_get( params[0] ) ); + string_discard( params[0] ) ; + string_use( r ) ; + strrev(( char * ) string_get( r ) ); + return r; +} + +/** FORMAT (INT VALUE) + * Converts a given integer value to string form + */ + +static int modstring_formatI( INSTANCE * my, int * params ) +{ + int r = string_format( params[0], 0, '.', ',' ); + string_use( r ) ; + return r; +} + +/** FORMAT (FLOAT VALUE) + * Converts a given value to string form + */ + +static int modstring_formatF( INSTANCE * my, int * params ) +{ + int r = string_format( *( float * ) & params[0], -1, '.', ',' ); + string_use( r ) ; + return r; +} + +/** FORMAT (INT VALUE, INT DECIMALS) + * Converts a given integer value to string form. Uses a fixed number + * of decimals, as given with the second parameter. + */ + +static int modstring_formatFI( INSTANCE * my, int * params ) +{ + int r = string_format( *( float * ) & params[0], params[1], '.', ',' ); + string_use( r ) ; + return r; +} + +/* ----------------------------------------------------------------- */ +/* exports */ +/* ----------------------------------------------------------------- */ + +#include "mod_string_exports.h" + +/* ----------------------------------------------------------------- */ |