亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? yabasic.c

?? 很簡單的編譯器!不過最重要的是思想!
?? C
?? 第 1 頁 / 共 5 頁
字號:
	   (!tileol && currch!=' ' &&
	    currch!='\t' && currch!='\0')) &&
	  currch!=EOF && numread<INBUFFLEN);
	
  /* put back last char */
  if (currch!=EOF && currch!='\0') backchar(currch);
  /* and remove it from buff */
  if (currch!=EOF) numread--;
  buffer[numread]='\0';
  if (currch=='\0' || currch==EOF) goto done;
	
  /* skip trailing whitespace */
  if (!tileol) {
    do {
      currch=onechar();
    } while(currch==' ' || currch=='\t');
    if (currch!=EOF && currch!='\0') backchar(currch);
  }
	
 done:
  if (cmd->tag=='s') { /* read string */
    s=push();
    s->type=stSTRING;
    s->pointer=my_strdup(buffer);}
  else { /* read double */
    s=push();
    s->type=stNUMBER;
    s->value=0.0;
    if (buffer[0] && (sscanf(buffer,"%lf",&d)==1)) s->value=d;
  }
}


void readline(void) /* read one line from current stream */
{  
#ifdef UNIX
  char *nl; /* position of newline */
  int x,y;
#endif
	
  memset(linebuffer,'\0',INBUFFLEN);
#ifdef UNIX
  if (curinized && cinstr==stdin) {
    getyx(stdscr,y,x);
#ifdef HAVE_GETNSTR
    getnstr(linebuffer,INBUFFLEN);
#else
    getstr(linebuffer);
#endif
    if ((nl=strchr(linebuffer,'\0'))) *nl='\n';
    if (y>=LINES-1) scrl(1);
    refresh();
  }
  else 
#endif
    {
      fgets(linebuffer,INBUFFLEN,cinstr);
    }
  currchar=linebuffer;
  prompted=FALSE;
}


int onechar() /* read one char from cinstr */
{
  int ch;
	
  if (cinstr==stdin) {
    if (!currchar || !*currchar) {
      readline();
    }
    currchar++;
    ch=*(currchar-1);
  }
  else
    ch=fgetc(cinstr);
	
  if (ch=='\n' || ch==EOF)
    return '\0';
  else
    return ch;
}


void backchar(int ch) /* put char back into stream */
{
  if (cinstr==stdin) {
    if (currchar>linebuffer) currchar--;
  }
  else {
    ungetc(ch,cinstr);
  }
}


void chkprompt() /* print an intermediate prompt if necessary */
{
  if (cinstr==stdin && (!currchar || !*currchar) && !prompted) onestring("?");
}


void create_onestring(char *str) /* create command 'onestring' */
{
  struct command *cmd;
	
  cmd=add_command(cONESTRING);
  cmd->pointer=my_strdup(str);
}


void onestring(char *string) /* write string to file */
{
#ifdef UNIX
  if (curinized && coutstr==stdout) {
    addstr(string);
    refresh();
  }
#else
  DWORD len,written;
	
  if (curinized && coutstr==stdout) {
    len=strlen(string);
    WriteConsole(ConsoleOutput,string,len,&written,NULL);
  }	
#endif
  else
    {
      fprintf(coutstr,"%s",string);
      fflush(coutstr);
    }
  prompted=TRUE;
}


void create_revert(int flag) /* create command 'reverse' */
{
  struct command *c;
	
  c=add_command(cREVERT);
  c->args=flag;
}


void revert(struct command *cmd) /* switch reverse-printing */
{
  static int reverse=FALSE;
	
  if (((cmd->args)?TRUE:FALSE)==reverse) return;
  if (cmd->args) {
    if (!curinized) {
      error(ERROR,"need to call 'clear screen' first");
      return;
    }
#ifdef UNIX
    attron(A_REVERSE);
#else
    SetConsoleTextAttribute(ConsoleOutput,BACKGROUND_RED | 
			    BACKGROUND_GREEN | BACKGROUND_BLUE);
#endif
    reverse=TRUE;
  }
  else {
#ifdef UNIX
    attroff(A_REVERSE);
#else
    SetConsoleTextAttribute(ConsoleOutput,FOREGROUND_RED | 
			    FOREGROUND_GREEN | FOREGROUND_BLUE);
#endif
    reverse=FALSE;
  }
}


