void sub_periodic(void) { if(!main_pad->wd) return; if(sub_current->flags & PERIODIC) { dolog("%s: doing plugin (and perhaps builtin) draw\n", __FUNCTION__); pad_draw(); } dolog("%s: doing refresh\n", __FUNCTION__); pad_refresh(); }
static void key_action(int key) { int i, size; if(signal_sent) { print_help(); signal_sent = 0; } /* * First, try to process the key by object (subwindow, menu) that * could be on top. */ size = sizeof key_funct/sizeof(int (*)(int)); for(i = 0; i < size; i++) if(key_funct[i](key)) goto SKIP; if(current->keys(key)) goto SKIP; /* cursor movement */ size = sizeof key_handlers/sizeof(struct key_handler); for(i = 0; i < size; i++) if(key_handlers[i].c == key) { key_handlers[i].handler(current); if(can_draw()) pad_draw(); goto SKIP; } switch(key) { case 'c': full_cmd ^= 1; current->redraw(); break; case '/': m_search(); break; case KBD_F1: help(); break; case KBD_ESC: case 'q': curses_end(); exit(0); default: return; } SKIP: dolog("%s: doing refresh\n", __FUNCTION__); wnoutrefresh(main_win); wnoutrefresh(info_win.wd); pad_refresh(); menu_refresh(); box_refresh(); info_refresh(); doupdate(); }
/* * Needed for SIGWINCH handling. */ void pad_resize(void) { set_size(main_pad); if(!main_pad->wd) return; // wresize(border_wd, main_pad->size_y-PAD_Y+3, main_pad->size_x-PAD_X+3); wresize(border_wd, BORDER_ROWS+1, BORDER_COLS+1); werase(border_wd); box(border_wd, ACS_VLINE, ACS_HLINE); print_titles(); wbkgd(main_pad->wd, COLOR_PAIR(8)); werase(main_pad->wd); pad_draw(); pad_refresh(); }
/* * If subwindow with detailed information doesn't exists then create it. * Otherwise destroy. */ static void sub_change(struct subwin *w) { if(w->arrow >= 0) w->arrow = arrow_prev = 0; if(main_pad->wd) { box(border_wd, ACS_VLINE, ACS_HLINE); print_titles(); } if(!main_pad->wd) pad_create(w); assert(w->plugin_draw); pad_draw(); // } else { // if(w->plugin_clear) w->plugin_clear(); // pad_destroy(); // } }
static int goodbye() { /* itoc.010803: 秀張離站的圖 */ clear(); film_out(FILM_GOODBYE, 0); switch (vans("G)隨風而逝 M)報告站長 N)留言板 Q)取消?[Q] ")) { /* lkchu.990428: 內定改為不離站 */ case 'g': case 'y': break; case 'm': m_sysop(); break; case 'n': /* if (cuser.userlevel) */ if (HAS_PERM(PERM_POST)) /* Thor.990118: 要能post才能留言, 提高門檻 */ pad_draw(); break; case 'q': default: /* return XEASY; */ return 0; /* itoc.010803: 秀了 FILM_GOODBYE 要重繪 */ } #ifdef LOG_BMW bmw_log(); /* lkchu.981201: 水球記錄處理 */ #endif if (!(cuser.ufo & UFO_MOTD)) /* itoc.000407: 離站畫面一併簡化 */ { clear(); prints("親愛的 \033[32m%s(%s)\033[m,別忘了再度光臨【 %s 】\n" "以下是您在站內的註冊資料:\n", cuser.userid, cuser.username, str_site); acct_show(&cuser, 0); vmsg(NULL); } u_exit("EXIT "); exit(0); }
static int goodbye() { /* itoc.010803: 秀張離站的圖 */ clear(); film_out(FILM_GOODBYE, 0); switch (vans("G)隨光而逝 M)報告站長 N)留言板 Q)取消?[Q] ")) { /* lkchu.990428: 內定改為不離站 */ case 'g': case 'y': break; case 'm': m_sysop(); break; case 'n': /* if (cuser.userlevel) */ if (HAS_PERM(PERM_POST)) /* Thor.990118: 要能post才能留言, 提高門檻 */ pad_draw(); break; case 'b': /* floatJ.090607: konami_code 彩蛋 */ if (konami_counter >= 6) more("etc/CharlieSP", MFST_NONE); case 'q': default: if(konami_counter >= 6) /* dust.091010: 在b這步按錯的話不必考慮嗎... */ konami_counter = 0; /* return XEASY; */ return 0; /* itoc.010803: 秀了 FILM_GOODBYE 要重繪 */ } #ifdef LOG_BMW bmw_log(); /* lkchu.981201: 水球記錄處理 */ #endif u_exit("EXIT "); exit(0); }