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

📄 sbasic.cpp

📁 一个basic语言的编译工具。
💻 CPP
字号:
/*----------------------Simple BASIC!-----------------*/
#include"bastype.cpp"
#include"type.cpp"
#include"edit.cpp"
#include"para.cpp"

#define titlecrc 2857

/*-------------DATA------------*/

/*-------------FUNC------------*/
/*-------------CODE-------------*/
void main(int argc,char *argv[])
{uchar k;uchar p;
 dosmem editbuf(230/*5*/);

 ed.e.len=3276/*8*/;ed.e.t=editbuf.p;
 linename=linen.p;
 lineplace=(uint huge*)linep.p;

 ed.NAMED(1);
 buf=editbuf.p;
 for(k=0;title[k]!=0;k++)
  crc+=title[k];
 if(crc!=titlecrc)EXIT("Abnormal program termination");
 if(argc==2)
 {
  extname(argv[1]);
  if(ed.LDEDIT(argv[1])==1)EXIT("Loading ERROR!\7");
 }
 else
 {ed.LDEDIT("NONAME.BAS");if(*buf==0)ed.LDEDIT("NONAME.BAS");ed.NAMED(0);}
 clrscr();
 ed.DRAW();
 if(argc!=2)
 {
  setcur(0xffff);
  MSBOX(27,9,51,14,"  SimpleBASIC v0.1"," All rights reserved.");
  getch();
  setcur(0x0d0e);
 }
 for(;;)
 {
  k=ed.edit();
  switch(k)
  {
   case 0:clrscr();EXIT("My E-Mail: TurboC2.0@yeah.net\nMy OICQ#:  25926906");
   /*case 1:HELP();break;*/
   /*case 7:GETCL();*/
   case 9:RUN();break;
  }
 }
}

uchar isnumstr(uchar far*a)
{
 while(*a){if(*a<'0'||*a>'9')return 0;a++;}
 return 1;
}

void SCANLINE()
{uchar huge*bp;
 LN=0;
 for(;;)
 {
  bp=getaword(BP);
  if(isnumstr(aword))
  {
   strcpy((linen.p+(LN<<4)),aword);
   *(((uint huge*)linep.p)+LN)=BP-buf;LN++;
  }
  else
  {
   if(!isakeywd(aword)&&*bp==':'&&(!(ulong)strchr(aword,'=')))
   {
    strcpy((linen.p+(LN<<4)),aword);
    *(((uint huge*)linep.p)+LN)=bp-buf+1;LN++;
   }
  }
  while(*BP!=0&&*BP!='\n')BP++;
  if(*BP==0)break;BP++;
 }
 lineend=end=0;
}

uchar isakeywd(uchar far*a)
{register uint i;
 for(i=0;i<KWN;i++)
  if(strcmp(a,KW[i])==0)return 1;
 return 0;
}

uchar far*ERMS(uchar e)
{return ERRMSG[e];
}


uint  linenum(uchar far*line)
{register uint i;
 for(i=0;i<LN;i++)
  if(strcmp(linen.p+(i<<4),line)==0)return i;
 return 255;
}


void RUN()
{uint i,j;float a;
 BPZ=(uchar far*)0XF000FFFF;
 ERR(0);BP=ed.e.t;
 clrscr();
 var.CLEANVAR();basstack.clean();
 SCANLINE();
 BP=ed.e.t;

/* creatarray("A",300000);*/
 run();end=0;lineend=0;
 cleanarray();
 gotoxy(1,25);
 if(CALCERR)printf("\nError break...");
       else printf("\nProgram ended.");

 getch();
 ed.DRAW();
 if(CALCERR==0)return;
 i=erp-buf;
 while(i<ed.e.first)ed.PGUP();
 while(i>=ed.e.aline[ed.YL])ed.PGDN();
 for(j=0;j<=ed.YL;j++)
  if(ed.e.aline[j]>i)break;
 ed.e.y=--j;ed.e.x=i-ed.e.aline[j];
 ed.e.now=i;
 MSBOX(29,9,49,14,ERMS(CALCERR)," Press any key...");
 getch();
 ed.DRAW();
}

void run()
{register uint i;uchar j=200;
 uchar far*bp,far*p2;
 for(;;)
 {
lop:
  bp=aword;
  if((ulong)BP>=(ulong)BPZ)return;
  erp=BP;
  BP=getaword(BP);
  if(lineend){lineend=0;continue;}
  if(end)
   return;
  while(*bp!='='&&*bp!=0&&*bp!='\n')bp++;
  if(*bp=='='){(*bp)=0;LET(aword,bp+1);continue;}
/************************************/
  if(!isakeywd(aword))
  {
   if(linenum(aword)==255){ERR(1);return;}
   /*BP=*(((uint huge*)linep.p)+LN)+buf;*/
   while(*bp==':'||*bp==' ')bp++;
   goto lop;
  }
/**************************************/
  LBP=bp;
  for(i=0;i<KWN;i++)
   if(strcmp(KW[i],aword)==0){j=i;break;}
  if(j==200){ERR(1);return;}
  lineend=end=0;
  switch(j)
  {
   case 0:PRINT();break;
   case 1:INPUT();break;
   case 2:IF();break;
   case 3:GOTO();break;
   case 4:BP=NEXTLINE();break;
   case 5:end=1;break;
   case 6:FOR();break;
   case 7:NEXT();break;
   case 8:DIM();break;
   case 9:GOSUB();break;
   case 10:RETURN();break;
   case 11:ERASE();break;
  }
  lineend=0;
  if(end|CALCERR)return;
 }
}

⌨️ 快捷键说明

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