📄 tool.c
字号:
#include "./apmenu.h"/***** 保存屏幕***/SAVESCR *Saverect(w, height, width, y, x)WINDOW *w;int height;int width;int y;int x;{ int i, j, c, k=0; int *str; SAVESCR *Savescr; if(height>25||width>80)return NULL; str=(int *)malloc(height*width*sizeof(int)); Savescr=(SAVESCR *)malloc(sizeof(SAVESCR)); if(Savescr==NULL||str==NULL)return NULL; Savescr->height=height; Savescr->width=width; Savescr->p=str; for(j=y;j<y+height;j++) for(i=x;i<x+width;i++){ c=mvwinch(w,j,i); Savescr->p[k]=c; k++; } wrefresh(w); return Savescr;}/***** 恢复屏幕***/int Putrect(w, y, x, Savescr)WINDOW *w;int y;int x;SAVESCR *Savescr;{ int i,j,k=0; if(Savescr==NULL)return FALSE; wsetcolor(w,0,0); for(j=y;j<y+Savescr->height;j++) for(i=x;i<x+Savescr->width;i++){ mvwaddch(w,j,i,Savescr->p[k]); k++; } wrefresh(w); return TRUE;}/***** 释放屏幕内存***/int Free(Savescr)SAVESCR *Savescr;{ int i,j; i=free(Savescr->p); j=free(Savescr); if(i==-1||j==-1)return FALSE; else return TRUE;}/***** 画框函数***/int Box(w, row, wide, y, x)WINDOW *w;int row;int wide;int y;int x;{ int i,y1,x1; y1=y+row;x1=x+wide; mvwaddstr(w,y,x,"┏"); mvwaddstr(w,y,x1,"┓"); mvwaddstr(w,y1,x1,"┛"); mvwaddstr(w,y1,x,"┗"); for(i=x+2;i<=x1-2;i+=2){ mvwaddstr(w,y,i,"━"); mvwaddstr(w,y1,i,"━"); } for(i=y+1;i<=y1-1;i+=1){ mvwaddstr(w,i,x,"┃"); mvwaddstr(w,i,x1,"┃"); } wrefresh(w); return TRUE;}/***** 画线函数*****/int Line( w, height, width, y, x)WINDOW *w;int height;int width;int y;int x;{ int i,j; if (height==0) for (i=x;i<x+width;i++) mvwaddch(w,y,i,'-'); else if (width==0) for (i=y;i<y+height;i++) mvwaddstr(w,i,x,"┃"); wrefresh(w);}/***** 填充正方形函数*****/int Clear( w, height, wide, y, x, color)WINDOW *w;int height;int wide;int y;int x;int color;{ int i,j; wsetcolor(w,1,color); for(i=y;i<=(y+height);i++)for(j=x;j<(x+wide);j++) mvwaddch(w,i,j,' '); wrefresh(w);}/***** 获取字符串函数*****/char *Getstr( w, y, x, maxlen,listlen, color, bkcolor)WINDOW *w;int y;int x;int maxlen;int listlen;int color;int bkcolor;{ int i=0,j=0,ch; char *str; str=(char *)malloc(80); wsetcolor(w,color,bkcolor); wmove(w,y,x); wrefresh(w); while(1){ ch=getch(); if(ch==Key_esc){if(ch=getch()==91){ ch=getch(); if(ch==Key_right){ i++; wmove(w,y,x+i); wrefresh(w); } if(ch==Key_left){ i--; wsetcolor(w,bkcolor,bkcolor); mvwaddch(w,y,x+i,' '); wmove(w,y,x+i); wrefresh(w); wsetcolor(w,color,bkcolor); } } } else { if(ch==Key_enter)break; if(ch!=Key_backspace){ mvwaddch(w,y,x+i,ch); wrefresh(w); str[i]=(char)ch; i++; } else { i--; wsetcolor(w,bkcolor,bkcolor); mvwaddch(w,y,x+i,' '); wmove(w,y,x+i); wrefresh(w); wsetcolor(w,color,bkcolor); } } } str[i]='\0'; return str;}/***** 信息框函数*****/int MessageBox(w, y,x,strs,strt,flags)WINDOW *w;int y;int x;char *strs;char *strt;int flags;{ int height=0,width=0,i=0,j=0,k=0; int color1=RED,color2=CYAN; char *p,str1[60],str2[2],OK1[]="<Ok> Cancle ",CL1[]=" Ok <Cancle>",ch; SAVESCR *Scr; p=strs; while(p[i]!='\0'){ if(p[i]=='~'){ height++; j=Min(j+1,60); width=Max(width,j); j=0; i++; } else{ i++; j++; } } if(height==0){ width=j; width=Min(width,60); } else width=Max(width,j); height=height+5; if(width<17) width=17; width=width+12; Scr=(SAVESCR *)Saverect(w,height+2,width+2,y,x); j=y;k=x; Clear(w,height,width,y+1,x+2,GRAY); if(strlen(strt)>0){ wsetcolor(w,BLACK,GRAY); mvwaddstr(w,y,x,"━"); Clear(w,0,width-2,y,x+2,BLUE); wsetcolor(w,LT_WHITE,BLUE); wmove(w,y,x+(width-strlen(strt))/2); waddstr(w,strt); Clear(w,height-1,width,y+1,x,color2); } else Clear(w,height,width,y,x,color2); wmove(w,y,x+6); y=y+2; p=strs; i=0; wsetcolor(w,color1,color2); str1[0]='\0'; while(*p!='\0'){ if(*p=='~'){ p++; i=0; wmove(w,y++,x+6); waddstr(w,str1); wrefresh(w); str1[0]='\0'; } if(i>59){ while(*p!='~') p++; i=0; p++; wmove(w,y++,x+6); waddstr(w,str1); wrefresh(w); str1[0]='\0'; } str2[0]=*p; str2[1]='\0'; strcat(str1,str2); i++; p++; } wmove(w,y++,x+6); waddstr(w,str1); wrefresh(w); str1[0]='\0'; if(flags==1){ wmove(w,y+1,x+(width-4)/2); waddstr(w,"<OK>"); wrefresh(w); while(getch()!=Key_enter); Putrect(w,j,k,Scr); Free(Scr); return 0; } wmove(w,y+1,x+(width-17)/2); waddstr(w,CL1); wrefresh(w); i=2; while(1){ ch=getch(); switch(ch){ case Key_left: case Key_right: if(i==1){ i=2; wmove(w,y+1,x+(width-17)/2); waddstr(w,CL1); wrefresh(w); }else{ i=1; wmove(w,y+1,x+(width-17)/2); waddstr(w,OK1); wrefresh(w); } break; case Key_enter: Putrect(w,j,k,Scr); Free(Scr); break; } if(ch==Key_enter) break; } return(i);}/*** 是否支持颜色***/is_terminal(){ if ( strcmp( getenv( "TERM", "ansi" ) == 0 )) return(1); else return(0);}/*** Getchar() ***/int f_getch(){ int keynum ; keynum = getch(); if(keynum==Key_esc){ if( ( keynum=getch())==91){ return(getch()); } } return( keynum );}/***** 把 s2 放到 s1 的前面***/f_strcat( s1, s2 )char *s1;char *s2;{ char s[512]; strcpy( s, s2 ); strcat ( s, s1 ); strcpy( s1 , s );}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -