⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 basic8.c

📁 用C语言写的YABasic解释器
💻 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 Boolean GetValidNumber(char *p, int n)
{
	char *int_part, *point_part, *dot_pos, *ptr;
	int flag;
	
	int_part = TmpBuf + 19 * 120;
	point_part = int_part + 50;
	Memset(int_part,0,100);
	if (*p=='-'||*p=='+') p++;
	dot_pos = Strchr(p, '.');	
	if (dot_pos!=(char*)Null)
	{
		*dot_pos = 0;
		Strcpy(int_part, p);
		*dot_pos = '.';
		if (Strlen(dot_pos + 1)<30)
		{
		        Strcpy(point_part, dot_pos + 1);
		}
		else
		{			
		        Strncpy(point_part, dot_pos + 1, 30)
		}
	}
	else	
	        Strcpy(int_part, p);
	
	if (Strlen(int_part)>n) {
		return False;
	}
	else if ( Strlen(int_part) + Strlen(point_part) > n )
	{
		flag = 0;
		ptr = point_part + n - Strlen(int_part);
		if (*ptr>0x34)
		{
			while (--ptr >= point_part)
			{
				
				if (*ptr!=0x39) 
				{
					*ptr = *ptr + 1;
					break;
				}
				else 
					*ptr = 0x30;
			}
			if (ptr < point_part)
			{				
				ptr = int_part + Strlen(int_part);
				while (--ptr!=int_part)
				{
					if (*ptr!=0x39)
					{
						*ptr = *ptr + 1;
						break;
					}
					else
						*ptr = 0x30;
				}
				if (ptr == int_part)
				{
					*ptr = 0x30;
					flag = 1;
					if (Strlen(int_part)==n) {
						return False;
					}
				}
			}
		}
		ptr = p;
		if (flag) *p++ = 0x31;
		Strcpy(p, int_part);
		if (Strlen(ptr) == 14) {	
			return True;
		}
		Strcat(p, ".");
		*(point_part + n - Strlen(int_part)) = 0;
		Strcat(p, point_part);
	}	
	return True;	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -