1 1.11 christos /* $NetBSD: internals.h,v 1.11 2016/03/09 19:47:13 christos Exp $ */ 2 1.1 blymn 3 1.1 blymn /*- 4 1.1 blymn * Copyright (c) 1998-1999 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.7 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.1 blymn 32 1.2 blymn #include <stdio.h> 33 1.1 blymn #include "form.h" 34 1.1 blymn 35 1.1 blymn #ifndef FORMI_INTERNALS_H 36 1.1 blymn #define FORMI_INTERNALS_H 1 37 1.2 blymn 38 1.1 blymn /* direction definitions for _formi_pos_new_field */ 39 1.1 blymn #define _FORMI_BACKWARD 1 40 1.1 blymn #define _FORMI_FORWARD 2 41 1.1 blymn 42 1.1 blymn /* define the default options for a form... */ 43 1.1 blymn #define DEFAULT_FORM_OPTS (O_VISIBLE | O_ACTIVE | O_PUBLIC | O_EDIT | \ 44 1.1 blymn O_WRAP | O_BLANK | O_AUTOSKIP | O_NULLOK | \ 45 1.1 blymn O_PASSOK | O_STATIC) 46 1.1 blymn 47 1.1 blymn /* definitions of the flags for the FIELDTYPE structure */ 48 1.1 blymn #define _TYPE_NO_FLAGS 0 49 1.1 blymn #define _TYPE_HAS_ARGS 0x01 50 1.1 blymn #define _TYPE_IS_LINKED 0x02 51 1.1 blymn #define _TYPE_IS_BUILTIN 0x04 52 1.1 blymn #define _TYPE_HAS_CHOICE 0x08 53 1.1 blymn 54 1.1 blymn typedef struct formi_type_link_struct formi_type_link; 55 1.1 blymn 56 1.1 blymn struct formi_type_link_struct 57 1.1 blymn { 58 1.1 blymn FIELDTYPE *next; 59 1.1 blymn FIELDTYPE *prev; 60 1.1 blymn }; 61 1.1 blymn 62 1.1 blymn 63 1.1 blymn struct _formi_page_struct 64 1.1 blymn { 65 1.1 blymn int in_use; 66 1.1 blymn int first; 67 1.1 blymn int last; 68 1.1 blymn int top_left; 69 1.1 blymn int bottom_right; 70 1.1 blymn }; 71 1.1 blymn 72 1.8 blymn struct _formi_tab_stops 73 1.8 blymn { 74 1.8 blymn struct _formi_tab_stops *fwd; 75 1.8 blymn struct _formi_tab_stops *back; 76 1.8 blymn unsigned char in_use; 77 1.8 blymn unsigned pos; 78 1.8 blymn unsigned size; 79 1.8 blymn }; 80 1.8 blymn 81 1.8 blymn typedef struct _formi_tab_stops _formi_tab_t; 82 1.8 blymn 83 1.6 blymn /* lines structure for the field - keeps start and ends and length of the 84 1.6 blymn * lines in a field. 85 1.6 blymn */ 86 1.6 blymn struct _formi_field_lines 87 1.6 blymn { 88 1.10 blymn _FORMI_FIELD_LINES *prev; 89 1.10 blymn _FORMI_FIELD_LINES *next; 90 1.10 blymn unsigned allocated; 91 1.6 blymn unsigned length; 92 1.10 blymn unsigned expanded; 93 1.10 blymn char *string; 94 1.10 blymn unsigned char hard_ret; /* line contains hard return */ 95 1.8 blymn _formi_tab_t *tabs; 96 1.6 blymn }; 97 1.6 blymn 98 1.8 blymn 99 1.1 blymn /* function prototypes */ 100 1.1 blymn unsigned 101 1.10 blymn _formi_skip_blanks(char *string, unsigned int start); 102 1.1 blymn int 103 1.1 blymn _formi_add_char(FIELD *cur, unsigned pos, char c); 104 1.8 blymn void 105 1.10 blymn _formi_calculate_tabs(_FORMI_FIELD_LINES *row); 106 1.1 blymn int 107 1.1 blymn _formi_draw_page(FORM *form); 108 1.1 blymn int 109 1.1 blymn _formi_find_pages(FORM *form); 110 1.1 blymn int 111 1.1 blymn _formi_field_choice(FORM *form, int c); 112 1.9 blymn void 113 1.9 blymn _formi_init_field_xpos(FIELD *field); 114 1.1 blymn int 115 1.1 blymn _formi_manipulate_field(FORM *form, int c); 116 1.1 blymn int 117 1.1 blymn _formi_pos_first_field(FORM *form); 118 1.1 blymn int 119 1.1 blymn _formi_pos_new_field(FORM *form, unsigned direction, unsigned use_sorted); 120 1.1 blymn void 121 1.5 blymn _formi_redraw_field(FORM *form, int field); 122 1.5 blymn void 123 1.1 blymn _formi_sort_fields(FORM *form); 124 1.1 blymn void 125 1.1 blymn _formi_stitch_fields(FORM *form); 126 1.8 blymn int 127 1.8 blymn _formi_tab_expanded_length(char *str, unsigned int start, unsigned int end); 128 1.1 blymn int 129 1.1 blymn _formi_update_field(FORM *form, int old_field); 130 1.4 blymn int 131 1.4 blymn _formi_validate_char(FIELD *field, char c); 132 1.1 blymn int 133 1.1 blymn _formi_validate_field(FORM *form); 134 1.5 blymn int 135 1.10 blymn _formi_wrap_field(FIELD *field, _FORMI_FIELD_LINES *pos); 136 1.10 blymn int 137 1.10 blymn _formi_sync_buffer(FIELD *field); 138 1.1 blymn 139 1.3 blymn #ifdef DEBUG 140 1.11 christos void _formi_dbg_printf(const char *, ...) __printflike(1, 2); 141 1.11 christos #else 142 1.11 christos #define _formi_dbg_printf(a,...) 143 1.3 blymn #endif /* DEBUG */ 144 1.3 blymn 145 1.1 blymn #endif 146