/****************************************************************************
- * Copyright (c) 1998-2008,2009 Free Software Foundation, Inc. *
+ * Copyright (c) 1998-2010,2011 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
#define CUR SP_TERMTYPE
#endif
-MODULE_ID("$Id: lib_slk.c,v 1.39 2009/07/04 18:37:57 tom Exp $")
+MODULE_ID("$Id: lib_slk.c,v 1.48 2011/03/05 21:21:52 tom Exp $")
+
+#ifdef USE_TERM_DRIVER
+#define NumLabels InfoOf(SP_PARM).numlabels
+#define NoColorVideo InfoOf(SP_PARM).nocolorvideo
+#define LabelWidth InfoOf(SP_PARM).labelwidth
+#define LabelHeight InfoOf(SP_PARM).labelheight
+#else
+#define NumLabels num_labels
+#define NoColorVideo no_color_video
+#define LabelWidth label_width
+#define LabelHeight label_height
+#endif
/*
* Free any memory related to soft labels, return an error.
_nc_format_slks(NCURSES_SP_DCLx int cols)
{
int gap, i, x;
- unsigned max_length = SP_PARM->_slk->maxlen;
+ int max_length;
- if (!SP_PARM)
+ if (!SP_PARM || !SP_PARM->_slk)
return ERR;
+ max_length = SP_PARM->_slk->maxlen;
if (SP_PARM->slk_format >= 3) { /* PC style */
gap = (cols - 3 * (3 + 4 * max_length)) / 2;
}
} else {
if (SP_PARM->slk_format == 2) { /* 4-4 */
- gap = cols - (SP_PARM->_slk->maxlab * max_length) - 6;
+ gap = cols - (int) (SP_PARM->_slk->maxlab * max_length) - 6;
if (gap < 1)
gap = 1;
x += max_length;
x += (i == 2 || i == 4) ? gap : 1;
}
- } else
- returnCode(slk_failed(NCURSES_SP_ARG));
+ } else {
+ return slk_failed(NCURSES_SP_ARG);
+ }
}
}
SP_PARM->_slk->dirty = TRUE;
{
int i;
int res = OK;
- unsigned max_length;
+ size_t max_length;
SCREEN *sp;
- TERMINAL *term;
int numlab;
T((T_CALLED("_nc_slk_initialize()")));
if (0 == sp)
returnCode(ERR);
- term = TerminalOf(SP_PARM);
- assert(term);
+ assert(TerminalOf(SP_PARM));
- numlab = InfoOf(SP_PARM).numlabels;
+ numlab = NumLabels;
if (SP_PARM->_slk) { /* we did this already, so simply return */
returnCode(OK);
} else if ((SP_PARM->_slk = typeCalloc(SLK, 1)) == 0)
returnCode(ERR);
- SP_PARM->_slk->hidden = TRUE;
- SP_PARM->_slk->ent = NULL;
if (!SP_PARM->slk_format)
SP_PARM->slk_format = _nc_globals.slk_format;
* with colors. In that case, we're still guaranteed that "reverse" would
* work.
*/
- if ((InfoOf(SP_PARM).nocolorvideo & 1) == 0)
+ if ((NoColorVideo & 1) == 0)
SetAttr(SP_PARM->_slk->attr, A_STANDOUT);
else
SetAttr(SP_PARM->_slk->attr, A_REVERSE);
- SP_PARM->_slk->maxlab = ((numlab > 0)
- ? numlab
- : MAX_SKEY(SP_PARM->slk_format));
- SP_PARM->_slk->maxlen = ((numlab > 0)
- ? InfoOf(SP_PARM).labelwidth * InfoOf(SP_PARM).labelheight
- : MAX_SKEY_LEN(SP_PARM->slk_format));
- SP_PARM->_slk->labcnt = ((SP_PARM->_slk->maxlab < MAX_SKEY(SP_PARM->slk_format))
- ? MAX_SKEY(SP_PARM->slk_format)
- : SP_PARM->_slk->maxlab);
+ SP_PARM->_slk->maxlab = (short) ((numlab > 0)
+ ? numlab
+ : MAX_SKEY(SP_PARM->slk_format));
+ SP_PARM->_slk->maxlen = (short) ((numlab > 0)
+ ? LabelWidth * LabelHeight
+ : MAX_SKEY_LEN(SP_PARM->slk_format));
+ SP_PARM->_slk->labcnt = (short) ((SP_PARM->_slk->maxlab < MAX_SKEY(SP_PARM->slk_format))
+ ? MAX_SKEY(SP_PARM->slk_format)
+ : SP_PARM->_slk->maxlab);
if (SP_PARM->_slk->maxlen <= 0
|| SP_PARM->_slk->labcnt <= 0
|| (SP_PARM->_slk->ent = typeCalloc(slk_ent,
- (unsigned) SP_PARM->_slk->labcnt))
+ (size_t) SP_PARM->_slk->labcnt))
== NULL)
returnCode(slk_failed(NCURSES_SP_ARG));
- max_length = SP_PARM->_slk->maxlen;
+ max_length = (size_t) SP_PARM->_slk->maxlen;
for (i = 0; i < SP_PARM->_slk->labcnt; i++) {
size_t used = max_length + 1;
SP_PARM->_slk->ent[i].form_text = (char *) _nc_doalloc(0, used);
if (SP_PARM->_slk->ent[i].form_text == 0)
returnCode(slk_failed(NCURSES_SP_ARG));
- memset(SP_PARM->_slk->ent[i].form_text, 0, used);
- memset(SP_PARM->_slk->ent[i].form_text, ' ', max_length);
+ if (used > 1) {
+ memset(SP_PARM->_slk->ent[i].form_text, ' ', used - 1);
+ }
+ SP_PARM->_slk->ent[i].form_text[used - 1] = '\0';
+
SP_PARM->_slk->ent[i].visible = (char) (i < SP_PARM->_slk->maxlab);
}
NCURSES_EXPORT(int)
NCURSES_SP_NAME(slk_restore) (NCURSES_SP_DCL0)
{
- T((T_CALLED("slk_restore(%p)"), SP_PARM));
+ T((T_CALLED("slk_restore(%p)"), (void *) SP_PARM));
if (0 == SP_PARM)
returnCode(ERR);