- 注册时间
- 2004-9-23
- 最后登录
- 1970-1-1
|
发表于 2007-1-21 19:12:34
|
显示全部楼层
/*===================================输入法区=========================================*/
char num_data[]=//拼音输入法的下提示选字的数字
{
// 宽=104,=5
0x77,0xf7,0x77,0x77,0x77,0x77,0xff,0xff,0x77,0x77,0x77,0x77,0xff,0xff,0x77,0x77,
0x77,0x77,0xf7,0x7f,0x77,0x77,0x77,0x77,0xff,0xff,0x77,0x77,0x77,0x77,0xff,0xff,
0x77,0x77,0x77,0x77,0xff,0xff,0x77,0x77,0x77,0x77,0xff,0xff,0x77,0x77,0x77,0x77,
0xff,0xff,0x77,0x77,0x77,0xf7,0x77,0x77,0x77,0x77,0x77,0x7f,0x77,0x77,0x77,0x77,
0x77,0x7f,0x77,0x77,0x77,0x77,0xf7,0x7f,0x77,0x77,0x77,0x77,0xf7,0x77,0x77,0x77,
0x77,0x77,0xf7,0x77,0x77,0x77,0x77,0x77,0x77,0x7f,0x77,0x77,0x77,0x77,0xf7,0x7f,
0x77,0x77,0x77,0x77,0xf7,0x7f,0x77,0x77,0x77,0xf7,0x77,0x77,0x77,0x77,0xff,0xff,
0x77,0x77,0x77,0x77,0xff,0xff,0x77,0x77,0x77,0x77,0xff,0xff,0x77,0x77,0x77,0x77,
0xff,0xff,0x77,0x77,0x77,0x77,0xff,0xff,0x77,0x77,0x77,0x77,0x77,0x7f,0x77,0x77,
0x77,0x77,0xff,0xff,0x77,0x77,0x77,0x77,0xff,0xff,0x77,0x77,0x77,0xf7,0x77,0x77,
0x77,0x77,0xf7,0x77,0x77,0x77,0x77,0x77,0x77,0x7f,0x77,0x77,0x77,0x77,0x77,0x7f,
0x77,0x77,0x77,0x77,0x77,0x7f,0x77,0x77,0x77,0x77,0xf7,0x7f,0x77,0x77,0x77,0x77,
0x77,0x7f,0x77,0x77,0x77,0x77,0xf7,0x7f,0x77,0x77,0x77,0x77,0x77,0x7f,0x77,0x77,
0x77,0xf7,0x77,0x77,0x77,0x77,0xff,0xff,0x77,0x77,0x77,0x77,0xff,0xff,0x77,0x77,
0x77,0x77,0x77,0x7f,0x77,0x77,0x77,0x77,0xff,0xff,0x77,0x77,0x77,0x77,0xff,0xff,
0x77,0x77,0x77,0x77,0x77,0x7f,0x77,0x77,0x77,0x77,0xff,0xff,0x77,0x77,0x77,0x77,
0xff,0xff,0x77,0x77
};
#define USE_QUEWEI 1 //编译区位输入集成到五笔输入,不想要可屏蔽该语句
#define MAX_FINDSTR 167
//存放搜索用字串数组的长度,必须是奇数,最大25*25+1即可,最小27
//标准版词库最大取331就够了
struct TABLE_P1
{
int max;
int len;
long pos;
};//长度8
struct TABLE_P2
{
int max;
int len;
long pos;
long search;
int num[2];
};//长度16
int Wb_begin1,Wb_begin2;
int Wb_len[3];
int Wb_tsize[2];//sizeof(TABLE_P1),sizeof(TABLE_P2)
//因为#bigram会造成结构体大小向特定数对齐,所以直接从文件中读取原写入值
char Wb_dname[5];
char scanf_data[6400];
char Wb_fp;
int Wb_i;
void WB2GB_Exit()
{
fclose(Wb_fp);
}
void WB2GB_Init()
{
char ver[5];
Wb_fp=fopen("/LavaData/wb2gb.dic","r");
fseek(Wb_fp,32,0);
fread(ver,1,4,Wb_fp);
if(strcmp(ver,"1.01")!=0)
{
SetScreen(1);
printf("没有五笔字库!五笔中文输入法不能用!",ver);
getchar();
}
fseek(Wb_fp,50,0);
fread(Wb_dname,1,sizeof(Wb_dname),Wb_fp);
fread(Wb_tsize,1,sizeof(Wb_tsize),Wb_fp);
Wb_begin1=ftell(Wb_fp);
Wb_begin2=Wb_begin1+Wb_tsize[0]*25;
}
int System_QW2GB(long qwc,long buf)
{
char gb[4];
if(strlen(qwc)!=4)return -1;
gb[0]=*(qwc+0)*10+ *(qwc+1)- 368;
gb[1]=*(qwc+2)*10+ *(qwc+3)- 368;
gb[2]=0;
if(gb[0]>160&&gb[1]>160)strcpy(buf,gb);
else return -1;
return gb[0]|gb[1]<<8;
}
long System_WB2GB(int iq,long ims,long buf,int bufsize)
//返回值低16位:实际取词个数
//返回值高16位:最大取词个数
//iq :取词的序数,从0开始
//ims:待查找的五笔码
//buf:返回五笔码对应的字词
//bufsize:缓存区大小,强烈建议直接用sizeof(数组名)
{
struct TABLE_P1 Addr;
struct TABLE_P2 Tab2;
int max,len,num;
long pos,pos0;
char p1,p2;
char wbs[5];
char fds[MAX_FINDSTR];
//*buf=0;
if(iq<0) return -1;
#ifdef USE_QUEWEI
if(wbs[0]=='v' && isdigit(wbs[1]))
{
if(System_QW2GB(&wbs[1],buf)==-1)return -1;
else return 0x00010001;
}
#endif
len=strlen(ims);
if(len<=0||len>4)return -1;//五笔码长度越界
for(Wb_i=0;Wb_i<len;Wb_i++)
{
wbs[Wb_i]=tolower(*ims++);
if(!islower(wbs[Wb_i]))return -1;
}
p1=wbs[0]-'a';
p2=wbs[1]-'a';
if(len==1)fseek(Wb_fp,Wb_begin1+Wb_tsize[0]*p1,SEEK_SET);
else
if(len==2)fseek(Wb_fp,Wb_begin2+Wb_tsize[1]*(p1*25+p2),SEEK_SET);
else
if(len==3)
{
fseek(Wb_fp,Wb_begin2+Wb_tsize[1]*(p1*25+p2),SEEK_SET);
fread(Tab2,1,Wb_tsize[1],Wb_fp);
fseek(Wb_fp,Tab2.search,SEEK_SET);
fread(fds,1,Tab2.num[0],Wb_fp);
pos=strchr(fds,wbs[2])-fds;
if(pos==-fds)return -1;
fseek(Wb_fp,pos*Wb_tsize[0],SEEK_CUR);
}
else
{
fseek(Wb_fp,Wb_begin2+Wb_tsize[1]*(p1*25+p2),SEEK_SET);
fread(Tab2,1,Wb_tsize[1],Wb_fp);
if(!Tab2.num[0])pos0=Tab2.search;
else pos0=Tab2.search+Tab2.num[0]+Wb_tsize[0]*(Tab2.num[0]-1);
fseek(Wb_fp,pos0,SEEK_SET);
max=len=Tab2.num[1];
num=sizeof(fds)-1;
fds[num]=0;
for(Wb_i=0;max>0;Wb_i++)
{
if(len<=num)fread(fds,1,max,Wb_fp);
else fread(fds,1,num,Wb_fp);
for(pos=-1;pos%2&&pos!=-fds;)pos=strstr(fds+pos+1,&wbs[2])-fds;
if(pos>=0)break;
max=max-num;
}//end for i
if(pos==-fds)return -1;
pos=(pos+num*Wb_i)/2;
fseek(Wb_fp,pos0+len+pos*Wb_tsize[0],SEEK_SET);
}
fread(Addr,1,Wb_tsize[0],Wb_fp);
num=Addr.max-iq;
pos=buf+num;
if(num<=0)return -1;//序号越界或没找到
if(bufsize-num<Addr.len)return 0;//缓存区过小
fseek(Wb_fp,Addr.pos,0);
fread(pos,1,Addr.len,Wb_fp);
pos0=buf;
for(Wb_i=0;Wb_i<Addr.max;)
{
if(Wb_i++>=iq){*buf++=pos-pos0;}
pos=pos+strlen(pos)+1;
}
return num|Addr.max<<16;//num:返回词个数,max:最大词个数
}
//以上是由诗诺比提供的五笔中文输入系统
void clearscreen()
{
Block(0,0,160,80,0);
}
void Button(char x1,char y1,char x2,char y2,char type)//按钮
{//x1 左上角横坐标,x2 左上角纵坐标,x3 右下角横坐标,x4 右下角纵坐标,type=0 凹,type=1 凸,type=2 阴影
if(type==2)
{
SetFgColor(15);
Rectangle(x1,y1,x2,y2,1);
Rectangle(x2+1,y1+2,x2+2,y2+2,1);
Rectangle(x1+2,y2+1,x2+2,y2+2,1);
}
else
{
SetFgColor(13-type*12);
Rectangle(x1,y1,x2,y2,1);
SetFgColor(1+type*12);
Rectangle(x2,y1,x2,y2,1);
Rectangle(x1,y2,x2,y2,1);
}
SetFgColor(15);
}
void print_word(char mode,char caps,char china)//输入法的皮肤
{
char word[19];
WriteBlock(0,0,160,80,0x81,scanf_data);
if(mode==2 && china==0)
{
Block(22,3,138,75,0);
Button(22,3,138,75,1);
Button(23,4,137,74,1);
}
else
{
Block(22,3,138,69,0);
Button(22,3,138,69,1);
Button(23,4,137,68,1);
}
SetBgColor(0);
Block(24,5,136,17,0);
TextOut(44,5,"数据输入系统",1);
SetBgColor(7);
Block(24,5,136,17,2);
Button(25,19,135,34,0);
SetBgColor(0);
if(mode==0)
{
Block(26,36,51,49,0);
TextOut(27,37,"数字",1);
Block(26,36,51,49,2);
}
else
if(mode==1)
{
Block(26,36,75,49,0);
if(caps==1)TextOut(27,37,"英文大写",1);
else TextOut(27,37,"英文小写",1);
Block(26,36,75,49,2);
}
else
{
Block(26,36,51,49,0);
if(china==1)TextOut(27,37,"五笔",1);
else TextOut(27,37,"拼音",1);
Block(26,36,51,49,2);
}
SetBgColor(7);
Button(25,51,135,66,0);
if(mode==2 && china==0)WriteBlock(31,68,104,5,0x81,num_data);
}
long english(char caps)
{
long cz;
char word_data[19];
char mode,scanf_t;
cz=0;
SetFgColor(15);
for(;;)
{
scanf_t=getchar();
if(scanf_t==29 || scanf_t==13 || scanf_t==27)return scanf_t;
else
if(scanf_t==26)
{
caps++;
if(caps==2)caps=0;
return caps;
}
else
if(scanf_t==18)return -1;
else
if(scanf_t>='a' && scanf_t<='z')
{
cz=scanf_t-caps*32;
return cz;
}
else
if(scanf_t>=48 && scanf_t<=57)return scanf_t;//输入数字字符
}
}
long number()//用于老式键盘输入数字字符,TC800上用可以不要这个函数
{
long cz;
char word_data[19];
char mode,scanf_t;
cz=0;
SetFgColor(15);
for(;;)
{
scanf_t=getchar();
if(scanf_t==29 || scanf_t==13 || scanf_t==27)return scanf_t;
else
if(scanf_t==18)return -1;
else
if(scanf_t=='0')return 48;
else
if(scanf_t=='b')return 49;
else
if(scanf_t=='n')return 50;
else
if(scanf_t=='m')return 51;
else
if(scanf_t=='g')return 52;
else
if(scanf_t=='h')return 53;
else
if(scanf_t=='j')return 54;
else
if(scanf_t=='t')return 55;
else
if(scanf_t=='y')return 56;
else
if(scanf_t=='u')return 57;
}
}
long wb(long add,long adda,int str_len)//五笔中文输入法
{
int cz,lenn;
int wb_i,wb_j;
int max,lx,ip;
char hz[32],wbm[5];
long res,num;
char word_data[19],wb_t,sa[50];
memset(word_data,0,str_len+1);
memcpy(word_data,adda,strlen(adda));
for(;;)
{
wbm[0]=0;
lx=0;
for(;;)
{
cz=0;
lenn=strlen(word_data);
print_word(2,1,1);
TextOut(27,21,word_data,1);
if(strlen(word_data)<18)Block(strlen(word_data)*6+27,32,strlen(word_data)*6+31,33,1);
else
{
if(word_data[str_len-1]<160)Block(strlen(word_data)*6+21,32,strlen(word_data)*6+25,33,1);
else Block(strlen(word_data)*6+15,32,strlen(word_data)*6+25,33,1);
}
TextOut(52,37,wbm,1);
Refresh();
wb_t=getchar();
if(wb_t>='a' && wb_t<='y')
{
wbm[lx++]=wb_t;
wbm[lx]=0;
if(lx==4)break;
}
else
if(wb_t==13 || wb_t==27)
{
memcpy(add,word_data,strlen(word_data));
return wb_t;
}
else
if(wb_t==32)break;
else
if(wb_t==18)
{
memset(add,0,str_len+1);
memcpy(add,word_data,strlen(word_data));
return 2;
}
else
if(wb_t==26)
{
memset(add,0,str_len+1);
memcpy(add,word_data,strlen(word_data));
return 1;
}
else
if(wb_t==23)
{
if(lx)
{
wbm[--lx]=0;
ip=0;
}
}
else
if(wb_t==29 && lenn)
{
lenn--;
if(word_data[lenn]>=160)
{
lenn--;
memset(word_data+lenn,0,2);
}
else word_data[lenn]=0 ;
continue ;
}
}
res=System_WB2GB(0,wbm,hz,sizeof(hz));
TextOut(52,37,wbm,1);
if(res==-1 || res==0)continue;
num=res&0xffff;
max=res>>16;
lenn=strlen(word_data);
if(num==1)//无重码
{
if(lenn<str_len-1)memcpy(word_data+lenn,hz+hz[0],(str_len-lenn)/2*2);
else continue;
}
else//有重码
{
wb_j=0;
for(wb_i=0;wb_i<num;wb_i++)
{
sprintf(sa,"%d",wb_i+1);
TextOut(wb_j*6+27,53,sa,1);
TextOut(wb_j*6+33,53,hz+hz[wb_i],1);
wb_j=wb_j+strlen(hz+hz[wb_i])+1;
}
Refresh();
wb_t=getchar();
if(wb_t==18)
{
memset(add,0,str_len+1);
memcpy(add,word_data,strlen(word_data));
return 2;
}
if(wb_t==26)
{
memset(add,0,str_len+1);
memcpy(add,word_data,strlen(word_data));
return 1;
}
if(lenn<str_len-1)//选字
{
if(wb_t=='b'|| wb_t=='1' || wb_t==32)memcpy(word_data+lenn,hz+hz[0],(str_len-lenn)/2*2);
if((wb_t=='n'|| wb_t=='2') && num>1)memcpy(word_data+lenn,hz+hz[1],(str_len-lenn)/2*2);
if((wb_t=='m'|| wb_t=='3') && num>2)memcpy(word_data+lenn,hz+hz[2],(str_len-lenn)/2*2);
if((wb_t=='g'|| wb_t=='4') && num>3)memcpy(word_data+lenn,hz+hz[3],(str_len-lenn)/2*2);
if((wb_t=='h'|| wb_t=='5') && num>4)memcpy(word_data+lenn,hz+hz[4],(str_len-lenn)/2*2);
if((wb_t=='j'|| wb_t=='6') && num>5)memcpy(word_data+lenn,hz+hz[5],(str_len-lenn)/2*2);
}
}
}
}
long chinese(long add,int str_len)//拼音中文输入法
{
int cz,py_i,py_j;
char pinyin[10];
int id,lx;
int sum;
long tg;
char wd[60],py_t;
char word_data[19];
memset(word_data,0,19);
memcpy(word_data,add,strlen(add));
SetFgColor(15);
pinyin[0]=0;
lx=0;
id=0;
sum=0;
tg=-1;
print_word(2,0,0);
TextOut(27,21,word_data,1);
if(strlen(word_data)<18)Block(strlen(word_data)*6+27,32,strlen(word_data)*6+31,33,1);
else
{
if(word_data[str_len-1]<160)Block(strlen(word_data)*6+21,32,strlen(word_data)*6+25,33,1);
else Block(strlen(word_data)*6+15,32,strlen(word_data)*6+25,33,1);
}
Refresh();
for(;;)
{
py_t=getchar();
if(py_t==23)
{
if(lx)
{
pinyin[--lx]=0;
id=0;
sum=0;
}
}
else
if(py_t==27 || py_t==29 || (py_t==13 && tg==-1))return py_t;
else
if(py_t==26)return 1;
else
if(py_t==18)return 2;
else
if(py_t==21)
{
if(id+9<sum)id=id+9;
}
else
if(py_t==20)
{
if(id>9)id=id-9;
else id=0;
}
else
if(py_t>='a' && py_t<='z')
{
if(lx<6)
{
pinyin[lx++]=py_t;
pinyin[lx]=0;
id=0;
sum=0;
}
}
else
/************下面的功能是老式键盘用的,TC800上用可以去掉这些****************/
if(py_t==13 && tg!=-1)
{
py_i=0;
for(;;)
{
for(;;)
{
if(id+py_i>=sum)py_i--;
else
break;
}
tg=System.PY2GB(id,pinyin,wd);
Block(27,53,134,64,0);
TextOut(27,53,wd,1);
Block(py_i*12+27,53,py_i*12+38,64,2);
Refresh();
py_t=getchar();
if(py_t==22)
{
py_i++;
if(id+py_i>=sum || py_i>8)py_i=0;
}
else
if(py_t==23)
{
py_i--;
if(py_i<0)py_i=8;
}
else
if(py_t==21)
{
if(id+9<sum)id=id+9;
}
else
if(py_t==20)
{
if(id>9)id=id-9;
else id=0;
}
else
if(py_t==27)break;
else
if(py_t==13)
{
py_t=py_i+49;
break;
}
}
}
/************上面的功能是老式键盘用的,TC800上用可以去掉这些****************/
if(py_t=='1')
{
cz=wd[0]+wd[1]*256;
return cz;
}
else
if(py_t=='2' && id+1<sum)
{
cz=wd[2]+wd[3]*256;
return cz;
}
else
if(py_t=='3' && id+2<sum)
{
cz=wd[4]+wd[5]*256;
return cz;
}
else
if(py_t=='4' && id+3<sum)
{
cz=wd[6]+wd[7]*256;
return cz;
}
else
if(py_t=='5' && id+4<sum)
{
cz=wd[8]+wd[9]*256;
return cz;
}
else
if(py_t=='6' && id+5<sum)
{
cz=wd[10]+wd[11]*256;
return cz;
}
else
if(py_t=='7' && id+6<sum)
{
cz=wd[12]+wd[13]*256;
return cz;
}
else
if(py_t=='8' && id+7<sum)
{
cz=wd[14]+wd[15]*256;
return cz;
}
else
if(py_t=='9' && id+8<sum)
{
cz=wd[16]+wd[17]*256;
return cz;
}
print_word(2,0,0);
TextOut(27,21,word_data,1);
if(strlen(word_data)<18)Block(strlen(word_data)*6+27,32,strlen(word_data)*6+31,33,1);
else
{
if(word_data[str_len-1]<160)Block(strlen(word_data)*6+21,32,strlen(word_data)*6+25,33,1);
else Block(strlen(word_data)*6+15,32,strlen(word_data)*6+25,33,1);
}
TextOut(52,37,pinyin,1);
tg=System.PY2GB(id,pinyin,wd);
if(tg!=-1)
{
sum=tg>>16;
TextOut(27,53,wd,1);
}
Refresh();
}
}
long inputnum(int str_len)//输入一个整数
{
long cz;
char str_dat[11];
char scanf_t;
int str_n,str_i,str_j;
memset(str_dat,0,10);
str_i=0;
for(;;)
{
print_word(0,3,1);
TextOut(27,21,str_dat,1);
Block(strlen(str_dat)*6+27,32,strlen(str_dat)*6+32,33,1);
Refresh();
scanf_t=getchar();
str_n=strlen(str_dat);
if(str_dat[0]==45)str_i=1;
else str_i=0;
if((scanf_t==45 || scanf_t==23) && str_n==0)str_dat[0]=45;
else
if(scanf_t>='0' && scanf_t<='9' && str_n<str_len+str_i)str_dat[str_n]=scanf_t;
/************下面的功能是老式键盘用的,TC800上用可以去掉这些****************/
else
if(scanf_t=='b' && str_n<str_len+str_i)str_dat[str_n]=49;
else
if(scanf_t=='n' && str_n<str_len+str_i)str_dat[str_n]=50;
else
if(scanf_t=='m' && str_n<str_len+str_i)str_dat[str_n]=51;
else
if(scanf_t=='g' && str_n<str_len+str_i)str_dat[str_n]=52;
else
if(scanf_t=='h' && str_n<str_len+str_i)str_dat[str_n]=53;
else
if(scanf_t=='j' && str_n<str_len+str_i)str_dat[str_n]=54;
else
if(scanf_t=='t' && str_n<str_len+str_i)str_dat[str_n]=55;
else
if(scanf_t=='y' && str_n<str_len+str_i)str_dat[str_n]=56;
else
if(scanf_t=='u' && str_n<str_len+str_i)str_dat[str_n]=57;
/************上面的功能是老式键盘用的,TC800上用可以去掉这些****************/
else
if(scanf_t==13)
{
if(str_dat[0]==45)//判断是否为负数
{
str_i=1;
str_j=-1;
}
else
{
str_i=0;
str_j=1;
}
str_n=strlen(str_dat);
if(str_n==0 || (str_n==1 && str_dat[0]==45))return 0;
cz=str_dat[str_i]-48;
for(str_i++;str_i<str_n;str_i++)cz=cz*10+str_dat[str_i]-48;//字符串转成数值
cz=cz*str_j;
return cz;
}
else
if(scanf_t==27)return 0;
else
if(scanf_t==29)str_dat[--str_n]=0;
}
}
void scanf(long format,long add,int str_len)//输入函数
//format为输入格式,"%s" 为字符串,"%d" 为数值;
//add为将要保存的地址;
//str_len为长度:字符串最长为十八个字节,数值最长为九位数(不包括负号);
//0<str_len<=18;超出这个范围系统会自动设为最大值。
//这个函数可以用五笔和拼音输入中文;最多支持输入九个汉字;
//可以输入英文字符串;最多支持输入十八个英文字母;
//可以输入一个正整数或一个负整数;最多支持输入九位数值(不包括负号)。
{
int cz,scanf_n;
long cz_num;
char cz_str[4];
char word_data[19];
char word[19];
char caps,mode,china;
char gs[3];
caps=1;
mode=2;
china=1;
scanf_n=0 ;
gs[2]=0 ;
SetFgColor(15);
GetBlock(0,0,160,80,0x40,scanf_data);
/******************************输入数值******************************/
if(strcmp(format,"%s")!=0)
{
if(str_len<=0 || str_len>9)str_len=9;
cz_num=inputnum(str_len);
memcpy(add,&cz_num,4);
WriteBlock(0,0,160,80,0x81,scanf_data);
Refresh();
return;
}
/******************************输入数值******************************/
/*****************************输入字符串*****************************/
if(str_len<=0 || str_len>18)str_len=18;
memcpy(word_data,add,strlen(add));
for(;;)
{
cz=0;
print_word(mode,caps,china);
TextOut(27,21,word_data,1);
if(strlen(word_data)<18)Block(strlen(word_data)*6+27,32,strlen(word_data)*6+31,33,1);
else
{
if(word_data[str_len-1]<160)Block(strlen(word_data)*6+21,32,strlen(word_data)*6+25,33,1);
else Block(strlen(word_data)*6+15,32,strlen(word_data)*6+25,33,1);
}
Refresh();
if(mode==0)//老式键盘输入数字字符用的,TC800上用可以去掉,
{
cz=number();
if(cz==-1)
{
mode=2;
continue;
}
}
else
if(mode==1)//输入英文字符
{
cz=english(caps);
if(cz==-1)
{
mode=0;
continue;
}
else
if(cz==0 || cz==1)
{
caps=cz;
continue;
}
}
else//输入中文字符
{
if(china==1)//五笔输入法
{
cz=wb(word,word_data,str_len);
memset(word_data,0,7);
memcpy(word_data,word,strlen(word));
if(cz==1)
{
china=0;
continue;
}
else
if(cz==2)
{
mode=1;
continue;
}
}
else //拼音输入法
{
cz=chinese(word_data,str_len);
if(cz<0)cz=cz+65536;
if(cz==1)
{
china=1;
continue;
}
else
if(cz==2)
{
mode=1;
continue;
}
}
}
gs[0]=cz;
scanf_n=strlen(word_data);
if(isprint(gs[0]) && scanf_n<str_len)
{
word_data[scanf_n]=gs[0];
continue ;
}
else
if(gs[0]>=160 && scanf_n<str_len-1)
{
gs[1]=cz>>8;
word_data[scanf_n]=gs[0];
word_data[scanf_n+1]=gs[1];
continue ;
}
else
if(gs[0]==29 && scanf_n)
{
scanf_n--;
if(word_data[scanf_n]>=160)
{
scanf_n--;
memset(word_data+scanf_n,0,2);
}
else word_data[scanf_n]=0 ;
continue ;
}
else
if(gs[0]==13 && scanf_n)
{
word_data[scanf_n]=0;
memset(add,0,str_len);
memcpy(add,word_data,strlen(word_data));
WriteBlock(0,0,160,80,0x81,scanf_data);
Refresh();
return;
}
if(gs[0]==27)
{
WriteBlock(0,0,160,80,0x81,scanf_data);
Refresh();
return;
}
if(scanf_n==0 && gs[0]==13)Beep();
}
/*****************************输入字符串*****************************/
}
以上是一个输入函数。可以输入英文,汉字和数字,但不能输入符号!用法是:
把上面的这个函数放在一个文本文件里,然后把文件名改成scanf.h,在LAVAXIDE3。5版中编译,编译前把这个文件包含进去。注意你定义的变量名不能与这个函数里的相同哦!下面是一个例子:
char name[19];
long i;
#include "scanf.h"
void main()
{
WB2GB_Init();//在程序一开始时请打开五笔输入法的文件句柄;
SetGraphMode(4);
SetBgColor(5);
clearscreen();
Refresh();
scanf("%s",&name,0);//name一定要有足够的空间来存放返回值!
scanf("%d",&i,0);//用于存放数值的变量i一定要是一个long型的,要用int的请自行转换!
printf("%s\n%d",name,i);
getchar();
WB2GB_Exit();//在程序结束时请关闭五笔输入法的句柄!
} |
|