1*3bc9af08Schristos /* $NetBSD: internals.h,v 1.11 2016/03/09 19:47:13 christos Exp $ */ 241859428Sblymn 341859428Sblymn /*- 441859428Sblymn * Copyright (c) 1998-1999 Brett Lymn 541859428Sblymn * (blymn@baea.com.au, brett_lymn@yahoo.com.au) 641859428Sblymn * All rights reserved. 741859428Sblymn * 841859428Sblymn * This code has been donated to The NetBSD Foundation by the Author. 941859428Sblymn * 1041859428Sblymn * Redistribution and use in source and binary forms, with or without 1141859428Sblymn * modification, are permitted provided that the following conditions 1241859428Sblymn * are met: 1341859428Sblymn * 1. Redistributions of source code must retain the above copyright 1441859428Sblymn * notice, this list of conditions and the following disclaimer. 1541859428Sblymn * 2. The name of the author may not be used to endorse or promote products 16c03a48d6Swiz * derived from this software without specific prior written permission 1741859428Sblymn * 1841859428Sblymn * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 1941859428Sblymn * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 2041859428Sblymn * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 2141859428Sblymn * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 2241859428Sblymn * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 2341859428Sblymn * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2441859428Sblymn * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2541859428Sblymn * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2641859428Sblymn * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 2741859428Sblymn * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2841859428Sblymn * 2941859428Sblymn * 3041859428Sblymn */ 3141859428Sblymn 32af28ef95Sblymn #include <stdio.h> 3341859428Sblymn #include "form.h" 3441859428Sblymn 3541859428Sblymn #ifndef FORMI_INTERNALS_H 3641859428Sblymn #define FORMI_INTERNALS_H 1 3741859428Sblymn 3841859428Sblymn /* direction definitions for _formi_pos_new_field */ 3941859428Sblymn #define _FORMI_BACKWARD 1 4041859428Sblymn #define _FORMI_FORWARD 2 4141859428Sblymn 4241859428Sblymn /* define the default options for a form... */ 4341859428Sblymn #define DEFAULT_FORM_OPTS (O_VISIBLE | O_ACTIVE | O_PUBLIC | O_EDIT | \ 4441859428Sblymn O_WRAP | O_BLANK | O_AUTOSKIP | O_NULLOK | \ 4541859428Sblymn O_PASSOK | O_STATIC) 4641859428Sblymn 4741859428Sblymn /* definitions of the flags for the FIELDTYPE structure */ 4841859428Sblymn #define _TYPE_NO_FLAGS 0 4941859428Sblymn #define _TYPE_HAS_ARGS 0x01 5041859428Sblymn #define _TYPE_IS_LINKED 0x02 5141859428Sblymn #define _TYPE_IS_BUILTIN 0x04 5241859428Sblymn #define _TYPE_HAS_CHOICE 0x08 5341859428Sblymn 5441859428Sblymn typedef struct formi_type_link_struct formi_type_link; 5541859428Sblymn 5641859428Sblymn struct formi_type_link_struct 5741859428Sblymn { 5841859428Sblymn FIELDTYPE *next; 5941859428Sblymn FIELDTYPE *prev; 6041859428Sblymn }; 6141859428Sblymn 6241859428Sblymn 6341859428Sblymn struct _formi_page_struct 6441859428Sblymn { 6541859428Sblymn int in_use; 6641859428Sblymn int first; 6741859428Sblymn int last; 6841859428Sblymn int top_left; 6941859428Sblymn int bottom_right; 7041859428Sblymn }; 7141859428Sblymn 72759e545dSblymn struct _formi_tab_stops 73759e545dSblymn { 74759e545dSblymn struct _formi_tab_stops *fwd; 75759e545dSblymn struct _formi_tab_stops *back; 76759e545dSblymn unsigned char in_use; 77759e545dSblymn unsigned pos; 78759e545dSblymn unsigned size; 79759e545dSblymn }; 80759e545dSblymn 81759e545dSblymn typedef struct _formi_tab_stops _formi_tab_t; 82759e545dSblymn 837ffbe072Sblymn /* lines structure for the field - keeps start and ends and length of the 847ffbe072Sblymn * lines in a field. 857ffbe072Sblymn */ 867ffbe072Sblymn struct _formi_field_lines 877ffbe072Sblymn { 8819f07fb2Sblymn _FORMI_FIELD_LINES *prev; 8919f07fb2Sblymn _FORMI_FIELD_LINES *next; 9019f07fb2Sblymn unsigned allocated; 917ffbe072Sblymn unsigned length; 9219f07fb2Sblymn unsigned expanded; 9319f07fb2Sblymn char *string; 9419f07fb2Sblymn unsigned char hard_ret; /* line contains hard return */ 95759e545dSblymn _formi_tab_t *tabs; 967ffbe072Sblymn }; 977ffbe072Sblymn 98759e545dSblymn 9941859428Sblymn /* function prototypes */ 10041859428Sblymn unsigned 10119f07fb2Sblymn _formi_skip_blanks(char *string, unsigned int start); 10241859428Sblymn int 10341859428Sblymn _formi_add_char(FIELD *cur, unsigned pos, char c); 104759e545dSblymn void 10519f07fb2Sblymn _formi_calculate_tabs(_FORMI_FIELD_LINES *row); 10641859428Sblymn int 10741859428Sblymn _formi_draw_page(FORM *form); 10841859428Sblymn int 10941859428Sblymn _formi_find_pages(FORM *form); 11041859428Sblymn int 11141859428Sblymn _formi_field_choice(FORM *form, int c); 112d0d41d9fSblymn void 113d0d41d9fSblymn _formi_init_field_xpos(FIELD *field); 11441859428Sblymn int 11541859428Sblymn _formi_manipulate_field(FORM *form, int c); 11641859428Sblymn int 11741859428Sblymn _formi_pos_first_field(FORM *form); 11841859428Sblymn int 11941859428Sblymn _formi_pos_new_field(FORM *form, unsigned direction, unsigned use_sorted); 12041859428Sblymn void 121644e7421Sblymn _formi_redraw_field(FORM *form, int field); 122644e7421Sblymn void 12341859428Sblymn _formi_sort_fields(FORM *form); 12441859428Sblymn void 12541859428Sblymn _formi_stitch_fields(FORM *form); 12641859428Sblymn int 127759e545dSblymn _formi_tab_expanded_length(char *str, unsigned int start, unsigned int end); 128759e545dSblymn int 12941859428Sblymn _formi_update_field(FORM *form, int old_field); 13041859428Sblymn int 13199af4c10Sblymn _formi_validate_char(FIELD *field, char c); 13299af4c10Sblymn int 13341859428Sblymn _formi_validate_field(FORM *form); 134644e7421Sblymn int 13519f07fb2Sblymn _formi_wrap_field(FIELD *field, _FORMI_FIELD_LINES *pos); 13619f07fb2Sblymn int 13719f07fb2Sblymn _formi_sync_buffer(FIELD *field); 13841859428Sblymn 139cee5688dSblymn #ifdef DEBUG 140*3bc9af08Schristos void _formi_dbg_printf(const char *, ...) __printflike(1, 2); 141*3bc9af08Schristos #else 142*3bc9af08Schristos #define _formi_dbg_printf(a,...) 143cee5688dSblymn #endif /* DEBUG */ 144cee5688dSblymn 14541859428Sblymn #endif 146