1/****************************************************************************
2 * Copyright 2020 Thomas E. Dickey                                          *
3 * Copyright 1998-2010,2012 Free Software Foundation, Inc.                  *
4 *                                                                          *
5 * Permission is hereby granted, free of charge, to any person obtaining a  *
6 * copy of this software and associated documentation files (the            *
7 * "Software"), to deal in the Software without restriction, including      *
8 * without limitation the rights to use, copy, modify, merge, publish,      *
9 * distribute, distribute with modifications, sublicense, and/or sell       *
10 * copies of the Software, and to permit persons to whom the Software is    *
11 * furnished to do so, subject to the following conditions:                 *
12 *                                                                          *
13 * The above copyright notice and this permission notice shall be included  *
14 * in all copies or substantial portions of the Software.                   *
15 *                                                                          *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  *
17 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               *
18 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   *
19 * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   *
20 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    *
21 * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    *
22 * THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               *
23 *                                                                          *
24 * Except as contained in this notice, the name(s) of the above copyright   *
25 * holders shall not be used in advertising or otherwise to promote the     *
26 * sale, use or other dealings in this Software without prior written       *
27 * authorization.                                                           *
28 ****************************************************************************/
29
30/****************************************************************************
31 *   Author:  Juergen Pfeifer, 1995,1997                                    *
32 ****************************************************************************/
33
34#include "form.priv.h"
35
36MODULE_ID("$Id: frm_page.c,v 1.13 2020/02/02 23:34:34 tom Exp $")
37
38/*---------------------------------------------------------------------------
39|   Facility      :  libnform
40|   Function      :  int set_form_page(FORM * form,int  page)
41|
42|   Description   :  Set the page number of the form.
43|
44|   Return Values :  E_OK              - success
45|                    E_BAD_ARGUMENT    - invalid form pointer or page number
46|                    E_BAD_STATE       - called from a hook routine
47|                    E_INVALID_FIELD   - current field can't be left
48|                    E_SYSTEM_ERROR    - system error
49+--------------------------------------------------------------------------*/
50NCURSES_EXPORT(int)
51set_form_page(FORM *form, int page)
52{
53  int err = E_OK;
54
55  T((T_CALLED("set_form_page(%p,%d)"), (void *)form, page));
56
57  if (!form || (page < 0) || (page >= form->maxpage))
58    RETURN(E_BAD_ARGUMENT);
59
60  if (!(form->status & _POSTED))
61    {
62      form->curpage = (short)page;
63      form->current = _nc_First_Active_Field(form);
64    }
65  else
66    {
67      if (form->status & _IN_DRIVER)
68	err = E_BAD_STATE;
69      else
70	{
71	  if (form->curpage != page)
72	    {
73	      if (!_nc_Internal_Validation(form))
74		err = E_INVALID_FIELD;
75	      else
76		{
77		  Call_Hook(form, fieldterm);
78		  Call_Hook(form, formterm);
79		  err = _nc_Set_Form_Page(form, page, (FIELD *)0);
80		  Call_Hook(form, forminit);
81		  Call_Hook(form, fieldinit);
82		  _nc_Refresh_Current_Field(form);
83		}
84	    }
85	}
86    }
87  RETURN(err);
88}
89
90/*---------------------------------------------------------------------------
91|   Facility      :  libnform
92|   Function      :  int form_page(const FORM * form)
93|
94|   Description   :  Return the current page of the form.
95|
96|   Return Values :  >= 0  : current page number
97|                    -1    : invalid form pointer
98+--------------------------------------------------------------------------*/
99NCURSES_EXPORT(int)
100form_page(const FORM *form)
101{
102  T((T_CALLED("form_page(%p)"), (const void *)form));
103
104  returnCode(Normalize_Form(form)->curpage);
105}
106
107/* frm_page.c ends here */
108