📄 tool.c
字号:
do { if ( -- option < 0 ) option = Menu->menuwin->height - 3; } while( Menu->items[option].item[0] == '-' ); break; default: for( i = 0; i < Menu->menuwin->height - 2; i ++ ) { for ( HotKey = Menu->items[i].item; *HotKey == ' '; HotKey ++ ); if ( *HotKey == choice ) { option = i; Menu->lastoption = option; if ( Menu->items[ option ].callfunc != NULL ) { /*函数中有系统调用时恢复界面*/ if ( Menu->items[ option ].callfunc() == SYSTEM_RET) { DeleteWindow (Menu->menuwin); resetty(); return option; } } break; } } } }}MessageBX( char *msg ){ int len; WINDOWS *msgwin; COLORPATTERN MessageColor; len = strlen( msg ); len = len % 2 == 0 ? len : len + 1; SetColorPattern( &MessageColor, BLACK, WHITE, BLACK, WHITE, WHITE, RED, WHITE, MAGENTA ); SetColor( &MessageColor ); msgwin = CreateWindow( 4, 78 - len - 6, 3, len + 6, REGULAR_BOARD, NULL, &MessageColor ); mvwaddstr( msgwin->win, 1, 3, msg ); wrefresh( msgwin->win ); beep(); getch(); DeleteWindow( msgwin );} MessageBX1( char *msg ){ int len; WINDOWS *msgwin; COLORPATTERN MessageColor; len = strlen( msg ); len = len % 2 == 0 ? len : len + 1; SetColorPattern( &MessageColor, BLACK, WHITE, BLACK, WHITE, WHITE, RED, WHITE, MAGENTA ); SetColor( &MessageColor ); msgwin = CreateWindow( 4, 78 - len - 6, 3, len + 6, REGULAR_BOARD, NULL, &MessageColor ); mvwaddstr( msgwin->win, 1, 3, msg ); wrefresh( msgwin->win ); beep(); /*getch(); */ DeleteWindow( msgwin );} WINDOWS * CreateWindow( row, col, height, width, board, title, colorpattern )int row, col, height, width, board;char *title;COLORPATTERN *colorpattern;{ int i; char titleblank[80]; WINDOWS *NewWindow; WINDOWLINK *winlink; int curpos, widlen, titlelen; WINDOW *win; WINDOW *win1; WINDOWS *NewWindow1; if ( ( NewWindow = ( WINDOWS * )malloc( sizeof( WINDOWS ) ) ) == NULL ) return NULL; if ( ( NewWindow1 = ( WINDOWS * )malloc( sizeof( WINDOWS ) ) ) == NULL ) return NULL; widlen = ( width % 2 == 0 ) ? width : width + 1; memset( titleblank, ' ', widlen ); titleblank[widlen] = 0; /* 画阴影 */ if ( HasColors ) { win1 = newwin( height, widlen, row + 1, col + 2 );/*for test*/ NewWindow1->win = win1; NewWindow1->row = row+1; NewWindow1->col = col+2; NewWindow1->height = height; NewWindow1->width = widlen; NewWindow1->boardtype = board; NewWindow1->title = NULL; AddToWindowLink( NewWindow1 );/* werase( win ); delwin( win );*/ wrefresh( win1 ); } win = newwin( height, widlen, row, col ); NewWindow->win = win; NewWindow->row = row; NewWindow->col = col; NewWindow->height = height; NewWindow->width = widlen; NewWindow->boardtype = board; NewWindow->title = title; AddToWindowLink( NewWindow ); if ( board == NO_BOARD ) return ( NewWindow ); if ( HasColors ) { SetColor( colorpattern ); wattrset( win, COLOR_PAIR( TEXT_PATTERN ) ); for( i = 1; i < height; i ++ ) mvwaddstr( win, i, 0, titleblank ); } if ( title != NULL ) { char titleboxl[20], titleboxr[20], tmp[80]; if ( board == BOLD_BOARD ) { strcpy( titleboxl, Bold[6] ); strcpy( titleboxr, Bold[4] ); } if ( board == REGULAR_BOARD ) { strcpy( titleboxl, Regular[6] ); strcpy( titleboxr, Regular[4] ); } if ( HasColors ) { wattrset( win, COLOR_PAIR( BOARD_PATTERN ) ); BoxInWin( win, 1, 0, height - 1, widlen, board ); /*if ( strlen( title ) % 2 != 0 )*/ /*strcat( title, " " ); */ /*dangerous*/ titlelen = (strlen(title)%2==0)?strlen(title) : strlen(title)+1; curpos = ( widlen - titlelen ) / 2; memcpy( titleblank + curpos, title, strlen( title ) ); /*init_pair( TITLE_PATTERN, WHITE, BLUE );*/ wattrset( win, COLOR_PAIR( TITLE_PATTERN ) ); mvwaddstr( win, 0, 0, titleblank ); } else { /*if ( strlen( title ) % 2 != 0 )*/ /* strcat( title, " " );*/ sprintf( tmp, "%s%s%s", titleboxl, title, titleboxr ); curpos = ( widlen - strlen( tmp ) ) / 2; curpos = curpos % 2 == 0 ? curpos : curpos + 1; BoxWin( win, board ); mvwaddstr( win, 0, curpos, tmp ); } } else { if ( HasColors ) wattrset( win, COLOR_PAIR( BOARD_PATTERN ) ); BoxWin( win, board ); } if ( HasColors ) wattrset( win, COLOR_PAIR( TEXT_PATTERN ) ); wrefresh( win ); return ( NewWindow );}DeleteWindow( thiswindow )WINDOWS *thiswindow;{ WINDOWLINK *LastWinLink; WINDOWLINK *OldWinLink; werase( thiswindow->win ); delwin( thiswindow->win ); wrefresh( thiswindow->win ); DeleteLastWindowLink(); /* DeleteFromWindowLink( thiswindow ); if ( LastWinLink != &MyWinLink ) { touchwin( LastWinLink->thiswindow->win ); wrefresh( LastWinLink->thiswindow->win ); } */ LastWinLink = FindLastWindowLink();/*for test*/ if ( HasColors ) /*阴影*/ { werase( LastWinLink->thiswindow->win ); delwin( LastWinLink->thiswindow->win ); wrefresh( LastWinLink->thiswindow->win ); DeleteLastWindowLink(); } touchwin( stdscr ); wnoutrefresh( stdscr ); if (HasColors) BackGround(WHITE, CYAN); if ( ( OldWinLink = MyWinLink.nextwinnode ) != NULL ) { while( OldWinLink != NULL ) { /*wnoutrefresh( OldWinLink->thiswindow->win );*/ touchwin( OldWinLink->thiswindow->win ); wnoutrefresh( OldWinLink->thiswindow->win ); /*wrefresh( OldWinLink->thiswindow->win );*/ OldWinLink = OldWinLink->nextwinnode; } }}SetMessageShowMode( ShowMode )int ShowMode;{ MessageShowMode = ShowMode;}SetMessage( Message )char *Message;{ char blank[71]; memset( blank, ' ', 70 ); blank[70] = 0; if ( HasColors ) { init_pair( MESSAGE_PATTERN, BLACK, WHITE ); attrset( COLOR_PAIR( MESSAGE_PATTERN ) ); } else { if ( MessageShowMode == REV_SHOW ) standout(); else standend(); } mvaddstr( MESSAGELINE, 0, "【提示】" ); refresh(); if ( Message != NULL ) mvaddstr( MESSAGELINE, 9, Message ); refresh(); mvaddstr( MESSAGELINE, 65, "☆杭州信雅达☆" ); if ( ! HasColors ) standend(); refresh();}InitSystem( ){ initscr(); InitWindowLink();}InitColorSystem( ){ TTYStatus(1); initscr(); start_color(); HasColors = has_colors(); InitWindowLink();}TTYStatus(n)short n; { static struct termio tty_ents; static char tty_mark = 0; if (n == 1) { if (ioctl(fileno(stdout),TCGETA,&tty_ents)==-1) return; tty_mark = 1; } else if (tty_mark) ioctl(fileno(stdout),TCSETAW,&tty_ents); return;}MySystem(s,opt)char *s;short opt;{ int ret; savetty(); keypad(stdscr,FALSE); TTYStatus(2); fflush(stdin); fflush(stdout); if (opt) { system("echo \"\\033[m\""); } ret = system(s); if (opt && WAIT_ENTER) { system(WAIT_ENTER_KEY); } fflush(stdin); fflush(stdout); resetty(); keypad(stdscr,TRUE); if ( 0 == ret) return TRUE; else return FALSE;}SystemOpen(){ standend(); refresh(); savetty(); clear(); refresh(); keypad(stdscr,FALSE); TTYStatus(2); fflush(stdin); fflush(stdout); SystemBackGround(BLACK, CYAN); return 0;}SystemClose(){ fflush(stdin); fflush(stdout); resetty(); keypad(stdscr,TRUE); return 0;}TouchScreen(){ WINDOW * hwin; hwin = newwin(0, 0, 0, 0); wrefresh(hwin); delwin(hwin); touchwin(stdscr);}QuitSystem( int mode ){ if ( mode == TRUE || DialogBox( YES_NO_BOX, REGULAR_BOARD, "真的要退出系统吗 ?" ) == YES ) { clear(); refresh(); endwin(); exit( 0 ); }}DialogBox( DialogBoxType, BoardType, Message )int DialogBoxType, BoardType;char *Message;{ int PadRet = CANCEL, pos; WINDOWS *DialogWin; PAD DialogBoxPad; COLORPATTERN DialogColor; static ITEMS YesNoItems[] = { { "【 是 】", NULL, NULL }, { "【 否 】", NULL, NULL } }; static ITEMS OkCancelItems[] = { { "【 确认 】", NULL, NULL }, { "【 取消 】", NULL, NULL } }; static ITEMS YesNoCancelItems[] = { { "【 是 】", NULL, NULL }, { "【 否 】", NULL, NULL }, { "【取消】", NULL, NULL } }; static ITEMS RetryAbordCancelItems[] = { { "【重试】", NULL, NULL }, { "【放弃】", NULL, NULL }, { "【取消】", NULL, NULL } }; static ITEMS ConfirmItems[] = { { "【 确认 】", NULL, NULL }, }; SetColorPattern( &DialogColor, BLACK, WHITE, BLACK, WHITE, WHITE, RED, WHITE, MAGENTA ); SetColor( &DialogColor ); DialogWin = CreateWindow( 8, 22, 9, 36, REGULAR_BOARD, "注 意", &DialogColor ); pos = 17 - strlen(Message)/2; /*mvwaddstr( DialogWin->win, 3, 6, Message );*/ mvwaddstr( DialogWin->win, 3, pos, Message ); wrefresh( DialogWin->win ); switch( DialogBoxType ) { case YES_NO_BOX: InitPad(DialogWin->win, &DialogBoxPad, 6, 7, YesNoItems, 2, &DialogColor); switch( ActivatePad( &DialogBoxPad ) ) { case 0: PadRet = YES; break; case 1: PadRet = NO; break; defautlt: break; } break; case OK_CANCEL_BOX: InitPad(DialogWin->win,&DialogBoxPad, 6,7,OkCancelItems, 2, &DialogColor); switch( ActivatePad( &DialogBoxPad ) ) { case 0: PadRet = OK; break; case 1: PadRet = CANCEL; break; default: break; } break; case YES_NO_CANCEL_BOX: InitPad(DialogWin->win,&DialogBoxPad,6,5,YesNoCancelItems,3,&DialogColor); switch( ActivatePad( &DialogBoxPad ) ) { case 0: PadRet = YES; break; case 1: PadRet = NO; break; case 2: PadRet = CANCEL; break; default: break; } break; case RETRY_ABORD_CANCEL_BOX: InitPad( DialogWin->win, &DialogBoxPad, 6, 5, RetryAbordCancelItems, 3, &DialogColor ); switch( ActivatePad( &DialogBoxPad ) ) { case 0: PadRet = RETRY; break; case 1: PadRet = ABORD; break; case 2: PadRet = CANCEL; break; default: break; } break; case CONFIRM_BOX: InitPad(DialogWin->win,&DialogBoxPad, 6,13,ConfirmItems, 1, &DialogColor); PadRet = ActivatePad( &DialogBoxPad ); break; default: break; } DeleteWindow( DialogWin ); return PadRet;}/*char *RightTrim( string )char *string;{ int n = strlen( string ) - 1; while( n > 0 ) { if ( *( string + n ) != ' ' ) { *( string + n + 1 ) = 0; break; } else n --; } return string;}char *LeftTrim( string )char *string;{ while( *( string ++ ) == ' ' ); return string - 1;}char *AllTrim( string )char *string;{ return RightTrim( LeftTrim( string ) );}*/SetColorPattern( COLORPATTERN *colorpattern, short text_fcolor, short text_bcolor, short board_fcolor, short board_bcolor, short title_fcolor, short title_bcolor, short hight_fcolor, short hight_bcolor ){ colorpattern->textcolor[0] = text_fcolor; colorpattern->textcolor[1] = text_bcolor; colorpattern->boardcolor[0] = board_fcolor; colorpattern->boardcolor[1] = board_bcolor; colorpattern->titlecolor[0] = title_fcolor; colorpattern->titlecolor[1] = title_bcolor; colorpattern->hightcolor[0] = hight_fcolor; colorpattern->hightcolor[1] = hight_bcolor;}SetColor( COLORPATTERN *colorpattern ){ init_pair( TEXT_PATTERN, colorpattern->textcolor[0], colorpattern->textcolor[1] ); init_pair( BOARD_PATTERN, colorpattern->boardcolor[0], colorpattern->boardcolor[1] ); init_pair( TITLE_PATTERN, colorpattern->titlecolor[0], colorpattern->titlecolor[1] ); init_pair( HIGHT_PATTERN, colorpattern->hightcolor[0], colorpattern->hightcolor[1] );}BackGround( short fcolor, short bcolor ){ int i; char blank[81]; memset( blank, ' ', 80 ); blank[80] = 0; init_pair( BACK_PATTERN, fcolor, bcolor ); attrset( COLOR_PAIR( BACK_PATTERN ) ); for( i = 3; i <= 24; i ++ ) mvaddstr( i, 0, blank ); refresh();}SystemBackGround( short fcolor, short bcolor ){ int i; char blank[81]; memset( blank, ' ', 80 ); blank[80] = 0; init_pair( BACK_PATTERN, fcolor, bcolor ); attrset( COLOR_PAIR( BACK_PATTERN ) ); for( i = 0; i <= 24; i ++ ) mvaddstr( i, 0, blank ); refresh();}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -