Fixed byref variable pointer from rcbasic_build dev generator

This commit is contained in:
n00b
2024-09-16 22:20:09 -04:00
parent 526478b618
commit a5aedb1fa7
11 changed files with 2547 additions and 2515 deletions

View File

@@ -640,19 +640,19 @@ void rcbasic_export_dev()
case ID_TYPE_NUM:
output_line += "ID_TYPE_NUM);";
//fn_line += "num_var[" + rc_intToString(id[i].fn_arg_vec[n]) + "].nid_value[0].value[0]";
fn_line += "num_var[" + rc_intToString(id[i].fn_arg_vec[n]) + "].nid_value.value[ num_var[" + rc_intToString(id[i].fn_arg_vec[n]) + "].byref_offset ]";
fn_line += "num_var[" + rc_intToString(id[i].fn_arg_vec[n]) + "].nref[0].value[ num_var[" + rc_intToString(id[i].fn_arg_vec[n]) + "].byref_offset ]";
break;
case ID_TYPE_BYREF_NUM:
output_line += "ID_TYPE_BYREF_NUM);";
fn_line += "num_var[" + rc_intToString(id[i].fn_arg_vec[n]) + "].nid_value.value[ num_var[" + rc_intToString(id[i].fn_arg_vec[n]) + "].byref_offset ]";
fn_line += "num_var[" + rc_intToString(id[i].fn_arg_vec[n]) + "].nref[0].value[ num_var[" + rc_intToString(id[i].fn_arg_vec[n]) + "].byref_offset ]";
break;
case ID_TYPE_STR:
output_line += "ID_TYPE_STR);";
fn_line += "str_var[" + rc_intToString(id[i].fn_arg_vec[n]) + "].sid_value.value[ str_var[" + rc_intToString(id[i].fn_arg_vec[n]) + "].byref_offset ]";
fn_line += "str_var[" + rc_intToString(id[i].fn_arg_vec[n]) + "].sref[0].value[ str_var[" + rc_intToString(id[i].fn_arg_vec[n]) + "].byref_offset ]";
break;
case ID_TYPE_BYREF_STR:
output_line += "ID_TYPE_BYREF_STR);";
fn_line += "str_var[" + rc_intToString(id[i].fn_arg_vec[n]) + "].sid_value.value[ str_var[" + rc_intToString(id[i].fn_arg_vec[n]) + "].byref_offset ]";
fn_line += "str_var[" + rc_intToString(id[i].fn_arg_vec[n]) + "].sref[0].value[ str_var[" + rc_intToString(id[i].fn_arg_vec[n]) + "].byref_offset ]";
break;
case ID_TYPE_USER:
//fn_arg_utype = "";

View File

@@ -8,6 +8,8 @@ void init_embedded_functions()
add_embedded_arg("txt$", ID_TYPE_STR);
embed_function("Input$", ID_TYPE_FN_STR);
add_embedded_arg("prompt$", ID_TYPE_STR);
embed_function("tst", ID_TYPE_SUB);
add_embedded_arg("x", ID_TYPE_BYREF_NUM);
embed_function("ArrayDim", ID_TYPE_FN_NUM);
add_embedded_arg("id", ID_TYPE_BYREF_NUM);
embed_function("StringArrayDim", ID_TYPE_FN_NUM);

Binary file not shown.

View File

