1995-01-30 03:41:29 +01:00
|
|
|
/*-
|
|
|
|
* Copyright (c) 1995
|
|
|
|
* Paul Richards. All rights reserved.
|
1995-01-10 05:00:37 +01:00
|
|
|
*
|
1995-01-30 03:41:29 +01:00
|
|
|
* Redistribution and use in source and binary forms, with or without
|
|
|
|
* modification, are permitted provided that the following conditions
|
|
|
|
* are met:
|
|
|
|
* 1. Redistributions of source code must retain the above copyright
|
|
|
|
* notice, this list of conditions and the following disclaimer,
|
|
|
|
* verbatim and that no modifications are made prior to this
|
|
|
|
* point in the file.
|
|
|
|
* 2. Redistributions in binary form must reproduce the above copyright
|
|
|
|
* notice, this list of conditions and the following disclaimer in the
|
|
|
|
* documentation and/or other materials provided with the distribution.
|
|
|
|
* 3. All advertising materials mentioning features or use of this software
|
|
|
|
* must display the following acknowledgement:
|
|
|
|
* This product includes software developed by Paul Richards.
|
|
|
|
* 4. The name Paul Richards may not be used to endorse or promote products
|
|
|
|
* derived from this software without specific prior written permission.
|
|
|
|
*
|
|
|
|
* THIS SOFTWARE IS PROVIDED BY PAUL RICHARDS ``AS IS'' AND
|
|
|
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
|
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
|
|
* ARE DISCLAIMED. IN NO EVENT SHALL PAUL RICHARDS BE LIABLE
|
|
|
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
|
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
|
|
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
|
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
|
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
|
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
|
|
* SUCH DAMAGE.
|
1995-01-10 05:00:37 +01:00
|
|
|
*
|
|
|
|
*/
|
1994-11-13 07:45:44 +01:00
|
|
|
|
1995-01-10 05:00:37 +01:00
|
|
|
#include <ncurses.h>
|
1994-11-13 07:45:44 +01:00
|
|
|
|
1995-03-01 09:19:06 +01:00
|
|
|
#define FF_UNKNOWN 0
|
|
|
|
#define FF_TEXT 1
|
|
|
|
#define FF_ACTION 2
|
|
|
|
#define FF_INPUT 3
|
|
|
|
#define FF_MENU 4
|
1994-11-13 07:45:44 +01:00
|
|
|
|
1995-01-10 05:00:37 +01:00
|
|
|
#define F_DEFATTR 0
|
|
|
|
#define F_SELATTR A_REVERSE
|
1994-11-13 07:45:44 +01:00
|
|
|
|
1995-03-01 09:19:06 +01:00
|
|
|
/* Status values */
|
|
|
|
|
|
|
|
#define FS_ERROR -1
|
|
|
|
#define FS_OK 0
|
|
|
|
#define FS_EXIT 1
|
|
|
|
#define FS_CANCEL 2
|
|
|
|
#define FS_NOBIND 3
|
|
|
|
#define FS_RUNNING 4
|
|
|
|
|
|
|
|
|
|
|
|
typedef enum {
|
|
|
|
FT_ANY,
|
|
|
|
FT_FORM,
|
|
|
|
FT_COLTAB,
|
|
|
|
FT_FIELD_INST,
|
|
|
|
FT_FIELD_DEF,
|
|
|
|
FT_FUNC
|
|
|
|
} TupleType;
|
|
|
|
|
|
|
|
struct Tuple {
|
|
|
|
char *name;
|
|
|
|
int type;
|
|
|
|
void *addr;
|
|
|
|
struct Tuple *next;
|
|
|
|
};
|
1994-11-13 08:43:43 +01:00
|
|
|
|
1995-01-30 03:41:29 +01:00
|
|
|
struct col_pair {
|
|
|
|
int f;
|
|
|
|
int b;
|
|
|
|
};
|
|
|
|
|
1995-03-01 09:19:06 +01:00
|
|
|
struct Form {
|
|
|
|
int status;
|
1995-01-10 05:00:37 +01:00
|
|
|
int no_fields;
|
1995-03-01 09:19:06 +01:00
|
|
|
char *startfield;
|
|
|
|
struct Field *current_field;
|
|
|
|
struct Field *prev_field;
|
1995-01-24 14:27:46 +01:00
|
|
|
int height;
|
|
|
|
int width;
|
1994-11-13 07:45:44 +01:00
|
|
|
int y;
|
1995-01-10 05:00:37 +01:00
|
|
|
int x;
|
1995-01-30 03:41:29 +01:00
|
|
|
int attr;
|
1995-03-01 09:19:06 +01:00
|
|
|
char *colortable;
|
1995-01-10 05:00:37 +01:00
|
|
|
WINDOW *window;
|
1995-03-26 09:44:33 +02:00
|
|
|
hash_table *bindings;
|
1995-01-10 05:00:37 +01:00
|
|
|
};
|
|
|
|
|
1995-03-01 09:19:06 +01:00
|
|
|
struct TextField {
|
1995-01-10 05:00:37 +01:00
|
|
|
char *text;
|
1994-11-13 07:45:44 +01:00
|
|
|
};
|
|
|
|
|
1995-03-01 09:19:06 +01:00
|
|
|
struct ActionField {
|
1995-01-10 05:00:37 +01:00
|
|
|
char *text;
|
1995-03-01 09:19:06 +01:00
|
|
|
char *fn;
|
1995-01-10 05:00:37 +01:00
|
|
|
};
|
1994-11-13 08:43:43 +01:00
|
|
|
|
1995-03-01 09:19:06 +01:00
|
|
|
struct InputField {
|
1995-01-10 05:00:37 +01:00
|
|
|
int lbl_flag;
|
|
|
|
char *label;
|
|
|
|
char *input;
|
1995-01-25 04:33:43 +01:00
|
|
|
int limit;
|
1994-11-13 07:45:44 +01:00
|
|
|
};
|
|
|
|
|
1995-03-01 09:19:06 +01:00
|
|
|
struct MenuField {
|
1995-01-10 05:00:37 +01:00
|
|
|
int selected;
|
1995-03-01 09:19:06 +01:00
|
|
|
int no_options;
|
1995-01-10 05:00:37 +01:00
|
|
|
char **options;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct help_link {
|
1994-11-13 07:45:44 +01:00
|
|
|
};
|
|
|
|
|
1995-03-01 09:19:06 +01:00
|
|
|
struct Field {
|
|
|
|
char *defname;
|
1995-03-26 09:44:33 +02:00
|
|
|
char *enter;
|
|
|
|
char *leave;
|
1994-11-13 07:45:44 +01:00
|
|
|
int type;
|
1995-01-10 05:00:37 +01:00
|
|
|
int y;
|
|
|
|
int x;
|
1995-02-01 05:06:37 +01:00
|
|
|
int height;
|
1995-01-10 05:00:37 +01:00
|
|
|
int width;
|
|
|
|
int attr;
|
1995-01-30 03:41:29 +01:00
|
|
|
int selattr;
|
1995-03-01 09:19:06 +01:00
|
|
|
char *fnext;
|
|
|
|
char *fup;
|
|
|
|
char *fdown;
|
|
|
|
char *fleft;
|
|
|
|
char *fright;
|
|
|
|
char *f_keymap;
|
1994-11-13 07:45:44 +01:00
|
|
|
union {
|
1995-03-01 09:19:06 +01:00
|
|
|
struct TextField *text;
|
|
|
|
struct ActionField *action;
|
|
|
|
struct InputField *input;
|
|
|
|
struct MenuField *menu;
|
1995-01-10 05:00:37 +01:00
|
|
|
}field;
|
|
|
|
/*
|
|
|
|
struct help_link help;
|
|
|
|
*/
|
1994-11-13 07:45:44 +01:00
|
|
|
};
|
|
|
|
|
1995-01-10 05:00:37 +01:00
|
|
|
/* Externally visible keymap table for user-definable keymaps */
|
|
|
|
extern unsigned int keymap[];
|
1994-11-13 07:45:44 +01:00
|
|
|
|
1995-01-10 05:00:37 +01:00
|
|
|
/* Externally visible function declarations */
|
1995-03-26 09:44:33 +02:00
|
|
|
struct Form *form_start(char *);
|
|
|
|
struct Tuple *form_get_tuple(hash_table *, char *, TupleType);
|
|
|
|
int form_bind_tuple(hash_table *, char *, TupleType, void *);
|
1995-03-01 09:19:06 +01:00
|
|
|
void print_status(char *);
|
|
|
|
void exit_form(struct Form *form);
|
|
|
|
void cancel_form(struct Form *form);
|
1995-02-01 05:06:37 +01:00
|
|
|
void print_status(char *);
|
1995-03-26 09:44:33 +02:00
|
|
|
int add_menu_option(struct MenuField *, char *);
|