diff options
author | Ruben Undheim <ruben.undheim@gmail.com> | 2018-10-20 17:43:57 +0200 |
---|---|---|
committer | Ruben Undheim <ruben.undheim@gmail.com> | 2018-10-20 17:43:57 +0200 |
commit | 04d5d0ea0f65a434e568fe031f6396caec9b3a8d (patch) | |
tree | decc35c37120084c4a55311cb4e801524369ff57 /menudep.c |
Import Upstream version 3.8.78.dfsg
Diffstat (limited to 'menudep.c')
-rw-r--r-- | menudep.c | 164 |
1 files changed, 164 insertions, 0 deletions
diff --git a/menudep.c b/menudep.c new file mode 100644 index 0000000..5d83545 --- /dev/null +++ b/menudep.c @@ -0,0 +1,164 @@ +/*----------------------------------------------------------------------*/ +/* menudep.c */ +/* Copyright (c) 2002 Tim Edwards, Johns Hopkins University */ +/*----------------------------------------------------------------------*/ +/* Parse file menus.h and create file of definitions for use by */ +/* "NameToWidget" to find the menu in the widget menu tree. */ +/*----------------------------------------------------------------------*/ +/* */ +/* example: For menustruct Fonts[], */ +/* #define FontsButton 1 */ +/* */ +/* Name is the menustruct name appended with the word "Button". */ +/* The Widget itself will be placed in the WidgetList "menuwidgets" */ +/* */ +/* NAMING CONVENTIONS: */ +/* Cascade Widget: name of menustruct + "Button" */ +/* Button Widgets: name of menustruct + modified name of button */ +/* + "Button" */ +/* */ +/* "modified name" means that only alphanumeric characters are */ +/* used and the macro (if any) in parentheses is removed. */ +/*----------------------------------------------------------------------*/ + +#ifndef TCL_WRAPPER + +#include <stdio.h> +#include <string.h> +#include <stdlib.h> + +#ifndef XC_WIN32 +#include <X11/Intrinsic.h> +#include <X11/StringDefs.h> +#include <X11/Xutil.h> +#endif + +#include "xcircuit.h" + +#define _MENUDEP +#include "menus.h" + +int menucount; +FILE *mp; + +/*----------------------------------------------------------------------*/ + +char *normalize(char *textin) +{ + char *tptr = textin; + char *sptr; + char *newptr = (char *)malloc((strlen(textin) + 1) * sizeof(char)); + sptr = newptr; + + while (*tptr != '\0') { + switch(*tptr) { + case ' ': case ':': case '/': case '!': case '_': case '-': + case '&': case '.': case '<': case '>': + break; + case '(': + while (*tptr != '\0' && *tptr != ')') tptr++; + if (*tptr == '\0') { + printf("Open parenthesis in menu.h: %s\n", textin); + exit(1); + } + break; + default: + *sptr++ = *tptr; + break; + } + tptr++; + } + *sptr = '\0'; + return newptr; +} + +/*----------------------------------------------------------------------*/ + +void log_entry(char *menuname, char *buttonname) +{ + char *n1, *n2; + n1 = normalize(menuname); + n2 = normalize(buttonname); + if (strlen(n2) == 0) + menucount++; + else + fprintf(mp, "#define %s%sButton (menuwidgets[%d])\n", + n1, n2, menucount++); + free(n1); + free(n2); +} + +/*----------------------------------------------------------------------*/ + +void toolbar_entry(char *buttonname) +{ + char *n1; + n1 = normalize(buttonname); + fprintf(mp, "#define %sToolButton (menuwidgets[%d])\n", n1, menucount++); + free(n1); +} + +/*----------------------------------------------------------------------*/ + +void searchsubmenu(char *menuname, menuptr buttonmenu, int arraysize) +{ + menuptr p; + + for (p = buttonmenu; p < buttonmenu + arraysize; p++) { + if (p->submenu != NULL) + searchsubmenu(p->name, p->submenu, p->size); + else if (p->name[0] != ' ') /* anything but a separator */ + log_entry(menuname, p->name); + } +} + +/*----------------------------------------------------------------------*/ + +int main() +{ + short i; + + menucount = 0; + + if ((mp = fopen("menudep.h", "w")) == NULL) { + printf("Unable to open menudep.h for output\n"); + exit(1); + } + + fprintf(mp, "/*-------------------------------------------------------*/\n"); + fprintf(mp, "/* menudep.h generated automatically by program menudep */\n"); + fprintf(mp, "/* from file menus.h. Do not edit. */\n"); + fprintf(mp, "/*-------------------------------------------------------*/\n\n"); + + /* run the same routine as "createmenus()" in xcircuit.c so that the */ + /* ordering will be the same. */ + + for (i = 0; i < maxbuttons; i++) + searchsubmenu(TopButtons[i].name, TopButtons[i].submenu, + TopButtons[i].size); + +#ifdef HAVE_XPM + for (i = 0; i < toolbuttons; i++) + toolbar_entry(ToolBar[i].name); +#endif + + fprintf(mp, "#define MaxMenuWidgets %d\n", menucount); + fprintf(mp, "\n/*-------------------------------------------------------*/\n\n"); + + fclose(mp); + exit(0); +} + +#else + +#include <stdio.h> + +int main() +{ + /* create empty file menudep.h */ + FILE *fid = fopen("menudep.h", "w"); + fclose(fid); + return 0; +} + +#endif /* TCL_WRAPPER */ |