📄 basic7.c
字号:
#include "os.h"
#include "ptype.h"
#include "res.h"
FAR Int8 inkey();
FAR void exec_inkey();
FAR void exec_getkey();
FAR void exec_kbhit();
FAR void exec_mid();
FAR char *GetAllocBuf();
FAR void get_exp(char *result);
FAR UInt8 IsInteger(char *value_ptr);
FAR void serror(Int8 error);
FAR int atoi(char *x);
FAR Boolean GetValidNumber(char *p, int n);
FAR void SaveInputData();
FAR bitnode *search_vartree(char *s);
FAR char *get_type(char *s);
FAR void doingassign(char *var, char *value);
FAR void add_type(char *result, int data_type);
FAR int gcvt(double i, char flag, char *result);
extern jmp_buf e_buf;
extern char *prog;
extern char *token;
extern char *TmpOut;
extern char *pOutBuf;
extern char InputFlag;
extern UInt8 GTflag;
extern Int8 *TmpBuf, *TmpOut, pCurBuf, *pBasicFileName;
extern UInt16 keydown_buffer;
FAR void SaveInputData()
{
char *value_tmp, *value, *var, *fb, backup_inputflag;
bitnode *p;
int i,j;
if (!GTflag)
{
if(setjmp(e_buf)) return;
}
backup_inputflag = InputFlag;
InputFlag = 1;
value_tmp = GetAllocBuf();
if (Strlen(pOutBuf + Strlen(TmpOut)) > 100) serror(1);
Strcpy(value_tmp,pOutBuf + Strlen(TmpOut));
if (*value_tmp == 0) serror(41);
Strcpy(TmpOut,pOutBuf);
*(TmpOut + Strlen(TmpOut) + 1 ) = 0;
*(TmpOut + Strlen(TmpOut)) = 0x0D;
p = search_vartree(token);
if (p)
{
if (Strchr(token,'$'))
{
add_type(value_tmp,STRING_TYPE);
if ((value = (char *)MemAlloc(Strlen(value_tmp)+1)) == (char*)Null)
serror(1);
else
{
Strcpy(value,value_tmp);
*(value+Strlen(value_tmp)) = 0;
}
fb = p->value_addr;
p->value_addr = value;
MemFree(fb);
}
else if (Strchr(token,'%'))
{
if (*get_type(value_tmp)==REAL_TYPE)
{
if (value = Strchr(value_tmp,'.'))
{
*value = 0;
*value_tmp = INTEGER_TYPE;
}
if ((value = (char *)MemAlloc(Strlen(value_tmp)+1))==(char*)Null)
{
serror(1);
}
else
{
Strcpy(value,value_tmp);
*(value+Strlen(value_tmp))=0;
}
fb = p->value_addr;
p->value_addr = value;
MemFree(fb);
}
else
{
MemFree(value);
serror(41);
}
}
else
{
if (get_type(value_tmp)==(char *)Null) add_type(value_tmp,STRING_TYPE);
if ((value = (char *)MemAlloc(Strlen(value_tmp)+1))==(char*)Null)
{
serror(1);
}
else
{
Strcpy(value,value_tmp);
*(value+Strlen(value_tmp)) = 0;
}
fb = p->value_addr;
p->value_addr = value;
MemFree(fb);
}
}
else
{
if (!(var=(char *)MemAlloc(Strlen(token)+1)))
{
serror(1);
}
Strcpy(var,token);
if (Strchr(token,'$'))
{
add_type(value_tmp,STRING_TYPE);
if ((value = (char *)MemAlloc(Strlen(value_tmp)+1))==(char*)Null)
{
MemFree(var);
serror(1);
}
else
{
Strcpy(value,value_tmp);
*(value+Strlen(value_tmp))=0;
}
doingassign(var,value);
}
else if (Strchr(token,'%'))
{
if (*get_type(value_tmp)==REAL_TYPE)
{
if (value = Strchr(value_tmp,'.'))
{
*value = 0;
*value_tmp = INTEGER_TYPE;
}
if ((value = (char *)MemAlloc(Strlen(value_tmp)+1))==(char*)Null)
{
MemFree(var);
serror(1);
}
else
{
Strcpy(value,value_tmp);
*(value+Strlen(value_tmp)) = 0;
}
doingassign(var,value);
}
else
{
MemFree(var);
MemFree(value);
serror(41);
}
}
else
{
if (get_type(value_tmp)==(char *)Null) add_type(value_tmp,STRING_TYPE);
if ((value = (char *)MemAlloc(Strlen(value_tmp)+1))==(char*)Null)
{
MemFree(var);
serror(1);
}
else
{
Strcpy(value,value_tmp);
*(value+Strlen(value_tmp)) = 0;
}
doingassign(var,value);
}
}
InputFlag = backup_inputflag;
}
FAR Int8 inkey()
{
MEvent ev;
for (;;)
{
if (MsgScanKeyMsg(&ev)) break;
}
if (ev.x>255||ev.x<32) return (Int8)0;
else return (Int8)ev.x;
}
FAR void exec_inkey()
{
*token = inkey();
if (*token == 0) *token = 0xff;
*(token + 1) = 0;
}
FAR void exec_getkey()
{
sprintf(token,_Far("%d"),keydown_buffer);
keydown_buffer = 0;
}
FAR void exec_kbhit()
{
MEvent ev;
if (MsgScanKeyMsg(&ev))
{
keydown_buffer = ev.x;
Strcpy(token,"91");
}
else
Strcpy(token,"90");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -