X-Git-Url: https://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=ncurses%2Fbase%2Flib_slkrefr.c;h=167da9cd57a2638f38070548e5758bf59eff1317;hp=96ca6a6e48925aa18df70072d5a5f49d4b675036;hb=d49a800c7f54c8d9e77f745423c821a8535ada59;hpb=404cc3f5b0751dd219565139f825c5a4d445f651 diff --git a/ncurses/base/lib_slkrefr.c b/ncurses/base/lib_slkrefr.c index 96ca6a6e..167da9cd 100644 --- a/ncurses/base/lib_slkrefr.c +++ b/ncurses/base/lib_slkrefr.c @@ -38,13 +38,18 @@ * Write SLK window to the (virtual) screen. */ #include -#include /* num_labels, label_*, plab_norm */ #ifndef CUR -#define CUR SP_TERMTYPE +#define CUR SP_TERMTYPE #endif -MODULE_ID("$Id: lib_slkrefr.c,v 1.20 2009/05/10 00:48:29 tom Exp $") +MODULE_ID("$Id: lib_slkrefr.c,v 1.25 2009/10/24 22:12:21 tom Exp $") + +#ifdef USE_TERM_DRIVER +#define NumLabels InfoOf(SP_PARM).numlabels +#else +#define NumLabels num_labels +#endif /* * Paint the info line for the PC style SLK emulation. @@ -70,34 +75,47 @@ slk_paint_info(WINDOW *win) * Write the soft labels to the soft-key window. */ static void -slk_intern_refresh(SLK * slk) +slk_intern_refresh(SCREEN *sp) { -#if NCURSES_SP_FUNCS - SCREEN *sp = CURRENT_SCREEN; -#endif int i; - int fmt = SP->slk_format; + int fmt; + SLK *slk; + int numlab; + + if (sp == 0) + return; + + slk = sp->_slk; + fmt = sp->slk_format; + numlab = NumLabels; + + if (slk->hidden) + return; for (i = 0; i < slk->labcnt; i++) { if (slk->dirty || slk->ent[i].dirty) { if (slk->ent[i].visible) { - if (num_labels > 0 && SLK_STDFMT(fmt)) { + if (numlab > 0 && SLK_STDFMT(fmt)) { +#ifdef USE_TERM_DRIVER + CallDriver_2(sp, hwlabel, i + 1, slk->ent[i].form_text); +#else if (i < num_labels) { TPUTS_TRACE("plab_norm"); putp(TPARM_2(plab_norm, i + 1, slk->ent[i].form_text)); } +#endif } else { if (fmt == 4) slk_paint_info(slk->win); wmove(slk->win, SLK_LINES(fmt) - 1, slk->ent[i].ent_x); - if (SP->_slk) { - wattrset(slk->win, AttrOf(SP->_slk->attr)); + if (sp->_slk) { + (void) wattrset(slk->win, AttrOf(sp->_slk->attr)); } waddstr(slk->win, slk->ent[i].form_text); /* if we simulate SLK's, it's looking much more natural to use the current ATTRIBUTE also for the label window */ - wattrset(slk->win, WINDOW_ATTRS(stdscr)); + (void) wattrset(slk->win, WINDOW_ATTRS(StdScreen(sp))); } } slk->ent[i].dirty = FALSE; @@ -105,7 +123,10 @@ slk_intern_refresh(SLK * slk) } slk->dirty = FALSE; - if (num_labels > 0) { + if (numlab > 0) { +#ifdef USE_TERM_DRIVER + CallDriver_1(sp, hwlabelOnOff, slk->hidden ? FALSE : TRUE); +#else if (slk->hidden) { TPUTS_TRACE("label_off"); putp(label_off); @@ -113,6 +134,7 @@ slk_intern_refresh(SLK * slk) TPUTS_TRACE("label_on"); putp(label_on); } +#endif } } @@ -122,13 +144,13 @@ slk_intern_refresh(SLK * slk) NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_noutrefresh) (NCURSES_SP_DCL0) { - T((T_CALLED("slk_noutrefresh()"))); + T((T_CALLED("slk_noutrefresh(%p)"), (void *) SP_PARM)); - if (SP_PARM == NULL || SP_PARM->_slk == NULL) + if (SP_PARM == 0 || SP_PARM->_slk == 0) returnCode(ERR); if (SP_PARM->_slk->hidden) returnCode(OK); - slk_intern_refresh(SP_PARM->_slk); + slk_intern_refresh(SP_PARM); returnCode(wnoutrefresh(SP_PARM->_slk->win)); } @@ -147,13 +169,13 @@ slk_noutrefresh(void) NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_refresh) (NCURSES_SP_DCL0) { - T((T_CALLED("slk_refresh()"))); + T((T_CALLED("slk_refresh(%p)"), (void *) SP_PARM)); - if (SP_PARM == NULL || SP_PARM->_slk == NULL) + if (SP_PARM == 0 || SP_PARM->_slk == 0) returnCode(ERR); if (SP_PARM->_slk->hidden) returnCode(OK); - slk_intern_refresh(SP_PARM->_slk); + slk_intern_refresh(SP_PARM); returnCode(wrefresh(SP_PARM->_slk->win)); }