Ejemplo n.º 1
0
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();
}
Ejemplo n.º 2
0
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();
}
Ejemplo n.º 3
0
/* 
 * 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();
}	
Ejemplo n.º 4
0
/* 
 * 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();
//	}
}	
Ejemplo n.º 5
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 '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);
}
Ejemplo n.º 6
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);
}