summaryrefslogtreecommitdiff
path: root/Ada95/gen/gen.c
diff options
context:
space:
mode:
Diffstat (limited to 'Ada95/gen/gen.c')
-rw-r--r--Ada95/gen/gen.c210
1 files changed, 127 insertions, 83 deletions
diff --git a/Ada95/gen/gen.c b/Ada95/gen/gen.c
index b204236..51bc161 100644
--- a/Ada95/gen/gen.c
+++ b/Ada95/gen/gen.c
@@ -29,11 +29,13 @@
/****************************************************************************
* Author: Juergen Pfeifer, 1996 *
+ * and: Thomas E. Dickey, 1998 *
+ * and: Nicolas Boulenguez, 2011 *
****************************************************************************/
/*
Version Control
- $Id: gen.c,v 1.71 2020/02/02 23:34:34 tom Exp $
+ $Id: gen.c,v 1.77 2020/08/16 18:05:05 tom Exp $
--------------------------------------------------------------------------*/
/*
This program prints on its standard output the source for the
@@ -55,9 +57,11 @@
#undef UCHAR
#undef UINT
+#undef ULONG
typedef unsigned char UCHAR;
typedef unsigned int UINT;
+typedef unsigned long ULONG;
/* These global variables will be set by main () */
static int little_endian;
@@ -71,19 +75,36 @@ my_error(const char *message)
}
static void
-print_constant(const char *name,
+print_constant(FILE * fp,
+ const char *name,
+ UINT value)
+{
+ fprintf(fp, " %-28s : constant := %u;\n", name, value);
+}
+
+static void
+print_long_val(FILE * fp,
+ const char *name,
long value)
{
- printf(" %-28s : constant := %ld;\n", name, value);
+ fprintf(fp, " %-28s : constant := %ld;\n", name, value);
+}
+
+static void
+print_size_of(FILE * fp,
+ const char *name,
+ size_t value)
+{
+ fprintf(fp, " %-28s : constant := %lu;\n", name, value);
}
#define PRINT_NAMED_CONSTANT(name) \
- print_constant (#name, name)
+ print_long_val (fp, #name, name)
static void
-print_comment(const char *message)
+print_comment(FILE * fp, const char *message)
{
- printf("\n -- %s\n\n", message);
+ fprintf(fp, "\n -- %s\n\n", message);
}
/*
@@ -142,8 +163,8 @@ find_pos(const UCHAR * const data,
c_type mask = (mask_macro); \
if (!find_pos ((UCHAR *)&mask, sizeof (mask), &first, &last)) \
my_error ("failed to locate " ada_name); \
- print_constant (ada_name "_First", first); \
- print_constant (ada_name "_Last", last); \
+ print_constant (fp, ada_name "_First", first); \
+ print_constant (fp, ada_name "_Last", last); \
}
#define PRINT_NAMED_BITMASK(c_type, mask_macro) \
@@ -157,8 +178,8 @@ find_pos(const UCHAR * const data,
memset (&mask.field, 0xff, sizeof(mask.field)); \
if (!find_pos ((UCHAR *)&mask, sizeof (mask), &first, &last)) \
my_error ("failed to locate" #record "_" #field); \
- print_constant (#record "_" #field "_First", first); \
- print_constant (#record "_" #field "_Last", last); \
+ print_constant (fp, #record "_" #field "_First", first); \
+ print_constant (fp, #record "_" #field "_Last", last); \
}
/*--------------------*/
@@ -168,6 +189,7 @@ find_pos(const UCHAR * const data,
int
main(int argc, const char *argv[])
{
+ FILE *fp = 0;
const int x = 0x12345678;
little_endian = (*((const char *)&x) == 0x78);
@@ -177,40 +199,61 @@ main(int argc, const char *argv[])
if (KEY_MIN == 256)
my_error("unexpected value for KEY_MIN: 256");
- if (argc != 2)
- my_error("Only one argument expected (DFT_ARG_SUFFIX)");
-
- printf("-- Generated by the C program %s (source " __FILE__ ").\n",
- my_program_invocation_name);
- printf("-- Do not edit this file directly.\n");
- printf("-- The values provided here may vary on your system.\n");
- printf("\n");
- printf("with System;\n");
- printf("package Terminal_Interface.Curses_Constants is\n");
- printf(" pragma Pure;\n");
- printf("\n");
+ if (argc == 3)
+ {
+ fp = fopen(argv[2], "wb");
+ }
+ else if (argc == 2)
+ {
+ fp = stdout;
+ }
+ else
+ {
+ my_error("Only one or two arguments expected (DFT_ARG_SUFFIX)");
+ }
- printf(" DFT_ARG_SUFFIX : constant String := \"%s\";\n", argv[1]);
- printf(" Bit_Order : constant System.Bit_Order := System.%s_Order_First;\n",
- little_endian ? "Low" : "High");
- print_constant("Sizeof_Bool", 8 * sizeof(bool));
+ if ((strlen(argv[0]) + strlen(__FILE__)) > 25)
+ {
+ fprintf(fp, "-- Generated by the C program %.40s.\n",
+ my_program_invocation_name);
+ }
+ else
+ {
+ fprintf(fp, "-- Generated by the C program %s (source %s).\n",
+ my_program_invocation_name,
+ __FILE__);
+ }
+ fprintf(fp, "-- Do not edit this file directly.\n");
+ fprintf(fp, "-- The values provided here may vary on your system.\n");
+ fprintf(fp, "\n");
+ fprintf(fp, "with System;\n");
+ fprintf(fp, "package Terminal_Interface.Curses_Constants is\n");
+ fprintf(fp, " pragma Pure;\n");
+ fprintf(fp, "\n");
+
+ fprintf(fp, " DFT_ARG_SUFFIX : constant String := \"%s\";\n", argv[1]);
+ fprintf(fp,
+ " Bit_Order : constant System.Bit_Order := System.%s_Order_First;\n",
+ little_endian ? "Low" : "High");
+ print_size_of(fp, "Sizeof_Bool", 8 * sizeof(bool));
PRINT_NAMED_CONSTANT(OK);
PRINT_NAMED_CONSTANT(ERR);
- printf(" pragma Warnings (Off); -- redefinition of Standard.True and False\n");
+ fprintf(fp,
+ " pragma Warnings (Off); -- redefinition of Standard.True and False\n");
PRINT_NAMED_CONSTANT(TRUE);
PRINT_NAMED_CONSTANT(FALSE);
- printf(" pragma Warnings (On);\n");
+ fprintf(fp, " pragma Warnings (On);\n");
- print_comment("Version of the ncurses library from extensions(3NCURSES)");
+ print_comment(fp, "Version of the ncurses library from extensions(3NCURSES)");
PRINT_NAMED_CONSTANT(NCURSES_VERSION_MAJOR);
PRINT_NAMED_CONSTANT(NCURSES_VERSION_MINOR);
- printf(" Version : constant String := \"%d.%d\";\n",
- NCURSES_VERSION_MAJOR, NCURSES_VERSION_MINOR);
+ fprintf(fp, " Version : constant String := \"%d.%d\";\n",
+ NCURSES_VERSION_MAJOR, NCURSES_VERSION_MINOR);
- print_comment("Character non-color attributes from attr(3NCURSES)");
- printf(" -- attr_t and chtype may be signed in C.\n");
- printf(" type attr_t is mod 2 ** %lu;\n", (long unsigned)(8 * sizeof(attr_t)));
+ print_comment(fp, "Character non-color attributes from attr(3NCURSES)");
+ fprintf(fp, " -- attr_t and chtype may be signed in C.\n");
+ fprintf(fp, " type attr_t is mod 2 ** %lu;\n", (long unsigned)(8 * sizeof(attr_t)));
PRINT_NAMED_BITMASK(attr_t, A_CHARTEXT);
PRINT_NAMED_BITMASK(attr_t, A_COLOR);
PRINT_BITMASK(attr_t, "Attr", A_ATTRIBUTES & ~A_COLOR);
@@ -229,9 +272,9 @@ main(int argc, const char *argv[])
PRINT_NAMED_BITMASK(attr_t, A_RIGHT);
PRINT_NAMED_BITMASK(attr_t, A_TOP);
PRINT_NAMED_BITMASK(attr_t, A_VERTICAL);
- print_constant("chtype_Size", 8 * sizeof(chtype));
+ print_size_of(fp, "chtype_Size", 8 * sizeof(chtype));
- print_comment("predefined color numbers from color(3NCURSES)");
+ print_comment(fp, "predefined color numbers from color(3NCURSES)");
PRINT_NAMED_CONSTANT(COLOR_BLACK);
PRINT_NAMED_CONSTANT(COLOR_RED);
PRINT_NAMED_CONSTANT(COLOR_GREEN);
@@ -241,7 +284,7 @@ main(int argc, const char *argv[])
PRINT_NAMED_CONSTANT(COLOR_CYAN);
PRINT_NAMED_CONSTANT(COLOR_WHITE);
- print_comment("ETI return codes from ncurses.h");
+ print_comment(fp, "ETI return codes from ncurses.h");
PRINT_NAMED_CONSTANT(E_OK);
PRINT_NAMED_CONSTANT(E_SYSTEM_ERROR);
PRINT_NAMED_CONSTANT(E_BAD_ARGUMENT);
@@ -258,14 +301,14 @@ main(int argc, const char *argv[])
PRINT_NAMED_CONSTANT(E_INVALID_FIELD);
PRINT_NAMED_CONSTANT(E_CURRENT);
- print_comment("Input key codes not defined in any ncurses manpage");
+ print_comment(fp, "Input key codes not defined in any ncurses manpage");
PRINT_NAMED_CONSTANT(KEY_MIN);
PRINT_NAMED_CONSTANT(KEY_MAX);
#ifdef KEY_CODE_YES
PRINT_NAMED_CONSTANT(KEY_CODE_YES);
#endif
- print_comment("Input key codes from getch(3NCURSES)");
+ print_comment(fp, "Input key codes from getch(3NCURSES)");
PRINT_NAMED_CONSTANT(KEY_BREAK);
PRINT_NAMED_CONSTANT(KEY_DOWN);
PRINT_NAMED_CONSTANT(KEY_UP);
@@ -274,30 +317,31 @@ main(int argc, const char *argv[])
PRINT_NAMED_CONSTANT(KEY_HOME);
PRINT_NAMED_CONSTANT(KEY_BACKSPACE);
PRINT_NAMED_CONSTANT(KEY_F0);
- print_constant("KEY_F1", KEY_F(1));
- print_constant("KEY_F2", KEY_F(2));
- print_constant("KEY_F3", KEY_F(3));
- print_constant("KEY_F4", KEY_F(4));
- print_constant("KEY_F5", KEY_F(5));
- print_constant("KEY_F6", KEY_F(6));
- print_constant("KEY_F7", KEY_F(7));
- print_constant("KEY_F8", KEY_F(8));
- print_constant("KEY_F9", KEY_F(9));
- print_constant("KEY_F10", KEY_F(10));
- print_constant("KEY_F11", KEY_F(11));
- print_constant("KEY_F12", KEY_F(12));
- print_constant("KEY_F13", KEY_F(13));
- print_constant("KEY_F14", KEY_F(14));
- print_constant("KEY_F15", KEY_F(15));
- print_constant("KEY_F16", KEY_F(16));
- print_constant("KEY_F17", KEY_F(17));
- print_constant("KEY_F18", KEY_F(18));
- print_constant("KEY_F19", KEY_F(19));
- print_constant("KEY_F20", KEY_F(20));
- print_constant("KEY_F21", KEY_F(21));
- print_constant("KEY_F22", KEY_F(22));
- print_constant("KEY_F23", KEY_F(23));
- print_constant("KEY_F24", KEY_F(24));
+#define PRINT_NAMED_FUNC_KEY(name) print_constant(fp, "KEY_F"#name, KEY_F(name))
+ PRINT_NAMED_FUNC_KEY(1);
+ PRINT_NAMED_FUNC_KEY(2);
+ PRINT_NAMED_FUNC_KEY(3);
+ PRINT_NAMED_FUNC_KEY(4);
+ PRINT_NAMED_FUNC_KEY(5);
+ PRINT_NAMED_FUNC_KEY(6);
+ PRINT_NAMED_FUNC_KEY(7);
+ PRINT_NAMED_FUNC_KEY(8);
+ PRINT_NAMED_FUNC_KEY(9);
+ PRINT_NAMED_FUNC_KEY(10);
+ PRINT_NAMED_FUNC_KEY(11);
+ PRINT_NAMED_FUNC_KEY(12);
+ PRINT_NAMED_FUNC_KEY(13);
+ PRINT_NAMED_FUNC_KEY(14);
+ PRINT_NAMED_FUNC_KEY(15);
+ PRINT_NAMED_FUNC_KEY(16);
+ PRINT_NAMED_FUNC_KEY(17);
+ PRINT_NAMED_FUNC_KEY(18);
+ PRINT_NAMED_FUNC_KEY(19);
+ PRINT_NAMED_FUNC_KEY(20);
+ PRINT_NAMED_FUNC_KEY(21);
+ PRINT_NAMED_FUNC_KEY(22);
+ PRINT_NAMED_FUNC_KEY(23);
+ PRINT_NAMED_FUNC_KEY(24);
PRINT_NAMED_CONSTANT(KEY_DL);
PRINT_NAMED_CONSTANT(KEY_IL);
PRINT_NAMED_CONSTANT(KEY_DC);
@@ -382,8 +426,8 @@ main(int argc, const char *argv[])
PRINT_NAMED_CONSTANT(KEY_MOUSE);
PRINT_NAMED_CONSTANT(KEY_RESIZE);
- print_comment("alternate character codes (ACS) from addch(3NCURSES)");
-#define PRINT_ACS(name) print_constant (#name, &name - &acs_map[0])
+ print_comment(fp, "alternate character codes (ACS) from addch(3NCURSES)");
+#define PRINT_ACS(name) print_size_of (fp, #name, (size_t)(&name - &acs_map[0]))
PRINT_ACS(ACS_ULCORNER);
PRINT_ACS(ACS_LLCORNER);
PRINT_ACS(ACS_URCORNER);
@@ -417,20 +461,20 @@ main(int argc, const char *argv[])
PRINT_ACS(ACS_NEQUAL);
PRINT_ACS(ACS_STERLING);
- print_comment("Menu_Options from opts(3MENU)");
+ print_comment(fp, "Menu_Options from opts(3MENU)");
PRINT_NAMED_BITMASK(Menu_Options, O_ONEVALUE);
PRINT_NAMED_BITMASK(Menu_Options, O_SHOWDESC);
PRINT_NAMED_BITMASK(Menu_Options, O_ROWMAJOR);
PRINT_NAMED_BITMASK(Menu_Options, O_IGNORECASE);
PRINT_NAMED_BITMASK(Menu_Options, O_SHOWMATCH);
PRINT_NAMED_BITMASK(Menu_Options, O_NONCYCLIC);
- print_constant("Menu_Options_Size", 8 * sizeof(Menu_Options));
+ print_size_of(fp, "Menu_Options_Size", 8 * sizeof(Menu_Options));
- print_comment("Item_Options from menu_opts(3MENU)");
+ print_comment(fp, "Item_Options from menu_opts(3MENU)");
PRINT_NAMED_BITMASK(Item_Options, O_SELECTABLE);
- print_constant("Item_Options_Size", 8 * sizeof(Item_Options));
+ print_size_of(fp, "Item_Options_Size", 8 * sizeof(Item_Options));
- print_comment("Field_Options from field_opts(3FORM)");
+ print_comment(fp, "Field_Options from field_opts(3FORM)");
PRINT_NAMED_BITMASK(Field_Options, O_VISIBLE);
PRINT_NAMED_BITMASK(Field_Options, O_ACTIVE);
PRINT_NAMED_BITMASK(Field_Options, O_PUBLIC);
@@ -441,27 +485,27 @@ main(int argc, const char *argv[])
PRINT_NAMED_BITMASK(Field_Options, O_NULLOK);
PRINT_NAMED_BITMASK(Field_Options, O_PASSOK);
PRINT_NAMED_BITMASK(Field_Options, O_STATIC);
- print_constant("Field_Options_Size", 8 * sizeof(Field_Options));
+ print_size_of(fp, "Field_Options_Size", 8 * sizeof(Field_Options));
- print_comment("Field_Options from opts(3FORM)");
+ print_comment(fp, "Field_Options from opts(3FORM)");
PRINT_NAMED_BITMASK(Field_Options, O_NL_OVERLOAD);
PRINT_NAMED_BITMASK(Field_Options, O_BS_OVERLOAD);
/* Field_Options_Size is defined below */
- print_comment("MEVENT structure from mouse(3NCURSES)");
+ print_comment(fp, "MEVENT structure from mouse(3NCURSES)");
STRUCT_OFFSET(MEVENT, id);
STRUCT_OFFSET(MEVENT, x);
STRUCT_OFFSET(MEVENT, y);
STRUCT_OFFSET(MEVENT, z);
STRUCT_OFFSET(MEVENT, bstate);
- print_constant("MEVENT_Size", 8 * sizeof(MEVENT));
+ print_size_of(fp, "MEVENT_Size", 8 * sizeof(MEVENT));
- print_comment("mouse events from mouse(3NCURSES)");
+ print_comment(fp, "mouse events from mouse(3NCURSES)");
{
mmask_t all_events;
#define PRINT_MOUSE_EVENT(event) \
- print_constant (#event, event); \
+ print_constant (fp, #event, event); \
all_events |= event
all_events = 0;
@@ -473,7 +517,7 @@ main(int argc, const char *argv[])
#ifdef BUTTON1_RESERVED_EVENT
PRINT_MOUSE_EVENT(BUTTON1_RESERVED_EVENT);
#endif
- print_constant("all_events_button_1", (long)all_events);
+ print_constant(fp, "all_events_button_1", (UINT) all_events);
all_events = 0;
PRINT_MOUSE_EVENT(BUTTON2_RELEASED);
@@ -484,7 +528,7 @@ main(int argc, const char *argv[])
#ifdef BUTTON2_RESERVED_EVENT
PRINT_MOUSE_EVENT(BUTTON2_RESERVED_EVENT);
#endif
- print_constant("all_events_button_2", (long)all_events);
+ print_constant(fp, "all_events_button_2", (UINT) all_events);
all_events = 0;
PRINT_MOUSE_EVENT(BUTTON3_RELEASED);
@@ -495,7 +539,7 @@ main(int argc, const char *argv[])
#ifdef BUTTON3_RESERVED_EVENT
PRINT_MOUSE_EVENT(BUTTON3_RESERVED_EVENT);
#endif
- print_constant("all_events_button_3", (long)all_events);
+ print_constant(fp, "all_events_button_3", (UINT) all_events);
all_events = 0;
PRINT_MOUSE_EVENT(BUTTON4_RELEASED);
@@ -506,7 +550,7 @@ main(int argc, const char *argv[])
#ifdef BUTTON4_RESERVED_EVENT
PRINT_MOUSE_EVENT(BUTTON4_RESERVED_EVENT);
#endif
- print_constant("all_events_button_4", (long)all_events);
+ print_constant(fp, "all_events_button_4", (UINT) all_events);
}
PRINT_NAMED_CONSTANT(BUTTON_CTRL);
PRINT_NAMED_CONSTANT(BUTTON_SHIFT);
@@ -514,7 +558,7 @@ main(int argc, const char *argv[])
PRINT_NAMED_CONSTANT(REPORT_MOUSE_POSITION);
PRINT_NAMED_CONSTANT(ALL_MOUSE_EVENTS);
- print_comment("trace selection from trace(3NCURSES)");
+ print_comment(fp, "trace selection from trace(3NCURSES)");
PRINT_NAMED_BITMASK(UINT, TRACE_TIMES);
PRINT_NAMED_BITMASK(UINT, TRACE_TPUTS);
PRINT_NAMED_BITMASK(UINT, TRACE_UPDATE);
@@ -528,8 +572,8 @@ main(int argc, const char *argv[])
PRINT_NAMED_BITMASK(UINT, TRACE_CCALLS);
PRINT_NAMED_BITMASK(UINT, TRACE_DATABASE);
PRINT_NAMED_BITMASK(UINT, TRACE_ATTRS);
- print_constant("Trace_Size", 8 * sizeof(UINT));
+ print_size_of(fp, "Trace_Size", 8 * sizeof(UINT));
- printf("end Terminal_Interface.Curses_Constants;\n");
+ fprintf(fp, "end Terminal_Interface.Curses_Constants;\n");
exit(EXIT_SUCCESS);
}