Changeset 444 for Daodan


Ignore:
Timestamp:
Jul 18, 2009, 11:38:22 AM (15 years ago)
Author:
rossy
Message:
 
Location:
Daodan
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • Daodan/src/BFW_ScriptingLanguage.h

    r440 r444  
    2727} sl_arg;
    2828
    29 typedef uint16_t (ONICALL *sl_func)(void* dontuse0, uint32_t numargs, sl_arg args[], void* dontuse1, void* dontuse2, sl_arg* ret);
     29typedef struct {
     30        char*    name;
     31        char*    calllocation; //maybe
     32} sl_callinfo;
     33
     34typedef uint16_t (ONICALL *sl_func)(sl_callinfo* callinfo, uint32_t numargs, sl_arg args[], void* dontuse1, void* dontuse2, sl_arg* ret);
    3035
    3136uint16_t ONICALL SLrScript_Command_Register_ReturnType(char* name, char* desc, char* argfmt, sl_type type, sl_func callback);
  • Daodan/src/Daodan_BSL.c

    r443 r444  
    44
    55#include "Daodan_BSL.h"
     6#include "Daodan_Utility.h"
     7#include "Daodan_Console.h"
    68#include "BFW_ScriptingLanguage.h"
    79#include "Oni.h"
     
    911#include "dSFMT\dSFMT.h"
    1012
    11 uint16_t ONICALL bsl_int32mul(void* dontuse0, uint32_t numargs, sl_arg args[], void* dontuse1, void* dontuse2, sl_arg* ret)
     13uint16_t ONICALL bsl_int32mul(sl_callinfo* callinfo, uint32_t numargs, sl_arg args[], void* dontuse1, void* dontuse2, sl_arg* ret)
    1214{
    1315        if (numargs < 2)
     
    1820}
    1921
    20 uint16_t ONICALL bsl_mul(void* dontuse0, uint32_t numargs, sl_arg args[], void* dontuse1, void* dontuse2, sl_arg* ret)
     22uint16_t ONICALL bsl_mul(sl_callinfo* callinfo, uint32_t numargs, sl_arg args[], void* dontuse1, void* dontuse2, sl_arg* ret)
    2123{
    2224        if (numargs < 2)
     
    4143}
    4244
    43 uint16_t ONICALL bsl_int32div(void* dontuse0, uint32_t numargs, sl_arg args[], void* dontuse1, void* dontuse2, sl_arg* ret)
     45uint16_t ONICALL bsl_int32div(sl_callinfo* callinfo, uint32_t numargs, sl_arg args[], void* dontuse1, void* dontuse2, sl_arg* ret)
    4446{
    4547        if (numargs < 2)
     
    5052}
    5153
    52 uint16_t ONICALL bsl_div(void* dontuse0, uint32_t numargs, sl_arg args[], void* dontuse1, void* dontuse2, sl_arg* ret)
     54uint16_t ONICALL bsl_div(sl_callinfo* callinfo, uint32_t numargs, sl_arg args[], void* dontuse1, void* dontuse2, sl_arg* ret)
    5355{
    5456        if (numargs < 2)
     
    7375}
    7476
    75 uint16_t ONICALL bsl_int32rand(void* dontuse0, uint32_t numargs, sl_arg args[], void* dontuse1, void* dontuse2, sl_arg* ret)
     77uint16_t ONICALL bsl_int32rand(sl_callinfo* callinfo, uint32_t numargs, sl_arg args[], void* dontuse1, void* dontuse2, sl_arg* ret)
    7678{
    7779        if (numargs < 2)
     
    99101}
    100102
    101 uint16_t ONICALL bsl_getkills(void* dontuse0, uint32_t numargs, sl_arg args[], void* dontuse1, void* dontuse2, sl_arg* ret)
     103uint16_t ONICALL bsl_getkills(sl_callinfo* callinfo, uint32_t numargs, sl_arg args[], void* dontuse1, void* dontuse2, sl_arg* ret)
    102104{
    103105        int index;
     
    110112}
    111113
    112 uint16_t ONICALL bsl_getdamage(void* dontuse0, uint32_t numargs, sl_arg args[], void* dontuse1, void* dontuse2, sl_arg* ret)
     114uint16_t ONICALL bsl_getdamage(sl_callinfo* callinfo, uint32_t numargs, sl_arg args[], void* dontuse1, void* dontuse2, sl_arg* ret)
    113115{
    114116        int index;
     
    120122        return 0;
    121123}
    122 
    123 uint16_t ONICALL bsl_sprintf(void* dontuse0, uint32_t numargs, sl_arg args[], void* dontuse1, void* dontuse2, sl_arg* ret)
     124/*
     125uint16_t ONICALL bsl_sprintf(sl_callinfo* callinfo, uint32_t numargs, sl_arg args[], void* dontuse1, void* dontuse2, sl_arg* ret)
    124126{
    125127        if (numargs < 2)
     
    127129
    128130        char output[255];
    129         char temp[255];
    130         int i = 1;
    131         for(i; i < numargs; i++)        {
    132                 sprintf(output, args[0].value_str32, args[i].value_str32);/*
    133                 if(args[i].type == sl_int32 || args[i].type == sl_bool) {
    134                         sprintf(temp, "%i",args[i].value_int32);
    135                         sprintf(output, args[0].value_str32, temp); }
    136                 else if(args[i].type == sl_float) {
    137                         sprintf(temp, "%f",args[i].value_float);
    138                         sprintf(output, args[0].value_str32, temp); }
    139                 else*/
     131        int i;
     132        for(i = 1; i < numargs; i++)    {
     133                sprintf(output, args[0].value_str32, args[i].value_str32);
    140134        }
    141135       
     
    144138        return 0;
    145139}
    146 /*
    147 char* sprintf_return = NULL;
    148 uint16_t ONICALL bsl_sprintf(void* dontuse0, uint32_t numargs, sl_arg args[], void* dontuse1, void* dontuse2, sl_arg* ret)
    149 {
    150         if (!sprintf_return)
    151                 sprintf_return = malloc(4096);
     140*/
     141uint16_t ONICALL bsl_sprintf(sl_callinfo* callinfo, uint32_t numargs, sl_arg args[], void* dontuse1, void* dontuse2, sl_arg* ret)
     142{
     143        int ffi_ret;
     144        char* str = NULL;
     145        int size = 0;
    152146       
    153147        ffi_cif cif;
    154         ffi_type *ffi_args[256];
    155         void *values[256];
    156         int ffi_ret;
     148        ffi_type* ffi_args[256];
     149        void* values[256];
    157150       
    158151        ffi_args[0] = &ffi_type_pointer;
    159         values[0] = sprintf_return;
     152        values[0] = &str;
    160153        ffi_args[1] = &ffi_type_uint32;
    161         values[1] = (void*)4095;
     154        values[1] = &size;
    162155       
    163156        int i;
    164157        for(i = 2; i < numargs + 2; i ++)
    165158        {
    166                 ffi_args[i] = &ffi_type_pointer;
    167                 values[i] = args[i - 2].value;
    168         }
    169        
    170         ffi_prep_cif(&cif, FFI_DEFAULT_ABI, i, &ffi_type_sint32, ffi_args);
     159                if (args[i - 2].type == sl_float)
     160                {
     161                        float value_float = args[i - 2].value_float;
     162                        double* value_double = (double*)&(args[i - 2]);
     163                        *value_double = value_float;
     164                       
     165                        ffi_args[i] = &ffi_type_double;
     166                        values[i] = value_double;
     167                }
     168                else
     169                {
     170                        ffi_args[i] = &ffi_type_pointer;
     171                        values[i] = &(args[i - 2].value);
     172                }
     173        }
     174       
     175        if (ffi_prep_cif(&cif, FFI_DEFAULT_ABI, i, &ffi_type_sint32, ffi_args) != FFI_OK)
     176                MessageBox(0, "", "", 0);
    171177        ffi_call(&cif, (void*)snprintf, (void*)&ffi_ret, values);
    172        
    173         ret->value_str32 = sprintf_return;
     178        str = malloc(ffi_ret + 1);
     179        size = ffi_ret + 1;
     180        ffi_call(&cif, (void*)snprintf, (void*)&ffi_ret, values);
     181        ret->value_str32 = str;
    174182        ret->type = sl_str32;
    175183        return 0;
    176184}
    177 */
    178185
    179186void SLrDaodan_Initalize()
  • Daodan/src/Oni_Symbols.S

    r442 r444  
    5353symbol ( @ONrGameState_GetPlayerCharacter@0        , 0x000b63a7 )
    5454symbol ( @ONrGetActiveCharacter@4                                  , 0x000f1180 )
     55
    5556// Console
    56 
    57 symbol ( @TSrContext_DrawText@20                         , 0x0002DF00 )
    58 symbol ( @TSrContext_New@24                                      , 0x0002EA30 )
    59 symbol ( @TMrInstance_GetDataPtr@12                      , 0x000232E0 )
     57symbol ( @TSrContext_DrawText@20                   , 0x0002DF00 )
     58symbol ( @TSrContext_New@24                        , 0x0002EA30 )
     59symbol ( @TMrInstance_GetDataPtr@12                , 0x000232E0 )
    6060
    6161symbol ( @COrTextArea_Print@28                     , 0x00031340 )
     62
    6263symbol ( _COgConsoleLines                          , 0x001cb468 )
    6364symbol ( _COgFadeTimeValue                         , 0x00133f68 )
     
    6768// ScriptingLanguage
    6869symbol ( @SLrScript_Command_Register_ReturnType@20 , 0x00077b20 )
     70symbol ( @SLrScript_Command_Register_Void@16       , 0x00077b40 )
     71symbol ( @SLrGlobalVariable_Register_Int32@12      , 0x00077e30 )
     72symbol ( @SLrGlobalVariable_Register_Float@12      , 0x00077ec0 )
    6973
Note: See TracChangeset for help on using the changeset viewer.