📄 basic1.c
字号:
if (Strlen(r) + Strlen(h+1)>120) /*因为result最多只能装120个字节*/
{
MemFree(r);
MemFree(h);
serror(1);
}
Strcpy(result,r);
Strcat(result,h+1);
break;
default :
{
MemFree(r);
MemFree(h);
serror(24); /***字符串运算过程中,出现语法错误***/
}
}
break;
}
MemFree(r);
MemFree(h);
}
void exec_sin(char *v, char *result)
{
char *dot_pos;
if (*v!=INTEGER_TYPE&&*v!=REAL_TYPE)
{
MemFree(v);
serror(28);
}
/* if (*v==REAL_TYPE&&(dot_pos = Strchr(v+1,'.'))!=(char*)Null&&Strlen(dot_pos)>11)
sprintf(v+1,_Far("%.10f"),atof(v+1));*/
*result++ = REAL_TYPE;
*v = 1;
gcvt(sin(atof(v+1)),16,result);
}
void exec_cos(char *v, char *result)
{
char *dot_pos;
if (*v!=INTEGER_TYPE&&*v!=REAL_TYPE)
{
MemFree(v);
serror(28);
}
/* if (*v==REAL_TYPE&&(dot_pos = Strchr(v+1,'.'))!=(char*)Null&&Strlen(dot_pos)>11)
sprintf(v+1,_Far("%.10f"),atof(v+1));*/
*result++ = REAL_TYPE;
*v = 1;
gcvt(cos(atof(v+1)),16,result);
}
void exec_tan(char *v, char *result)
{
char *dot_pos;
if (*v!=INTEGER_TYPE&&*v!=REAL_TYPE)
{
MemFree(v);
serror(28);
}
/* if (*v==REAL_TYPE&&(dot_pos = Strchr(v+1,'.'))!=(char*)Null&&Strlen(dot_pos)>11)
sprintf(v+1,_Far("%.10f"),atof(v+1));*/
*result++ = REAL_TYPE;
*v = 1;
/* gcvt(sin(atof(v+1))/cos(atof(v+1)),16,result); */
gcvt(tan(atof(v+1)),16,result);
}
void exec_abs(char *v, char *result)
{
if (*v!=INTEGER_TYPE&&*v!=REAL_TYPE)
{
MemFree(v);
serror(28); /***绝对运算过程中,变量类型发生错误***/
}
else *result++ = *v++;
if (*v=='-') v++;
while ( *v != 0 ) *result++ = *v++;
*result = 0;
}
void exec_log(char *v, char *result)
{
char *dot_pos;
*result++ = REAL_TYPE;
if (*v!=INTEGER_TYPE&&*v!=REAL_TYPE)
{
MemFree(v);
serror(28);
}
if (*(v+1)=='-'||*(v+1)=='0'&&*(v+2)==0)
{
MemFree(v);
serror(25); /***对数运算出错,零和负数没有对数***/
}
/* if (*v==REAL_TYPE&&(dot_pos = Strchr(v+1,'.'))!=(char*)Null&&Strlen(dot_pos)>11)
{
sprintf(v+1,_Far("%.10f"),atof(v+1));
if (atof(v+1)==0)
{
MemFree(v);
serror(25);
}
}*/
if (!gcvt(ln(atof(v+1)),16,result))
{
MemFree(v);
serror(1);
}
}
void exec_sqr(char *v, char *result)
{
*result++ = REAL_TYPE;
if (*v!=INTEGER_TYPE&&*v!=REAL_TYPE||*(v+1)=='-'&&atof(v + 2)!=0)
{
MemFree(v);
serror(28); /***负数没有平方根***/
}
*v = 1;
if (!gcvt(sqrt(atof(v+1)),16,result))
{
MemFree(v);
serror(1);
}
}
void exec_int(char *v, char *result)
{
char *dot_ptr, *cursor, *r, convert_flag;
if (*v!=INTEGER_TYPE&&*v!=REAL_TYPE)
{
MemFree(v);
serror(28);
}
convert_flag = 0;
if (*(v+1)=='-'&&Strchr(v+1,'.'))
{
dot_ptr = Strchr(v+1,'.');
cursor = dot_ptr+1;
while ( *cursor != 0)
{
if (*cursor==0x30) cursor++;
else
{
convert_flag = 1;
break;
}
}
}
r = result;
*result++ = INTEGER_TYPE;
v++;
while ( *v != 0 && *v != '.' ) *result++ = *v++;
*result = 0;
if (convert_flag) itoa(atoi(r+1)-1,r+1,10);
}
void exec_exp(char *v, char *result)
{
char *dot_pos;
double temp_v;
if (*v!=INTEGER_TYPE&&*v!=REAL_TYPE)
{
MemFree(v);
serror(22);
}
/* if (*v==REAL_TYPE&&(dot_pos = Strchr(v+1,'.'))!=(char*)Null&&Strlen(dot_pos)>11)
sprintf(v+1,_Far("%.10f"),atof(v+1));*/
*result++ = REAL_TYPE;
*v = 1;
/*temp_v = atof(v+1);*/
temp_v = exp(atof(v+1));
if (temp_v == 1E17 || !gcvt(temp_v,16,result))
{
MemFree(v);
serror(1);
}
/*
if (temp_v<0)
gcvt(1/exp(-temp_v),10,result);
else
gcvt(exp(temp_v),10,result); */
}
void exec_atn(char *v, char *result)
{
char *dot_pos;
if (*v!=INTEGER_TYPE&&*v!=REAL_TYPE)
{
MemFree(v);
serror(22);
}
/* if (*v==REAL_TYPE&&(dot_pos = Strchr(v+1,'.'))!=(char*)Null&&Strlen(dot_pos)>11)
sprintf(v+1,_Far("%.10f"),atof(v+1)); */
*result++ = REAL_TYPE;
*v = 1;
gcvt(atan(atof(v+1)),16,result);
}
double bGetRnd()
{
TimeType time;
TimGetCurrTime(_Far(&time));
seed = (seed*2621+1+time.seconds)%8192;
return (double)seed/8192;
}
void exec_rnd(char *v, char *result)
{
if (*v!=INTEGER_TYPE&&*v!=REAL_TYPE)
{
MemFree(v);
serror(22);
}
*result++ = REAL_TYPE;
if (*(v+1)=='0') gcvt(PreRndNum,16,result);
else if (*(v+1)!='-')
{
PreRndNum = bGetRnd();
gcvt(PreRndNum,16,result);
}
else
{
PreRndNum = bGetRnd();
gcvt(PreRndNum,16,result);
}
}
void exec_not(char *v, char *result)
{
if (*v==STRING_TYPE)
{
MemFree(v);
serror(26); /***逻辑非运算中,出现语法错误***/
}
if (*v==BOOL_TYPE)
{
*result++ = *v++;
if (*v=='1') *result++ = '0';
else *result++ = '1';
}
else
{
*result++==BOOL_TYPE;
if (atof(v+1)!=0) *result++ = '0';
else *result++ = '1';
}
*result = 0;
}
void exec_asc(char *v, char *result)
{
if (*v != STRING_TYPE || *(v + 1) == 0)
{
MemFree(v);
serror(28);
}
if (*(v + 1) == 0xff) *(v + 1) = 0;
*result++ = INTEGER_TYPE;
itoa((UInt8)*(v+1),result,10);
}
void exec_chr(char *v, char *result)
{
int i;
if (!IsInteger(v)||Strchr(v+1,'-'))
{
MemFree(v);
serror(28);
}
if ((i = atoi(v+1))>255||i<32)
{
MemFree(v);
serror(28);
}
*result++ = STRING_TYPE;
*result++ = i;
*result = 0;
}
void exec_len(char *v, char *result)
{
int l;
char *p;
if (*v!=STRING_TYPE)
{
MemFree(v);
serror(28);
}
*result++ = INTEGER_TYPE;
l = 0;
p = v + 1;
while (*p != 0)
{
if ((UInt8)*p >= 0x80) p += 2;
else p++;
l++;
}
itoa(l,result,10);
}
void exec_str(char *v, char *result)
{
char *zero_pos;
if (*v!=INTEGER_TYPE&&*v!=REAL_TYPE)
{
MemFree(v);
serror(22);
}
IsInteger(v);
*result++ = STRING_TYPE;
Strcpy(result,v + 1);
}
void exec_val(char *v, char *result)
{
char *p, i, *v1;
if (*v!=STRING_TYPE)
{
MemFree(v);
serror(22);
}
*result++ = REAL_TYPE;
p = v + 1;
if (*p == '+' || *p == '-') p++;
if (*p == '.')
{
Strcpy(result,"0");
return;
}
i = 0;
while (*p == 0x30 && *(p + 1) == 0x30) p++;
if (*p == 0x30 && isdigit(*(p + 1))) p++;
v1 = p;
while (*p != 0)
{
if ( ( *p < 0x30 || *p > 0x39 ) && *p != 46 )
{
*p = 0;
break;
}
else
{
if (*p == 46) i++;
if (i>1)
{
*p = 0;
break;
}
p++;
}
}
if (*(v + 1)=='+')
{
if (*(v+2)==0) Strcpy(result,"0");
else Strcpy(result,v1);
}
else
{
if (*(v + 1)=='-')
{
if (*(v + 2) == 0) Strcpy(result,"0");
else {
*result++='-';
Strcpy(result,v1);
}
}
else
{
if (*(v + 1) == 0) Strcpy(result,"0");
else Strcpy(result,v1);
}
}
}
void exec_sgn(char *v, char *result)
{
if (*v!=INTEGER_TYPE&&*v!=REAL_TYPE)
{
MemFree(v);
serror(22);
}
else
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -