⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tool.c

📁 UNIX/LINUX平台下面SMS网管原代码
💻 C
📖 第 1 页 / 共 2 页
字号:
/* * file               : tool.c * script by          :  * recent modified by : TANG for oracle  version * recent modified on : April 10, 2003 * NOTICE             : functions for dropdown menu */#include "tool.h"#include <time.h>#include <termios.h>#include <unistd.h>#define MESSAGELINE	23 		/* 信息显示行     */int MessageShowMode = NOM_SHOW;		/* 信息显示模式   */int HasColors = FALSE;			/* 是否支持彩显   */WINDOWLINK MyWinLink;			/* 窗口链表首地址 */extern char OPERID[10], NAME[20];char *Bold[11] = {   "━","┗","┻","┛","┣","╋","┫","┏","┳","┓","┃"};char *Regular[11] = {   "─","└","┴","┘","├","┼","┤","┌","┬","┐","│"};InitWindowLink(){  WINDOWS StdScr;  StdScr.win = ( WINDOW * )stdscr;  StdScr.row = StdScr.col = 0;  StdScr.height = 24;  StdScr.width = 80;  StdScr.title = NULL;  MyWinLink.thiswindow = &StdScr;  MyWinLink.prevwinnode = NULL;  MyWinLink.nextwinnode = NULL;   return TRUE;}WINDOWLINK *FindLastWindowLink(){  WINDOWLINK *LastWinLink;  LastWinLink = &MyWinLink;  while( LastWinLink->nextwinnode != NULL )     LastWinLink = LastWinLink->nextwinnode;  return LastWinLink;}AddToWindowLink( NewWin )WINDOWS *NewWin;{  WINDOWLINK *NewWinLink;  WINDOWLINK *LastWinLink;  if ( ( NewWinLink = ( WINDOWLINK * )malloc( sizeof( WINDOWLINK ) ) ) != NULL )  {    LastWinLink = FindLastWindowLink();    LastWinLink->nextwinnode = NewWinLink;    NewWinLink->thiswindow = NewWin;    NewWinLink->prevwinnode = LastWinLink;    NewWinLink->nextwinnode = NULL;    return TRUE;  }  else    return FALSE;}DeleteLastWindowLink(){  WINDOWLINK *LastWinLink;  LastWinLink = FindLastWindowLink();   LastWinLink->prevwinnode->nextwinnode = NULL;  free( LastWinLink );  return TRUE;}DeleteFromWindowLink( thewin )WINDOWS *thewin;{  WINDOWLINK *NextWinLink;  WINDOWLINK *PrevWinLink;	  return TRUE; }Box( int row, int col, int hight, int width, int boardtype ){  int i;  if ( boardtype == NO_BOARD ) return;  if ( width % 2 != 0 )    width --;  if ( boardtype == BOLD_BOARD )  {    mvaddstr( row, col, Bold[7] );    for( i = col + 2; i < width; i += 2 )	      mvaddstr( row, i, Bold[0] );    mvaddstr( row, col + width - 2, Bold[9] );    for( i = row + 1; i < hight+row; i ++ )    {      mvaddstr( i, col, Bold[10] );      mvaddstr( i, col + width - 2, Bold[10] );    }    mvaddstr( row + hight - 1, col, Bold[1] );    for( i = col + 2; i < width; i += 2 )      mvaddstr( row + hight - 1, i, Bold[0] );    mvaddstr( row + hight - 1, col + width - 2, Bold[3] );  }  if ( boardtype == REGULAR_BOARD )  {    mvaddstr( row, col, Regular[7] );    for( i = col + 2; i < width; i += 2 )	      mvaddstr( row, i, Regular[0] );    mvaddstr( row, col + width - 2, Regular[9] );    for( i = row + 1; i < hight+row; i ++ )    {      mvaddstr( i, col, Regular[10] );      mvaddstr( i, col + width - 2, Regular[10] );    }    mvaddstr( row + hight - 1, col, Regular[1] );    for( i = col + 2; i < width; i += 2 )      mvaddstr( row + hight - 1, i, Regular[0] );    mvaddstr( row + hight - 1, col + width - 2, Regular[3] );  }  refresh();}BoxWin( win, bord )WINDOW *win;int bord;{  int i;  int sx, sy;  sx = win->_maxx - 2;  sy = win->_maxy - 1;  if ( bord == BOLD_BOARD )  {    mvwaddstr( win, 0, 0, Bold[7] );    for( i = 2; i < sx; i += 2 )	      mvwaddstr( win, 0, i, Bold[0] );    mvwaddstr( win, 0, sx, Bold[9] );    for( i = 1; i < sy; i ++ )    {      mvwaddstr( win, i, 0, Bold[10] );      mvwaddstr( win, i, sx, Bold[10] );    }    mvwaddstr( win, sy, 0, Bold[1] );    for( i = 2; i < sx; i += 2 )      mvwaddstr( win, sy, i, Bold[0] );    mvwaddstr( win, sy, sx, Bold[3] );  }  if ( bord == REGULAR_BOARD )  {    mvwaddstr( win, 0, 0, Regular[7] );    for( i = 2; i < sx; i += 2 )      mvwaddstr( win, 0, i, Regular[0] );    mvwaddstr( win, 0, sx, Regular[9] );    for( i = 1; i < sy; i ++ )    {      mvwaddstr( win, i, 0, Regular[10] );      mvwaddstr( win, i, sx, Regular[10] );    }    mvwaddstr( win, sy, 0, Regular[1] );	    for( i = 2; i < sx; i += 2 )      mvwaddstr( win, sy, i, Regular[0] );    mvwaddstr( win, sy, sx, Regular[3] );  }  wrefresh( win );}BoxInWin( WINDOW *win, int row, int col, int hight, int width, int boardtype ){  int i;  if ( boardtype == NO_BOARD ) return;  if ( width % 2 != 0 )    width --;  if ( boardtype == BOLD_BOARD )  {    mvwaddstr( win, row, col, Bold[7] );    for( i = col + 2; i < width; i += 2 )	      mvwaddstr( win, row, i, Bold[0] );    mvwaddstr( win, row, col + width - 2, Bold[9] );    for( i = row + 1; i < hight + row; i ++ )    {      mvwaddstr( win, i, col, Bold[10] );      mvwaddstr( win, i, col + width - 2, Bold[10] );    }    mvwaddstr( win, row + hight - 1, col, Bold[1] );    for( i = col + 2; i < width; i += 2 )      mvwaddstr( win, row + hight - 1, i, Bold[0] );    mvwaddstr( win, row + hight - 1, col + width - 2, Bold[3] );  }  if ( boardtype == REGULAR_BOARD )  {    mvwaddstr( win, row, col, Regular[7] );    for( i = col + 2; i < width; i += 2 )	      mvwaddstr( win, row, i, Regular[0] );    mvwaddstr( win, row, col + width - 2, Regular[9] );    for( i = row + 1; i < hight + row; i ++ )    {      mvwaddstr( win, i, col, Regular[10] );      mvwaddstr( win, i, col + width - 2, Regular[10] );    }    mvwaddstr( win, row + hight - 1, col, Regular[1] );    for( i = col + 2; i < width; i += 2 )      mvwaddstr( win, row + hight - 1, i, Regular[0] );    mvwaddstr( win, row + hight - 1, col + width - 2, Regular[3] );  }  wrefresh( win );}Frame( int borad, short fcolor, short bcolor ){  int i;  char blank[81];	  memset( blank, ' ', 80 );  blank[80] = 0;  if ( HasColors )  {    init_pair( BACK_PATTERN, fcolor, bcolor );    attrset( A_DIM | COLOR_PAIR( BACK_PATTERN ) );  }  for ( i = 1; i < 23; i ++ )    mvaddstr( i, 0, blank );  if ( borad == BOLD_BOARD )  {    Box( 1, 0, MESSAGELINE - 1, 80, BOLD_BOARD );    mvaddstr( 3, 0, Bold[4] );    for( i = 2; i < 78; i += 2 )	      mvaddstr( 3, i, Bold[0] );    mvaddstr( 3, 78, Bold[6] );  }  if ( borad == REGULAR_BOARD )	  {    Box( 1, 0, MESSAGELINE - 1, 80, REGULAR_BOARD );    mvaddstr( 3, 0, Regular[4] );    for( i = 2; i < 78; i += 2 )      mvaddstr( 3, i, Regular[0] );    mvaddstr( 3, 78, Regular[6] );  }  refresh();}ShowVersion( char *Version ){  if ( HasColors )  {    int VerLen, pos;    char ver[77];    char blank[81];    memset( ver, ' ', 76 );    memset( blank, ' ', 80 );    VerLen = strlen( Version );	    if ( VerLen < 76 )      pos = 38 - VerLen / 2;    memcpy( ver + pos, Version, VerLen );    ver[76] = 0;    blank[80] = 0;    init_pair( VERSION_PATTERN, WHITE, BLUE );    attrset( COLOR_PAIR( VERSION_PATTERN ) );    mvaddstr( 0, 0, blank );    mvaddstr( 1, 0, blank );    mvaddstr( 2, 2, ver );    mvaddstr( 2, 0, blank );    Box( 0, 0, 3, 80, REGULAR_BOARD );  }  else  {    int VerLen, pos;    char ver[79];    memset( ver, ' ', 78 );    VerLen = strlen( Version );	    if ( VerLen < 78 )      pos = 39 - VerLen / 2;    memcpy( ver + pos, Version, VerLen );    ver[78] = 0;		    standout();    mvaddstr( 0, 1, ver );    standend();  }  refresh();}InitPad( win, Pad, Row, Col, PadItems, ItemNum, colorpattern )WINDOW *win;PAD *Pad;int Row, Col;ITEMS *PadItems;int ItemNum;COLORPATTERN *colorpattern;{  int col, i;  Pad->row = Row;  Pad->col = Col;  Pad->win = win;  Pad->items = PadItems;  Pad->itemnum = ItemNum;  Pad->lastoption = 0;  if ( HasColors )  {    SetColor( colorpattern );    wattrset( win, COLOR_PAIR( TEXT_PATTERN ) );  }  for( i = 0; i < ItemNum; i ++ )   {    if ( i == 0 )      col = Col;    else      col += strlen( PadItems[i-1].item ) + 1;    mvwaddstr( Pad->win, Row, col, PadItems[i].item );  }   wrefresh( Pad->win );}int ActivatePad( Pad )PAD *Pad;{  int i, row;  int option, lastoption, choice;  int *col;  int Stop = FALSE;  char *HotKey;  row = Pad->row;  lastoption = option = Pad->lastoption;	  if ( ( col = ( int * )malloc( Pad->itemnum * sizeof( int ) ) )== NULL)  {    MessageBX( "初始化菜单数组错误");    return FALSE;  }  for( i = 0; i < Pad->itemnum; i ++ )  {    if ( i == 0 )      col[i] = Pad->col;    else      col[i] = col[i-1] + strlen(Pad->items[i-1].item)+1;   }  savetty();  cbreak(); nonl(); noecho();  keypad( Pad->win, TRUE );  if ( HasColors )    wattrset( Pad->win, COLOR_PAIR( TEXT_PATTERN ) );  else    wstandend( Pad->win );		  while( Stop == FALSE )	  {    if ( option != lastoption )		      mvwaddstr( Pad->win, row, col[lastoption], Pad->items[lastoption].item );    SetMessage( Pad->items[option].message );    if ( HasColors )      wattrset( Pad->win, COLOR_PAIR( HIGHT_PATTERN ) );    else      wstandout( Pad->win );    mvwaddstr( Pad->win, row, col[option], Pad->items[option].item );    if ( HasColors )      wattrset( Pad->win, COLOR_PAIR( TEXT_PATTERN ) );    else      wstandend( Pad->win );    wmove( Pad->win, row, col[option] );     lastoption = option;    wrefresh( Pad->win );    switch( ( choice = wgetch( Pad->win ) ) )    {      case 27:   /* escape*/        Pad->lastoption = option;        Stop = TRUE;        resetty();        break;      case ' ':      case '\r':      case '\n':      case KEY_DOWN:        if ( option < 0 )         {          beep();          break;        }        Pad->lastoption = option;        if ( Pad->items[ option ].callfunc != NULL )            Pad->items[ option ].callfunc();        resetty();        return option;	      case KEY_RIGHT:        while(option<=Pad->itemnum-2 && strlen(Pad->items[option+1].item) < 1)            ++option;        if ( ++ option >= Pad->itemnum )          option = 0;        break;      /*      case KEY_UP:      */      case KEY_LEFT:        while(option>=1 && strlen(Pad->items[option-1].item) < 1)            --option;        if ( -- option < 0 )          option = Pad->itemnum - 1;        break;      default:        for( i = 0; i < Pad->itemnum; i ++ )        {          for ( HotKey = Pad->items[i].item;            *HotKey == ' '; HotKey ++ );          if ( *HotKey == choice )          {            option = i;            break;          }        }    }  }  free( col );}	InitMenu( Menu, Row, Col, MenuItems, ItemNum, boardtype, colorpattern )MENU *Menu;int Row, Col;ITEMS *MenuItems;int ItemNum, boardtype;COLORPATTERN *colorpattern;{  int i, j;  int width = 0;  for( i = 0; i < ItemNum; i ++ )  {    if ( strlen( MenuItems[i].item ) > width )      width = strlen( MenuItems[i].item );  }  if ( width % 2 != 0 )     width ++;  width += 4;  if ( HasColors )    SetColor( colorpattern );  Menu->menuwin = CreateWindow( Row, Col, ItemNum + 2,                                     width, boardtype, NULL,				      colorpattern );  Menu->menuwin->row = Row;  Menu->menuwin->col = Col;  Menu->menuwin->height = ItemNum + 2;  Menu->menuwin->width = width;  Menu->items = MenuItems;	  if ( HasColors )    wattrset( Menu->menuwin->win, COLOR_PAIR( BOARD_PATTERN ) );  else		    wstandend( Menu->menuwin->win );  if ( boardtype == BOLD_BOARD )  {    for( i = 0; i < ItemNum; i ++ )    {      if ( Menu->items[i].item[0] == '-' )      {        mvwaddstr( Menu->menuwin->win, i + 1, 0, Bold[4] );        for( j = 2; j < Menu->menuwin->width; j += 2 )          mvwaddstr( Menu->menuwin->win, i + 1, j, Bold[0] );        mvwaddstr( Menu->menuwin->win, i + 1,                   Menu->menuwin->width - 2, Bold[6] );	      }      else      {        mvwaddstr( Menu->menuwin->win, i + 1, 0, Bold[10] );        if ( HasColors )          wattrset( Menu->menuwin->win, COLOR_PAIR( TEXT_PATTERN ) );        mvwaddstr( Menu->menuwin->win, i + 1, 2, Menu->items[i].item );        if ( HasColors )          wattrset( Menu->menuwin->win, COLOR_PAIR( BOARD_PATTERN ) );        mvwaddstr( Menu->menuwin->win, i + 1,Menu->menuwin->width-2, Bold[10] );      }    }  }	  if ( boardtype == REGULAR_BOARD )  {    for( i = 0; i < ItemNum; i ++ )    {      if ( Menu->items[i].item[0] == '-' )      {        mvwaddstr( Menu->menuwin->win, i + 1, 0, Regular[4] );        for( j = 2; j < Menu->menuwin->width; j += 2 )          mvwaddstr( Menu->menuwin->win, i + 1, j, Regular[0] );        mvwaddstr( Menu->menuwin->win,i+1, Menu->menuwin->width-2, Regular[6]);	      }      else      {        mvwaddstr( Menu->menuwin->win, i + 1, 0, Regular[10] );        if ( HasColors )          wattrset( Menu->menuwin->win, COLOR_PAIR( TEXT_PATTERN ) );        mvwaddstr( Menu->menuwin->win, i + 1, 2, Menu->items[i].item );        if ( HasColors )          wattrset( Menu->menuwin->win, COLOR_PAIR( BOARD_PATTERN ) );        mvwaddstr( Menu->menuwin->win,i+1,Menu->menuwin->width-2, Regular[10]);      }    }  }  wrefresh( Menu->menuwin->win );}int ActivateMenu( Menu )MENU *Menu;{  int option, lastoption;  int i, choice;  char *HotKey;  option = lastoption = Menu->lastoption;  savetty();  cbreak(); nonl(); noecho();  keypad( Menu->menuwin->win, TRUE );  if ( HasColors )    wattrset( Menu->menuwin->win, COLOR_PAIR( TEXT_PATTERN ) );  else    wstandend( Menu->menuwin->win );  for( ; ; )  {    if ( lastoption != option )      mvwaddstr( Menu->menuwin->win, lastoption + 1, 2,                 Menu->items[ lastoption ].item );      SetMessage( Menu->items[ option ].message );    if ( HasColors )      wattrset( Menu->menuwin->win, COLOR_PAIR( HIGHT_PATTERN ) );    else      wstandout( Menu->menuwin->win );    mvwaddstr( Menu->menuwin->win, option + 1, 2,               Menu->items[ option ].item );    if ( HasColors )      wattrset( Menu->menuwin->win, COLOR_PAIR( TEXT_PATTERN ) );    else      wstandend( Menu->menuwin->win );    wmove( Menu->menuwin->win, option + 1, 2 );    lastoption  = option;    wrefresh( Menu->menuwin->win );    switch( ( choice = wgetch( Menu->menuwin->win ) ) )    {      case 27:        DeleteWindow( Menu->menuwin );        resetty();        return option;      case ' ':      case '\r':      case '\n':        if ( option < 0 )        {          beep();          return FALSE;        }        Menu->lastoption = option;        if ( Menu->items[ option ].callfunc != NULL )        {            /* 函数中有系统调用时恢复界面*/            if ( Menu->items[ option ].callfunc() == SYSTEM_RET)            {                DeleteWindow (Menu->menuwin);                resetty();                return option;            }        }        resetty();        break;      case KEY_RIGHT:        DeleteWindow( Menu->menuwin );        resetty();        return option;      case KEY_DOWN:        do {          if ( ++ option >= Menu->menuwin->height -2 )             option = 0;        } while( Menu->items[ option ].item[0] == '-' );        break;      case KEY_LEFT:        DeleteWindow( Menu->menuwin );        resetty();        return option;      case KEY_UP:

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -