📄 sbasic.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 + -