@@ -55,6 +55,7 @@
#include "rc_audio.h"
#include "rc_net.h"
#include "rc_video.h"
#include "rc_test.h"
#include <irrtheora.h>
@@ -4322,10 +4323,10 @@ void rcbasic_init()
}
void rcbasic_clean()
{
rc_audio_quit();
{
rc_audio_quit();
rc_net_quit();
rc_gfx_quit();
rc_gfx_quit();
byref_addr_table.empty();
loop_stack.empty();
n_stack.empty();
@@ -4472,7 +4473,9 @@ int main(int argc, char * argv[])
cout << "++Could not load rcbasic program" << endl;
//rc_cleanSubprocessSystem();
rcbasic_clean();
rcbasic_clean();
exit(rcbasic_exit_code);
//cout << "Hello world!" << endl;

View File

@@ -80,7 +80,7 @@ bool rc_audio_init()
return true;
}
bool rc_audio_quit()
void rc_audio_quit()
{
for(int i = 0; i < rc_sound.size(); i++)
{
@@ -92,8 +92,6 @@ bool rc_audio_quit()
Mix_FreeMusic(rc_music);
rc_music = NULL;
Mix_Quit();
return true;
}
int rc_queryAudioSpec(double * freq, double * format, double * channels)

File diff suppressed because it is too large Load Diff

View File

@@ -4,6 +4,9 @@ case FN_Fprint: //Sub Procedure
case FN_Input$: //String Function
rc_push_str(rc_input( INPUT$_PROMPT$ ));
break;
case FN_tst: //Sub Procedure
rc_tst( &TST_X );
break;
case FN_ArrayDim: //Number Function
//DUMMY CASE

View File

@@ -210,18 +210,18 @@ bool rc_gfx_init()
}
bool rc_gfx_quit()
void rc_gfx_quit()
{
irrtheora::stopVideo();
irrtheora::deleteVideo();
if(irrtheora::videoExists())
{
irrtheora::stopVideo();
irrtheora::deleteVideo();
}
if(device)
device->drop();
SDL_Quit();
return true;
}
bool rc_windowOpenEx(std::string title, int x, int y, int w, int h, uint32_t window_flags, irr::u8 AntiAlias, bool stencil_buffer, bool vsync)
@@ -330,6 +330,7 @@ void rc_closeWindow_hw()
rc_font.clear();
device->drop();
device = NULL;
}
void rc_cls()

View File

@@ -201,6 +201,7 @@ void setSolidProperties(int actor)
void rc_setActorCollisionShape(int actor_id, int shape_type, double mass)
{
//std::cout << "Start ColShape" << std::endl;
if(rc_actor[actor_id].physics.rigid_body)
{
rc_physics3D.world->removeCollisionObject(rc_actor[actor_id].physics.rigid_body, false);
@@ -213,6 +214,8 @@ void rc_setActorCollisionShape(int actor_id, int shape_type, double mass)
if(!rc_actor[actor_id].physics.isSolid)
mass = 1;
//std::cout << "NEXT" << std::endl;
switch(shape_type)
{
case RC_NODE_SHAPE_TYPE_NONE:
@@ -253,6 +256,7 @@ void rc_setActorCollisionShape(int actor_id, int shape_type, double mass)
case RC_NODE_SHAPE_TYPE_CAPSULE:
{
//std::cout << "CAPSULE" << std::endl;
rc_actor[actor_id].physics.shape_type = RC_NODE_SHAPE_TYPE_CAPSULE;
ICapsuleShape* shape;
@@ -6593,12 +6597,14 @@ void rc_setCameraRotation(double x, double y, double z)
void rc_getCameraRotation(double* x, double* y, double* z)
{
if(!(rc_active_canvas > 0 && rc_active_canvas < rc_canvas.size()))
if(rc_active_canvas <= 0 || rc_active_canvas >= rc_canvas.size())
return;
*x = rc_canvas[rc_active_canvas].camera.rx;
*y = rc_canvas[rc_active_canvas].camera.ry;
*z = rc_canvas[rc_active_canvas].camera.rz;
//std::cout << "Get Rotation: " << x[0] << ", " << y[0] << ", " << z[0] << std::endl;
}
void rc_rotateCamera(double x, double y, double z)

View File

@@ -98,8 +98,13 @@ bool rc_net_init()
return true;
}
bool rc_net_quit()
void rc_net_quit()
{
if(rc_socket_set)
{
SDLNet_FreeSocketSet(rc_socket_set);
rc_socket_set = NULL;
}
SDLNet_Quit();
}

12
rcbasic_runtime/rc_test.h Normal file
View File

@@ -0,0 +1,12 @@
#ifndef RC_TEST_H_INCLUDED
#define RC_TEST_H_INCLUDED
void rc_tst(double* z)
{
std::cout << "this is a test" << std::endl;
*z = 37;
std::cout << "the end" << std::endl;
}
#endif // RC_TEST_H_INCLUDED