1/****************************************************************************
2 * Copyright (c) 1998-2010,2012 Free Software Foundation, Inc.              *
3 *                                                                          *
4 * Permission is hereby granted, free of charge, to any person obtaining a  *
5 * copy of this software and associated documentation files (the            *
6 * "Software"), to deal in the Software without restriction, including      *
7 * without limitation the rights to use, copy, modify, merge, publish,      *
8 * distribute, distribute with modifications, sublicense, and/or sell       *
9 * copies of the Software, and to permit persons to whom the Software is    *
10 * furnished to do so, subject to the following conditions:                 *
11 *                                                                          *
12 * The above copyright notice and this permission notice shall be included  *
13 * in all copies or substantial portions of the Software.                   *
14 *                                                                          *
15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  *
16 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               *
17 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   *
18 * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   *
19 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    *
20 * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    *
21 * THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               *
22 *                                                                          *
23 * Except as contained in this notice, the name(s) of the above copyright   *
24 * holders shall not be used in advertising or otherwise to promote the     *
25 * sale, use or other dealings in this Software without prior written       *
26 * authorization.                                                           *
27 ****************************************************************************/
28
29/****************************************************************************
30 *   Author:  Juergen Pfeifer, 1995,1997                                    *
31 ****************************************************************************/
32
33#include "form.priv.h"
34
35MODULE_ID("$Id: frm_post.c,v 1.11 2012/06/10 00:27:49 tom Exp $")
36
37/*---------------------------------------------------------------------------
38|   Facility      :  libnform
39|   Function      :  int post_form(FORM * form)
40|
41|   Description   :  Writes the form into its associated subwindow.
42|
43|   Return Values :  E_OK              - success
44|                    E_BAD_ARGUMENT    - invalid form pointer
45|                    E_POSTED          - form already posted
46|                    E_NOT_CONNECTED   - no fields connected to form
47|                    E_NO_ROOM         - form doesn't fit into subwindow
48|                    E_SYSTEM_ERROR    - system error
49+--------------------------------------------------------------------------*/
50NCURSES_EXPORT(int)
51post_form(FORM *form)
52{
53  WINDOW *formwin;
54  int err;
55  int page;
56
57  T((T_CALLED("post_form(%p)"), (void *)form));
58
59  if (!form)
60    RETURN(E_BAD_ARGUMENT);
61
62  if (form->status & _POSTED)
63    RETURN(E_POSTED);
64
65  if (!(form->field))
66    RETURN(E_NOT_CONNECTED);
67
68  formwin = Get_Form_Window(form);
69  if ((form->cols > getmaxx(formwin)) || (form->rows > getmaxy(formwin)))
70    RETURN(E_NO_ROOM);
71
72  /* reset form->curpage to an invald value. This forces Set_Form_Page
73     to do the page initialization which is required by post_form.
74   */
75  page = form->curpage;
76  form->curpage = -1;
77  if ((err = _nc_Set_Form_Page(form, page, form->current)) != E_OK)
78    RETURN(err);
79
80  SetStatus(form, _POSTED);
81
82  Call_Hook(form, forminit);
83  Call_Hook(form, fieldinit);
84
85  _nc_Refresh_Current_Field(form);
86  RETURN(E_OK);
87}
88
89/*---------------------------------------------------------------------------
90|   Facility      :  libnform
91|   Function      :  int unpost_form(FORM * form)
92|
93|   Description   :  Erase form from its associated subwindow.
94|
95|   Return Values :  E_OK            - success
96|                    E_BAD_ARGUMENT  - invalid form pointer
97|                    E_NOT_POSTED    - form isn't posted
98|                    E_BAD_STATE     - called from a hook routine
99+--------------------------------------------------------------------------*/
100NCURSES_EXPORT(int)
101unpost_form(FORM *form)
102{
103  T((T_CALLED("unpost_form(%p)"), (void *)form));
104
105  if (!form)
106    RETURN(E_BAD_ARGUMENT);
107
108  if (!(form->status & _POSTED))
109    RETURN(E_NOT_POSTED);
110
111  if (form->status & _IN_DRIVER)
112    RETURN(E_BAD_STATE);
113
114  Call_Hook(form, fieldterm);
115  Call_Hook(form, formterm);
116
117  werase(Get_Form_Window(form));
118  delwin(form->w);
119  form->w = (WINDOW *)0;
120  ClrStatus(form, _POSTED);
121  RETURN(E_OK);
122}
123
124/* frm_post.c ends here */
125