From 0117b0b441d8835a11a2886f3c8aed937dcffa9d Mon Sep 17 00:00:00 2001 From: Kaleb Keithley Date: Fri, 14 Nov 2003 15:54:39 +0000 Subject: R6.6 is the Xorg base-line --- util/Shell.ht | 100 ++++++++ util/StrDefs.ct | 57 +++++ util/StrDefs.ht | 67 +++++ util/makestrs.c | 740 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ util/makestrs.man | 212 ++++++++++++++++ util/string.list | 399 +++++++++++++++++++++++++++++ 6 files changed, 1575 insertions(+) create mode 100644 util/Shell.ht create mode 100644 util/StrDefs.ct create mode 100644 util/StrDefs.ht create mode 100644 util/makestrs.c create mode 100644 util/makestrs.man create mode 100644 util/string.list (limited to 'util') diff --git a/util/Shell.ht b/util/Shell.ht new file mode 100644 index 0000000..6e87abe --- /dev/null +++ b/util/Shell.ht @@ -0,0 +1,100 @@ +/* $Xorg: Shell.ht,v 1.5 2001/02/09 02:03:59 xorgcvs Exp $ */ + +/*********************************************************** + +Copyright 1987, 1988, 1994, 1998 The Open Group + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation. + +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 +OPEN GROUP 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 of The Open Group shall not be +used in advertising or otherwise to promote the sale, use or other dealings +in this Software without prior written authorization from The Open Group. + + +Copyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts. + + All Rights Reserved + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name of Digital not be +used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. + +DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL +DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + +******************************************************************/ + +#ifndef _XtShell_h +#define _XtShell_h + +#include +#include + +/*********************************************************************** + * + * Shell Widget + * + ***********************************************************************/ +/* + * Shell-specific resources names, classes, and a representation type. + */ + +#ifndef XTSTRINGDEFINES +#ifdef __STDC__ +#define _XtShell_h_Const const +#else +#define _XtShell_h_Const /**/ +#endif +#endif + +<<>> + +#ifndef XTSTRINGDEFINES +#undef _XtShell_h_Const +#endif + +/* Class record constants */ + +typedef struct _ShellClassRec *ShellWidgetClass; +typedef struct _OverrideShellClassRec *OverrideShellWidgetClass; +typedef struct _WMShellClassRec *WMShellWidgetClass; +typedef struct _TransientShellClassRec *TransientShellWidgetClass; +typedef struct _TopLevelShellClassRec *TopLevelShellWidgetClass; +typedef struct _ApplicationShellClassRec *ApplicationShellWidgetClass; +typedef struct _SessionShellClassRec *SessionShellWidgetClass; + +#ifndef SHELL +externalref WidgetClass shellWidgetClass; +externalref WidgetClass overrideShellWidgetClass; +externalref WidgetClass wmShellWidgetClass; +externalref WidgetClass transientShellWidgetClass; +externalref WidgetClass topLevelShellWidgetClass; +externalref WidgetClass applicationShellWidgetClass; +externalref WidgetClass sessionShellWidgetClass; +#endif + +#endif /* _XtShell_h */ +/* DON'T ADD STUFF AFTER THIS #endif */ diff --git a/util/StrDefs.ct b/util/StrDefs.ct new file mode 100644 index 0000000..3c4417f --- /dev/null +++ b/util/StrDefs.ct @@ -0,0 +1,57 @@ +/* $Xorg: StrDefs.ct,v 1.4 2001/02/09 02:04:00 xorgcvs Exp $ */ + +/*********************************************************** + +Copyright 1987, 1988, 1994, 1998 The Open Group + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation. + +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 +OPEN GROUP 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 of The Open Group shall not be +used in advertising or otherwise to promote the sale, use or other dealings +in this Software without prior written authorization from The Open Group. + + +Copyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts. + + All Rights Reserved + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name of Digital not be +used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. + +DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL +DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + +******************************************************************/ + +#ifdef __STDC__ +#define Const const +#else +#define Const /**/ +#endif + +<<>> + diff --git a/util/StrDefs.ht b/util/StrDefs.ht new file mode 100644 index 0000000..4132c79 --- /dev/null +++ b/util/StrDefs.ht @@ -0,0 +1,67 @@ +/* $Xorg: StrDefs.ht,v 1.4 2001/02/09 02:04:00 xorgcvs Exp $ */ + +/*********************************************************** + +Copyright 1987, 1988, 1994, 1998 The Open Group + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation. + +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 +OPEN GROUP 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 of The Open Group shall not be +used in advertising or otherwise to promote the sale, use or other dealings +in this Software without prior written authorization from The Open Group. + + +Copyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts. + + All Rights Reserved + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name of Digital not be +used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. + +DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL +DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + +******************************************************************/ + +#ifndef _XtStringDefs_h_ +#define _XtStringDefs_h_ + +#ifndef XTSTRINGDEFINES +#ifdef __STDC__ +#define _XtStringDefs_h_Const const +#else +#define _XtStringDefs_h_Const /**/ +#endif +#endif + +<<>> + +#ifndef XTSTRINGDEFINES +#undef _XtStringDefs_h_Const +#endif + +#endif /* _XtStringDefs_h_ */ diff --git a/util/makestrs.c b/util/makestrs.c new file mode 100644 index 0000000..5d58f35 --- /dev/null +++ b/util/makestrs.c @@ -0,0 +1,740 @@ +/* $Id */ + +/* + +Copyright (c) 1991, 1998 The Open Group + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation. + +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 +OPEN GROUP 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 of The Open Group shall not be +used in advertising or otherwise to promote the sale, use or other dealings +in this Software without prior written authorization from The Open Group. + +*/ + +/* Constructs string definitions */ + +#include +#include +#ifndef X_NOT_STDC_ENV +#include +#else +char *malloc(); +#endif +#if defined(macII) && !defined(__STDC__) /* stdlib.h fails to define these */ +char *malloc(); +#endif /* macII */ + +typedef struct _TableEnt { + struct _TableEnt* next; + char* left; + char* right; + int offset; +} TableEnt; + +typedef struct _Table { + struct _Table* next; + TableEnt* tableent; + TableEnt* tableentcurrent; + TableEnt** tableenttail; + char* name; + int offset; +} Table; + +typedef struct _File { + struct _File* next; + FILE* tmpl; + char* name; + Table* table; + Table* tablecurrent; + Table** tabletail; +} File; + +static File* file = NULL; +static File* filecurrent = NULL; +static File** filetail = &file; +static char* conststr; +static char* prefixstr = NULL; +static char* featurestr = NULL; +static char* ctmplstr = NULL; +static char* fileprotstr; +static char* externrefstr; +static char* externdefstr; + +#define X_DEFAULT_ABI 0 +#define X_ARRAYPER_ABI 1 +#define X_INTEL_ABI 2 +#define X_INTEL_ABI_BC 3 +#define X_SPARC_ABI 4 +#define X_FUNCTION_ABI 5 + +#define X_MAGIC_STRING "<<>>" + +static void WriteHeaderProlog (f, phile) + FILE* f; + File* phile; +{ + Table* t; + TableEnt* te; + + (void) fprintf (f, "#ifdef %s\n", featurestr); + for (t = phile->table; t; t = t->next) + for (te = t->tableent; te; te = te->next) { + if (strcmp (te->left, "RAtom") == 0) { + (void) fprintf (f, + "#ifndef %s%s\n#define %s%s \"%s\"\n#endif\n", + prefixstr, te->left, prefixstr, te->left, te->right); + } else { + (void) fprintf (f, + "#define %s%s \"%s\"\n", + prefixstr, te->left, te->right); + } + } + (void) fprintf (f, "%s", "#else\n"); +} + +static void IntelABIWriteHeader (f, phile) + FILE* f; + File* phile; +{ + Table* t; + TableEnt* te; + + WriteHeaderProlog (f, phile); + + for (t = phile->table; t; t = t->next) { + (void) fprintf (f, "%s %sConst char %s[];\n", + externrefstr, conststr ? conststr : fileprotstr, t->name); + for (te = t->tableent; te; te = te->next) + (void) fprintf (f, + "#ifndef %s%s\n#define %s%s ((char*)&%s[%d])\n#endif\n", + prefixstr, te->left, prefixstr, te->left, t->name, te->offset); + } + + (void) fprintf (f, "#endif /* %s */\n", featurestr); +} + +static void SPARCABIWriteHeader (f, phile) + FILE* f; + File* phile; +{ + Table* t; + TableEnt* te; + + for (t = phile->table; t; t = t->next) + for (te = t->tableent; te; te = te->next) + (void) fprintf (f, "#define %s%s \"%s\"\n", + prefixstr, te->left, te->right); +} + +static void FunctionWriteHeader (f, phile) + FILE* f; + File* phile; +{ + Table* t; + TableEnt* te; + + WriteHeaderProlog (f, phile); + + (void) fprintf (f, "%s %sConst char* %s();\n", + externrefstr, conststr ? conststr : fileprotstr, + phile->table->name); + + for (t = phile->table; t; t = t->next) + for (te = t->tableent; te; te = te->next) + (void) fprintf (f, + "#ifndef %s%s\n#define %s%s (%s(%d))\n#endif\n", + prefixstr, te->left, prefixstr, te->left, phile->table->name, + te->offset); + + (void) fprintf (f, "#endif /* %s */\n", featurestr); +} + +static void ArrayperWriteHeader (f, phile) + FILE* f; + File* phile; +{ + Table* t; + TableEnt* te; + + WriteHeaderProlog (f, phile); + + for (t = phile->table; t; t = t->next) + for (te = t->tableent; te; te = te->next) + (void) fprintf (f, + "#ifndef %s%s\n%s %sConst char %s%s[];\n#endif\n", + prefixstr, te->left, + externrefstr, conststr ? conststr : fileprotstr, + prefixstr, te->left); + + (void) fprintf (f, "#endif /* %s */\n", featurestr); +} + +static void DefaultWriteHeader (f, phile) + FILE* f; + File* phile; +{ + Table* t; + TableEnt* te; + + WriteHeaderProlog (f, phile); + + (void) fprintf (f, "%s %sConst char %s[];\n", + externrefstr, conststr ? conststr : fileprotstr, + phile->table->name); + + for (t = phile->table; t; t = t->next) + for (te = t->tableent; te; te = te->next) + (void) fprintf (f, + "#ifndef %s%s\n#define %s%s ((char*)&%s[%d])\n#endif\n", + prefixstr, te->left, prefixstr, te->left, phile->table->name, + te->offset); + + (void) fprintf (f, "#endif /* %s */\n", featurestr); +} + +static void CopyTmplProlog (tmpl, f) + FILE* tmpl; + FILE* f; +{ + char buf[1024]; + static char* magic_string = X_MAGIC_STRING; + int magic_string_len = strlen (magic_string); + + while (fgets (buf, sizeof buf, tmpl)) { + if (strncmp (buf, magic_string, magic_string_len) == 0) { + return; + } + (void) fputs (buf, f); + } +} + +static void CopyTmplEpilog (tmpl, f) + FILE* tmpl; + FILE* f; +{ + char buf[1024]; + + while (fgets (buf, sizeof buf, tmpl)) + (void) fputs (buf, f); +} + +static char* abistring[] = { + "Default", "Array per string", "Intel", "Intel BC", "SPARC", "Function" }; + +static void WriteHeader (tagline, phile, abi) + char* tagline; + File* phile; + int abi; +{ + FILE* f; + char* tmp; + Table* t; + TableEnt* te; + static void (*headerproc[])() = { + DefaultWriteHeader, ArrayperWriteHeader, + IntelABIWriteHeader, IntelABIWriteHeader, + SPARCABIWriteHeader, FunctionWriteHeader }; + + if ((f = fopen (phile->name, "w+")) == NULL) exit (1); + + if (phile->tmpl) CopyTmplProlog (phile->tmpl, f); + + (void) fprintf (f, + "%s\n%s\n/* %s ABI version -- Do not edit */\n", + "/* $Xorg: makestrs.c,v 1.6 2001/02/09 02:03:17 xorgcvs Exp $ */", + "/* This file is automatically generated. */", + abistring[abi]); + + if (tagline) (void) fprintf (f, "/* %s */\n\n", tagline); + + /* do the right thing for Motif, i.e. avoid _XmXmStrDefs_h_ */ + if (strcmp (prefixstr, "Xm") == 0) { + if ((fileprotstr = malloc (strlen (phile->name) + 3)) == NULL) + exit (1); + (void) sprintf (fileprotstr, "_%s_", phile->name); + } else { + if ((fileprotstr = malloc (strlen (phile->name) + strlen (prefixstr) + 3)) == NULL) + exit (1); + (void) sprintf (fileprotstr, "_%s%s_", prefixstr, phile->name); + } + + for (tmp = fileprotstr; *tmp; tmp++) if (*tmp == '.') *tmp = '_'; + + (*headerproc[abi])(f, phile); + + if (phile->tmpl) CopyTmplEpilog (phile->tmpl, f); + + (void) free (fileprotstr); + (void) fclose (phile->tmpl); + (void) fclose (f); +} + +static void WriteSourceLine (te, abi, fudge) + TableEnt* te; + int abi; +{ + char* c; + + for (c = te->right; *c; c++) (void) printf ("'%c',", *c); + (void) printf ("%c", '0'); + if (te->next || fudge) (void) printf ("%c", ','); + (void) printf ("%s", "\n"); +} + +static char* const_string = "%s %sConst char %s[] = {\n"; + +static void IntelABIWriteSource (abi) + int abi; +{ + File* phile; + + for (phile = file; phile; phile = phile->next) { + Table* t; + TableEnt* te; + + for (t = phile->table; t; t = t->next) { + (void) printf (const_string, externdefstr, + conststr ? conststr : "", t->name); + for (te = t->tableent; te; te = te->next) + WriteSourceLine (te, abi, 0); + (void) printf ("%s\n\n", "};"); + } + } +} + +static void IntelABIBCWriteSource (abi) + int abi; +{ + File* phile; + + for (phile = file; phile; phile = phile->next) { + Table* t; + TableEnt* te; + + (void) printf (const_string, externdefstr, + conststr ? conststr : "", phile->table->name); + + for (t = phile->table; t; t = t->next) + for (te = t->tableent; te; te = te->next) + WriteSourceLine (te, abi, t->next ? 1 : 0); + (void) printf ("%s\n\n", "};"); + + if (phile->table->next) { + (void) printf (const_string, externdefstr, + conststr ? conststr : "", phile->table->next->name); + for (t = phile->table->next; t; t = t->next) + for (te = t->tableent; te; te = te->next) + WriteSourceLine (te, abi, 0); + (void) printf ("%s\n\n", "};"); + } + } +} + +static void FunctionWriteSource (abi) + int abi; +{ + File* phile; + + for (phile = file; phile; phile = phile->next) { + Table* t; + TableEnt* te; + + (void) printf ("static %sConst char _%s[] = {\n", + conststr ? conststr : "", phile->table->name); + + for (t = phile->table; t; t = t->next) + for (te = t->tableent; te; te = te->next) + WriteSourceLine (te, abi, t->next ? 1 : 0); + (void) printf ("%s\n\n", "};"); + + (void) printf ("%sConst char* %s(index)\n int index;\n{\n return &_%s[index];\n}\n\n", + conststr ? conststr : "", + phile->table->name, phile->table->name); + } +} + +static void ArrayperWriteSource (abi) + int abi; +{ + File* phile; + static int done_atom; + + for (phile = file; phile; phile = phile->next) { + Table* t; + TableEnt* te; + + for (t = phile->table; t; t = t->next) + for (te = t->tableent; te; te = te->next) { + if (strcmp (te->left, "RAtom") == 0) { + if (done_atom) return; + done_atom = 1; + } + (void) printf ("%s %sConst char %s%s[] = \"%s\";\n", + externdefstr, conststr ? conststr : prefixstr, + te->left, te->right); + } + } +} + +static void DefaultWriteSource (abi) + int abi; +{ + File* phile; + + for (phile = file; phile; phile = phile->next) { + Table* t; + TableEnt* te; + + (void) printf (const_string, externdefstr, conststr ? conststr : "", + phile->table->name); + + for (t = phile->table; t; t = t->next) + for (te = t->tableent; te; te = te->next) + WriteSourceLine (te, abi, t->next ? 1 : 0); + (void) printf ("%s\n\n", "};"); + } +} + +static void WriteSource(tagline, abi) + char* tagline; + int abi; +{ + static void (*sourceproc[])() = { + DefaultWriteSource, ArrayperWriteSource, + IntelABIWriteSource, IntelABIBCWriteSource, + DefaultWriteSource, FunctionWriteSource }; + + FILE* tmpl; + + if (ctmplstr) { + tmpl = fopen (ctmplstr, "r"); + + if (tmpl) CopyTmplProlog (tmpl, stdout); + else { + (void) fprintf (stderr, "Expected template %s, not found\n", + ctmplstr); + exit (1); + } + } else + tmpl = NULL; + + + (void) printf ("%s\n%s\n/* %s ABI version -- Do not edit */\n", + "/* $Xorg: makestrs.c,v 1.6 2001/02/09 02:03:17 xorgcvs Exp $ */", + "/* This file is automatically generated. */", + abistring[abi]); + + if (tagline) (void) printf ("/* %s */\n\n", tagline); + + (*sourceproc[abi])(abi); + + if (tmpl) CopyTmplEpilog (tmpl, stdout); +} + +static void DoLine(buf) + char* buf; +{ +#define X_NO_TOKEN 0 +#define X_FILE_TOKEN 1 +#define X_TABLE_TOKEN 2 +#define X_PREFIX_TOKEN 3 +#define X_FEATURE_TOKEN 4 +#define X_EXTERNREF_TOKEN 5 +#define X_EXTERNDEF_TOKEN 6 +#define X_CTMPL_TOKEN 7 +#define X_HTMPL_TOKEN 8 +#define X_CONST_TOKEN 9 + + int token; + char lbuf[1024]; + static char* file_str = "#file"; + static char* table_str = "#table"; + static char* prefix_str = "#prefix"; + static char* feature_str = "#feature"; + static char* externref_str = "#externref"; + static char* externdef_str = "#externdef"; + static char* ctmpl_str = "#ctmpl"; + static char* htmpl_str = "#htmpl"; + static char* const_str = "#const"; + + if (strncmp (buf, file_str, strlen (file_str)) == 0) + token = X_FILE_TOKEN; + else if (strncmp (buf, table_str, strlen (table_str)) == 0) + token = X_TABLE_TOKEN; + else if (strncmp (buf, prefix_str, strlen (prefix_str)) == 0) + token = X_PREFIX_TOKEN; + else if (strncmp (buf, feature_str, strlen (feature_str)) == 0) + token = X_FEATURE_TOKEN; + else if (strncmp (buf, externref_str, strlen (externref_str)) == 0) + token = X_EXTERNREF_TOKEN; + else if (strncmp (buf, externdef_str, strlen (externdef_str)) == 0) + token = X_EXTERNDEF_TOKEN; + else if (strncmp (buf, ctmpl_str, strlen (ctmpl_str)) == 0) + token = X_CTMPL_TOKEN; + else if (strncmp (buf, htmpl_str, strlen (htmpl_str)) == 0) + token = X_HTMPL_TOKEN; + else if (strncmp (buf, const_str, strlen (const_str)) == 0) + token = X_CONST_TOKEN; + else + token = X_NO_TOKEN; + + switch (token) { + case X_FILE_TOKEN: + { + File* phile; + + if ((phile = (File*) malloc (sizeof(File))) == NULL) + exit(1); + if ((phile->name = malloc (strlen (buf + strlen (file_str)) + 1)) == NULL) + exit(1); + (void) strcpy (phile->name, buf + strlen (file_str) + 1); + phile->table = NULL; + phile->tablecurrent = NULL; + phile->tabletail = &phile->table; + phile->next = NULL; + phile->tmpl = NULL; + + *filetail = phile; + filetail = &phile->next; + filecurrent = phile; + } + break; + case X_TABLE_TOKEN: + { + Table* table; + if ((table = (Table*) malloc (sizeof(Table))) == NULL) + exit(1); + if ((table->name = malloc (strlen (buf + strlen (table_str)) + 1)) == NULL) + exit(1); + (void) strcpy (table->name, buf + strlen (table_str) + 1); + table->tableent = NULL; + table->tableentcurrent = NULL; + table->tableenttail = &table->tableent; + table->next = NULL; + table->offset = 0; + + *filecurrent->tabletail = table; + filecurrent->tabletail = &table->next; + filecurrent->tablecurrent = table; + } + break; + case X_PREFIX_TOKEN: + if ((prefixstr = malloc (strlen (buf + strlen (prefix_str)) + 1)) == NULL) + exit(1); + (void) strcpy (prefixstr, buf + strlen (prefix_str) + 1); + break; + case X_FEATURE_TOKEN: + if ((featurestr = malloc (strlen (buf + strlen (feature_str)) + 1)) == NULL) + exit(1); + (void) strcpy (featurestr, buf + strlen (feature_str) + 1); + break; + case X_EXTERNREF_TOKEN: + if ((externrefstr = malloc (strlen (buf + strlen (externref_str)) + 1)) == NULL) + exit(1); + (void) strcpy (externrefstr, buf + strlen (externref_str) + 1); + break; + case X_EXTERNDEF_TOKEN: + if ((externdefstr = malloc (strlen (buf + strlen (externdef_str)) + 1)) == NULL) + exit(1); + (void) strcpy (externdefstr, buf + strlen (externdef_str) + 1); + break; + case X_CTMPL_TOKEN: + if ((ctmplstr = malloc (strlen (buf + strlen (ctmpl_str)) + 1)) == NULL) + exit(1); + (void) strcpy (ctmplstr, buf + strlen (ctmpl_str) + 1); + break; + case X_HTMPL_TOKEN: + if ((filecurrent->tmpl = fopen (buf + strlen (htmpl_str) + 1, "r")) == NULL) { + (void) fprintf (stderr, + "Expected template %s, not found\n", htmpl_str); + exit (1); + } + break; + case X_CONST_TOKEN: + if ((conststr = malloc (strlen (buf + strlen (const_str)) + 1)) == NULL) + exit(1); + (void) strcpy (conststr, buf + strlen (const_str) + 1); + break; + default: + { + char* right; + TableEnt* tableent; + int llen; + int rlen; + int len; + + if ((right = index(buf, ' '))) + *right++ = 0; + else + right = buf + 1; + if (buf[0] == 'H') { + strcpy (lbuf, prefixstr); + strcat (lbuf, right); + right = lbuf; + } + + llen = len = strlen(buf) + 1; + rlen = strlen(right) + 1; + if (right != buf + 1) len += rlen; + if ((tableent = (TableEnt*)malloc(sizeof(TableEnt) + len)) == NULL) + exit(1); + tableent->left = (char *)(tableent + 1); + strcpy(tableent->left, buf); + if (llen != len) { + tableent->right = tableent->left + llen; + strcpy(tableent->right, right); + } else { + tableent->right = tableent->left + 1; + } + tableent->next = NULL; + + *filecurrent->tablecurrent->tableenttail = tableent; + filecurrent->tablecurrent->tableenttail = &tableent->next; + filecurrent->tablecurrent->tableentcurrent = tableent; + } + break; + } +} + +static void IntelABIIndexEntries (file) + File* file; +{ + Table* t; + TableEnt* te; + + for (t = file->table; t; t = t->next) + for (te = t->tableent; te; te = te->next) { + te->offset = t->offset; + t->offset += strlen (te->right); + t->offset++; + } +} + +static void DefaultIndexEntries (file) + File* file; +{ + Table* t; + TableEnt* te; + int offset = 0; + + for (t = file->table; t; t = t->next) + for (te = t->tableent; te; te = te->next) { + te->offset = offset; + offset += strlen (te->right); + offset++; + } +} + +static void IndexEntries (file,abi) + File* file; + int abi; +{ + switch (abi) { + case X_SPARC_ABI: + break; + case X_INTEL_ABI: + case X_INTEL_ABI_BC: + IntelABIIndexEntries (file); + break; + default: + DefaultIndexEntries (file); + break; + } +} + +static char* DoComment (line) + char* line; +{ + char* tag; + char* eol; + char* ret; + int len; + + /* assume that the first line with two '$' in it is the RCS tag line */ + if ((tag = index (line, '$')) == NULL) return NULL; + if ((eol = index (tag + 1, '$')) == NULL) return NULL; + len = eol - tag; + if ((ret = malloc (len)) == NULL) + exit (1); + (void) strncpy (ret, tag + 1, len - 1); + ret[len - 2] = 0; + return ret; +} + +int main(argc, argv) + int argc; + char** argv; +{ + int len, i; + char* tagline = NULL; + File* phile; + FILE *f; + char buf[1024]; + int abi = +#ifndef ARRAYPERSTR + X_DEFAULT_ABI; +#else + X_ARRAYPER_ABI; +#endif + + f = stdin; + if (argc > 1) { + for (i = 1; i < argc; i++) { + if (strcmp (argv[i], "-f") == 0) { + if (++i < argc) + f = fopen (argv[i], "r"); + else + return 1; + } + if (strcmp (argv[i], "-sparcabi") == 0) + abi = X_SPARC_ABI; + if (strcmp (argv[i], "-intelabi") == 0) + abi = X_INTEL_ABI; + if (strcmp (argv[i], "-functionabi") == 0) + abi = X_FUNCTION_ABI; + if (strcmp (argv[i], "-earlyR6bc") == 0 && abi == X_INTEL_ABI) + abi = X_INTEL_ABI_BC; + if (strcmp (argv[i], "-arrayperabi") == 0) + abi = X_ARRAYPER_ABI; +#ifdef ARRAYPERSTR + if (strcmp (argv[i], "-defaultabi") == 0) + abi = X_DEFAULT_ABI; +#endif + } + } + + if (f == NULL) return 1; + while (fgets(buf, sizeof buf, f)) { + if (!buf[0] || buf[0] == '\n') + continue; + if (buf[0] == '!') { + if (tagline) continue; + tagline = DoComment (buf); + continue; + } + if (buf[(len = strlen (buf) - 1)] == '\n') buf[len] = '\0'; + DoLine(buf); + } + for (phile = file; phile; phile = phile->next) { + if (abi != X_ARRAYPER_ABI) IndexEntries (phile, abi); + WriteHeader (tagline, phile, abi); + } + WriteSource(tagline, abi); + return 0; +} + diff --git a/util/makestrs.man b/util/makestrs.man new file mode 100644 index 0000000..7cc6b4c --- /dev/null +++ b/util/makestrs.man @@ -0,0 +1,212 @@ +.\" $Xorg: makestrs.man,v 1.4 2001/02/09 02:03:17 xorgcvs Exp $ +.\" Copyright (c) 1993, 1994, 1998 The Open Group +.\" +.\" Permission to use, copy, modify, distribute, and sell this software and its +.\" documentation for any purpose is hereby granted without fee, provided that +.\" the above copyright notice appear in all copies and that both that +.\" copyright notice and this permission notice appear in supporting +.\" documentation. +.\" +.\" 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 OPEN GROUP 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 of The Open Group shall not +.\" be used in advertising or otherwise to promote the sale, use or other +.\" dealing in this Software without prior written authorization from The +.\" Open Group. +.TH MAKESTRS 1 "Release 6.4" "X Version 11" +.SH NAME +makestrs \- makes string table C source and header(s) +.SH SYNOPSIS +.B makestrs [-f source] [-abioptions ...] +.SH DESCRIPTION +The +.I makestrs +command creates string table C source files and headers. +If +.I -f +.I source +is not specified +.I makestrs +will read from +.I stdin. +The C source file is always written to +.I stdout. +.I makestrs +creates one or more C header files as specified in the source file. +The following options may be specified: +.I -sparcabi, +.I -intelabi, +.I -functionabi, +.I -arrayperabi, +and +.I -defaultabi. +.LP +.I -sparcabi +is used on SPARC platforms conforming to the SPARC +Compliance Definition, i.e. SVR4/Solaris. +.LP +.I -intelabi +is used on Intel platforms conforming to the System +V Application Binary Interface, i.e. SVR4. +.LP +.I -earlyR6abi +may be used in addition to +.I -intelabi +for situations +where the vendor wishes to maintain binary compatiblity between +X11R6 public-patch 11 (and earlier) and X11R6 public-patch 12 (and later). +.LP +.I -functionabi +generates a functional abi to the string table. This +mechanism imposes a severe performance penalty and it's recommended +that you not use it. +.LP +.I -arrayperabi +results in a separate array for each string. This is +the default behavior if makestrs was compiled with -DARRAYPERSTR +(it almost never is). +.LP +.I -defaultabi +forces the generation of the "normal" string table even +if makestrs was compiled with -DARRAYPERSTR. Since makestrs is almost +never compiled with -DARRAYPERSTR this is the default behavior if +no abioptions are specified. +.SH SYNTAX +The syntax for string-list file is (items in square brackets are optional): +.RS 4 +#prefix +.RE +.RS 4 +#feature +.RE +.RS 4 +#externref +.RE +.RS 4 +#externdef [] +.RE +.RS 4 +[#ctempl ] +.RE +.LP +.RS 4 +#file +.RE +.RS 4 +#table +.RE +.RS 4 +[#htempl] +.RE +.RS 4 + +.RE +.RS 4 +... +.RE +.RS 4 + +.RE +.RS 4 +[#table +.RE +.RS 4 + +.RE +.RS 4 +... +.RE +.RS 4 + +.RE +.RS 4 +... +.RE +.RS 4 +#table +.RE +.RS 4 +...] +.RE +.RS 4 +[#file +.RE +.RS 4 +...] +.RE +.LP +In words you may have one or more #file directives. Each #file may have +one or more #table directives. +.LP +The #prefix directive determines the string that makestr will prefix +to each definition. +.LP +The #feature directive determines the string that makestr will use +for the feature-test macro, e.g. X[TM]STRINGDEFINES. +.LP +The #externref directive determines the string that makestr will use +for the extern clause, typically this will be "extern" but Motif wants +it to be "externalref" +.LP +The #externdef directive determines the string that makestr will use +for the declaration, typically this will be the null string (note that +makestrs requires a trailing space in this case, i.e. "#externdef "), +and Motif will use "externaldef(_xmstrings). +.LP +The #ctmpl directive determines the name of the file used as a template +for the C source file that is generated +.LP +Each #file directive will result in a corresponding header +file by that name containing the appropriate definitions as specified +by command line options. A single C source file containing the +declarations for the definitions in all the headers will be printed +to stdout. +.LP +The #htmpl directive determines the name of the file used as a template +for the C header file that is generated. +.LP +Each #table directive will be processed in accordance with +the ABI. On most platforms all tables will be catenated into a single +table with the name of the first table for that file. To conform to +the Intel ABI separate tables will be generated with the names indicated. +.LP +The template files specified by the #ctmpl and #htmpl directives +are processed by copying line for line from the template file to +the appropriate output file. The line containing the string +.I <<>> +is not copied to the output file. The appropriate data is then +copied to the output file and then the remainder of the template +file is copied to the output file. +.SH BUGS +makestrs is not very forgiving of syntax errors. Sometimes you need +a trailing space after # directives, other times they will mess you +up. No warning messages are emitted. +.SH SEE ALSO +SPARC Compliance Definition 2.2., SPARC International Inc., +535 Middlefield Road, Suite 210, Menlo Park, CA 94025 +.LP +System V Application Binary Interface, Third Edition, +ISBN 0-13-100439-5 +UNIX Press, PTR Prentice Hall, 113 Sylvan Avenue, Englewood Cliffs, +NJ 07632 +.LP +System V Application Binary Interface, Third Edition, Intel386 +Architecture Processor Supplement +ISBN 0-13-104670-5 +UNIX Press, PTR Prentice Hall, 113 Sylvan Avenue, Englewood Cliffs, +NJ 07632 +.LP +System V Application Binary Interface, Third Edition, SPARC +Architecture Processor Supplement +ISBN 0-13-104696-9 +UNIX Press, PTR Prentice Hall, 113 Sylvan Avenue, Englewood Cliffs, +NJ 07632 diff --git a/util/string.list b/util/string.list new file mode 100644 index 0000000..bef098c --- /dev/null +++ b/util/string.list @@ -0,0 +1,399 @@ +! $Xorg: string.list,v 1.3 2000/08/17 19:46:22 cpqbld Exp $ +! NOTE: To maintain binary compatibility, you can only APPEND items within +! a given list!!!! +! +! See the makestrs(1) manual. +! + +#prefix Xt +#feature XTSTRINGDEFINES +#externref extern +#externdef +! note that the trailing space is required in the #externdef line. +#ctmpl util/StrDefs.ct + +#file StringDefs.h +#table XtStrings +#htmpl util/StrDefs.ht + +Naccelerators +NallowHoriz +NallowVert +NancestorSensitive +Nbackground +NbackgroundPixmap +Nbitmap +NborderColor +Nborder borderColor +NborderPixmap +NborderWidth +Ncallback +Nchildren +Ncolormap +Ndepth +NdestroyCallback +NeditType +Nfile +Nfont +NforceBars +Nforeground +Nfunction +Nheight +Nhighlight +NhSpace +Nindex +NinitialResourcesPersistent +NinnerHeight +NinnerWidth +NinnerWindow +NinsertPosition +NinternalHeight +NinternalWidth +NjumpProc +Njustify +NknobHeight +NknobIndent +NknobPixel +NknobWidth +Nlabel +Nlength +NlowerRight +NmappedWhenManaged +NmenuEntry +Nname +Nnotify +NnumChildren +Norientation +Nparameter +Npixmap +NpopupCallback +NpopdownCallback +Nresize +NreverseVideo +Nscreen +NscrollProc +NscrollDCursor +NscrollHCursor +NscrollLCursor +NscrollRCursor +NscrollUCursor +NscrollVCursor +Nselection +NselectionArray +Nsensitive +Nshown +Nspace +Nstring +NtextOptions +NtextSink +NtextSource +Nthickness +Nthumb +NthumbProc +Ntop +Ntranslations +NunrealizeCallback +Nupdate +NuseBottom +NuseRight +Nvalue +NvSpace +Nwidth +Nwindow +Nx +Ny +CAccelerators +CBackground +CBitmap +CBoolean +CBorderColor +CBorderWidth +CCallback +CColormap +CColor +CCursor +CDepth +CEditType +CEventBindings +CFile +CFont +CForeground +CFraction +CFunction +CHeight +CHSpace +CIndex +CInitialResourcesPersistent +CInsertPosition +CInterval +CJustify +CKnobIndent +CKnobPixel +CLabel +CLength +CMappedWhenManaged +CMargin +CMenuEntry +CNotify +COrientation +CParameter +CPixmap +CPosition +CReadOnly +CResize +CReverseVideo +CScreen +CScrollProc +CScrollDCursor +CScrollHCursor +CScrollLCursor +CScrollRCursor +CScrollUCursor +CScrollVCursor +CSelection +CSensitive +CSelectionArray +CSpace +CString +CTextOptions +CTextPosition +CTextSink +CTextSource +CThickness +CThumb +CTranslations +CValue +CVSpace +CWidth +CWindow +CX +CY +RAcceleratorTable +RAtom +RBitmap +RBool +RBoolean +RCallback +RCallProc +RCardinal +RColor +RColormap +RCursor +RDimension +RDisplay +REditMode +REnum +RFile +RFloat +RFont +RFontStruct +RFunction +RGeometry +RImmediate +RInitialState +RInt +RJustify +RLongBoolean Bool +RObject +ROrientation +RPixel +RPixmap +RPointer +RPosition +RScreen +RShort +RString +RStringArray +RStringTable +RUnsignedChar +RTranslationTable +RVisual +RWidget +RWidgetClass +RWidgetList +RWindow +Eoff +Efalse +Eno +Eon +Etrue +Eyes +Evertical +Ehorizontal +EtextRead read +EtextAppend append +EtextEdit edit +Extdefaultbackground +Extdefaultforeground +Extdefaultfont +NfontSet +RFontSet +CFontSet + +#table XtStringsR6 + +RGravity +NcreateHook +NchangeHook +NconfigureHook +NgeometryHook +NdestroyHook +Nshells +NnumShells +RCommandArgArray +RDirectoryString +REnvironmentArray +RRestartStyle +RSmcConn +Hcreate +HsetValues +HmanageChildren +HunmanageChildren +HmanageSet +HunmanageSet +HrealizeWidget +HunrealizeWidget +HaddCallback +HaddCallbacks +HremoveCallback +HremoveCallbacks +HremoveAllCallbacks +HaugmentTranslations +HoverrideTranslations +HuninstallTranslations +HsetKeyboardFocus +HsetWMColormapWindows +HsetMappedWhenManaged +HmapWidget +HunmapWidget +Hpopup +HpopupSpringLoaded +Hpopdown +Hconfigure +HpreGeometry +HpostGeometry +Hdestroy + +#file Shell.h +#table XtShellStrings +#htmpl util/Shell.ht + +NiconName +CIconName +NiconPixmap +CIconPixmap +NiconWindow +CIconWindow +NiconMask +CIconMask +NwindowGroup +CWindowGroup +Nvisual +CVisual +NtitleEncoding +CTitleEncoding +NsaveUnder +CSaveUnder +Ntransient +CTransient +NoverrideRedirect +COverrideRedirect +NtransientFor +CTransientFor +NiconNameEncoding +CIconNameEncoding +NallowShellResize +CAllowShellResize +NcreatePopupChildProc +CCreatePopupChildProc +Ntitle +CTitle +RAtom +Nargc +CArgc +Nargv +CArgv +NiconX +CIconX +NiconY +CIconY +Ninput +CInput +Niconic +CIconic +NinitialState +CInitialState +Ngeometry +CGeometry +NbaseWidth +CBaseWidth +NbaseHeight +CBaseHeight +NwinGravity +CWinGravity +NminWidth +CMinWidth +NminHeight +CMinHeight +NmaxWidth +CMaxWidth +NmaxHeight +CMaxHeight +NwidthInc +CWidthInc +NheightInc +CHeightInc +NminAspectY +CMinAspectY +NmaxAspectY +CMaxAspectY +NminAspectX +CMinAspectX +NmaxAspectX +CMaxAspectX +NwmTimeout +CWmTimeout +NwaitForWm waitforwm +CWaitForWm Waitforwm + +#table XtShellStringsR6 + +Nwaitforwm +CWaitforwm +NclientLeader +CClientLeader +NwindowRole +CWindowRole +Nurgency +CUrgency +NcancelCallback +NcloneCommand +CCloneCommand +Nconnection +CConnection +NcurrentDirectory +CCurrentDirectory +NdieCallback +NdiscardCommand +CDiscardCommand +Nenvironment +CEnvironment +NinteractCallback +NjoinSession +CJoinSession +NprogramPath +CProgramPath +NresignCommand +CResignCommand +NrestartCommand +CRestartCommand +NrestartStyle +CRestartStyle +NsaveCallback +NsaveCompleteCallback +NsessionID +CSessionID +NshutdownCommand +CShutdownCommand +NerrorCallback + -- cgit v1.2.1