1 1.10 christos /* $NetBSD: post.c,v 1.10 2016/03/09 19:47:13 christos Exp $ */ 2 1.1 blymn 3 1.1 blymn /*- 4 1.1 blymn * Copyright (c) 1998-2000 Brett Lymn 5 1.1 blymn * (blymn (at) baea.com.au, brett_lymn (at) yahoo.com.au) 6 1.1 blymn * All rights reserved. 7 1.1 blymn * 8 1.1 blymn * This code has been donated to The NetBSD Foundation by the Author. 9 1.1 blymn * 10 1.1 blymn * Redistribution and use in source and binary forms, with or without 11 1.1 blymn * modification, are permitted provided that the following conditions 12 1.1 blymn * are met: 13 1.1 blymn * 1. Redistributions of source code must retain the above copyright 14 1.1 blymn * notice, this list of conditions and the following disclaimer. 15 1.1 blymn * 2. The name of the author may not be used to endorse or promote products 16 1.8 wiz * derived from this software without specific prior written permission 17 1.1 blymn * 18 1.1 blymn * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 19 1.1 blymn * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 20 1.1 blymn * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 21 1.1 blymn * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 22 1.1 blymn * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 23 1.1 blymn * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 24 1.1 blymn * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 25 1.1 blymn * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26 1.1 blymn * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 27 1.1 blymn * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 1.1 blymn * 29 1.1 blymn * 30 1.1 blymn */ 31 1.9 lukem 32 1.9 lukem #include <sys/cdefs.h> 33 1.10 christos __RCSID("$NetBSD: post.c,v 1.10 2016/03/09 19:47:13 christos Exp $"); 34 1.1 blymn 35 1.1 blymn #include "form.h" 36 1.1 blymn #include "internals.h" 37 1.1 blymn 38 1.1 blymn /* 39 1.1 blymn * Post the form to the screen. 40 1.1 blymn */ 41 1.1 blymn int 42 1.1 blymn post_form(FORM *form) 43 1.1 blymn { 44 1.1 blymn int rows, cols, status; 45 1.1 blymn 46 1.7 blymn if (form == NULL) 47 1.1 blymn return E_BAD_ARGUMENT; 48 1.1 blymn 49 1.1 blymn if (form->posted == 1) 50 1.1 blymn return E_POSTED; 51 1.1 blymn 52 1.1 blymn if ((form->fields == NULL) || (form->fields[0] == NULL)) 53 1.1 blymn return E_NOT_CONNECTED; 54 1.1 blymn 55 1.1 blymn if (form->in_init == 1) 56 1.1 blymn return E_BAD_STATE; 57 1.1 blymn 58 1.1 blymn if (scale_form(form, &rows, &cols) != E_OK) 59 1.1 blymn return E_SYSTEM_ERROR; 60 1.1 blymn 61 1.7 blymn if ((form->scrwin != NULL) && ((rows > getmaxy(form->scrwin)) 62 1.7 blymn || (cols > getmaxx(form->scrwin)))) { 63 1.1 blymn return E_NO_ROOM; 64 1.1 blymn } 65 1.1 blymn 66 1.1 blymn form->in_init = 1; 67 1.1 blymn if (form->form_init != NULL) 68 1.1 blymn form->form_init(form); 69 1.1 blymn 70 1.1 blymn if (form->field_init != NULL) 71 1.1 blymn form->field_init(form); 72 1.1 blymn form->in_init = 0; 73 1.1 blymn 74 1.3 blymn _formi_pos_first_field(form); 75 1.1 blymn if ((status = _formi_draw_page(form)) != E_OK) 76 1.1 blymn return status; 77 1.1 blymn 78 1.6 blymn form->posted = 1; 79 1.5 blymn pos_form_cursor(form); 80 1.6 blymn 81 1.1 blymn return E_OK; 82 1.1 blymn } 83 1.1 blymn 84 1.1 blymn /* 85 1.1 blymn * Unpost the form from the screen 86 1.1 blymn */ 87 1.1 blymn int 88 1.1 blymn unpost_form(FORM *form) 89 1.1 blymn { 90 1.1 blymn 91 1.1 blymn if (form == NULL) 92 1.1 blymn return E_BAD_ARGUMENT; 93 1.1 blymn 94 1.1 blymn if (form->posted != 1) 95 1.1 blymn return E_NOT_POSTED; 96 1.1 blymn 97 1.1 blymn if (form->in_init == 1) 98 1.1 blymn return E_BAD_STATE; 99 1.1 blymn 100 1.1 blymn form->in_init = 1; 101 1.1 blymn if (form->field_term != NULL) 102 1.1 blymn form->field_term(form); 103 1.1 blymn 104 1.1 blymn if (form->form_term != NULL) 105 1.1 blymn form->form_term(form); 106 1.1 blymn form->in_init = 0; 107 1.1 blymn 108 1.7 blymn wclear(form->scrwin); 109 1.1 blymn 110 1.1 blymn form->posted = 0; 111 1.1 blymn 112 1.1 blymn return E_OK; 113 1.1 blymn } 114 1.1 blymn 115