📄 basic3.c
字号:
/*
if ((i.var = (char *)MemAlloc(Strlen(token)+1)) == (char *)Null) serror(1);
else
{
Strcpy(i.var,token);
*(i.var + Strlen(token)) = 0;
}
*/
get_token(0);
if(*token != '=')
{
/* MemFree(i.var);*/
serror(38);
}
/* value = GetAllocBuf();
get_exp(value);*/
temp = TmpBuf + 18 * 120;
Memset(temp, 0, 120);
get_exp(temp);
if ((value = (char *)MemAlloc( Strlen(temp) + 1 )) != (char *)Null)
{
Strcpy(value,temp);
*(value+Strlen(value)) = 0;
}
else
{
/*MemFree(i.var);*/
serror(1);
}
if (*value!=REAL_TYPE&&*value!=INTEGER_TYPE)
{
/*MemFree(i.var);*/
MemFree(value);
serror(38);
}
if ((i.var = (char *)MemAlloc( Strlen(var_tmp) + 1 )) == (char *)Null)
{
MemFree(value);
serror(1);
}
else
{
Strcpy(i.var,var_tmp);
*(i.var + Strlen(i.var)) = 0;
}
value1 = atof(value+1);
if (!agree_v(i.var,value))
{
MemFree(i.var);
MemFree(value);
serror(38);
}
p = search_vartree(i.var);
if (p==(bitnode *)Null) doingassign(i.var,value);
else
{
MemFree(p->value_addr);
p->value_addr = value;
MemFree(i.var);
i.var = p->var_addr;
}
get_token(0);
if(tok != TO) serror(38);
temp = GetAllocBuf();
get_exp(temp);
if (*temp != INTEGER_TYPE&&*temp != REAL_TYPE) serror(38);
i.target = atof(temp + 1);
get_token(0);
if (tok != STEP) i.step = 1;
else
{
temp = GetAllocBuf();
get_exp(temp);
if (*temp!=INTEGER_TYPE&&*temp!=REAL_TYPE) serror(38);
if ((i.step = atof(temp+1))==0) serror(38);
}
if (i.step > 0)
{
if(value1 <= i.target)
{
i.loc = prog;
fpush(&i);
}
else
{
while((tok != NEXT)&&(tok != FINISHED)) get_token(0);
if (tok == NEXT) get_token(0);
}
}
else
{
if (value1 >= i.target)
{
i.loc = prog;
fpush(&i);
}
else
{
while((tok != NEXT)&&(tok != FINISHED)) get_token(0);
if (tok == NEXT) get_token(0);
}
}
}
FAR void next()
{
for_stack_str i;
double value;
int value1;
bitnode *p;
char *result, *value_tmp;
result = GetAllocBuf();
get_next();
if (Stricmp(token,"next")==0) get_next();
p = (bitnode *)Null;
fpop(&i);
if (Stricmp(token,i.var)!=0) serror(38);
p = search_vartree(i.var);
if (Strchr(i.var,'%'))
{
value1 = atoi((char *)get_variables(i.var)+1) + (Int16)i.step;
sprintf(result+1,_Far("%d"), value1);
*result = INTEGER_TYPE;
value = value1;
}
else
{
value = atof((char *)get_variables(i.var)+1) + i.step;
gcvt(value,16,result+1);
/*sprintf(result+1,_Far("%.12f"), value);*/
*result = REAL_TYPE;
}
if ((value_tmp = (char*)MemAlloc(Strlen(result)+1))==(char*)Null) serror(1);
Strcpy(value_tmp,result);
MemFree(p->value_addr);
p->value_addr = value_tmp;
if (i.step>0&&value>i.target||i.step<0&&value<i.target) return;
fpush(&i);
prog = i.loc;
}
FAR void exec_read()
{
char *var, *fb;
bitnode *p;
p = (bitnode *)Null;
do {
get_token(0);
if (token_type==VARIABLE) ckvar(token);
if ((var = (char *)MemAlloc(Strlen(token)+1))==(char *)Null) serror(1); /***内存不足***/
Strcpy(var,token);
if (cur_buf==(data_str *)Null) {
MemFree(var);
serror(39);
}
if (!agree_v(var,cur_buf->value_addr)) {
MemFree(var);
serror(40);
}
p = search_vartree(var);
if (p!=(bitnode *)Null) {
MemFree(var);
fb = p->value_addr;
p->value_addr = cur_buf->value_addr;
MemFree(fb);
} else
doingassign(var,cur_buf->value_addr);
cur_buf = cur_buf->next;
get_token(0);
if ((tok!=EOL)&&(*token!=',')) serror(0);
} while (tok!=EOL);
}
FAR void exec_input()
{
char *pToken, *pTmpOut;
UInt8 *hEditWin;
if(setjmp(e_buf)) return;
InputFlag = 1;
InputError = 0;
get_token(0);
if(token_type==QUOTE)
{
Strcat(TmpOut,token);
get_token(0);
if(*token!=',') serror(41); /***Input语句出现语法错误***/
get_token(0);
}
if (token_type!=VARIABLE) serror(42);
ckvar(token);
if (Strstr(token,"()"))
{
pToken = token;
pTmpOut = TmpOut + Strlen(TmpOut);
while (*pToken!='(') *pTmpOut++ = *pToken++;
pToken += 2;
*pTmpOut = 0;
Strcat(TmpOut,pToken);
}
else
Strcat(TmpOut,token);
Strcat(TmpOut," : ");
Strcat(TmpOut,"?");
adjust_poutbuf(TmpOut);
hEditWin = GuiScrnEditGetEdit(hBasicWnd);
GuiEditSetText(hEditWin,TmpOut);
while (*prog==0x20||*prog==0x09) prog++;
if (*prog==',')
{
InputFlag = 1;
prog++;
}
else if (*prog==':'||*prog==0x0D)
{
InputFlag = 0;
prog++;
}
else
serror(41);
return;
}
FAR bitnode *search_vartree(char *s)
{
bitnode *p;
p = Variables;
while (p!=(bitnode *)Null)
{
if (Stricmp(p->var_addr,s)>0) p = p->lch;
else if (Stricmp(p->var_addr,s)<0) p = p->rch;
else break;
}
return p;
}
FAR void exec_GraphModeInput()
{
char *pToken, *pTmpOut, *tmp_buf;
UInt8 *hEditWin;
MEvent ev;
for(;;)
{
get_token(0);
if(token_type==QUOTE)
{
Strcat(TmpOut,token);
get_token(0);
if(*token!=',') serror(41); /***Input语句出现语法错误***/
get_token(0);
}
if (token_type!=VARIABLE) serror(42);
ckvar(token);
if (Strstr(token,"()"))
{
pToken = token;
pTmpOut = TmpOut + Strlen(TmpOut);
while (*pToken!='(') *pTmpOut++ = *pToken++;
pToken += 2;
*pTmpOut = 0;
Strcat(TmpOut,pToken);
}
else
Strcat(TmpOut,token);
Strcat(TmpOut," : ");
Strcat(TmpOut,"?");
adjust_poutbuf(TmpOut);
hEditWin = GuiScrnEditGetEdit(hBasicWnd);
GuiEditSetText((UInt8 *)hEditWin,(UInt8 *)TmpOut);
while (*prog==0x20||*prog==0x09) prog++;
tmp_buf = GetAllocBuf();
Strcpy(tmp_buf,TmpOut);
for (;;)
{
MsgGet(&ev);
if (ev.type==evKeyDown)
{
if (ev.x==cmVkEnter) break;
if (ev.x==cmVkEscape) serror(41);
if (ev.x<0x20||ev.x>0x80) continue;
*(TmpOut + Strlen(TmpOut) + 1 ) = 0;
*(TmpOut + Strlen(TmpOut)) = ev.x;
if (Strlen(TmpOut)>100) serror(1);
/*adjust_poutbuf(TmpOut);*/
GuiEditSetText(hEditWin,TmpOut);
}
}
Strcpy(TmpOut,tmp_buf);
SaveInputData();
if (*prog == ',')
{
prog++;
}
else if (*prog == 0x0d||*prog==':')
{
prog++;
break;
}
else
serror(41);
}
}
FAR void exec_circle() /***circle x0,y0,r,fill,type***/
{
UInt8 *hEditWin, saveBKMode;
char *value1, *value2, *value3, *option1, *option2, pCurBuf_s, *save;
if (!GTflag) serror(0);
save = (char *)Null;
hEditWin = GuiScrnEditGetEdit(hBasicWnd);
while (*prog==32) prog++;
if (*prog=='(')
{
option1 = prog;
while (*option1!=')'&&*option1!=0x0D&&*option1!=':') option1++;
if (*option1!=')') serror(0);
save = option1;
*option1 = 0x0D;
prog++;
}
value1 = GetAllocBuf();
pCurBuf_s = pCurBuf;
get_exp(value1); /***value1 = x0***/
pCurBuf = pCurBuf_s;
value2 = GetAllocBuf();
pCurBuf_s = pCurBuf;
while (*prog==0x20) prog++;
if (*prog!=',') serror(0);
prog++;
token_type = COMMAND;
get_exp(value2); /***value2 = y0***/
pCurBuf = pCurBuf_s;
value3 = GetAllocBuf();
pCurBuf_s = pCurBuf;
while (*prog==0x20) prog++;
if (*prog!=',') serror(0);
prog++;
token_type = COMMAND;
get_exp(value3); /***value = r***/
if (*value3!=INTEGER_TYPE&&*value3!=REAL_TYPE||Strchr(value3,'-')) serror(0); /***半径只可以为正数***/
pCurBuf = pCurBuf_s;
option1 = GetAllocBuf();
option2 = option1 + 25;
while (*prog==0x20) prog++;
if (*prog!=',')
{
if (*prog!=0x0D&&*prog!=':') serror(0);
Strcpy(option1,"11"); /***option1 = fill***/
Strcpy(option2,"11"); /***option2 = type***/
}
else
{
prog++;
token_type = COMMAND;
get_exp(option1); /*** option1 = fill ***/
if (*(option1+2)!=0) serror(0);
while (*prog==0x20) prog++;
if (*prog!=','&&*prog!=0x0D&&*prog!=':') serror(0);
if (*prog!=',') Strcpy(option2,"11"); /*** option2 = type ***/
else
{
prog++;
token_type = COMMAND;
get_exp(option2); /*** option2 = type ***/
if (*(option2 + 2) != 0) serror(0);
}
}
while (*prog==0x20) prog++;
if (*prog!=0x0D&&*prog!=':') serror(0);
saveBKMode = GraphGetBKMode((MDC*)hEditWin);
switch (*(option2+1)) { /*** type value ***/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -