From ea1947ffcc606d757357398b24e74a3f4ecefa07 Mon Sep 17 00:00:00 2001 From: neonloop Date: Wed, 20 Oct 2021 14:54:27 +0000 Subject: Initial commit from steward-fu release --- modules/mod_text/mod_text.c | 309 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 309 insertions(+) create mode 100644 modules/mod_text/mod_text.c (limited to 'modules/mod_text/mod_text.c') diff --git a/modules/mod_text/mod_text.c b/modules/mod_text/mod_text.c new file mode 100644 index 0000000..207c6cd --- /dev/null +++ b/modules/mod_text/mod_text.c @@ -0,0 +1,309 @@ +/* + * 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 + +#include "bgdrtm.h" + +#include "bgddl.h" +#include "dlvaracc.h" + +#include "xstrings.h" + +#include "libgrbase.h" +#include "libfont.h" +#include "libtext.h" + +/* --------------------------------------------------------------------------- */ +/* Funciones de visualización de textos */ + +static int modtext_write( INSTANCE * my, int * params ) +{ + const char * text = string_get( params[4] ); + int r = text ? gr_text_new( params[0], params[1], params[2], params[3], text ) : 0 ; + string_discard( params[4] ); + return r ; +} + +/* --------------------------------------------------------------------------- */ + +static int modtext_write2( INSTANCE * my, int * params ) +{ + const char * text = string_get( params[5] ); + int r = text ? gr_text_new2( params[0], params[1], params[2], params[3], params[4], text ) : 0 ; + string_discard( params[5] ); + return r ; +} + +/* --------------------------------------------------------------------------- */ + +static int modtext_write_in_map( INSTANCE * my, int * params ) +{ + const char * text = string_get( params[1] ); + GRAPH * gr ; + if ( !text ) return 0 ; + gr = gr_text_bitmap( params[0], text, params[2] ); + string_discard( params[1] ); + if ( !gr ) return 0 ; + return gr->code ; +} + +/* --------------------------------------------------------------------------- */ +/* + * FUNCTION : __modtext_write_var + * + * Creates a new text associated with a variable + * + * FENIX LANG PARAMS: + * params[0] : fnt to use + * params[1] : X + * params[2] : Y + * params[3] : align + * params[4] : pointer + * params[5] : DCB_TYPE + * + * FENIX RETURN VALUE: + * Text ID for the newly created text + * + */ + +static int __modtext_write_var( int withz, INSTANCE * my, int * params ) +{ + DCB_TYPEDEF * var ; + int t = 0 ; + + if ( withz ) var =( DCB_TYPEDEF * )params[6]; + else var =( DCB_TYPEDEF * )params[5]; + + switch( var->BaseType[0] ) + { + case TYPE_FLOAT: + t = TEXT_FLOAT; + break; + + case TYPE_DWORD: + t = TEXT_DWORD; + break; + + case TYPE_WORD: + t = TEXT_WORD; + break; + + case TYPE_BYTE: + t = TEXT_BYTE; + break; + + case TYPE_STRING: + t = TEXT_STRING; + break; + + case TYPE_ARRAY: + if ( var->BaseType[1] == TYPE_CHAR ) + { + t = TEXT_CHARARRAY; + break ; + } + break; + + case TYPE_SBYTE: + t = TEXT_SBYTE; + break; + + case TYPE_CHAR: + t = TEXT_CHAR; + break; + + case TYPE_SHORT: + t = TEXT_SHORT; + break; + + case TYPE_INT: + t = TEXT_INT; + break; + + case TYPE_POINTER: + t = TEXT_POINTER; + break; + + default: + return -1; + break; + } + + if ( withz ) return gr_text_new_var2( params[0], params[1], params[2], params[3], params[4], ( void * )params[5], t ); + return gr_text_new_var( params[0], params[1], params[2], params[3], ( void * )params[4], t ); +} + +/* --------------------------------------------------------------------------- */ + +static int modtext_write_var( INSTANCE * my, int * params ) +{ + return __modtext_write_var( 0, my, params ); +} + +/* --------------------------------------------------------------------------- */ + +static int modtext_write_var2( INSTANCE * my, int * params ) +{ + return __modtext_write_var( 1, my, params ); +} + +/* --------------------------------------------------------------------------- */ +/* + * Same as modtext_write_var, but param[5] not given and always set to VAR_STRING + */ + +static int modtext_write_string( INSTANCE * my, int * params ) +{ + return gr_text_new_var( params[0], params[1], params[2], params[3], ( void * )params[4], TEXT_STRING ); +} + +/* --------------------------------------------------------------------------- */ + +static int modtext_write_string2( INSTANCE * my, int * params ) +{ + return gr_text_new_var2( params[0], params[1], params[2], params[3], params[4], ( void * )params[5], TEXT_STRING ); +} + +/* --------------------------------------------------------------------------- */ +/* + * Same as modtext_write_var, but param[5] not given and always set to VAR_INT + */ + +static int modtext_write_int( INSTANCE * my, int * params ) +{ + return gr_text_new_var( params[0], params[1], params[2], params[3], ( void * )params[4], TEXT_INT ); +} + +/* --------------------------------------------------------------------------- */ + +static int modtext_write_int2( INSTANCE * my, int * params ) +{ + return gr_text_new_var2( params[0], params[1], params[2], params[3], params[4], ( void * )params[5], TEXT_INT ); +} + +/* --------------------------------------------------------------------------- */ +/* + * Same as modtext_write_var, but param[5] not given and always set to VAR_FLOAT + */ + +static int modtext_write_float( INSTANCE * my, int * params ) +{ + return gr_text_new_var( params[0], params[1], params[2], params[3], ( void * )params[4], TEXT_FLOAT ); +} + +/* --------------------------------------------------------------------------- */ + +static int modtext_write_float2( INSTANCE * my, int * params ) +{ + return gr_text_new_var2( params[0], params[1], params[2], params[3], params[4], ( void * )params[5], TEXT_FLOAT ); +} + +/* --------------------------------------------------------------------------- */ + +static int modtext_move_text( INSTANCE * my, int * params ) +{ + gr_text_move( params[0], params[1], params[2] ); + return 1; +} + +/* --------------------------------------------------------------------------- */ + +static int modtext_move_text2( INSTANCE * my, int * params ) +{ + gr_text_move2( params[0], params[1], params[2], params[3] ); + return 1; +} + +/* --------------------------------------------------------------------------- */ + +static int modtext_delete_text( INSTANCE * my, int * params ) +{ + gr_text_destroy( params[0] ); + return 1; +} + +/* --------------------------------------------------------------------------- */ + +static int modtext_text_height( INSTANCE * my, int * params ) +{ + const char * str = string_get( params[1] ); + int result = gr_text_height( params[0], ( const unsigned char * ) str ); + string_discard( params[1] ); + return result ; +} + +/* --------------------------------------------------------------------------- */ + +static int modtext_text_width( INSTANCE * my, int * params ) +{ + const char * str = string_get( params[1] ); + int result = gr_text_width( params[0], ( const unsigned char * ) str ); + string_discard( params[1] ); + return result ; +} + +/* --------------------------------------------------------------------------- */ + +static int modtext_set_text_color( INSTANCE * my, int * params ) +{ + gr_text_setcolor( params[0] ); + return 1 ; +} + +/* --------------------------------------------------------------------------- */ + +static int modtext_set_text_color2( INSTANCE * my, int * params ) +{ + gr_text_setcolor2( params[0], params[1] ); + return 1 ; +} + +/* --------------------------------------------------------------------------- */ + +static int modtext_get_text_color( INSTANCE * my, int * params ) +{ + return( gr_text_getcolor() ); +} + +/* --------------------------------------------------------------------------- */ + +static int modtext_get_text_color2( INSTANCE * my, int * params ) +{ + return( gr_text_getcolor2( params[0] ) ); +} + +/* --------------------------------------------------------------------------- */ +/* exports */ +/* --------------------------------------------------------------------------- */ + +#include "mod_text_exports.h" + +/* --------------------------------------------------------------------------- */ -- cgit v1.2.3