Lines Matching +full:tightly +full:- +full:coupled

2  * Copyright 2018-2020,2021 Thomas E. Dickey                                *
3 * Copyright 1998-2016,2017 Free Software Foundation, Inc. *
38 /*----------------------------------------------------------------------------
53 b) Inter-Field Navigation ( all functions prefixed by FN_ )
56 c) Intra-Field Navigation ( all functions prefixed by IFN_ )
59 Essentially this is a specialization of Intra-Field navigation.
60 It has to check for a multi-line field.
62 Essentially this is a specialization of Intra-Field navigation.
63 It has to check for a single-line field.
68 h) Field-Validation requests ( all functions prefixed by FV_ )
72 --------------------------------------------------------------------------*/
74 /*----------------------------------------------------------------------------
79 --------------------------------------------------------------------------*/
95 /* Implement a more user-friendly previous/next word behavior */
114 /*----------------------------------------------------------------------------
116 --------------------------------------------------------------------------*/
123 /*----------------------------------------------------------------------------
129 --------------------------------------------------------------------------*/
132 #define Position_Of_Row_In_Buffer(field,row) ((row)*(field)->dcols)
136 ((field)->buf + (N)*(1+Buffer_Length(field)))
149 Address_Of_Row_In_Nth_Buffer((form)->current,N,(form)->currow)
159 (Address_Of_Current_Row_In_Nth_Buffer(form,N) + (form)->curcol)
169 (((field)->drows > (field)->rows) || \
170 ((field)->dcols > (field)->cols))
174 This is true for non-public fields and for scrollable fields. */
181 (((field)->just != NO_JUSTIFICATION) && \
184 ((field)->dcols == (field)->cols)) || \
188 #define Growable(field) ((field)->status & _MAY_GROW)
192 ( wbkgdset((win),(chtype)((chtype)((field)->pad) | (field)->back)), \
193 (void) wattrset((win), (int)(field)->fore) )
197 ((field->form) &&\
198 (field->form->status & _POSTED) &&\
200 (field->page == field->form->curpage))
205 (((form)->currow==0) && ((form)->curcol==0))
210 /*----------------------------------------------------------------------------
212 --------------------------------------------------------------------------*/
220 if (form && form->w) in check_pos()
224 getyx(form->w, y, x); in check_pos()
225 if (y != form->currow || x != form->curcol) in check_pos()
230 form->currow, form->curcol)); in check_pos()
239 /*----------------------------------------------------------------------------
240 Wide-character special functions
241 --------------------------------------------------------------------------*/
250 while (n-- > 0) in wide_waddnstr()
269 while (n-- > 0) in wide_winsnstr()
316 cchar_t *data = &(win->_line[y].text[x]); in cell_base()
323 --x; in cell_base()
338 cchar_t *data = &(win->_line[y].text[x]); in cell_width()
343 result = cell_width(win, y, x - 1); in cell_width()
354 * There is no wide-character function such as wdel_wch(), so we must find
355 * all of the cells that comprise a multi-column character and delete them
356 * one-by-one.
361 int cells = cell_width(form->w, form->currow, form->curcol); in delete_char()
363 form->curcol = cell_base(form->w, form->currow, form->curcol); in delete_char()
364 wmove(form->w, form->currow, form->curcol); in delete_char()
365 while (cells-- > 0) in delete_char()
367 wdelch(form->w); in delete_char()
373 wmove((form)->w, (form)->currow, (form)->curcol), \
374 wdelch((form)->w)
377 /*---------------------------------------------------------------------------
381 | Description : Return pointer to first non-blank position in buffer.
384 | Return Values : Pointer to first non-blank position in buffer
385 +--------------------------------------------------------------------------*/
398 /*---------------------------------------------------------------------------
402 | Description : Return pointer after last non-blank position in buffer.
405 | Return Values : Pointer to position after last non-blank position in
407 +--------------------------------------------------------------------------*/
414 while ((p > buf) && ISBLANK(p[-1])) in After_End_Of_Data()
415 p--; in After_End_Of_Data()
419 /*---------------------------------------------------------------------------
427 +--------------------------------------------------------------------------*/
440 /*---------------------------------------------------------------------------
449 +--------------------------------------------------------------------------*/
456 while ((p > buf) && !ISBLANK(p[-1])) in After_Last_Whitespace_Character()
457 p--; in After_Last_Whitespace_Character()
462 compiler has an intrinsic div() support. Unfortunately GNU-C has it
464 N.B.: This only works if form->curcol follows immediately form->currow
469 /*---------------------------------------------------------------------------
477 | Return Values : -
478 +--------------------------------------------------------------------------*/
485 field = form->current; in Adjust_Cursor_Position()
486 assert(pos >= field->buf && field->dcols > 0); in Adjust_Cursor_Position()
487 idx = (int)(pos - field->buf); in Adjust_Cursor_Position()
489 *((div_t *) & (form->currow)) = div(idx, field->dcols); in Adjust_Cursor_Position()
491 form->currow = idx / field->dcols; in Adjust_Cursor_Position()
492 form->curcol = idx - field->cols * form->currow; in Adjust_Cursor_Position()
494 if (field->drows < form->currow) in Adjust_Cursor_Position()
495 form->currow = 0; in Adjust_Cursor_Position()
498 /*---------------------------------------------------------------------------
504 | Description : Copy the buffer to the window. If it is a multi-line
508 | Return Values : -
509 +--------------------------------------------------------------------------*/
524 for (row = 0, pBuffer = field->buf; in Buffer_To_Window()
530 if ((len = (int)(After_End_Of_Data(pBuffer, width) - pBuffer)) > 0) in Buffer_To_Window()
539 /*---------------------------------------------------------------------------
551 | Return Values : -
552 +--------------------------------------------------------------------------*/
564 win = form->w; in _nc_get_fieldbuffer()
567 pad = field->pad; in _nc_get_fieldbuffer()
571 for (row = 0; (row < height) && (row < field->drows); row++) in _nc_get_fieldbuffer()
574 len += myINNSTR(win, p + len, field->dcols); in _nc_get_fieldbuffer()
587 && p->chars[1] == 0 in _nc_get_fieldbuffer()
595 /*---------------------------------------------------------------------------
606 | Return Values : -
607 +--------------------------------------------------------------------------*/
611 _nc_get_fieldbuffer(form, field, field->buf); in Window_To_Buffer()
614 /*---------------------------------------------------------------------------
623 | Return Values : -
624 +--------------------------------------------------------------------------*/
628 if (form->status & _WINDOW_MODIFIED) in Synchronize_Buffer()
632 Window_To_Buffer(form, form->current); in Synchronize_Buffer()
633 wmove(form->w, form->currow, form->curcol); in Synchronize_Buffer()
637 /*---------------------------------------------------------------------------
645 | field-buffer pointer, the dcols and drows values
648 | Return Values : TRUE - field successfully increased
649 | FALSE - there was some error
650 +--------------------------------------------------------------------------*/
661 int old_dcols = field->dcols; in Field_Grown()
662 int old_drows = field->drows; in Field_Grown()
663 FIELD_CELL *oldbuf = field->buf; in Field_Grown()
667 FORM *form = field->form; in Field_Grown()
669 (form->status & _POSTED) && in Field_Grown()
670 (form->current == field)); in Field_Grown()
677 growth = field->cols * amount; in Field_Grown()
678 if (field->maxgrow) in Field_Grown()
679 growth = Minimum(field->maxgrow - field->dcols, growth); in Field_Grown()
680 field->dcols += growth; in Field_Grown()
681 if (field->dcols == field->maxgrow) in Field_Grown()
686 growth = (field->rows + field->nrow) * amount; in Field_Grown()
687 if (field->maxgrow) in Field_Grown()
688 growth = Minimum(field->maxgrow - field->drows, growth); in Field_Grown()
689 field->drows += growth; in Field_Grown()
690 if (field->drows == field->maxgrow) in Field_Grown()
699 field->dcols = old_dcols; in Field_Grown()
700 field->drows = old_drows; in Field_Grown()
701 if ((single_line_field && (field->dcols != field->maxgrow)) || in Field_Grown()
702 (!single_line_field && (field->drows != field->maxgrow))) in Field_Grown()
715 field->buf = newbuf; in Field_Grown()
716 for (i = 0; i <= field->nbuf; i++) in Field_Grown()
729 if (wresize(field->working, 1, Buffer_Length(field) + 1) == ERR) in Field_Grown()
735 WINDOW *new_window = newpad(field->drows, field->dcols); in Field_Grown()
740 if (form->w) in Field_Grown()
741 delwin(form->w); in Field_Grown()
742 form->w = new_window; in Field_Grown()
743 Set_Field_Window_Attributes(field, form->w); in Field_Grown()
744 werase(form->w); in Field_Grown()
745 Buffer_To_Window(field, form->w); in Field_Grown()
746 untouchwin(form->w); in Field_Grown()
747 wmove(form->w, form->currow, form->curcol); in Field_Grown()
757 if (field != field->link) in Field_Grown()
761 for (linked_field = field->link; in Field_Grown()
763 linked_field = linked_field->link) in Field_Grown()
765 linked_field->buf = field->buf; in Field_Grown()
766 linked_field->drows = field->drows; in Field_Grown()
767 linked_field->dcols = field->dcols; in Field_Grown()
774 field->dcols = old_dcols; in Field_Grown()
775 field->drows = old_drows; in Field_Grown()
776 field->buf = oldbuf; in Field_Grown()
778 (field->dcols != field->maxgrow)) || in Field_Grown()
780 (field->drows != field->maxgrow))) in Field_Grown()
790 /*---------------------------------------------------------------------------
796 | Return Values : E_OK - success
797 | E_BAD_ARGUMENT - invalid form pointer
798 | E_SYSTEM_ERROR - form has no current field or
799 | field-window
800 +--------------------------------------------------------------------------*/
806 && field->frow <= ry in Field_encloses()
807 && (field->frow + field->rows) > ry in Field_encloses()
808 && field->fcol <= rx in Field_encloses()
809 && (field->fcol + field->cols) > rx) in Field_encloses()
817 /*---------------------------------------------------------------------------
825 | Return Values : E_OK - success
826 | E_BAD_ARGUMENT - invalid form pointer
827 | E_SYSTEM_ERROR - form has no current field or
828 | field-window
829 +--------------------------------------------------------------------------*/
839 if (!form->w || !form->current) in _nc_Position_Form_Cursor()
842 field = form->current; in _nc_Position_Form_Cursor()
845 wmove(form->w, form->currow, form->curcol); in _nc_Position_Form_Cursor()
851 field->frow + form->currow - form->toprow, in _nc_Position_Form_Cursor()
852 field->fcol + form->curcol - form->begincol); in _nc_Position_Form_Cursor()
856 wcursyncup(form->w); in _nc_Position_Form_Cursor()
860 /*---------------------------------------------------------------------------
867 | Return Values : E_OK - on success
868 | E_BAD_ARGUMENT - invalid form pointer
869 | E_SYSTEM_ERROR - general error
870 +--------------------------------------------------------------------------*/
884 if (!form->w || !form->current) in _nc_Refresh_Current_Field()
887 field = form->current; in _nc_Refresh_Current_Field()
899 if (form->curcol < form->begincol) in _nc_Refresh_Current_Field()
900 form->begincol = form->curcol; in _nc_Refresh_Current_Field()
903 if (form->curcol >= (form->begincol + field->cols)) in _nc_Refresh_Current_Field()
904 form->begincol = form->curcol - field->cols in _nc_Refresh_Current_Field()
908 copywin(form->w, in _nc_Refresh_Current_Field()
911 form->begincol, in _nc_Refresh_Current_Field()
912 field->frow, in _nc_Refresh_Current_Field()
913 field->fcol, in _nc_Refresh_Current_Field()
914 field->frow, in _nc_Refresh_Current_Field()
915 field->cols + field->fcol - 1, in _nc_Refresh_Current_Field()
920 /* A multi-line, i.e. vertical scrolling field */ in _nc_Refresh_Current_Field()
923 if (field->drows > field->rows) in _nc_Refresh_Current_Field()
925 int row_after_bottom = form->toprow + field->rows; in _nc_Refresh_Current_Field()
927 if (form->currow < form->toprow) in _nc_Refresh_Current_Field()
929 form->toprow = form->currow; in _nc_Refresh_Current_Field()
932 if (form->currow >= row_after_bottom) in _nc_Refresh_Current_Field()
934 form->toprow = form->currow - field->rows + 1; in _nc_Refresh_Current_Field()
937 if (field->status & _NEWTOP) in _nc_Refresh_Current_Field()
940 first_modified_row = form->toprow; in _nc_Refresh_Current_Field()
941 first_unmodified_row = first_modified_row + field->rows; in _nc_Refresh_Current_Field()
948 first_modified_row = form->toprow; in _nc_Refresh_Current_Field()
951 if (is_linetouched(form->w, first_modified_row)) in _nc_Refresh_Current_Field()
958 if (!is_linetouched(form->w, first_unmodified_row)) in _nc_Refresh_Current_Field()
966 first_modified_row = form->toprow; in _nc_Refresh_Current_Field()
967 first_unmodified_row = first_modified_row + field->rows; in _nc_Refresh_Current_Field()
970 copywin(form->w, in _nc_Refresh_Current_Field()
974 field->frow + first_modified_row - form->toprow, in _nc_Refresh_Current_Field()
975 field->fcol, in _nc_Refresh_Current_Field()
976 field->frow + first_unmodified_row - form->toprow - 1, in _nc_Refresh_Current_Field()
977 field->cols + field->fcol - 1, in _nc_Refresh_Current_Field()
985 /* if the field-window is simply a derived window, i.e. contains no in _nc_Refresh_Current_Field()
989 wsyncup(form->w); in _nc_Refresh_Current_Field()
991 untouchwin(form->w); in _nc_Refresh_Current_Field()
995 /*---------------------------------------------------------------------------
1003 | Return Values : -
1004 +--------------------------------------------------------------------------*/
1012 ? field->buf in Perform_Justification()
1013 : Get_Start_Of_Data(field->buf, Buffer_Length(field))); in Perform_Justification()
1014 len = (int)(After_End_Of_Data(field->buf, Buffer_Length(field)) - bp); in Perform_Justification()
1020 assert(win && (field->drows == 1)); in Perform_Justification()
1022 if (field->cols - len >= 0) in Perform_Justification()
1023 switch (field->just) in Perform_Justification()
1028 col = (field->cols - len) / 2; in Perform_Justification()
1031 col = field->cols - len; in Perform_Justification()
1042 /*---------------------------------------------------------------------------
1051 | Return Values : -
1052 +--------------------------------------------------------------------------*/
1063 ? field->buf in Undo_Justification()
1064 : Get_Start_Of_Data(field->buf, Buffer_Length(field))); in Undo_Justification()
1065 len = (int)(After_End_Of_Data(field->buf, Buffer_Length(field)) - bp); in Undo_Justification()
1076 /*---------------------------------------------------------------------------
1087 | Return Values : TRUE - Character is valid
1088 | FALSE - Character is invalid
1089 +--------------------------------------------------------------------------*/
1099 if (typ->status & _LINKED_TYPE) in Check_Char()
1103 Check_Char(form, field, typ->left, ch, argp->left) || in Check_Char()
1104 Check_Char(form, field, typ->right, ch, argp->right)); in Check_Char()
1109 if (typ->charcheck.occheck) in Check_Char()
1111 if (typ->status & _GENERIC) in Check_Char()
1112 return typ->charcheck.gccheck(ch, form, field, (void *)argp); in Check_Char()
1114 return typ->charcheck.occheck(ch, (void *)argp); in Check_Char()
1117 if (typ->ccheck) in Check_Char()
1118 return typ->ccheck(ch, (void *)argp); in Check_Char()
1125 /*---------------------------------------------------------------------------
1135 | Return Values : E_OK - on success
1136 | E_SYSTEM_ERROR - some error (typical no memory)
1137 +--------------------------------------------------------------------------*/
1147 fwin = Get_Form_Window(field->form); in Display_Or_Erase_Field()
1149 field->rows, field->cols, field->frow, field->fcol); in Display_Or_Erase_Field()
1186 /*---------------------------------------------------------------------------
1193 | Return Values : E_OK - success
1194 | E_BAD_ARGUMENT - invalid field pointer
1195 | E_SYSTEM_ERROR - some severe basic error
1196 +--------------------------------------------------------------------------*/
1206 if (((form = field->form) != (FORM *)0) in Synchronize_Field()
1209 if (field == form->current) in Synchronize_Field()
1211 form->currow = form->curcol = form->toprow = form->begincol = 0; in Synchronize_Field()
1212 werase(form->w); in Synchronize_Field()
1215 Undo_Justification(field, form->w); in Synchronize_Field()
1217 Buffer_To_Window(field, form->w); in Synchronize_Field()
1229 /*---------------------------------------------------------------------------
1237 | Return Values : E_OK - success
1238 | E_BAD_ARGUMENT - invalid field pointer
1239 | E_SYSTEM_ERROR - some severe basic error
1240 +--------------------------------------------------------------------------*/
1250 if (!field->link) in Synchronize_Linked_Fields()
1253 for (linked_field = field->link; in Synchronize_Linked_Fields()
1255 linked_field = linked_field->link) in Synchronize_Linked_Fields()
1266 /*---------------------------------------------------------------------------
1274 | Return Values : E_OK - success
1275 | E_BAD_ARGUMENT - invalid field pointer
1276 | E_SYSTEM_ERROR - some severe basic error
1277 +--------------------------------------------------------------------------*/
1289 CHECKPOS(field->form); in _nc_Synchronize_Attributes()
1290 if (((form = field->form) != (FORM *)0) in _nc_Synchronize_Attributes()
1293 if (form->current == field) in _nc_Synchronize_Attributes()
1296 Set_Field_Window_Attributes(field, form->w); in _nc_Synchronize_Attributes()
1297 werase(form->w); in _nc_Synchronize_Attributes()
1298 wmove(form->w, form->currow, form->curcol); in _nc_Synchronize_Attributes()
1303 Undo_Justification(field, form->w); in _nc_Synchronize_Attributes()
1305 Buffer_To_Window(field, form->w); in _nc_Synchronize_Attributes()
1311 copywin(form->w, formwin, in _nc_Synchronize_Attributes()
1313 field->frow, field->fcol, in _nc_Synchronize_Attributes()
1314 field->frow + field->rows - 1, in _nc_Synchronize_Attributes()
1315 field->fcol + field->cols - 1, 0); in _nc_Synchronize_Attributes()
1317 Buffer_To_Window(field, form->w); in _nc_Synchronize_Attributes()
1331 /*---------------------------------------------------------------------------
1340 | Return Values : E_OK - success
1341 | E_BAD_ARGUMENT - invalid field pointer
1342 | E_CURRENT - field is the current one
1343 | E_SYSTEM_ERROR - some severe basic error
1344 +--------------------------------------------------------------------------*/
1358 oldopts = field->opts; in _nc_Synchronize_Options()
1360 field->opts = newopts; in _nc_Synchronize_Options()
1361 form = field->form; in _nc_Synchronize_Options()
1365 if (form->status & _POSTED) in _nc_Synchronize_Options()
1367 if (form->current == field) in _nc_Synchronize_Options()
1369 field->opts = oldopts; in _nc_Synchronize_Options()
1372 if (form->curpage == field->page) in _nc_Synchronize_Options()
1403 (field->cols == field->dcols) && in _nc_Synchronize_Options()
1404 (field->just != NO_JUSTIFICATION) && in _nc_Synchronize_Options()
1413 if ((field->maxgrow == 0) || in _nc_Synchronize_Options()
1414 (single_line_field && (field->dcols < field->maxgrow)) || in _nc_Synchronize_Options()
1415 (!single_line_field && (field->drows < field->maxgrow))) in _nc_Synchronize_Options()
1421 (field->just != NO_JUSTIFICATION) && in _nc_Synchronize_Options()
1441 FIELD *field = form->current; in _nc_Unset_Current_Field()
1446 if (field->drows > field->rows) in _nc_Unset_Current_Field()
1448 if (form->toprow == 0) in _nc_Unset_Current_Field()
1458 werase(form->w); in _nc_Unset_Current_Field()
1459 Perform_Justification(field, form->w); in _nc_Unset_Current_Field()
1461 (form->w->_parent == 0)) in _nc_Unset_Current_Field()
1463 copywin(form->w, in _nc_Unset_Current_Field()
1467 field->frow, in _nc_Unset_Current_Field()
1468 field->fcol, in _nc_Unset_Current_Field()
1469 field->frow, in _nc_Unset_Current_Field()
1470 field->cols + field->fcol - 1, in _nc_Unset_Current_Field()
1476 wsyncup(form->w); in _nc_Unset_Current_Field()
1481 delwin(form->w); in _nc_Unset_Current_Field()
1482 form->w = (WINDOW *)0; in _nc_Unset_Current_Field()
1483 form->current = 0; in _nc_Unset_Current_Field()
1486 /*---------------------------------------------------------------------------
1493 | Return Values : E_OK - success
1494 | E_BAD_ARGUMENT - invalid form or field pointer
1495 | E_SYSTEM_ERROR - some severe basic error
1496 | E_NOT_CONNECTED - no fields are connected to the form
1497 +--------------------------------------------------------------------------*/
1506 if (!form || !newfield || (newfield->form != form)) in _nc_Set_Current_Field()
1509 if ((form->status & _IN_DRIVER)) in _nc_Set_Current_Field()
1512 if (!(form->field)) in _nc_Set_Current_Field()
1515 field = form->current; in _nc_Set_Current_Field()
1518 !(form->status & _POSTED)) in _nc_Set_Current_Field()
1520 if (field && (form->w) && in _nc_Set_Current_Field()
1522 (field->form->curpage == field->page)) in _nc_Set_Current_Field()
1528 new_window = newpad(field->drows, field->dcols); in _nc_Set_Current_Field()
1531 field->rows, field->cols, field->frow, field->fcol); in _nc_Set_Current_Field()
1536 form->current = field; in _nc_Set_Current_Field()
1538 if (form->w) in _nc_Set_Current_Field()
1539 delwin(form->w); in _nc_Set_Current_Field()
1540 form->w = new_window; in _nc_Set_Current_Field()
1543 Set_Field_Window_Attributes(field, form->w); in _nc_Set_Current_Field()
1547 werase(form->w); in _nc_Set_Current_Field()
1548 Buffer_To_Window(field, form->w); in _nc_Set_Current_Field()
1554 werase(form->w); in _nc_Set_Current_Field()
1555 Undo_Justification(field, form->w); in _nc_Set_Current_Field()
1556 wsyncup(form->w); in _nc_Set_Current_Field()
1560 untouchwin(form->w); in _nc_Set_Current_Field()
1563 form->currow = form->curcol = form->toprow = form->begincol = 0; in _nc_Set_Current_Field()
1567 /*----------------------------------------------------------------------------
1568 Intra-Field Navigation routines
1569 --------------------------------------------------------------------------*/
1571 /*---------------------------------------------------------------------------
1575 | Description : Move to the next character in the field. In a multi-line
1578 | Return Values : E_OK - success
1579 | E_REQUEST_DENIED - at the rightmost position
1580 +--------------------------------------------------------------------------*/
1584 FIELD *field = form->current; in IFN_Next_Character()
1585 int step = myWCWIDTH(form->w, form->currow, form->curcol); in IFN_Next_Character()
1588 if ((form->curcol += step) == field->dcols) in IFN_Next_Character()
1590 if ((++(form->currow)) == field->drows) in IFN_Next_Character()
1595 form->curcol = 0; in IFN_Next_Character()
1599 form->currow--; in IFN_Next_Character()
1604 form->curcol -= step; in IFN_Next_Character()
1607 form->curcol = 0; in IFN_Next_Character()
1612 /*---------------------------------------------------------------------------
1617 | multi-line field this wraps and the beginning of the
1620 | Return Values : E_OK - success
1621 | E_REQUEST_DENIED - at the leftmost position
1622 +--------------------------------------------------------------------------*/
1626 int amount = myWCWIDTH(form->w, form->currow, form->curcol - 1); in IFN_Previous_Character()
1627 int oldcol = form->curcol; in IFN_Previous_Character()
1630 if ((form->curcol -= amount) < 0) in IFN_Previous_Character()
1632 if ((--(form->currow)) < 0) in IFN_Previous_Character()
1634 form->currow++; in IFN_Previous_Character()
1635 form->curcol = oldcol; in IFN_Previous_Character()
1638 form->curcol = form->current->dcols - 1; in IFN_Previous_Character()
1643 /*---------------------------------------------------------------------------
1649 | Return Values : E_OK - success
1650 | E_REQUEST_DENIED - at the last line
1651 +--------------------------------------------------------------------------*/
1655 FIELD *field = form->current; in IFN_Next_Line()
1658 if ((++(form->currow)) == field->drows) in IFN_Next_Line()
1664 form->currow--; in IFN_Next_Line()
1667 form->curcol = 0; in IFN_Next_Line()
1671 /*---------------------------------------------------------------------------
1677 | Return Values : E_OK - success
1678 | E_REQUEST_DENIED - at the first line
1679 +--------------------------------------------------------------------------*/
1684 if ((--(form->currow)) < 0) in IFN_Previous_Line()
1686 form->currow++; in IFN_Previous_Line()
1689 form->curcol = 0; in IFN_Previous_Line()
1693 /*---------------------------------------------------------------------------
1699 | Return Values : E_OK - success
1700 | E_REQUEST_DENIED - there is no next word
1701 +--------------------------------------------------------------------------*/
1705 FIELD *field = form->current; in IFN_Next_Word()
1717 next non-blank data */ in IFN_Next_Word()
1718 s = Get_First_Whitespace_Character(bp, Buffer_Length(field) - in IFN_Next_Word()
1719 (int)(bp - field->buf)); in IFN_Next_Word()
1722 t = Get_Start_Of_Data(s, Buffer_Length(field) - in IFN_Next_Word()
1723 (int)(s - field->buf)); in IFN_Next_Word()
1735 /*---------------------------------------------------------------------------
1741 | Return Values : E_OK - success
1742 | E_REQUEST_DENIED - there is no previous word
1743 +--------------------------------------------------------------------------*/
1747 FIELD *field = form->current; in IFN_Previous_Word()
1758 s = After_End_Of_Data(field->buf, (int)(bp - field->buf)); in IFN_Previous_Word()
1759 /* s points now right after the last non-blank in the buffer before bp. in IFN_Previous_Word()
1770 t = After_Last_Whitespace_Character(field->buf, (int)(s - field->buf)); in IFN_Previous_Word()
1778 s = After_End_Of_Data(field->buf, (int)(t - field->buf)); in IFN_Previous_Word()
1779 t = After_Last_Whitespace_Character(field->buf, (int)(s - field->buf)); in IFN_Previous_Word()
1789 /*---------------------------------------------------------------------------
1793 | Description : Place the cursor at the first non-pad character in
1796 | Return Values : E_OK - success
1797 +--------------------------------------------------------------------------*/
1801 FIELD *field = form->current; in IFN_Beginning_Of_Field()
1806 Get_Start_Of_Data(field->buf, Buffer_Length(field))); in IFN_Beginning_Of_Field()
1810 /*---------------------------------------------------------------------------
1814 | Description : Place the cursor after the last non-pad character in
1819 | Return Values : E_OK - success
1820 +--------------------------------------------------------------------------*/
1824 FIELD *field = form->current; in IFN_End_Of_Field()
1829 pos = After_End_Of_Data(field->buf, Buffer_Length(field)); in IFN_End_Of_Field()
1830 if (pos == (field->buf + Buffer_Length(field))) in IFN_End_Of_Field()
1831 pos--; in IFN_End_Of_Field()
1836 /*---------------------------------------------------------------------------
1840 | Description : Place the cursor on the first non-pad character in
1843 | Return Values : E_OK - success
1844 +--------------------------------------------------------------------------*/
1848 FIELD *field = form->current; in IFN_Beginning_Of_Line()
1854 field->dcols)); in IFN_Beginning_Of_Line()
1858 /*---------------------------------------------------------------------------
1862 | Description : Place the cursor after the last non-pad character in the
1867 | Return Values : E_OK - success
1868 +--------------------------------------------------------------------------*/
1872 FIELD *field = form->current; in IFN_End_Of_Line()
1879 pos = After_End_Of_Data(bp, field->dcols); in IFN_End_Of_Line()
1880 if (pos == (bp + field->dcols)) in IFN_End_Of_Line()
1881 pos--; in IFN_End_Of_Line()
1886 /*---------------------------------------------------------------------------
1893 | Return Values : E_OK - success
1894 | E_REQUEST_DENIED - already in first column
1895 +--------------------------------------------------------------------------*/
1899 int amount = myWCWIDTH(form->w, form->currow, form->curcol - 1); in IFN_Left_Character()
1900 int oldcol = form->curcol; in IFN_Left_Character()
1903 if ((form->curcol -= amount) < 0) in IFN_Left_Character()
1905 form->curcol = oldcol; in IFN_Left_Character()
1911 /*---------------------------------------------------------------------------
1918 | Return Values : E_OK - success
1919 | E_REQUEST_DENIED - already in last column
1920 +--------------------------------------------------------------------------*/
1924 int amount = myWCWIDTH(form->w, form->currow, form->curcol); in IFN_Right_Character()
1925 int oldcol = form->curcol; in IFN_Right_Character()
1928 if ((form->curcol += amount) >= form->current->dcols) in IFN_Right_Character()
1931 FIELD *field = form->current; in IFN_Right_Character()
1936 form->curcol = oldcol; in IFN_Right_Character()
1942 /*---------------------------------------------------------------------------
1949 | Return Values : E_OK - success
1950 | E_REQUEST_DENIED - already in last column
1951 +--------------------------------------------------------------------------*/
1956 if ((--(form->currow)) < 0) in IFN_Up_Character()
1958 form->currow++; in IFN_Up_Character()
1964 /*---------------------------------------------------------------------------
1971 | Return Values : E_OK - success
1972 | E_REQUEST_DENIED - already in last column
1973 +--------------------------------------------------------------------------*/
1977 FIELD *field = form->current; in IFN_Down_Character()
1980 if ((++(form->currow)) == field->drows) in IFN_Down_Character()
1986 --(form->currow); in IFN_Down_Character()
1991 /*----------------------------------------------------------------------------
1992 END of Intra-Field Navigation routines
1993 --------------------------------------------------------------------------*/
1995 /*----------------------------------------------------------------------------
1997 --------------------------------------------------------------------------*/
1999 /*---------------------------------------------------------------------------
2003 | Description : Scroll multi-line field forward (nlines>0) or
2006 | Return Values : E_OK - success
2007 | E_REQUEST_DENIED - can't scroll
2008 +--------------------------------------------------------------------------*/
2012 FIELD *field = form->current; in VSC_Generic()
2014 int rows_to_go = (nlines > 0 ? nlines : -nlines); in VSC_Generic()
2018 if ((rows_to_go + form->toprow) > (field->drows - field->rows)) in VSC_Generic()
2019 rows_to_go = (field->drows - field->rows - form->toprow); in VSC_Generic()
2023 form->currow += rows_to_go; in VSC_Generic()
2024 form->toprow += rows_to_go; in VSC_Generic()
2030 if (rows_to_go > form->toprow) in VSC_Generic()
2031 rows_to_go = form->toprow; in VSC_Generic()
2035 form->currow -= rows_to_go; in VSC_Generic()
2036 form->toprow -= rows_to_go; in VSC_Generic()
2042 /*----------------------------------------------------------------------------
2044 --------------------------------------------------------------------------*/
2046 /*----------------------------------------------------------------------------
2048 --------------------------------------------------------------------------*/
2050 /*---------------------------------------------------------------------------
2057 | This has to check for a multi-line field and to set
2060 | Return Values : Propagated error code from low-level driver calls
2061 +--------------------------------------------------------------------------*/
2067 if (!Single_Line_Field(form->current)) in Vertical_Scrolling()
2071 SetStatus(form->current, _NEWTOP); in Vertical_Scrolling()
2076 /*---------------------------------------------------------------------------
2080 | Description : Scroll multi-line field forward a line
2082 | Return Values : E_OK - success
2083 | E_REQUEST_DENIED - no data ahead
2084 +--------------------------------------------------------------------------*/
2092 /*---------------------------------------------------------------------------
2096 | Description : Scroll multi-line field backward a line
2098 | Return Values : E_OK - success
2099 | E_REQUEST_DENIED - no data behind
2100 +--------------------------------------------------------------------------*/
2105 returnCode(VSC_Generic(form, -1)); in VSC_Scroll_Line_Backward()
2108 /*---------------------------------------------------------------------------
2112 | Description : Scroll a multi-line field forward a page
2114 | Return Values : E_OK - success
2115 | E_REQUEST_DENIED - no data ahead
2116 +--------------------------------------------------------------------------*/
2121 returnCode(VSC_Generic(form, form->current->rows)); in VSC_Scroll_Page_Forward()
2124 /*---------------------------------------------------------------------------
2128 | Description : Scroll a multi-line field forward half a page
2130 | Return Values : E_OK - success
2131 | E_REQUEST_DENIED - no data ahead
2132 +--------------------------------------------------------------------------*/
2137 returnCode(VSC_Generic(form, (form->current->rows + 1) / 2)); in VSC_Scroll_Half_Page_Forward()
2140 /*---------------------------------------------------------------------------
2144 | Description : Scroll a multi-line field backward a page
2146 | Return Values : E_OK - success
2147 | E_REQUEST_DENIED - no data behind
2148 +--------------------------------------------------------------------------*/
2153 returnCode(VSC_Generic(form, -(form->current->rows))); in VSC_Scroll_Page_Backward()
2156 /*---------------------------------------------------------------------------
2160 | Description : Scroll a multi-line field backward half a page
2162 | Return Values : E_OK - success
2163 | E_REQUEST_DENIED - no data behind
2164 +--------------------------------------------------------------------------*/
2169 returnCode(VSC_Generic(form, -((form->current->rows + 1) / 2))); in VSC_Scroll_Half_Page_Backward()
2171 /*----------------------------------------------------------------------------
2173 --------------------------------------------------------------------------*/
2175 /*----------------------------------------------------------------------------
2177 --------------------------------------------------------------------------*/
2179 /*---------------------------------------------------------------------------
2183 | Description : Scroll single-line field forward (ncolumns>0) or
2186 | Return Values : E_OK - success
2187 | E_REQUEST_DENIED - can't scroll
2188 +--------------------------------------------------------------------------*/
2192 FIELD *field = form->current; in HSC_Generic()
2194 int cols_to_go = (ncolumns > 0 ? ncolumns : -ncolumns); in HSC_Generic()
2198 if ((cols_to_go + form->begincol) > (field->dcols - field->cols)) in HSC_Generic()
2199 cols_to_go = field->dcols - field->cols - form->begincol; in HSC_Generic()
2203 form->curcol += cols_to_go; in HSC_Generic()
2204 form->begincol += cols_to_go; in HSC_Generic()
2210 if (cols_to_go > form->begincol) in HSC_Generic()
2211 cols_to_go = form->begincol; in HSC_Generic()
2215 form->curcol -= cols_to_go; in HSC_Generic()
2216 form->begincol -= cols_to_go; in HSC_Generic()
2222 /*----------------------------------------------------------------------------
2224 --------------------------------------------------------------------------*/
2226 /*----------------------------------------------------------------------------
2228 --------------------------------------------------------------------------*/
2230 /*---------------------------------------------------------------------------
2237 | This has to check for a single-line field.
2239 | Return Values : Propagated error code from low-level driver calls
2240 +--------------------------------------------------------------------------*/
2244 if (Single_Line_Field(form->current)) in Horizontal_Scrolling()
2250 /*---------------------------------------------------------------------------
2254 | Description : Scroll single-line field forward a character
2256 | Return Values : E_OK - success
2257 | E_REQUEST_DENIED - no data ahead
2258 +--------------------------------------------------------------------------*/
2266 /*---------------------------------------------------------------------------
2270 | Description : Scroll single-line field backward a character
2272 | Return Values : E_OK - success
2273 | E_REQUEST_DENIED - no data behind
2274 +--------------------------------------------------------------------------*/
2279 returnCode(HSC_Generic(form, -1)); in HSC_Scroll_Char_Backward()
2282 /*---------------------------------------------------------------------------
2286 | Description : Scroll single-line field forward a line
2288 | Return Values : E_OK - success
2289 | E_REQUEST_DENIED - no data ahead
2290 +--------------------------------------------------------------------------*/
2295 returnCode(HSC_Generic(form, form->current->cols)); in HSC_Horizontal_Line_Forward()
2298 /*---------------------------------------------------------------------------
2302 | Description : Scroll single-line field forward half a line
2304 | Return Values : E_OK - success
2305 | E_REQUEST_DENIED - no data ahead
2306 +--------------------------------------------------------------------------*/
2311 returnCode(HSC_Generic(form, (form->current->cols + 1) / 2)); in HSC_Horizontal_Half_Line_Forward()
2314 /*---------------------------------------------------------------------------
2318 | Description : Scroll single-line field backward a line
2320 | Return Values : E_OK - success
2321 | E_REQUEST_DENIED - no data behind
2322 +--------------------------------------------------------------------------*/
2327 returnCode(HSC_Generic(form, -(form->current->cols))); in HSC_Horizontal_Line_Backward()
2330 /*---------------------------------------------------------------------------
2334 | Description : Scroll single-line field backward half a line
2336 | Return Values : E_OK - success
2337 | E_REQUEST_DENIED - no data behind
2338 +--------------------------------------------------------------------------*/
2343 returnCode(HSC_Generic(form, -((form->current->cols + 1) / 2))); in HSC_Horizontal_Half_Line_Backward()
2346 /*----------------------------------------------------------------------------
2348 --------------------------------------------------------------------------*/
2350 /*----------------------------------------------------------------------------
2352 --------------------------------------------------------------------------*/
2354 /*---------------------------------------------------------------------------
2361 | Return Values : TRUE - there is enough space
2362 | FALSE - there is not enough space
2363 +--------------------------------------------------------------------------*/
2367 FIELD *field = form->current; in Is_There_Room_For_A_Line()
2371 begin_of_last_line = Address_Of_Row_In_Buffer(field, (field->drows - 1)); in Is_There_Room_For_A_Line()
2372 s = After_End_Of_Data(begin_of_last_line, field->dcols); in Is_There_Room_For_A_Line()
2376 /*---------------------------------------------------------------------------
2383 | Return Values : TRUE - there is room
2384 | FALSE - there is not enough room (line full)
2385 +--------------------------------------------------------------------------*/
2391 wmove(form->w, form->currow, form->current->dcols - 1); in Is_There_Room_For_A_Char_In_Line()
2392 last_char_in_line = (int)(winch(form->w) & A_CHARTEXT); in Is_There_Room_For_A_Char_In_Line()
2393 wmove(form->w, form->currow, form->curcol); in Is_There_Room_For_A_Char_In_Line()
2394 return (((last_char_in_line == form->current->pad) || in Is_There_Room_For_A_Char_In_Line()
2401 /*---------------------------------------------------------------------------
2417 | Return Values : E_OK - success
2418 | E_REQUEST_DENIED -
2419 | E_SYSTEM_ERROR - system error
2420 +--------------------------------------------------------------------------*/
2424 FIELD *field = form->current; in Insert_String()
2426 int datalen = (int)(After_End_Of_Data(bp, field->dcols) - bp); in Insert_String()
2427 int freelen = field->dcols - datalen; in Insert_String()
2433 wmove(form->w, row, 0); in Insert_String()
2434 myINSNSTR(form->w, txt, len); in Insert_String()
2435 wmove(form->w, row, len); in Insert_String()
2436 myINSNSTR(form->w, &myBLANK, 1); in Insert_String()
2443 if ((row == (field->drows - 1)) && Growable(field)) in Insert_String()
2447 /* !!!Side-Effect : might be changed due to growth!!! */ in Insert_String()
2451 if (row < (field->drows - 1)) in Insert_String()
2458 + field->dcols in Insert_String()
2459 - requiredlen, in Insert_String()
2461 - bp)); in Insert_String()
2464 datalen = (int)(split - bp); /* + freelen has to stay on this line */ in Insert_String()
2465 freelen = field->dcols - (datalen + freelen); /* for the next line */ in Insert_String()
2469 wmove(form->w, row, datalen); in Insert_String()
2470 wclrtoeol(form->w); in Insert_String()
2471 wmove(form->w, row, 0); in Insert_String()
2472 myINSNSTR(form->w, txt, len); in Insert_String()
2473 wmove(form->w, row, len); in Insert_String()
2474 myINSNSTR(form->w, &myBLANK, 1); in Insert_String()
2482 /*---------------------------------------------------------------------------
2492 | Return Values : E_OK - no wrapping required or wrapping
2494 | E_REQUEST_DENIED -
2495 | E_SYSTEM_ERROR - some system error
2496 +--------------------------------------------------------------------------*/
2500 FIELD *field = form->current; in Wrapping_Not_Necessary_Or_Wrapping_Ok()
2502 bool Last_Row = ((field->drows - 1) == form->currow); in Wrapping_Not_Necessary_Or_Wrapping_Ok()
2505 (!Single_Line_Field(field)) && /* must be multi-line */ in Wrapping_Not_Necessary_Or_Wrapping_Ok()
2523 split = After_Last_Whitespace_Character(bp, field->dcols); in Wrapping_Not_Necessary_Or_Wrapping_Ok()
2526 chars_to_remain_on_line = (int)(split - bp); in Wrapping_Not_Necessary_Or_Wrapping_Ok()
2527 chars_to_be_wrapped = field->dcols - chars_to_remain_on_line; in Wrapping_Not_Necessary_Or_Wrapping_Ok()
2530 if ((result = Insert_String(form, form->currow + 1, split, in Wrapping_Not_Necessary_Or_Wrapping_Ok()
2533 wmove(form->w, form->currow, chars_to_remain_on_line); in Wrapping_Not_Necessary_Or_Wrapping_Ok()
2534 wclrtoeol(form->w); in Wrapping_Not_Necessary_Or_Wrapping_Ok()
2535 if (form->curcol >= chars_to_remain_on_line) in Wrapping_Not_Necessary_Or_Wrapping_Ok()
2537 form->currow++; in Wrapping_Not_Necessary_Or_Wrapping_Ok()
2538 form->curcol -= chars_to_remain_on_line; in Wrapping_Not_Necessary_Or_Wrapping_Ok()
2557 /*----------------------------------------------------------------------------
2559 --------------------------------------------------------------------------*/
2561 /*---------------------------------------------------------------------------
2574 +--------------------------------------------------------------------------*/
2583 character in a field. But navigation is also allowed on non- in Field_Editing()
2587 ((unsigned)form->opts & O_BS_OVERLOAD) && in Field_Editing()
2596 if (((unsigned)form->opts & O_NL_OVERLOAD) && in Field_Editing()
2608 if ((unsigned)form->current->opts & O_EDIT) in Field_Editing()
2619 /*---------------------------------------------------------------------------
2628 | Return Values : E_OK - success
2629 | E_REQUEST_DENIED - new line not allowed
2630 | E_SYSTEM_ERROR - system error
2631 +--------------------------------------------------------------------------*/
2635 FIELD *field = form->current; in FE_New_Line()
2637 bool Last_Row = ((field->drows - 1) == form->currow); in FE_New_Line()
2640 if (form->status & _OVLMODE) in FE_New_Line()
2645 if (!((unsigned)form->opts & O_NL_OVERLOAD)) in FE_New_Line()
2647 wmove(form->w, form->currow, form->curcol); in FE_New_Line()
2648 wclrtoeol(form->w); in FE_New_Line()
2662 a single-line field */ in FE_New_Line()
2665 wmove(form->w, form->currow, form->curcol); in FE_New_Line()
2666 wclrtoeol(form->w); in FE_New_Line()
2667 form->currow++; in FE_New_Line()
2668 form->curcol = 0; in FE_New_Line()
2679 if (!((unsigned)form->opts & O_NL_OVERLOAD)) in FE_New_Line()
2693 t = After_End_Of_Data(bp, field->dcols - form->curcol); in FE_New_Line()
2694 wmove(form->w, form->currow, form->curcol); in FE_New_Line()
2695 wclrtoeol(form->w); in FE_New_Line()
2696 form->currow++; in FE_New_Line()
2697 form->curcol = 0; in FE_New_Line()
2698 wmove(form->w, form->currow, form->curcol); in FE_New_Line()
2699 winsertln(form->w); in FE_New_Line()
2700 myADDNSTR(form->w, bp, (int)(t - bp)); in FE_New_Line()
2707 /*---------------------------------------------------------------------------
2715 +--------------------------------------------------------------------------*/
2719 FIELD *field = form->current; in FE_Insert_Character()
2723 if (Check_Char(form, field, field->type, (int)C_BLANK, in FE_Insert_Character()
2724 (TypeArgument *)(field->arg))) in FE_Insert_Character()
2735 winsch(form->w, (chtype)C_BLANK); in FE_Insert_Character()
2743 /*---------------------------------------------------------------------------
2749 | Return Values : E_OK - success
2750 | E_REQUEST_DENIED - line can not be inserted
2751 +--------------------------------------------------------------------------*/
2755 FIELD *field = form->current; in FE_Insert_Line()
2760 field->type, (int)C_BLANK, (TypeArgument *)(field->arg))) in FE_Insert_Line()
2762 bool Maybe_Done = (form->currow != (field->drows - 1)) && in FE_Insert_Line()
2772 form->curcol = 0; in FE_Insert_Line()
2773 winsertln(form->w); in FE_Insert_Line()
2781 /*---------------------------------------------------------------------------
2787 | Return Values : E_OK - success
2788 +--------------------------------------------------------------------------*/
2797 /*---------------------------------------------------------------------------
2807 | Return Values : E_OK - success
2808 | E_REQUEST_DENIED - Character can't be deleted
2809 +--------------------------------------------------------------------------*/
2813 FIELD *field = form->current; in FE_Delete_Previous()
2819 if ((--(form->curcol)) < 0) in FE_Delete_Previous()
2822 int this_row = form->currow; in FE_Delete_Previous()
2824 form->curcol++; in FE_Delete_Previous()
2825 if (form->status & _OVLMODE) in FE_Delete_Previous()
2828 prev_line = Address_Of_Row_In_Buffer(field, (form->currow - 1)); in FE_Delete_Previous()
2829 this_line = Address_Of_Row_In_Buffer(field, (form->currow)); in FE_Delete_Previous()
2831 prev_end = After_End_Of_Data(prev_line, field->dcols); in FE_Delete_Previous()
2832 this_end = After_End_Of_Data(this_line, field->dcols); in FE_Delete_Previous()
2833 if ((int)(this_end - this_line) > in FE_Delete_Previous()
2834 (field->cols - (int)(prev_end - prev_line))) in FE_Delete_Previous()
2836 wmove(form->w, form->currow, form->curcol); in FE_Delete_Previous()
2837 wdeleteln(form->w); in FE_Delete_Previous()
2843 * multi-line form, we absorb one keystroke for the wrapping point. That in FE_Delete_Previous()
2853 if (form->currow == this_row && this_row > 0) in FE_Delete_Previous()
2855 form->currow -= 1; in FE_Delete_Previous()
2856 form->curcol = field->dcols - 1; in FE_Delete_Previous()
2861 wmove(form->w, form->currow, form->curcol); in FE_Delete_Previous()
2862 myADDNSTR(form->w, this_line, (int)(this_end - this_line)); in FE_Delete_Previous()
2872 /*---------------------------------------------------------------------------
2878 | Return Values : E_OK - success
2879 +--------------------------------------------------------------------------*/
2884 form->curcol = 0; in FE_Delete_Line()
2885 wdeleteln(form->w); in FE_Delete_Line()
2889 /*---------------------------------------------------------------------------
2895 | Return Values : E_OK - success
2896 | E_REQUEST_DENIED - failure
2897 +--------------------------------------------------------------------------*/
2901 FIELD *field = form->current; in FE_Delete_Word()
2903 FIELD_CELL *ep = bp + field->dcols; in FE_Delete_Word()
2904 FIELD_CELL *cp = bp + form->curcol; in FE_Delete_Word()
2912 /* move cursor to begin of word and erase to end of screen-line */ in FE_Delete_Word()
2914 After_Last_Whitespace_Character(bp, form->curcol)); in FE_Delete_Word()
2915 wmove(form->w, form->currow, form->curcol); in FE_Delete_Word()
2916 wclrtoeol(form->w); in FE_Delete_Word()
2919 s = Get_First_Whitespace_Character(cp, (int)(ep - cp)); in FE_Delete_Word()
2921 s = Get_Start_Of_Data(s, (int)(ep - s)); in FE_Delete_Word()
2925 myADDNSTR(form->w, s, (int)(s - After_End_Of_Data(s, (int)(ep - s)))); in FE_Delete_Word()
2930 /*---------------------------------------------------------------------------
2936 | Return Values : E_OK - success
2937 +--------------------------------------------------------------------------*/
2942 wmove(form->w, form->currow, form->curcol); in FE_Clear_To_End_Of_Line()
2943 wclrtoeol(form->w); in FE_Clear_To_End_Of_Line()
2947 /*---------------------------------------------------------------------------
2953 | Return Values : E_OK - success
2954 +--------------------------------------------------------------------------*/
2959 wmove(form->w, form->currow, form->curcol); in FE_Clear_To_End_Of_Field()
2960 wclrtobot(form->w); in FE_Clear_To_End_Of_Field()
2964 /*---------------------------------------------------------------------------
2970 | Return Values : E_OK - success
2971 +--------------------------------------------------------------------------*/
2976 form->currow = form->curcol = 0; in FE_Clear_Field()
2977 werase(form->w); in FE_Clear_Field()
2980 /*----------------------------------------------------------------------------
2982 --------------------------------------------------------------------------*/
2984 /*----------------------------------------------------------------------------
2986 --------------------------------------------------------------------------*/
2988 /*---------------------------------------------------------------------------
2994 | Return Values : E_OK - success
2995 +--------------------------------------------------------------------------*/
3004 /*---------------------------------------------------------------------------
3010 | Return Values : E_OK - success
3011 +--------------------------------------------------------------------------*/
3020 /*----------------------------------------------------------------------------
3022 --------------------------------------------------------------------------*/
3024 /*----------------------------------------------------------------------------
3026 --------------------------------------------------------------------------*/
3028 /*---------------------------------------------------------------------------
3038 | Return Values : TRUE - next choice successfully retrieved
3039 | FALSE - couldn't retrieve next choice
3040 +--------------------------------------------------------------------------*/
3044 if (!typ || !(typ->status & _HAS_CHOICE)) in Next_Choice()
3047 if (typ->status & _LINKED_TYPE) in Next_Choice()
3051 Next_Choice(form, typ->left, field, argp->left) || in Next_Choice()
3052 Next_Choice(form, typ->right, field, argp->right)); in Next_Choice()
3057 assert(typ->enum_next.onext); in Next_Choice()
3058 if (typ->status & _GENERIC) in Next_Choice()
3059 return typ->enum_next.gnext(form, field, (void *)argp); in Next_Choice()
3061 return typ->enum_next.onext(field, (void *)argp); in Next_Choice()
3063 assert(typ->next); in Next_Choice()
3064 return typ->next(field, (void *)argp); in Next_Choice()
3069 /*---------------------------------------------------------------------------
3079 | Return Values : TRUE - previous choice successfully retrieved
3080 | FALSE - couldn't retrieve previous choice
3081 +--------------------------------------------------------------------------*/
3085 if (!typ || !(typ->status & _HAS_CHOICE)) in Previous_Choice()
3088 if (typ->status & _LINKED_TYPE) in Previous_Choice()
3092 Previous_Choice(form, typ->left, field, argp->left) || in Previous_Choice()
3093 Previous_Choice(form, typ->right, field, argp->right)); in Previous_Choice()
3098 assert(typ->enum_prev.oprev); in Previous_Choice()
3099 if (typ->status & _GENERIC) in Previous_Choice()
3100 return typ->enum_prev.gprev(form, field, (void *)argp); in Previous_Choice()
3102 return typ->enum_prev.oprev(field, (void *)argp); in Previous_Choice()
3104 assert(typ->prev); in Previous_Choice()
3105 return typ->prev(field, (void *)argp); in Previous_Choice()
3109 /*----------------------------------------------------------------------------
3111 --------------------------------------------------------------------------*/
3113 /*----------------------------------------------------------------------------
3115 --------------------------------------------------------------------------*/
3117 /*---------------------------------------------------------------------------
3123 | Return Values : E_OK - success
3124 | E_REQUEST_DENIED - next choice couldn't be retrieved
3125 +--------------------------------------------------------------------------*/
3129 FIELD *field = form->current; in CR_Next_Choice()
3133 returnCode((Next_Choice(form, field->type, field, (TypeArgument *)(field->arg))) in CR_Next_Choice()
3138 /*---------------------------------------------------------------------------
3144 | Return Values : E_OK - success
3145 | E_REQUEST_DENIED - prev. choice couldn't be retrieved
3146 +--------------------------------------------------------------------------*/
3150 FIELD *field = form->current; in CR_Previous_Choice()
3154 returnCode((Previous_Choice(form, field->type, field, (TypeArgument *)(field->arg))) in CR_Previous_Choice()
3158 /*----------------------------------------------------------------------------
3160 --------------------------------------------------------------------------*/
3162 /*----------------------------------------------------------------------------
3164 --------------------------------------------------------------------------*/
3166 /*---------------------------------------------------------------------------
3177 | Return Values : TRUE - field is valid
3178 | FALSE - field is invalid.
3179 +--------------------------------------------------------------------------*/
3187 FIELD_CELL *bp = field->buf; in Check_Field()
3198 if (typ->status & _LINKED_TYPE) in Check_Field()
3202 Check_Field(form, typ->left, field, argp->left) || in Check_Field()
3203 Check_Field(form, typ->right, field, argp->right)); in Check_Field()
3208 if (typ->fieldcheck.ofcheck) in Check_Field()
3210 if (typ->status & _GENERIC) in Check_Field()
3211 return typ->fieldcheck.gfcheck(form, field, (void *)argp); in Check_Field()
3213 return typ->fieldcheck.ofcheck(field, (void *)argp); in Check_Field()
3216 if (typ->fcheck) in Check_Field()
3217 return typ->fcheck(field, (void *)argp); in Check_Field()
3224 /*---------------------------------------------------------------------------
3230 | Return Values : TRUE - field is valid
3231 | FALSE - field is invalid
3232 +--------------------------------------------------------------------------*/
3238 field = form->current; in _nc_Internal_Validation()
3241 if ((form->status & _FCHECK_REQUIRED) || in _nc_Internal_Validation()
3244 if (!Check_Field(form, field->type, field, (TypeArgument *)(field->arg))) in _nc_Internal_Validation()
3252 /*----------------------------------------------------------------------------
3254 --------------------------------------------------------------------------*/
3256 /*----------------------------------------------------------------------------
3258 --------------------------------------------------------------------------*/
3260 /*---------------------------------------------------------------------------
3266 | Return Values : E_OK - field valid
3267 | E_INVALID_FIELD - field not valid
3268 +--------------------------------------------------------------------------*/
3278 /*----------------------------------------------------------------------------
3280 --------------------------------------------------------------------------*/
3282 /*----------------------------------------------------------------------------
3283 Helper routines for Inter-Field Navigation
3284 --------------------------------------------------------------------------*/
3286 /*---------------------------------------------------------------------------
3296 +--------------------------------------------------------------------------*/
3300 FORM *form = field->form; in Next_Field_On_Page()
3301 FIELD **field_on_page = &form->field[field->index]; in Next_Field_On_Page()
3302 FIELD **first_on_page = &form->field[form->page[form->curpage].pmin]; in Next_Field_On_Page()
3303 FIELD **last_on_page = &form->field[form->page[form->curpage].pmax]; in Next_Field_On_Page()
3316 /*---------------------------------------------------------------------------
3326 +--------------------------------------------------------------------------*/
3330 FIELD **last_on_page = &form->field[form->page[form->curpage].pmax]; in _nc_First_Active_Field()
3341 FIELD **field = &form->field[proposed->index]; in _nc_First_Active_Field()
3342 FIELD **first = &form->field[form->page[form->curpage].pmin]; in _nc_First_Active_Field()
3355 !((unsigned)proposed->opts & O_VISIBLE)) in _nc_First_Active_Field()
3369 /*---------------------------------------------------------------------------
3379 +--------------------------------------------------------------------------*/
3383 FORM *form = field->form; in Previous_Field_On_Page()
3384 FIELD **field_on_page = &form->field[field->index]; in Previous_Field_On_Page()
3385 FIELD **first_on_page = &form->field[form->page[form->curpage].pmin]; in Previous_Field_On_Page()
3386 FIELD **last_on_page = &form->field[form->page[form->curpage].pmax]; in Previous_Field_On_Page()
3391 (field_on_page == first_on_page) ? last_on_page : field_on_page - 1; in Previous_Field_On_Page()
3400 /*---------------------------------------------------------------------------
3409 +--------------------------------------------------------------------------*/
3417 field_on_page = field_on_page->snext; in Sorted_Next_Field()
3426 /*---------------------------------------------------------------------------
3435 +--------------------------------------------------------------------------*/
3443 field_on_page = field_on_page->sprev; in Sorted_Previous_Field()
3452 /*---------------------------------------------------------------------------
3460 +--------------------------------------------------------------------------*/
3475 while (field_on_page->frow != field->frow); in Left_Neighbor_Field()
3480 /*---------------------------------------------------------------------------
3488 +--------------------------------------------------------------------------*/
3499 while (field_on_page->frow != field->frow); in Right_Neighbor_Field()
3504 /*---------------------------------------------------------------------------
3508 | Description : Because of the row-major nature of sorting the fields,
3516 +--------------------------------------------------------------------------*/
3521 int frow = field->frow; in Upper_Neighbor_Field()
3522 int fcol = field->fcol; in Upper_Neighbor_Field()
3532 while (field_on_page->frow == frow && field_on_page->fcol != fcol); in Upper_Neighbor_Field()
3534 if (field_on_page->frow != frow) in Upper_Neighbor_Field()
3538 frow = field_on_page->frow; in Upper_Neighbor_Field()
3542 while (field_on_page->frow == frow && field_on_page->fcol > fcol) in Upper_Neighbor_Field()
3547 if (field_on_page->frow != frow) in Upper_Neighbor_Field()
3554 /*---------------------------------------------------------------------------
3558 | Description : Because of the row-major nature of sorting the fields,
3566 +--------------------------------------------------------------------------*/
3571 int frow = field->frow; in Down_Neighbor_Field()
3572 int fcol = field->fcol; in Down_Neighbor_Field()
3582 while (field_on_page->frow == frow && field_on_page->fcol != fcol); in Down_Neighbor_Field()
3584 if (field_on_page->frow != frow) in Down_Neighbor_Field()
3588 frow = field_on_page->frow; in Down_Neighbor_Field()
3592 while (field_on_page->frow == frow && field_on_page->fcol < fcol) in Down_Neighbor_Field()
3597 if (field_on_page->frow != frow) in Down_Neighbor_Field()
3604 /*----------------------------------------------------------------------------
3605 Inter-Field Navigation routines
3606 --------------------------------------------------------------------------*/
3608 /*---------------------------------------------------------------------------
3619 | Return Values : E_OK - success
3620 | E_INVALID_FIELD - field is invalid
3621 | some other - error from subordinate call
3622 +--------------------------------------------------------------------------*/
3639 /*---------------------------------------------------------------------------
3645 | Return Values : E_OK - success
3646 | != E_OK - error from subordinate call
3647 +--------------------------------------------------------------------------*/
3653 Next_Field_On_Page(form->current))); in FN_Next_Field()
3656 /*---------------------------------------------------------------------------
3663 | Return Values : E_OK - success
3664 | != E_OK - error from subordinate call
3665 +--------------------------------------------------------------------------*/
3671 Previous_Field_On_Page(form->current))); in FN_Previous_Field()
3674 /*---------------------------------------------------------------------------
3680 | Return Values : E_OK - success
3681 | != E_OK - error from subordinate call
3682 +--------------------------------------------------------------------------*/
3688 Next_Field_On_Page(form->field[form->page[form->curpage].pmax]))); in FN_First_Field()
3691 /*---------------------------------------------------------------------------
3697 | Return Values : E_OK - success
3698 | != E_OK - error from subordinate call
3699 +--------------------------------------------------------------------------*/
3706 Previous_Field_On_Page(form->field[form->page[form->curpage].pmin]))); in FN_Last_Field()
3709 /*---------------------------------------------------------------------------
3716 | Return Values : E_OK - success
3717 | != E_OK - error from subordinate call
3718 +--------------------------------------------------------------------------*/
3724 Sorted_Next_Field(form->current))); in FN_Sorted_Next_Field()
3727 /*---------------------------------------------------------------------------
3734 | Return Values : E_OK - success
3735 | != E_OK - error from subordinate call
3736 +--------------------------------------------------------------------------*/
3742 Sorted_Previous_Field(form->current))); in FN_Sorted_Previous_Field()
3745 /*---------------------------------------------------------------------------
3752 | Return Values : E_OK - success
3753 | != E_OK - error from subordinate call
3754 +--------------------------------------------------------------------------*/
3760 Sorted_Next_Field(form->field[form->page[form->curpage].smax]))); in FN_Sorted_First_Field()
3763 /*---------------------------------------------------------------------------
3770 | Return Values : E_OK - success
3771 | != E_OK - error from subordinate call
3772 +--------------------------------------------------------------------------*/
3778 Sorted_Previous_Field(form->field[form->page[form->curpage].smin]))); in FN_Sorted_Last_Field()
3781 /*---------------------------------------------------------------------------
3788 | Return Values : E_OK - success
3789 | != E_OK - error from subordinate call
3790 +--------------------------------------------------------------------------*/
3796 Left_Neighbor_Field(form->current))); in FN_Left_Field()
3799 /*---------------------------------------------------------------------------
3806 | Return Values : E_OK - success
3807 | != E_OK - error from subordinate call
3808 +--------------------------------------------------------------------------*/
3814 Right_Neighbor_Field(form->current))); in FN_Right_Field()
3817 /*---------------------------------------------------------------------------
3826 | Return Values : E_OK - success
3827 | != E_OK - error from subordinate call
3828 +--------------------------------------------------------------------------*/
3834 Upper_Neighbor_Field(form->current))); in FN_Up_Field()
3837 /*---------------------------------------------------------------------------
3846 | Return Values : E_OK - success
3847 | != E_OK - error from subordinate call
3848 +--------------------------------------------------------------------------*/
3854 Down_Neighbor_Field(form->current))); in FN_Down_Field()
3856 /*----------------------------------------------------------------------------
3858 --------------------------------------------------------------------------*/
3860 /*----------------------------------------------------------------------------
3862 --------------------------------------------------------------------------*/
3864 /*---------------------------------------------------------------------------
3876 | Return Values : E_OK - success
3877 | != E_OK - error from subordinate call
3878 | E_BAD_ARGUMENT - invalid field pointer
3879 | E_SYSTEM_ERROR - some severe basic error
3880 +--------------------------------------------------------------------------*/
3886 if ((form->curpage != page)) in _nc_Set_Form_Page()
3891 form->curpage = (short)page; in _nc_Set_Form_Page()
3892 last_field = field_on_page = form->field[form->page[page].smin]; in _nc_Set_Form_Page()
3895 if ((unsigned)field_on_page->opts & O_VISIBLE) in _nc_Set_Form_Page()
3898 field_on_page = field_on_page->snext; in _nc_Set_Form_Page()
3914 /*---------------------------------------------------------------------------
3923 +--------------------------------------------------------------------------*/
3927 return (form->curpage + 1) % form->maxpage; in Next_Page_Number()
3930 /*---------------------------------------------------------------------------
3939 +--------------------------------------------------------------------------*/
3943 return (form->curpage != 0 ? form->curpage - 1 : form->maxpage - 1); in Previous_Page_Number()
3946 /*----------------------------------------------------------------------------
3948 --------------------------------------------------------------------------*/
3950 /*---------------------------------------------------------------------------
3962 | Return Values : E_OK - success
3963 | E_INVALID_FIELD - field is invalid
3964 | some other - error from subordinate call
3965 +--------------------------------------------------------------------------*/
3984 /*---------------------------------------------------------------------------
3990 | Return Values : E_OK - success
3991 | != E_OK - error from subordinate call
3992 +--------------------------------------------------------------------------*/
4000 /*---------------------------------------------------------------------------
4006 | Return Values : E_OK - success
4007 | != E_OK - error from subordinate call
4008 +--------------------------------------------------------------------------*/
4016 /*---------------------------------------------------------------------------
4022 | Return Values : E_OK - success
4023 | != E_OK - error from subordinate call
4024 +--------------------------------------------------------------------------*/
4032 /*---------------------------------------------------------------------------
4038 | Return Values : E_OK - success
4039 | != E_OK - error from subordinate call
4040 +--------------------------------------------------------------------------*/
4045 returnCode(_nc_Set_Form_Page(form, form->maxpage - 1, (FIELD *)0)); in PN_Last_Page()
4048 /*----------------------------------------------------------------------------
4050 --------------------------------------------------------------------------*/
4052 /*----------------------------------------------------------------------------
4054 --------------------------------------------------------------------------*/
4057 /*---------------------------------------------------------------------------
4064 | Return Values : E_OK - success
4065 | E_REQUEST_DENIED - driver could not process the request
4066 | E_SYSTEM_ERROR -
4067 +--------------------------------------------------------------------------*/
4071 FIELD *field = form->current; in Data_Entry_w()
4089 !(form->status & _FCHECK_REQUIRED) && in Data_Entry_w()
4090 !(form->status & _WINDOW_MODIFIED)) in Data_Entry_w()
4091 werase(form->w); in Data_Entry_w()
4093 if (form->status & _OVLMODE) in Data_Entry_w()
4095 wadd_wch(form->w, &temp_ch); in Data_Entry_w()
4109 wins_wch(form->w, &temp_ch); in Data_Entry_w()
4114 bool End_Of_Field = (((field->drows - 1) == form->currow) && in Data_Entry_w()
4115 ((field->dcols - 1) == form->curcol)); in Data_Entry_w()
4117 form->status |= _WINDOW_MODIFIED; in Data_Entry_w()
4132 if (WINDOW_EXT(form->w, addch_used) == 0) in Data_Entry_w()
4144 /*---------------------------------------------------------------------------
4151 | Return Values : E_OK - success
4152 | E_REQUEST_DENIED - driver could not process the request
4153 | E_SYSTEM_ERROR -
4154 +--------------------------------------------------------------------------*/
4158 FIELD *field = form->current; in Data_Entry()
4170 !(form->status & _FCHECK_REQUIRED) && in Data_Entry()
4171 !(form->status & _WINDOW_MODIFIED)) in Data_Entry()
4172 werase(form->w); in Data_Entry()
4174 if (form->status & _OVLMODE) in Data_Entry()
4176 waddch(form->w, (chtype)c); in Data_Entry()
4190 winsch(form->w, (chtype)c); in Data_Entry()
4195 bool End_Of_Field = (((field->drows - 1) == form->currow) && in Data_Entry()
4196 ((field->dcols - 1) == form->curcol)); in Data_Entry()
4199 move_after_insert = !!(form->curcol in Data_Entry()
4200 - form->begincol in Data_Entry()
4201 - field->cols in Data_Entry()
4220 if (WINDOW_EXT(form->w, addch_used) == 0) in Data_Entry()
4251 /* You may see this is the class-id of the request type class */
4253 #define ID_FN (0x00010000) /* Inter-Field navigation */
4254 #define ID_IFN (0x00020000) /* Intra-Field navigation */
4266 /* *INDENT-OFF* */
4267 static const Binding_Info bindings[MAX_FORM_COMMAND - MIN_FORM_COMMAND + 1] =
4335 /* *INDENT-ON* */
4337 /*---------------------------------------------------------------------------
4352 | Return Values : E_OK - success
4353 | E_SYSTEM_ERROR - system error
4354 | E_BAD_ARGUMENT - an argument is incorrect
4355 | E_NOT_POSTED - form is not posted
4356 | E_INVALID_FIELD - field contents are invalid
4357 | E_BAD_STATE - called from inside a hook routine
4358 | E_REQUEST_DENIED - request failed
4359 | E_NOT_CONNECTED - no fields are connected to the form
4360 | E_UNKNOWN_COMMAND - command not known
4361 +--------------------------------------------------------------------------*/
4375 if (!(form->field) || !(form->current)) in form_driver()
4378 assert(form->page); in form_driver()
4382 form->current = _nc_First_Active_Field(form); in form_driver()
4386 assert(form->current && in form_driver()
4387 form->current->buf && in form_driver()
4388 (form->current->form == form) in form_driver()
4391 if (form->status & _IN_DRIVER) in form_driver()
4394 if (!(form->status & _POSTED)) in form_driver()
4398 ((bindings[c - MIN_FORM_COMMAND].keycode & Key_Mask) == c)) in form_driver()
4401 BI = &(bindings[c - MIN_FORM_COMMAND]); in form_driver()
4411 NULL, /* Intra-Field is generic */ in form_driver()
4412 Vertical_Scrolling, /* Overloaded to check multi-line */ in form_driver()
4413 Horizontal_Scrolling, /* Overloaded to check single-line */ in form_driver()
4420 size_t method = (size_t)((BI->keycode >> ID_Shft) & 0xffff); /* see ID_Mask */ in form_driver()
4422 if ((method >= nMethods) || !(BI->cmd)) in form_driver()
4430 res = fct(BI->cmd, form); in form_driver()
4434 res = (BI->cmd) (form); in form_driver()
4442 WINDOW *win = form->win ? form->win : StdScreen(Get_Form_Screen(form)); in form_driver()
4443 WINDOW *sub = form->sub ? form->sub : win; in form_driver()
4458 if (ry < sub->_begy) in form_driver()
4469 else if (ry > sub->_begy + sub->_maxy) in form_driver()
4486 int min_field = form->page[form->curpage].pmin; in form_driver()
4487 int max_field = form->page[form->curpage].pmax; in form_driver()
4492 FIELD *field = form->field[i]; in form_driver()
4517 * If we're using 8-bit characters, iscntrl+isprint cover the whole set. in form_driver()
4522 * FIXME: the wide-character branch should also use Check_Char(). in form_driver()
4528 Check_Char(form, form->current, form->current->type, c, in form_driver()
4529 (TypeArgument *)(form->current->arg))) in form_driver()
4538 /*---------------------------------------------------------------------------
4558 | Return Values : E_OK - success
4559 | E_SYSTEM_ERROR - system error
4560 | E_BAD_ARGUMENT - an argument is incorrect
4561 | E_NOT_POSTED - form is not posted
4562 | E_INVALID_FIELD - field contents are invalid
4563 | E_BAD_STATE - called from inside a hook routine
4564 | E_REQUEST_DENIED - request failed
4565 | E_NOT_CONNECTED - no fields are connected to the form
4566 | E_UNKNOWN_COMMAND - command not known
4567 +--------------------------------------------------------------------------*/
4579 if (!(form->field)) in form_driver_w()
4582 assert(form->page); in form_driver_w()
4586 form->current = _nc_First_Active_Field(form); in form_driver_w()
4590 assert(form->current && in form_driver_w()
4591 form->current->buf && in form_driver_w()
4592 (form->current->form == form) in form_driver_w()
4595 if (form->status & _IN_DRIVER) in form_driver_w()
4598 if (!(form->status & _POSTED)) in form_driver_w()
4605 ((bindings[c - MIN_FORM_COMMAND].keycode & Key_Mask) == c)) in form_driver_w()
4606 BI = &(bindings[c - MIN_FORM_COMMAND]); in form_driver_w()
4616 NULL, /* Intra-Field is generic */ in form_driver_w()
4617 Vertical_Scrolling, /* Overloaded to check multi-line */ in form_driver_w()
4618 Horizontal_Scrolling, /* Overloaded to check single-line */ in form_driver_w()
4625 size_t method = (size_t)(BI->keycode >> ID_Shft) & 0xffff; /* see ID_Mask */ in form_driver_w()
4627 if ((method >= nMethods) || !(BI->cmd)) in form_driver_w()
4634 res = fct(BI->cmd, form); in form_driver_w()
4636 res = (BI->cmd) (form); in form_driver_w()
4643 WINDOW *win = form->win ? form->win : StdScreen(Get_Form_Screen(form)); in form_driver_w()
4644 WINDOW *sub = form->sub ? form->sub : win; in form_driver_w()
4659 if (ry < sub->_begy) in form_driver_w()
4670 else if (ry > sub->_begy + sub->_maxy) in form_driver_w()
4687 int min_field = form->page[form->curpage].pmin; in form_driver_w()
4688 int max_field = form->page[form->curpage].pmax; in form_driver_w()
4693 FIELD *field = form->field[i]; in form_driver_w()
4725 /*----------------------------------------------------------------------------
4726 Field-Buffer manipulation routines.
4727 The effects of setting a buffer are tightly coupled to the core of the form
4730 --------------------------------------------------------------------------*/
4732 /*---------------------------------------------------------------------------
4745 | Return Values : E_OK - success
4746 | E_BAD_ARGUMENT - invalid argument
4747 | E_SYSTEM_ERROR - system error
4748 +--------------------------------------------------------------------------*/
4763 if (!field || !value || ((buffer < 0) || (buffer > field->nbuf))) in set_field_buffer()
4778 (int)(1 + (vlen - len) / ((field->rows + field->nrow) in set_field_buffer()
4779 * field->cols)))) in set_field_buffer()
4797 if (wresize(field->working, 1, Buffer_Length(field) + 1) == ERR) in set_field_buffer()
4800 delwin(field->working); in set_field_buffer()
4801 field->working = newpad(1, Buffer_Length(field) + 1); in set_field_buffer()
4804 wclear(field->working); in set_field_buffer()
4805 (void)mvwaddstr(field->working, 0, 0, value); in set_field_buffer()
4813 for (i = 0; i < field->drows; ++i) in set_field_buffer()
4815 (void)mvwin_wchnstr(field->working, 0, (int)i * field->dcols, in set_field_buffer()
4816 widevalue + ((int)i * field->dcols), in set_field_buffer()
4817 field->dcols); in set_field_buffer()
4858 /*---------------------------------------------------------------------------
4865 +--------------------------------------------------------------------------*/
4873 if (field && (buffer >= 0) && (buffer <= field->nbuf)) in field_buffer()
4897 if (field->expanded[buffer] != 0) in field_buffer()
4898 free(field->expanded[buffer]); in field_buffer()
4899 field->expanded[buffer] = typeMalloc(char, need + 1); in field_buffer()
4904 * It may also be multi-column data. In that case, the data for a row in field_buffer()
4905 * may be null-padded to align to the dcols/drows layout (or it may in field_buffer()
4906 * contain embedded wide-character extensions). Change the null-padding in field_buffer()
4909 if ((result = field->expanded[buffer]) != 0) in field_buffer()
4911 wclear(field->working); in field_buffer()
4912 wmove(field->working, 0, 0); in field_buffer()
4916 wadd_wch(field->working, &data[n]); in field_buffer()
4918 wmove(field->working, 0, 0); in field_buffer()
4919 winnstr(field->working, result, (int)need); in field_buffer()
4930 /*---------------------------------------------------------------------------
4931 | Convert a multibyte string to a wide-character string. The result must be
4933 +--------------------------------------------------------------------------*/
4957 for (tries = 1, status = 0; tries <= (given - passed); ++tries) in _nc_Widen_String()