| /**************************************************************************** |
| * Copyright (c) 1998,2007,2008 Free Software Foundation, Inc. * |
| * * |
| * Permission is hereby granted, free of charge, to any person obtaining a * |
| * copy of this software and associated documentation files (the * |
| * "Software"), to deal in the Software without restriction, including * |
| * without limitation the rights to use, copy, modify, merge, publish, * |
| * distribute, distribute with modifications, sublicense, and/or sell * |
| * copies of the Software, and to permit persons to whom the Software is * |
| * furnished to do so, subject to the following conditions: * |
| * * |
| * The above copyright notice and this permission notice shall be included * |
| * in all copies or substantial portions of the Software. * |
| * * |
| * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * |
| * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * |
| * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * |
| * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * |
| * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * |
| * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * |
| * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * |
| * * |
| * Except as contained in this notice, the name(s) of the above copyright * |
| * holders shall not be used in advertising or otherwise to promote the * |
| * sale, use or other dealings in this Software without prior written * |
| * authorization. * |
| ****************************************************************************/ |
| |
| /**************************************************************************** |
| * Author: Juergen Pfeifer, 1996 * |
| ****************************************************************************/ |
| |
| /* |
| Version Control |
| $Id: gen.c,v 1.49 2008/10/04 21:59:37 tom Exp $ |
| --------------------------------------------------------------------------*/ |
| /* |
| This program generates various record structures and constants from the |
| ncurses header file for the Ada95 packages. Essentially it produces |
| Ada95 source on stdout, which is then merged using m4 into a template |
| to produce the real source. |
| */ |
| |
| #include <ncurses_cfg.h> |
| |
| #include <stdlib.h> |
| #include <stddef.h> |
| #include <string.h> |
| #include <assert.h> |
| #include <ctype.h> |
| |
| #include <menu.h> |
| #include <form.h> |
| |
| #define RES_NAME "Reserved" |
| |
| static const char *model = ""; |
| static int little_endian = 0; |
| |
| typedef struct |
| { |
| const char *name; |
| unsigned long attr; |
| } |
| name_attribute_pair; |
| |
| static int |
| find_pos(char *s, unsigned len, int *low, int *high) |
| { |
| unsigned int i, j; |
| int l = 0; |
| |
| *high = -1; |
| *low = 8 * len; |
| |
| for (i = 0; i < len; i++, s++) |
| { |
| if (*s) |
| { |
| for (j = 0; j < 8 * sizeof(char); j++) |
| |
| { |
| if (((little_endian && ((*s) & 0x01)) || |
| (!little_endian && ((*s) & 0x80)))) |
| { |
| if (l > *high) |
| *high = l; |
| if (l < *low) |
| *low = l; |
| } |
| l++; |
| if (little_endian) |
| *s >>= 1; |
| else |
| *s <<= 1; |
| } |
| } |
| else |
| l += 8; |
| } |
| return (*high >= 0 && (*low <= *high)) ? *low : -1; |
| } |
| |
| /* |
| * This helper routine generates a representation clause for a |
| * record type defined in the binding. |
| * We are only dealing with record types which are of 32 or 16 |
| * bit size, i.e. they fit into an (u)int or a (u)short. |
| */ |
| static void |
| gen_reps |
| (const name_attribute_pair * nap, /* array of name_attribute_pair records */ |
| const char *name, /* name of the represented record type */ |
| int len, /* size of the record in bytes */ |
| int bias) |
| { |
| int i, n, l, cnt = 0, low, high; |
| int width = strlen(RES_NAME) + 3; |
| unsigned long a; |
| unsigned long mask = 0; |
| |
| assert(nap != NULL); |
| |
| for (i = 0; nap[i].name != (char *)0; i++) |
| { |
| cnt++; |
| l = strlen(nap[i].name); |
| if (l > width) |
| width = l; |
| } |
| assert(width > 0); |
| |
| printf(" type %s is\n", name); |
| printf(" record\n"); |
| for (i = 0; nap[i].name != (char *)0; i++) |
| { |
| printf(" %-*s : Boolean;\n", width, nap[i].name); |
| } |
| printf(" end record;\n"); |
| printf(" pragma Convention (C, %s);\n\n", name); |
| |
| printf(" for %s use\n", name); |
| printf(" record\n"); |
| |
| for (i = 0; nap[i].name != (char *)0; i++) |
| { |
| a = nap[i].attr; |
| mask |= a; |
| l = find_pos((char *)&a, sizeof(a), &low, &high); |
| if (l >= 0) |
| printf(" %-*s at 0 range %2d .. %2d;\n", width, nap[i].name, |
| low - bias, high - bias); |
| } |
| i = 1; |
| n = cnt; |
| printf(" end record;\n"); |
| printf(" for %s'Size use %d;\n", name, 8 * len); |
| printf(" -- Please note: this rep. clause is generated and may be\n"); |
| printf(" -- different on your system."); |
| } |
| |
| static void |
| chtype_rep(const char *name, attr_t mask) |
| { |
| attr_t x = -1; |
| attr_t t = x & mask; |
| int low, high; |
| int l = find_pos((char *)&t, sizeof(t), &low, &high); |
| |
| if (l >= 0) |
| printf(" %-5s at 0 range %2d .. %2d;\n", name, low, high); |
| } |
| |
| static void |
| gen_chtype_rep(const char *name) |
| { |
| printf(" for %s use\n record\n", name); |
| chtype_rep("Ch", A_CHARTEXT); |
| chtype_rep("Color", A_COLOR); |
| chtype_rep("Attr", (A_ATTRIBUTES & ~A_COLOR)); |
| printf(" end record;\n for %s'Size use %ld;\n", |
| name, (long)(8 * sizeof(chtype))); |
| |
| printf(" -- Please note: this rep. clause is generated and may be\n"); |
| printf(" -- different on your system.\n"); |
| } |
| |
| static void |
| mrep_rep(const char *name, void *rec) |
| { |
| int low, high; |
| int l = find_pos((char *)rec, sizeof(MEVENT), &low, &high); |
| |
| if (l >= 0) |
| printf(" %-7s at 0 range %3d .. %3d;\n", name, low, high); |
| } |
| |
| static void |
| gen_mrep_rep(const char *name) |
| { |
| MEVENT x; |
| |
| printf(" for %s use\n record\n", name); |
| |
| memset(&x, 0, sizeof(x)); |
| x.id = -1; |
| mrep_rep("Id", &x); |
| |
| memset(&x, 0, sizeof(x)); |
| x.x = -1; |
| mrep_rep("X", &x); |
| |
| memset(&x, 0, sizeof(x)); |
| x.y = -1; |
| mrep_rep("Y", &x); |
| |
| memset(&x, 0, sizeof(x)); |
| x.z = -1; |
| mrep_rep("Z", &x); |
| |
| memset(&x, 0, sizeof(x)); |
| x.bstate = -1; |
| mrep_rep("Bstate", &x); |
| |
| printf(" end record;\n"); |
| printf(" -- Please note: this rep. clause is generated and may be\n"); |
| printf(" -- different on your system.\n"); |
| } |
| |
| static void |
| gen_attr_set(const char *name) |
| { |
| /* All of the A_xxx symbols are defined in ncurses, but not all are nonzero |
| * if "configure --enable-widec" is specified. |
| */ |
| static const name_attribute_pair nap[] = |
| { |
| #if A_STANDOUT |
| {"Stand_Out", A_STANDOUT}, |
| #endif |
| #if A_UNDERLINE |
| {"Under_Line", A_UNDERLINE}, |
| #endif |
| #if A_REVERSE |
| {"Reverse_Video", A_REVERSE}, |
| #endif |
| #if A_BLINK |
| {"Blink", A_BLINK}, |
| #endif |
| #if A_DIM |
| {"Dim_Character", A_DIM}, |
| #endif |
| #if A_BOLD |
| {"Bold_Character", A_BOLD}, |
| #endif |
| #if A_ALTCHARSET |
| {"Alternate_Character_Set", A_ALTCHARSET}, |
| #endif |
| #if A_INVIS |
| {"Invisible_Character", A_INVIS}, |
| #endif |
| #if A_PROTECT |
| {"Protected_Character", A_PROTECT}, |
| #endif |
| #if A_HORIZONTAL |
| {"Horizontal", A_HORIZONTAL}, |
| #endif |
| #if A_LEFT |
| {"Left", A_LEFT}, |
| #endif |
| #if A_LOW |
| {"Low", A_LOW}, |
| #endif |
| #if A_RIGHT |
| {"Right", A_RIGHT}, |
| #endif |
| #if A_TOP |
| {"Top", A_TOP}, |
| #endif |
| #if A_VERTICAL |
| {"Vertical", A_VERTICAL}, |
| #endif |
| {(char *)0, 0} |
| }; |
| chtype attr = A_ATTRIBUTES & ~A_COLOR; |
| int start = -1; |
| int len = 0; |
| int i, set; |
| for (i = 0; i < (int)(8 * sizeof(chtype)); i++) |
| |
| { |
| set = attr & 1; |
| if (set) |
| { |
| if (start < 0) |
| start = i; |
| if (start >= 0) |
| { |
| len++; |
| } |
| } |
| attr = attr >> 1; |
| } |
| gen_reps(nap, name, (len + 7) / 8, little_endian ? start : 0); |
| } |
| |
| static void |
| gen_trace(const char *name) |
| { |
| static const name_attribute_pair nap[] = |
| { |
| {"Times", TRACE_TIMES}, |
| {"Tputs", TRACE_TPUTS}, |
| {"Update", TRACE_UPDATE}, |
| {"Cursor_Move", TRACE_MOVE}, |
| {"Character_Output", TRACE_CHARPUT}, |
| {"Calls", TRACE_CALLS}, |
| {"Virtual_Puts", TRACE_VIRTPUT}, |
| {"Input_Events", TRACE_IEVENT}, |
| {"TTY_State", TRACE_BITS}, |
| {"Internal_Calls", TRACE_ICALLS}, |
| {"Character_Calls", TRACE_CCALLS}, |
| {"Termcap_TermInfo", TRACE_DATABASE}, |
| {(char *)0, 0} |
| }; |
| gen_reps(nap, name, sizeof(int), 0); |
| } |
| |
| static void |
| gen_menu_opt_rep(const char *name) |
| { |
| static const name_attribute_pair nap[] = |
| { |
| #ifdef O_ONEVALUE |
| {"One_Valued", O_ONEVALUE}, |
| #endif |
| #ifdef O_SHOWDESC |
| {"Show_Descriptions", O_SHOWDESC}, |
| #endif |
| #ifdef O_ROWMAJOR |
| {"Row_Major_Order", O_ROWMAJOR}, |
| #endif |
| #ifdef O_IGNORECASE |
| {"Ignore_Case", O_IGNORECASE}, |
| #endif |
| #ifdef O_SHOWMATCH |
| {"Show_Matches", O_SHOWMATCH}, |
| #endif |
| #ifdef O_NONCYCLIC |
| {"Non_Cyclic", O_NONCYCLIC}, |
| #endif |
| {(char *)0, 0} |
| }; |
| gen_reps(nap, name, sizeof(int), 0); |
| } |
| |
| static void |
| gen_item_opt_rep(const char *name) |
| { |
| static const name_attribute_pair nap[] = |
| { |
| #ifdef O_SELECTABLE |
| {"Selectable", O_SELECTABLE}, |
| #endif |
| {(char *)0, 0} |
| }; |
| gen_reps(nap, name, sizeof(int), 0); |
| } |
| |
| static void |
| gen_form_opt_rep(const char *name) |
| { |
| static const name_attribute_pair nap[] = |
| { |
| #ifdef O_NL_OVERLOAD |
| {"NL_Overload", O_NL_OVERLOAD}, |
| #endif |
| #ifdef O_BS_OVERLOAD |
| {"BS_Overload", O_BS_OVERLOAD}, |
| #endif |
| {(char *)0, 0} |
| }; |
| gen_reps(nap, name, sizeof(int), 0); |
| } |
| |
| /* |
| * Generate the representation clause for the Field_Option_Set record |
| */ |
| static void |
| gen_field_opt_rep(const char *name) |
| { |
| static const name_attribute_pair nap[] = |
| { |
| #ifdef O_VISIBLE |
| {"Visible", O_VISIBLE}, |
| #endif |
| #ifdef O_ACTIVE |
| {"Active", O_ACTIVE}, |
| #endif |
| #ifdef O_PUBLIC |
| {"Public", O_PUBLIC}, |
| #endif |
| #ifdef O_EDIT |
| {"Edit", O_EDIT}, |
| #endif |
| #ifdef O_WRAP |
| {"Wrap", O_WRAP}, |
| #endif |
| #ifdef O_BLANK |
| {"Blank", O_BLANK}, |
| #endif |
| #ifdef O_AUTOSKIP |
| {"Auto_Skip", O_AUTOSKIP}, |
| #endif |
| #ifdef O_NULLOK |
| {"Null_Ok", O_NULLOK}, |
| #endif |
| #ifdef O_PASSOK |
| {"Pass_Ok", O_PASSOK}, |
| #endif |
| #ifdef O_STATIC |
| {"Static", O_STATIC}, |
| #endif |
| {(char *)0, 0} |
| }; |
| gen_reps(nap, name, sizeof(int), 0); |
| } |
| |
| /* |
| * Generate a single key code constant definition. |
| */ |
| static void |
| keydef(const char *name, const char *old_name, int value, int mode) |
| { |
| if (mode == 0) /* Generate the new name */ |
| printf(" %-30s : constant Special_Key_Code := 8#%3o#;\n", name, value); |
| else |
| { /* generate the old name, but only if it doesn't conflict with the old |
| * name (Ada95 isn't case sensitive!) |
| */ |
| const char *s = old_name; |
| const char *t = name; |
| |
| while (*s && *t && (toupper(*s++) == toupper(*t++))); |
| if (*s || *t) |
| printf(" %-16s : Special_Key_Code renames %s;\n", old_name, name); |
| } |
| } |
| |
| /* |
| * Generate constants for the key codes. When called with mode==0, a |
| * complete list with nice constant names in proper casing style will |
| * be generated. Otherwise a list of old (i.e. C-style) names will be |
| * generated, given that the name wasn't already defined in the "nice" |
| * list. |
| */ |
| static void |
| gen_keydefs(int mode) |
| { |
| char buf[16]; |
| char obuf[16]; |
| int i; |
| |
| #ifdef KEY_CODE_YES |
| keydef("Key_Code_Yes", "KEY_CODE_YES", KEY_CODE_YES, mode); |
| #endif |
| #ifdef KEY_MIN |
| keydef("Key_Min", "KEY_MIN", KEY_MIN, mode); |
| #endif |
| #ifdef KEY_BREAK |
| keydef("Key_Break", "KEY_BREAK", KEY_BREAK, mode); |
| #endif |
| #ifdef KEY_DOWN |
| keydef("Key_Cursor_Down", "KEY_DOWN", KEY_DOWN, mode); |
| #endif |
| #ifdef KEY_UP |
| keydef("Key_Cursor_Up", "KEY_UP", KEY_UP, mode); |
| #endif |
| #ifdef KEY_LEFT |
| keydef("Key_Cursor_Left", "KEY_LEFT", KEY_LEFT, mode); |
| #endif |
| #ifdef KEY_RIGHT |
| keydef("Key_Cursor_Right", "KEY_RIGHT", KEY_RIGHT, mode); |
| #endif |
| #ifdef KEY_HOME |
| keydef("Key_Home", "KEY_HOME", KEY_HOME, mode); |
| #endif |
| #ifdef KEY_BACKSPACE |
| keydef("Key_Backspace", "KEY_BACKSPACE", KEY_BACKSPACE, mode); |
| #endif |
| #ifdef KEY_F0 |
| keydef("Key_F0", "KEY_F0", KEY_F0, mode); |
| #endif |
| #ifdef KEY_F |
| for (i = 1; i <= 24; i++) |
| { |
| sprintf(buf, "Key_F%d", i); |
| sprintf(obuf, "KEY_F%d", i); |
| keydef(buf, obuf, KEY_F(i), mode); |
| } |
| #endif |
| #ifdef KEY_DL |
| keydef("Key_Delete_Line", "KEY_DL", KEY_DL, mode); |
| #endif |
| #ifdef KEY_IL |
| keydef("Key_Insert_Line", "KEY_IL", KEY_IL, mode); |
| #endif |
| #ifdef KEY_DC |
| keydef("Key_Delete_Char", "KEY_DC", KEY_DC, mode); |
| #endif |
| #ifdef KEY_IC |
| keydef("Key_Insert_Char", "KEY_IC", KEY_IC, mode); |
| #endif |
| #ifdef KEY_EIC |
| keydef("Key_Exit_Insert_Mode", "KEY_EIC", KEY_EIC, mode); |
| #endif |
| #ifdef KEY_CLEAR |
| keydef("Key_Clear_Screen", "KEY_CLEAR", KEY_CLEAR, mode); |
| #endif |
| #ifdef KEY_EOS |
| keydef("Key_Clear_End_Of_Screen", "KEY_EOS", KEY_EOS, mode); |
| #endif |
| #ifdef KEY_EOL |
| keydef("Key_Clear_End_Of_Line", "KEY_EOL", KEY_EOL, mode); |
| #endif |
| #ifdef KEY_SF |
| keydef("Key_Scroll_1_Forward", "KEY_SF", KEY_SF, mode); |
| #endif |
| #ifdef KEY_SR |
| keydef("Key_Scroll_1_Backward", "KEY_SR", KEY_SR, mode); |
| #endif |
| #ifdef KEY_NPAGE |
| keydef("Key_Next_Page", "KEY_NPAGE", KEY_NPAGE, mode); |
| #endif |
| #ifdef KEY_PPAGE |
| keydef("Key_Previous_Page", "KEY_PPAGE", KEY_PPAGE, mode); |
| #endif |
| #ifdef KEY_STAB |
| keydef("Key_Set_Tab", "KEY_STAB", KEY_STAB, mode); |
| #endif |
| #ifdef KEY_CTAB |
| keydef("Key_Clear_Tab", "KEY_CTAB", KEY_CTAB, mode); |
| #endif |
| #ifdef KEY_CATAB |
| keydef("Key_Clear_All_Tabs", "KEY_CATAB", KEY_CATAB, mode); |
| #endif |
| #ifdef KEY_ENTER |
| keydef("Key_Enter_Or_Send", "KEY_ENTER", KEY_ENTER, mode); |
| #endif |
| #ifdef KEY_SRESET |
| keydef("Key_Soft_Reset", "KEY_SRESET", KEY_SRESET, mode); |
| #endif |
| #ifdef KEY_RESET |
| keydef("Key_Reset", "KEY_RESET", KEY_RESET, mode); |
| #endif |
| #ifdef KEY_PRINT |
| keydef("Key_Print", "KEY_PRINT", KEY_PRINT, mode); |
| #endif |
| #ifdef KEY_LL |
| keydef("Key_Bottom", "KEY_LL", KEY_LL, mode); |
| #endif |
| #ifdef KEY_A1 |
| keydef("Key_Upper_Left_Of_Keypad", "KEY_A1", KEY_A1, mode); |
| #endif |
| #ifdef KEY_A3 |
| keydef("Key_Upper_Right_Of_Keypad", "KEY_A3", KEY_A3, mode); |
| #endif |
| #ifdef KEY_B2 |
| keydef("Key_Center_Of_Keypad", "KEY_B2", KEY_B2, mode); |
| #endif |
| #ifdef KEY_C1 |
| keydef("Key_Lower_Left_Of_Keypad", "KEY_C1", KEY_C1, mode); |
| #endif |
| #ifdef KEY_C3 |
| keydef("Key_Lower_Right_Of_Keypad", "KEY_C3", KEY_C3, mode); |
| #endif |
| #ifdef KEY_BTAB |
| keydef("Key_Back_Tab", "KEY_BTAB", KEY_BTAB, mode); |
| #endif |
| #ifdef KEY_BEG |
| keydef("Key_Beginning", "KEY_BEG", KEY_BEG, mode); |
| #endif |
| #ifdef KEY_CANCEL |
| keydef("Key_Cancel", "KEY_CANCEL", KEY_CANCEL, mode); |
| #endif |
| #ifdef KEY_CLOSE |
| keydef("Key_Close", "KEY_CLOSE", KEY_CLOSE, mode); |
| #endif |
| #ifdef KEY_COMMAND |
| keydef("Key_Command", "KEY_COMMAND", KEY_COMMAND, mode); |
| #endif |
| #ifdef KEY_COPY |
| keydef("Key_Copy", "KEY_COPY", KEY_COPY, mode); |
| #endif |
| #ifdef KEY_CREATE |
| keydef("Key_Create", "KEY_CREATE", KEY_CREATE, mode); |
| #endif |
| #ifdef KEY_END |
| keydef("Key_End", "KEY_END", KEY_END, mode); |
| #endif |
| #ifdef KEY_EXIT |
| keydef("Key_Exit", "KEY_EXIT", KEY_EXIT, mode); |
| #endif |
| #ifdef KEY_FIND |
| keydef("Key_Find", "KEY_FIND", KEY_FIND, mode); |
| #endif |
| #ifdef KEY_HELP |
| keydef("Key_Help", "KEY_HELP", KEY_HELP, mode); |
| #endif |
| #ifdef KEY_MARK |
| keydef("Key_Mark", "KEY_MARK", KEY_MARK, mode); |
| #endif |
| #ifdef KEY_MESSAGE |
| keydef("Key_Message", "KEY_MESSAGE", KEY_MESSAGE, mode); |
| #endif |
| #ifdef KEY_MOVE |
| keydef("Key_Move", "KEY_MOVE", KEY_MOVE, mode); |
| #endif |
| #ifdef KEY_NEXT |
| keydef("Key_Next", "KEY_NEXT", KEY_NEXT, mode); |
| #endif |
| #ifdef KEY_OPEN |
| keydef("Key_Open", "KEY_OPEN", KEY_OPEN, mode); |
| #endif |
| #ifdef KEY_OPTIONS |
| keydef("Key_Options", "KEY_OPTIONS", KEY_OPTIONS, mode); |
| #endif |
| #ifdef KEY_PREVIOUS |
| keydef("Key_Previous", "KEY_PREVIOUS", KEY_PREVIOUS, mode); |
| #endif |
| #ifdef KEY_REDO |
| keydef("Key_Redo", "KEY_REDO", KEY_REDO, mode); |
| #endif |
| #ifdef KEY_REFERENCE |
| keydef("Key_Reference", "KEY_REFERENCE", KEY_REFERENCE, mode); |
| #endif |
| #ifdef KEY_REFRESH |
| keydef("Key_Refresh", "KEY_REFRESH", KEY_REFRESH, mode); |
| #endif |
| #ifdef KEY_REPLACE |
| keydef("Key_Replace", "KEY_REPLACE", KEY_REPLACE, mode); |
| #endif |
| #ifdef KEY_RESTART |
| keydef("Key_Restart", "KEY_RESTART", KEY_RESTART, mode); |
| #endif |
| #ifdef KEY_RESUME |
| keydef("Key_Resume", "KEY_RESUME", KEY_RESUME, mode); |
| #endif |
| #ifdef KEY_SAVE |
| keydef("Key_Save", "KEY_SAVE", KEY_SAVE, mode); |
| #endif |
| #ifdef KEY_SBEG |
| keydef("Key_Shift_Begin", "KEY_SBEG", KEY_SBEG, mode); |
| #endif |
| #ifdef KEY_SCANCEL |
| keydef("Key_Shift_Cancel", "KEY_SCANCEL", KEY_SCANCEL, mode); |
| #endif |
| #ifdef KEY_SCOMMAND |
| keydef("Key_Shift_Command", "KEY_SCOMMAND", KEY_SCOMMAND, mode); |
| #endif |
| #ifdef KEY_SCOPY |
| keydef("Key_Shift_Copy", "KEY_SCOPY", KEY_SCOPY, mode); |
| #endif |
| #ifdef KEY_SCREATE |
| keydef("Key_Shift_Create", "KEY_SCREATE", KEY_SCREATE, mode); |
| #endif |
| #ifdef KEY_SDC |
| keydef("Key_Shift_Delete_Char", "KEY_SDC", KEY_SDC, mode); |
| #endif |
| #ifdef KEY_SDL |
| keydef("Key_Shift_Delete_Line", "KEY_SDL", KEY_SDL, mode); |
| #endif |
| #ifdef KEY_SELECT |
| keydef("Key_Select", "KEY_SELECT", KEY_SELECT, mode); |
| #endif |
| #ifdef KEY_SEND |
| keydef("Key_Shift_End", "KEY_SEND", KEY_SEND, mode); |
| #endif |
| #ifdef KEY_SEOL |
| keydef("Key_Shift_Clear_End_Of_Line", "KEY_SEOL", KEY_SEOL, mode); |
| #endif |
| #ifdef KEY_SEXIT |
| keydef("Key_Shift_Exit", "KEY_SEXIT", KEY_SEXIT, mode); |
| #endif |
| #ifdef KEY_SFIND |
| keydef("Key_Shift_Find", "KEY_SFIND", KEY_SFIND, mode); |
| #endif |
| #ifdef KEY_SHELP |
| keydef("Key_Shift_Help", "KEY_SHELP", KEY_SHELP, mode); |
| #endif |
| #ifdef KEY_SHOME |
| keydef("Key_Shift_Home", "KEY_SHOME", KEY_SHOME, mode); |
| #endif |
| #ifdef KEY_SIC |
| keydef("Key_Shift_Insert_Char", "KEY_SIC", KEY_SIC, mode); |
| #endif |
| #ifdef KEY_SLEFT |
| keydef("Key_Shift_Cursor_Left", "KEY_SLEFT", KEY_SLEFT, mode); |
| #endif |
| #ifdef KEY_SMESSAGE |
| keydef("Key_Shift_Message", "KEY_SMESSAGE", KEY_SMESSAGE, mode); |
| #endif |
| #ifdef KEY_SMOVE |
| keydef("Key_Shift_Move", "KEY_SMOVE", KEY_SMOVE, mode); |
| #endif |
| #ifdef KEY_SNEXT |
| keydef("Key_Shift_Next_Page", "KEY_SNEXT", KEY_SNEXT, mode); |
| #endif |
| #ifdef KEY_SOPTIONS |
| keydef("Key_Shift_Options", "KEY_SOPTIONS", KEY_SOPTIONS, mode); |
| #endif |
| #ifdef KEY_SPREVIOUS |
| keydef("Key_Shift_Previous_Page", "KEY_SPREVIOUS", KEY_SPREVIOUS, mode); |
| #endif |
| #ifdef KEY_SPRINT |
| keydef("Key_Shift_Print", "KEY_SPRINT", KEY_SPRINT, mode); |
| #endif |
| #ifdef KEY_SREDO |
| keydef("Key_Shift_Redo", "KEY_SREDO", KEY_SREDO, mode); |
| #endif |
| #ifdef KEY_SREPLACE |
| keydef("Key_Shift_Replace", "KEY_SREPLACE", KEY_SREPLACE, mode); |
| #endif |
| #ifdef KEY_SRIGHT |
| keydef("Key_Shift_Cursor_Right", "KEY_SRIGHT", KEY_SRIGHT, mode); |
| #endif |
| #ifdef KEY_SRSUME |
| keydef("Key_Shift_Resume", "KEY_SRSUME", KEY_SRSUME, mode); |
| #endif |
| #ifdef KEY_SSAVE |
| keydef("Key_Shift_Save", "KEY_SSAVE", KEY_SSAVE, mode); |
| #endif |
| #ifdef KEY_SSUSPEND |
| keydef("Key_Shift_Suspend", "KEY_SSUSPEND", KEY_SSUSPEND, mode); |
| #endif |
| #ifdef KEY_SUNDO |
| keydef("Key_Shift_Undo", "KEY_SUNDO", KEY_SUNDO, mode); |
| #endif |
| #ifdef KEY_SUSPEND |
| keydef("Key_Suspend", "KEY_SUSPEND", KEY_SUSPEND, mode); |
| #endif |
| #ifdef KEY_UNDO |
| keydef("Key_Undo", "KEY_UNDO", KEY_UNDO, mode); |
| #endif |
| #ifdef KEY_MOUSE |
| keydef("Key_Mouse", "KEY_MOUSE", KEY_MOUSE, mode); |
| #endif |
| #ifdef KEY_RESIZE |
| keydef("Key_Resize", "KEY_RESIZE", KEY_RESIZE, mode); |
| #endif |
| } |
| |
| /* |
| * Generate a constant with the given name. The second parameter |
| * is a reference to the ACS character in the acs_map[] array and |
| * will be translated into an index. |
| */ |
| static void |
| acs_def(const char *name, chtype *a) |
| { |
| int c = a - &acs_map[0]; |
| |
| printf(" %-24s : constant Character := ", name); |
| if (isprint(c) && (c != '`')) |
| printf("'%c';\n", c); |
| else |
| printf("Character'Val (%d);\n", c); |
| } |
| |
| /* |
| * Generate the constants for the ACS characters |
| */ |
| static void |
| gen_acs(void) |
| { |
| printf(" type C_ACS_Map is array (Character'Val (0) .. Character'Val (127))\n"); |
| printf(" of Attributed_Character;\n"); |
| #if USE_REENTRANT || BROKEN_LINKER |
| printf(" type C_ACS_Ptr is access C_ACS_Map;\n"); |
| printf(" function ACS_Map return C_ACS_Ptr;\n"); |
| printf(" pragma Import (C, ACS_Map, \"_nc_acs_map\");\n"); |
| #else |
| printf(" ACS_Map : C_ACS_Map;\n"); |
| printf(" pragma Import (C, ACS_Map, \"acs_map\");\n"); |
| #endif |
| printf(" --\n"); |
| printf(" --\n"); |
| printf(" -- Constants for several characters from the Alternate Character Set\n"); |
| printf(" -- You must use these constants as indices into the ACS_Map array\n"); |
| printf(" -- to get the corresponding attributed character at runtime.\n"); |
| printf(" --\n"); |
| |
| #ifdef ACS_ULCORNER |
| acs_def("ACS_Upper_Left_Corner", &ACS_ULCORNER); |
| #endif |
| #ifdef ACS_LLCORNER |
| acs_def("ACS_Lower_Left_Corner", &ACS_LLCORNER); |
| #endif |
| #ifdef ACS_URCORNER |
| acs_def("ACS_Upper_Right_Corner", &ACS_URCORNER); |
| #endif |
| #ifdef ACS_LRCORNER |
| acs_def("ACS_Lower_Right_Corner", &ACS_LRCORNER); |
| #endif |
| #ifdef ACS_LTEE |
| acs_def("ACS_Left_Tee", &ACS_LTEE); |
| #endif |
| #ifdef ACS_RTEE |
| acs_def("ACS_Right_Tee", &ACS_RTEE); |
| #endif |
| #ifdef ACS_BTEE |
| acs_def("ACS_Bottom_Tee", &ACS_BTEE); |
| #endif |
| #ifdef ACS_TTEE |
| acs_def("ACS_Top_Tee", &ACS_TTEE); |
| #endif |
| #ifdef ACS_HLINE |
| acs_def("ACS_Horizontal_Line", &ACS_HLINE); |
| #endif |
| #ifdef ACS_VLINE |
| acs_def("ACS_Vertical_Line", &ACS_VLINE); |
| #endif |
| #ifdef ACS_PLUS |
| acs_def("ACS_Plus_Symbol", &ACS_PLUS); |
| #endif |
| #ifdef ACS_S1 |
| acs_def("ACS_Scan_Line_1", &ACS_S1); |
| #endif |
| #ifdef ACS_S9 |
| acs_def("ACS_Scan_Line_9", &ACS_S9); |
| #endif |
| #ifdef ACS_DIAMOND |
| acs_def("ACS_Diamond", &ACS_DIAMOND); |
| #endif |
| #ifdef ACS_CKBOARD |
| acs_def("ACS_Checker_Board", &ACS_CKBOARD); |
| #endif |
| #ifdef ACS_DEGREE |
| acs_def("ACS_Degree", &ACS_DEGREE); |
| #endif |
| #ifdef ACS_PLMINUS |
| acs_def("ACS_Plus_Minus", &ACS_PLMINUS); |
| #endif |
| #ifdef ACS_BULLET |
| acs_def("ACS_Bullet", &ACS_BULLET); |
| #endif |
| #ifdef ACS_LARROW |
| acs_def("ACS_Left_Arrow", &ACS_LARROW); |
| #endif |
| #ifdef ACS_RARROW |
| acs_def("ACS_Right_Arrow", &ACS_RARROW); |
| #endif |
| #ifdef ACS_DARROW |
| acs_def("ACS_Down_Arrow", &ACS_DARROW); |
| #endif |
| #ifdef ACS_UARROW |
| acs_def("ACS_Up_Arrow", &ACS_UARROW); |
| #endif |
| #ifdef ACS_BOARD |
| acs_def("ACS_Board_Of_Squares", &ACS_BOARD); |
| #endif |
| #ifdef ACS_LANTERN |
| acs_def("ACS_Lantern", &ACS_LANTERN); |
| #endif |
| #ifdef ACS_BLOCK |
| acs_def("ACS_Solid_Block", &ACS_BLOCK); |
| #endif |
| #ifdef ACS_S3 |
| acs_def("ACS_Scan_Line_3", &ACS_S3); |
| #endif |
| #ifdef ACS_S7 |
| acs_def("ACS_Scan_Line_7", &ACS_S7); |
| #endif |
| #ifdef ACS_LEQUAL |
| acs_def("ACS_Less_Or_Equal", &ACS_LEQUAL); |
| #endif |
| #ifdef ACS_GEQUAL |
| acs_def("ACS_Greater_Or_Equal", &ACS_GEQUAL); |
| #endif |
| #ifdef ACS_PI |
| acs_def("ACS_PI", &ACS_PI); |
| #endif |
| #ifdef ACS_NEQUAL |
| acs_def("ACS_Not_Equal", &ACS_NEQUAL); |
| #endif |
| #ifdef ACS_STERLING |
| acs_def("ACS_Sterling", &ACS_STERLING); |
| #endif |
| } |
| |
| #define GEN_EVENT(name,value) \ |
| printf(" %-25s : constant Event_Mask := 8#%011lo#;\n", \ |
| #name, value) |
| |
| #define GEN_MEVENT(name) \ |
| printf(" %-25s : constant Event_Mask := 8#%011lo#;\n", \ |
| #name, name) |
| |
| static void |
| gen_mouse_events(void) |
| { |
| mmask_t all1 = 0; |
| mmask_t all2 = 0; |
| mmask_t all3 = 0; |
| mmask_t all4 = 0; |
| |
| #ifdef BUTTON1_RELEASED |
| GEN_MEVENT(BUTTON1_RELEASED); |
| all1 |= BUTTON1_RELEASED; |
| #endif |
| #ifdef BUTTON1_PRESSED |
| GEN_MEVENT(BUTTON1_PRESSED); |
| all1 |= BUTTON1_PRESSED; |
| #endif |
| #ifdef BUTTON1_CLICKED |
| GEN_MEVENT(BUTTON1_CLICKED); |
| all1 |= BUTTON1_CLICKED; |
| #endif |
| #ifdef BUTTON1_DOUBLE_CLICKED |
| GEN_MEVENT(BUTTON1_DOUBLE_CLICKED); |
| all1 |= BUTTON1_DOUBLE_CLICKED; |
| #endif |
| #ifdef BUTTON1_TRIPLE_CLICKED |
| GEN_MEVENT(BUTTON1_TRIPLE_CLICKED); |
| all1 |= BUTTON1_TRIPLE_CLICKED; |
| #endif |
| #ifdef BUTTON1_RESERVED_EVENT |
| GEN_MEVENT(BUTTON1_RESERVED_EVENT); |
| all1 |= BUTTON1_RESERVED_EVENT; |
| #endif |
| #ifdef BUTTON2_RELEASED |
| GEN_MEVENT(BUTTON2_RELEASED); |
| all2 |= BUTTON2_RELEASED; |
| #endif |
| #ifdef BUTTON2_PRESSED |
| GEN_MEVENT(BUTTON2_PRESSED); |
| all2 |= BUTTON2_PRESSED; |
| #endif |
| #ifdef BUTTON2_CLICKED |
| GEN_MEVENT(BUTTON2_CLICKED); |
| all2 |= BUTTON2_CLICKED; |
| #endif |
| #ifdef BUTTON2_DOUBLE_CLICKED |
| GEN_MEVENT(BUTTON2_DOUBLE_CLICKED); |
| all2 |= BUTTON2_DOUBLE_CLICKED; |
| #endif |
| #ifdef BUTTON2_TRIPLE_CLICKED |
| GEN_MEVENT(BUTTON2_TRIPLE_CLICKED); |
| all2 |= BUTTON2_TRIPLE_CLICKED; |
| #endif |
| #ifdef BUTTON2_RESERVED_EVENT |
| GEN_MEVENT(BUTTON2_RESERVED_EVENT); |
| all2 |= BUTTON2_RESERVED_EVENT; |
| #endif |
| #ifdef BUTTON3_RELEASED |
| GEN_MEVENT(BUTTON3_RELEASED); |
| all3 |= BUTTON3_RELEASED; |
| #endif |
| #ifdef BUTTON3_PRESSED |
| GEN_MEVENT(BUTTON3_PRESSED); |
| all3 |= BUTTON3_PRESSED; |
| #endif |
| #ifdef BUTTON3_CLICKED |
| GEN_MEVENT(BUTTON3_CLICKED); |
| all3 |= BUTTON3_CLICKED; |
| #endif |
| #ifdef BUTTON3_DOUBLE_CLICKED |
| GEN_MEVENT(BUTTON3_DOUBLE_CLICKED); |
| all3 |= BUTTON3_DOUBLE_CLICKED; |
| #endif |
| #ifdef BUTTON3_TRIPLE_CLICKED |
| GEN_MEVENT(BUTTON3_TRIPLE_CLICKED); |
| all3 |= BUTTON3_TRIPLE_CLICKED; |
| #endif |
| #ifdef BUTTON3_RESERVED_EVENT |
| GEN_MEVENT(BUTTON3_RESERVED_EVENT); |
| all3 |= BUTTON3_RESERVED_EVENT; |
| #endif |
| #ifdef BUTTON4_RELEASED |
| GEN_MEVENT(BUTTON4_RELEASED); |
| all4 |= BUTTON4_RELEASED; |
| #endif |
| #ifdef BUTTON4_PRESSED |
| GEN_MEVENT(BUTTON4_PRESSED); |
| all4 |= BUTTON4_PRESSED; |
| #endif |
| #ifdef BUTTON4_CLICKED |
| GEN_MEVENT(BUTTON4_CLICKED); |
| all4 |= BUTTON4_CLICKED; |
| #endif |
| #ifdef BUTTON4_DOUBLE_CLICKED |
| GEN_MEVENT(BUTTON4_DOUBLE_CLICKED); |
| all4 |= BUTTON4_DOUBLE_CLICKED; |
| #endif |
| #ifdef BUTTON4_TRIPLE_CLICKED |
| GEN_MEVENT(BUTTON4_TRIPLE_CLICKED); |
| all4 |= BUTTON4_TRIPLE_CLICKED; |
| #endif |
| #ifdef BUTTON4_RESERVED_EVENT |
| GEN_MEVENT(BUTTON4_RESERVED_EVENT); |
| all4 |= BUTTON4_RESERVED_EVENT; |
| #endif |
| #ifdef BUTTON_CTRL |
| GEN_MEVENT(BUTTON_CTRL); |
| #endif |
| #ifdef BUTTON_SHIFT |
| GEN_MEVENT(BUTTON_SHIFT); |
| #endif |
| #ifdef BUTTON_ALT |
| GEN_MEVENT(BUTTON_ALT); |
| #endif |
| #ifdef REPORT_MOUSE_POSITION |
| GEN_MEVENT(REPORT_MOUSE_POSITION); |
| #endif |
| #ifdef ALL_MOUSE_EVENTS |
| GEN_MEVENT(ALL_MOUSE_EVENTS); |
| #endif |
| |
| GEN_EVENT(BUTTON1_EVENTS, all1); |
| GEN_EVENT(BUTTON2_EVENTS, all2); |
| GEN_EVENT(BUTTON3_EVENTS, all3); |
| GEN_EVENT(BUTTON4_EVENTS, all4); |
| } |
| |
| static void |
| wrap_one_var(const char *c_var, |
| const char *c_type, |
| const char *ada_func, |
| const char *ada_type) |
| { |
| #if USE_REENTRANT |
| /* must wrap variables */ |
| printf("\n"); |
| printf(" function %s return %s\n", ada_func, ada_type); |
| printf(" is\n"); |
| printf(" function Result return %s;\n", c_type); |
| printf(" pragma Import (C, Result, \"_nc_%s\");\n", c_var); |
| printf(" begin\n"); |
| if (strcmp(c_type, ada_type)) |
| printf(" return %s (Result);\n", ada_type); |
| else |
| printf(" return Result;\n"); |
| printf(" end %s;\n", ada_func); |
| #else |
| /* global variables are really global */ |
| printf("\n"); |
| printf(" function %s return %s\n", ada_func, ada_type); |
| printf(" is\n"); |
| printf(" Result : %s;\n", c_type); |
| printf(" pragma Import (C, Result, \"%s\");\n", c_var); |
| printf(" begin\n"); |
| if (strcmp(c_type, ada_type)) |
| printf(" return %s (Result);\n", ada_type); |
| else |
| printf(" return Result;\n"); |
| printf(" end %s;\n", ada_func); |
| #endif |
| } |
| |
| #define GEN_PUBLIC_VAR(c_var, c_type, ada_func, ada_type) \ |
| wrap_one_var(#c_var, #c_type, #ada_func, #ada_type) |
| |
| static void |
| gen_public_vars(void) |
| { |
| GEN_PUBLIC_VAR(stdscr, Window, Standard_Window, Window); |
| GEN_PUBLIC_VAR(curscr, Window, Current_Window, Window); |
| GEN_PUBLIC_VAR(LINES, C_Int, Lines, Line_Count); |
| GEN_PUBLIC_VAR(COLS, C_Int, Columns, Column_Count); |
| GEN_PUBLIC_VAR(TABSIZE, C_Int, Tab_Size, Natural); |
| GEN_PUBLIC_VAR(COLORS, C_Int, Number_Of_Colors, Natural); |
| GEN_PUBLIC_VAR(COLOR_PAIRS, C_Int, Number_Of_Color_Pairs, Natural); |
| } |
| |
| /* |
| * Output some comment lines indicating that the file is generated. |
| * The name parameter is the name of the facility to be used in |
| * the comment. |
| */ |
| static void |
| prologue(const char *name) |
| { |
| printf("-- %s binding.\n", name); |
| printf("-- This module is generated. Please don't change it manually!\n"); |
| printf("-- Run the generator instead.\n-- |"); |
| |
| printf("define(`M4_BIT_ORDER',`%s_Order_First')", |
| little_endian ? "Low" : "High"); |
| } |
| |
| /* |
| * Write the prologue for the curses facility and make sure that |
| * KEY_MIN and KEY_MAX are defined for the rest of this source. |
| */ |
| static void |
| basedefs(void) |
| { |
| prologue("curses"); |
| #ifndef KEY_MAX |
| # define KEY_MAX 0777 |
| #endif |
| printf("define(`M4_KEY_MAX',`8#%o#')", KEY_MAX); |
| #ifndef KEY_MIN |
| # define KEY_MIN 0401 |
| #endif |
| if (KEY_MIN == 256) |
| { |
| fprintf(stderr, "Unexpected value for KEY_MIN: %d\n", KEY_MIN); |
| exit(1); |
| } |
| printf("define(`M4_SPECIAL_FIRST',`8#%o#')", KEY_MIN - 1); |
| } |
| |
| /* |
| * Write out the comment lines for the menu facility |
| */ |
| static void |
| menu_basedefs(void) |
| { |
| prologue("menu"); |
| } |
| |
| /* |
| * Write out the comment lines for the form facility |
| */ |
| static void |
| form_basedefs(void) |
| { |
| prologue("form"); |
| } |
| |
| /* |
| * Write out the comment lines for the mouse facility |
| */ |
| static void |
| mouse_basedefs(void) |
| { |
| prologue("mouse"); |
| } |
| |
| /* |
| * Write the definition of a single color |
| */ |
| static void |
| color_def(const char *name, int value) |
| { |
| printf(" %-16s : constant Color_Number := %d;\n", name, value); |
| } |
| |
| /* |
| * Generate all color definitions |
| */ |
| static void |
| gen_color(void) |
| { |
| #if HAVE_USE_DEFAULT_COLORS |
| color_def("Default_Color", -1); |
| #endif |
| #ifdef COLOR_BLACK |
| color_def("Black", COLOR_BLACK); |
| #endif |
| #ifdef COLOR_RED |
| color_def("Red", COLOR_RED); |
| #endif |
| #ifdef COLOR_GREEN |
| color_def("Green", COLOR_GREEN); |
| #endif |
| #ifdef COLOR_YELLOW |
| color_def("Yellow", COLOR_YELLOW); |
| #endif |
| #ifdef COLOR_BLUE |
| color_def("Blue", COLOR_BLUE); |
| #endif |
| #ifdef COLOR_MAGENTA |
| color_def("Magenta", COLOR_MAGENTA); |
| #endif |
| #ifdef COLOR_CYAN |
| color_def("Cyan", COLOR_CYAN); |
| #endif |
| #ifdef COLOR_WHITE |
| color_def("White", COLOR_WHITE); |
| #endif |
| } |
| |
| /* |
| * Generate the linker options for the base facility |
| */ |
| static void |
| gen_linkopts(void) |
| { |
| printf(" pragma Linker_Options (\"-lncurses%s\");\n", model); |
| } |
| |
| /* |
| * Generate the linker options for the menu facility |
| */ |
| static void |
| gen_menu_linkopts(void) |
| { |
| printf(" pragma Linker_Options (\"-lmenu%s\");\n", model); |
| } |
| |
| /* |
| * Generate the linker options for the form facility |
| */ |
| static void |
| gen_form_linkopts(void) |
| { |
| printf(" pragma Linker_Options (\"-lform%s\");\n", model); |
| } |
| |
| /* |
| * Generate the linker options for the panel facility |
| */ |
| static void |
| gen_panel_linkopts(void) |
| { |
| printf(" pragma Linker_Options (\"-lpanel%s\");\n", model); |
| } |
| |
| static void |
| gen_version_info(void) |
| { |
| static const char *v1 = |
| " NC_Major_Version : constant := %d; -- Major version of the library\n"; |
| static const char *v2 = |
| " NC_Minor_Version : constant := %d; -- Minor version of the library\n"; |
| static const char *v3 = |
| " NC_Version : constant String := %c%d.%d%c; -- Version of library\n"; |
| |
| printf(v1, NCURSES_VERSION_MAJOR); |
| printf(v2, NCURSES_VERSION_MINOR); |
| printf(v3, '"', NCURSES_VERSION_MAJOR, NCURSES_VERSION_MINOR, '"'); |
| } |
| |
| static int |
| eti_gen(char *buf, int code, const char *name, int *etimin, int *etimax) |
| { |
| sprintf(buf, " E_%-16s : constant Eti_Error := %d;\n", name, code); |
| if (code < *etimin) |
| *etimin = code; |
| if (code > *etimax) |
| *etimax = code; |
| return strlen(buf); |
| } |
| |
| static void |
| gen_offsets(void) |
| { |
| const char *s_bool = ""; |
| |
| if (sizeof(bool) == sizeof(char)) |
| { |
| s_bool = "char"; |
| } |
| else if (sizeof(bool) == sizeof(short)) |
| { |
| s_bool = "short"; |
| } |
| else if (sizeof(bool) == sizeof(int)) |
| { |
| s_bool = "int"; |
| } |
| printf(" Sizeof%-*s : constant Natural := %2ld; -- %s\n", |
| 12, "_bool", (long)sizeof(bool), "bool"); |
| |
| /* In ncurses _maxy and _maxx needs an offset for the "public" |
| * value |
| */ |
| printf(" Offset%-*s : constant Natural := %2d; -- %s\n", |
| 12, "_XY", 1, "int"); |
| printf("\n"); |
| printf(" type Curses_Bool is mod 2 ** Interfaces.C.%s'Size;\n", s_bool); |
| } |
| |
| /* |
| * main() expects two arguments on the commandline, both single characters. |
| * The first character denotes the facility for which we generate output. |
| * Possible values are |
| * B - Base |
| * M - Menus |
| * F - Forms |
| * P - Pointer Device (Mouse) |
| * E - ETI base definitions |
| * |
| * The second character then denotes the specific output that should be |
| * generated for the selected facility. |
| */ |
| int |
| main(int argc, char *argv[]) |
| { |
| int x = 0x12345678; |
| char *s = (char *)&x; |
| |
| if (*s == 0x78) |
| little_endian = 1; |
| |
| if (argc != 4) |
| exit(1); |
| model = *++argv; |
| |
| switch (argv[1][0]) |
| { |
| /* --------------------------------------------------------------- */ |
| case 'B': /* The Base facility */ |
| switch (argv[2][0]) |
| { |
| case 'A': /* chtype translation into Ada95 record type */ |
| gen_attr_set("Character_Attribute_Set"); |
| break; |
| case 'B': /* write some initial comment lines */ |
| basedefs(); |
| break; |
| case 'C': /* generate color constants */ |
| gen_color(); |
| break; |
| case 'D': /* generate displacements of fields in WINDOW struct. */ |
| gen_offsets(); |
| break; |
| case 'E': /* generate Mouse Event codes */ |
| gen_mouse_events(); |
| break; |
| case 'K': /* translation of keycodes */ |
| gen_keydefs(0); |
| break; |
| case 'L': /* generate the Linker_Options pragma */ |
| gen_linkopts(); |
| break; |
| case 'M': /* generate constants for the ACS characters */ |
| gen_acs(); |
| break; |
| case 'O': /* generate definitions of the old key code names */ |
| gen_keydefs(1); |
| break; |
| case 'P': /* generate definitions of the public variables */ |
| gen_public_vars(); |
| break; |
| case 'R': /* generate representation clause for Attributed character */ |
| gen_chtype_rep("Attributed_Character"); |
| break; |
| case 'T': /* generate the Trace info */ |
| gen_trace("Trace_Attribute_Set"); |
| break; |
| case 'V': /* generate version info */ |
| gen_version_info(); |
| break; |
| default: |
| break; |
| } |
| break; |
| /* --------------------------------------------------------------- */ |
| case 'M': /* The Menu facility */ |
| switch (argv[2][0]) |
| { |
| case 'R': /* generate representation clause for Menu_Option_Set */ |
| gen_menu_opt_rep("Menu_Option_Set"); |
| break; |
| case 'B': /* write some initial comment lines */ |
| menu_basedefs(); |
| break; |
| case 'L': /* generate the Linker_Options pragma */ |
| gen_menu_linkopts(); |
| break; |
| case 'I': /* generate representation clause for Item_Option_Set */ |
| gen_item_opt_rep("Item_Option_Set"); |
| break; |
| default: |
| break; |
| } |
| break; |
| /* --------------------------------------------------------------- */ |
| case 'F': /* The Form facility */ |
| switch (argv[2][0]) |
| { |
| case 'R': /* generate representation clause for Form_Option_Set */ |
| gen_form_opt_rep("Form_Option_Set"); |
| break; |
| case 'B': /* write some initial comment lines */ |
| form_basedefs(); |
| break; |
| case 'L': /* generate the Linker_Options pragma */ |
| gen_form_linkopts(); |
| break; |
| case 'I': /* generate representation clause for Field_Option_Set */ |
| gen_field_opt_rep("Field_Option_Set"); |
| break; |
| default: |
| break; |
| } |
| break; |
| /* --------------------------------------------------------------- */ |
| case 'P': /* The Pointer(=Mouse) facility */ |
| switch (argv[2][0]) |
| { |
| case 'B': /* write some initial comment lines */ |
| mouse_basedefs(); |
| break; |
| case 'M': /* generate representation clause for Mouse_Event */ |
| gen_mrep_rep("Mouse_Event"); |
| break; |
| case 'L': /* generate the Linker_Options pragma */ |
| gen_panel_linkopts(); |
| break; |
| default: |
| break; |
| } |
| break; |
| /* --------------------------------------------------------------- */ |
| case 'E': /* chtype size detection */ |
| switch (argv[2][0]) |
| { |
| case 'C': |
| { |
| const char *fmt = " type C_Chtype is new %s;\n"; |
| const char *afmt = " type C_AttrType is new %s;\n"; |
| |
| if (sizeof(chtype) == sizeof(int)) |
| { |
| if (sizeof(int) == sizeof(long)) |
| printf(fmt, "C_ULong"); |
| |
| else |
| printf(fmt, "C_UInt"); |
| } |
| else if (sizeof(chtype) == sizeof(long)) |
| { |
| printf(fmt, "C_ULong"); |
| } |
| else |
| printf("Error\n"); |
| |
| if (sizeof(attr_t) == sizeof(int)) |
| { |
| if (sizeof(int) == sizeof(long)) |
| printf(afmt, "C_ULong"); |
| |
| else |
| printf(afmt, "C_UInt"); |
| } |
| else if (sizeof(attr_t) == sizeof(long)) |
| { |
| printf(afmt, "C_ULong"); |
| } |
| else |
| printf("Error\n"); |
| |
| printf("define(`CF_CURSES_OK',`%d')", OK); |
| printf("define(`CF_CURSES_ERR',`%d')", ERR); |
| printf("define(`CF_CURSES_TRUE',`%d')", TRUE); |
| printf("define(`CF_CURSES_FALSE',`%d')", FALSE); |
| } |
| break; |
| case 'E': |
| { |
| char *buf = (char *)malloc(2048); |
| char *p = buf; |
| int etimin = E_OK; |
| int etimax = E_OK; |
| |
| if (p) |
| { |
| p += eti_gen(p, E_OK, "Ok", &etimin, &etimax); |
| p += eti_gen(p, E_SYSTEM_ERROR, "System_Error", &etimin, &etimax); |
| p += eti_gen(p, E_BAD_ARGUMENT, "Bad_Argument", &etimin, &etimax); |
| p += eti_gen(p, E_POSTED, "Posted", &etimin, &etimax); |
| p += eti_gen(p, E_CONNECTED, "Connected", &etimin, &etimax); |
| p += eti_gen(p, E_BAD_STATE, "Bad_State", &etimin, &etimax); |
| p += eti_gen(p, E_NO_ROOM, "No_Room", &etimin, &etimax); |
| p += eti_gen(p, E_NOT_POSTED, "Not_Posted", &etimin, &etimax); |
| p += eti_gen(p, E_UNKNOWN_COMMAND, |
| "Unknown_Command", &etimin, &etimax); |
| p += eti_gen(p, E_NO_MATCH, "No_Match", &etimin, &etimax); |
| p += eti_gen(p, E_NOT_SELECTABLE, |
| "Not_Selectable", &etimin, &etimax); |
| p += eti_gen(p, E_NOT_CONNECTED, |
| "Not_Connected", &etimin, &etimax); |
| p += eti_gen(p, E_REQUEST_DENIED, |
| "Request_Denied", &etimin, &etimax); |
| p += eti_gen(p, E_INVALID_FIELD, |
| "Invalid_Field", &etimin, &etimax); |
| p += eti_gen(p, E_CURRENT, |
| "Current", &etimin, &etimax); |
| } |
| printf(" subtype Eti_Error is C_Int range %d .. %d;\n\n", |
| etimin, etimax); |
| printf(buf); |
| } |
| break; |
| default: |
| break; |
| } |
| break; |
| /* --------------------------------------------------------------- */ |
| case 'V': /* plain version dump */ |
| { |
| switch (argv[2][0]) |
| { |
| case '1': /* major version */ |
| #ifdef NCURSES_VERSION_MAJOR |
| printf("%d", NCURSES_VERSION_MAJOR); |
| #endif |
| break; |
| case '2': /* minor version */ |
| #ifdef NCURSES_VERSION_MINOR |
| printf("%d", NCURSES_VERSION_MINOR); |
| #endif |
| break; |
| case '3': /* patch level */ |
| #ifdef NCURSES_VERSION_PATCH |
| printf("%d", NCURSES_VERSION_PATCH); |
| #endif |
| break; |
| default: |
| break; |
| } |
| } |
| break; |
| /* --------------------------------------------------------------- */ |
| default: |
| break; |
| } |
| return 0; |
| } |