150276Speter/****************************************************************************
2262685Sdelphij * Copyright (c) 1998-2010,2012 Free Software Foundation, Inc.              *
350276Speter *                                                                          *
450276Speter * Permission is hereby granted, free of charge, to any person obtaining a  *
550276Speter * copy of this software and associated documentation files (the            *
650276Speter * "Software"), to deal in the Software without restriction, including      *
750276Speter * without limitation the rights to use, copy, modify, merge, publish,      *
850276Speter * distribute, distribute with modifications, sublicense, and/or sell       *
950276Speter * copies of the Software, and to permit persons to whom the Software is    *
1050276Speter * furnished to do so, subject to the following conditions:                 *
1150276Speter *                                                                          *
1250276Speter * The above copyright notice and this permission notice shall be included  *
1350276Speter * in all copies or substantial portions of the Software.                   *
1450276Speter *                                                                          *
1550276Speter * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  *
1650276Speter * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               *
1750276Speter * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   *
1850276Speter * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   *
1950276Speter * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    *
2050276Speter * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    *
2150276Speter * THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               *
2250276Speter *                                                                          *
2350276Speter * Except as contained in this notice, the name(s) of the above copyright   *
2450276Speter * holders shall not be used in advertising or otherwise to promote the     *
2550276Speter * sale, use or other dealings in this Software without prior written       *
2650276Speter * authorization.                                                           *
2750276Speter ****************************************************************************/
2850276Speter
2950276Speter/****************************************************************************
30166124Srafan *   Author:  Juergen Pfeifer, 1995,1997                                    *
3150276Speter ****************************************************************************/
32166124Srafan
3350276Speter#include "form.priv.h"
3450276Speter
35262685SdelphijMODULE_ID("$Id: frm_post.c,v 1.11 2012/06/10 00:27:49 tom Exp $")
3650276Speter
3750276Speter/*---------------------------------------------------------------------------
3850276Speter|   Facility      :  libnform
3950276Speter|   Function      :  int post_form(FORM * form)
4050276Speter|
4150276Speter|   Description   :  Writes the form into its associated subwindow.
4250276Speter|
4350276Speter|   Return Values :  E_OK              - success
4450276Speter|                    E_BAD_ARGUMENT    - invalid form pointer
4550276Speter|                    E_POSTED          - form already posted
4650276Speter|                    E_NOT_CONNECTED   - no fields connected to form
4750276Speter|                    E_NO_ROOM         - form doesn't fit into subwindow
4850276Speter|                    E_SYSTEM_ERROR    - system error
4950276Speter+--------------------------------------------------------------------------*/
5076726SpeterNCURSES_EXPORT(int)
51166124Srafanpost_form(FORM *form)
5250276Speter{
5350276Speter  WINDOW *formwin;
5450276Speter  int err;
5550276Speter  int page;
5650276Speter
57262629Sdelphij  T((T_CALLED("post_form(%p)"), (void *)form));
58166124Srafan
5950276Speter  if (!form)
6050276Speter    RETURN(E_BAD_ARGUMENT);
6150276Speter
62166124Srafan  if (form->status & _POSTED)
6350276Speter    RETURN(E_POSTED);
6450276Speter
6550276Speter  if (!(form->field))
6650276Speter    RETURN(E_NOT_CONNECTED);
67166124Srafan
6850276Speter  formwin = Get_Form_Window(form);
69166124Srafan  if ((form->cols > getmaxx(formwin)) || (form->rows > getmaxy(formwin)))
7050276Speter    RETURN(E_NO_ROOM);
7150276Speter
7250276Speter  /* reset form->curpage to an invald value. This forces Set_Form_Page
7350276Speter     to do the page initialization which is required by post_form.
74166124Srafan   */
7550276Speter  page = form->curpage;
7650276Speter  form->curpage = -1;
77166124Srafan  if ((err = _nc_Set_Form_Page(form, page, form->current)) != E_OK)
7850276Speter    RETURN(err);
7950276Speter
80262685Sdelphij  SetStatus(form, _POSTED);
8150276Speter
82166124Srafan  Call_Hook(form, forminit);
83166124Srafan  Call_Hook(form, fieldinit);
8450276Speter
8550276Speter  _nc_Refresh_Current_Field(form);
8650276Speter  RETURN(E_OK);
8750276Speter}
8850276Speter
8950276Speter/*---------------------------------------------------------------------------
9050276Speter|   Facility      :  libnform
9150276Speter|   Function      :  int unpost_form(FORM * form)
9250276Speter|
9350276Speter|   Description   :  Erase form from its associated subwindow.
9450276Speter|
9550276Speter|   Return Values :  E_OK            - success
9650276Speter|                    E_BAD_ARGUMENT  - invalid form pointer
9750276Speter|                    E_NOT_POSTED    - form isn't posted
9850276Speter|                    E_BAD_STATE     - called from a hook routine
9950276Speter+--------------------------------------------------------------------------*/
10076726SpeterNCURSES_EXPORT(int)
101166124Srafanunpost_form(FORM *form)
10250276Speter{
103262629Sdelphij  T((T_CALLED("unpost_form(%p)"), (void *)form));
104166124Srafan
10550276Speter  if (!form)
10650276Speter    RETURN(E_BAD_ARGUMENT);
10750276Speter
108166124Srafan  if (!(form->status & _POSTED))
10950276Speter    RETURN(E_NOT_POSTED);
11050276Speter
111166124Srafan  if (form->status & _IN_DRIVER)
11250276Speter    RETURN(E_BAD_STATE);
11350276Speter
114166124Srafan  Call_Hook(form, fieldterm);
115166124Srafan  Call_Hook(form, formterm);
11650276Speter
11750276Speter  werase(Get_Form_Window(form));
11850276Speter  delwin(form->w);
11950276Speter  form->w = (WINDOW *)0;
120262685Sdelphij  ClrStatus(form, _POSTED);
12150276Speter  RETURN(E_OK);
12250276Speter}
12350276Speter
12450276Speter/* frm_post.c ends here */
125