void create_restore(char *label) /* create command 'restore' */
{
  struct command *c;
	
  c=add_command(cRESTORE);
  c->pointer=my_strdup(label);
}


void restore(struct command *cmd) /* reset data pointer to given label */
{
  struct command *curr;
	
  if (cmd->type==cRESTORE) { /* first time; got to search the label */
    if (*((char *)cmd->pointer)=='\0') {
      cmd->pointer=cmdroot;
      cmd->type=cQRESTORE;
      goto found; /* restore to first command */
    }
    curr=cmdroot;
    while(curr!=cmdhead) {   /* go through all commands */
      if (curr->type==cLABEL && !strcmp(curr->pointer,cmd->pointer)) {
				/* found right Label ! */
				/* use the address instead of the name next time ! */
	cmd->pointer=curr;
	cmd->type=cQRESTORE;
	goto found;
      }
      curr=curr->next;
    }
    /* did not found label */
    sprintf(string,"couldn't found label '%s'",(char *)cmd->pointer);
    error(ERROR,string);
    return;
  }
 found:
  datapointer=cmd->pointer;
  return;
}


void create_dbldata(double value)  /* create command dbldata */
{
  struct command *c;
	
  c=add_command(cDATA);
  c->pointer=my_malloc(sizeof(double));
  *((double *)c->pointer)=value;
  c->tag='d'; /* double value */
}


void create_strdata(char *value)  /* create command strdata */
{
  struct command *c;
	
  c=add_command(cDATA);
  c->pointer=my_strdup(value);
  c->tag='s'; /* string value */
}


void create_readdata(char type) /* create command readdata */
{
  struct command *cmd;
	
  cmd=add_command(cREADDATA);
  cmd->tag=type;
}


void readdata(struct command *cmd) /* read data items */
{
  struct stackentry *read;
  char type;
	
  type=cmd->tag;
  while(datapointer->type!=cDATA) {
    if (datapointer==cmdhead) {
      error(ERROR,"Run out of data items");
      return;
    }
    datapointer=datapointer->next;
  }
  if (type!=datapointer->tag) {
    error(ERROR,"Type of READ and DATA don't match");
    return;
  }
  read=push();
  if (type=='d') { /* read a double value */
    read->type=stNUMBER;
    read->value= *((double *)datapointer->pointer);}
  else {
    read->type=stSTRING;
    read->pointer=my_strdup(datapointer->pointer);
  }
  datapointer=datapointer->next; /* next item */
}


void create_dblrelop(char c) /* create command dblrelop */ 
{
  int type;
	
  switch(c) {
  case '=': type=cEQ;break;
  case '!': type=cNE;break;
  case '<': type=cLT;break;
  case '{': type=cLE;break;
  case '>': type=cGT;break;
  case '}': type=cGE;break;
  }
  add_command(type);
}


void dblrelop(struct command *type)  /* compare topmost double-values */
{
  double a,b,c;
  struct stackentry *result;
	
  b=pop()->value;
  a=pop()->value;
  switch(current->type) {
  case cEQ:c=(a==b);break;
  case cNE:c=(a!=b);break;
  case cLE:c=(a<=b);break;
  case cLT:c=(a<b);break;
  case cGE:c=(a>=b);break;
  case cGT:c=(a>b);break;
  }
  result=push();
  result->value=c;
  result->type=stNUMBER;
}    


void create_strrelop(char c) /* create command strrelop */ 
{
  int type;
	
  switch(c) {
  case '=': type=cSTREQ;break;
  case '!': type=cSTRNE;break;
  case '<': type=cSTRLT;break;
  case '{': type=cSTRLE;break;
  case '>': type=cSTRGT;break;
  case '}': type=cSTRGE;break;
  }
  add_command(type);
}


void strrelop(struct command *type)  /* compare topmost string-values */
{
  char *a,*b;
  double c;
  struct stackentry *result;
	
  b=pop()->pointer;
  a=pop()->pointer;
  switch(current->type) {
  case cSTREQ:c=(strcmp(a,b)==0);break;
  case cSTRNE:c=(strcmp(a,b)!=0);break;
  case cSTRLT:c=(strcmp(a,b)<0);break;
  case cSTRLE:c=(strcmp(a,b)<=0);break;
  case cSTRGT:c=(strcmp(a,b)>0);break;
  case cSTRGE:c=(strcmp(a,b)>=0);break;
  }
  result=push();
  result->value=c;
  result->type=stNUMBER;
}    


void create_boole(char c) /* create command boole */ 
{
  int type;
	
  switch(c) {
  case '|': type=cOR;break;
  case '&': type=cAND;break;
  case '!': type=cNOT;break;
  }
  add_command(type);
}


void boole(struct command *type)  /* perform and/or/not */
{
  int a,b,c;
  struct stackentry *result;
	
  a=(int)pop()->value;
  if (current->type==cNOT) 
    c=!a;
  else {
    b=(int)pop()->value;
    if (current->type==cAND)
      c=a&&b;
    else
      c=a||b;
  }
  result=push();
  result->value=c;
  result->type=stNUMBER;
}    


void decide() /*  skips next command, if not 0 on stack */
{
  struct stackentry *a;
	
  a=pop();
  if (a->value!=0) current=current->next; /* skip one command */
}


void create_doarray(char *symbol,int command) /* creates array-commands */ 
{
  struct command *cmd;
  struct symbol *a;
  struct array *ar;
  int dimcount;
	
  a=get_sym(symbol,syARRAY,FALSE);
  if (a==NULL) {
    sprintf(string,"array '%s' has not been dimed",symbol);
    error(ERROR,string);
    return;
  }
	
  dimcount=(int)pop()->value;
  ar=a->pointer;
  if (dimcount!=ar->dimension) {
    sprintf(string,"improper array dimension %d for '%s'",dimcount,symbol);
    error(ERROR,string);
    return;
  }
	
  cmd=add_command(cDOARRAY);
	
  switch(command) {
  case CALLARRAY:
    cmd->args=CALLARRAY;
    break;
  case ASSIGNARRAY:
    cmd->args=ASSIGNARRAY;
    break;
  case CALLSTRINGARRAY:
    cmd->args=CALLSTRINGARRAY;
    break;
  case ASSIGNSTRINGARRAY:
    cmd->args=ASSIGNSTRINGARRAY;
    break;
  case GETSTRINGPOINTER:
    cmd->args=GETSTRINGPOINTER;
    break;
  }
	
  cmd->pointer=ar;
  cmd->args=command;
	
  return;
}


void doarray(struct command *current) /* call an array */
{
  struct array *ar;
  struct stackentry *stack;
  void *p;
  char **str;
  double *dbl;
  int i,j,bnd,index,call;
	
  call=(current->args==CALLARRAY || 
	current->args==CALLSTRINGARRAY ||
	current->args==GETSTRINGPOINTER);
  if (!call) stack=pop();
	
  ar=(struct array *)current->pointer;
  index=0;
  for(i=0;i<ar->dimension;i++) {
    bnd=(ar->bounds[i]);
    index*=bnd;
    j=(int)pop()->value;
    if (j<0 || j>=bnd) {
      sprintf(string,"index %d (=%d) out of range",ar->dimension-i,j);
      error(ERROR,string);
      return;
    }
    index+=j;
  }
	
  if (call) stack=push();
	
  p=ar->pointer;
  switch(current->args) {
  case CALLARRAY:
    dbl=(double *)p+index;
    stack->value= *dbl;
    stack->type=stNUMBER;
    break;
  case ASSIGNARRAY:
    dbl=(double *)p+index;
    *dbl=stack->value;
    break;
  case CALLSTRINGARRAY:
    str=((char **)p+index);
    stack->pointer=my_strdup(*str);
    stack->type=stSTRING;
    break;
  case ASSIGNSTRINGARRAY:
    str=((char **)p+index);
    if (*str!=NULL) free(*str);
    *str=my_strdup(stack->pointer);
    break;
  case GETSTRINGPOINTER:
    str=((char **)p+index);
    stack->pointer=*str;
    stack->type=stSTRING;
    break;
  }
}


