Lines Matching full:form

34 #include "form.priv.h"
39 This is the core module of the form library. It contains the majority
51 The current page of the form is left and some new page is
54 The current field of the form is left and some new field is
84 our form implementation. This doesn't affect the API, so we feel it is
117 static int Inter_Field_Navigation(int (*const fct) (FORM *), FORM *form);
118 static int FN_Next_Field(FORM *form);
119 static int FN_Previous_Field(FORM *form);
120 static int FE_New_Line(FORM *);
121 static int FE_Delete_Previous(FORM *);
146 /* Calculate the start address of the row in the form's current field
148 #define Address_Of_Current_Row_In_Nth_Buffer(form,N) \ argument
149 Address_Of_Row_In_Nth_Buffer((form)->current,N,(form)->currow)
151 /* Calculate the start address of the row in the form's current field
153 #define Address_Of_Current_Row_In_Buffer(form) \ argument
154 Address_Of_Current_Row_In_Nth_Buffer(form,0)
156 /* Calculate the address of the cursor in the form's current field
158 #define Address_Of_Current_Position_In_Nth_Buffer(form,N) \ argument
159 (Address_Of_Current_Row_In_Nth_Buffer(form,N) + (form)->curcol)
161 /* Calculate the address of the cursor in the form's current field
163 #define Address_Of_Current_Position_In_Buffer(form) \ argument
164 Address_Of_Current_Position_In_Nth_Buffer(form,0)
195 /* Logic to decide whether or not a field really appears on the form */
197 ((field->form) &&\
198 (field->form->status & _POSTED) &&\
200 (field->page == field->form->curpage))
204 #define First_Position_In_Current_Field(form) \ argument
205 (((form)->currow==0) && ((form)->curcol==0))
218 check_pos(FORM *form, int lineno) in check_pos() argument
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()
234 #define CHECKPOS(form) check_pos(form, __LINE__) argument
236 #define CHECKPOS(form) /* nothing */ argument
359 delete_char(FORM *form) in delete_char() argument
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()
367 wdelch(form->w); in delete_char()
370 #define DeleteChar(form) delete_char(form) argument
372 #define DeleteChar(form) \ argument
373 wmove((form)->w, (form)->currow, (form)->curcol), \
374 wdelch((form)->w)
464 N.B.: This only works if form->curcol follows immediately form->currow
472 | FORM * form, const char * pos)
474 | Description : Set current row and column of the form to values
480 Adjust_Cursor_Position(FORM *form, const FIELD_CELL *pos) in Adjust_Cursor_Position() argument
485 field = form->current; 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()
554 _nc_get_fieldbuffer(FORM *form, FIELD *field, FIELD_CELL *buf) in _nc_get_fieldbuffer() argument
562 assert(form && field && buf); in _nc_get_fieldbuffer()
564 win = form->w; in _nc_get_fieldbuffer()
598 | FORM * form,
609 Window_To_Buffer(FORM *form, FIELD *field) in Window_To_Buffer() argument
611 _nc_get_fieldbuffer(form, field, field->buf); in Window_To_Buffer()
616 | Function : static void Synchronize_Buffer(FORM * form)
626 Synchronize_Buffer(FORM *form) in Synchronize_Buffer() argument
628 if (form->status & _WINDOW_MODIFIED) in Synchronize_Buffer()
630 ClrStatus(form, _WINDOW_MODIFIED); in Synchronize_Buffer()
631 SetStatus(form, _FCHECK_REQUIRED); in Synchronize_Buffer()
632 Window_To_Buffer(form, form->current); in Synchronize_Buffer()
633 wmove(form->w, form->currow, form->curcol); in Synchronize_Buffer()
667 FORM *form = field->form; in Field_Grown() local
668 bool need_visual_update = ((form != (FORM *)0) && in Field_Grown()
669 (form->status & _POSTED) && in Field_Grown()
670 (form->current == field)); in Field_Grown()
673 Synchronize_Buffer(form); in Field_Grown()
739 assert(form != (FORM *)0); 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()
797 | E_BAD_ARGUMENT - invalid form pointer
798 | E_SYSTEM_ERROR - form has no current field or
819 | Function : int _nc_Position_Form_Cursor(FORM * form)
826 | E_BAD_ARGUMENT - invalid form pointer
827 | E_SYSTEM_ERROR - form has no current field or
831 _nc_Position_Form_Cursor(FORM *form) in _nc_Position_Form_Cursor() argument
836 if (!form) in _nc_Position_Form_Cursor()
839 if (!form->w || !form->current) in _nc_Position_Form_Cursor()
842 field = form->current; in _nc_Position_Form_Cursor()
843 formwin = Get_Form_Window(form); 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()
862 | Function : int _nc_Refresh_Current_Field(FORM * form)
865 | window of the form.
868 | E_BAD_ARGUMENT - invalid form pointer
873 _nc_Refresh_Current_Field(FORM *form) in _nc_Refresh_Current_Field() argument
879 T((T_CALLED("_nc_Refresh_Current_Field(%p)"), (void *)form)); in _nc_Refresh_Current_Field()
881 if (!form) in _nc_Refresh_Current_Field()
884 if (!form->w || !form->current) in _nc_Refresh_Current_Field()
887 field = form->current; in _nc_Refresh_Current_Field()
888 formwin = Get_Form_Window(form); 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()
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()
940 first_modified_row = form->toprow; 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()
970 copywin(form->w, in _nc_Refresh_Current_Field()
974 field->frow + first_modified_row - form->toprow, in _nc_Refresh_Current_Field()
976 field->frow + first_unmodified_row - form->toprow - 1, in _nc_Refresh_Current_Field()
989 wsyncup(form->w); in _nc_Refresh_Current_Field()
991 untouchwin(form->w); in _nc_Refresh_Current_Field()
992 returnCode(_nc_Position_Form_Cursor(form)); in _nc_Refresh_Current_Field()
1078 | Function : static bool Check_Char(FORM *form,
1091 Check_Char(FORM *form, in Check_Char() argument
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()
1112 return typ->charcheck.gccheck(ch, form, field, (void *)argp); in Check_Char()
1147 fwin = Get_Form_Window(field->form); in Display_Or_Erase_Field()
1200 FORM *form; in Synchronize_Field() local
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()
1220 res = _nc_Refresh_Current_Field(form); in Synchronize_Field()
1281 FORM *form; in _nc_Synchronize_Attributes() local
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()
1295 Synchronize_Buffer(form); 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()
1309 WINDOW *formwin = Get_Form_Window(form); in _nc_Synchronize_Attributes()
1311 copywin(form->w, formwin, in _nc_Synchronize_Attributes()
1317 Buffer_To_Window(field, form->w); in _nc_Synchronize_Attributes()
1319 _nc_Refresh_Current_Field(form); in _nc_Synchronize_Attributes()
1327 CHECKPOS(form); in _nc_Synchronize_Attributes()
1350 FORM *form; in _nc_Synchronize_Options() local
1361 form = field->form; in _nc_Synchronize_Options()
1363 if (form) in _nc_Synchronize_Options()
1365 if (form->status & _POSTED) in _nc_Synchronize_Options()
1367 if (form->current == field) in _nc_Synchronize_Options()
1372 if (form->curpage == field->page) in _nc_Synchronize_Options()
1436 * Removes the focus from the current field of the form.
1439 _nc_Unset_Current_Field(FORM *form) in _nc_Unset_Current_Field() argument
1441 FIELD *field = form->current; in _nc_Unset_Current_Field()
1443 _nc_Refresh_Current_Field(form); in _nc_Unset_Current_Field()
1448 if (form->toprow == 0) in _nc_Unset_Current_Field()
1457 Window_To_Buffer(form, field); 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()
1464 Get_Form_Window(form), in _nc_Unset_Current_Field()
1472 wsyncup(Get_Form_Window(form)); 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()
1488 | Function : int _nc_Set_Current_Field(FORM * form,
1494 | E_BAD_ARGUMENT - invalid form or field pointer
1496 | E_NOT_CONNECTED - no fields are connected to the form
1499 _nc_Set_Current_Field(FORM *form, FIELD *newfield) in _nc_Set_Current_Field() argument
1504 T((T_CALLED("_nc_Set_Current_Field(%p,%p)"), (void *)form, (void *)newfield)); in _nc_Set_Current_Field()
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()
1523 _nc_Unset_Current_Field(form); in _nc_Set_Current_Field()
1530 new_window = derwin(Get_Form_Window(form), 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()
1542 ClrStatus(form, _WINDOW_MODIFIED); 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()
1573 | Function : static int IFN_Next_Character(FORM * form)
1582 IFN_Next_Character(FORM *form) in IFN_Next_Character() argument
1584 FIELD *field = form->current; in IFN_Next_Character()
1585 int step = myWCWIDTH(form->w, form->currow, form->curcol); in IFN_Next_Character()
1587 T((T_CALLED("IFN_Next_Character(%p)"), (void *)form)); 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()
1614 | Function : static int IFN_Previous_Character(FORM * form)
1624 IFN_Previous_Character(FORM *form) in IFN_Previous_Character() argument
1626 int amount = myWCWIDTH(form->w, form->currow, form->curcol - 1); in IFN_Previous_Character()
1627 int oldcol = form->curcol; in IFN_Previous_Character()
1629 T((T_CALLED("IFN_Previous_Character(%p)"), (void *)form)); 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()
1645 | Function : static int IFN_Next_Line(FORM * form)
1653 IFN_Next_Line(FORM *form) in IFN_Next_Line() argument
1655 FIELD *field = form->current; in IFN_Next_Line()
1657 T((T_CALLED("IFN_Next_Line(%p)"), (void *)form)); 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()
1673 | Function : static int IFN_Previous_Line(FORM * form)
1681 IFN_Previous_Line(FORM *form) in IFN_Previous_Line() argument
1683 T((T_CALLED("IFN_Previous_Line(%p)"), (void *)form)); in IFN_Previous_Line()
1684 if ((--(form->currow)) < 0) in IFN_Previous_Line()
1686 form->currow++; in IFN_Previous_Line()
1689 form->curcol = 0; in IFN_Previous_Line()
1695 | Function : static int IFN_Next_Word(FORM * form)
1703 IFN_Next_Word(FORM *form) in IFN_Next_Word() argument
1705 FIELD *field = form->current; in IFN_Next_Word()
1706 FIELD_CELL *bp = Address_Of_Current_Position_In_Buffer(form); in IFN_Next_Word()
1710 T((T_CALLED("IFN_Next_Word(%p)"), (void *)form)); in IFN_Next_Word()
1713 Synchronize_Buffer(form); in IFN_Next_Word()
1730 Adjust_Cursor_Position(form, t); in IFN_Next_Word()
1737 | Function : static int IFN_Previous_Word(FORM * form)
1745 IFN_Previous_Word(FORM *form) in IFN_Previous_Word() argument
1747 FIELD *field = form->current; in IFN_Previous_Word()
1748 FIELD_CELL *bp = Address_Of_Current_Position_In_Buffer(form); in IFN_Previous_Word()
1753 T((T_CALLED("IFN_Previous_Word(%p)"), (void *)form)); in IFN_Previous_Word()
1756 Synchronize_Buffer(form); in IFN_Previous_Word()
1785 Adjust_Cursor_Position(form, t); in IFN_Previous_Word()
1791 | Function : static int IFN_Beginning_Of_Field(FORM * form)
1799 IFN_Beginning_Of_Field(FORM *form) in IFN_Beginning_Of_Field() argument
1801 FIELD *field = form->current; in IFN_Beginning_Of_Field()
1803 T((T_CALLED("IFN_Beginning_Of_Field(%p)"), (void *)form)); in IFN_Beginning_Of_Field()
1804 Synchronize_Buffer(form); in IFN_Beginning_Of_Field()
1805 Adjust_Cursor_Position(form, in IFN_Beginning_Of_Field()
1812 | Function : static int IFN_End_Of_Field(FORM * form)
1822 IFN_End_Of_Field(FORM *form) in IFN_End_Of_Field() argument
1824 FIELD *field = form->current; in IFN_End_Of_Field()
1827 T((T_CALLED("IFN_End_Of_Field(%p)"), (void *)form)); in IFN_End_Of_Field()
1828 Synchronize_Buffer(form); in IFN_End_Of_Field()
1832 Adjust_Cursor_Position(form, pos); in IFN_End_Of_Field()
1838 | Function : static int IFN_Beginning_Of_Line(FORM * form)
1846 IFN_Beginning_Of_Line(FORM *form) in IFN_Beginning_Of_Line() argument
1848 FIELD *field = form->current; in IFN_Beginning_Of_Line()
1850 T((T_CALLED("IFN_Beginning_Of_Line(%p)"), (void *)form)); in IFN_Beginning_Of_Line()
1851 Synchronize_Buffer(form); in IFN_Beginning_Of_Line()
1852 Adjust_Cursor_Position(form, in IFN_Beginning_Of_Line()
1853 Get_Start_Of_Data(Address_Of_Current_Row_In_Buffer(form), in IFN_Beginning_Of_Line()
1860 | Function : static int IFN_End_Of_Line(FORM * form)
1870 IFN_End_Of_Line(FORM *form) in IFN_End_Of_Line() argument
1872 FIELD *field = form->current; in IFN_End_Of_Line()
1876 T((T_CALLED("IFN_End_Of_Line(%p)"), (void *)form)); in IFN_End_Of_Line()
1877 Synchronize_Buffer(form); in IFN_End_Of_Line()
1878 bp = Address_Of_Current_Row_In_Buffer(form); in IFN_End_Of_Line()
1882 Adjust_Cursor_Position(form, pos); in IFN_End_Of_Line()
1888 | Function : static int IFN_Left_Character(FORM * form)
1897 IFN_Left_Character(FORM *form) in IFN_Left_Character() argument
1899 int amount = myWCWIDTH(form->w, form->currow, form->curcol - 1); in IFN_Left_Character()
1900 int oldcol = form->curcol; in IFN_Left_Character()
1902 T((T_CALLED("IFN_Left_Character(%p)"), (void *)form)); in IFN_Left_Character()
1903 if ((form->curcol -= amount) < 0) in IFN_Left_Character()
1905 form->curcol = oldcol; in IFN_Left_Character()
1913 | Function : static int IFN_Right_Character(FORM * form)
1922 IFN_Right_Character(FORM *form) in IFN_Right_Character() argument
1924 int amount = myWCWIDTH(form->w, form->currow, form->curcol); in IFN_Right_Character()
1925 int oldcol = form->curcol; in IFN_Right_Character()
1927 T((T_CALLED("IFN_Right_Character(%p)"), (void *)form)); 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()
1944 | Function : static int IFN_Up_Character(FORM * form)
1953 IFN_Up_Character(FORM *form) in IFN_Up_Character() argument
1955 T((T_CALLED("IFN_Up_Character(%p)"), (void *)form)); in IFN_Up_Character()
1956 if ((--(form->currow)) < 0) in IFN_Up_Character()
1958 form->currow++; in IFN_Up_Character()
1966 | Function : static int IFN_Down_Character(FORM * form)
1975 IFN_Down_Character(FORM *form) in IFN_Down_Character() argument
1977 FIELD *field = form->current; in IFN_Down_Character()
1979 T((T_CALLED("IFN_Down_Character(%p)"), (void *)form)); in IFN_Down_Character()
1980 if ((++(form->currow)) == field->drows) in IFN_Down_Character()
1986 --(form->currow); in IFN_Down_Character()
2001 | Function : static int VSC_Generic(FORM *form, int nlines)
2010 VSC_Generic(FORM *form, int nlines) in VSC_Generic() argument
2012 FIELD *field = form->current; 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()
2053 | int (* const fct) (FORM *),
2054 | FORM * form)
2063 Vertical_Scrolling(int (*const fct) (FORM *), FORM *form) in Vertical_Scrolling() argument
2067 if (!Single_Line_Field(form->current)) in Vertical_Scrolling()
2069 res = fct(form); in Vertical_Scrolling()
2071 SetStatus(form->current, _NEWTOP); in Vertical_Scrolling()
2078 | Function : static int VSC_Scroll_Line_Forward(FORM * form)
2086 VSC_Scroll_Line_Forward(FORM *form) in VSC_Scroll_Line_Forward() argument
2088 T((T_CALLED("VSC_Scroll_Line_Forward(%p)"), (void *)form)); in VSC_Scroll_Line_Forward()
2089 returnCode(VSC_Generic(form, 1)); in VSC_Scroll_Line_Forward()
2094 | Function : static int VSC_Scroll_Line_Backward(FORM * form)
2102 VSC_Scroll_Line_Backward(FORM *form) in VSC_Scroll_Line_Backward() argument
2104 T((T_CALLED("VSC_Scroll_Line_Backward(%p)"), (void *)form)); in VSC_Scroll_Line_Backward()
2105 returnCode(VSC_Generic(form, -1)); in VSC_Scroll_Line_Backward()
2110 | Function : static int VSC_Scroll_Page_Forward(FORM * form)
2118 VSC_Scroll_Page_Forward(FORM *form) in VSC_Scroll_Page_Forward() argument
2120 T((T_CALLED("VSC_Scroll_Page_Forward(%p)"), (void *)form)); in VSC_Scroll_Page_Forward()
2121 returnCode(VSC_Generic(form, form->current->rows)); in VSC_Scroll_Page_Forward()
2126 | Function : static int VSC_Scroll_Half_Page_Forward(FORM * form)
2134 VSC_Scroll_Half_Page_Forward(FORM *form) in VSC_Scroll_Half_Page_Forward() argument
2136 T((T_CALLED("VSC_Scroll_Half_Page_Forward(%p)"), (void *)form)); in VSC_Scroll_Half_Page_Forward()
2137 returnCode(VSC_Generic(form, (form->current->rows + 1) / 2)); in VSC_Scroll_Half_Page_Forward()
2142 | Function : static int VSC_Scroll_Page_Backward(FORM * form)
2150 VSC_Scroll_Page_Backward(FORM *form) in VSC_Scroll_Page_Backward() argument
2152 T((T_CALLED("VSC_Scroll_Page_Backward(%p)"), (void *)form)); in VSC_Scroll_Page_Backward()
2153 returnCode(VSC_Generic(form, -(form->current->rows))); in VSC_Scroll_Page_Backward()
2158 | Function : static int VSC_Scroll_Half_Page_Backward(FORM * form)
2166 VSC_Scroll_Half_Page_Backward(FORM *form) in VSC_Scroll_Half_Page_Backward() argument
2168 T((T_CALLED("VSC_Scroll_Half_Page_Backward(%p)"), (void *)form)); in VSC_Scroll_Half_Page_Backward()
2169 returnCode(VSC_Generic(form, -((form->current->rows + 1) / 2))); in VSC_Scroll_Half_Page_Backward()
2181 | Function : static int HSC_Generic(FORM *form, int ncolumns)
2190 HSC_Generic(FORM *form, int ncolumns) in HSC_Generic() argument
2192 FIELD *field = form->current; 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()
2233 | int (* const fct) (FORM *),
2234 | FORM * form)
2242 Horizontal_Scrolling(int (*const fct) (FORM *), FORM *form) in Horizontal_Scrolling() argument
2244 if (Single_Line_Field(form->current)) in Horizontal_Scrolling()
2245 return fct(form); in Horizontal_Scrolling()
2252 | Function : static int HSC_Scroll_Char_Forward(FORM * form)
2260 HSC_Scroll_Char_Forward(FORM *form) in HSC_Scroll_Char_Forward() argument
2262 T((T_CALLED("HSC_Scroll_Char_Forward(%p)"), (void *)form)); in HSC_Scroll_Char_Forward()
2263 returnCode(HSC_Generic(form, 1)); in HSC_Scroll_Char_Forward()
2268 | Function : static int HSC_Scroll_Char_Backward(FORM * form)
2276 HSC_Scroll_Char_Backward(FORM *form) in HSC_Scroll_Char_Backward() argument
2278 T((T_CALLED("HSC_Scroll_Char_Backward(%p)"), (void *)form)); in HSC_Scroll_Char_Backward()
2279 returnCode(HSC_Generic(form, -1)); in HSC_Scroll_Char_Backward()
2284 | Function : static int HSC_Horizontal_Line_Forward(FORM* form)
2292 HSC_Horizontal_Line_Forward(FORM *form) in HSC_Horizontal_Line_Forward() argument
2294 T((T_CALLED("HSC_Horizontal_Line_Forward(%p)"), (void *)form)); in HSC_Horizontal_Line_Forward()
2295 returnCode(HSC_Generic(form, form->current->cols)); in HSC_Horizontal_Line_Forward()
2300 | Function : static int HSC_Horizontal_Half_Line_Forward(FORM* form)
2308 HSC_Horizontal_Half_Line_Forward(FORM *form) in HSC_Horizontal_Half_Line_Forward() argument
2310 T((T_CALLED("HSC_Horizontal_Half_Line_Forward(%p)"), (void *)form)); in HSC_Horizontal_Half_Line_Forward()
2311 returnCode(HSC_Generic(form, (form->current->cols + 1) / 2)); in HSC_Horizontal_Half_Line_Forward()
2316 | Function : static int HSC_Horizontal_Line_Backward(FORM* form)
2324 HSC_Horizontal_Line_Backward(FORM *form) in HSC_Horizontal_Line_Backward() argument
2326 T((T_CALLED("HSC_Horizontal_Line_Backward(%p)"), (void *)form)); in HSC_Horizontal_Line_Backward()
2327 returnCode(HSC_Generic(form, -(form->current->cols))); in HSC_Horizontal_Line_Backward()
2332 | Function : static int HSC_Horizontal_Half_Line_Backward(FORM* form)
2340 HSC_Horizontal_Half_Line_Backward(FORM *form) in HSC_Horizontal_Half_Line_Backward() argument
2342 T((T_CALLED("HSC_Horizontal_Half_Line_Backward(%p)"), (void *)form)); in HSC_Horizontal_Half_Line_Backward()
2343 returnCode(HSC_Generic(form, -((form->current->cols + 1) / 2))); in HSC_Horizontal_Half_Line_Backward()
2356 | Function : static bool Is_There_Room_For_A_Line(FORM * form)
2365 Is_There_Room_For_A_Line(FORM *form) in Is_There_Room_For_A_Line() argument
2367 FIELD *field = form->current; in Is_There_Room_For_A_Line()
2370 Synchronize_Buffer(form); in Is_There_Room_For_A_Line()
2378 | Function : static bool Is_There_Room_For_A_Char_In_Line(FORM * form)
2387 Is_There_Room_For_A_Char_In_Line(FORM *form) in Is_There_Room_For_A_Char_In_Line() argument
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()
2404 | FORM * form,
2410 | into the 'row' of the 'form'. The insertion occurs
2422 Insert_String(FORM *form, int row, FIELD_CELL *txt, int len) in Insert_String() argument
2424 FIELD *field = form->current; 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()
2467 if ((result = Insert_String(form, row + 1, split, freelen)) == E_OK) 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()
2485 | FORM * form)
2498 Wrapping_Not_Necessary_Or_Wrapping_Ok(FORM *form) in Wrapping_Not_Necessary_Or_Wrapping_Ok() argument
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()
2506 (There_Is_No_Room_For_A_Char_In_Line(form)) && /* line is full */ in Wrapping_Not_Necessary_Or_Wrapping_Ok()
2521 bp = Address_Of_Current_Row_In_Buffer(form); in Wrapping_Not_Necessary_Or_Wrapping_Ok()
2522 Window_To_Buffer(form, field); 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()
2547 DeleteChar(form); in Wrapping_Not_Necessary_Or_Wrapping_Ok()
2548 Window_To_Buffer(form, field); in Wrapping_Not_Necessary_Or_Wrapping_Ok()
2564 | int (* const fct) (FORM *),
2565 | FORM * form)
2576 Field_Editing(int (*const fct) (FORM *), FORM *form) in Field_Editing() argument
2587 ((unsigned)form->opts & O_BS_OVERLOAD) && in Field_Editing()
2588 First_Position_In_Current_Field(form)) in Field_Editing()
2590 res = Inter_Field_Navigation(FN_Previous_Field, form); in Field_Editing()
2596 if (((unsigned)form->opts & O_NL_OVERLOAD) && in Field_Editing()
2597 First_Position_In_Current_Field(form)) in Field_Editing()
2599 res = Inter_Field_Navigation(FN_Next_Field, form); in Field_Editing()
2603 res = fct(form); in Field_Editing()
2608 if ((unsigned)form->current->opts & O_EDIT) in Field_Editing()
2610 res = fct(form); in Field_Editing()
2612 SetStatus(form, _WINDOW_MODIFIED); in Field_Editing()
2621 | Function : static int FE_New_Line(FORM * form)
2633 FE_New_Line(FORM *form) in FE_New_Line() argument
2635 FIELD *field = form->current; in FE_New_Line()
2637 bool Last_Row = ((field->drows - 1) == form->currow); in FE_New_Line()
2639 T((T_CALLED("FE_New_Line(%p)"), (void *)form)); 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()
2651 that FN_Next_Field may fail, but the form is in FE_New_Line()
2653 SetStatus(form, _WINDOW_MODIFIED); in FE_New_Line()
2654 returnCode(Inter_Field_Navigation(FN_Next_Field, form)); 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()
2669 SetStatus(form, _WINDOW_MODIFIED); in FE_New_Line()
2679 if (!((unsigned)form->opts & O_NL_OVERLOAD)) in FE_New_Line()
2681 returnCode(Inter_Field_Navigation(FN_Next_Field, form)); in FE_New_Line()
2685 bool May_Do_It = !Last_Row && Is_There_Room_For_A_Line(form); in FE_New_Line()
2692 bp = Address_Of_Current_Position_In_Buffer(form); 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()
2701 SetStatus(form, _WINDOW_MODIFIED); in FE_New_Line()
2709 | Function : static int FE_Insert_Character(FORM * form)
2717 FE_Insert_Character(FORM *form) in FE_Insert_Character() argument
2719 FIELD *field = form->current; in FE_Insert_Character()
2722 T((T_CALLED("FE_Insert_Character(%p)"), (void *)form)); in FE_Insert_Character()
2723 if (Check_Char(form, field, field->type, (int)C_BLANK, in FE_Insert_Character()
2726 bool There_Is_Room = Is_There_Room_For_A_Char_In_Line(form); in FE_Insert_Character()
2735 winsch(form->w, (chtype)C_BLANK); in FE_Insert_Character()
2736 result = Wrapping_Not_Necessary_Or_Wrapping_Ok(form); in FE_Insert_Character()
2745 | Function : static int FE_Insert_Line(FORM * form)
2753 FE_Insert_Line(FORM *form) in FE_Insert_Line() argument
2755 FIELD *field = form->current; in FE_Insert_Line()
2758 T((T_CALLED("FE_Insert_Line(%p)"), (void *)form)); in FE_Insert_Line()
2759 if (Check_Char(form, field, in FE_Insert_Line()
2762 bool Maybe_Done = (form->currow != (field->drows - 1)) && in FE_Insert_Line()
2763 Is_There_Room_For_A_Line(form); in FE_Insert_Line()
2772 form->curcol = 0; in FE_Insert_Line()
2773 winsertln(form->w); in FE_Insert_Line()
2783 | Function : static int FE_Delete_Character(FORM * form)
2790 FE_Delete_Character(FORM *form) in FE_Delete_Character() argument
2792 T((T_CALLED("FE_Delete_Character(%p)"), (void *)form)); in FE_Delete_Character()
2793 DeleteChar(form); in FE_Delete_Character()
2799 | Function : static int FE_Delete_Previous(FORM * form)
2811 FE_Delete_Previous(FORM *form) in FE_Delete_Previous() argument
2813 FIELD *field = form->current; in FE_Delete_Previous()
2815 T((T_CALLED("FE_Delete_Previous(%p)"), (void *)form)); in FE_Delete_Previous()
2816 if (First_Position_In_Current_Field(form)) 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()
2830 Synchronize_Buffer(form); in FE_Delete_Previous()
2836 wmove(form->w, form->currow, form->curcol); in FE_Delete_Previous()
2837 wdeleteln(form->w); in FE_Delete_Previous()
2838 Adjust_Cursor_Position(form, prev_end); in FE_Delete_Previous()
2843 * multi-line form, we absorb one keystroke for the wrapping point. That in FE_Delete_Previous()
2850 * cursor past the end of the form field. In this case, just delete the 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()
2857 DeleteChar(form); 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()
2867 DeleteChar(form); in FE_Delete_Previous()
2874 | Function : static int FE_Delete_Line(FORM * form)
2881 FE_Delete_Line(FORM *form) in FE_Delete_Line() argument
2883 T((T_CALLED("FE_Delete_Line(%p)"), (void *)form)); in FE_Delete_Line()
2884 form->curcol = 0; in FE_Delete_Line()
2885 wdeleteln(form->w); in FE_Delete_Line()
2891 | Function : static int FE_Delete_Word(FORM * form)
2899 FE_Delete_Word(FORM *form) in FE_Delete_Word() argument
2901 FIELD *field = form->current; in FE_Delete_Word()
2902 FIELD_CELL *bp = Address_Of_Current_Row_In_Buffer(form); in FE_Delete_Word()
2904 FIELD_CELL *cp = bp + form->curcol; in FE_Delete_Word()
2907 T((T_CALLED("FE_Delete_Word(%p)"), (void *)form)); in FE_Delete_Word()
2908 Synchronize_Buffer(form); in FE_Delete_Word()
2913 Adjust_Cursor_Position(form, 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()
2925 myADDNSTR(form->w, s, (int)(s - After_End_Of_Data(s, (int)(ep - s)))); in FE_Delete_Word()
2932 | Function : static int FE_Clear_To_End_Of_Line(FORM * form)
2939 FE_Clear_To_End_Of_Line(FORM *form) in FE_Clear_To_End_Of_Line() argument
2941 T((T_CALLED("FE_Clear_To_End_Of_Line(%p)"), (void *)form)); in FE_Clear_To_End_Of_Line()
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()
2949 | Function : static int FE_Clear_To_End_Of_Field(FORM * form)
2956 FE_Clear_To_End_Of_Field(FORM *form) in FE_Clear_To_End_Of_Field() argument
2958 T((T_CALLED("FE_Clear_To_End_Of_Field(%p)"), (void *)form)); in FE_Clear_To_End_Of_Field()
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()
2966 | Function : static int FE_Clear_Field(FORM * form)
2973 FE_Clear_Field(FORM *form) in FE_Clear_Field() argument
2975 T((T_CALLED("FE_Clear_Field(%p)"), (void *)form)); in FE_Clear_Field()
2976 form->currow = form->curcol = 0; in FE_Clear_Field()
2977 werase(form->w); in FE_Clear_Field()
2990 | Function : static int EM_Overlay_Mode(FORM * form)
2997 EM_Overlay_Mode(FORM *form) in EM_Overlay_Mode() argument
2999 T((T_CALLED("EM_Overlay_Mode(%p)"), (void *)form)); in EM_Overlay_Mode()
3000 SetStatus(form, _OVLMODE); in EM_Overlay_Mode()
3006 | Function : static int EM_Insert_Mode(FORM * form)
3013 EM_Insert_Mode(FORM *form) in EM_Insert_Mode() argument
3015 T((T_CALLED("EM_Insert_Mode(%p)"), (void *)form)); in EM_Insert_Mode()
3016 ClrStatus(form, _OVLMODE); in EM_Insert_Mode()
3030 | Function : static bool Next_Choice(FORM * form,
3042 Next_Choice(FORM *form, FIELDTYPE *typ, FIELD *field, TypeArgument *argp) in Next_Choice() argument
3051 Next_Choice(form, typ->left, field, argp->left) || in Next_Choice()
3052 Next_Choice(form, typ->right, field, argp->right)); in Next_Choice()
3059 return typ->enum_next.gnext(form, field, (void *)argp); in Next_Choice()
3071 | Function : static bool Previous_Choice(FORM * form,
3083 Previous_Choice(FORM *form, FIELDTYPE *typ, FIELD *field, TypeArgument *argp) in Previous_Choice() argument
3092 Previous_Choice(form, typ->left, field, argp->left) || in Previous_Choice()
3093 Previous_Choice(form, typ->right, field, argp->right)); in Previous_Choice()
3100 return typ->enum_prev.gprev(form, field, (void *)argp); in Previous_Choice()
3119 | Function : static int CR_Next_Choice(FORM * form)
3127 CR_Next_Choice(FORM *form) in CR_Next_Choice() argument
3129 FIELD *field = form->current; in CR_Next_Choice()
3131 T((T_CALLED("CR_Next_Choice(%p)"), (void *)form)); in CR_Next_Choice()
3132 Synchronize_Buffer(form); in CR_Next_Choice()
3133 returnCode((Next_Choice(form, field->type, field, (TypeArgument *)(field->arg))) in CR_Next_Choice()
3140 | Function : static int CR_Previous_Choice(FORM * form)
3148 CR_Previous_Choice(FORM *form) in CR_Previous_Choice() argument
3150 FIELD *field = form->current; in CR_Previous_Choice()
3152 T((T_CALLED("CR_Previous_Choice(%p)"), (void *)form)); in CR_Previous_Choice()
3153 Synchronize_Buffer(form); in CR_Previous_Choice()
3154 returnCode((Previous_Choice(form, field->type, field, (TypeArgument *)(field->arg))) in CR_Previous_Choice()
3168 | Function : static bool Check_Field(FORM* form,
3181 Check_Field(FORM *form, FIELDTYPE *typ, FIELD *field, TypeArgument *argp) in Check_Field() argument
3202 Check_Field(form, typ->left, field, argp->left) || in Check_Field()
3203 Check_Field(form, typ->right, field, argp->right)); in Check_Field()
3211 return typ->fieldcheck.gfcheck(form, field, (void *)argp); in Check_Field()
3226 | Function : bool _nc_Internal_Validation(FORM * form )
3228 | Description : Validate the current field of the form.
3234 _nc_Internal_Validation(FORM *form) in _nc_Internal_Validation() argument
3238 field = form->current; in _nc_Internal_Validation()
3240 Synchronize_Buffer(form); 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()
3246 ClrStatus(form, _FCHECK_REQUIRED); in _nc_Internal_Validation()
3262 | Function : static int FV_Validation(FORM * form)
3264 | Description : Validate the current field of the form.
3270 FV_Validation(FORM *form) in FV_Validation() argument
3272 T((T_CALLED("FV_Validation(%p)"), (void *)form)); in FV_Validation()
3273 if (_nc_Internal_Validation(form)) in FV_Validation()
3300 FORM *form = field->form; in Next_Field_On_Page() local
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()
3318 | Function : FIELD* _nc_First_Active_Field(FORM * form)
3328 _nc_First_Active_Field(FORM *form) in _nc_First_Active_Field() argument
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()
3360 page on this form. in _nc_First_Active_Field()
3383 FORM *form = field->form; in Previous_Field_On_Page() local
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()
3611 | int (* const fct) (FORM *),
3612 | FORM * form)
3624 Inter_Field_Navigation(int (*const fct) (FORM *), FORM *form) in Inter_Field_Navigation() argument
3628 if (!_nc_Internal_Validation(form)) in Inter_Field_Navigation()
3632 Call_Hook(form, fieldterm); in Inter_Field_Navigation()
3633 res = fct(form); in Inter_Field_Navigation()
3634 Call_Hook(form, fieldinit); in Inter_Field_Navigation()
3641 | Function : static int FN_Next_Field(FORM * form)
3643 | Description : Move to the next field on the current page of the form
3649 FN_Next_Field(FORM *form) in FN_Next_Field() argument
3651 T((T_CALLED("FN_Next_Field(%p)"), (void *)form)); in FN_Next_Field()
3652 returnCode(_nc_Set_Current_Field(form, in FN_Next_Field()
3653 Next_Field_On_Page(form->current))); in FN_Next_Field()
3658 | Function : static int FN_Previous_Field(FORM * form)
3661 | form
3667 FN_Previous_Field(FORM *form) in FN_Previous_Field() argument
3669 T((T_CALLED("FN_Previous_Field(%p)"), (void *)form)); in FN_Previous_Field()
3670 returnCode(_nc_Set_Current_Field(form, in FN_Previous_Field()
3671 Previous_Field_On_Page(form->current))); in FN_Previous_Field()
3676 | Function : static int FN_First_Field(FORM * form)
3678 | Description : Move to the first field on the current page of the form
3684 FN_First_Field(FORM *form) in FN_First_Field() argument
3686 T((T_CALLED("FN_First_Field(%p)"), (void *)form)); in FN_First_Field()
3687 returnCode(_nc_Set_Current_Field(form, in FN_First_Field()
3688 Next_Field_On_Page(form->field[form->page[form->curpage].pmax]))); in FN_First_Field()
3693 | Function : static int FN_Last_Field(FORM * form)
3695 | Description : Move to the last field on the current page of the form
3701 FN_Last_Field(FORM *form) in FN_Last_Field() argument
3703 T((T_CALLED("FN_Last_Field(%p)"), (void *)form)); in FN_Last_Field()
3705 _nc_Set_Current_Field(form, in FN_Last_Field()
3706 Previous_Field_On_Page(form->field[form->page[form->curpage].pmin]))); in FN_Last_Field()
3711 | Function : static int FN_Sorted_Next_Field(FORM * form)
3714 | of the form.
3720 FN_Sorted_Next_Field(FORM *form) in FN_Sorted_Next_Field() argument
3722 T((T_CALLED("FN_Sorted_Next_Field(%p)"), (void *)form)); in FN_Sorted_Next_Field()
3723 returnCode(_nc_Set_Current_Field(form, in FN_Sorted_Next_Field()
3724 Sorted_Next_Field(form->current))); in FN_Sorted_Next_Field()
3729 | Function : static int FN_Sorted_Previous_Field(FORM * form)
3732 | of the form.
3738 FN_Sorted_Previous_Field(FORM *form) in FN_Sorted_Previous_Field() argument
3740 T((T_CALLED("FN_Sorted_Previous_Field(%p)"), (void *)form)); in FN_Sorted_Previous_Field()
3741 returnCode(_nc_Set_Current_Field(form, in FN_Sorted_Previous_Field()
3742 Sorted_Previous_Field(form->current))); in FN_Sorted_Previous_Field()
3747 | Function : static int FN_Sorted_First_Field(FORM * form)
3750 | of the form.
3756 FN_Sorted_First_Field(FORM *form) in FN_Sorted_First_Field() argument
3758 T((T_CALLED("FN_Sorted_First_Field(%p)"), (void *)form)); in FN_Sorted_First_Field()
3759 returnCode(_nc_Set_Current_Field(form, in FN_Sorted_First_Field()
3760 Sorted_Next_Field(form->field[form->page[form->curpage].smax]))); in FN_Sorted_First_Field()
3765 | Function : static int FN_Sorted_Last_Field(FORM * form)
3768 | of the form.
3774 FN_Sorted_Last_Field(FORM *form) in FN_Sorted_Last_Field() argument
3776 T((T_CALLED("FN_Sorted_Last_Field(%p)"), (void *)form)); in FN_Sorted_Last_Field()
3777 returnCode(_nc_Set_Current_Field(form, in FN_Sorted_Last_Field()
3778 Sorted_Previous_Field(form->field[form->page[form->curpage].smin]))); in FN_Sorted_Last_Field()
3783 | Function : static int FN_Left_Field(FORM * form)
3792 FN_Left_Field(FORM *form) in FN_Left_Field() argument
3794 T((T_CALLED("FN_Left_Field(%p)"), (void *)form)); in FN_Left_Field()
3795 returnCode(_nc_Set_Current_Field(form, in FN_Left_Field()
3796 Left_Neighbor_Field(form->current))); in FN_Left_Field()
3801 | Function : static int FN_Right_Field(FORM * form)
3810 FN_Right_Field(FORM *form) in FN_Right_Field() argument
3812 T((T_CALLED("FN_Right_Field(%p)"), (void *)form)); in FN_Right_Field()
3813 returnCode(_nc_Set_Current_Field(form, in FN_Right_Field()
3814 Right_Neighbor_Field(form->current))); in FN_Right_Field()
3819 | Function : static int FN_Up_Field(FORM * form)
3830 FN_Up_Field(FORM *form) in FN_Up_Field() argument
3832 T((T_CALLED("FN_Up_Field(%p)"), (void *)form)); in FN_Up_Field()
3833 returnCode(_nc_Set_Current_Field(form, in FN_Up_Field()
3834 Upper_Neighbor_Field(form->current))); in FN_Up_Field()
3839 | Function : static int FN_Down_Field(FORM * form)
3850 FN_Down_Field(FORM *form) in FN_Down_Field() argument
3852 T((T_CALLED("FN_Down_Field(%p)"), (void *)form)); in FN_Down_Field()
3853 returnCode(_nc_Set_Current_Field(form, in FN_Down_Field()
3854 Down_Neighbor_Field(form->current))); in FN_Down_Field()
3866 | Function : int _nc_Set_Form_Page(FORM * form,
3882 _nc_Set_Form_Page(FORM *form, int page, FIELD *field) in _nc_Set_Form_Page() argument
3886 if ((form->curpage != page)) in _nc_Set_Form_Page()
3890 werase(Get_Form_Window(form)); 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()
3903 res = _nc_Set_Current_Field(form, field); in _nc_Set_Form_Page()
3909 res = FN_First_Field(form); in _nc_Set_Form_Page()
3916 | Function : static int Next_Page_Number(const FORM * form)
3925 Next_Page_Number(const FORM *form) in Next_Page_Number() argument
3927 return (form->curpage + 1) % form->maxpage; in Next_Page_Number()
3932 | Function : static int Previous_Page_Number(const FORM * form)
3941 Previous_Page_Number(const FORM *form) in Previous_Page_Number() argument
3943 return (form->curpage != 0 ? form->curpage - 1 : form->maxpage - 1); in Previous_Page_Number()
3953 | int (* const fct) (FORM *),
3954 | FORM * form)
3960 | the form's init/term hooks must be called also.
3967 Page_Navigation(int (*const fct) (FORM *), FORM *form) in Page_Navigation() argument
3971 if (!_nc_Internal_Validation(form)) in Page_Navigation()
3975 Call_Hook(form, fieldterm); in Page_Navigation()
3976 Call_Hook(form, formterm); in Page_Navigation()
3977 res = fct(form); in Page_Navigation()
3978 Call_Hook(form, forminit); in Page_Navigation()
3979 Call_Hook(form, fieldinit); in Page_Navigation()
3986 | Function : static int PN_Next_Page(FORM * form)
3988 | Description : Move to the next page of the form
3994 PN_Next_Page(FORM *form) in PN_Next_Page() argument
3996 T((T_CALLED("PN_Next_Page(%p)"), (void *)form)); in PN_Next_Page()
3997 returnCode(_nc_Set_Form_Page(form, Next_Page_Number(form), (FIELD *)0)); in PN_Next_Page()
4002 | Function : static int PN_Previous_Page(FORM * form)
4004 | Description : Move to the previous page of the form
4010 PN_Previous_Page(FORM *form) in PN_Previous_Page() argument
4012 T((T_CALLED("PN_Previous_Page(%p)"), (void *)form)); in PN_Previous_Page()
4013 returnCode(_nc_Set_Form_Page(form, Previous_Page_Number(form), (FIELD *)0)); in PN_Previous_Page()
4018 | Function : static int PN_First_Page(FORM * form)
4020 | Description : Move to the first page of the form
4026 PN_First_Page(FORM *form) in PN_First_Page() argument
4028 T((T_CALLED("PN_First_Page(%p)"), (void *)form)); in PN_First_Page()
4029 returnCode(_nc_Set_Form_Page(form, 0, (FIELD *)0)); in PN_First_Page()
4034 | Function : static int PN_Last_Page(FORM * form)
4036 | Description : Move to the last page of the form
4042 PN_Last_Page(FORM *form) in PN_Last_Page() argument
4044 T((T_CALLED("PN_Last_Page(%p)"), (void *)form)); in PN_Last_Page()
4045 returnCode(_nc_Set_Form_Page(form, form->maxpage - 1, (FIELD *)0)); in PN_Last_Page()
4053 Helper routines for the core form driver.
4059 | Function : static int Data_Entry_w(FORM * form, wchar_t c)
4062 | position of the current field of the form.
4069 Data_Entry_w(FORM *form, wchar_t c) in Data_Entry_w() argument
4071 FIELD *field = form->current; in Data_Entry_w()
4074 T((T_CALLED("Data_Entry(%p,%s)"), (void *)form, _tracechtype((chtype)c))); in Data_Entry_w()
4088 First_Position_In_Current_Field(form) && 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()
4100 bool There_Is_Room = Is_There_Room_For_A_Char_In_Line(form); in Data_Entry_w()
4109 wins_wch(form->w, &temp_ch); in Data_Entry_w()
4112 if ((result = Wrapping_Not_Necessary_Or_Wrapping_Ok(form)) == E_OK) 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()
4119 result = Inter_Field_Navigation(FN_Next_Field, form); in Data_Entry_w()
4127 * We have just added a byte to the form field. It may have in Data_Entry_w()
4132 if (WINDOW_EXT(form->w, addch_used) == 0) in Data_Entry_w()
4133 IFN_Next_Character(form); in Data_Entry_w()
4146 | Function : static int Data_Entry(FORM * form,int c)
4149 | current field of the form.
4156 Data_Entry(FORM *form, int c) in Data_Entry() argument
4158 FIELD *field = form->current; in Data_Entry()
4161 T((T_CALLED("Data_Entry(%p,%s)"), (void *)form, _tracechtype((chtype)c))); in Data_Entry()
4169 First_Position_In_Current_Field(form) && 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()
4181 bool There_Is_Room = Is_There_Room_For_A_Char_In_Line(form); in Data_Entry()
4190 winsch(form->w, (chtype)c); in Data_Entry()
4193 if ((result = Wrapping_Not_Necessary_Or_Wrapping_Ok(form)) == E_OK) 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()
4204 SetStatus(form, _WINDOW_MODIFIED); in Data_Entry()
4206 result = Inter_Field_Navigation(FN_Next_Field, form); in Data_Entry()
4215 * We have just added a byte to the form field. It may have in Data_Entry()
4220 if (WINDOW_EXT(form->w, addch_used) == 0) in Data_Entry()
4221 IFN_Next_Character(form); in Data_Entry()
4223 IFN_Next_Character(form); in Data_Entry()
4247 int (*cmd) (FORM *); /* low level driver routine for this key */
4339 | Function : int form_driver(FORM * form,int c)
4343 | data. If it is a request, the form driver executes
4347 | recognized, the form driver assumes it is an application
4355 | E_NOT_POSTED - form is not posted
4359 | E_NOT_CONNECTED - no fields are connected to the form
4363 form_driver(FORM *form, int c) in form_driver() argument
4370 T((T_CALLED("form_driver(%p,%d)"), (void *)form, c)); in form_driver()
4372 if (!form) in form_driver()
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()
4406 typedef int (*Generic_Method) (int (*const) (FORM *), FORM *); in form_driver()
4409 Page_Navigation, /* overloaded to call field&form hooks */ 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()
4451 * inside the form display area or at the decoration window. in form_driver()
4463 res = form_driver(form, REQ_PREV_FIELD); in form_driver()
4465 res = form_driver(form, REQ_PREV_PAGE); in form_driver()
4467 res = form_driver(form, REQ_FIRST_FIELD); in form_driver()
4474 res = form_driver(form, REQ_NEXT_FIELD); in form_driver()
4476 res = form_driver(form, REQ_NEXT_PAGE); in form_driver()
4478 res = form_driver(form, REQ_LAST_FIELD); 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()
4497 res = _nc_Set_Current_Field(form, field); in form_driver()
4499 res = _nc_Position_Form_Cursor(form); in form_driver()
4528 Check_Char(form, form->current, form->current->type, c, in form_driver()
4529 (TypeArgument *)(form->current->arg))) in form_driver()
4531 res = Data_Entry(form, c); in form_driver()
4533 _nc_Refresh_Current_Field(form); in form_driver()
4540 | Function : int form_driver_w(FORM * form,int type,wchar_t c)
4549 | If it is a request, the form driver executes
4553 | recognized, the form driver assumes it is an application
4561 | E_NOT_POSTED - form is not posted
4565 | E_NOT_CONNECTED - no fields are connected to the form
4569 form_driver_w(FORM *form, int type, wchar_t c) in form_driver_w() argument
4574 T((T_CALLED("form_driver(%p,%d)"), (void *)form, (int)c)); in form_driver_w()
4576 if (!form) in form_driver_w()
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()
4611 typedef int (*Generic_Method) (int (*const) (FORM *), FORM *); in form_driver_w()
4614 Page_Navigation, /* overloaded to call field&form hooks */ 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()
4652 * inside the form display area or at the decoration window. in form_driver_w()
4664 res = form_driver(form, REQ_PREV_FIELD); in form_driver_w()
4666 res = form_driver(form, REQ_PREV_PAGE); in form_driver_w()
4668 res = form_driver(form, REQ_FIRST_FIELD); in form_driver_w()
4675 res = form_driver(form, REQ_NEXT_FIELD); in form_driver_w()
4677 res = form_driver(form, REQ_NEXT_PAGE); in form_driver_w()
4679 res = form_driver(form, REQ_LAST_FIELD); 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()
4698 res = _nc_Set_Current_Field(form, field); in form_driver_w()
4700 res = _nc_Position_Form_Cursor(form); in form_driver_w()
4717 res = Data_Entry_w(form, c); in form_driver_w()
4720 _nc_Refresh_Current_Field(form); in form_driver_w()
4727 The effects of setting a buffer are tightly coupled to the core of the form