易码技术论坛

 找回密码
 加入易码
搜索
楼主: yan

[工具] 编译器Y2.26最终版 08/5/10更新

[复制链接]
发表于 2007-6-27 20:17:48 | 显示全部楼层
连接库stdio.y文件中的scanf函数默认输入为字母,在什么地方把它改成默认输入数字。帖上源码方便指导我。

#define F2_KEY    0x1d
#define CR_KEY      0x0d
#define ESC_KEY    0x1b
#define HELP_KEY   0x19
#define SHIFT_KEY  0x1a
#define CAPS_KEY   0x12
#define UP_KEY     0x14
#define  DOWN_KEY   0x15
#define LEFT_KEY   0x17
#define RIGHT_KEY  0x16
#define UU_KEY      0x13
#define DD_KEY      0x0e
char Getsign()/*获取符号*/
{char key,i,j;
char numkey[10],mark[73];
TextOut(1,64,"符",0xc2);strcpy(numkey,"bnmghjtyu");
strcpy(mark,". , ; - / ? ! $ % ( ) : ` &#39; \" < > { } [ ] # ~ @ ^ & * + = _ | &#39;      ");mark[62]=92;
for(i=0;;)
{TextOut(17,64,mark+i,0xc1);
  while(!(key=Inkey()));
  if(key==UP_KEY|key==LEFT_KEY){if(i)i=i-18;}
  else if(key==DOWN_KEY|key==RIGHT_KEY|key==&#39;0&#39;){if(i<54)i=i+18;}
  else if(isalnum(key)){if(strchr(numkey,key))j=strchr(numkey,key)-numkey;else j=key-&#39;1&#39;;if(i+j*2<63)return(mark[i+j*2]);}
  else if(key==ESC_KEY)return(0);
}
}
int Getstr(char &str[],int speed,int delay)
{char key,tkey,skey,con;
char type,tmp;
char numkey[10];
int i,len,tlen;
char x,y;
int a,b;
char s[256];
type=tlen=0;if(str)tlen=strlen(str);*s=i=0;strcpy(numkey,"bnmghjtyu");
START:skey=CheckKey(128);
do{SetScreen(0);if(str)printf("%s",str);printf("%s",s);
  x=((len=strlen(s)+tlen)%20)<<3;y=(len/20)<<4;if(y>64){y=64;if(!x)printf(" ");}
  for(a=b=0;;)
  {if(!a)Box(x,y+14,x+8,y+15,1,2);if((a++)==speed)a=0;
  tkey=key;key=CheckKey(128);Inkey();if(skey==key||!key){skey=key;continue;}
  if(key==tkey){if(++b>=delay||con){con=1;break;}Delay(20);a=1;}else{con=0;break;}
  }
  if(isprint(key))
  {if((type&1)==0){if(key==&#39;0&#39;){tmp=Getsign();if(!tmp)continue;}else if(type&2)tmp=toupper(key);else tmp=key;}//英文
   else if(strchr(numkey,key))tmp=strchr(numkey,key)-numkey+&#39;1&#39;;//数字
   else tmp=key;//小字母,数字
   *(s+i++)=tmp;*(s+i)=0;if(!isalnum(tmp))goto START;
  }
  else if(key==F2_KEY||key==LEFT_KEY){if(i)*(s+(--i))=0;}
  else if(key==UP_KEY||key==ESC_KEY){i=0;*s=0;}
  else if(key==SHIFT_KEY)type=type^1;
  else if(key==CAPS_KEY)type=type^2;
}while(key!=CR_KEY)
if(x)printf("\n");return(s);
}
void puts(char &str[]){printf("%s\n",str);}
int gets(char &str[]){strcpy(str,Getstr(0,400,60));return(strlen(str));}
int fputs(char &str[],char fp){return(fwrite(str,1,strlen(str),fp));}
int fgets(int s,int size,char fp)
{int ch;
if(size<0)size=0;if(getc(fp)<0)return(EOF);fseek(fp,-1,1);//自动
if(!size){while((ch=getc(fp))>0){*s++=ch;size++;}}else if(size==1)size=0;else size=fread(s,1,size-1,fp);//取字符串
*(s+size)=0;if((ch=strlen(s))!=size){fseek(fp,ch-size+1,1);size=ch;}return(size+1);//调整
}
int sscanf(int b,int s,long p)
{char i,ch;//已赋值的参数个数
int t,size;
long num;
if(!(*b))return(EOF);i=size=0;//是否结束
while(ch=*s++)
  {if(ch==&#39; &#39;|ch==9|ch==10)continue;for(;;b++){if(!(*b))return(i);if(!(*b==&#39; &#39;|*b==9|*b==10))break;}//跳过间隔符
  if(ch==&#39;%&#39;)
   {START:if(!(ch=*s++))break;if(isdigit(ch)){size=size*10+(ch&0xf);goto START;}
    if(tolower(ch)==&#39;d&#39;)
    {t=1;num=0;if(*b==&#39;-&#39;){t=-1;b++;}else if(*b==&#39;+&#39;)b++;//符号判断
     if(!isdigit(*b))return(i);do{num=num*10+(*b&0xf);}while(isdigit(*(++b)))num=num*t;//取数
     if(size>4)size=4;else if(size<=0){size=1;if(num<-32768||num>=32768)size=4;else if(num>>8)size=2;}//长度
     memcpy(p,&num,size);
    }
    else if(tolower(ch)==&#39;c&#39;){*p++=*b++;size=0;}//取字符
    else if(tolower(ch)==&#39;s&#39;)
    {if(size<0)size=0;for(t=0;!(!(*b)|*b==9|*b==10|*b==&#39; &#39;);t++){*(p+t)=*b++;if(size<=t+1&&size){b--;break;}}//取字符串
     if(!t)return(i);*(p+t)=0;if(!size)size=t+1;
    }
    else return(i);
    p=p+size;size=0;i++;
   }
  else if(*b++!=ch)return(i);
  }
return(i);
}
int scanf(char &s[],char &str[],long p)
{char buf[256];
for(;;){strcpy(buf,Getstr(s,400,60));if(!strlen(buf))continue;return(sscanf(buf,str,p));}
}
int fprintf(char fp,int s,long p)
{char ch;
int size,i,t;
long num;
char str[256];
i=size=0;
while(ch=*s++)
  {if(ch==&#39;%&#39;)
   {START:if(!(ch=*s++))break;if(isdigit(ch)){size=size*10+(ch&0xf);goto START;}
    if(tolower(ch)==&#39;d&#39;)
    {if(size>4)size=4;else if(size<=0)size=1;num=0;memcpy(&num,p,size);//取数
     sprintf(str,"%d",num);if(!(t=fwrite(str,1,strlen(str),fp)))return(i);i=i+t;//保存
    }
    else if(tolower(ch)==&#39;c&#39;){if(putc(*p++,fp)<0)return(i);i++;size=0;}//保存字符
    else if(tolower(ch)==&#39;s&#39;)
    {if(size<0)size=0;for(t=0;*(p+t);t++){if(putc(*(p+t),fp)<0)return(i);if(size<=t+1&&size)break;}//保存字符串
     if(!size)size=t+1;i=i+size;
    }
    else goto WRITEBYTE;
    p=p+size;size=0;
   }
  else{WRITEBYTE:if(putc(ch,fp)<0)return(i);i++;}
  }
return(i);
}
char fscanf(char fp,int s,long p)
{char i;//已赋值的参数个数
int ch,t,sign,size;
long num;
if(getc(fp)==EOF)return(EOF);fseek(fp,-1,1);i=size=0;
while(ch=*s++)
  {if(ch==&#39; &#39;|ch==9|ch==10)continue;//跳过间隔符
  for(;;){if(feof(fp))return(i);if(!((t=getc(fp))==&#39; &#39;|t==9|t==10)){fseek(fp,-1,1);break;}}//跳过间隔符
  if(ch==&#39;%&#39;)
   {START:if(!(ch=*s++))break;if(isdigit(ch)){size=size*10+(ch&0xf);goto START;}
    if(tolower(ch)==&#39;d&#39;)
    {sign=1;num=t=0;if((ch=getc(fp))==&#39;-&#39;){sign=t=-1;ch=getc(fp);}else if(ch==&#39;+&#39;){t=1;ch=getc(fp);}//符号判断
     if(!isdigit(ch)){if(!t)fseek(fp,-1,1);return(i);}do{num=num*10+(ch&0xf);}while(isdigit(ch=getc(fp)))//取数
     if(ch!=EOF)fseek(fp,-1,1);num=num*sign;
     if(size>4)size=4;else if(size<=0){size=1;if(num<-32768||num>=32768)size=4;else if(num>>8)size=2;}//长度
     memcpy(p,&num,size);
    }
    else if(tolower(ch)==&#39;c&#39;){*p++=getc(fp);size=0;}//取字符
    else if(tolower(ch)==&#39;s&#39;)
    {if(size<0)size=0;for(t=0;ch=getc(fp)>0&ch!=9&ch!=10&ch!=&#39; &#39;;t++){*(p+t)=ch;if(size<=t+1&&size)break;}//取字符串
     if(ch!=EOF)fseek(fp,-1,1);if(!t)return(i);*(p+t)=0;if(!size)size=t+1;
    }
    else return(i);
    p=p+size;size=0;i++;
   }
  else if(getc(fp)!=ch){fseek(fp,-1,1);return(i);}
  }
return(i);
}
void main()
{char fp;
long num,e;
int o[10];
int i;
//struct TT t;
char buf[100];
//strcpy(t.name,"yan");t.x=&#39;a&#39;;strcpy(t.c,"sf");
//i=scanf("%4d%4d%10s",t);
//ChDir("/LAVA2");
//fp=fopen("a.dat","w");if(!fp){printf("write error");getchar();return;}
//num=30;
//sprintf(buf,"name:%s x:%c c:%s",t.name,t.x,t.c);
//memset(t,0,sizeof(struct TT));
//i=sscanf(buf,"name:%10s x:%c c:%10s",t);
//printf("%d %d %d %s\n",i,t.name,t.x,t.c);
//fclose(fp);
//num=0;
//memset(t,0,sizeof(struct TT));
//fp=fopen("a.dat","r");if(!fp){printf("read error");getchar();return;}
//i=fgets(t.name,100,fp);
//i=fgets(t.c,100,fp);

//printf("%d:%s\n%c",i,t.name,getc(fp));
//fclose(fp);getchar();
//gets(t.name);
// puts(t.name);
//getchar();
//gets(t.name);
//puts(t.name);
scanf("Input x:","%100s",buf);
printf("%s\n",buf);getchar();
getchar();
}
发表于 2007-6-28 07:29:17 | 显示全部楼层
还会不会更新啊???
 楼主| 发表于 2007-6-28 12:42:04 | 显示全部楼层
引用第781楼CJJR2007-06-27 20:17发表的“”:
连接库stdio.y文件中的scanf函数默认输入为字母,在什么地方把它改成默认输入数字。帖上源码方便指导我。

#define F2_KEY    0x1d
#define CR_KEY      0x0d
#define ESC_KEY    0x1b
.......
很明显是改Getstr函数里的变量:type。
type:bit 0:0:英文 1:数字
     bit 1:0:小写 1:大写
 楼主| 发表于 2007-6-28 12:46:21 | 显示全部楼层
引用第782楼TYCY2007-06-28 07:29发表的“”:
还会不会更新啊???
会啊。
发表于 2007-6-28 13:08:43 | 显示全部楼层
最近在忙NC3000的灰度???
 楼主| 发表于 2007-6-28 13:09:00 | 显示全部楼层
恩。
发表于 2007-6-28 13:12:15 | 显示全部楼层
那编译器什么时候更新,我的是2600
没办法用灰度,只有期待你的2.16版了
发表于 2007-6-28 13:14:08 | 显示全部楼层
我的ID居然被禁言了,郁闷!
对了,NC3000的硬灰度系统基本完工了吗?
你以前不是说3000的基本完工就搞2600的吗?
期待中。。。。。
 楼主| 发表于 2007-6-28 13:23:48 | 显示全部楼层
那个4灰度驱动在NC2600上不适用,目前没办法弄。
发表于 2007-6-28 13:36:02 | 显示全部楼层
我有nc2600的灰度驱动!
发表于 2007-6-28 13:36:13 | 显示全部楼层
引用第780楼TMZHJW2007-06-27 18:14发表的“”:
越来越完美,功能越来越强大。(^_^)
LZ把这个弄成PC上的IDE一定很不错。
我也那么想的,强烈要求~~~~~
^_^
发表于 2007-6-28 13:37:46 | 显示全部楼层
引用第790楼POTO2007-06-28 13:36发表的“”:
我有nc2600的灰度驱动!
知道你在做
做好了?
发表于 2007-6-28 13:38:58 | 显示全部楼层
POTO,登陆QQ
发表于 2007-6-28 13:42:48 | 显示全部楼层
引用第789楼yan2007-06-28 13:23发表的“”:
那个4灰度驱动在NC2600上不适用,目前没办法弄。
那想到好多办法了吗?
 楼主| 发表于 2007-6-28 15:20:15 | 显示全部楼层
引用第790楼POTO2007-06-28 13:36发表的“”:
我有nc2600的灰度驱动!
有么?能发一个给我么?
yanggynb@163.com
我有NC2600C.
发表于 2007-6-28 18:02:54 | 显示全部楼层
引用第795楼yan2007-06-28 15:20发表的“”:

有么?能发一个给我么?
yanggynb@163.com
我有NC2600C.
是不是给你了,你就有办法做出NC2600C的灰度了
发表于 2007-6-28 18:15:56 | 显示全部楼层
引用第795楼yan2007-06-28 15:20发表的“”:

有么?能发一个给我么?
yanggynb@163.com
我有NC2600C.
已经发了!
 楼主| 发表于 2007-6-28 19:31:48 | 显示全部楼层
收到,谢谢了。
发表于 2007-6-29 08:04:13 | 显示全部楼层
那能用希望做NC2600C的灰度了?
发表于 2007-6-29 08:25:57 | 显示全部楼层
引用第799楼TYCY2007-06-29 08:04发表的“”:
那能用希望做NC2600C的灰度了?
没错!等着吧!
您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

Archiver|手机版|小黑屋|EMAX Studio

GMT+8, 2025-5-15 03:30 , Processed in 0.015725 second(s), 16 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表