⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 var.c

📁 redboy for gba 是BPNS为GBA编写的一个小软件。软件的邹形是BASIC高级语言解释执行器。几经修改和扩展
💻 C
字号:
//basci 变量管理

#include <CsAgb.h>
#include <malloc.h>
#include <rbasic.h>

extern void *mymalloc(u32 size);
extern void myfree(void *loc);

void give_int_val(u8 id,int val)
{
   if (id>rb_int_cnt)
   {
      rb_error=11;
      return;
   }
   rb_int_var[id]=val;
}

int get_int_val(u8 id)
{
   if (id>rb_int_cnt)
   {
      rb_error=11;
      return 0;
   }
   return rb_int_var[id];
}

void give_float_val(u8 id,double val)
{
   if (id>rb_float_cnt)
   {
      rb_error=11;
      return;
   }
   rb_float_var[id]=val;
}

double get_float_val(u8 id)
{
   if (id>rb_float_cnt)
   {
      rb_error=11;
      return 0.0;
   }
   return rb_float_var[id];
}
void give_str_val(u8 id,char *str)//字符串变量赋值
{
   int i=0;
   char *var=rb_str_var+id*str_max_len;
   if (id>rb_str_cnt)
   {
      rb_error=11;
      return;
   }
   while (str[i]!='\0' && i<str_max_len)
   {
      var[i]=str[i];
      i++;
    }
    var[i]='\0';
}
char *get_str_val(u8 id)
{
   if (id>rb_str_cnt)
   {
      rb_error=11;
      return NULL;
   }
   return rb_str_var+id*str_max_len;
}
void int_dim_reg(u8 id,u8 cnt)
{
   u8 i;
   if (rb_int_dim_indx[id]) {rb_error=2;return;}
   rb_int_dim[id]=(int *)mymalloc(sizeof(int)*cnt);
   if (rb_int_dim[id]==NULL) {rb_error=1;return;}
   for (i=0;i<cnt;i++) *(rb_int_dim[id]+i)=0;
   rb_int_dim_indx[id]=cnt;
}

int get_int_dim_val(u8 id,u8 indx)
{
   if (indx>rb_int_dim_indx[id] || indx==0)
   {
      rb_error=3;
      return 0;
   }
   else if(rb_int_dim_indx[id]==0 || rb_int_dim[id]==NULL)
   {
      rb_error=4;
      return 0;
   }
   return *(rb_int_dim[id]+indx-1);
}

void give_int_dim_val(u8 id,u8 indx,int val)
{
   if (indx>rb_int_dim_indx[id] || indx==0)
   {
      rb_error=3;
      return;
   }
   else if(rb_int_dim_indx[id]==0 || rb_int_dim[id]==NULL)
   {
      rb_error=4;
      return;
   }
   *(rb_int_dim[id]+indx-1)=val;
}

void free_int_dim()
{
   int i;
   for (i=0;i<rb_int_dim_cnt;i++)
   {
      if (rb_int_dim[i]!=NULL)
      {
         myfree(rb_int_dim[i]);
         rb_int_dim[i]=NULL;
         rb_int_dim_indx[i]=0;
      }
   }
   rb_int_dim_cnt=0;
}

void float_dim_reg(u8 id,u8 cnt)
{
   u8 i;
   if (rb_float_dim_indx[id]) {rb_error=3;return;}
   rb_float_dim[id]=(double *)mymalloc(sizeof(double)*cnt);
   if (rb_float_dim[id]==NULL) {rb_error=1;return;}
   for (i=0;i<cnt;i++) *(rb_float_dim[id]+i)=0.0;
   rb_float_dim_indx[id]=cnt;
}

void give_float_dim_val(u8 id,u8 indx,double val)
{
   if (rb_float_dim_indx[id]==0 || rb_float_dim[id]==NULL)
   {
      rb_error=4;
      return;
   }
   else if (indx>rb_float_dim_indx[id] || indx==0)
   {
      rb_error=3;
      return;
   }
   *(rb_float_dim[id]+indx-1)=val;
}

double get_float_dim_val(u8 id,u8 indx)
{
   if (rb_float_dim_indx[id]==0 || rb_float_dim[id]==NULL)
   {
      rb_error=4;
      return 0;
   }
   else if (indx>rb_float_dim_indx[id] || indx==0)
   {
      rb_error=3;
      return 0;
   }
   return *(rb_float_dim[id]+indx-1);
}

void free_float_dim()
{
   int i;
   for (i=0;i<rb_float_dim_cnt;i++)
   {
      if (rb_float_dim[i]!=NULL)
      {
         myfree(rb_float_dim[i]);
         rb_float_dim[i]=NULL;
      }
   }
   rb_float_dim_cnt=0;
}

int var_mem()//分配变量空间
{
   u8 i;
   if (rb_int_cnt)//分配整型变量空间
   {
      rb_int_var=(int *)mymalloc(sizeof(int)*rb_int_cnt);
      if (rb_int_var==NULL) return 1;
   }
   if (rb_float_cnt)//分配实型变量空间
   {
      rb_float_var=(double *)mymalloc(sizeof(double)*rb_float_cnt);
      if (rb_float_var==NULL) return 1;
   }
   if (rb_str_cnt)//分配字符串变量空间
   {
      rb_str_var=(char *)mymalloc(rb_str_cnt*str_max_len);
      if (rb_str_var==NULL) return 1;
   }
   if (rb_int_dim_cnt)//分配整型数组相关数据空间
   {
      rb_int_dim=(int **)mymalloc(rb_int_dim_cnt*4);
      rb_int_dim_indx=(u16 *)mymalloc(rb_int_dim_cnt*2);
      if (rb_int_dim==NULL || rb_int_dim_indx==NULL) return 1;
   }
   if (rb_float_dim_cnt)//分配浮点数组相关数据空间
   {
      rb_float_dim=(double **)mymalloc(rb_float_dim_cnt*4);
      rb_float_dim_indx=(u16 *)mymalloc(rb_float_dim_cnt*2);
      if (rb_float_dim==NULL || rb_float_dim_indx==NULL) return 1;
   }
   //初奴化数据
   for (i=0;i<rb_int_cnt;i++) rb_int_var[i]=0;
   for (i=0;i<rb_float_cnt;i++) rb_float_var[i]=0.0;
   for (i=0;i<rb_str_cnt;i++) rb_str_var[i*str_max_len]='\0';
   for (i=0;i<rb_int_dim_cnt;i++)
   {
      rb_int_dim[i]=NULL;
      rb_int_dim_indx[i]=0;
   }
   for (i=0;i<rb_float_dim_cnt;i++)
   {
      rb_float_dim[i]=NULL;
      rb_float_dim_indx[i]=0;
   }
   return 0;
}
void free_dim()
{
   int i;
   for (i=0;i<rb_float_dim_cnt;i++)
   {
      myfree(rb_float_dim[i]);
      rb_float_dim_indx[i]=0;
   }
   for (i=0;i<rb_int_dim_cnt;i++)
   {
      myfree(rb_int_dim[i]);
      rb_int_dim_indx[i]=0;
   }
}
void free_var()//释放变量空间
{
   myfree(rb_int_var);
   myfree(rb_float_var);
   myfree(rb_str_var);
   free_dim();
   myfree(rb_float_dim);
   myfree(rb_float_dim_indx);
   myfree(rb_int_dim);
   myfree(rb_int_dim_indx);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -