📄 tools.h
字号:
void Insert(int k,string s,int i)
{
int len1=strlen(s),j;
for( j=len1;j>i;j--)
s[j]=s[j-1];
s[i]=k;
if(s[len1+1]!='\0')
s[len1+1]='\0';
}
void Stringobj_edit(stringobj& strobj,int newx,int newy,int lens,int& lastk,boolean& funckey)//var lastk:byte;
{int key,m;
int i,j,k;
boolean inthisstring=true;
boolean insstate;
i=1;
inthisstring=true;
Stringobj_moveto(strobj,newx,newy);
Stringobj_displaystringxy(strobj,newx,newy);
cursor cur1;
Cursor_init(cur1,1,2,2,0);
Cursor_show(cur1);
Stringobj_movetoword(strobj,i,cur1);//Cursor_moveto(cur1,newx,newy);
do
{ Getkey(key,funckey);
if (!funckey )// {== data ==}
if (key==10||key==13||key==ctrlw)
inthisstring=false;
else if (key==8)
{ if (i>1) // {backspace key}
{ if (Isascii(strobj.s[i-2]))
{ Delete(strobj.s,i-2,1);
i--;
Stringobj_displaystringxy(strobj,strobj.scrx1,strobj.scry1);
Clear_byte_disp(newx+strlen(strobj.s),newy);
Stringobj_movetoword(strobj,i,cur1);
}
else
{ Delete(strobj.s,i-3,2);
i=i-2;
Stringobj_displaystringxy(strobj,strobj.scrx1,strobj.scry1);
Clear_byte_disp(newx+strlen(strobj.s),newy);
Clear_byte_disp(newx+strlen(strobj.s)+1,newy);
Stringobj_movetoword(strobj,i,cur1);
}
}
}
else {
if ( strlen(strobj.s)>lens-1)
inthisstring=false;
else{
if(insstate)
Insert(key,strobj.s,i-1);
else
strobj.s[i-1]=key;
i=i+1;
Stringobj_displaystringxy(strobj,strobj.scrx1,strobj.scry1);
Stringobj_movetoword(strobj,i,cur1);
}
}
else { if (key==left||key==right||key==shiftleft||key==shiftright)
{ switch (key)
{
case left: {
i=i-1;
if ((i>1)&&!Isascii(strobj.s[i-1]) )
i=i-1;
break;
}
case right:
if (i>strlen(strobj.s))
if ( (Isascii(strobj.s[i-1])||strobj.s[i-1]=='\0'))
i=i+1;
else
i=i+2;
else
if (Isascii(strobj.s[i])||strobj.s[i]=='\0'||(!Isascii(strobj.s[i])&&Isascii(strobj.s[i-1]) ) )
i=i+1;
else
i=i+2;
break;
case shiftleft: i=1; break;
case shiftright: i=strlen(strobj.s); break;
}
if (i<1)
i=1 ;
Stringobj_movetoword(strobj,i,cur1);
}
else if (key==up||key==down||key==pgup||key==pgdn||key==home||key==f10kb)
inthisstring=false;
else if (key==del||key==ins)
switch(key)
{
case del: {
if (strobj.s[i-1]=='\0')
;
else
{
if(Isascii(strobj.s[i-1]) )
{
Delete(strobj.s,i-1,1);
Stringobj_displaystringxy(strobj,strobj.scrx1,strobj.scry1);
Clear_byte_disp(newx+strlen(strobj.s),newy);
Stringobj_movetoword(strobj,i,cur1);
}
else
{ Delete(strobj.s,i-1,2);
Stringobj_displaystringxy(strobj,strobj.scrx1,strobj.scry1);
Clear_byte_disp(newx+strlen(strobj.s),newy);
Clear_byte_disp(newx+strlen(strobj.s)+1,newy);
Stringobj_movetoword(strobj,i,cur1);
}
}
break;
}
case ins: {
insstate=boolean(!insstate);
if (insstate)
Displaytextxy(70,2,"insert");
else
Displaytextxy(70,2," ");
break;
}
}
}
}
while(inthisstring);
lastk=key;
Cursor_hide(cur1);
Cursor_done(cur1);
}
//gmenubar
void Gmenubar_init(gmenubar& gmnbar,int foreclr,int width)
{int size;
gmnbar.forecolor=foreclr;
gmnbar.visible=false;
gmnbar.w=width;
gmnbar.col=0;
gmnbar.row=0;
setfillpattern(fillmode,gmnbar.forecolor);
bar(1,1,8,16);
size=imagesize(1,1,8,16);
gmnbar.pmem=malloc(size);
getimage(1,1,8,16,gmnbar.pmem);
putimage(1,1,gmnbar.pmem,1);
}
void Gmenubar_show(gwindow& gwnd, gmenubar& gmnbar)
{int xs,ys,i;
gmnbar.visible=true;
xs=gwnd.x1+gmnbar.col-1;
ys=gwnd.y1+gmnbar.row-1;
for (i=0;i<=gmnbar.w-1;i++)
putimage((xs+i)*charwidth,ys*charhigh,gmnbar.pmem,1);
}
void Gmenubar_hide(gwindow& gwnd, gmenubar& gmnbar)
{ Gmenubar_show(gwnd,gmnbar);
gmnbar.visible=false;
}
void Gmenubar_moveto(gwindow& gwnd, gmenubar& gmnbar,int i,int j)
{ if (gmnbar.visible)
Gmenubar_hide(gwnd,gmnbar);
gmnbar.row=i;
gmnbar.col=(j-1)*14+1;
Gmenubar_show(gwnd,gmnbar);
}
//{ gwindow }
void Gwindow_init(gwindow& gwnd,int newx1,int newy1,int newx2,int newy2)//:byte);
{int w,h;
gwnd.x1=newx1;
gwnd.y1=newy1;
gwnd.x2=newx2;
gwnd.y2=newy2;
w=charwidth;
h=charhigh;
gwnd.gx1=(gwnd.x1-1)*w;
gwnd.gy1=gwnd.y1*h-h/ 2;
gwnd.gx2=gwnd.x2*w;
gwnd.gy2=(gwnd.y2+1)*h+h/2;
}
void Gwindow_done(gwindow& gwnd)
{ putimage(gwnd.gx1,gwnd.gy1,gwnd.pmem,0);
farfree(gwnd.pmem);
}
void Gwindow_newwindow(gwindow& gwnd)
{
int size=imagesize(gwnd.gx1,gwnd.gy1,gwnd.gx2,gwnd.gy2);
gwnd.pmem=farmalloc(size);
getimage(gwnd.gx1,gwnd.gy1,gwnd.gx2,gwnd.gy2,gwnd.pmem);
putimage(gwnd.gx1,gwnd.gy1,gwnd.pmem,1);
setcolor(YELLOW);
rectangle(gwnd.gx1+3,gwnd.gy1+3,gwnd.gx2-3,gwnd.gy2-3);
}
void Gwindow_showstring(gwindow& gwnd,int relx,int rely,string s)
{
Displaytextxy1(gwnd.x1+relx,gwnd.y1+rely,s);
}
void Gwindow_editstring(gwindow& gwnd,int relx,int rely,string ss)
{ stringobj astr;
int w;
int lastk;;
boolean funckey;
Stringobj_init(astr,ss);
w=gwnd.x2-gwnd.x1-relx;
Stringobj_edit(astr,gwnd.x1+relx,gwnd.y1+rely,w,lastk,funckey);
if (lastk!=esc)
{
unsigned char s1[70]="";
Rtrim(astr.s,s1);
unsigned char s2[70]="";
Ltrim(s1,s2);
strcpy(ss,s2);
}
Stringobj_done(astr);
}
void Gwindow_inputstring(gwindow& gwnd,int relx,int rely,string ss)
{
Gwindow_editstring(gwnd,relx,rely,ss);
}
void Gwindow_clear_linemid(gwindow& gwnd,int relx,int rely,int len)
{int i;
// with gwnd do
for(i=gwnd.x1+relx;i<=gwnd.x1+len;i++)
Clear_byte_disp(i,gwnd.y1+rely);
}
void Gwindow_clear_lineleft(gwindow& gwnd,int relrow,int len)
{ Gwindow_clear_linemid(gwnd,1,relrow,len); }
void Gwindow_clear_lineright(gwindow& gwnd,int relrow,int len)
{ Gwindow_clear_linemid(gwnd,gwnd.x2-len+1,relrow,len); }
void Gwindow_clear_line(gwindow& gwnd,int relrow)
{ Gwindow_clear_linemid(gwnd,1,relrow,gwnd.x2-gwnd.x1-1); }
void Gwindow_clear(gwindow& gwnd)
{int i;
for (i=1;i<=gwnd.y2-gwnd.y1+1;i++)
Gwindow_clear_line(gwnd,i);
}
void Inputstrinwnd(int x1,int y1,int x2,string s0,string ss)
{gwindow gwnd;
Gwindow_init(gwnd,x1,y1,x2,y1);
Gwindow_newwindow(gwnd);
Gwindow_showstring(gwnd,1,1,s0);
Gwindow_editstring(gwnd,1+strlen(s0),1,ss);
Gwindow_done(gwnd);
}
void Editstrinwnd(int x1,int y1,int x2,string s0,string ss)
{gwindow gwnd;
Gwindow_init(gwnd,x1,y1,x2,y1);
Gwindow_newwindow(gwnd);
Gwindow_showstring(gwnd,1,1,s0);
Gwindow_editstring(gwnd,1+strlen(s0),1,ss);
Gwindow_done(gwnd);
}
void Dispstrinwnd(int x1,int y1,string s0)
{gwindow gwnd;
int w,x2;
w=strlen(s0);
x2=x1+w+2;
Gwindow_init(gwnd,x1,y1,x2,y1);
Gwindow_newwindow(gwnd);
Gwindow_showstring(gwnd,1,1,s0);
getch();
Gwindow_done(gwnd);
}
void Inputintinwnd(int x1,int y1,int x2, string s0,int& i)
{
char *endptr;
long LI;
gwindow gwnd;
Gwindow_init(gwnd,x1,y1,x2,y1);
Gwindow_newwindow(gwnd);
unsigned char sss[70]="";
strcpy(sss,s0);
do
{
Gwindow_showstring(gwnd,1,1,sss);
unsigned char s1[70]="";
Gwindow_inputstring(gwnd,1+strlen(sss),1,s1);
unsigned char s2[70]="";
Rtrim(s1,s2);
unsigned char s3[70]="";
Ltrim(s2,s3);
LI=strtol(s3,&endptr,10);
if(*endptr=='\0'&&(LI<-32768||LI>32767) )
{
Error("over flow,input again!");
Gwindow_clear_line(gwnd,1);
}
else if(*endptr!='\0')
{ Error("format of data error,input again!");
Gwindow_clear_line(gwnd,1);
}
}
while( !(*endptr=='\0'&&LI>=-32768&&LI<=32767) );
i=LI;
Gwindow_done(gwnd);
}
void Editintinwnd(int x1,int y1,int x2,string s0,int& i)
{ char *endptr;
long LI;
gwindow gwnd;
Gwindow_init(gwnd,x1,y1,x2,y1);
Gwindow_newwindow(gwnd);
unsigned char sss[70]="";
strcpy(sss,s0);
do
{
Gwindow_showstring(gwnd,1,1,sss);
unsigned char s1[70]="";
itoa(i,s1,10);
Gwindow_editstring(gwnd,1+strlen(s0),1,s1);
unsigned char s2[70]="";
Rtrim(s1,s2);
unsigned char s3[70]="";
Ltrim(s2,s3);
LI=strtol(s3,&endptr,10);
if(*endptr=='\0'&&(LI<-32768||LI>32767) )
{
Error("over flow,input again!");
Gwindow_clear_line(gwnd,1);
}
else if(*endptr!='\0')
{ Error("format of data error,input again!");
Gwindow_clear_line(gwnd,1);
}
}
while( !(*endptr=='\0'&&LI>=-32768&&LI<=32767) );
i=LI;
Gwindow_done(gwnd);
}
void Inputrealinwnd(int x1,int y1,int x2,string s0,double& r)
{ char *endptr;
gwindow gwnd;
Gwindow_init(gwnd,x1,y1,x2,y1);
Gwindow_newwindow(gwnd);
unsigned char sss[70]="";
strcpy(sss,s0);
do
{
Gwindow_showstring(gwnd,1,1,sss);
unsigned char s1[70]="";
Gwindow_inputstring(gwnd,1+strlen(sss),1,s1);
unsigned char s2[70]="";
Rtrim(s1,s2);
unsigned char s3[70]="";
Ltrim(s2,s3);
r=strtod(s3,&endptr);
if(*endptr!='\0')
{ Error("format of data error,input again!");
Gwindow_clear_line(gwnd,1);
}
}
while( !(*endptr=='\0') );
Gwindow_done(gwnd);
}
void Editrealinwnd(int x1,int y1,int x2,string s0,double& r)
{
char *endptr;
gwindow gwnd;
Gwindow_init(gwnd,x1,y1,x2,y1);
Gwindow_newwindow(gwnd);
unsigned char sss[70]="";
strcpy(sss,s0);
double rr=r;
do
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -