about summary refs log tree commit diff stats
path: root/src/HTForms.h
blob: 17f749127ef5171cc6a09515d6803ea90eb68505 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
/*
 * $LynxId: HTForms.h,v 1.34 2018/05/04 22:50:54 tom Exp $
 */
#ifndef HTFORMS_H
#define HTFORMS_H

#ifndef LYSTRUCTS_H
#include <LYStructs.h>
#endif /* LYSTRUCTS_H */

#ifdef __cplusplus
extern "C" {
#endif
/* change_form_link() calls change_form_link_ex() with all its args and FALSE
 * as last arg
 */ extern int change_form_link(int cur,
				DocInfo *newdoc,
				BOOLEAN *refresh_screen,
				int use_last_tfpos,
				int immediate_submit);

    extern int change_form_link_ex(int cur,
				   DocInfo *newdoc,
				   BOOLEAN *refresh_screen,
				   int use_last_tfpos,
				   int immediate_submit,
				   int draw_only);

/* InputFieldData is used to pass the info between HTML.c and Gridtext.c in
 * HText_beginInput()
 */
    typedef struct _InputFieldData {
	const char *accept;
	const char *align;
	int checked;
	const char *iclass;
	int disabled;
	int readonly;
	const char *error;
	const char *height;
	const char *id;
	const char *lang;
	const char *max;
	const char *maxlength;
	const char *md;
	const char *min;
	const char *name;
	int size;
	const char *src;
	const char *type;
	char *value;
	const char *width;
	int name_cs;		/* charset handle for name */
	int value_cs;		/* charset handle for value */
	const char *accept_cs;
    } InputFieldData;

/* The OptionType structure is for a linked list of option entries
 */
    typedef struct _OptionType {
	char *name;		/* the name of the entry */
	char *cp_submit_value;	/* the value to submit   */
	int value_cs;		/* charset value is in   */
	struct _OptionType *next;	/* the next entry        */
    } OptionType;

/*
 * The FormInfo structure is used to contain the form field data within each
 * anchor.  A pointer to this structure is in the TextAnchor struct.
 */
    typedef struct _FormInfo {
	char *name;		/* the name of the link */
	int number;		/* which form is the link within */
	int type;		/* string, int, etc. */
	char *value;		/* user entered string data */
	char *orig_value;	/* the original value */
	int size;		/* width on the screen */
	unsigned maxlength;	/* max width of data */
	int group;		/* a group associated with the link
				 *  this is used for select's
				 */
	int num_value;		/* value of the numerical fields */
	int hrange;		/* high numerical range */
	int lrange;		/* low numerical range */
	OptionType *select_list;	/* array of option choices */
	char *submit_action;	/* form's action */
	int submit_method;	/* form's method */
	char *submit_enctype;	/* form's entype */
	char *submit_title;	/* form's title */
	BOOL no_cache;		/* Always resubmit? */
	char *cp_submit_value;	/* option value to submit */
	char *orig_submit_value;	/* original submit value */
	int size_l;		/* The length of the option list */
	int disabled;		/* If YES, can't change values */
	int readonly;		/* If YES, can't change values */
	int name_cs;
	int value_cs;
	char *accept_cs;
    } FormInfo;

#define FormIsReadonly(form) ((form) && ((form)->disabled || (form)->readonly))

/*
 * As structure for info associated with a form.  There is some redundancy
 * here, this shouldn't waste too much memory since the total number of forms
 * (as opposed to form fields) per doc is expected to be rather small.  More
 * things which are per form rather than per field could be moved here.  - kw
 */
    typedef struct _PerFormInfo {
	int number;		/* form number, see GridText.c */
	int disabled;		/* If YES, can't change values */
	FormInfo data;
	struct _PerFormInfo *next;	/* pointer to next form in doc */
	int nfields;		/* number of fields */
	FormInfo *first_field;
	FormInfo *last_field;	/* pointer to last field in form */
	char *accept_cs;
	char *thisacceptcs;	/* used during submit */
    } PerFormInfo;

#define HYPERTEXT_ANCHOR 1
#define INPUT_ANCHOR     2	/* forms mode input fields */
#define INTERNAL_LINK_ANCHOR 5	/* 1+4, can be used as bitflag... - kw */

    typedef enum {
	F_UNKNOWN = 0,
	F_TEXT_TYPE,
	F_PASSWORD_TYPE,
	F_CHECKBOX_TYPE,
	F_RADIO_TYPE,
	F_SUBMIT_TYPE,
	F_RESET_TYPE,
	F_OPTION_LIST_TYPE,
	F_HIDDEN_TYPE,
	F_TEXTAREA_TYPE,
	F_RANGE_TYPE,
	F_FILE_TYPE,
	F_TEXT_SUBMIT_TYPE,
	F_IMAGE_SUBMIT_TYPE,
	F_KEYGEN_TYPE,
	F_BUTTON_TYPE
    } FieldTypes;

#define F_SUBMITLIKE(type) ((type) == F_SUBMIT_TYPE || \
			    (type) == F_IMAGE_SUBMIT_TYPE || \
			    (type) == F_TEXT_SUBMIT_TYPE)

#define F_TEXTLIKE(type) ((type) == F_TEXT_TYPE || \
			  (type) == F_TEXT_SUBMIT_TYPE || \
			  (type) == F_PASSWORD_TYPE || \
			  (type) == F_FILE_TYPE || \
			  (type) == F_TEXTAREA_TYPE)

#define WWW_FORM_LINK_TYPE  1
#define WWW_LINK_TYPE   2
#define WWW_INTERN_LINK_TYPE   6	/* can be used as a bitflag... - kw */
#define LINK_LINE_FOUND	8	/* used in follow_link_number, others - kw */
#define LINK_DO_ARROWUP	16	/* returned by HTGetLinkOrFieldStart - kw */

/* #define different lynx modes */
#define NORMAL_LYNX_MODE 1
#define FORMS_LYNX_MODE  2

#define FIRST_ORDER  1
#define MIDDLE_ORDER 2
#define LAST_ORDER   3

/* in LYForms.c */
    extern void show_formlink_statusline(const FormInfo * form,
					 int for_what);
#ifdef __cplusplus
}
#endif
#endif				/* HTFORMS_H */