原始程式
UReadS
原始檔-起始 /*---------( READS.C )-----------------*/ #include "w_obj.h" extern unshort RetKey; extern int Modify,NetWare,NetWritAble; extern int CURSOR; unchar Copy_S[258]; /*================================================================*/ int UReadS(int X,int Y,int len,char *Pstr,char *flagS,int attr_off,int attr) { char tmpS[82],orginS[82]; int wKeepLoop=ON; int NowX=X,sw; int iStrR=X+len-1; if(X<1 || len<1) UFatal("ReadS X,len<0"); UETKbSet(*flagS); /* 1'st char to set input mode Chinese/Number */ if(strlen(flagS) >= 3) NowX += atoi(flagS+2); USetColor(X,Y,len,attr); UGetS(X,Y,len,orginS); UShiftString(orginS,len,flagS); USetCursor(CURSOR); UClKbBuf(); do { gotoxy(NowX,Y); RetKey=UGetKb(); if(0x00FF<RetKey && RetKey<=0x8100) /* Funtion Key */ { switch(RetKey) { case INS : CURSOR *= -1; USetCursor(CURSOR); break; case BACK : if(NowX>X) { UGetS(NowX,Y,iStrR-NowX+1,tmpS); UShowSL(NowX-1,Y,iStrR-NowX+1,tmpS,attr); tmpS[0]=SPACE; UShowSL(iStrR,Y,1,tmpS,attr); } if(--NowX < X) { wKeepLoop=OFF; RetKey=LEFT; } break; case DEL : UGetS(NowX+1,Y,iStrR-NowX,tmpS); UShowSL(NowX,Y,iStrR-NowX,tmpS,attr); tmpS[0]=SPACE; UShowSL(iStrR,Y,1,tmpS,attr); break; case LEFT : if(--NowX < X) { wKeepLoop=OFF; RetKey=LEFT; } break; case RIGHT: if(++NowX > iStrR) { wKeepLoop=OFF; RetKey=RIGHT; } break; case TAB : NowX+=6 ; if(NowX > iStrR) NowX=iStrR; break; case S_TAB: NowX-=6 ; if(NowX < X) NowX=X; break; case A_C : UGetS(NowX,Y,iStrR-NowX+1,Copy_S); USetColor(NowX,Y,iStrR-NowX+1,V_COPY); break; case A_M : UShowSL(NowX,Y,min(iStrR-NowX+1,strlen(Copy_S)),Copy_S,attr); for(NowX=X; NowX<iStrR; NowX++) if(UGetC(NowX,Y)<=SPACE) break; if(NowX>=iStrR) NowX=X; break; case ENTER: wKeepLoop=OFF; RetKey=RIGHT; break; default : wKeepLoop=OFF; break; } /* end switch */ } /* end if */ else if((RetKey > 0x8101) && (NowX < iStrR)) /* CHINESE code */ { if(CURSOR==BIG) { UGetS(NowX,Y,iStrR-NowX-1,tmpS); UShowSL(NowX+2,Y,iStrR-NowX-1,tmpS,attr); } tmpS[0]=(char)(RetKey >> 8); tmpS[1]=(char)(RetKey & 0x00FF); UShowSL(NowX,Y,2,tmpS,attr); NowX+=2; if(NowX>iStrR){ wKeepLoop=OFF; RetKey=RIGHT; } } else /* ASCII code */ { if(CURSOR==BIG) { UGetS(NowX,Y,iStrR-NowX,tmpS); UShowSL(NowX+1,Y,iStrR-NowX,tmpS,attr); } tmpS[0]=(char)RetKey; UShowSL(NowX++,Y,1,tmpS,attr); if(NowX>iStrR){ wKeepLoop=OFF; RetKey=RIGHT; } } } while (wKeepLoop); USetCursor(OFF); UGetS(X,Y,len,Pstr); UShiftString(Pstr,len,flagS); UShowSL(X,Y,len,Pstr,attr_off); sw=strcmp(orginS,Pstr); if(sw) Modify=ON; /*有更動*/ if(NetWare && NetWritAble==OFF) Modify=OFF; /*網路版且僅有查閱權*/ return sw; } 原始檔-結束
Byron Wey Oct.21.1998