X-Git-Url: https://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=form%2Ffrm_driver.c;h=8d9bd3ba6f5091ead1be0eb3aac5c0e9d2018284;hp=2499f4da9218fd5e7957fc3fc77c2f5a4eef8816;hb=c8e187fc9682a3c5cfaebc480fc98d8585f6caf6;hpb=3853a8e97d7efa8cb6a3c93c696d2c52895d6a70 diff --git a/form/frm_driver.c b/form/frm_driver.c index 2499f4da..8d9bd3ba 100644 --- a/form/frm_driver.c +++ b/form/frm_driver.c @@ -1,5 +1,5 @@ /**************************************************************************** - * Copyright (c) 1998-2006,2007 Free Software Foundation, Inc. * + * Copyright (c) 1998-2008,2009 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 * @@ -32,7 +32,7 @@ #include "form.priv.h" -MODULE_ID("$Id: frm_driver.c,v 1.82 2007/06/02 22:59:24 tom Exp $") +MODULE_ID("$Id: frm_driver.c,v 1.90 2009/08/29 19:02:25 tom Exp $") /*---------------------------------------------------------------------------- This is the core module of the form library. It contains the majority @@ -188,7 +188,7 @@ static int FE_Delete_Previous(FORM *); /* Macro to set the attributes for a fields window */ #define Set_Field_Window_Attributes(field,win) \ ( wbkgdset((win),(chtype)((field)->pad | (field)->back)), \ - wattrset((win),(field)->fore) ) + (void) wattrset((win),(field)->fore) ) /* Logic to decide whether or not a field really appears on the form */ #define Field_Really_Appears(field) \ @@ -676,7 +676,7 @@ Field_Grown(FIELD *field, int amount) new_bp[new_buflen] = myZEROS; } -#if USE_WIDEC_SUPPORT +#if USE_WIDEC_SUPPORT && NCURSES_EXT_FUNCS if (wresize(field->working, 1, Buffer_Length(field) + 1) == ERR) result = FALSE; #endif @@ -1073,9 +1073,13 @@ Display_Or_Erase_Field(FIELD *field, bool bEraseFlag) else { if (field->opts & O_VISIBLE) - Set_Field_Window_Attributes(field, win); + { + Set_Field_Window_Attributes(field, win); + } else - wattrset(win, WINDOW_ATTRS(fwin)); + { + (void)wattrset(win, WINDOW_ATTRS(fwin)); + } werase(win); } @@ -4176,7 +4180,7 @@ form_driver(FORM *form, int c) NULL /* Choice Request is generic */ }; size_t nMethods = (sizeof(Generic_Methods) / sizeof(Generic_Methods[0])); - size_t method = ((BI->keycode & ID_Mask) >> ID_Shft) & 0xffff; + size_t method = (BI->keycode >> ID_Shft) & 0xffff; /* see ID_Mask */ if ((method >= nMethods) || !(BI->cmd)) res = E_SYSTEM_ERROR; @@ -4333,15 +4337,6 @@ set_field_buffer(FIELD *field, int buffer, const char *value) len = Buffer_Length(field); - if (buffer == 0) - { - for (i = 0; (value[i] != '\0') && (i < len); ++i) - { - if (iscntrl(UChar(value[i]))) - RETURN(E_BAD_ARGUMENT); - } - } - if (Growable(field)) { /* for a growable field we must assume zero terminated strings, because @@ -4356,14 +4351,6 @@ set_field_buffer(FIELD *field, int buffer, const char *value) * field->cols)))) RETURN(E_SYSTEM_ERROR); - /* in this case we also have to check, whether or not the remaining - characters in value are also printable for buffer 0. */ - if (buffer == 0) - { - for (i = len; i < vlen; i++) - if (iscntrl(UChar(value[i]))) - RETURN(E_BAD_ARGUMENT); - } len = vlen; } } @@ -4376,16 +4363,29 @@ set_field_buffer(FIELD *field, int buffer, const char *value) * There should be a better way, but this handles nonspacing characters * and other special cases that we really do not want to handle here. */ +#if NCURSES_EXT_FUNCS + if (wresize(field->working, field->drows, field->dcols) == ERR) +#endif + { + delwin(field->working); + field->working = newpad(field->drows, field->dcols); + } + len = Buffer_Length(field); wclear(field->working); mvwaddstr(field->working, 0, 0, value); - if ((widevalue = (FIELD_CELL *)calloc(len + 1, sizeof(FIELD_CELL))) == 0) + if ((widevalue = typeCalloc(FIELD_CELL, len + 1)) == 0) { RETURN(E_SYSTEM_ERROR); } else { - mvwin_wchnstr(field->working, 0, 0, widevalue, (int)len); + for (i = 0; i < (unsigned)field->drows; ++i) + { + mvwin_wchnstr(field->working, i, 0, + widevalue + (i * field->dcols), + field->dcols); + } for (i = 0; i < len; ++i) { if (CharEq(myZEROS, widevalue[i])) @@ -4459,10 +4459,7 @@ field_buffer(const FIELD *field, int buffer) init_mb(state); next = _nc_wcrtomb(0, data[n].chars[0], &state); if (!isEILSEQ(next)) - { - if (next != 0) - need += next; - } + need += next; } } @@ -4476,7 +4473,7 @@ field_buffer(const FIELD *field, int buffer) { wclear(field->working); mvwadd_wchnstr(field->working, 0, 0, data, size); - mvwinnstr(field->working, 0, 0, result, (int)need + 1); + mvwinnstr(field->working, 0, 0, result, (int)need); } #else result = Address_Of_Nth_Buffer(field, buffer);