void create_changestring(int type) /* create command 'changestring' */
{
  struct command *cmd;
	
  cmd=add_command(cCHANGESTRING);
  cmd->args=type;
}


void changestring(struct command *current) /* changes a string */
{
  int type,a2,a3;
  char *newpart;
  char *oldstring;
  int i,len;
  struct stackentry *a1;
	
  type=current->args;
  newpart=pop()->pointer;
  if (type>fTWOARGS) a3=(int)pop()->value;
  if (type>fONEARGS) a2=(int)pop()->value;
  a1=pop();
  oldstring=a1->pointer; 
  a1->pointer=NULL; /* this prevents push from freeing the memory */
	
  switch(type) {
  case fMID:
    for(i=1;i<a2+a3;i++) {
      if (!oldstring[i-1]) break;
      if (i>=a2) {
	if (!newpart[i-a2]) break;
	oldstring[i-1]=newpart[i-a2];
      }
    }
    break;
  case fLEFT:
    for(i=1;i<=a2;i++) {
      if (!oldstring[i-1] || !newpart[i-1]) break;
      oldstring[i-1]=newpart[i-1];
    }
    break;
  case fRIGHT:
    len=strlen(oldstring);
    for(i=1;i<=len;i++) {
      if (i>len-a2) {
	if (!newpart[i-1-len+a2]) break;
	oldstring[i-1]=newpart[i-1-len+a2];
      }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
麻豆成人久久精品二区三区小说| 激情深爱一区二区| 成人免费毛片嘿嘿连载视频| 欧美高清性hdvideosex| 亚洲色图视频网站| 91色porny| 一区二区三区免费看视频| 色婷婷av一区二区三区软件| 亚洲欧洲精品天堂一级| 91成人在线观看喷潮| 中文字幕av一区二区三区高| 成人精品视频一区二区三区尤物| 久久午夜羞羞影院免费观看| 国产成人av福利| 国产精品沙发午睡系列990531| 国产精品一区二区不卡| 中文字幕成人在线观看| 99v久久综合狠狠综合久久| 一片黄亚洲嫩模| 欧美日韩亚洲不卡| 韩国视频一区二区| 亚洲人成网站精品片在线观看| 在线视频一区二区免费| 久久精品国产99国产精品| 国产欧美一区二区三区鸳鸯浴| 99久久777色| 蜜臀久久99精品久久久画质超高清| 精品国精品国产尤物美女| 99综合影院在线| 日本成人在线一区| 亚洲视频 欧洲视频| 日韩一区和二区| 粉嫩13p一区二区三区| **网站欧美大片在线观看| 欧美午夜一区二区三区| 国产曰批免费观看久久久| 香蕉乱码成人久久天堂爱免费| 国产一区二区女| 国产欧美日韩在线看| 成人高清免费观看| 男男视频亚洲欧美| 日韩毛片在线免费观看| 欧美一区三区二区| 91在线小视频| 国产精品99久久久久久似苏梦涵| 亚洲一二三四在线| 国产精品久久二区二区| 欧美一区二区网站| 欧美日韩久久久久久| av激情综合网| 国产伦理精品不卡| 卡一卡二国产精品| 午夜精品视频一区| 日日夜夜免费精品视频| 亚洲国产精品人人做人人爽| 国产精品免费看片| 欧美国产一区二区| 亚洲欧洲国产专区| 久久久久国产精品麻豆| 国产性天天综合网| 国产日韩影视精品| 国产精品嫩草影院av蜜臀| 欧美第一区第二区| 国产精品美女www爽爽爽| 久久婷婷色综合| 国产精品午夜久久| 国产精品毛片久久久久久久| 国产精品久久久久三级| 亚洲欧美怡红院| 亚洲特级片在线| 亚洲丝袜美腿综合| 亚洲黄色片在线观看| 久久这里只有精品视频网| 欧美一二三区在线观看| 国产亚洲欧美日韩日本| 国产精品免费视频一区| 亚洲高清在线精品| 精品一区二区在线免费观看| 国产不卡高清在线观看视频| 粉嫩绯色av一区二区在线观看| 国产精品18久久久久久久网站| 97精品久久久午夜一区二区三区| 欧美网站大全在线观看| 精品入口麻豆88视频| 亚洲免费三区一区二区| 国产69精品久久久久毛片| 日韩电影免费在线看| 国产jizzjizz一区二区| 欧美日韩综合一区| 久久久久亚洲蜜桃| 亚洲国产另类av| 粉嫩av一区二区三区在线播放 | 久久99国产精品久久99果冻传媒 | 日韩欧美电影一二三| 日韩精品一区二区三区视频在线观看| 欧美一区二区三区日韩视频| 1000精品久久久久久久久| 欧美a级一区二区| 色综合一区二区| 中文子幕无线码一区tr| 奇米一区二区三区av| 精品视频色一区| 亚洲精品美腿丝袜| 国产美女主播视频一区| 日韩精品电影一区亚洲| 在线中文字幕不卡| 亚洲免费观看高清完整版在线观看熊 | 欧美色网站导航| 伊人色综合久久天天| av日韩在线网站| 亚洲欧美一区二区三区国产精品 | 亚洲成人福利片| 欧美日韩在线直播| 午夜精品成人在线视频| 国产成人精品影视| 中国色在线观看另类| www.日韩在线| 亚洲人吸女人奶水| 国产成人av自拍| 亚洲女人****多毛耸耸8| 成人美女视频在线观看18| 欧美日韩久久不卡| 激情综合色综合久久综合| 欧美一区二区三区日韩| 国产精品羞羞答答xxdd| 欧美韩日一区二区三区| 欧美中文字幕一区二区三区亚洲 | 欧美一区二区视频在线观看| 日本成人在线一区| 国产精品丝袜黑色高跟| 国产不卡高清在线观看视频| 亚洲制服丝袜av| 日韩一区二区三区视频在线| 国产成人av影院| 亚洲精品视频在线| 久久精品一级爱片| 欧美亚州韩日在线看免费版国语版| 美女脱光内衣内裤视频久久网站| 亚洲国产精品传媒在线观看| 欧美日韩亚洲不卡| fc2成人免费人成在线观看播放| 欧美高清在线一区| 欧美欧美欧美欧美首页| 国产成人av资源| 美腿丝袜在线亚洲一区| 亚洲乱码日产精品bd | 亚洲精品日产精品乱码不卡| 91精品在线一区二区| 欧美综合色免费| 99国产欧美另类久久久精品| 奇米在线7777在线精品| 一区二区三区四区精品在线视频 | 免费成人av资源网| 国产精品免费视频一区| 国产日本亚洲高清| 欧美日本精品一区二区三区| 91黄色激情网站| 色丁香久综合在线久综合在线观看| 国产福利不卡视频| 粉嫩av一区二区三区| 成人精品国产一区二区4080| aaa亚洲精品一二三区| 色综合久久久久网| 色伊人久久综合中文字幕| 91丨porny丨国产| 男女激情视频一区| 国产夫妻精品视频| 92国产精品观看| 欧美色图免费看| 日韩欧美国产午夜精品| 久久精品水蜜桃av综合天堂| 日本一区二区三区久久久久久久久不| 久久久精品日韩欧美| 中文字幕人成不卡一区| 国产精品欧美一区二区三区| 日韩美女视频一区二区| 国产日韩欧美综合一区| 欧美激情一区二区三区| 国产免费成人在线视频| 国产精品国产精品国产专区不片| 亚洲激情中文1区| 午夜欧美视频在线观看| 懂色av中文一区二区三区| 色一情一伦一子一伦一区| 精品国产第一区二区三区观看体验| 中文字幕一区视频| 亚洲欧美精品午睡沙发| 一区二区三区四区国产精品| 亚洲超碰精品一区二区| 激情五月激情综合网| 99精品欧美一区二区三区小说 | 久久综合国产精品| 亚洲一区精品在线| 国内精品伊人久久久久影院对白| eeuss鲁片一区二区三区在线看| 日韩欧美一级片| 亚洲第一狼人社区| 91国内精品野花午夜精品| 欧美国产精品一区| 国内精品国产成人国产三级粉色 |