summaryrefslogtreecommitdiffstats
path: root/lib/libforms/forms.h
diff options
context:
space:
mode:
Diffstat (limited to 'lib/libforms/forms.h')
-rw-r--r--lib/libforms/forms.h189
1 files changed, 189 insertions, 0 deletions
diff --git a/lib/libforms/forms.h b/lib/libforms/forms.h
new file mode 100644
index 0000000..d5bd723
--- /dev/null
+++ b/lib/libforms/forms.h
@@ -0,0 +1,189 @@
+/*-
+ * Copyright (c) 1995
+ * Paul Richards. All rights reserved.
+ *
+ * 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.
+ *
+ */
+
+#ifndef _FORMS_H_
+#define _FORMS_H_
+
+#include <ncurses.h>
+#include <strhash.h>
+
+#define F_DEFATTR 0
+#define F_SELATTR A_REVERSE
+
+/* Status values */
+
+#define ST_ERROR -1
+#define ST_OK 0
+#define ST_DONE 1
+#define ST_CANCEL 2
+#define ST_NOBIND 3
+#define ST_RUNNING 4
+
+typedef enum {
+ TT_ANY,
+ TT_OBJ_INST,
+ TT_OBJ_DEF,
+ TT_FUNC,
+ TT_DISPLAY,
+ TT_ATTR
+} TupleType;
+
+typedef enum {
+ DT_ANY,
+ DT_NCURSES,
+ DT_X,
+ DT_VGA
+} DisplayType;
+
+typedef enum {
+ OT_ACTION,
+ OT_COMPOUND,
+ OT_FUNCTION,
+ OT_INPUT,
+ OT_MENU,
+ OT_SHADOW,
+ OT_TEXT
+} ObjectType;
+
+#define FUNCP void(*)(void *)
+
+typedef struct Tuple {
+ char *name;
+ int type;
+ void (*addr)(void *);
+} TUPLE;
+
+typedef struct NcursesDevice {
+ char *ttyname;
+ char *input;
+ char *output;
+ SCREEN *screen;
+} NCURSDEV;
+
+typedef struct NcursesWindow {
+ WINDOW *win;
+} NCURSES_WINDOW;
+
+typedef struct Display {
+ DisplayType type;
+ int height;
+ int width;
+ int virt_height;
+ int virt_width;
+ union {
+ NCURSDEV *ncurses;
+ } device;
+ hash_table *bind;
+} DISPLAY;
+
+typedef struct ActionObject {
+ char *text;
+ char *action;
+} ACTION_OBJECT;
+
+typedef struct CompoundObject {
+ char *defobj;
+} COMPOUND_OBJECT;
+
+typedef struct FunctionObject {
+ char *fn;
+} FUNCTION_OBJECT;
+
+typedef struct InputObject {
+ int lbl_flag;
+ char *label;
+ char *input;
+ int limit;
+} INPUT_OBJECT;
+
+typedef struct MenuObject {
+ int selected;
+ int no_options;
+ char **options;
+} MENU_OBJECT;
+
+typedef struct TextObject {
+ char *text;
+} TEXT_OBJECT;
+
+typedef union {
+ NCURSES_WINDOW *ncurses;
+} WIN;
+
+typedef union {
+ ACTION_OBJECT *action;
+ COMPOUND_OBJECT *compound;
+ FUNCTION_OBJECT *function;
+ INPUT_OBJECT *input;
+ MENU_OBJECT *menu;
+ TEXT_OBJECT *text;
+} OBJ_TYPE;
+
+typedef struct Object {
+ ObjectType type;
+ int status;
+ struct Object *parent;
+ int y;
+ int x;
+ int height;
+ int width;
+ char *attributes;
+ char *highlight;
+ char *lnext;
+ char *lup;
+ char *ldown;
+ char *lleft;
+ char *lright;
+ char *UserDrawFunc;
+ char *UserProcFunc;
+ char *OnEntry;
+ char *OnExit;
+ OBJ_TYPE object;
+ hash_table *bind;
+ struct Display *display;
+ WIN window;
+} OBJECT;
+
+/* Externally visible variables */
+extern hash_table *root_table;
+
+/* Function declarations */
+__inline struct Tuple *get_tuple(hash_table *, char *, TupleType);
+TUPLE *tuple_search(OBJECT *, char *, TupleType);
+int bind_tuple(hash_table *, char *, TupleType, void(*fn)());
+int add_menu_option(MENU_OBJECT *, char *);
+void draw_box(OBJECT *);
+void draw_shadow(OBJECT *);
+
+#endif /* _FORMS_H_ */
OpenPOWER on IntegriCloud