C-Menu 0.2.9
A User Interface Toolkit
Loading...
Searching...
No Matches
form.h
Go to the documentation of this file.
1/** @file form.h
2 * @brief Form data structures, enums, types, end process declarations
3 * @author Bill Waller
4 * Copyright (c) 2025
5 * MIT License
6 * billxwaller@gmail.com
7 * @date 2026-02-09
8 */
9
10#ifndef _FORM_H
11#define _FORM_H 1
12#include <cm.h>
13
14#ifndef _COMMON_H
15typedef struct Init Init;
16#endif
17
18#define FIELD_MAXLEN 1024
19#define FIELD_MAXCNT 100
20#define F_NOMETAS 1 /**< flag - no metacharacters allowed in field input */
21#define F_NOTBLANK 2 /**< flag - field input cannot be blank */
22#define F_NOECHO
23 4 /**< flag - do not echo field input on the screen, e.g. for password \
24 fields */
25
26/** Form process types */
27enum {
29 302, /**< continue processing the form, e.g. after accepting a field */
30 P_ACCEPT, /**< accept the form, e.g. after accepting a field and all fields
31 are valid */
32 P_HELP, /**< display the help information for the form, e.g. after accepting
33 a field and the user requests help */
34 P_CANCEL, /**< cancel the form, e.g. after accepting a field and the user
35 cancels the form */
36 P_REFUSE, /**< refuse the form, e.g. after accepting a field and the field
37 value is invalid */
38 P_CALC, /**< process the form, e.g. after accepting a field and
39 calculating the values of other fields based on the accepted
40 field value */
41 P_EDIT, /**< edit the form, e.g. after accepting a field and allowing the
42 user to edit the form fields */
43 P_END /**< end the form processing, e.g. after accepting a field and all
44 fields are valid and the form is accepted */
45};
46
47/** Form field formats */
49 FF_STRING, /**< a string field format, e.g. for accepting a name or other
50 text input */
51 FF_DECIMAL_INT, /**< a decimal integer field format, e.g. for accepting an
52 age or other numeric input */
53 FF_HEX_INT, /**< a hexadecimal integer field format, e.g. for accepting a
54 color code or other hexadecimal input */
55 FF_FLOAT, /**< a floating point field format, e.g. for accepting a price or
56 other decimal input */
57 FF_DOUBLE, /**< a double precision floating point field format, e.g. for
58 accepting a more precise decimal input */
59 FF_CURRENCY, /**< a currency field format, e.g. for accepting a price or
60 other monetary input, formatted as a decimal number with two
61 decimal places and a currency symbol */
62 FF_YYYYMMDD, /**< a date field format, e.g. for accepting a date input,
63 formatted as a string in the format "YYYY-MM-DD" */
64 FF_HHMMSS, /**< a time field format, e.g. for accepting a time input,
65 formatted as a string in the format "HH:MM:SS" */
66 FF_APR, /**< an APR field format, e.g. for accepting an annual percentage
67 rate input, formatted as a decimal number with two decimal places
68 and a percent symbol */
69 FF_INVALID /**< an invalid field format, used for error handling and
70 validation purposes */
71 /** Future Implementation of Additional Field Formats
72 * FF_EMAIL - an email field format, e.g. for accepting an email address
73 * input, formatted as a string that matches a regular expression for valid
74 * email addresses
75 * FF_PHONE - a phone number field format, e.g. for accepting a phone number
76 * input, formatted as a string that matches a regular expression for valid
77 * phone numbers
78 * FF_URL - a URL field format, e.g. for accepting a URL input, formatted as
79 * a string that matches a regular expression for valid
80 */
81};
82
83/** ff_tbl - a table of field format strings used in the Form description
84 * file to identify field data types
85 * the index of the field format in this table corresponds to the FieldFormat
86 * enum values, e.g. ff_tbl[FF_STRING] = "string", ff_tbl[F_DECIMAL_INT] =
87 * "decimal_int", etc.
88 */
89extern char
90 ff_tbl[][26]; /**< a table of field format strings used in the Form
91 description file to identify field data types, e.g.
92 "string", "decimal_int", "hex_int", etc. The index of the
93 field format in this table corresponds to the FieldFormat
94 enum values, e.g. ff_tbl[FF_STRING] = "string",
95 ff_tbl[FF_DECIMAL_INT] = "decimal_int", etc. This table is
96 used for parsing the form description file and determining
97 the field formats for each field in the form. */
98
99/** @struct Text
100 @brief structure for form fields */
101typedef struct {
102 int line; /**< the line number on the form window where this text string
103 should be displayed */
104 int col; /**< the column number on the form window where this text string
105 should be displayed */
106 char str[SCR_COLS]; /**< the text string to be displayed on the form window
107 */
108 int len; /**< the length of the text string, used for display and formatting
109 purposes */
110} Text;
111
112/** @struct Field
113 @brief structure for form fields */
114typedef struct {
115 int line; /**< the line number on the form window where this field should be
116 displayed */
117 int col; /**< the column number on the form window where this field should
118 be displayed */
119 int len; /**< the length of the field input area, used for display and
120 formatting purposes */
121 int ff; /**< the field format, represented as an integer corresponding to
122 the FieldFormat enum values, e.g. FF_STRING, FF_DECIMAL_INT, etc.
123 This is used for validating and formatting the field input values
124 according to their specified formats. */
125 char input_s[FIELD_MAXLEN]; /**< the input string for this field, used for
126 storing the user's input value for this field
127 during form processing */
128 char accept_s[FIELD_MAXLEN]; /**< the accepted string for this field, used
129 for storing the validated and accepted value for
130 this field after processing the user's input
131 during form processing */
132 char display_s[FIELD_MAXLEN]; /**< the display string for this field, used
133 for storing the formatted string that will be
134 displayed in the field input area on the form
135 window during form processing, based on the
136 accepted value and the field format */
137 char filler_s[FIELD_MAXLEN]; /**< the filler string for this field, used for
138 storing the string that will be used to fill the
139 field input area on the form window during form
140 processing, based on the field length and the fill
141 character specified in the form structure */
142} Field;
143
144/** @struct Form */
145typedef struct {
146 int fg_clr_idx; /**< the foreground color for the form window */
147 int bg_clr_idx; /**< the background color for the form window */
148 int bo_clr_idx; /**< the border color for the form window */
149 int lines; /**< the number of lines for the form window */
150 int cols; /**< the number of columns for the form windowi */
151 int begy; /**< the screen line number for the upper left corner of the form
152 window */
153 int begx; /**< the screen column number for the upper left corner of the
154 form window */
155 WINDOW *win; /**< ncurses window structure for form */
156 WINDOW *box; /**< ncurses window structure for form box border */
157 char title[MAXLEN]; /**< the title of the form, displayed in the form box
158 border */
159 FILE *in_fp; /**< input stream pointer, e.g. for reading from a file or pipe
160 */
161 FILE *out_fp; /**< output stream pointer, e.g. for writing to a file or pipe
162 */
163 int in_fd; /**< input file descriptor, e.g. for reading from a file or pipe
164 */
165 int out_fd; /**< output file descriptor, e.g. for writing to a file or pipe
166 */
167 char mapp_spec[FIELD_MAXLEN]; /**< the menu application description file
168 spec */
170 [MAXLEN]; /**< the provider command, which can be executed in the
171 background to provide dynamic content for a program called
172 by the menu application. This command can be used to
173 generate or retrieve data that will be displayed on the
174 form or used for processing the form fields, allowing for
175 dynamic and interactive forms that can adapt to changing
176 data or user input during form processing. */
178 [MAXLEN]; /**< the receiver command, which can be executed in the
179 background to process the output of a program called by the
180 menu application. This command can be used to handle the
181 results or output generated by a program that is executed
182 as part of the form processing, allowing for dynamic and
183 interactive forms that can respond to the results of
184 process programs or commands during form processing. */
185 char cmd[MAXLEN]; /**< a command that can be executed in the foreground,
186 possibly taking control of the screen, by the menu
187 application, e.g. an editor. This command can be used
188 to allow the user to perform additional actions or
189 tasks as part of the form processing, such as editing a
190 file or running a script, providing a more interactive
191 and flexible user experience during form processing. */
192 bool f_mapp_spec; /**< flag - mapp_spec verified */
194 [MAXLEN]; /**< the menu application help file spec, e.g. a qualified
195 path to a file containing help information for the menu
196 application and its associated forms. This file can be used
197 to provide context-sensitive help to the user during form
198 processing, allowing them to access relevant information
199 and guidance based on their current actions or the specific
200 form they are working with. */
201 char in_spec[MAXLEN]; /**< the input file spec, e.g. a qualified path to a
202 file containing initial values for the form fields.
203 This file can be used to pre-populate the form
204 fields with existing data or default values during
205 form processing, allowing for a more efficient and
206 user-friendly experience when working with forms
207 that require input values. */
208 char out_spec[MAXLEN]; /**< the output file spec, e.g. a qualified path to a
209 file where the accepted values for the form fields
210 will be written after form processing. This file
211 can be used to save or export the results of the
212 form processing, allowing for further use or
213 analysis of the accepted field values after the
214 form has been completed. */
215 bool f_in_spec; /**< flag - in_spec verified, indicating that the input file
216 spec has been validated and is ready for use during form
217 processing */
218 bool f_out_spec; /**< flag - out_spec verified, indicating that the output
219 file spec has been validated and is ready for use during
220 form processing */
221 bool f_in_pipe; /**< flag - in_spec is a pipe, indicating that the input
222 file spec is a command that can be executed to provide
223 input data for the form fields during form processing,
224 allowing for dynamic and flexible input sources for the
225 form fields. */
226 bool f_out_pipe; /**< flag - out_spec is a pipe, indicating that the output
227 file spec is a command that can be executed to handle
228 the accepted field values for the form fields during
229 form processing, allowing for dynamic and flexible
230 output handling for the form results. */
231 bool f_help_spec; /**< flag - help_spec verified, indicating that the help
232 file spec has been validated and is ready for use
233 during form processing */
234 bool
235 f_erase_remainder; /**< flag - if set, causes the data above the cursor
236 and to the right to be cleared when the user
237 presses the enter key, e.g. to prevent leftover
238 characters from previous field values from being
239 left on the screen when a shorter value is entered
240 in a field. This is essential for veteran keyboard
241 users, accountants and the like, who rarely even
242 look at the screen during data entry. */
243 bool f_calculate; /**< flag - if set, Form presents an option to perform an
244 external query or calculation. */
245 bool f_process; /**< flag - if set, Form presents an option to perform an
246 external query or calculation. */
247 bool f_query; /**< flag - if set, the action key label will be "query"
248 instead of "process" or "calculate". */
249 bool help; /**< flag - if set, indicates that the user has requested help
250 during form processing, e.g. by pressing a help key or button.
251 This can be used to trigger the display of context-sensitive
252 help information for the form, providing guidance and
253 assistance to the user based on their current actions or the
254 specific form they are working with. */
255 bool f_provider_cmd; /**< flag - if set, indicates that the provider command
256 has been verified and is valid for execution. This
257 can be used to ensure that the provider command
258 specified in the form structure is valid and can be
259 executed successfully during form processing,
260 allowing for dynamic content generation or retrieval
261 as part of the form's functionality. */
262 bool f_receiver_cmd; /**< flag - if set, indicates that the receiver command
263 has been verified and is valid for execution. This
264 can be used to ensure that the receiver command
265 specified in the form structure is valid and can be
266 executed successfully during form processing,
267 allowing for dynamic handling of the results or
268 output generated by process programs or commands as
269 part of the form's functionality. */
270 bool f_cmd; /**< flag - if set, indicates that the command has been verified
271 and is valid for execution. This can be used to ensure that
272 the command specified in the form structure is valid and can
273 be executed successfully during form processing, allowing for
274 additional actions or tasks to be performed as part of the
275 form's functionality, such as editing a file or running a
276 script. */
278 [3]; /**< the characters used to indicate field input areas in the form
279 description file, e.g. "[]" for square brackets or "<>" for
280 angle brackets. The first character is the left bracket and the
281 second character is the right bracket. These characters may be
282 left blank, especially if fill_char is used. The choice of
283 brackets can affect the visual appearance of the form and how
284 users perceive the input areas for each field, with some
285 preferring the traditional look of brackets while others may
286 prefer a cleaner look without them. The use of brackets can also
287 help to visually separate the field input areas from other text
288 on the form, making it easier for users to identify where they
289 need to enter their input during form processing. */
290 char fill_char[2]; /**< the character used to fill the field input areas in
291 the form, e.g. "_" for underscores or " " for spaces.
292 This character is used to visually indicate the input
293 area for each field in the form, and it can be used in
294 conjunction with brackets or on its own if brackets
295 are not used. Many feel that using fill characters
296 without brackets creates a cleaner and more modern
297 look for the form, while others prefer the traditional
298 look of brackets. The choice of whether to use
299 brackets, fill characters, or both is a matter of
300 personal preference and design style for the form. */
301 int fidx; /**< the index of the currently selected field, used for
302 highlighting and selection purposes during form processing.
303 This index corresponds to the position of the field in the
304 field array, allowing for easy access to the current field's
305 data and properties during form processing. The fidx can be
306 updated as the user navigates through the form fields,
307 providing visual feedback and allowing for dynamic interactions
308 based on the selected field. */
309 int fcnt; /**< the number of fields in the form, used for iterating through
310 the field array and managing field data during form processing.
311 This count can be used to determine when the user has reached
312 the end of the fields or to validate that all required fields
313 have been completed before accepting the form. The fcnt can
314 also be used to dynamically allocate resources or manage memory
315 for the field data during form processing. */
316 int didx; /**< an index to the array of text strings to be displayed on the
317 form window, used for iterating through the text array and
318 managing the display of text during form processing. This index
319 can be updated as needed to control which text strings are
320 currently being displayed on the form window, allowing for
321 dynamic updates to the form's content based on user actions or
322 other events during form processing. */
323 int dcnt; /**< the number of text strings to be displayed on the form
324 window, used for iterating through the text array and managing
325 the display of text during form processing. This count can be
326 used to determine how many text strings need to be displayed on
327 the form window and to validate that all necessary text has
328 been provided for display during form processing. The dcnt can
329 also be used to dynamically allocate resources or manage memory
330 for the text data during form processing. */
331 Text *text[FIELD_MAXCNT]; /**< an array of pointers to the text structures
332 for the text strings to be displayed on the form
333 window, used for managing and displaying the text
334 content of the form during form processing. Each
335 pointer in this array corresponds to a Text
336 structure that contains the line, column, string,
337 and length information for a specific text string
338 to be displayed on the form window. This allows
339 for dynamic management of the text content on the
340 form, enabling updates and changes to the
341 displayed text based on user actions or other
342 events during form processing. */
343 Field
344 *field[FIELD_MAXCNT]; /**< an array of pointers to the field structures
345 for the fields in this form, used for managing and
346 processing the form fields during form processing.
347 Each pointer in this array corresponds to a Field
348 structure that contains the line, column, length,
349 field format, input string, accepted string,
350 display string, and filler string information for
351 a specific field in the form. This allows for
352 dynamic management of the form fields, enabling
353 validation, formatting, and processing of user
354 input based on the specified field formats and
355 properties during form processing. */
356 Chyron *chyron; /**< a structure for managing the chyron string and its
357 display properties on the form window during form processing.
358 The chyron can be used to provide instructions, feedback, or
359 other information to the user during form processing, and it
360 can be updated dynamically based on user actions or other
361 events to enhance the user experience and provide context-
362 sensitive information as needed. */
363} Form;
364extern Form
365 *form; /**< a pointer to the current form structure, used for managing and
366 processing the form during form processing. This pointer can be
367 updated to point to different form structures as needed, allowing
368 for dynamic handling of multiple forms within the same application
369 or session. The form pointer provides access to all the properties
370 and data of the current form, enabling efficient management and
371 processing of the form fields and text during user interactions
372 and other events during form processing. */
373
374extern int field_editor(Form *);
375extern int form_display_field(Form *);
376extern int form_display_field_n(Form *, int);
377extern int field_navigator(Form *);
378extern int form_read_description(Form *);
379extern int form_fmt_field(Form *, char *s);
380extern int form_desc_error(int, char *, char *);
381extern void form_help(char *);
382extern int form_yx_to_fidx(Form *, int, int);
383extern void form_display_chyron(Form *);
384#endif
void form_help(char *)
@ P_HELP
Definition form.h:32
@ P_CALC
Definition form.h:38
@ P_CONTINUE
Definition form.h:28
@ P_END
Definition form.h:43
@ P_ACCEPT
Definition form.h:30
@ P_CANCEL
Definition form.h:34
@ P_EDIT
Definition form.h:41
@ P_REFUSE
Definition form.h:36
int form_yx_to_fidx(Form *, int, int)
#define FIELD_MAXLEN
Definition form.h:18
FieldFormat
Definition form.h:48
@ FF_DECIMAL_INT
Definition form.h:51
@ FF_STRING
Definition form.h:49
@ FF_HEX_INT
Definition form.h:53
@ FF_YYYYMMDD
Definition form.h:62
@ FF_HHMMSS
Definition form.h:64
@ FF_CURRENCY
Definition form.h:59
@ FF_FLOAT
Definition form.h:55
@ FF_INVALID
Definition form.h:69
@ FF_DOUBLE
Definition form.h:57
@ FF_APR
Definition form.h:66
int form_read_description(Form *)
Form * form
Definition mem.c:47
void form_display_chyron(Form *)
#define FIELD_MAXCNT
Definition form.h:19
int cmd_processor(Init *)
Init * init
Definition common.h:186
OptType
option types
Definition common.h:78
@ OT_INT
Definition common.h:80
@ OT_BOOL
Definition common.h:81
@ OT_HEX
Definition common.h:82
@ OT_STRING
Definition common.h:79
Caller
Definition common.h:75
@ FORM
Definition common.h:75
@ MENU
Definition common.h:75
@ VIEW
Definition common.h:75
@ PICK
Definition common.h:75
int popup_form(Init *, int, char **, int, int)
Definition popups.c:34
OptGroup
option groups
Definition common.h:86
@ OG_FILES
Definition common.h:87
@ OG_DIRS
Definition common.h:88
@ OG_SPECS
Definition common.h:89
@ OG_MISC
Definition common.h:90
@ OG_FLAGS
Definition common.h:92
@ OG_PARMS
Definition common.h:91
@ OG_COL
Definition common.h:93
int popup_menu(Init *, int, char **, int, int)
Definition popups.c:8
int popup_view(Init *, int, char **, int, int, int, int)
Definition popups.c:47
int parse_opt_args(Init *, int, char **)
Definition init.c:393
int popup_pick(Init *, int, char **, int, int)
Definition popups.c:21
@ IC_MENU
Definition common.h:184
@ IC_VIEW
Definition common.h:184
@ IC_FORM
Definition common.h:184
@ IC_PICK
Definition common.h:184
char minitrc[MAXLEN]
int init_cnt
Definition mem.c:43
volatile sig_atomic_t sig_received
Definition sig.c:31
size_t rtrim(char *)
Trims trailing spaces from string s in place.
Definition futil.c:102
bool handle_signal(sig_atomic_t)
int eargc
Definition futil.c:41
void win_Toggle_Attrs()
#define MAXWIN
Definition cm.h:468
int n_cols
#define KEY_ALTEND
Definition cm.h:403
int mbegx
#define KEY_ALTLEFT
Definition cm.h:406
void curskeys(WINDOW *)
#define KEY_ALTDOWN
Definition cm.h:407
void sig_shell_mode()
void get_rfc3339_s(char *, size_t)
bool f_have_shell_tioctl
Definition scriou.c:24
void init_stdscr()
#define KEY_ALTHOME
Definition cm.h:400
int dbgfd
colors_enum
Definition cm.h:122
@ CLR_FG
Definition cm.h:140
@ CLR_RED
Definition cm.h:124
@ CLR_YELLOW
Definition cm.h:126
@ CLR_BCYAN
Definition cm.h:137
@ CLR_WHITE
Definition cm.h:130
@ CLR_MAGENTA
Definition cm.h:128
@ CLR_BLACK
Definition cm.h:123
@ CLR_BWHITE
Definition cm.h:138
@ CLR_LN_BG
Definition cm.h:144
@ CLR_BO
Definition cm.h:142
@ CLR_BBLACK
Definition cm.h:131
@ CLR_BBLUE
Definition cm.h:135
@ CLR_LN
Definition cm.h:143
@ CLR_BGREEN
Definition cm.h:133
@ CLR_BYELLOW
Definition cm.h:134
@ CLR_BMAGENTA
Definition cm.h:136
@ CLR_BORANGE
Definition cm.h:139
@ CLR_BG
Definition cm.h:141
@ CLR_BRED
Definition cm.h:132
@ CLR_NCOLORS
Definition cm.h:145
@ CLR_BLUE
Definition cm.h:127
@ CLR_GREEN
Definition cm.h:125
@ CLR_CYAN
Definition cm.h:129
void mouse_getch(int *, int *, int *, int *)
int display_ok_message(char *)
int cp_title
#define KEY_ALTF0
Definition cm.h:345
int cp_default
#define MAXARGS
Definition cm.h:30
void destroy_win(WINDOW *)
int cols
bool f_curses_open
Definition sig.c:33
int enter_option()
#define CHYRON_KEYS
Definition cm.h:230
struct termios shell_tioctl curses_tioctl
Definition scriou.c:34
void dump_opts()
FTypes
Definition cm.h:156
@ FT_UNKNOWN
Definition cm.h:164
@ FT_SOCK
Definition cm.h:163
@ FT_DIR
Definition cm.h:159
@ FT_FIFO
Definition cm.h:160
@ FT_REG
Definition cm.h:162
@ FT_CHR
Definition cm.h:158
@ FT_BLK
Definition cm.h:157
@ FT_LNK
Definition cm.h:161
int mg_line
const wchar_t bw_tt
void write_log(char *)
unsigned char uchar
Definition cm.h:469
int cp_bold
char earg_str[MAXLEN]
Definition futil.c:40
bool verify_dir_q(char *, int)
String mk_string(size_t)
Create a String struct with a dynamically allocated string.
Definition futil.c:1396
bool construct_file_spec(char *, char *, char *, char *, char *, int)
int mcols
const wchar_t bw_cr
#define KEY_ALTPGDN
Definition cm.h:404
int mg_action
#define XTERM_256COLOR
Definition cm.h:347
const wchar_t bw_bt
#define KEY_ALTRIGHT
Definition cm.h:408
#define CHYRON_KEY_MAXLEN
Definition cm.h:227
bool verify_file_q(char *, int)
bool f_debug
int lines
#define KEY_ALTDEL
Definition cm.h:402
#define SCR_COLS
Definition cm.h:31
int cp_highlight
void dump_opts_by_use(char *, char *)
int open_log(char *)
int begx
int wait_timeout
Definition futil.c:98
int win_attr_even
char errmsg[]
Definition futil.c:84
#define KEY_ALTUP
Definition cm.h:405
LFFlags
Definition cm.h:148
@ LF_EXC_REGEX
Definition cm.h:151
@ LF_HIDE
Definition cm.h:149
@ LF_ICASE
Definition cm.h:150
@ LF_EXEC
Definition cm.h:153
@ LF_REGEX
Definition cm.h:152
int mlines
#define KEY_ALTPGUP
Definition cm.h:401
void destroy_box(WINDOW *)
bool f_restore_screen
#define COLOR_LEN
Definition cm.h:180
char * eargv[MAXARGS]
Definition futil.c:42
int win_attr_odd
int n_lines
int mg_col
bool f_have_curses_tioctl
Definition scriou.c:25
#define KEY_ALTF(n)
Definition cm.h:346
void w_mouse_getch(WINDOW *, int *, int *, int *, int *)
int mbegy
bool str_to_bool(const char *)
Converts String to boolean true or false.
Definition futil.c:649
#define __atexit
This macro registers the end_pgm function to be called when the program exits.
Definition cm.h:194
struct termios shell_out_tioctl curses_out_tioctl
Definition scriou.c:36
void user_end()
int display_curses_keys()
#define KEY_ALTINS
Definition cm.h:399
int begy
void display_argv_error_msg(char *, char **)
struct termios shell_in_tioctl curses_in_tioctl
Definition scriou.c:35
int cp_ln_bg
struct termios shell_err_tioctl curses_err_tioctl
Definition scriou.c:37
int clr_idx
#define TRUE
Definition iloan.c:19
int popup_ckeys()
Display Curses Keys Responds to curses keys and mouse events, displaying the key code and description...
Definition curskeys.c:23
#define KSTRLEN
Definition curskeys.c:14
#define MAXLEN
Definition curskeys.c:15
int cp_box
Definition dwin.c:138
unsigned int cmd_key
Definition dwin.c:117
WINDOW * win
Definition dwin.c:113
const wchar_t bw_rt
Definition dwin.c:102
const wchar_t bw_ho
Definition dwin.c:95
cchar_t CCC_LN
Definition dwin.c:151
int cp_win
Definition dwin.c:137
int clr_pair_cnt
Definition dwin.c:144
WINDOW * win_win[MAXWIN]
Definition dwin.c:114
bool waitpid_with_timeout(pid_t pid, int timeout)
Definition dwin.c:1431
bool action_disposition(char *title, char *action_str)
Definition dwin.c:1224
const wchar_t bw_tl
Definition dwin.c:97
char em1[MAXLEN]
Definition dwin.c:133
int tty_fd
Definition dwin.c:153
void display_chyron(WINDOW *win, Chyron *chyron, int line, int col)
Definition dwin.c:297
cchar_t CCC_WIN
Definition dwin.c:146
int clr_cnt
Definition dwin.c:142
const wchar_t bw_tr
Definition dwin.c:98
int clr_pair_idx
Definition dwin.c:143
int cp_ln
Definition dwin.c:141
const wchar_t bw_lt
Definition dwin.c:101
int click_x
Definition dwin.c:45
int src_line
Definition dwin.c:129
char * src_name
Definition dwin.c:130
cchar_t CCC_BOX
Definition dwin.c:148
const wchar_t bw_bl
Definition dwin.c:99
int win_ptr
Definition dwin.c:121
int exit_code
Definition dwin.c:116
int click_y
Definition dwin.c:44
char em0[MAXLEN]
Definition dwin.c:132
char em3[MAXLEN]
Definition dwin.c:135
int cp_reverse_highlight
Definition dwin.c:140
char const colors_text[][10]
Definition dwin.c:91
int rgb_clr_to_cube(int)
void set_chyron_key(Chyron *, int, char *, int)
Definition dwin.c:245
const wchar_t bw_ve
Definition dwin.c:96
cchar_t CCC_REVERSE
Definition dwin.c:149
cchar_t CCC_NORM
Definition dwin.c:145
int cp_reverse
Definition dwin.c:139
int win_attr
Definition dwin.c:119
WINDOW * win_box[MAXWIN]
Definition dwin.c:115
char fn[MAXLEN]
Definition dwin.c:131
char em2[MAXLEN]
Definition dwin.c:134
int cp_norm
Definition dwin.c:136
const wchar_t bw_br
Definition dwin.c:100
char ff_tbl[][26]
Definition fields.c:40
struct termios shell_tioctl
Definition scriou.c:22
bool open_curses(SIO *)
Initialize NCurses and color settings.
Definition dwin.c:423
int xwgetch(WINDOW *, Chyron *, int)
Wrapper for wgetch that handles signals, mouse events, checks for clicks on the chyron line,...
Definition dwin.c:1359
void restore_wins()
Restore all windows after a screen resize.
Definition dwin.c:938
int win_new(int, int, int, int, char *, int)
Create a new window with optional box and title.
Definition dwin.c:783
void win_init_attrs()
Initialize window attributes.
Definition dwin.c:162
WINDOW * win_del()
Delete the current window and its associated box window.
Definition dwin.c:902
void mvwaddstr_fill(WINDOW *, int, int, char *, int)
For lines shorter than their display area, fill the rest with spaces.
Definition dwin.c:1262
void cbox(WINDOW *)
Draw a box around the specified window.
Definition dwin.c:960
void win_resize(int, int, char *)
Resize the current window and its box, and update the title.
Definition dwin.c:851
void destroy_curses()
Gracefully shut down NCurses and restore terminal settings.
Definition dwin.c:738
void win_redraw(WINDOW *)
Redraw the specified window.
Definition dwin.c:891
bool is_set_chyron_key(Chyron *, int)
Check if function key label is set.
Definition dwin.c:217
Chyron * destroy_chyron(Chyron *chyron)
Destroy Chyron structure.
Definition dwin.c:198
int get_chyron_key(Chyron *, int)
Get keycode from chyron.
Definition dwin.c:369
void set_chyron_key_cp(Chyron *, int, char *, int, int)
Set chyron key.
Definition dwin.c:237
void compile_chyron(Chyron *)
construct the chyron string from the chyron structure
Definition dwin.c:268
void unset_chyron_key(Chyron *, int)
Unset chyron key.
Definition dwin.c:258
Chyron * new_chyron()
Create and initialize Chyron structure.
Definition dwin.c:183
RGB xterm256_idx_to_rgb(int)
Convert XTerm 256 color index to RGB color.
Definition dwin.c:590
int clr_name_to_idx(char *)
Get color index from color name.
Definition dwin.c:1282
int rgb_to_curses_clr(RGB *)
Get color index for RGB color.
Definition dwin.c:541
bool init_clr_palette(SIO *)
Initialize color palette based on SIO settings.
Definition dwin.c:651
void apply_gamma(RGB *)
Apply gamma correction to RGB color.
Definition dwin.c:624
int rgb_to_xterm256_idx(RGB *)
Convert RGB color to XTerm 256 color index.
Definition dwin.c:569
int get_clr_pair(int fg, int bg)
Get color pair index for foreground and background colors.
Definition dwin.c:510
bool wait_destroy(Chyron *)
Destroy the waiting message window and chyron.
Definition dwin.c:1203
int wait_continue(WINDOW *, Chyron *, int)
Update the waiting message with remaining time and check for user input.
Definition dwin.c:1215
int answer_yn(char *em0, char *em1, char *em2, char *em3)
Accept a single letter answer.
Definition dwin.c:994
WINDOW * wait_mk_win(Chyron *, char *)
Display a popup waiting message.
Definition dwin.c:1172
int Perror(char *)
Display a simple error message window or print to stderr.
Definition dwin.c:1110
int display_error(char *em0, char *em1, char *em2, char *em3)
Display an error message window or print to stderr.
Definition dwin.c:1054
void abend(int, char *)
Abnormal program termination.
Definition dwin.c:1331
Chyron * wait_mk_chyron()
Create a Chyron struct for the waiting message.
Definition dwin.c:1161
int fork_exec(char **)
Fork and exec a command.
Definition exec.c:128
int shell(char *)
Execute a shell command.
Definition exec.c:80
int full_screen_fork_exec(char **)
Execute a command in full screen mode.
Definition exec.c:44
int full_screen_shell(char *)
Execute a shell command in full screen mode.
Definition exec.c:60
int form_fmt_field(Form *, char *)
Format field according to its format type.
Definition fields.c:421
int field_editor(Form *)
Accept input for a field.
Definition fields.c:59
int form_display_field_n(Form *, int)
Display field n.
Definition fields.c:351
int form_display_field(Form *)
Display current field.
Definition fields.c:369
int form_desc_error(int, char *, char *)
Handle errors encountered while parsing the form description file, providing detailed error messages ...
int init_form(Init *, int, char **, int, int)
Initialize form data structure and parse description file.
Definition form_engine.c:59
int field_navigator(Form *)
Handle user input for field entry, allowing navigation between fields and looping until an exit actio...
bool locate_file_in_path(char *, char *)
Locates a file in the system PATH.
Definition futil.c:939
void destroy_argv(int argc, char **argv)
Deallocates memory allocated for argument strings in argv.
Definition futil.c:221
size_t canonicalize_file_spec(char *)
Removes quotes and trims at first space.
Definition futil.c:1216
size_t strnz__cpy(char *, const char *, size_t)
safer alternative to strncpy
Definition futil.c:269
bool trim_ext(char *, char *)
trims the file extension from "filename" and copies the result to "buf"
Definition futil.c:741
bool stripz_quotes(char *)
removes leading and trailing double quotes if present
Definition futil.c:469
size_t trim(char *)
Trims leading and trailing spaces from string s in place.
Definition futil.c:118
bool is_directory(const char *)
Checks if the given path is a directory.
Definition futil.c:1245
bool file_spec_path(char *, char *)
extracts the path component of a file specification
Definition futil.c:578
bool str_to_upper(char *)
Converts a string to uppercase.
Definition futil.c:247
bool dir_name(char *, char *)
Returns the directory name of a file specification.
Definition futil.c:801
double str_to_double(char *)
converts string to double
Definition futil.c:637
bool str_to_lower(char *)
Converts a string to lowercase.
Definition futil.c:233
bool lf_find(const char *, const char *, const char *, int, int)
Find files in a directory matching a regular expression.
Definition futil.c:977
bool strnfill(char *, char, int)
Fills string s with character c n.
Definition futil.c:440
size_t strnz(char *, size_t)
terminates string at New Line, Carriage Return, or max_len
Definition futil.c:340
size_t ssnprintf(char *, size_t, const char *,...)
ssnprintf was designed to be a safer alternative to snprintf.
Definition futil.c:147
bool strip_quotes(char *)
removes leading and trailing double quotes if present
Definition futil.c:454
bool is_valid_regex(const char *)
Checks if the given regular expression pattern is valid.
Definition futil.c:1256
char * strnz_dup(char *, size_t)
Allocates memory for and duplicates string s up to length l or until line feed or carriage return.
Definition futil.c:379
size_t strip_ansi(char *, char *)
Strips ANSI SGR escape sequences (ending in 'm') from string s to d.
Definition futil.c:537
bool mk_dir(char *dir)
If directory doesn't exist, make it.
Definition futil.c:1195
size_t strnz__cat(char *, const char *, size_t)
safer alternative to strncat
Definition futil.c:298
bool str_subc(char *, char *, char, char *, int)
Replaces "ReplaceChr" in "s" with "Withstr" in "d" won't copy more than "l" bytes to "d" Replaces all...
Definition futil.c:415
bool verify_file(char *, int)
Verifies that the file specified by "in_spec" exists and is accessible with the permissions specified...
Definition futil.c:892
char * rep_substring(const char *, const char *, const char *)
Replace all occurrences of "tgt_s" in "org_s" with "rep_s".
Definition futil.c:1292
size_t strnlf(char *, size_t)
terminates string with line feed
Definition futil.c:358
int a_toi(char *, bool *)
a safer alternative to atoi() for converting ASCII strings to integers.
Definition futil.c:505
bool file_spec_name(char *, char *)
extracts the file name component of a file specification
Definition futil.c:605
bool expand_tilde(char *, int)
Replace Leading Tilde With Home Directory.
Definition futil.c:684
bool verify_dir(char *, int)
Verifies that the directory specified by "spec" exists and is accessible with the permissions specifi...
Definition futil.c:841
bool chrep(char *, char, char)
Replaces all occurrences of old_chr in s with new_chr in place.
Definition futil.c:486
bool base_name(char *, char *)
Returns the base name of a file specification.
Definition futil.c:775
bool normalize_file_spec(char *)
replace backslashes with forward lashes
Definition futil.c:561
int str_to_args(char **, char *, int)
Converts a string into an array of argument strings.
Definition futil.c:167
bool trim_path(char *)
Trims trailing spaces and slashes from directory path in place.
Definition futil.c:713
size_t string_cpy(String *, const String *)
Copy src String to dest String, allocating additional memory for dest String if necessary.
Definition futil.c:1430
String to_string(const char *)
String functions provide a simple string library to facilitate string manipulation in C,...
Definition futil.c:1375
size_t string_ncpy(String *, const String *, size_t)
copies up to n characters from src String to dest String, allocating additional memory for dest Strin...
Definition futil.c:1487
size_t string_cat(String *, const String *)
Concatenates src String to dest String, allocating additional memory for dest String if necessary.
Definition futil.c:1447
String free_string(String)
Free the dynamically allocated String.
Definition futil.c:1415
size_t string_ncat(String *, const String *, size_t)
Concatenates up to n characters from src String to dest String, allocating additional memory for dest...
Definition futil.c:1466
int segmentation_fault()
Function to intentionally cause a segmentation fault for testing purposes.
Definition futil.c:1512
bool derive_file_spec(char *, char *, char *)
Derive full file specification from directory and file name.
Definition init.c:821
int write_config(Init *)
Write the current configuration to a file specified in init->minitrc.
Definition init.c:723
void mapp_initialization(Init *, int, char **)
Main initialization function for MAPP - Menu Application.
Definition init.c:324
void zero_opt_args(Init *)
Initialize optional arguments in the Init struct to default values.
Definition init.c:408
int init_view_full_screen(Init *)
Initialize C-Menu View in full screen mode.
Definition init_view.c:40
int init_view_boxwin(Init *, char *)
Initialize the C-Menu View in box window mode.
Definition init_view.c:123
int view_init_input(View *, char *)
Initialize the input for a C-Menu View.
Definition init_view.c:223
View * destroy_view(Init *init)
Destroy View structure.
Definition mem.c:346
Form * new_form(Init *, int, char **, int, int)
Create and initialize Form structure.
Definition mem.c:253
bool init_menu_files(Init *, int, char **)
Initialize Menu file specifications.
Definition mem.c:486
bool verify_spec_arg(char *, char *, char *, char *, int)
Verify file specification argument.
Definition mem.c:373
Init * new_init(int, char **)
Create and initialize Init structure.
Definition mem.c:70
Menu * new_menu(Init *, int, char **, int, int)
Create and initialize Menu structure.
Definition mem.c:148
Menu * destroy_menu(Init *init)
Destroy Menu structure.
Definition mem.c:169
Form * destroy_form(Init *init)
Destroy Form structure.
Definition mem.c:276
View * new_view(Init *)
Create and initialize View structure.
Definition mem.c:300
Pick * new_pick(Init *, int, char **, int, int)
Create and initialize Pick structure.
Definition mem.c:200
Init * destroy_init(Init *init)
Destroy Init structure.
Definition mem.c:105
Pick * destroy_pick(Init *init)
Destroy Pick structure.
Definition mem.c:230
unsigned int menu_engine(Init *)
The main loop of the menu system.
Definition menu_engine.c:37
unsigned int parse_menu_description(Init *)
Parse menu description file and create Menu.
int init_pick(Init *, int, char **, int, int)
Initializes pick structure and opens pick input file or pipe.
Definition pick_engine.c:59
int pick_engine(Init *)
Initializes pick interface, calculates window size and position, and enters picker loop.
int open_pick_win(Init *)
Initializes the pick window based on the parameters specified in the Pick structure.
bool capture_shell_tioctl()
capture_shell_tioctl() - capture shell terminal settings
Definition scriou.c:43
char di_getch()
sget single character from terminal in raw mode
Definition scriou.c:139
bool restore_curses_tioctl()
restore_curses_tioctl() - restore curses terminal settings
Definition scriou.c:81
bool capture_curses_tioctl()
capture_curses_tioctl() - capture curses terminal settings
Definition scriou.c:68
bool mk_raw_tioctl(struct termios *)
mk_raw_tioctl() - set terminal to raw mode
Definition scriou.c:126
bool set_sane_tioctl(struct termios *)
set_sane_tioctl() - set terminal to sane settings for C-MENU
Definition scriou.c:95
bool restore_shell_tioctl()
restore_shell_tioctl() - restore shell terminal settings
Definition scriou.c:56
void sig_dfl_mode()
Set signal handlers to default behavior.
Definition sig.c:42
void signal_handler(int)
Signal handler for interrupt signals.
Definition sig.c:95
void sig_prog_mode()
Set up signal handlers for interrupt signals.
Definition sig.c:62
int view_file(Init *)
Start view.
char title[MAXLEN]
Definition common.h:123
char mapp_data[MAXLEN]
Definition common.h:139
char minitrc[MAXLEN]
Definition common.h:164
bool f_out_spec
Definition common.h:161
char mapp_help[MAXLEN]
Definition common.h:140
int begx
Definition common.h:112
bool f_title
Definition common.h:156
char chyron_s[MAXLEN]
Definition common.h:122
SIO * sio
Definition common.h:108
int pick_cnt
Definition common.h:177
bool f_cmd_all
Definition common.h:155
Form * form
Definition common.h:174
char in_spec[MAXLEN]
Definition common.h:158
char cmd_all[MAXLEN]
Definition common.h:117
bool f_mapp_help
Definition common.h:147
bool f_mapp_msrc
Definition common.h:148
int argc
Definition common.h:124
char fill_char[2]
Definition common.h:137
bool f_cmd
Definition common.h:154
int prompt_type
Definition common.h:120
char about_fn[MAXLEN]
Definition common.h:165
char mapp_msrc[MAXLEN]
Definition common.h:141
int cols
Definition common.h:110
int menu_cnt
Definition common.h:173
int tab_stop
Definition common.h:171
bool f_mapp_home
Definition common.h:144
bool f_erase_remainder
Definition common.h:134
bool f_mapp_data
Definition common.h:145
bool f_mapp_desc
Definition common.h:151
char mapp_home[MAXLEN]
Definition common.h:138
bool f_mapp_user
Definition common.h:149
char prompt_str[MAXLEN]
Definition common.h:119
bool f_squeeze
Definition common.h:130
int begy
Definition common.h:111
char parent_cmd[MAXLEN]
Definition common.h:118
char mapp_spec[MAXLEN]
Definition common.h:166
char receiver_cmd[MAXLEN]
Definition common.h:115
bool f_multiple_cmd_args
Definition common.h:132
int select_max
Definition common.h:169
bool f_ln
Definition common.h:135
bool f_mapp_spec
Definition common.h:146
char provider_cmd[MAXLEN]
Definition common.h:114
char out_spec[MAXLEN]
Definition common.h:159
bool f_strip_ansi
Definition common.h:129
View * view
Definition common.h:178
Menu * menu
Definition common.h:172
bool f_at_end_remove
Definition common.h:128
int view_cnt
Definition common.h:179
char brackets[3]
Definition common.h:136
bool f_ignore_case
Definition common.h:127
char ** argv
Definition common.h:125
int lines
Definition common.h:109
char mapp_user[MAXLEN]
Definition common.h:142
char cmd[MAXLEN]
Definition common.h:116
int optind
Definition common.h:126
bool f_help_spec
Definition common.h:157
bool f_receiver_cmd
Definition common.h:153
bool f_provider_cmd
Definition common.h:152
int form_cnt
Definition common.h:175
char help_spec[MAXLEN]
Definition common.h:167
char editor[MAXLEN]
Definition common.h:162
Pick * pick
Definition common.h:176
bool f_in_spec
Definition common.h:160
char menuapp[MAXLEN]
Definition common.h:163
char text[CHYRON_KEY_MAXLEN]
Definition cm.h:233
int end_pos
Definition cm.h:236
int cp
Definition cm.h:237
int keycode
Definition cm.h:235
int l
Definition cm.h:244
cchar_t cmplx_buf[MAXLEN]
Definition cm.h:243
char s[MAXLEN]
Definition cm.h:242
ChyronKey * key[CHYRON_KEYS]
Definition cm.h:241
int r
Definition cm.h:266
int b
Definition cm.h:268
int g
Definition cm.h:267
int pair_id
Definition cm.h:305
int fg
Definition cm.h:303
int bg
Definition cm.h:304
char * s
Definition cm.h:570
size_t l
Definition cm.h:571
Arg ** v
Definition cm.h:577
size_t n
Definition cm.h:579
size_t l
Definition cm.h:586
char * s
Definition cm.h:585
size_t l
allocated length
Definition cm.h:595
wchar_t * s
Definition cm.h:594
size_t l
Definition cm.h:607
cchar_t * s
Definition cm.h:606
double green_gamma
Definition cm.h:628
char black[COLOR_LEN]
Definition cm.h:631
FILE * stdout_fp
Definition cm.h:658
char bg_clr_x[COLOR_LEN]
Definition cm.h:652
char fg_clr_x[COLOR_LEN]
Definition cm.h:651
int cp_reverse_highlight
Definition cm.h:673
double blue_gamma
Definition cm.h:629
int clr_idx
Definition cm.h:667
char bred[COLOR_LEN]
Definition cm.h:641
char yellow[COLOR_LEN]
Definition cm.h:634
int cp_ln_bg
Definition cm.h:679
int clr_cnt
Definition cm.h:665
int stdout_fd
Definition cm.h:662
char bo_clr_x[COLOR_LEN]
Definition cm.h:653
char abg[COLOR_LEN]
Definition cm.h:650
int stderr_fd
Definition cm.h:663
int cp_ln
Definition cm.h:678
int cp_box
Definition cm.h:674
FILE * stdin_fp
Definition cm.h:657
char bcyan[COLOR_LEN]
Definition cm.h:646
char borange[COLOR_LEN]
Definition cm.h:648
double red_gamma
Definition cm.h:627
char red[COLOR_LEN]
Definition cm.h:632
FILE * tty_fp
Definition cm.h:660
char magenta[COLOR_LEN]
Definition cm.h:636
char bgreen[COLOR_LEN]
Definition cm.h:642
int cp_bold
Definition cm.h:675
char ln_clr_x[COLOR_LEN]
Definition cm.h:654
char byellow[COLOR_LEN]
Definition cm.h:643
char bwhite[COLOR_LEN]
Definition cm.h:647
int cp_reverse
Definition cm.h:672
char ln_bg_clr_x[COLOR_LEN]
Definition cm.h:655
char cyan[COLOR_LEN]
Definition cm.h:637
int cp_default
Definition cm.h:669
FILE * stderr_fp
Definition cm.h:659
char tty_name[MAXLEN]
Definition cm.h:656
int cp_highlight
Definition cm.h:677
int cp_title
Definition cm.h:676
char orange[COLOR_LEN]
Definition cm.h:639
int clr_pair_cnt
Definition cm.h:666
char green[COLOR_LEN]
Definition cm.h:633
char white[COLOR_LEN]
Definition cm.h:638
char bg[COLOR_LEN]
Definition cm.h:649
char bblue[COLOR_LEN]
Definition cm.h:644
int tty_fd
Definition cm.h:664
int cp_norm
Definition cm.h:670
char bmagenta[COLOR_LEN]
Definition cm.h:645
char blue[COLOR_LEN]
Definition cm.h:635
int cp_win
Definition cm.h:671
int stdin_fd
Definition cm.h:661
double gray_gamma
Definition cm.h:630
char bblack[COLOR_LEN]
Definition cm.h:640
int clr_pair_idx
Definition cm.h:668
int len
Definition form.h:108
int col
Definition form.h:104
char str[SCR_COLS]
Definition form.h:106
int line
Definition form.h:102
int line
Definition form.h:115
char display_s[FIELD_MAXLEN]
Definition form.h:132
char accept_s[FIELD_MAXLEN]
Definition form.h:128
int ff
Definition form.h:121
int col
Definition form.h:117
char input_s[FIELD_MAXLEN]
Definition form.h:125
int len
Definition form.h:119
char filler_s[FIELD_MAXLEN]
Definition form.h:137
FILE * out_fp
Definition form.h:161
Text * text[FIELD_MAXCNT]
Definition form.h:331
bool f_in_pipe
Definition form.h:221
bool f_mapp_spec
Definition form.h:192
bool f_erase_remainder
Definition form.h:235
WINDOW * box
Definition form.h:156
Field * field[FIELD_MAXCNT]
Definition form.h:344
char receiver_cmd[MAXLEN]
Definition form.h:178
bool f_process
Definition form.h:245
int didx
Definition form.h:316
int begy
Definition form.h:151
char provider_cmd[MAXLEN]
Definition form.h:170
bool f_query
Definition form.h:247
int out_fd
Definition form.h:165
int cols
Definition form.h:150
int lines
Definition form.h:149
int fcnt
Definition form.h:309
int begx
Definition form.h:153
bool f_out_pipe
Definition form.h:226
int fidx
Definition form.h:301
bool f_provider_cmd
Definition form.h:255
bool f_calculate
Definition form.h:243
int bg_clr_idx
Definition form.h:147
char fill_char[2]
Definition form.h:290
bool help
Definition form.h:249
bool f_cmd
Definition form.h:270
bool f_help_spec
Definition form.h:231
FILE * in_fp
Definition form.h:159
char out_spec[MAXLEN]
Definition form.h:208
Chyron * chyron
Definition form.h:356
int bo_clr_idx
Definition form.h:148
bool f_receiver_cmd
Definition form.h:262
char in_spec[MAXLEN]
Definition form.h:201
char mapp_spec[FIELD_MAXLEN]
Definition form.h:167
char cmd[MAXLEN]
Definition form.h:185
char title[MAXLEN]
Definition form.h:157
char brackets[3]
Definition form.h:278
int dcnt
Definition form.h:323
int fg_clr_idx
Definition form.h:146
bool f_out_spec
Definition form.h:218
WINDOW * win
Definition form.h:155
bool f_in_spec
Definition form.h:215
int in_fd
Definition form.h:163
char help_spec[MAXLEN]
Definition form.h:194