📄 basic6.c
字号:
#include "os.h"
#include "ptype.h"
#include "res.h"
FAR Int8 inkey();
FAR void exec_inkey();
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;
FAR void exec_mid()
{
char *value, *slen, *llen, *p, *temp, *exp_buf;
int i, stop, j;
temp = GetAllocBuf();
slen = temp;
llen = temp + 50;
value = GetAllocBuf();
if (*prog++!='(') serror(18);
get_exp(value);
if (*value!=STRING_TYPE) serror(18); /***Mid语句出现语法错误***/
if (*prog==',')
prog++;
else
serror(18);
get_exp(slen);
if (Strchr(slen,'-')||!IsInteger(slen)) serror(18);
if (*prog==',')
prog++;
else
serror(18);
p = prog;
exp_buf = GetAllocBuf();
while (*p!=')'&&*p!=0x0d&&!Strchr(":,;#",*p)) p++;
if (*p!=')') serror(18);
*p = 0;
exp_buf = GetAllocBuf();
Strcpy(exp_buf,prog);
*p = ')';
p = prog;
prog = exp_buf;
get_exp(llen);
prog = p + Strlen(exp_buf) + 1;
if (Strchr(llen,'-')||!IsInteger(llen)) serror(18);
if ((i=atoi(slen+1))<1) serror(18); /***Mid语句出现语法错误***/
stop = atoi(llen+1);
j = 1;
p = value + 1;
while ( j++ < i && *p != 0 )
{
if ((UInt8)*p >= 0x80) p += 2;
else p++;
}
j = 0;
*token = 0;
temp = token;
while ( j++ < stop && *p != 0 )
{
*temp++ = *p++;
if ((UInt8)*(p-1) >= 0x80) *temp++ = *p++;
}
*temp = 0;
}
FAR char *GetAllocBuf()
{
char *p;
p = TmpBuf+(int)pCurBuf * 120;
Memset(p,0,120);
pCurBuf++;
if (pCurBuf == 18) pCurBuf = 0;
return p;
}
FAR int gcvt(double i, char flag, char *result)
{
double c, r;
int num, total;
char *temp_buf;
temp_buf = pBasicFileName + 14;
r = i;
if (r < 0) r = -r;
c = 1; num = 0;
while ( c<= r)
{
c *= 10;
num++;
}
if (num >= 16 && flag == 16) return 0;
if (num >= 15 && flag == 15) return 0;
Strcpy(temp_buf,"%.");
sprintf(temp_buf+2,_Far("%d"), (UInt16)flag - num - 1);
Strcat(temp_buf,"f");
sprintf(result,(FarPtr)temp_buf,i);
return 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -