📄 var.cpp
字号:
#include"type.cpp"
#include"bastype.cpp"
/*-----------CLASS---------------*/
uchar VAR::SETFVAR(uchar a[],float x)
{register uchar i;
strupr(a);
if(strchr(a,'(')){setarray(a,x);return 0;}
if(thelastchar(a)=='!')dellastchar(a);
for(i=0;i<FVMAX;i++)
if(strcmp(FLOATVARNAME.p+(i<<4),a)==0){*(FLOATVAR+i)=x;return i;}
for(i=0;i<30;i++)
if(*(FLOATVARNAME.p+(i<<4))==0)
{
strcpy(FLOATVARNAME.p+(i<<4),a);*(FLOATVAR+i)=x;
if(i>=FVMAX)FVMAX=i+1;
return i;
}
}
uchar VAR::SETIVAR(uchar a[],int x)
{register uchar i;
strupr(a);
if(strchr(a,'(')){setarray(a,x);return 0;}
if(thelastchar(a)=='%')dellastchar(a);
for(i=0;i<IVMAX;i++)
if(strcmp(INTVARNAME.p+(i<<4),a)==0){*(INTVAR+i)=x;return i;}
for(i=0;i<30;i++)
if(*(INTVARNAME.p+(i<<4))==0)
{
strcpy(INTVARNAME.p+(i<<4),a);*(INTVAR+i)=x;
if(i>=IVMAX)IVMAX=i+1;
return i;
}
}
uchar VAR::SETSVAR(uchar a[],uchar far*x)
{register uchar i;
strupr(a);
if(thelastchar(a)=='$')dellastchar(a);
for(i=0;i<SVMAX;i++)
if(strcmp(STRVARNAME.p+(i<<4),a)==0){strcpy(STRVAR+(i<<8),x);return i;}
for(i=0;i<30;i++)
if(*(STRVARNAME.p+(i<<4))==0)
{
strcpy(STRVARNAME.p+(i<<4),a);strcpy(STRVAR+(i<<8),x);
if(i>=SVMAX)SVMAX=i+1;
return i;
}
}
int VAR::GETIVAR(uchar a[])
{register uchar i;
strupr(a);
if(thelastchar(a)=='%')dellastchar(a);
for(i=0;i<IVMAX;i++)
if(strcmp(a,INTVARNAME.p+(i<<4))==0)
return *(INTVAR+i);
return 0;
}
float VAR::GETFVAR(uchar a[])
{register uchar i;
strupr(a);
if(thelastchar(a)=='!')dellastchar(a);
for(i=0;i<FVMAX;i++)
if(strcmp(a,FLOATVARNAME.p+(i<<4))==0)
return *(FLOATVAR+i);
return 0;
}
uchar far*VAR::GETSVAR(uchar a[])
{register uchar i;
strupr(a);
if(thelastchar(a)=='$')dellastchar(a);
for(i=0;i<SVMAX;i++)
if(strcmp(a,STRVARNAME.p+(i<<4))==0)
return (STRVAR+(i<<8));
return 0;
}
void VAR::DELIVAR(uchar a[])
{register uchar i;
for(i=0;i<IVMAX;i++)
if(strcmp(a,INTVARNAME.p+(i<<4))==0)
{*(INTVARNAME.p+(i<<4))=0;if(i+1==SVMAX)SVMAX--;}
}
void VAR::DELFVAR(uchar a[])
{register uchar i;
for(i=0;i<FVMAX;i++)
if(strcmp(a,FLOATVARNAME.p+(i<<4))==0)
{*(FLOATVARNAME.p+(i<<4))=0;if(i+1==SVMAX)SVMAX--;}
}
void VAR::DELSVAR(uchar a[])
{register uchar i;
for(i=0;i<SVMAX;i++)
if(strcmp(a,STRVARNAME.p+(i<<4))==0)
{*(STRVARNAME.p+(i<<4))=0;if(i+1==SVMAX)SVMAX--;}
}
void VAR::CHGIVAR(uchar n,int f)
{
*(INTVAR+(n<<1))=f;
}
void VAR::CHGFVAR(uchar n,float f)
{
*(FLOATVAR+(n<<2))=f;
}
void VAR::CHGSVAR(uchar n,uchar far*f)
{
strcpy(STRVAR+(n<<8),f);
}
void VAR::CLEANVAR()
{
setmem(INTVARNAME.p,4096,0);
setmem(FLOATVARNAME.p,8192,0);
}
uchar VAR::VARNUM(uchar a[])
{register uchar i,huge*namp;uint max;uchar a1[32];
strcpy(a1,a);strupr(a1);
switch(thelastchar(a1))
{
case '$':dellastchar(a1);namp=STRVARNAME.p;max=SVMAX;break;
case '%':dellastchar(a1);namp=INTVARNAME.p;max=IVMAX;break;
default :namp=FLOATVARNAME.p;max=FVMAX;break;
}
for(i=0;i<max;i++)
if(strcmp((const char*)(namp+(i<<4)),a1)==0)return i;
return 0xff;
}
/*---------------ARRAY-------------------*/
XMS*array[32];uint maxa=0;
uchar arraytype[32];
uchar arrayname[32][32];
uchar lengofvar[3]={2,4,255};
double getarray(uchar a[],uchar*i)
{uint cf=1;uchar far*p;uchar b[64],j;ulong xb;
strcpy(b,a);j=*i;
p=b+*i-1;b[*i]=0;
while((isalnum(*p)||*p=='%'||*p=='!')&&p<=b)p--;
p=b+*i+1;
for(;;)
{
switch(*p)
{case '(':cf++;break;
case ')':cf--;break;
case 0:ERR(1);return 0;
}
if(cf==0)break;
p++;
}
*p=0;
*i=p-b;xb=CALC(b+j+1);
return getarraydat(b,xb);
}
double getarraydat(uchar*a,ulong b)
{register uint i;uchar at;uint r1;float r2;
uchar a1[64];
oncemore:
strcpy(a1,a);
switch(thelastchar(a1))
{case '%':dellastchar(a1);at=1;break;
case '$':dellastchar(a1);at=3;break;
case '!':dellastchar(a1);
default: at=2;break;
}
for(i=0;i<maxa;i++)
if(strcmp(a1,arrayname[i])==0&&arraytype[i]==at)
{
switch(at)
{case 1:array[i]->X2B((ulong)b<<1,(uchar huge*)&r1,2);
return r1;
case 2:array[i]->X2B((ulong)b<<2,(uchar huge*)&r2,4);
return r2;
}
}
if(b>10){ERR(19);return 0;}
creatarray(a,10);
goto oncemore;
}
uchar creatarray(uchar a[],ulong b)
{register uint i;uchar at;uint r1;float r2;uchar buf0[1024];
uchar a1[64];strcpy(a1,a);b++;
switch(thelastchar(a1))
{case '%':dellastchar(a1);at=1;break;
case '$':dellastchar(a1);at=3;break;
case '!':dellastchar(a1);
default: at=2;break;
}
array[maxa]=new XMS((lengofvar[at]*(ulong)b+1023)/1024);
r1=array[maxa]->xl/1024;
setmem(buf0,1024,0);
for(i=0;i<r1;i++)
array[maxa]->B2X(buf0,i<<10,1024);
strcpy(arrayname[maxa],a1);
arraytype[maxa]=at;
maxa++;
return maxa-1;
}
void setarray(uchar a[],double b)
{uchar huge*p,a1[64];
strcpy(a1,a);p=strchr(a1,'(');
*p=0;
p++;dellastchar(p);
setarraydat(a1,CALC(p),b);
}
void setarraydat(uchar a[],ulong b,double d)
{register uint i;uchar at;uint r1;float r2;uchar a1[64];
oncemore:
strcpy(a1,a);r1=d;r2=d;
switch(thelastchar(a1))
{case '%':dellastchar(a1);at=1;break;
case '$':dellastchar(a1);at=3;break;
case '!':dellastchar(a1);
default: at=2;break;
}
for(i=0;i<maxa;i++)
if(strcmp(a1,arrayname[i])==0&&arraytype[i]==at)
{
switch(at)
{case 1:array[i]->B2X((uchar huge*)&r1,(ulong)b<<1,2);break;
case 2:array[i]->B2X((uchar huge*)&r2,(ulong)b<<2,4);break;
}
return;
}
if(b>10){ERR(19);return;}
creatarray(a,10);
goto oncemore;
}
void cleanarray()
{register uint i;
for(i=0;i<maxa;i++)
delete array[i];
maxa=0;
}
void delarray(uchar a[])
{register uchar i,j;uchar at;
uchar a1[64];
strcpy(a1,a);
switch(thelastchar(a1))
{case '%':dellastchar(a1);at=1;break;
case '$':dellastchar(a1);at=3;break;
case '!':dellastchar(a1);
default: at=2;break;
}
for(i=0;i<maxa;i++)
if(strcmp(a1,arrayname[i])==0&&arraytype[i]==at)
{
movmem(arraytype+i+1,arraytype+i,32-i);
movmem(arrayname+i+1,arrayname+i,1024-(i<<5));
for(j=i;j<32;j++)
*array[j]=*array[j+1];
maxa--;return;
}
ERR(19);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -