--- lbbs/src/bbs_net.c 2005/03/21 17:28:01 1.3 +++ lbbs/src/bbs_net.c 2005/03/22 08:19:11 1.7 @@ -30,9 +30,10 @@ #include #include -#define TIME_OUT 15 -#define MAX_PROCESS_BAR_LEN 30 -#define MAXSTATION 26*2 +#define TIME_OUT 15 +#define MAX_PROCESS_BAR_LEN 30 +#define MAXSTATION 26*2 +#define STATION_PER_LINE 4 struct _bbsnet_conf { @@ -81,8 +82,8 @@ load_bbsnet_conf (const char *file_confi bbsnet_conf[item_count].port = t4 ? atoi (t4) : 23; p_menuitem = p_menu->items[item_count] = malloc (sizeof (MENU_ITEM)); - p_menuitem->row = 2 + item_count / 3; - p_menuitem->col = 5 + item_count % 3 * 20; + p_menuitem->row = 2 + item_count / STATION_PER_LINE; + p_menuitem->col = 5 + item_count % STATION_PER_LINE * 20; sprintf (p_menuitem->action, "%d", item_count); p_menuitem->submenu = 0; p_menuitem->priv = 0; @@ -91,7 +92,7 @@ load_bbsnet_conf (const char *file_confi p_menuitem->name[0] = (item_count < MAXSTATION / 2 ? 'A' + item_count : 'a' + item_count); p_menuitem->name[1] = '\0'; - sprintf (p_menuitem->text, "1;36m%c. %s", + sprintf (p_menuitem->text, "%c. %s", p_menuitem->name[0], bbsnet_conf[item_count].host1); item_count++; @@ -216,7 +217,6 @@ bbsnet_connect (int n) int sock, ch, result, len, loop; struct sockaddr_in sin; char buf[256]; - time_t now, t_last_action; fd_set inputs, testfds; struct timeval timeout; struct hostent *pHost = NULL; @@ -302,15 +302,15 @@ bbsnet_connect (int n) FD_SET (0, &inputs); FD_SET (sock, &inputs); - t_last_action = time (0); + BBS_last_access_tm = time (0); loop = 1; while (loop) { testfds = inputs; - timeout.tv_sec = 0; - timeout.tv_usec = 100000; + timeout.tv_sec = TIME_OUT; + timeout.tv_usec = 0; result = select (FD_SETSIZE, &testfds, (fd_set *) NULL, (fd_set *) NULL, &timeout); @@ -318,6 +318,10 @@ bbsnet_connect (int n) switch (result) { case 0: + if (time (0) - BBS_last_access_tm >= MAX_DELAY_TIME) + { + loop = 0; + } break; case -1: log_error ("select() error!\n"); @@ -344,10 +348,7 @@ bbsnet_connect (int n) write (1, buf, len); } break; - } - if (time (0) - t_last_action >= 10) - { - t_last_action = time (0); + BBS_last_access_tm = time (0); } } @@ -382,8 +383,7 @@ bbsnet_refresh () prints ("╰══════════════════════════════════════╯"); moveto (23, 0); - prints - (" [\x1b[1;32mCtrl+C\x1b[m]退出 [\x1b[1;32m^\x1b[m]第一个 [\x1b[1;32m$\x1b[m]最后一个\033[0;37m\033[m"); + prints (" [\x1b[1;32mCtrl+C\x1b[m]退出"); iflush (); return 0; @@ -414,21 +414,15 @@ bbsnet_selchange (int new_pos) int bbs_net () { - int ch, result, pos; + int ch, pos, i; char file_config[256]; - time_t t_last_action; - fd_set inputs, testfds; - struct timeval timeout; strcpy (file_config, app_home_dir); strcat (file_config, "conf/bbsnet.conf"); load_bbsnet_conf (file_config); - FD_ZERO (&inputs); - FD_SET (0, &inputs); - - t_last_action = time (0); + BBS_last_access_tm = time (0); clearscr (); bbsnet_refresh (); @@ -438,80 +432,54 @@ bbs_net () while (1) { - testfds = inputs; - timeout.tv_sec = 0; - timeout.tv_usec = 100000; - - result = select (FD_SETSIZE, &testfds, (fd_set *) NULL, - (fd_set *) NULL, &timeout); - switch (result) + ch = igetch (); + switch (ch) { - case 0: + case KEY_NULL: + case Ctrl ('C'): + return 0; + case KEY_TIMEOUT: + if (time (0) - BBS_last_access_tm >= MAX_DELAY_TIME) + { + return -1; + } + continue; + case CR: + pos = bbsnet_menu.p_menu[0]->item_cur_pos; + bbsnet_connect (pos); + bbsnet_refresh (); + display_current_menu (&bbsnet_menu); + bbsnet_selchange (pos); break; - case -1: - log_error ("select() error!\n"); + case KEY_UP: + for (i = 0; i < STATION_PER_LINE; i++) + menu_control (&bbsnet_menu, KEY_UP); + pos = bbsnet_menu.p_menu[0]->item_cur_pos; + bbsnet_selchange (pos); + break; + case KEY_DOWN: + for (i = 0; i < STATION_PER_LINE; i++) + menu_control (&bbsnet_menu, KEY_DOWN); + pos = bbsnet_menu.p_menu[0]->item_cur_pos; + bbsnet_selchange (pos); + break; + case KEY_LEFT: + menu_control (&bbsnet_menu, KEY_UP); + pos = bbsnet_menu.p_menu[0]->item_cur_pos; + bbsnet_selchange (pos); + break; + case KEY_RIGHT: + menu_control (&bbsnet_menu, KEY_DOWN); + pos = bbsnet_menu.p_menu[0]->item_cur_pos; + bbsnet_selchange (pos); break; default: - if (FD_ISSET (0, &testfds)) - { - ch = igetch (); - switch (ch) - { - case KEY_NULL: - case Ctrl ('C'): - return 0; - case CR: - pos = bbsnet_menu.p_menu[0]->item_cur_pos; - bbsnet_connect (pos); - bbsnet_refresh (); - display_current_menu (&bbsnet_menu); - bbsnet_selchange (pos); - break; - case KEY_UP: - menu_control (&bbsnet_menu, KEY_UP); - menu_control (&bbsnet_menu, KEY_UP); - menu_control (&bbsnet_menu, KEY_UP); - pos = bbsnet_menu.p_menu[0]->item_cur_pos; - bbsnet_selchange (pos); - break; - case KEY_DOWN: - menu_control (&bbsnet_menu, KEY_DOWN); - menu_control (&bbsnet_menu, KEY_DOWN); - menu_control (&bbsnet_menu, KEY_DOWN); - pos = bbsnet_menu.p_menu[0]->item_cur_pos; - bbsnet_selchange (pos); - break; - case KEY_LEFT: - menu_control (&bbsnet_menu, KEY_UP); - pos = bbsnet_menu.p_menu[0]->item_cur_pos; - bbsnet_selchange (pos); - break; - case KEY_RIGHT: - menu_control (&bbsnet_menu, KEY_DOWN); - pos = bbsnet_menu.p_menu[0]->item_cur_pos; - bbsnet_selchange (pos); - break; - case '^': - pos = bbsnet_menu.p_menu[0]->item_cur_pos = 0; - bbsnet_selchange (pos); - break; - case '$': - pos = bbsnet_menu.p_menu[0]->item_cur_pos - = bbsnet_menu.p_menu[0]->item_count - 1; - if (pos < 0) - pos = 0; - bbsnet_selchange (pos); - break; - default: - break; - } - } + menu_control (&bbsnet_menu, ch); + pos = bbsnet_menu.p_menu[0]->item_cur_pos; + bbsnet_selchange (pos); break; } - if (time (0) - t_last_action >= 10) - { - t_last_action = time (0); - } + BBS_last_access_tm = time (0); } return 0;