+++ /dev/null
-/*
- * CDE - Common Desktop Environment
- *
- * Copyright (c) 1993-2012, The Open Group. All rights reserved.
- *
- * These libraries and programs are free software; you can
- * redistribute them and/or modify them under the terms of the GNU
- * Lesser General Public License as published by the Free Software
- * Foundation; either version 2 of the License, or (at your option)
- * any later version.
- *
- * These libraries and programs are distributed in the hope that
- * they will be useful, but WITHOUT ANY WARRANTY; without even the
- * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- * PURPOSE. See the GNU Lesser General Public License for more
- * details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with these libraries and programs; if not, write
- * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
- * Floor, Boston, MA 02110-1301 USA
- */
-/* $XConsortium: basetbl.c /main/3 1995/11/01 15:50:27 rswiston $ */
-/** %W% **/
-
-/* Copyright (c) 1991, 1992 UNIX System Laboratories, Inc. */
-/* All Rights Reserved */
-
-/* THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF UNIX System Laboratories, Inc. */
-/* The copyright notice above does not evidence any */
-/* actual or intended publication of such source code. */
-
-#include "stdio.h"
-#include <sys/types.h>
-#include "exksh.h"
-#include "msgs.h"
-
-/*
- * Declare all strings in one place to avoid duplication
- */
-char STR_uint[] = "uint";
-static char STR_intp[] = "intp";
-static char STR_int[] = "int";
-static char STR_dint[] = "dint";
-char STR_unsigned_long[] = "unsigned_long";
-static char STR_longp[] = "longp";
-static char STR_long[] = "long";
-static char STR_dlong[] = "dlong";
-static char STR_ushort[] = "ushort";
-static char STR_short[] = "short";
-static char STR_dshort[] = "dshort";
-static char STR_unchar[] = "unchar";
-static char STR_char[] = "char";
-char STR_string_t[] = "string_t";
-
-struct memtbl T_uint[] = {
- { (char *) STR_uint, (char *) STR_uint, K_INT, F_SIMPLE, -1, 0, 0, 0, 0, 0, sizeof(uint), 0 }, NULL
-};
-struct memtbl T_dint[] = {
- { (char *) STR_dint, (char *) STR_dint, K_DINT, F_SIMPLE, -1, 0, 0, 0, 0, 0, sizeof(int) }, NULL
-};
-struct memtbl T_int[] = {
- { (char *) STR_int, (char *) STR_int, K_INT, F_SIMPLE, -1, 0, 0, 0, 0, 0, sizeof(int) }, NULL
-};
-struct memtbl T_intp[] = {
- { (char *) STR_intp, (char *) STR_intp, K_INT, F_SIMPLE, -1, 1, 0, 0, 0, 0, sizeof(int) }, NULL
-};
-struct memtbl T_unsigned_long[] = {
- { (char *) STR_unsigned_long, (char *) STR_unsigned_long, K_LONG, F_SIMPLE, -1, 0, 0, 0, 0, 0, sizeof(unsigned long), 0 }, NULL
-};
-struct memtbl T_long[] = {
- { (char *) STR_long, (char *) STR_long, K_LONG, F_SIMPLE, -1, 0, 0, 0, 0, 0, sizeof(long) }, NULL
-};
-struct memtbl T_dlong[] = {
- { (char *) STR_dlong, (char *) STR_dlong, K_DLONG, F_SIMPLE, -1, 0, 0, 0, 0, 0, sizeof(long) }, NULL
-};
-struct memtbl T_longp[] = {
- { (char *) STR_longp, (char *) STR_longp, K_LONG, F_SIMPLE, -1, 1, 0, 0, 0, 0, sizeof(long) }, NULL
-};
-struct memtbl T_ushort[] = {
- { (char *) STR_ushort, (char *) STR_ushort, K_SHORT, F_SIMPLE, -1, 0, 0, 0, 0, 0, sizeof(ushort) }, NULL
-};
-struct memtbl T_short[] = {
- { (char *) STR_dshort, (char *) STR_dshort, K_DSHORT, F_SIMPLE, -1, 0, 0, 0, 0, 0, sizeof(short) }, NULL
-};
-struct memtbl T_dshort[] = {
- { (char *) STR_short, (char *) STR_short, K_SHORT, F_SIMPLE, -1, 0, 0, 0, 0, 0, sizeof(short) }, NULL
-};
-struct memtbl T_unchar[] = {
- { (char *) STR_unchar, (char *) STR_unchar, K_CHAR, F_SIMPLE, -1, 0, 0, 0, 0, 0, sizeof(unsigned char) }, NULL
-};
-struct memtbl T_char[] = {
- { (char *) STR_char, (char *) STR_char, K_CHAR, F_SIMPLE, -1, 0, 0, 0, 0, 0, sizeof(char) }, NULL
-};
-struct memtbl T_string_t[] = {
- { (char *) STR_string_t, (char *) STR_string_t, K_STRING, F_TYPE_IS_PTR, -1, 0, 0, -1, 0, 0, sizeof(char *) }, NULL
-};
-struct memtbl *basemems[] = {
- T_uint,
- T_int,
- T_dint,
- T_intp,
- T_unsigned_long,
- T_long,
- T_dlong,
- T_longp,
- T_ushort,
- T_short,
- T_dshort,
- T_unchar,
- T_char,
- T_string_t,
- NULL
-};
-
-struct symarray basedefs[] = {
- { "PRDECIMAL", PRDECIMAL },
- { "PRHEX", PRHEX },
- { "PRMIXED", PRMIXED },
- { "PRMIXED_SYMBOLIC", PRMIXED_SYMBOLIC },
- { "PRNAMES", PRNAMES },
- { "PRSYMBOLIC", PRSYMBOLIC },
- { NULL, 0 }
-};
+++ /dev/null
-/*
- * CDE - Common Desktop Environment
- *
- * Copyright (c) 1993-2012, The Open Group. All rights reserved.
- *
- * These libraries and programs are free software; you can
- * redistribute them and/or modify them under the terms of the GNU
- * Lesser General Public License as published by the Free Software
- * Foundation; either version 2 of the License, or (at your option)
- * any later version.
- *
- * These libraries and programs are distributed in the hope that
- * they will be useful, but WITHOUT ANY WARRANTY; without even the
- * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- * PURPOSE. See the GNU Lesser General Public License for more
- * details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with these libraries and programs; if not, write
- * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
- * Floor, Boston, MA 02110-1301 USA
- */
-/* $XConsortium: basetbl.h /main/3 1995/11/01 15:50:37 rswiston $ */
-/************************************<+>*************************************
- ****************************************************************************
- **
- ** File: basetbl.h
- **
- ** Project: CDE
- **
- ** Description: Public include file for basetbl.c
- **
- **
- ** (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992
- ** by Hewlett-Packard Company
- **
- **
- **
- ****************************************************************************
- ************************************<+>*************************************/
-
-#ifndef _Dtksh_basetbl_h
-#define _Dtksh_basetbl_h
-
-extern struct memtbl *basemems[];
-extern struct symarray basedefs[];
-extern struct memtbl T_unsigned_long[];
-extern struct memtbl T_string_t[];
-
-#endif /* _Dtksh_basetbl_h */
-/* DON'T ADD ANYTHING AFTER THIS #endif */
+++ /dev/null
-/*
- * CDE - Common Desktop Environment
- *
- * Copyright (c) 1993-2012, The Open Group. All rights reserved.
- *
- * These libraries and programs are free software; you can
- * redistribute them and/or modify them under the terms of the GNU
- * Lesser General Public License as published by the Free Software
- * Foundation; either version 2 of the License, or (at your option)
- * any later version.
- *
- * These libraries and programs are distributed in the hope that
- * they will be useful, but WITHOUT ANY WARRANTY; without even the
- * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- * PURPOSE. See the GNU Lesser General Public License for more
- * details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with these libraries and programs; if not, write
- * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
- * Floor, Boston, MA 02110-1301 USA
- */
-/* $XConsortium: define.c /main/4 1995/11/01 15:51:03 rswiston $ */
-/* Copyright (c) 1991, 1992 UNIX System Laboratories, Inc. */
-/* All Rights Reserved */
-
-/* THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF */
-/* UNIX System Laboratories, Inc. */
-/* The copyright notice above does not evidence any */
-/* actual or intended publication of such source code. */
-
-#include "stdio.h"
-#include "exksh.h" /* which includes sys/types.h */
-#include <sys/param.h>
-#include <string.h>
-#include <search.h>
-#include <ctype.h>
-#include "misc.h"
-#include "docall.h"
-#include "basetbl.h"
-#include "msgs.h"
-
-
-
-static growdef( void ) ;
-static int add_deflist(
- struct symarray *defptr,
- char *prefix) ;
-static def_init( void ) ;
-
-
-
-static struct symarray *Dyndef = NULL;
-static int Ndyndef = 0;
-static int Sdyndef = 0;
-static char defInited = 0;
-
-static char use[] = "0x%x";
-static char use2[] = "%s=0x%x";
-
-struct deflist {
- char *prefix;
- int size;
- struct symarray *defs;
-};
-
-struct deflist *Deflist = NULL;
-int Ndeflist;
-
-
-static
-growdef( void )
-{
- int i;
-
- if (!defInited)
- def_init();
-
- if (!(Dyndef = (struct symarray *) realloc(Dyndef, (Sdyndef + 20) *
- sizeof(struct symarray))))
- {
- return(SH_FAIL);
- }
- Deflist->defs = Dyndef;
- memset(((char *) Dyndef) + Sdyndef * sizeof(struct symarray), '\0',
- 20 * sizeof(struct symarray));
- Sdyndef += 20;
-}
-
-int
-do_define(
- int argc,
- char **argv )
-{
- int i, argstart, redo;
- char *name;
- struct symarray *found, dummy;
-
- if (!defInited)
- def_init();
-
- if (argc > 1 && C_PAIR(argv[1], '-', 'R'))
- {
- redo = 0;
- argstart = 2;
- }
- else
- {
- argstart = 1;
- redo = 1;
- }
-
- if ((argstart +1) >= argc)
- XK_USAGE(argv[0]);
-
- name = argv[argstart++];
- dummy.str = name;
- found = (struct symarray *) bsearch((char *) &dummy, Dyndef, Ndyndef,
- sizeof(struct symarray), symcomp);
-
- if (found)
- {
- if (!redo)
- return(SH_SUCC);
- i = found - Dyndef;
- }
- else
- {
- if (Sdyndef == Ndyndef)
- growdef();
- Ndyndef++;
- if (Ndyndef > 1)
- for (i = Ndyndef - 1; i > 0; i--)
- {
- if (strcmp(name, Dyndef[i - 1].str) >= 0)
- break;
- Dyndef[i] = Dyndef[i - 1];
- }
- else
- i = 0;
- Dyndef[i].str = strdup(name);
- Deflist->size++;
- }
- RIF(xk_par_int(argv + argstart, &Dyndef[i].addr, NULL));
- return(SH_SUCC);
-}
-
-int
-fdef(
- char *str,
- unsigned long *val )
-{
- struct symarray *found, dummy;
- int i;
-
- dummy.str = str;
- if (!Deflist)
- return(0);
-
- for (i = 0; i < Ndeflist; i++)
- {
- if (Deflist[i].defs)
- {
- if (Deflist[i].size < 0)
- {
- found = (struct symarray *) lfind((char *) &dummy, Deflist[i].defs,
- (unsigned int *) &Deflist[i].size, sizeof(struct symarray),
- symcomp);
- }
- else
- {
- found = (struct symarray *) bsearch((char *) &dummy,
- Deflist[i].defs, Deflist[i].size, sizeof(struct symarray),
- symcomp);
- }
-
- if (found != NULL)
- {
- *val = found->addr;
- return(1);
- }
- }
- }
- return(0);
-}
-
-int
-do_deflist(
- int argc,
- char **argv )
-{
- int i, j;
- char *prefix = NULL;
- struct symarray *defptr = NULL;
- char * errmsg;
-
- for (i = 1; (i < argc) && argv[i]; i++)
- {
- if (argv[i][0] == '-')
- {
- for (j = 1; argv[i][j]; j++)
- {
- switch(argv[i][j])
- {
- case 'p':
- {
- if (argv[i][j + 1])
- {
- prefix = argv[i] + j;
- j += strlen(prefix) - 2;
- }
- else
- {
- prefix = argv[++i];
- j = strlen(prefix) - 1;
- }
- }
- }
- }
- }
- else
- {
- if ((defptr = (struct symarray *) getaddr(argv[i])) == NULL)
- {
- errmsg=strdup(GETMESSAGE(3,1,
- "Unable to locate the definition list '%s'"));
- printerrf(argv[0], errmsg, argv[i], NULL, NULL,
- NULL, NULL, NULL, NULL, NULL);
- free(errmsg);
- return(SH_FAIL);
- }
- }
- }
-
- if (defptr == NULL)
- {
- XK_USAGE(argv[0]);
- }
-
- for (i = 0; i < Ndeflist; i++)
- if ((Deflist[i].defs == defptr) &&
- (!prefix || (strcmp(Deflist[i].prefix, prefix) == 0)))
- {
- return(SH_SUCC);
- }
-
- return(add_deflist(defptr, prefix));
-}
-
-static int
-add_deflist(
- struct symarray *defptr,
- char *prefix )
-{
- int i;
-
- if (!Deflist)
- {
- Deflist = (struct deflist *) malloc((Ndeflist + 1) *
- sizeof(struct deflist));
- }
- else
- {
- Deflist = (struct deflist *) realloc(Deflist, (Ndeflist + 1) *
- sizeof(struct deflist));
- }
-
- if (!Deflist)
- return(SH_FAIL);
-
- Deflist[Ndeflist].defs = defptr;
- Deflist[Ndeflist].prefix = strdup(prefix);
- if (!defptr[0].str)
- Deflist[Ndeflist].size = 0;
- else
- {
- for (i = 1; defptr[i].str && defptr[i].str[0]; i++)
- if (symcomp((void *) (defptr + i), (void *) (defptr + i - 1)) < 0)
- break;
-
- if (!(defptr[i].str && defptr[i].str[0]))
- Deflist[Ndeflist].size = i;
- else
- Deflist[Ndeflist].size = -1;
- }
- Ndeflist++;
- return(SH_SUCC);
-}
-
-int
-do_finddef(
- int argc,
- char **argv )
-{
- unsigned long found;
- struct symarray dummy;
- char * errmsg;
-
- if (argc < 2)
- XK_USAGE(argv[0]);
-
- if (fdef(argv[1], &found))
- {
- if (argc >= 3)
- {
- char buf[50];
-
- sprintf(buf, use2, argv[2], found);
- env_set(buf);
- }
- else
- {
- sprintf(xk_ret_buffer, use, found);
- xk_ret_buf = xk_ret_buffer;
- }
- return(SH_SUCC);
- }
- errmsg = strdup(GETMESSAGE(3, 2, "Unable to locate the define '%s'"));
- printerrf(argv[0], errmsg, argv[1], NULL, NULL, NULL,
- NULL, NULL, NULL, NULL);
- free(errmsg);
- return(SH_FAIL);
-}
-
-static
-def_init( void )
-{
- char * errhdr;
- char * errmsg;
-
- defInited = 1;
- if (!(Dyndef = (struct symarray *) malloc(20 * sizeof(struct symarray))))
- {
- errhdr = strdup(GetSharedMsg(DT_ERROR));
- errmsg = strdup(GetSharedMsg(DT_ALLOC_FAILURE));
- printerr(errhdr, errmsg, NULL);
- free(errhdr);
- free(errmsg);
- exit(1);
- }
- Dyndef[0].str = NULL;
- Sdyndef = 20;
- Ndyndef = 0;
- add_deflist(Dyndef, "dynamic");
- add_deflist(basedefs, "base");
-}
+++ /dev/null
-/*
- * CDE - Common Desktop Environment
- *
- * Copyright (c) 1993-2012, The Open Group. All rights reserved.
- *
- * These libraries and programs are free software; you can
- * redistribute them and/or modify them under the terms of the GNU
- * Lesser General Public License as published by the Free Software
- * Foundation; either version 2 of the License, or (at your option)
- * any later version.
- *
- * These libraries and programs are distributed in the hope that
- * they will be useful, but WITHOUT ANY WARRANTY; without even the
- * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- * PURPOSE. See the GNU Lesser General Public License for more
- * details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with these libraries and programs; if not, write
- * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
- * Floor, Boston, MA 02110-1301 USA
- */
-/* $XConsortium: define.h /main/4 1995/11/01 15:51:12 rswiston $ */
-/************************************<+>*************************************
- ****************************************************************************
- **
- ** File: define.h
- **
- ** Project: CDE
- **
- ** Description: Public include file for define.c
- **
- **
- ** (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992
- ** by Hewlett-Packard Company
- **
- **
- **
- ****************************************************************************
- ************************************<+>*************************************/
-
-#ifndef _Dtksh_define_h
-#define _Dtksh_define_h
-
-
-
-extern int do_define(
- int argc,
- char **argv) ;
-extern int fdef(
- char *str,
- unsigned long *val) ;
-extern int do_deflist(
- int argc,
- char **argv) ;
-extern int do_finddef(
- int argc,
- char **argv) ;
-
-
-
-#endif /* _Dtksh_define_h */
-/* DON'T ADD ANYTHING AFTER THIS #endif */
+++ /dev/null
-/*
- * CDE - Common Desktop Environment
- *
- * Copyright (c) 1993-2012, The Open Group. All rights reserved.
- *
- * These libraries and programs are free software; you can
- * redistribute them and/or modify them under the terms of the GNU
- * Lesser General Public License as published by the Free Software
- * Foundation; either version 2 of the License, or (at your option)
- * any later version.
- *
- * These libraries and programs are distributed in the hope that
- * they will be useful, but WITHOUT ANY WARRANTY; without even the
- * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- * PURPOSE. See the GNU Lesser General Public License for more
- * details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with these libraries and programs; if not, write
- * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
- * Floor, Boston, MA 02110-1301 USA
- */
-/* $TOG: docall.c /main/7 1998/04/17 11:22:59 mgreess $ */
-/* Copyright (c) 1991, 1992 UNIX System Laboratories, Inc. */
-/* All Rights Reserved */
-
-/* THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF */
-/* UNIX System Laboratories, Inc. */
-/* The copyright notice above does not evidence any */
-/* actual or intended publication of such source code. */
-
-#include "stdio.h"
-#include "exksh.h" /* which includes sys/types.h */
-#include "docall.h"
-#include <sys/param.h>
-#include <string.h>
-#include <search.h>
-#include <ctype.h>
-#include "struct.h"
-#include "misc.h"
-#include "exksh_tbls.h"
-#include "basetbl.h"
-#include "msgs.h"
-
-#include <X11/Xosdefs.h>
-#include <errno.h>
-#ifdef X_NOT_STDC_ENV
-extern int errno;
-#endif
-
-static int allprint(
- unsigned long *pargs,
- memtbl_t *tbls) ;
-static pp_usage( void ) ;
-static int call_postprompt(
- char * argv0,
- unsigned long *pargs,
- memtbl_t *tbls,
- int *freeit) ;
-static long get_prdebug( void ) ;
-static long set_prdebug(
- long n) ;
-static int myprompt(
- char *prompt) ;
-
-
-
-struct memtbl Null_tbl = { NULL };
-
-static char use[] = "0x%x";
-static char use2[] = "%s=0x%x";
-
-int Xk_errno = 0;
-
-int Xkdebug = 0;
-
-char xk_ret_buffer[100];
-char *xk_ret_buf = xk_ret_buffer;
-struct Bfunction xk_prdebug = { get_prdebug, set_prdebug };
-
-int
-do_field_get(
- int argc,
- char **argv )
-{
- char buf[BIGBUFSIZ], *p, *bufstart;
- char *fld, *type, *ptr, *ptr2, **pptr2;
- memtbl_t tbl[2], *tbl2;
- int i;
- char *targvar = NULL;
- char fail = 0, always_ptr;
- char * errmsg;
-
- always_ptr = 0;
- for (i = 1; (i < argc) && argv[i] != NULL && argv[i][0] == '-'; i++) {
- switch(argv[i][1]) {
- case 'p':
- always_ptr = 1;
- break;
- case 'v':
- targvar = argv[++i];
- break;
- }
- }
-
- if ((i + 1) >= argc)
- {
- XK_USAGE(argv[0]);
- }
-
- type = argv[i++];
- if (!isdigit(argv[i][0]))
- always_ptr = 1;
- ptr = (char *) getaddr(argv[i++]);
- tbl[1] = Null_tbl;
- if (!type || !ptr || (parse_decl(argv[0], tbl, type, 1) == FAIL)) {
- if (!type || !ptr)
- {
- XK_USAGE(argv[0]);
- }
- else
- {
- errmsg = strdup(GETMESSAGE(4,1,
- "Cannot parse the structure named '%s'; it may not have been defined"));
- printerrf(argv[0], errmsg, type, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL);
- free(errmsg);
- return(SH_FAIL);
- }
- }
- if ((always_ptr || !IS_SIMPLE(tbl)) && !tbl->ptr && !(tbl->flags & F_TYPE_IS_PTR))
- tbl->ptr = 1;
- else while (tbl->ptr > 1) {
- ptr = *((void **) ptr);
- tbl->ptr--;
- }
- Pr_tmpnonames = 1;
- p = buf;
- if (targvar) {
- strcpy(p, targvar);
- p += strlen(p);
- *p++ = '=';
- bufstart = p;
- }
- else
- bufstart = buf;
- while ((i < argc) && (fld = argv[i++])) {
- if (p != bufstart)
- *p++ = targvar ? ' ' : '\n';
- tbl2 = tbl;
- ptr2 = ptr;
- pptr2 = &ptr2;
- if (!C_PAIR(fld, '.', '\0'))
- tbl2 = ffind(tbl, fld, (char **)&pptr2);
- if (!tbl2) {
- errmsg = strdup(GetSharedMsg(DT_BAD_FIELD_NAME));
- printerrf(argv[0], errmsg, fld, type,
- NULL, NULL, NULL, NULL, NULL, NULL);
- free(errmsg);
- fail = 1;
- break;
- }
- if (XK_PRINT(tbl2, &p, (char *)pptr2, 0, 0, NULL,
- all_tbl_find) == FAIL)
- {
- errmsg=strdup(GETMESSAGE(4,2,
- "Cannot print the field '%s' in structure '%s'"));
- printerrf(argv[0], errmsg, fld, type,
- NULL, NULL, NULL, NULL, NULL, NULL);
- free(errmsg);
- fail = 1;
- break;
- }
- }
- if (!fail) {
- *p = '\0';
- if (targvar)
- env_set(buf);
- else
- ALTPUTS(buf);
- }
- Pr_tmpnonames = 0;
- return(fail ? SH_FAIL : SH_SUCC);
-}
-
-static int
-allprint(
- unsigned long *pargs,
- memtbl_t *tbls )
-{
- char buf[BIGBUFSIZ], *p;
- int i;
- char * errmsg;
-
- for (i = 0; tbls[i].name; i++) {
- errmsg = strdup(GETMESSAGE(4,3, "Argument %d (type %s):\n\t"));
- printf(errmsg, i + 1, tbls[i].name);
- free(errmsg);
- p = buf;
- XK_PRINT(tbls + i, &p, (char *)(pargs + i), 0, 0, NULL,
- all_tbl_find);
- ALTPUTS(buf);
- }
-}
-
-static
-pp_usage( void )
-{
- char * errmsg;
-
- errmsg = strdup(GETMESSAGE(4,4,
- "Please enter p(rint), s(end), q(uit) or field=value\n"));
- printf(errmsg);
- free(errmsg);
-}
-
-static int
-call_postprompt(
- char * argv0 ,
- unsigned long *pargs,
- memtbl_t *tbls,
- int *freeit )
-{
- char buf[BUFSIZ];
- char * errmsg;
- char * quitStr, *printStr, *sendStr, *promptStr;
- int returnVal = 0;
-
- quitStr = strdup(GETMESSAGE(4,5, "q"));
- printStr = strdup(GETMESSAGE(4,6, "p"));
- sendStr = strdup(GETMESSAGE(4,7, "s"));
- promptStr = strdup(GETMESSAGE(4,8, "Postprompt: "));
-
- for ( ; ; ) {
- myprompt(promptStr);
- strcpy(buf, quitStr);
-
- *buf = '\0';
- fgets(buf, sizeof(buf), stdin);
- if (strlen(buf) && buf[strlen(buf)-1] == '\n')
- buf[strlen(buf)-1] = '\0';
-
- if (xk_Strncmp(buf, quitStr, 2) == 0)
- {
- errmsg=strdup(GETMESSAGE(4,9,
- "Warning: command was not executed\n"));
- printf(errmsg);
- free(errmsg);
- returnVal = 0;
- break;
- }
- else if (xk_Strncmp(buf, printStr, 2) == 0)
- allprint(pargs, tbls);
- else if (xk_Strncmp(buf, sendStr, 2) == 0)
- {
- returnVal = 1;
- break;
- }
- else if (!strchr(buf, '=') ||
- (asl_set(argv0,tbls, buf, (unsigned char **)pargs) == SH_FAIL))
- {
- pp_usage();
- }
- }
-
- free(quitStr);
- free(printStr);
- free(sendStr);
- free(promptStr);
- return(returnVal);
-}
-
-#define ZERORET 0
-#define NONZERO 1
-#define NONNEGATIVE 2
-
-/* In shell, 0 is success so, ZERORET means direct return, NONZERO means
-** return the opposite of its truth value and NONNEGATIVE means return
-** true if the value IS negative (since FALSE is success)
-*/
-#define CALL_RETURN(RET) return(SET_RET(RET), ((ret_type == ZERORET) ? (RET) : ((ret_type == NONZERO) ? !(RET) : ((RET) < 0))))
-#define EARLY_RETURN(RET) return(SET_RET(RET))
-#define SET_RET(RET) (((int) sprintf(xk_ret_buffer, use, (RET))), (int) (xk_ret_buf = xk_ret_buffer), RET)
-
-int
-do_call(
- int argc,
- char **argv )
-{
- void *pargs[MAX_CALL_ARGS];
- memtbl_t tblarray[MAX_CALL_ARGS];
- char freeit[MAX_CALL_ARGS];
- unsigned long (*func)();
- char *p;
- char dorun, promptflag;
- unsigned char freeval, ret_type;
- int i, j, ret;
- char * msg;
- char * errbuf;
- char * errmsg;
-
- promptflag = 0;
- freeval = 1;
- ret_type = ZERORET;
- dorun = 1;
- if (argc == 1) {
- errmsg = strdup(GetSharedMsg(DT_NO_FUNC_NAME));
- printerr(argv[0], errmsg, NULL);
- free(errmsg);
- xk_usage(argv[0]);
- EARLY_RETURN(1);
- }
-
- for (j = 1; (j < argc) && argv[j][0] == '-'; j++) {
- for (i = 1; argv[j][i]; i++) {
- switch(argv[j][i]) {
- case 'F':
- /* Do not free */
- freeval = 0;
- break;
- case 'r':
- /* reverse sense of return value */
- ret_type = NONZERO;
- break;
- case 'n':
- /* Non-negative return value is okay */
- ret_type = NONNEGATIVE;
- break;
- default:
- errmsg =strdup(GetSharedMsg(DT_UNKNOWN_OPTION));
- printerrf(argv[0], errmsg,
- argv[j], NULL, NULL, NULL,
- NULL, NULL, NULL, NULL);
- free(errmsg);
- xk_usage(argv[0]);
- EARLY_RETURN(1);
- }
- }
- }
- if (j >= argc) {
- errmsg = strdup(GetSharedMsg(DT_NO_FUNC_NAME));
- printerr(argv[0], errmsg, NULL);
- free(errmsg);
- xk_usage(argv[0]);
- CALL_RETURN(1);
- }
- memset(tblarray, '\0', MAX_CALL_ARGS * sizeof(memtbl_t));
- memset(pargs, '\0', MAX_CALL_ARGS * sizeof(void *));
- memset(freeit, '\0', MAX_CALL_ARGS * sizeof(char));
- func = (unsigned long (*)()) fsym(argv[j], -1);
- if (!func && ((argv[j][0] != '0') || (UPP(argv[j][1]) != 'X') || !(func = (unsigned long (*)()) strtoul(argv[j], &p, 16)) || *p)) {
- errmsg = strdup(GETMESSAGE(4,10,
- "Unable to locate the function '%s'"));
- printerrf(argv[0], errmsg,
- argv[j], NULL, NULL, NULL, NULL, NULL, NULL, NULL);
- free(errmsg);
- CALL_RETURN(1);
- }
- j++;
- for (i = 0; (i < MAX_CALL_ARGS) && (j < argc) && argv[j]; j++, i++) {
- char *val;
- char type[100];
-
- if (C_PAIR(argv[j], '+', '?')) {
- promptflag = 1;
- continue;
- }
- else if (C_PAIR(argv[j], '+', '+')) {
- j++;
- break;
- }
- if (argv[j][0] == '@') {
- if (!(val = strchr(argv[j] + 1, ':'))) {
- dorun = 0;
- ret = -1;
- break;
- }
- strncpy(type, argv[j] + 1, val - argv[j] - 1);
- type[val - argv[j] - 1] = '\0';
- val++;
- if (parse_decl(argv[0], tblarray + i, type, 1) == FAIL)
- {
- dorun = 0;
- ret = -1;
- break;
- }
- else {
- if (!strparse(tblarray + i,
- (char **)(pargs + i), val))
- {
- errmsg=strdup(GETMESSAGE(4,11,
- "The value descriptor '%s' does not match the definition for structure '%s'"));
- printerrf(argv[0], errmsg,
- val, type, NULL, NULL, NULL,
- NULL, NULL, NULL);
- free(errmsg);
- dorun = 0;
- ret = -1;
- break;
- }
- else
- freeit[i] = freeval;
- }
- }
- else if (isdigit(argv[j][0])) {
- char *p;
-
- p = argv[j];
- tblarray[i] = T_unsigned_long[0];
- xk_par_int(&p, pargs + i, NULL);
- }
- else if (strcmp(argv[j], (char *) "NULL") == 0) {
- tblarray[i] = T_unsigned_long[0];
- pargs[i] = NULL;
- }
- else {
- pargs[i] = (void *) argv[j];
- tblarray[i] = T_string_t[0];
- }
- }
- /* Process special arguments */
- while (j < argc) {
- asl_set(argv[0], tblarray, argv[j], (unsigned char **)pargs);
- j++;
- }
- if (dorun) {
- if (!promptflag ||
- call_postprompt(argv[0], (unsigned long *)pargs, tblarray,
- (int *)freeit))
- {
- ret = (*func)(pargs[0], pargs[1], pargs[2], pargs[3],
- pargs[4], pargs[5], pargs[6], pargs[7],
- pargs[8], pargs[9], pargs[10], pargs[11],
- pargs[12], pargs[13], pargs[14]);
- }
- else
- ret = 0;
- Xk_errno = errno;
- }
- for (i = 0; i < MAX_CALL_ARGS; i++) {
- if (pargs[i] && freeit[i])
- {
- /* There is no recourse for failure */
- XK_FREE(tblarray + i, (char *)(pargs + i), 0, 0,
- all_tbl_find);
- }
- }
- CALL_RETURN(ret);
-}
-
-int _Prdebug;
-
-static long
-get_prdebug( void )
-{
- return(_Prdebug);
-}
-
-static long
-set_prdebug(
- long n )
-{
- _Prdebug = n;
-}
-
-
-int
-asl_set(
- char *argv0,
- memtbl_t *tblarray,
- char *desc,
- unsigned char **pargs )
-{
- char *ptr;
- char *val;
- memtbl_t *tbl;
- memtbl_t usetbl[2];
- char op;
- char field[80], *fldp = field;
- unsigned long intval, i, newval;
- unsigned long top, bottom;
- char * errmsg;
-
- if ((val = strchr(desc, '=')) == NULL)
- return(SH_FAIL);
- if (ispunct(val[-1]) && (val[-1] != ']')) {
- op = val[-1];
- strncpy(field, desc, val - desc - 1);
- field[val - desc - 1] = '\0';
- val++;
- }
- else {
- op = '\0';
- strncpy(field, desc, val - desc);
- field[val - desc] = '\0';
- val++;
- }
- if (isdigit(fldp[0])) {
- top = bottom = strtoul(fldp, &fldp, 0) - 1;
- if (*fldp == '.')
- fldp++;
- }
- else {
- top = 9;
- bottom = 0;
- }
- usetbl[1] = Null_tbl;
- for (i = bottom; i <= top; i++) {
- usetbl[0] = tblarray[i];
- ptr = (char *) (pargs + i);
- if (tbl = ffind(usetbl, fldp, &ptr))
- break;
- }
- if (!tbl || (i > top)) {
- errmsg=strdup(GETMESSAGE(4,12, "Cannot locate the field '%s'"));
- printerrf(argv0, errmsg, fldp, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL);
- free(errmsg);
- return(SH_FAIL);
- }
- if (!op || !(tbl->flags & F_SIMPLE))
- {
- if (XK_PARSE(tbl, &val, ptr, 0, 0, NULL, all_tbl_find) < 0)
- {
- errmsg = strdup(GETMESSAGE(4,13,
- "Cannot set the following value for the field '%s': %s"));
- printerrf(argv0, errmsg, val, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL);
- free(errmsg);
- }
- }
- else {
- xk_par_int(&val, &newval, NULL);
- switch (tbl->size) {
- case sizeof(long):
- intval = ((unsigned long *) ptr)[0];
- break;
- case sizeof(short):
- intval = ((unsigned short *) ptr)[0];
- break;
- case sizeof(char):
- intval = ((unsigned char *) ptr)[0];
- break;
- default:
- if (tbl-size == sizeof(int))
- {
- intval = ((unsigned int *) ptr)[0];
- break;
- }
- }
- switch(op) {
- case '+':
- intval += newval;
- break;
- case '-':
- intval -= newval;
- break;
- case '*':
- intval *= newval;
- break;
- case '/':
- intval /= newval;
- break;
- case '%':
- intval %= newval;
- break;
- case '&':
- intval &= newval;
- break;
- case '|':
- intval |= newval;
- break;
- case '^':
- intval ^= newval;
- break;
- }
- switch (tbl->size) {
- case sizeof(long):
- ((unsigned long *) ptr)[0] = intval;
- break;
- case sizeof(short):
- ((unsigned short *) ptr)[0] = intval;
- break;
- case sizeof(char):
- ((unsigned char *) ptr)[0] = intval;
- break;
- default:
- if (tbl->size == sizeof(int))
- {
- ((unsigned int *) ptr)[0] = intval;
- break;
- }
- }
- }
- return(SH_SUCC);
-}
-
-int
-do_field_comp(
- int argc,
- char **argv )
-{
- char *val, *type;
- void *ptr, *ptr2, **pptr2, *nuptr;
- memtbl_t tbl[2], *tbl2;
- unsigned int i;
- unsigned char always_ptr;
- char pr1[5 * BUFSIZ], pr2[5 * BUFSIZ], *p1, *p2;
- char * errbuf;
- char * msg;
- char * errmsg;
-
- i = 1;
- if (argc > 1 && C_PAIR(argv[i], '-', 'p')) {
- i++;
- always_ptr = 1;
- }
- else
- always_ptr = 0;
-
- if ((i + 2) > argc)
- {
- XK_USAGE(argv[0]);
- }
-
- type = argv[i++];
- if (!isdigit(argv[i][0]))
- always_ptr = 1;
- ptr = getaddr(argv[i++]);
- tbl[1] = Null_tbl;
- if (!type || !ptr || (parse_decl(argv[0], tbl, type, 1) == FAIL))
- {
- XK_USAGE(argv[0]);
- }
- if ((always_ptr || !IS_SIMPLE(tbl)) && !tbl->ptr && !(tbl->flags & F_TYPE_IS_PTR))
- tbl->ptr = 1;
- else while (tbl->ptr > 1) {
- ptr = *((void **) ptr);
- tbl->ptr--;
- }
- for ( ; (i < argc) && argv[i]; i++) {
- tbl2 = tbl;
- ptr2 = ptr;
- pptr2 = &ptr2;
- if (val = strchr(argv[i], '=')) {
- *val++ = '\0';
- tbl2 = ffind(tbl, argv[i], (char **)&pptr2);
- if (!tbl2) {
- errmsg = strdup(GetSharedMsg(DT_BAD_FIELD_NAME));
- printerrf(argv[0], errmsg, argv[i],
- type, NULL, NULL, NULL, NULL, NULL, NULL);
- free(errmsg);
- return(SH_FAIL);
- }
- val[-1] = '=';
- }
- else
- val = argv[i];
- p1 = pr1;
- p2 = pr2;
- Pr_tmpnonames = 1;
- XK_PRINT(tbl2, &p1, (char *)pptr2, 0, 0, NULL, all_tbl_find);
- if (XK_PARSE(tbl2, &val, (char *)&nuptr, 0, 0, NULL,
- all_tbl_find) < 0)
- {
- errmsg=strdup(GETMESSAGE(4,15,
- "Cannot parse the following expression: %s"));
- printerrf(argv[0], errmsg, argv[i],
- NULL, NULL, NULL, NULL, NULL, NULL, NULL);
- free(errmsg);
- return(SH_FAIL);
- }
- XK_PRINT(tbl2, &p2, (char *)&nuptr, 0, 0, NULL, all_tbl_find);
- XK_FREE(tbl2, (char *)&nuptr, 0, 0, all_tbl_find);
- Pr_tmpnonames = 0;
- if (strcmp(pr1, pr2)) {
- if (env_get((char *) "PRCOMPARE"))
- {
- errmsg=strdup(GETMESSAGE(4,16,
- "The following comparision failed: '%s'\n\tActual: %s\n\tCompare: %s"));
- printerrf(argv[0], errmsg,
- argv[i], pr1, pr2, NULL, NULL, NULL,
- NULL, NULL);
- free(errmsg);
- }
- return(SH_FAIL);
- }
- }
- return(SH_SUCC);
-}
-
-static int
-myprompt(
- char *prompt )
-{
- fprintf(stderr,prompt);
-}
-
-
-#if 0
-/* This needs a functional proto, and needs to be extern'ed in docall.h */
-unsigned long
-strprint(va_alist)
-va_dcl
-{
- va_list ap;
- char *arg;
- char *variable = NULL;
- memtbl_t tbl;
- char *p;
- char buf[5 * BUFSIZ];
- char *name;
- void *val;
- char always_ptr;
- int nonames = 0;
- int ret;
-
- va_start(ap);
- always_ptr = 0;
- while ((arg = (char *) va_arg(ap, unsigned long)) && (arg[0] == '-')) {
- int i;
-
- for (i = 1; arg[i]; i++) {
- switch (arg[i]) {
- case 'v':
- variable = va_arg(ap, char *);
- i = strlen(arg) - 1;
- break;
- case 'p':
- always_ptr = 1;
- break;
- case 'N':
- nonames = 1;
- }
- }
- }
- name = arg;
- if (!arg) {
- printerr(argv[0], "Insufficient arguments", NULL);
- va_end(ap);
- return(SH_FAIL);
- }
- val = (void *) va_arg(ap, unsigned long);
- va_end(ap);
- if (parse_decl("strprintf", &tbl, name, 1) == FAIL)
- return(SH_FAIL);
- if (variable)
- p = buf + lsprintf(buf, "%s=", variable);
- else
- p = buf;
- if ((always_ptr || !IS_SIMPLE(&tbl)) && !tbl.ptr && !(tbl.flags & F_TYPE_IS_PTR))
- tbl.ptr = 1;
- if (!val && (tbl.ptr || (tbl.flags & F_TYPE_IS_PTR))) {
- printerr(argv[0], "NULL value argument to strprint", NULL);
- return(SH_FAIL);
- }
- if (always_ptr && (tbl.flags & F_TYPE_IS_PTR))
- val = *((void **) val);
- else while (tbl.ptr > 1) {
- val = *((void **) val);
- tbl.ptr--;
- }
- Pr_tmpnonames = nonames;
- ret = XK_PRINT(&tbl, &p, (void *) &val, 0, 0, NULL, all_tbl_find);
- Pr_tmpnonames = 0;
- if (ret == FAIL)
- return(SH_FAIL);
- if (variable)
- env_set(buf);
- else
- ALTPUTS(buf);
- return(SH_SUCC);
-}
-#endif
+++ /dev/null
-/*
- * CDE - Common Desktop Environment
- *
- * Copyright (c) 1993-2012, The Open Group. All rights reserved.
- *
- * These libraries and programs are free software; you can
- * redistribute them and/or modify them under the terms of the GNU
- * Lesser General Public License as published by the Free Software
- * Foundation; either version 2 of the License, or (at your option)
- * any later version.
- *
- * These libraries and programs are distributed in the hope that
- * they will be useful, but WITHOUT ANY WARRANTY; without even the
- * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- * PURPOSE. See the GNU Lesser General Public License for more
- * details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with these libraries and programs; if not, write
- * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
- * Floor, Boston, MA 02110-1301 USA
- */
-/* $XConsortium: docall.h /main/4 1995/11/01 15:51:36 rswiston $ */
-/************************************<+>*************************************
- ****************************************************************************
- **
- ** File: docall.h
- **
- ** Project: CDE
- **
- ** Description: Public include file for docall.c
- **
- **
- ** (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992
- ** by Hewlett-Packard Company
- **
- **
- **
- ****************************************************************************
- ************************************<+>*************************************/
-
-#ifndef _Dtksh_docall_h
-#define _Dtksh_docall_h
-
-#include "exksh.h"
-
-extern int _Prdebug;
-extern struct memtbl Null_tbl;
-extern char xk_ret_buffer[];
-extern char * xk_ret_buf;
-extern struct Bfunction xk_prdebug;
-
-
-
-extern int do_field_get(
- int argc,
- char **argv) ;
-extern int do_call(
- int argc,
- char **argv) ;
-extern int asl_set(
- char *argv0,
- memtbl_t *tblarray,
- char *desc,
- unsigned char **pargs) ;
-extern int do_field_comp(
- int argc,
- char **argv) ;
-
-
-
-#endif /* _Dtksh_docall_h */
-/* DON'T ADD ANYTHING AFTER THIS #endif */
+++ /dev/null
-/*
- * CDE - Common Desktop Environment
- *
- * Copyright (c) 1993-2012, The Open Group. All rights reserved.
- *
- * These libraries and programs are free software; you can
- * redistribute them and/or modify them under the terms of the GNU
- * Lesser General Public License as published by the Free Software
- * Foundation; either version 2 of the License, or (at your option)
- * any later version.
- *
- * These libraries and programs are distributed in the hope that
- * they will be useful, but WITHOUT ANY WARRANTY; without even the
- * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- * PURPOSE. See the GNU Lesser General Public License for more
- * details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with these libraries and programs; if not, write
- * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
- * Floor, Boston, MA 02110-1301 USA
- */
-/* $XConsortium: dtksh.c /main/3 1995/11/01 15:53:19 rswiston $ */
-/* Copyright (c) 1991, 1992 UNIX System Laboratories, Inc. */
-/* All Rights Reserved */
-
-/* THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF */
-/* UNIX System Laboratories, Inc. */
-/* The copyright notice above does not evidence any */
-/* actual or intended publication of such source code. */
-
-
-#include "stdio.h"
-#include <sys/stat.h>
-#include <string.h>
-#include <stdlib.h>
-
-#define CONSTCHAR (const char *)
-#define TRUE 1
-#define FALSE 0
-
-#ifndef DTKSHBINDIR
-#define DTKSHBINDIR "/usr/bin"
-#endif
-
-static int
-FileExists(dir, file)
-char *dir, *file;
-{
- struct stat sbuf;
- char path[1024];
-
- sprintf(path, "%s/%s", dir, file);
- return(stat(path, &sbuf) != -1);
-}
-
-/*
- * Bootstrap dtksh by calling xmcoeksh and forcing it to execute
- * an rc file that calls the dtksh init function and does some
- * other minor housekeeping.
- *
- * The rc file then sees if there was a previous user rc file (in $_HOLDENV_)
- * and if so executes it.
- */
-
-int
-main(argc, argv)
-int argc;
-char *argv[];
-{
- char *env;
- char *bindir = NULL;
- char *executable, *envfile;
- char *buf;
- char envbuf[1024];
-
- /*
- * Set the ENV variable to the standard dtksh rc file, which
- * will do a libdirload of the dtksh shared object file and add all
- * the dtksh commands and widgets to the exksh. If the user already
- * had an ENV file, then set the variable _HOLDENV_ to it so the
- * standard dtksh rc file can execute it later.
- */
- env = getenv((const char *)"ENV");
- buf = (char *)malloc((env ? strlen(env) : 0) + 12);
- strcpy(buf, "_HOLDENV_=");
- strcat(buf, env ? env : "");
- putenv(buf);
-
- executable = "xmcoeksh";
- envfile = "xmcoeksh.rc";
-
- /*
- * Search order for DTKSH binaries:
- *
- * 1. if $DTKSHBINDIR is set, use that path if it exists.
- * 2. if the hard-wired #define DTKSHBINDIR is set and is a
- * readable directory, use it.
- * 3. punt.
- */
-
- if ((bindir = getenv((const char *)"DTKSHBINDIR")) != NULL) {
- if ((!FileExists(bindir, executable)) ||
- (!FileExists(bindir, envfile)))
- {
- bindir = NULL;
- }
- }
-
- if (bindir == NULL)
- {
- bindir = DTKSHBINDIR;
-
- if ((!FileExists(bindir, executable)) ||
- (!FileExists(bindir, envfile)))
- {
- bindir = NULL;
- }
- }
-
- if (bindir == NULL) {
- fprintf(stderr,
- "dtksh: bootstrap failed. Unable to locate both\nxmcoeksh and xmcoeksh.rc in the same directory.\n Try setting $DTKSHBINDIR.\n");
- exit(1);
- }
- sprintf(envbuf, "DTKSHBINDIR=%s", bindir);
- putenv(strdup(envbuf));
-
- sprintf(envbuf, "ENV=%s/%s", bindir, envfile);
- putenv(strdup(envbuf));
- sprintf(envbuf, "%s/%s", bindir, executable);
- execv(envbuf, argv);
-
- fprintf(stderr, "dtksh: Bootstrap of dtksh failed: '%s'\n", envbuf);
- perror("Reason");
- return(1); /* failure */
-}
+++ /dev/null
-/*
- * CDE - Common Desktop Environment
- *
- * Copyright (c) 1993-2012, The Open Group. All rights reserved.
- *
- * These libraries and programs are free software; you can
- * redistribute them and/or modify them under the terms of the GNU
- * Lesser General Public License as published by the Free Software
- * Foundation; either version 2 of the License, or (at your option)
- * any later version.
- *
- * These libraries and programs are distributed in the hope that
- * they will be useful, but WITHOUT ANY WARRANTY; without even the
- * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- * PURPOSE. See the GNU Lesser General Public License for more
- * details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with these libraries and programs; if not, write
- * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
- * Floor, Boston, MA 02110-1301 USA
- */
-/* $XConsortium: exextra.h /main/3 1995/11/01 15:53:50 rswiston $ */
-/* Copyright (c) 1991, 1992 UNIX System Laboratories, Inc. */
-/* All Rights Reserved */
-
-/* THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF */
-/* UNIX System Laboratories, Inc. */
-/* The copyright notice above does not evidence any */
-/* actual or intended publication of such source code. */
-
-#ifndef _Dtksh_exextra_h
-#define _Dtksh_exextra_h
-
-
-#define EXKSH_EXTRA_TABLE \
- { "call", NV_BLTIN|BLT_ENV|BLT_SPC, do_call }, \
- { "field_comp", NV_BLTIN|BLT_ENV|BLT_SPC, do_field_comp }, \
- { "field_get", NV_BLTIN|BLT_ENV|BLT_SPC, do_field_get }, \
- { "sizeof", NV_BLTIN|BLT_ENV|BLT_SPC, do_sizeof }, \
- { "findsym", NV_BLTIN|BLT_ENV|BLT_SPC, do_findsym }, \
- { "finddef", NV_BLTIN|BLT_ENV|BLT_SPC, do_finddef }, \
- { "deflist", NV_BLTIN|BLT_ENV|BLT_SPC, do_deflist }, \
- { "define", NV_BLTIN|BLT_ENV|BLT_SPC, do_define }, \
- { "structlist", NV_BLTIN|BLT_ENV|BLT_SPC, do_structlist }, \
- { "deref", NV_BLTIN|BLT_ENV|BLT_SPC, do_deref }, \
- { "struct", NV_BLTIN|BLT_ENV|BLT_SPC, do_struct }, \
- { "typedef", NV_BLTIN|BLT_ENV|BLT_SPC, do_typedef }, \
- { "symbolic", NV_BLTIN|BLT_ENV|BLT_SPC, do_symbolic }, \
-
-
-#define EXKSH_EXTRA_VAR \
- "RET", NV_NOFREE|NV_RDONLY, (char*)(&xk_ret_buffer[0]), \
- "PRDEBUG", NV_NOFREE|NV_INTEGER, (char*)(&xk_prdebug),
-
-#define EXKSH_EXTRA_ALIAS \
- "args", NV_NOFREE|NV_EXPORT, "setargs \"$@\"",
-
-#endif /* _Dtksh_exextra_h */
-/* DON'T ADD ANYTHING AFTER THIS #endif */
+++ /dev/null
-/*
- * CDE - Common Desktop Environment
- *
- * Copyright (c) 1993-2012, The Open Group. All rights reserved.
- *
- * These libraries and programs are free software; you can
- * redistribute them and/or modify them under the terms of the GNU
- * Lesser General Public License as published by the Free Software
- * Foundation; either version 2 of the License, or (at your option)
- * any later version.
- *
- * These libraries and programs are distributed in the hope that
- * they will be useful, but WITHOUT ANY WARRANTY; without even the
- * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- * PURPOSE. See the GNU Lesser General Public License for more
- * details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with these libraries and programs; if not, write
- * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
- * Floor, Boston, MA 02110-1301 USA
- */
-/* $XConsortium: exksh_prpar.c /main/4 1995/11/01 15:54:12 rswiston $ */
-
-/* Copyright (c) 1991, 1992 UNIX System Laboratories, Inc. */
-/* All Rights Reserved */
-
-/* THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF */
-/* UNIX System Laboratories, Inc. */
-/* The copyright notice above does not evidence any */
-/* actual or intended publication of such source code. */
-
-
-#include "name.h"
-#include "shell.h"
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <string.h>
-#include <ctype.h>
-#include "exksh.h"
-#include "stdio.h"
-#include "exksh_prpar.h"
-#include "symbolic.h"
-#include "msgs.h"
-
-
-
-static int xk_uppercase(
- char *s) ;
-static int getsize(
- int fd,
- int *psize) ;
-
-
-
-#define OBJ_END 100
-
-struct symlist Val_list;
-
-unsigned int Pr_format = PRSYMBOLIC|PRMIXED|PRNAMES;
-
-
-/*
- * Takes a pointer to a pointer to a character buffer, and skips any
- * whitespace, as defined by isspace(section 3). Increments the
- * buf parameter to the first non-whitespace character.
- * Returns SUCCESS, there are no known ways for it to fail.
- */
-
-int
-xk_skipwhite(
- char **buf )
-{
- while (isspace(**buf))
- (*buf)++;
- return(SUCCESS);
-}
-
-int
-xk_backskip(
- char **buf,
- int *n )
-{
- *n = 0;
- while (isspace(**buf)) {
- (*buf)--;
- *n++;
- }
- if ((*buf)[0] == '\\')
- return(TRUE);
- else
- return(FALSE);
-}
-
-/*
- * Takes a pointer to a character buffer and a string. Sees if
- * the str is present as the first part of the buffer (minus any
- * whitespace), and if so increments the buffer past the string.
- * If not, returns FAIL without incrementing buffer (except perhaps
- * by eating leading whitespace).
- */
-
-int
-xk_parexpect(
- char **buf,
- char *str )
-{
- RIF(xk_skipwhite(buf));
- if (strncmp(*buf, str, strlen(str)) == 0) {
- *buf += strlen(str);
- } else {
- return(FAIL);
- }
- return(SUCCESS);
-}
-
-/*
- * Takes a pointer to a char buffer, and a string. Returns
- * TRUE if the string appears immediately (after skipping whitespace).
- * or FALSE otherwise.
- */
-
-int
-xk_parpeek(
- char **buf,
- char *str )
-{
- RIF(xk_skipwhite(buf));
- if (strncmp(*buf, str, strlen(str)) == 0)
- return(TRUE);
- else
- return(FALSE);
-}
-
-int
-xk_prin_int(
- memtbl_t *tbl,
- char **buf,
- unsigned long *old_v )
-
-{
- int i, printed = 0;
- struct symlist *sym;
- unsigned long v;
-
- switch (tbl->kind) {
- case K_CHAR:
- v = *((unsigned char *) old_v);
- break;
- case K_SHORT:
- v = *((unsigned short *) old_v);
- break;
- case K_INT:
- v = *((unsigned int *) old_v);
- break;
- default:
- v = *old_v;
- }
- **buf = '\0';
- if ((Pr_format & PRSYMBOLIC) && ((Val_list.syms != NULL) || ((sym = fsymbolic(tbl)) != NULL))) {
- if (Val_list.syms != NULL)
- sym = &Val_list;
- if (sym->isflag) {
- if (v == 0) {
- *buf += lsprintf(*buf, "0");
- return(SUCCESS);
- }
- for (i = 0; i < sym->nsyms; i++) {
- if (sym->syms[i].addr & v) {
- if (Pr_format & PRMIXED_SYMBOLIC) {
- if (Pr_format & PRDECIMAL)
- *buf += lsprintf(*buf, "%s%s(%d)", printed ? "|" : "", sym->syms[i].str, sym->syms[i].addr);
- else
- *buf += lsprintf(*buf, "%s%s(0x%x)", printed ? "|" : "", sym->syms[i].str, sym->syms[i].addr);
- }
- else
- *buf += lsprintf(*buf, "%s%s", printed ? "|" : "", sym->syms[i].str);
- v &= ~(sym->syms[i].addr);
- printed++;
- }
- }
- if (v) {
- if (Pr_format & PRMIXED_SYMBOLIC) {
- if (Pr_format & PRDECIMAL)
- *buf += lsprintf(*buf, "%sNOSYMBOLIC(%d)", printed ? "|" : "", v);
- else
- *buf += lsprintf(*buf, "%sNOSYMBOLIC(0x%x)", printed ? "|" : "", v);
- }
- else {
- if (Pr_format & PRDECIMAL)
- *buf += lsprintf(*buf, "%s%d", printed ? "|" : "", v);
- else
- *buf += lsprintf(*buf, "%s0x%x", printed ? "|" : "", v);
- }
- }
- return(SUCCESS);
- }
- else {
- for (i = 0; i < sym->nsyms; i++) {
- if (sym->syms[i].addr == v) {
- if (Pr_format & PRMIXED_SYMBOLIC) {
- if (Pr_format & PRDECIMAL)
- *buf += lsprintf(*buf, "%s(%d)", sym->syms[i].str, v);
- else
- *buf += lsprintf(*buf, "%s(0x%x)", sym->syms[i].str, v);
- }
- else
- *buf += lsprintf(*buf, "%s", sym->syms[i].str);
- return(SUCCESS);
- }
- }
- }
- }
- if (Pr_format & PRHEX)
- *buf += lsprintf(*buf, "0x%x", v);
- else if (Pr_format & PRDECIMAL)
- *buf += lsprintf(*buf, "%d", v);
- else
- *buf += lsprintf(*buf, "%d(0x%x)", v, v);
- return(SUCCESS);
-}
-
-int
-xk_par_int(
- char **buf,
- long *v,
- struct envsymbols *env )
-{
- int ret, base;
- char *p, *q, *pp;
- char nbuf[512];
-
- xk_skipwhite(buf);
- strncpy(nbuf, *buf, sizeof(nbuf)-1);
- if (strchr(nbuf, '|') == NULL) {
- for (p = nbuf; *p && *p != ' ' && *p != ',' && *p != ']'
- && *p != '{' && *p != '}' && *p != '/' && *p != '@'
- && *p != ':' && *p != '.' && *p != 13 && *p != 10 && *p != 11
- && *p != 12 && *p != 9; p++)
- ;
- *p = '\0';
- }
- else {
- for (p = nbuf; *p && *p != ','
- && *p != '{' && *p != '}' && *p != '/' && *p != '@'
- && *p != ':' && *p != '.' ; p++)
- ;
- *p = '\0';
-
- }
- ret = strlen(nbuf);
- if (ret == 0)
- return(OBJ_END);
- *v = 0;
-
- if ((p = strchr(nbuf, '"')) != NULL) {
- return(FAIL);
- }
- if ((p = strchr(nbuf, '+')) != NULL) {
- char *qq;
- long v1, v2;
-
- *p = '\0';
- v1 = v2 = 0;
- qq = nbuf;
- p++;
- xk_par_int(&qq, &v1, env);
- xk_par_int(&p, &v2, env);
- *v = v1 + v2;
- *buf += ret;
- return(SUCCESS);
- }
- if ((p = strchr(&nbuf[1], '-')) != NULL) {
- long v1, v2;
- char *qq;
-
- *p = '\0';
- v1 = v2 = 0;
- qq = nbuf;
- p++;
- xk_par_int(&qq, &v1, env);
- xk_par_int(&p, &v2, env);
- *v = v1 - v2;
- *buf += ret;
- return(SUCCESS);
- }
- for (p = strtok(nbuf, " |\t\n"); p; p = strtok(NULL, " |\t\n")) {
- for (pp = p; *pp && *pp != ' ' && *pp != ','
- && *pp != '{' && *pp != '}' && *pp != '/' && *pp != '@'
- && *pp != ':' && *pp != '.' && *pp != 13 &&
- *pp != 11 && *pp != 12 && *pp != 9; pp++)
- ;
- *pp = '\0';
- if ((pp = strchr(p, '#')) != NULL) {
- base = strtol(p, &p, 10);
- if (p != pp)
- return(FAIL);
- p++;
- }
- else
- base = 0;
- xk_skipwhite(&p);
- if (*p == '\0')
- continue;
- if (isdigit(*p) || *p == '-') {
- *v |= strtoul(p, (char **)NULL, base);
- }
- else {
- unsigned long val;
-
- /* knock out commentary parenthesized things */
- if ((q = strchr(p, '(' /*)*/ )) != NULL)
- *q = '\0';
- /* Search through available names for partial match */
- if (!fdef(p, &val)) {
- return(FAIL);
- }
- else
- *v |= val;
- }
- }
- *buf += ret;
- return(SUCCESS);
-}
-
-
-int
-xk_prin_nts(
- char **buf,
- char *str )
-{
- return(xk_prin_charstr(buf, (unsigned char *)str,
- str ? strlen(str) : 0));
-}
-
-int
-xk_prin_charstr(
- char **buf,
- unsigned char *str,
- int len )
-{
- int i;
-
- if (str == NULL)
- *buf += lsprintf(*buf, "NULL");
- else {
- *buf += lsprintf(*buf, "\"");
- for (i = 0; i < len; i++) {
- if (str[i] == '"') {
- *buf += lsprintf(*buf, "\\\"");
- } else if (isprint(str[i])) {
- *buf += lsprintf(*buf, "%c", str[i]);
- } else {
- switch (str[i]) {
- case '\n':
- *buf += lsprintf(*buf, "\\n");
- break;
- case '\t':
- *buf += lsprintf(*buf, "\\t");
- break;
- case '\b':
- *buf += lsprintf(*buf, "\\b");
- break;
- case '\v':
- *buf += lsprintf(*buf, "\\v");
- break;
- case '\f':
- *buf += lsprintf(*buf, "\\f");
- break;
- case '\r':
- *buf += lsprintf(*buf, "\\r");
- break;
- case '\0':
- *buf += lsprintf(*buf, "\\00");
- break;
- default:
- *buf += lsprintf(*buf, "\\%x", (unsigned int)str[i]);
- break;
- }
- }
- }
- *buf += lsprintf(*buf, "\"");
- }
- return(SUCCESS);
-}
-
-int
-xk_prin_hexstr(
- char **buf,
- char *str,
- int len )
-{
- int i;
- unsigned char tempc;
-
- if (str == NULL)
- *buf += lsprintf(*buf, "NULL");
- else {
- *buf += lsprintf(*buf, "%s", "0x");
- for (i = 0; i < len; i++) {
- tempc = str[i];
- if (str[i] & 0xf0) {
- *buf += lsprintf(*buf, "%x", tempc);
- }
- else
- *buf += lsprintf(*buf, "0%x", tempc);
- }
- }
- return(SUCCESS);
-}
-
-#define MALSIZ 16 /* initial size of string to malloc */
-
-int
-xk_par_chararr(
- char **buf,
- char *str,
- int *len )
-{
- return(xk_par_charstr(buf, &str, len));
-}
-
-#define CHAR_QUOTED 0
-#define CHAR_HEXSTR 1
-#define CHAR_FILE 2
-
-int
-xk_par_nts(
- char **buf,
- char **str )
-{
- int temp = 0;
-
- RIF(xk_par_charstr(buf, str, &temp));
- if (temp >= 0)
- str[0][temp] = '\0';
- return(SUCCESS);
-}
-
-int
-xk_par_charstr(
- char **buf,
- char **str,
- int *len )
-{
- int i;
- char delim;
- int didmalloc = FALSE, getmode;
- char cbuf[3]; /* conversion buffer for hex strings */
- char filename[128];
- char * errmsg;
-
- RIF(xk_skipwhite(buf));
- if (xk_parpeek(buf, "NULL")) {
- RIF(xk_parexpect(buf, "NULL"));
- *str = NULL;
- *len = -1;
- return(SUCCESS);
- }
- /* this is pure internal feature, no error setting */
- if (**buf == '<') {
- char *p;
- FILE *fp;
- char gbuf[BUFSIZ];
- int line;
- int size;
-
- (*buf)++;
- xk_skipwhite(buf);
- for (p = &filename[0];
- **buf != ',' && **buf != /* { */ '}' && **buf != ' ' &&
- **buf != '\t' && p < &filename[sizeof(filename)];
- *p++ = *(*buf)++)
- ;
- *p++ = '\0';
- if ((fp = fopen(filename, "r")) == NULL) {
- errmsg=strdup(GETMESSAGE(7,1,
- "Unable to open the file '%s'; verify that it exists and is readable"));
- lsprintf(gbuf, errmsg, filename);
- fprintf(stderr, gbuf);
- free(errmsg);
- return(FAIL);
- }
- if (*len == 0) {
- if (getsize(fileno(fp), &size) == FAIL) {
- errmsg=strdup(GETMESSAGE(7,2,
- "Unable to access the file '%s'; verify you have permission to access it"));
- lsprintf(gbuf, errmsg, filename);
- fprintf(stderr, gbuf);
- free(errmsg);
- return(FAIL);
- }
- *len = size/2 + 1;
- if ((*str = malloc(*len)) == NULL) {
- return(FAIL);
- }
- }
- line = i = 0;
- while (fgets(gbuf, sizeof(gbuf), fp) != NULL) {
- line++;
- p = gbuf;
- /* eat any leading 0x */
- if (p[0] == '0' && (p[1] == 'x' || p[1] == 'X')) {
- p += 2;
- }
- for ( ; *p && *p != '\n'; ) {
- if (i > *len - 1) {
- fclose(fp);
- return(FAIL);
- }
- if (!isxdigit(*p)) {
- p++;
- continue;
- }
- if (!isxdigit(p[1])) {
- fclose(fp);
- return(FAIL);
- }
- cbuf[0] = p[0];
- cbuf[1] = p[1];
- cbuf[2] = '\0';
- str[0][i++] = (char)strtol(cbuf, (char **)NULL, 16);
- p += 2;
- xk_skipwhite(&p);
- }
- }
- *len = i;
- fclose(fp);
- return(SUCCESS);
- } else if (!ispunct(**buf)) {
- getmode = CHAR_HEXSTR;
- if ((*buf)[0] == '0' && ((*buf)[1] == 'x' || (*buf)[1] == 'X'))
- (*buf) += 2;
- } else {
- delim = *((*buf)++);
- getmode = CHAR_QUOTED;
- }
- if (*len == 0) {
- if ((*str = malloc(MALSIZ)) == NULL) {
- return(FAIL);
- }
- didmalloc = TRUE;
- *len = MALSIZ;
- }
- i = 0;
- while ((*buf)[0] != '\0' && ((getmode == CHAR_QUOTED && (*buf)[0] != delim) ||
- (getmode == CHAR_HEXSTR && (isxdigit((*buf)[0]))) ||
- (getmode == CHAR_HEXSTR && (isspace((*buf)[0]))))) {
- /* NOTE: must always leave 1 additional byte for a null
- * termination, because could be called by xk_par_nts!
- */
- if (i >= *len - 1) {
- if (didmalloc == FALSE) {
- return(FAIL);
- } else {
- if ((*str = realloc(*str, *len + MALSIZ)) == NULL) {
- return(FAIL);
- }
- *len += MALSIZ;
- }
- }
- if (getmode == CHAR_QUOTED) {
- if ((*buf)[0] == '\\') {
- (*buf)++;
- switch ((*buf)[0]) {
- case 't':
- str[0][i++] = '\t';
- (*buf)++;
- break;
- case 'v':
- str[0][i++] = '\v';
- (*buf)++;
- break;
- case 'f':
- str[0][i++] = '\f';
- (*buf)++;
- break;
- case 'n':
- str[0][i++] = '\n';
- (*buf)++;
- break;
- case 'r':
- str[0][i++] = '\r';
- (*buf)++;
- break;
- case 'b':
- str[0][i++] = '\b';
- (*buf)++;
- break;
- case '0':
- str[0][i++] = (char)strtol(*buf, buf, 8);
- break;
- case 's':
- (*buf)++;
- break;
- default:
- str[0][i++] = *(*buf)++;
- }
- } else
- str[0][i++] = *(*buf)++;
- } else {
- if (!isxdigit((*buf)[1])) {
- return(FAIL);
- }
- cbuf[0] = (*buf)[0];
- cbuf[1] = (*buf)[1];
- cbuf[2] = '\0';
- str[0][i++] = (char)strtol(cbuf, (char **)NULL, 16);
- (*buf) += 2;
- xk_skipwhite(buf);
- }
- }
- if (getmode == CHAR_QUOTED)
- (*buf)++; /* eat the trailing quote */
- /*
- * NOTE: We leave a malloced buffer the same size rather
- * than realloc()'ing it to be the exact size in order
- * to save time and avoid malloc arena fragmentation
- */
- *len = i;
- return(SUCCESS);
-}
-
-/* Case Ignoring String Functions. */
-
-static int
-xk_uppercase(
- char *s )
-{
- while (*s) {
- if (islower(*s))
- *s = toupper(*s);
- s++;
- }
-}
-
-int
-xk_Strncmp(
- char *s1,
- char *s2,
- int len )
-{
- int diff, i;
-
- for (i=0; i < len && s1[i] != '\0' && s2[i] != '\0'; i++)
- if ((diff = tolower(s1[i]) - tolower(s2[i])) != 0)
- return (diff);
- return(i == len ? 0 : s1[i] - s2[i]);
-}
-
-static int
-getsize(
- int fd,
- int *psize )
-{
- struct stat stat;
-
- if (fstat(fd, &stat) == FAIL)
- return(FAIL);
- *psize = stat.st_size;
- return(SUCCESS);
-}
+++ /dev/null
-/*
- * CDE - Common Desktop Environment
- *
- * Copyright (c) 1993-2012, The Open Group. All rights reserved.
- *
- * These libraries and programs are free software; you can
- * redistribute them and/or modify them under the terms of the GNU
- * Lesser General Public License as published by the Free Software
- * Foundation; either version 2 of the License, or (at your option)
- * any later version.
- *
- * These libraries and programs are distributed in the hope that
- * they will be useful, but WITHOUT ANY WARRANTY; without even the
- * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- * PURPOSE. See the GNU Lesser General Public License for more
- * details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with these libraries and programs; if not, write
- * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
- * Floor, Boston, MA 02110-1301 USA
- */
-/* $XConsortium: exksh_prpar.h /main/4 1995/11/01 15:54:23 rswiston $ */
-/************************************<+>*************************************
- ****************************************************************************
- **
- ** File: exksh_prpar.h
- **
- ** Project: CDE
- **
- ** Description: Public include file for exksh_prpar.c
- **
- **
- ** (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992
- ** by Hewlett-Packard Company
- **
- **
- **
- ****************************************************************************
- ************************************<+>*************************************/
-
-#ifndef _Dtksh_exksh_prpar_h
-#define _Dtksh_exksh_prpar_h
-
-extern unsigned int Pr_format;
-
-
-
-extern int xk_skipwhite(
- char **buf) ;
-extern int xk_backskip(
- char **buf,
- int *n) ;
-extern int xk_parexpect(
- char **buf,
- char *str) ;
-extern int xk_parpeek(
- char **buf,
- char *str) ;
-extern int xk_prin_int(
- memtbl_t *tbl,
- char **buf,
- unsigned long *old_v) ;
-extern int xk_par_int(
- char **buf,
- long *v,
- struct envsymbols *env) ;
-extern int xk_prin_nts(
- char **buf,
- char *str) ;
-extern int xk_prin_charstr(
- char **buf,
- unsigned char *str,
- int len) ;
-extern int xk_prin_hexstr(
- char **buf,
- char *str,
- int len) ;
-extern int xk_par_chararr(
- char **buf,
- char *str,
- int *len) ;
-extern int xk_par_nts(
- char **buf,
- char **str) ;
-extern int xk_par_charstr(
- char **buf,
- char **str,
- int *len) ;
-extern int xk_Strncmp(
- char *s1,
- char *s2,
- int len) ;
-
-
-
-#endif /* _Dtksh_exksh_prpar_h */
-/* DON'T ADD ANYTHING AFTER THIS #endif */
+++ /dev/null
-/*
- * CDE - Common Desktop Environment
- *
- * Copyright (c) 1993-2012, The Open Group. All rights reserved.
- *
- * These libraries and programs are free software; you can
- * redistribute them and/or modify them under the terms of the GNU
- * Lesser General Public License as published by the Free Software
- * Foundation; either version 2 of the License, or (at your option)
- * any later version.
- *
- * These libraries and programs are distributed in the hope that
- * they will be useful, but WITHOUT ANY WARRANTY; without even the
- * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- * PURPOSE. See the GNU Lesser General Public License for more
- * details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with these libraries and programs; if not, write
- * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
- * Floor, Boston, MA 02110-1301 USA
- */
-/* $XConsortium: exksh_tbls.c /main/4 1995/11/01 15:54:33 rswiston $ */
-/* Copyright (c) 1991, 1992 UNIX System Laboratories, Inc. */
-/* All Rights Reserved */
-
-/* THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF */
-/* UNIX System Laboratories, Inc. */
-/* The copyright notice above does not evidence any */
-/* actual or intended publication of such source code. */
-
-#include "name.h"
-#include "shell.h"
-#include "stdio.h"
-#include <string.h>
-#include <sys/types.h>
-#include <ctype.h>
-#include "exksh.h"
-#include "exksh_tbls.h"
-#include "exksh_prpar.h"
-#include "docall.h"
-#include "msgs.h"
-
-int _Delim;
-static int strglen;
-static int struct_size;
-
-int Pr_tmpnonames = 0;
-
-static const char *Str_close_curly = "}";
-static const char *Str_open_curly = "{";
-
-#define MALMEMBERS (4) /* initial number of members of malloc'ed array to malloc */
-
-#define UPPER(C) (islower(C) ? toupper(C) : (C))
-#define isvarchar(C) (isalnum(C) || ((C) == '_'))
-
-/*
- * Some of our test programs use xk_parse() to parse cdata from command
- * lines. This has the drawback that anys or externals will get a malloc'ed
- * buffer for their char * on the send side, which would not normally be
- * freed, because xk_free() knows that such any's usually point into the
- * ubuf rather than being malloced. On the receive side, this would be
- * true even in our test program. So, on the send side, we keep a table
- * of any any or external char * that is malloc'ed, and xk_free checks
- * this table before free'ing the given item. After being freed, the
- * stack is decremented for efficiency.
- */
-
-#define ANYTBLINC (4)
-
-static char **Anytbl = NULL;
-static int Nanytbl = 0;
-static int Maxanytbl = 0;
-
-struct special {
- char *name;
- int (*free)();
- int (*parse)();
- int (*print)();
-};
-
-#define SPEC_FREE 0
-#define SPEC_PARSE 1
-#define SPEC_PRINT 2
-
-static struct special *Special = NULL;
-static int Nspecs = 0;
-
-static char **Dont = NULL;
-static int Ndont, Sdont;
-
-int
-(*find_special(
- int type,
- char *name ))()
-{
- int i;
-
- if (!Special)
- return(NULL);
- for (i = 0; i < Nspecs; i++) {
- if (strcmp(Special[i].name, name) == 0) {
- switch(type) {
- case SPEC_PRINT:
- return(Special[i].print);
- case SPEC_FREE:
- return(Special[i].free);
- case SPEC_PARSE:
- return(Special[i].parse);
- }
- }
- }
- return(NULL);
-}
-
-int
-set_special(
- char *name,
- int (*free)(),
- int (*parse)(),
- int (*print)() )
-{
- int i;
-
- for (i = 0; i < Nspecs; i++)
- if (strcmp(Special[i].name, name) == 0)
- break;
- if (i == Nspecs) {
- if (!Special) {
- Special = (struct special *) malloc(sizeof(struct special));
- Special[0].name = strdup(name);
- Nspecs = 1;
- }
- else {
- Special = (struct special *) realloc(Special, (Nspecs + 1) * sizeof(struct special));
- Special[i].name = strdup(name);
- Nspecs++;
- }
- }
- if (!Special)
- return(FAIL);
- Special[i].free = free;
- Special[i].parse = parse;
- Special[i].print = print;
- return(SUCCESS);
-}
-
-/*
- * xk_parse: Takes a pointer to a structure member table, a pointer
- * to a buffer containing an ascii representation of the structure
- * represented by the table pointer, and the number of pointers saved
- * from previous recursive calls to this routine, and parses the
- * buf into p.
- *
- * Increments buf to the last point at which it read a character,
- * and returns SUCCESS or FAIL.
- */
-
-int
-xk_parse(
- memtbl_t *tbl,
- char **buf,
- char *p,
- int nptr,
- int sub,
- void *pass,
- memtbl_t *(*tbl_find)() )
-{
- memtbl_t *ntbl;
- int i = 0;
- int skind, delim_type;
- long val = 0; /* used for choice selection */
- char *np;
- int delim = _Delim;
- int nmal; /* number of members malloc'ed arrays */
- char *pp;
- int (*spec_parse)();
- char * errmsg;
-
- if (tbl == NULL) {
- if (_Prdebug)
- {
- errmsg=strdup(GETMESSAGE(8,1,
- "xk_parse: A NULL 'type' table was specified\n"));
- fprintf(stderr, errmsg);
- free(errmsg);
- }
- return(FAIL);
- }
- xk_skipwhite(buf);
- /*
- * If this is supposed to be a pointer, and we have a string that
- * starts with "P" and a number then we should take the pointer
- * itself. This is done by stripping off the 'p' and parsing it as a
- * unsigned long.
- *
- * Further, if it starts with an '&', then we want the address of
- * a variable, use fsym() to find it.
- */
- if (((tbl->flags & F_TYPE_IS_PTR) || ((tbl->ptr + nptr) > 0)) &&
- (((UPPER((*buf)[0]) == 'P') && isdigit((*buf)[1])) || ((*buf)[0] == '&'))) {
- if ((*buf)[0] == '&') {
- char *start;
-
- (*buf)++;
- for (start = *buf; isvarchar(*buf[0]); (*buf)++)
- ;
- if ((((unsigned long *) p)[0] = fsym(start, -1)) == NULL)
- return(FAIL);
- }
- else {
- (*buf)++;
- RIF(xk_par_int(buf, (long *)p, pass));
- }
- if (Ndont == Sdont) {
- if (Dont)
- Dont = (char **) realloc(Dont, (Sdont + 20) * sizeof(char *));
- else
- Dont = (char **) malloc((Sdont + 20) * sizeof(char *));
- if (!Dont) {
- errmsg = strdup(GetSharedMsg(DT_ALLOC_FAILURE));
- ALTPUTS(errmsg);
- free(errmsg);
- exit(1);
- }
- Sdont += 20;
- }
- Dont[Ndont++] = ((char **) p)[0];
- return(SUCCESS);
- }
- if (tbl->tname && (spec_parse = find_special(SPEC_PARSE, tbl->tname)))
- return(spec_parse(tbl, buf, p, nptr, sub, pass, tbl_find));
- if (tbl->name && (spec_parse = find_special(SPEC_PARSE, tbl->name)))
- return(spec_parse(tbl, buf, p, nptr, sub, pass, tbl_find));
- nptr += tbl->ptr;
- if (sub > 0 && tbl->subscr > 0) {
- if (_Prdebug)
- {
- errmsg=strdup(GETMESSAGE(8,2,
- "xk_parse: Multiple array subscripts are not handled in '%s'\n"));
- fprintf(stderr, errmsg, tbl->name);
- free(errmsg);
- }
- return(FAIL);
- }
- /*
- * If there is exactly one pointer associated with this
- * member, and no length delimiters, and no subscripts,
- * or there are multiple pointers,
- * then malloc space for the structure and call ourself
- * recursively.
- */
- if ((nptr > 1 && tbl->delim != 0) || (nptr == 1 && tbl->delim == 0 && tbl->subscr == 0)) {
- if (PARPEEK(buf, ",") || PARPEEK(buf, Str_close_curly)) {
- ((char **)p)[0] = NULL;
- if (_Prdebug)
- {
- errmsg=strdup(GetSharedMsg(DT_XK_PARSE_SET_NULL));
- fprintf(stderr, errmsg, tbl->name);
- free(errmsg);
- }
- return(SUCCESS);
- }
- if (xk_parpeek(buf, "NULL")) {
- RIF(xk_parexpect(buf, "NULL"));
- ((char **)p)[0] = NULL;
- if (_Prdebug)
- {
- errmsg=strdup(GetSharedMsg(
- DT_XK_PARSE_SET_NULL));
- fprintf(stderr, errmsg, tbl->name);
- free(errmsg);
- }
- return(SUCCESS);
- }
-
- if ((((char **)p)[0] = malloc(tbl->size)) == NULL) {
- return(FAIL);
- }
- if (_Prdebug)
- {
- errmsg=strdup(GETMESSAGE(8,3,
- "xk_parse: Setting '%s' to malloc'ed address 0x%x, of size %d\n"));
- fprintf(stderr,errmsg,tbl->name, ((char **)p)[0], tbl->size);
- free(errmsg);
- }
- return(xk_parse(tbl, buf, ((char **)p)[0], nptr-1-tbl->ptr, sub, pass, tbl_find));
- }
- /*
- * If there is exactly one pointer level, or one subscripting level,
- * and there is a delimiter,
- * and no subscript, then we are a length delimited malloced array.
- */
- xk_skipwhite(buf);
- if (tbl->delim != 0 && ((nptr == 1 && tbl->subscr == 0) ||
- (nptr == 0 && tbl->subscr != 0 && tbl->kind != K_STRING))) {
-
- if (tbl->subscr == 0) {
- if (PARPEEK(buf, ",") || PARPEEK(buf, Str_close_curly)) {
- ((char **)p)[0] = NULL;
- if (_Prdebug)
- {
- errmsg=strdup(GETMESSAGE(8,4,
- "xk_parse: Setting malloc'ed array '%s' to NULL\n"));
- fprintf(stderr, errmsg, tbl->name);
- free(errmsg);
- }
- return(SUCCESS);
- }
- if (xk_parpeek(buf, "NULL")) {
- RIF(xk_parexpect(buf, "NULL"));
- ((char **)p)[0] = NULL;
- if (_Prdebug)
- {
- errmsg=strdup(GetSharedMsg(
- DT_XK_PARSE_SET_NULL));
- fprintf(stderr, errmsg, tbl->name);
- free(errmsg);
- }
- return(SUCCESS);
- }
- nmal = MALMEMBERS;
- if ((np = malloc(nmal*tbl->size)) == NULL) {
- return(FAIL);
- }
- ((char **)p)[0] = np;
- if (_Prdebug)
- {
- errmsg=strdup(GETMESSAGE(8,5,
- "xk_parse: Setting member '%s' to malloc'ed pointer 0x%x, of size %d\n"));
- fprintf(stderr, errmsg, tbl->name, np, 4*tbl->size);
- free(errmsg);
- }
- } else {
- np = p;
- }
- xk_skipwhite(buf);
- RIF(PAREXPECT(buf, Str_open_curly));
- *buf += 1;
- i = 0;
- xk_skipwhite(buf);
- while (PARPEEK(buf, Str_close_curly) == FALSE) {
- if (tbl->subscr == 0 && i >= nmal) {
- nmal += MALMEMBERS;
- if((np = realloc(np, nmal*tbl->size)) == NULL) {
- return(FAIL);
- }
- ((char **)p)[0] = np;
- if (_Prdebug) {
- errmsg=strdup(GetSharedMsg(
- DT_XK_PARSE_ARRAY_OVERFLOW));
- fprintf(stderr, errmsg, tbl->name, nmal, nmal*tbl->size);
- free(errmsg);
- }
- } else if (tbl->subscr > 0 && i > tbl->subscr) {
- if (_Prdebug)
- {
- errmsg=strdup(GETMESSAGE(8,6,
- "xk_parse: The array '%s' overflowed at element number %d\n"));
- fprintf(stderr, errmsg, tbl->name, i);
- free(errmsg);
- }
- }
- if (_Prdebug)
- {
- errmsg=strdup(GETMESSAGE(8,7,
- "xk_parse: Parsing array element [%d] of '%s' into address 0x%x\n"));
- fprintf(stderr, errmsg, i, tbl->name, &np[i*tbl->size]);
- free(errmsg);
- }
- if (i) {
- xk_skipwhite(buf);
- if (PARPEEK(buf, ",") == FALSE) {
- if (PARPEEK(buf, Str_close_curly) == FALSE) {
- RIF(PAREXPECT(buf, ","));
- *buf += 1;
- }
- }
- else {
- RIF(PAREXPECT(buf, ","));
- *buf += 1;
- }
- }
- RIF(xk_parse(tbl, buf, &np[i*tbl->size], nptr ? -1 : 0,
- 0, (void *)-1, tbl_find));
- i++;
- struct_size = i;
- xk_skipwhite(buf);
- }
- RIF(PAREXPECT(buf, Str_close_curly));
- *buf += 1;
- return(SUCCESS);
- }
- /*
- * If there is no delimiter, and there are two levels of pointer,
- * then we are a NULL terminated array of pointers
- */
- if (tbl->delim == 0 &&
- ((nptr == 2 && sub == 0) || (sub == 1 && nptr == 1))) {
- /*
- * malloc a few members, realloc as needed
- */
- nmal = MALMEMBERS;
- if ((((char **)p)[0] = malloc(nmal*tbl->size)) == NULL) {
- return(FAIL);
- }
- xk_skipwhite(buf);
- RIF(PAREXPECT(buf, Str_open_curly));
- *buf += 1;
- xk_skipwhite(buf);
- while (PARPEEK(buf, Str_close_curly) == FALSE) {
- if (i >= nmal) {
- nmal += MALMEMBERS;
- if ((((char **)p)[0] = realloc(((char **)p)[0], nmal*tbl->size)) == NULL) {
- return(FAIL);
- }
- if (_Prdebug) {
- errmsg=strdup(GetSharedMsg(
- DT_XK_PARSE_ARRAY_OVERFLOW));
- fprintf(stderr, errmsg, tbl->name, nmal, nmal*tbl->size);
- free(errmsg);
- }
- }
- if (_Prdebug)
- {
- errmsg=strdup(GETMESSAGE(8,8,
- "xk_parse: Parsing array element [%d] of '%s'\n"));
- fprintf(stderr, errmsg, i, tbl->name);
- free(errmsg);
- }
- if (i) {
- RIF(PAREXPECT(buf, ","));
- *buf += 1;
- }
- RIF(xk_parse(tbl, buf, &p[i*tbl->size],
- nptr == 2 ? -2 : -1, 0, (void *)-1,
- tbl_find));
-
- xk_skipwhite(buf);
- }
- RIF(PAREXPECT(buf, Str_close_curly));
- *buf++;
- ((char **)p)[i*tbl->size] = NULL;
- return(SUCCESS);
- }
-
- switch(tbl->kind) {
- case K_CHAR:
- RIF(xk_par_int(buf, &val, pass));
- ((unsigned char *)p)[0] = val;
- break;
- case K_SHORT:
- RIF(xk_par_int(buf, &val, pass));
- ((ushort *)p)[0] = val;
- break;
- case K_INT:
- RIF(xk_par_int(buf, &val, pass));
- ((int *)p)[0] = val;
- break;
- case K_LONG:
- RIF(xk_par_int(buf, (long *)p, pass));
- break;
- case K_STRING:
- if (tbl->subscr) {
- val = tbl->subscr;
- RIF(xk_par_chararr(buf, (char *)p, (int *)&val));
- if (tbl->delim <= 0 && val > -1) {
- p[val] = '\0';
- }
- } else {
- val = 0;
- RIF(xk_par_charstr(buf, (char **)p, (int *)&val));
- /* If this is not a delimited char string,
- * then it must be null terminated
- */
- if (tbl->delim <= 0 && val > -1) {
- ((char **) p)[0][val] = '\0';
- }
- strglen = val;
- }
- break;
- case K_TYPEDEF:
- ntbl = tbl_find(tbl->tname, tbl->tbl, tbl->id);
- RIF(xk_parse(ntbl, buf, p, nptr, 0, pass, tbl_find));
- return(SUCCESS);
- case K_STRUCT:
- xk_skipwhite(buf);
- RIF(PAREXPECT(buf, Str_open_curly));
- *buf += 1;
- ntbl = tbl_find(tbl->tname, tbl->tbl, tbl->id);
- pp = NULL;
- for (i = 0; ntbl[i].name != NULL; i++) {
- _Delim = xk_get_pardelim(&ntbl[i], p);
- if (ntbl[i].kind >= K_DSHORT) {
- skind = ntbl[i].kind;
- pp = p + ntbl[i].offset;
- struct_size = 0;
- }
- if (ntbl[i].delim) {
- delim_type = ntbl[i].kind;
- }
- if (i && ntbl[i-1].kind < K_DSHORT) {
- xk_skipwhite(buf);
- if (PARPEEK(buf, ",") == FALSE) {
- if (PARPEEK(buf, Str_close_curly) == FALSE) {
- RIF(PAREXPECT(buf, ","));
- *buf += 1;
- }
- }
- else {
- RIF(PAREXPECT(buf, ","));
- *buf += 1;
- }
- }
- if (_Prdebug)
- {
- errmsg=strdup(GETMESSAGE(8,9,
- "xk_parse: Parsing member '%s' into location 0x%x\n"));
- fprintf(stderr, errmsg, ntbl[i].name, p + ntbl[i].offset);
- free(errmsg);
- }
- if (xk_parse(&ntbl[i], buf, p+ntbl[i].offset, nptr, sub, pass, tbl_find) == FAIL) {
- if (_Prdebug)
- {
- errmsg=strdup(GetSharedMsg(
- DT_XK_PARSE_ERROR));
- fprintf(stderr, errmsg, ntbl[i].name);
- free(errmsg);
- }
- return(FAIL);
- }
- }
- if (pp != NULL) {
- switch(skind) {
- case K_DSHORT:
- if (delim_type == K_STRING)
- ((short *)pp)[0] = strglen;
- else
- ((short *)pp)[0] = struct_size;
- break;
- case K_DINT:
- if (delim_type == K_STRING)
- ((int *)pp)[0] = strglen;
- else
- ((int *)pp)[0] = struct_size;
- break;
- case K_DLONG:
- if (delim_type == K_STRING)
- ((long *)pp)[0] = strglen;
- else
- ((long *)pp)[0] = struct_size;
- break;
- default:
- break;
- }
- }
- xk_skipwhite(buf);
- RIF(PAREXPECT(buf, Str_close_curly));
- *buf += 1;
- break;
- case K_UNION:
- if (strncmp(tbl[-1].name, "ch_", 3) != 0) {
- if (_Prdebug)
- {
- errmsg=strdup(GETMESSAGE(8,10,
- "xk_parse: Cannot determine the choice in '%s'\n"));
- fprintf(stderr, errmsg, tbl->name);
- free(errmsg);
- }
- return(FAIL);
- }
- ntbl = tbl_find(tbl->tname, tbl->tbl, tbl->id);
- xk_skipwhite(buf);
- RIF(PAREXPECT(buf, Str_open_curly));
- *buf += 1;
- for (i = 0; ntbl[i].name != NULL; i++) {
- if (xk_parpeek(buf, ntbl[i].name) == TRUE) {
- RIF(xk_parexpect(buf, ntbl[i].name));
- ((long *)(p - sizeof(long)))[0] = ntbl[i].choice;
- if (_Prdebug)
- {
- errmsg=strdup(GETMESSAGE(8,11,
- "xk_parse: Parsing union member '%s' into location 0x%x\n"));
- fprintf(stderr, errmsg, ntbl[i].name, p + ntbl[i].offset);
- free(errmsg);
- }
- if (xk_parse(&ntbl[i], buf, p, nptr, sub, pass, tbl_find) == FAIL) {
- if (_Prdebug)
- {
- errmsg=strdup(GetSharedMsg(
- DT_XK_PARSE_ERROR));
- fprintf(stderr, errmsg, ntbl[i].name);
- free(errmsg);
- }
- return(FAIL);
- }
- break;
- }
- }
- xk_skipwhite(buf);
- RIF(PAREXPECT(buf, Str_close_curly));
- *buf += 1;
- break;
- case K_DSHORT:
- case K_DINT:
- case K_DLONG:
- break;
- default:
- return(FAIL);
- }
- return(SUCCESS);
-}
-
-int
-xk_get_delim(
- memtbl_t *tbl,
- char *p )
-{
- memtbl_t *dtbl = &tbl[tbl->delim];
- char * errmsg;
-
- if (tbl->delim == 0) {
- return(-1);
- }
- if (_Prdebug)
- {
- errmsg=strdup(GETMESSAGE(8,12,
- "xk_get_delim: The delimiter for field '%s' is field '%s'\n"));
- fprintf(stderr, errmsg, tbl->name, dtbl->name);
- free(errmsg);
- }
- p += dtbl->offset;
- switch (dtbl->kind) {
- case K_DLONG:
- case K_LONG:
- return(((long *)p)[0]);
- case K_CHAR:
- return(((char *)p)[0]);
- case K_DSHORT:
- case K_SHORT:
- return(((short *)p)[0]);
- case K_DINT:
- case K_INT:
- return(((int *)p)[0]);
- default:
- if (_Prdebug)
- {
- errmsg=strdup(GETMESSAGE(8,13,
- "xk_get_delim: Cannot find a delimiter value in '%s'\n"));
- fprintf(stderr, errmsg, tbl->name);
- free(errmsg);
- }
- return(0);
- }
-}
-
-
-int
-xk_get_pardelim(
- memtbl_t *tbl,
- char *p )
-{
- memtbl_t *dtbl = &tbl[tbl->delim];
- char * errmsg;
-
- if (tbl->delim == 0) {
- return(-1);
- }
- if (_Prdebug)
- {
- errmsg=strdup(GETMESSAGE(8,14,
- "xk_get_pardelim: The delimiter for field '%s' is field '%s'\n"));
- fprintf(stderr, errmsg, tbl->name, dtbl->name);
- free(errmsg);
- }
- p += dtbl->offset;
- switch (dtbl->kind) {
- case K_DLONG:
- return(-1);
- case K_LONG:
- return(((long *)p)[0]);
- case K_DSHORT:
- return(-1);
- case K_CHAR:
- return(((char *)p)[0]);
- case K_SHORT:
- return(((short *)p)[0]);
- case K_DINT:
- return(-1);
- case K_INT:
- return(((int *)p)[0]);
- default:
- if (_Prdebug)
- {
- errmsg=strdup(GETMESSAGE(8,15,
- "xk_get_pardelim: Cannot find a delimiter value in '%s'\n"));
- fprintf(stderr, errmsg, tbl->name);
- free(errmsg);
- }
- return(0);
- }
-}
-
-/*
- * xk_print: Takes a pointer to a structure member table, a pointer
- * to a buffer big enough to hold an ascii representation of the structure
- * represented by the table pointer, and a pointer to a structure to
- * be filled in, and the number of pointers saved
- * from previous recursive calls to this routine, and prints the
- * buf into p.
- *
- * Increments buf to the last point at which it wrote a character,
- * and returns SUCCESS or FAIL.
- */
-
-
-int
-xk_print(
- memtbl_t *tbl,
- char **buf,
- char *p,
- int nptr,
- int sub,
- void *pass,
- memtbl_t *(*tbl_find)() )
-{
- memtbl_t *ntbl;
- int i;
- long val; /* used for choice selection */
- char *np;
- int delim = _Delim;
- int (*spec_print)();
- char * errmsg;
-
- if (p == NULL) {
- *buf += lsprintf(*buf, "NULL");
- return(SUCCESS);
- }
- if (tbl == NULL) {
- if (_Prdebug)
- {
- errmsg=strdup(GETMESSAGE(8,16,
- "xk_print: A NULL 'type' table was specified\n"));
- fprintf(stderr, errmsg);
- free(errmsg);
- }
- return(FAIL);
- }
- if (tbl->tname && (spec_print = find_special(SPEC_PRINT, tbl->tname)))
- return(spec_print(tbl, buf, p, nptr, sub, pass, tbl_find));
- if (tbl->name && (spec_print = find_special(SPEC_PRINT, tbl->name)))
- return(spec_print(tbl, buf, p, nptr, sub, pass, tbl_find));
- nptr += tbl->ptr;
- if (sub > 0 && tbl->subscr > 0) {
- if (_Prdebug)
- {
- errmsg=strdup(GETMESSAGE(8,17,
- "xk_print: Multiple array subscripts are not handled in '%s'\n"));
- fprintf(stderr, errmsg, tbl->name);
- free(errmsg);
- }
- return(FAIL);
- }
- /*
- * If there is exactly one pointer associated with this
- * member, and no length delimiters, and no subscripts,
- * or there are multiple pointers,
- * then dereference the structure and call ourself
- * recursively.
- */
- if ((nptr > 1 && tbl->delim != 0) || (nptr == 1 && tbl->delim == 0 && tbl->subscr == 0)) {
- if (_Prdebug)
- {
- errmsg=strdup(GETMESSAGE(8,18,
- "xk_print: Dereferencing '%s' to address 0x%x\n"));
- fprintf(stderr, errmsg, tbl->name, ((char **)p)[0]);
- free(errmsg);
- }
- return(xk_print(tbl, buf, ((char **)p)[0], nptr-1-tbl->ptr, sub, pass, tbl_find));
- }
- /*
- * If there is exactly one pointer level, or one subscripting level,
- * and there is a delimiter,
- * and no subscript, then we are a length delimited array.
- */
- if (tbl->delim != 0 && ((nptr == 1 && tbl->subscr == 0) ||
- nptr == 0 && tbl->subscr != 0 && tbl->kind != K_STRING)) {
-
- if (_Prdebug)
- {
- errmsg=strdup(GETMESSAGE(8,19,
- "xk_print: The delimiter for '%s' is %d\n"));
- fprintf(stderr, errmsg, tbl->name, delim);
- free(errmsg);
- }
- if (tbl->subscr == 0) {
- np = ((char **)p)[0];
- if (_Prdebug)
- {
- errmsg=strdup(GETMESSAGE(8,20,
- "xk_print: Using the pointer 0x%x as an array\n"));
- fprintf(stderr, errmsg, np);
- free(errmsg);
- }
- } else {
- np = p;
- }
- if (np == NULL) {
- *buf += lsprintf(*buf, "NULL");
- return(SUCCESS);
- }
- *buf += lsprintf(*buf, Str_open_curly);
- for (i = 0; i < delim; i++) {
- if (_Prdebug)
- {
- errmsg=strdup(GETMESSAGE(8,21,
- "xk_print: Printing array level %d of member '%s' at location 0x%x\n"));
- fprintf(stderr, errmsg, i, tbl->name, &np[i*tbl->size]);
- free(errmsg);
- }
- if (i)
- *buf += lsprintf(*buf, ", ");
- RIF(xk_print(tbl, buf, &np[i*tbl->size], nptr ? -1 : 0,
- 0, (void *)-1, tbl_find));
- }
- *buf += lsprintf(*buf, Str_close_curly);
- return(SUCCESS);
- }
- /*
- * If there is no delimiter, and there are two levels of pointer,
- * then we are a NULL terminated array.
- */
- if (tbl->delim == 0 &&
- ((nptr == 2 && sub == 0) || (sub == 1 && nptr == 1))) {
- *buf += lsprintf(*buf, Str_open_curly);
- for (i = 0; ((char **)p)[i*tbl->size] != NULL; i++) {
- if (i)
- *buf += lsprintf(*buf, ", ");
- if (_Prdebug)
- {
- errmsg=strdup(GETMESSAGE(8,22,
- "xk_print: Printing array level %d of member '%s'\n"));
- fprintf(stderr, errmsg, i, tbl->name);
- free(errmsg);
- }
- RIF(xk_print(tbl, buf, ((char **)p)[i*tbl->size],
- nptr-(!sub), 0, (void *)-1, tbl_find));
- }
- *buf += lsprintf(*buf, Str_close_curly);
- return(SUCCESS);
- }
-
- if (!Pr_tmpnonames && (Pr_format & PRNAMES)) {
- switch(tbl->kind) {
- case K_CHAR:
- case K_SHORT:
- case K_INT:
- case K_LONG:
- case K_STRING:
- *buf += lsprintf(*buf, "%s=", tbl->name);
- }
- }
- switch(tbl->kind) {
- case K_CHAR:
- case K_SHORT:
- case K_INT:
- case K_LONG:
- RIF(xk_prin_int(tbl, buf, (unsigned long *)p));
- break;
- case K_STRING:
- if (delim > 0) {
- if (tbl->subscr) {
- RIF(xk_prin_hexstr(buf, (char *)p, delim));
- } else {
- RIF(xk_prin_hexstr(buf, ((char **)p)[0], delim));
- }
- } else {
- if (tbl->subscr) {
- RIF(xk_prin_nts(buf, (char *)p));
- } else {
- RIF(xk_prin_nts(buf, ((char **)p)[0]));
- }
- }
- break;
- case K_TYPEDEF:
- ntbl = tbl_find(tbl->tname, tbl->tbl, tbl->id);
- return(xk_print(ntbl, buf, p, nptr, 0, pass, tbl_find));
- case K_STRUCT:
- *buf += lsprintf(*buf, Str_open_curly);
- ntbl = tbl_find(tbl->tname, tbl->tbl, tbl->id);
- for (i = 0; ntbl[i].name != NULL; i++) {
- _Delim = xk_get_delim(&ntbl[i], p);
- if (_Prdebug)
- {
- errmsg=strdup(GETMESSAGE(8,23,
- "xk_print: Printing member '%s' at location 0x%x\n"));
- fprintf(stderr, errmsg, ntbl[i].name, p+ntbl[i].offset);
- free(errmsg);
- }
- RIF(xk_print(&ntbl[i], buf, p+ntbl[i].offset, nptr, sub, pass, tbl_find));
- if (ntbl[i].kind < K_DSHORT && ntbl[i+1].name != NULL)
- *buf += lsprintf(*buf, ", ");
- }
- *buf += lsprintf(*buf, Str_close_curly);
- break;
- case K_UNION:
- if (strncmp(tbl[-1].name, "ch_", 3) != 0) {
- if (_Prdebug)
- {
- errmsg=strdup(GETMESSAGE(8,24,
- "xk_print: Cannot determine the choice in '%s'\n"));
- fprintf(stderr, errmsg, tbl->name);
- free(errmsg);
- }
- return(FAIL);
- }
- val = *((long *)(p - sizeof(long)));
- ntbl = tbl_find(tbl->tname, tbl->tbl, tbl->id);
- *buf += lsprintf(*buf, Str_open_curly);
- for (i = 0; ntbl[i].name != NULL; i++) {
- if (ntbl[i].choice == val) {
- *buf += lsprintf(*buf, "%s ", ntbl[i].name);
- if (_Prdebug)
- {
- errmsg=strdup(GETMESSAGE(8,25,
- "xk_print: Printing union member '%s' into location 0x%x\n"));
- fprintf(stderr, errmsg, ntbl[i].name, p + ntbl[i].offset);
- free(errmsg);
- }
- RIF(xk_print(&ntbl[i], buf, p, nptr, sub, pass, tbl_find));
- break;
- }
- }
- *buf += lsprintf(*buf, Str_close_curly);
- break;
- case K_DSHORT:
- case K_DINT:
- case K_DLONG:
- break;
- default:
- return(FAIL);
- }
- return(SUCCESS);
-}
-
-/*
- * xk_free: Takes a pointer to a structure member table, and
- * free any malloc'ec elements in it at all levels.
- * Returns SUCCESS or FAIL.
- *
- * Contains an optimization that if a structure or union contains a
- * type that is a simple type and nptr is zero, does not do a recursive call.
- */
-
-int
-xk_free(
- memtbl_t *tbl,
- char *p,
- int nptr,
- int sub,
- memtbl_t *(*tbl_find)() )
-{
- memtbl_t *ntbl;
- int i;
- long val; /* used for choice selection */
- char *np;
- int delim = _Delim;
- int (*spec_free)();
- char * errmsg;
-
- if (tbl == NULL) {
- if (_Prdebug)
- {
- errmsg=strdup(GETMESSAGE(8,26,
- "xk_free: A NULL 'type' table was specified\n"));
- fprintf(stderr, errmsg);
- free(errmsg);
- }
- return(FAIL);
- }
- if (tbl->tname && (spec_free = find_special(SPEC_FREE, tbl->tname)))
- return(spec_free(tbl, p, nptr, sub, tbl_find));
- if (tbl->name && (spec_free = find_special(SPEC_FREE, tbl->name)))
- return(spec_free(tbl, p, nptr, sub, tbl_find));
- nptr += tbl->ptr;
- if ((tbl->flags & F_TYPE_IS_PTR) || (nptr > 0)) {
- for (i = Ndont - 1; i >= 0; i--) {
- if (Dont[i] == ((char **) p)[0]) {
- for ( ; i < Ndont - 1; i++)
- Dont[i] = Dont[i + 1];
- Ndont--;
- return(SUCCESS);
- }
- }
- }
- if (sub > 0 && tbl->subscr > 0) {
- if (_Prdebug)
- {
- errmsg=strdup(GETMESSAGE(8,27,
- "xk_free: Multiple array subscripts are not handled in '%s'\n"));
- fprintf(stderr, errmsg, tbl->name);
- free(errmsg);
- }
- return(FAIL);
- }
- /*
- * If there is exactly one pointer associated with this
- * member, and no length delimiters, and no subscripts,
- * or there are multiple pointers,
- * then recursively call ourselves on the structure, then
- * free the structure itself.
- */
- if ((nptr > 1 && tbl->delim != 0) || (nptr == 1 && tbl->delim == 0 && tbl->subscr == 0)) {
- if (((char **)p)[0] != NULL) {
- RIF(xk_free(tbl, ((char **)p)[0], nptr-1-tbl->ptr, sub, tbl_find));
- free(((char **)p)[0]);
- if (_Prdebug)
- {
- errmsg=strdup(GETMESSAGE(8,28,
- "xk_free: The member '%s' at location 0x%x was freed and set to NULL\n"));
- fprintf(stderr, errmsg, tbl->name, ((char **)p)[0]);
- free(errmsg);
- }
- ((char **)p)[0] = NULL;
- } else {
- if (_Prdebug)
- {
- errmsg=strdup(GETMESSAGE(8,29,
- "xk_free: The member '%s' is NULL; no free occurred\n"));
- fprintf(stderr, errmsg, tbl->name);
- free(errmsg);
- }
- }
- return(SUCCESS);
- }
- /*
- * If there is exactly one pointer level, or one subscripting level,
- * and there is a delimiter,
- * and no subscript, then we are a length delimited malloced array.
- * Free each element, then free the whole array.
- */
- if (tbl->delim != 0 && ((nptr == 1 && tbl->subscr == 0) ||
- nptr == 0 && tbl->subscr != 0 && tbl->kind != K_STRING)) {
- if (_Prdebug)
- {
- errmsg=strdup(GETMESSAGE(8,30,
- "xk_free: The delimiter for '%s' is %d\n"));
- fprintf(stderr, errmsg, tbl->name, delim);
- free(errmsg);
- }
- if (tbl->subscr == 0)
- np = ((char **)p)[0];
- else
- np = p;
- for (i = 0; i < delim; i++) {
- if (_Prdebug)
- {
- errmsg=strdup(GETMESSAGE(8,31,
- "xk_free: Freeing array element [%d] of '%s' at address 0x%x\n"));
- fprintf(stderr, errmsg, i, tbl->name, &np[i*tbl->size]);
- free(errmsg);
- }
- RIF(xk_free(tbl, &np[i*tbl->size], nptr ? -1 : 0, 0, tbl_find));
- }
- if (tbl->subscr == 0) {
- if (np != NULL) {
- if (_Prdebug)
- {
- errmsg=strdup(GETMESSAGE(8,32,
- "xk_free: Freeing pointer to array of '%s' at location 0x%x and setting to NULL\n"));
- fprintf(stderr, errmsg, tbl->name, np);
- free(errmsg);
- }
- free(np);
- if (tbl->subscr == 0)
- ((char **)p)[0] = NULL;
- } else if (_Prdebug) {
- errmsg=strdup(GETMESSAGE(8,33,
- "xk_free: The pointer to array of '%s'is NULL; no free occurred\n"));
- fprintf(stderr, errmsg, tbl->name);
- free(errmsg);
- }
- }
- return(SUCCESS);
- }
-
- switch(tbl->kind) {
- case K_DSHORT:
- case K_SHORT:
- case K_DINT:
- case K_INT:
- case K_DLONG:
- case K_LONG:
- break;
- case K_STRING:
- if (!tbl->subscr) {
- if (((char **)p)[0] != NULL) {
- if (_Prdebug)
- {
- errmsg=strdup(GETMESSAGE(8,34,
- "xk_free: Freeing string '%s' at location 0x%x, and setting to NULL\n"));
- fprintf(stderr, errmsg, tbl->name, p);
- free(errmsg);
- }
- free(((char **)p)[0]);
- ((char **)p)[0] = NULL;
- } else if (_Prdebug) {
- errmsg=strdup(GETMESSAGE(8,35,
- "xk_free: The string '%s' is NULL; no free occurred\n"));
- fprintf(stderr, errmsg, tbl->name, p);
- free(errmsg);
- }
- }
- break;
- case K_TYPEDEF:
- ntbl = tbl_find(tbl->tname, tbl->tbl, tbl->id);
- return(xk_free(ntbl, p, nptr, 0, tbl_find));
- case K_STRUCT:
- ntbl = tbl_find(tbl->tname, tbl->tbl, tbl->id);
- for (i = 0; ntbl[i].name != NULL; i++) {
- if ((ntbl[i].flags & F_SIMPLE) && nptr+ntbl[i].ptr == 0) {
- if (_Prdebug)
- {
- errmsg=strdup(GetSharedMsg(
- DT_XK_FREE_NO_MEMBER));
- fprintf(stderr, errmsg, ntbl[i].name, p + ntbl[i].offset);
- free(errmsg);
- }
- continue;
- }
- _Delim = xk_get_delim(&ntbl[i], p);
- if (_Prdebug)
- {
- errmsg=strdup(GETMESSAGE(8,36,
- "xk_free: Freeing member '%s' at location 0x%x\n"));
- fprintf(stderr, errmsg, ntbl[i].name, p + ntbl[i].offset);
- free(errmsg);
- }
- if (xk_free(&ntbl[i], p+ntbl[i].offset, nptr, sub, tbl_find) == FAIL) {
- if (_Prdebug)
- {
- errmsg=strdup(GETMESSAGE(8,37,
- "xk_free: A failure occurred while freeing the '%s' member\n"));
- fprintf(stderr, errmsg, ntbl[i].name);
- free(errmsg);
- }
- return(FAIL);
- }
- }
- break;
- case K_UNION:
- if (strncmp(tbl[-1].name, "ch_", 3) != 0) {
- if (_Prdebug)
- {
- errmsg=strdup(GETMESSAGE(8,38,
- "xk_free: Cannot determine the choice in '%s'\n"));
- fprintf(stderr, errmsg, tbl->name);
- free(errmsg);
- }
- return(FAIL);
- }
- val = *((long *)(p - sizeof(long)));
- ntbl = tbl_find(tbl->tname, tbl->tbl, tbl->id);
- for (i = 0; ntbl[i].name != NULL; i++) {
- if (ntbl[i].choice == val) {
- if ((ntbl[i].flags & F_SIMPLE) && nptr+ntbl[i].ptr == 0) {
- if (_Prdebug)
- {
- errmsg=strdup(GetSharedMsg(
- DT_XK_FREE_NO_MEMBER));
- fprintf(stderr, errmsg, ntbl[i].name, p + ntbl[i].offset);
- free(errmsg);
- }
- continue;
- }
- if (_Prdebug)
- {
- errmsg=strdup(GETMESSAGE(8,39,
- "xk_free: Freeing union member '%s' at location 0x%x\n"));
- fprintf(stderr, errmsg, ntbl[i].name, p + ntbl[i].offset);
- free(errmsg);
- }
- RIF(xk_free(&ntbl[i], p, nptr, sub, tbl_find));
- break;
- }
- }
- if (ntbl[i].name == NULL && _Prdebug)
- if (_Prdebug)
- {
- errmsg=strdup(GETMESSAGE(8,40,
- "xk_free: There is no legal union choice for '%s' (value is 0x%x); no free occurred\n"));
- fprintf(stderr, errmsg, tbl->name, val);
- free(errmsg);
- }
- break;
- default:
- return(FAIL);
- }
- return(SUCCESS);
-}
+++ /dev/null
-/*
- * CDE - Common Desktop Environment
- *
- * Copyright (c) 1993-2012, The Open Group. All rights reserved.
- *
- * These libraries and programs are free software; you can
- * redistribute them and/or modify them under the terms of the GNU
- * Lesser General Public License as published by the Free Software
- * Foundation; either version 2 of the License, or (at your option)
- * any later version.
- *
- * These libraries and programs are distributed in the hope that
- * they will be useful, but WITHOUT ANY WARRANTY; without even the
- * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- * PURPOSE. See the GNU Lesser General Public License for more
- * details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with these libraries and programs; if not, write
- * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
- * Floor, Boston, MA 02110-1301 USA
- */
-/* $XConsortium: exksh_tbls.h /main/4 1995/11/01 15:54:45 rswiston $ */
-/************************************<+>*************************************
- ****************************************************************************
- **
- ** File: exksh_tbls.h
- **
- ** Project: CDE
- **
- ** Description: Public include file for exksh_tbls.c
- **
- **
- ** (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992
- ** by Hewlett-Packard Company
- **
- **
- **
- ****************************************************************************
- ************************************<+>*************************************/
-
-#ifndef _Dtksh_exksh_tbls_h
-#define _Dtksh_exksh_tbls_h
-
-extern int Pr_tmpnonames;
-extern int _Delim;
-
-
-
-extern int (*find_special(
- int type,
- char *name))() ;
-extern int set_special(
- char *name,
- int (*free)(),
- int (*parse)(),
- int (*print)()) ;
-extern int xk_parse(
- memtbl_t *tbl,
- char **buf,
- char *p,
- int nptr,
- int sub,
- void *pass,
- memtbl_t *(*tbl_find)()) ;
-extern int xk_get_delim(
- memtbl_t *tbl,
- char *p) ;
-extern int xk_get_pardelim(
- memtbl_t *tbl,
- char *p) ;
-extern int xk_print(
- memtbl_t *tbl,
- char **buf,
- char *p,
- int nptr,
- int sub,
- void *pass,
- memtbl_t *(*tbl_find)()) ;
-extern int xk_free(
- memtbl_t *tbl,
- char *p,
- int nptr,
- int sub,
- memtbl_t *(*tbl_find)()) ;
-
-
-
-#endif /* _Dtksh_exksh_tbls_h */
-/* DON'T ADD ANYTHING AFTER THIS #endif */
}
-void *
-xkhash_init(
- int num )
-{
- return((void *) hashalloc(NULL,0));
-}
-
-void
-xkhash_override(
- Hash_table_t *tbl,
- const char *name,
- void *val )
-{
- hashput(tbl, name, val);
-}
-
-void *
-xkhash_find(
- Hash_table_t *tbl,
- const char *name )
-{
- return(hashget(tbl, name));
-}
-
-void
-xkhash_add(
- Hash_table_t *tbl,
- const char *name,
- char *val )
-{
- hashput(tbl, name, val);
-}
-
int
ksh_eval(
char *cmd )
+++ /dev/null
-/*
- * CDE - Common Desktop Environment
- *
- * Copyright (c) 1993-2012, The Open Group. All rights reserved.
- *
- * These libraries and programs are free software; you can
- * redistribute them and/or modify them under the terms of the GNU
- * Lesser General Public License as published by the Free Software
- * Foundation; either version 2 of the License, or (at your option)
- * any later version.
- *
- * These libraries and programs are distributed in the hope that
- * they will be useful, but WITHOUT ANY WARRANTY; without even the
- * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- * PURPOSE. See the GNU Lesser General Public License for more
- * details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with these libraries and programs; if not, write
- * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
- * Floor, Boston, MA 02110-1301 USA
- */
-/* $XConsortium: genlib.c /main/5 1996/09/27 19:01:37 drk $ */
-
-/* Copyright (c) 1991, 1992 UNIX System Laboratories, Inc. */
-/* All Rights Reserved */
-
-/* THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF */
-/* UNIX System Laboratories, Inc. */
-/* The copyright notice above does not evidence any */
-/* actual or intended publication of such source code. */
-
-#include "stdio.h"
-#include <sys/types.h>
-
-#ifdef DYNLIB
-#include <dlfcn.h>
-#endif
-#ifdef HPUX_DYNLIB
-#include <dl.h>
-#endif
-
-#include <string.h>
-#include <search.h>
-#include <ctype.h>
-#include "docall.h"
-#include "exksh.h"
-#include "misc.h"
-#include "xmdtksym.h"
-#include "msgs.h"
-
-
-static char * ReturnUsageMsg(
- int msgIndex);
-
-
-struct libstruct *All_libs;
-static int Nlibs;
-int sh_errno;
-
-static struct usage {
- char *funcname;
- int msgId;
-} Xk_usage[] = {
- "call", 0,
- "define", 1,
- "deflist", 2,
- "deref", 3,
- "field_comp", 4,
- "field_get", 5,
- "finddef", 6,
- "findsym", 7,
- "sizeof", 8,
- "struct", 9,
- "structlist", 10,
- "symbolic", 11,
- "typedef", 12,
-};
-
-
-static char *
-ReturnUsageMsg(
- int msgId )
-{
- char * errmsg;
-
- switch (msgId)
- {
- case 0: errmsg = GETMESSAGE(9,1, "call [-F] [-n] [-r] function [arg] ... [++] [argModifier ...]");
- return(errmsg);
- case 1: errmsg = GETMESSAGE(9,2, "define [-R] name value");
- return(errmsg);
- case 2: errmsg = GETMESSAGE(9,3, "deflist [-p prefix] address");
- return(errmsg);
- case 3: errmsg = GETMESSAGE(9,4, "deref [-p] [-l] [-len] address [variable]");
- return(errmsg);
- case 4: errmsg = GETMESSAGE(9,5, "field_comp type address [criterion ...]");
- return(errmsg);
- case 5: errmsg = GETMESSAGE(9,6, "field_get [-v variable] type address [fieldName ...]");
- return(errmsg);
- case 6: errmsg = GETMESSAGE(9,7, "finddef definitionName [variable]");
- return(errmsg);
- case 7: errmsg = GETMESSAGE(9,8, "findsym symbolName [variable]");
- return(errmsg);
- case 8: errmsg = GETMESSAGE(9,9, "sizeof typeName [variable]");
- return(errmsg);
- case 9: errmsg = GETMESSAGE(9,10,"struct [-R] name fieldName[:type] ...");
- return(errmsg);
- case 10: errmsg = GETMESSAGE(9,11, "structlist [-i id] [-p prefix] address");
- return(errmsg);
- case 11: errmsg = GETMESSAGE(9,12, "symbolic [-m] -t type ... symbolic ...");
- return(errmsg);
- case 12: errmsg = GETMESSAGE(9,13,"typedef [-R] typeDescriptor typeName");
- return(errmsg);
- }
-
- return("");
-}
-
-int
-xk_usage(
- char *funcname )
-{
- int i;
- char * errhdr;
- char * errmsg;
-
- for (i = 0; i < sizeof(Xk_usage) / sizeof(struct usage); i++)
- {
- if (!funcname)
- {
- errmsg = strdup(ReturnUsageMsg(Xk_usage[i].msgId));
- ALTPUTS(errmsg);
- free(errmsg);
- }
- else if (!funcname || (strcmp(funcname, Xk_usage[i].funcname) == 0))
- {
- errhdr = strdup(GETMESSAGE(9,14, "Usage: %s"));
- errmsg = strdup(ReturnUsageMsg(Xk_usage[i].msgId));
- printerrf("", errhdr, errmsg, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL);
- free(errhdr);
- free(errmsg);
- return(SH_SUCC);
- }
- }
- return(funcname ? SH_FAIL : SH_SUCC);
-}
-
-unsigned long
-fsym(
- char *str,
- int lib )
-{
-#if defined(STATICLIB) || ( !defined(DYNLIB) && !defined(HPUX_DYNLIB))
- struct symarray dummy;
-#endif
-#if defined(DYNLIB)
- int i, j;
-#endif
- void *found;
-
-#if defined(STATICLIB) || (!defined(DYNLIB) && !defined(HPUX_DYNLIB))
- dummy.str = str;
-
-if ((found = (void *) bsearch((char *) &dummy, Symarray,
- Symsize-1, sizeof(struct symarray), symcomp)) != NULL)
- return(((struct symarray *) found)->addr);
-#endif /* STATICLIB */
-
-#ifdef DYNLIB
- for (i = 0; i < Nlibs; i++)
- for (j = 0; j < All_libs[i].nlibs; j++)
- if ((found = dlsym(All_libs[i].libs[j].handle,
-str)) != NULL)
- return((unsigned long) found);
-#endif /* DYNLIB */
-#ifdef HPUX_DYNLIB
- {
- shl_t handle;
-
- handle = NULL;
- if ((shl_findsym(&handle, str, TYPE_PROCEDURE, &found)) == 0)
- return((unsigned long) found);
- if ((shl_findsym(&handle, str, TYPE_DATA, &found)) == 0)
- return((unsigned long) found);
- handle = PROG_HANDLE;
- if ((shl_findsym(&handle, str, TYPE_PROCEDURE, &found)) == 0)
- return((unsigned long) found);
- if ((shl_findsym(&handle, str, TYPE_DATA, &found)) == 0)
- return((unsigned long) found);
- }
-#endif /* HPUX_DYNLIB */
- return(NULL);
-}
-
-
-
-int
-do_findsym(
- int argc,
- char **argv )
-{
- unsigned long found;
- struct symarray dummy;
- char * errmsg;
-
- if (argc == 1) {
- XK_USAGE(argv[0]);
- }
- if ((found = fsym(argv[1], -1)) != NULL) {
- if (argc >= 3) {
- char buf[50];
-
- sprintf(buf, "%s=0x%lx", argv[2], found);
- env_set(buf);
- }
- else {
- sprintf(xk_ret_buffer, "0x%lx", found);
- xk_ret_buf = xk_ret_buffer;
- }
- }
- else {
- errmsg = strdup(GetSharedMsg(DT_UNDEF_SYMBOL));
- printerrf(argv[0], errmsg, argv[1], NULL, NULL,
- NULL, NULL, NULL, NULL, NULL);
- free(errmsg);
- return(SH_FAIL);
- }
- return(SH_SUCC);
-}
-
-#ifndef SPRINTF_RET_LEN
-/*
- * SYSTEM V sprintf() returns the length of the buffer, other versions
- * of the UNIX System don't. So, if the SPRINTF_RET_LEN flag is not true,
- * then we define an alternate function, lsprintf(), which has the SYSV
- * behavior. Otherwise, lsprintf is #defined in exksh.h to be the
- * same as sprintf.
- */
-
-int
-lsprintf(
- char *buf,
- char *fmt,
- unsigned long arg1,
- unsigned long arg2,
- unsigned long arg3,
- unsigned long arg4,
- unsigned long arg5,
- unsigned long arg6,
- unsigned long arg7 )
-
-{
- sprintf(buf, fmt, arg1, arg2, arg3, arg4, arg5, arg6, arg7);
- return(strlen(buf));
-}
-#endif
+++ /dev/null
-/*
- * CDE - Common Desktop Environment
- *
- * Copyright (c) 1993-2012, The Open Group. All rights reserved.
- *
- * These libraries and programs are free software; you can
- * redistribute them and/or modify them under the terms of the GNU
- * Lesser General Public License as published by the Free Software
- * Foundation; either version 2 of the License, or (at your option)
- * any later version.
- *
- * These libraries and programs are distributed in the hope that
- * they will be useful, but WITHOUT ANY WARRANTY; without even the
- * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- * PURPOSE. See the GNU Lesser General Public License for more
- * details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with these libraries and programs; if not, write
- * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
- * Floor, Boston, MA 02110-1301 USA
- */
-/* $XConsortium: genlib.h /main/4 1995/11/01 15:55:32 rswiston $ */
-/************************************<+>*************************************
- ****************************************************************************
- **
- ** File: genlib.h
- **
- ** Project: CDE
- **
- ** Description: Public include file for genlib.c
- **
- **
- ** (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992
- ** by Hewlett-Packard Company
- **
- **
- **
- ****************************************************************************
- ************************************<+>*************************************/
-
-#ifndef _Dtksh_genlib_h
-#define _Dtksh_genlib_h
-
-#include "exksh.h"
-
-extern struct libstruct *All_libs;
-
-
-
-extern int xk_usage(
- char *funcname) ;
-extern unsigned long fsym(
- char *str,
- int lib) ;
-extern int do_findsym(
- int argc,
- char **argv) ;
-#ifndef SPRINTF_RET_LEN
-extern int lsprintf(
- char *buf,
- char *fmt,
- unsigned long arg1,
- unsigned long arg2,
- unsigned long arg3,
- unsigned long arg4,
- unsigned long arg5,
- unsigned long arg6,
- unsigned long arg7) ;
-#endif
-
-
-
-#endif /* _Dtksh_genlib_h */
-/* DON'T ADD ANYTHING AFTER THIS #endif */
+++ /dev/null
-# Copyright (c) 1991, 1992 UNIX System Laboratories, Inc.
-# All Rights Reserved */
-
-# THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF
-# UNIX System Laboratories, Inc.
-# The copyright notice above does not evidence any
-# actual or intended publication of such source code.
-
-#
-# Installation Directories
-#
-
-COEKSHBINDIR="/usr/bin"
-
-#
-# Standard X Libraries
-#
-
-XROOT = /usr/lib/X11R4
-XINC = /x/r5s700_90
-XLIB = $(XROOT)
-X11LIB = /x/r5s700_90/lib/X/libX11.sl
-XtLIB = /x/r5s700_90/lib/Xt/libXt.sl
-
-#
-# MOTIF Libraries
-#
-
-MOTIFINC = /x/r5s700_90/X11
-XmLIB = /x/r5s700_90/lib/Xm/libXm.sl
-
-#
-# COE Libraries
-#
-
-CoeINC = /x/r5s700_90/lib1
-CoeLIB = /clone/fred/Coe/libCoe.a
-#CoeLIB = /x/r5s700_90/lib1/Coe/libCoe.a
-#XvhLIB = /clone/fred/Xvh/libXvh.a
-XvhLIB = /x/r5s700_90/lib1/Xvh/libXvh.a
-IlLIB = /x/r5s700_90/lib1/il/libil.a
-BmsLIB = /x/r5s700_90/lib/bms/hpux/s700.9.03/libbms.a
-SoftlibLIB = /x/r5s700_90/lib/bms/hpux/s700.9.03/libsoftlib.a
-BmsDIR = /x/r5s700_90/lib/bms/hpux/s700.9.03
-
-#
-# Standard user level compilation flags for X programs,
-# with variations for MOTIF or OPEN LOOK
-#
-
-AR = ar
-
-LDFLAGS = -L $(XLIB) -ldld -Wl,-E
-
-SUBCFLAGS = -g -DSYSV -DNLS16 -DMALLOC_0_RETURNS_NULL -DMERGE -DNDEBUG -D__hpux -Dhpux -DOSMAJORVERSION=9 -DOSMINORVERSION=0 -DSHMLINK -D__hp9000s800 -Dhp9000s800 -D__hp9000s700 -DHPPEX -DMESSAGE_CAT +e -DR5TREE -Aa -D_HPUX_SOURCE -DANSICPP -DXK_MISCELLANY -D_BMS -D_CMDINV -DVALUE_ADDED +DA1.0
-
-XFLAGS =
-
-UFLAGS = $(XFLAGS) -DKSHELL -DUSER_PROMPT -DTEST_CODE -D'COEKSHBINDIR=$(COEKSHBINDIR)'
-
-CFLAGS = $(SUBCFLAGS) -I$(BmsDIR) -I$(CoeINC) -I $(MOTIFINC) -I. $(EXKSHINCLUDES) -I$(XINC) $(UFLAGS) -Dconst=
-
-RANLIB = ranlib
-
-
-MO_CFLAGS = $(CFLAGS) -I $(MOTIFINC) $(MO_UFLAGS)
-
-#
-# Dynamic Library Definitions
-#
-
-LIB_KIND = .a
+++ /dev/null
-Toplevel
-do_XBell
-do_XClearArea
-do_XClearWindow
-do_XDrawArc
-do_XDrawImageString
-do_XDrawLine
-do_XDrawLines
-do_XDrawPoint
-do_XDrawPoints
-do_XDrawRectangle
-do_XDrawSegments
-do_XDrawString
-do_XFillArc
-do_XFillPolygon
-do_XFillRectangle
-do_XFlush
-do_XSync
-do_XRaiseWindow
-do_XmCreateArrowButton
-do_XmCreateArrowButtonGadget
-do_XmCreateBulletinBoard
-do_XmCreateBulletinBoardDialog
-do_XmCreateCascadeButton
-do_XmCreateCascadeButtonGadget
-do_XmCreateCommand
-do_XmCreateDialogShell
-do_XmCreateDrawingArea
-do_XmCreateDrawnButton
-do_XmCreateErrorDialog
-do_XmCreateFileSelectionBox
-do_XmCreateFileSelectionDialog
-do_XmCreateForm
-do_XmCreateFormDialog
-do_XmCreateFrame
-do_XmCreateInformationDialog
-do_XmCreateLabel
-do_XmCreateLabelGadget
-do_XmCreateList
-do_XmListAddItem
-do_XmListAddItemUnselected
-do_XmListAddItems
-do_XmListAddItemsUnselected
-do_XmListDeleteAllItems
-do_XmListDeleteItem
-do_XmListDeleteItems
-do_XmListDeleteItemsPos
-do_XmListDeletePos
-do_XmListDeletePositions
-do_XmListDeselectAllItems
-do_XmListDeselectItem
-do_XmListDeselectPos
-do_XmListGetKbdItemPos
-do_XmListItemExists
-do_XmListItemPos
-do_XmListPosSelected
-do_XmListPosToBounds
-do_XmListReplaceItemsPos
-do_XmListReplaceItemsPosUnselected
-do_XmListSelectItem
-do_XmListSelectPos
-do_XmListSetAddMode
-do_XmListSetBottomItem
-do_XmListSetBottomPos
-do_XmListSetHorizPos
-do_XmListSetItem
-do_XmListSetKbdItemPos
-do_XmListSetPos
-do_XmListUpdateSelectedList
-do_XmCreateMainWindow
-do_XmCreateMenuBar
-do_XmCreateMenuShell
-do_XmCreateMessageBox
-do_XmCreateMessageDialog
-do_XmCreateOptionMenu
-do_XmCreatePanedWindow
-do_XmCreatePopupMenu
-do_XmCreatePromptDialog
-do_XmCreatePulldownMenu
-do_XmCreatePushButton
-do_XmCreatePushButtonGadget
-do_XmCreateQuestionDialog
-do_XmCreateRadioBox
-do_XmCreateRowColumn
-do_XmCreateScale
-do_XmCreateScrollBar
-do_XmCreateScrolledList
-do_XmCreateScrolledText
-do_XmCreateScrolledWindow
-do_XmCreateSelectionBox
-do_XmCreateSelectionDialog
-do_XmCreateSeparator
-do_XmCreateSeparatorGadget
-do_XmCreateText
-do_XmCreateTextField
-do_XmCreateToggleButton
-do_XmCreateToggleButtonGadget
-do_XmCreateWarningDialog
-do_XmCreateWorkArea
-do_XmCreateWorkingDialog
-do_DtCreateHelpDialog
-do_DtCreateQuickHelpDialog
-do_DtHelpReturnSelectedWidgetId
-do_DtHelpSetCatalogName
-do_DtHelpQuickDialogGetChild
-do_XmCommandAppendValue
-do_XmCommandError
-do_XmCommandSetValue
-do_XmCommandGetChild
-do_XmMessageBoxGetChild
-do_XmFileSelectionBoxGetChild
-do_XmMainWindowSetAreas
-do_XmMainWindowSep1
-do_XmMainWindowSep2
-do_XmMainWindowSep3
-do_XmProcessTraversal
-do_XmInternAtom
-do_XmGetAtomName
-do_XmGetColors
-do_XmUpdateDisplay
-do_XmAddWMProtocols
-do_XmRemoveWMProtocols
-do_XmAddWMProtocolCallback
-do_XmRemoveWMProtocolCallback
-do_XmMenuPosition
-do_XmIsTraversable
-do_XmScaleGetValue
-do_XmScaleSetValue
-do_XmScrollBarGetValues
-do_XmScrollBarSetValues
-do_XmScrollVisible
-do_XmToggleButtonGetState
-do_XmToggleButtonGadgetGetState
-do_XmToggleButtonSetState
-do_XmToggleButtonGadgetSetState
-do_XmTextDisableRedisplay
-do_XmTextEnableRedisplay
-do_XmTextGetTopCharacter
-do_XmTextScroll
-do_XmTextFindString
-do_XmTextGetBaseline
-do_XmTextGetEditable
-do_XmTextGetInsertionPosition
-do_XmTextGetLastPosition
-do_XmTextGetMaxLength
-do_XmTextGetSelection
-do_XmTextGetSelectionPosition
-do_XmTextGetString
-do_XmTextInsert
-do_XmTextPosToXY
-do_XmTextRemove
-do_XmTextReplace
-do_XmTextSetEditable
-do_XmTextWetHighlight
-do_XmTextSetInsertionPosition
-do_XmTextSetMaxLength
-do_XmTextSetSelection
-do_XmTextSetString
-do_XmTextShowPosition
-do_XmTextXYToPos
-do_XmTextClearSelection
-do_XmTextCopy
-do_XmTextCut
-do_XmTextPaste
-do_XmTextSetAddMode
-do_XtAddCallback
-do_XtRemoveCallback
-do_XtAddEventHandler
-do_XtRemoveEventHandler
-do_XtAddInput
-do_XtAddTimeOut
-do_XtCreateApplicationShell
-do_XtInitialize
-do_XtCallCallbacks
-do_XtHasCallbacks
-do_XtCreateManagedWidget
-do_XtCreatePopupShell
-do_XtCreateWidget
-do_XtDestroyWidget
-do_XtGetValues
-do_XtIsManaged
-do_XtIsRealized
-do_XtIsSensitive
-do_XtIsShell
-do_XtLastTimestampProcessed
-do_XtMainLoop
-do_XtDisplay
-do_XtWindow
-do_XtManageChildren
-do_XtMapWidget
-do_XtParent
-do_XtPopdown
-do_XtPopup
-do_XtRealizeWidget
-do_XtRemoveAllCallbacks
-do_XtSetSensitive
-do_XtSetValues
-do_XtUnmanageChildren
-do_XtUnmapWidget
-do_XtUnrealizeWidget
-do_catopen
-do_catgets
-do_catclose
-do_managelist_func
-do_widlist
-do_widload
-handle_to_widget
+++ /dev/null
-/*
- * CDE - Common Desktop Environment
- *
- * Copyright (c) 1993-2012, The Open Group. All rights reserved.
- *
- * These libraries and programs are free software; you can
- * redistribute them and/or modify them under the terms of the GNU
- * Lesser General Public License as published by the Free Software
- * Foundation; either version 2 of the License, or (at your option)
- * any later version.
- *
- * These libraries and programs are distributed in the hope that
- * they will be useful, but WITHOUT ANY WARRANTY; without even the
- * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- * PURPOSE. See the GNU Lesser General Public License for more
- * details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with these libraries and programs; if not, write
- * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
- * Floor, Boston, MA 02110-1301 USA
- */
-/* $XConsortium: misc.c /main/5 1996/10/04 16:21:08 drk $ */
-/* Copyright (c) 1991, 1992 UNIX System Laboratories, Inc. */
-/* All Rights Reserved */
-
-/* THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF */
-/* UNIX System Laboratories, Inc. */
-/* The copyright notice above does not evidence any */
-/* actual or intended publication of such source code. */
-
-#include "name.h"
-#include "shell.h"
-#include "stdio.h"
-#include <X11/X.h>
-#include <X11/Intrinsic.h>
-#include <X11/IntrinsicP.h>
-#define NO_AST
-#include "dtksh.h"
-#undef NO_AST
-#include "exksh.h" /* which includes sys/types.h */
-/* #include <sys/param.h> */
-#include <string.h>
-/* #include <search.h> */
-#include <ctype.h>
-#include "docall.h"
-#include "msgs.h"
-
-static char use[] = "0x%lx";
-
-int
-symcomp(
- void *sym1,
- void *sym2 )
-
-{
- return(strcmp(((struct symarray *) sym1)->str, ((struct symarray *) sym2)->str));
-}
-
-
-void *
-getaddr(
- char *str )
-{
- if (isdigit(str[0]))
- return((void *) strtoul(str, NULL, 0));
- else
- return((void *) fsym(str, -1));
-}
-
-int
-do_deref(
- int argc,
- char **argv )
-{
- unsigned char *ptr;
- long i, len = 0;
- short longwise = -1;
- char printit = 0;
- static char xk_ret_buffer[1024];
- char * errmsg;
-
- for (i = 1; (i < argc) && argv[i] != NULL && argv[i][0] == '-'; i++) {
- if (isdigit(argv[i][1])) {
- if (longwise < 0)
- longwise = 0;
- ptr = (unsigned char *) argv[i] + 1;
- xk_par_int(&ptr, &len, NULL);
- if (!len) {
- errmsg = strdup(GETMESSAGE(10,1,
- "An invalid length parameter was specified: %s"));
- printerrf(argv[0], errmsg,
- argv[i], NULL, NULL, NULL, NULL, NULL,
- NULL, NULL);
- free(errmsg);
- return(SH_FAIL);
- }
- }
- else if (argv[i][1] == 'l')
- longwise = 1;
- else if (argv[i][1] == 'p')
- printit = 1;
- }
- if (longwise < 0)
- longwise = 1;
- if (!len)
- len = sizeof(long);
- if (i >= argc) {
- XK_USAGE(argv[0]);
- }
- ptr = (unsigned char *) getaddr(argv[i++]);
- if (ptr) {
- if ( ((i < argc) && argv[i]) || printit) {
- char *dbuf, *p;
- int totlen;
- char buf[10 * BUFSIZ];
- int incr;
-
- if (printit)
- totlen = len + 1 + 1;
- else
- totlen = len + strlen(argv[i]) + 1 + 1;
- dbuf = (char *) (totlen < (10 * BUFSIZ - 1)) ? buf : malloc(totlen);
- if (printit)
- strcpy(dbuf, "0x");
- else
- sprintf(dbuf, "%s=0x", argv[i]);
- p = dbuf + strlen(dbuf);
- incr = longwise ? sizeof(long) : sizeof(char);
- for (i=0; i < len; i += incr, p += 2 * incr)
- sprintf(p, "%*.*x", incr * 2, incr * 2, longwise ? *((unsigned long *) (ptr + i)) : (unsigned long) (ptr[i]));
- if (printit)
- ALTPUTS(dbuf);
- else
- env_set(dbuf);
- if (dbuf != buf)
- free(dbuf);
- }
- else {
- if (len > sizeof(unsigned long)) {
- char tmpBuf[30];
-
- sprintf(tmpBuf, "%ld", (long)sizeof(unsigned long));
- errmsg = strdup(GETMESSAGE(10,2,
- "To set RET, the length must be less than: %s"));
- printerrf(argv[0], errmsg,
- tmpBuf, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL);
- free(errmsg);
- return(SH_FAIL);
- }
- sprintf(xk_ret_buffer, use, *((unsigned long *) ptr));
- xk_ret_buf = xk_ret_buffer;
- }
- return(SH_SUCC);
- }
- errmsg = strdup(GetSharedMsg(DT_UNDEF_SYMBOL));
- printerrf(argv[0], errmsg, argv[--i], NULL, NULL, NULL,
- NULL, NULL, NULL, NULL);
- free(errmsg);
- return(SH_FAIL);
-}
-
-void *
-nop(
- void *var )
-{
- return(var);
-}
-
-void *
-save_alloc(
- void *var )
-{
- return(var);
-}
+++ /dev/null
-/*
- * CDE - Common Desktop Environment
- *
- * Copyright (c) 1993-2012, The Open Group. All rights reserved.
- *
- * These libraries and programs are free software; you can
- * redistribute them and/or modify them under the terms of the GNU
- * Lesser General Public License as published by the Free Software
- * Foundation; either version 2 of the License, or (at your option)
- * any later version.
- *
- * These libraries and programs are distributed in the hope that
- * they will be useful, but WITHOUT ANY WARRANTY; without even the
- * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- * PURPOSE. See the GNU Lesser General Public License for more
- * details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with these libraries and programs; if not, write
- * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
- * Floor, Boston, MA 02110-1301 USA
- */
-/* $XConsortium: misc.h /main/4 1995/11/01 15:56:04 rswiston $ */
-/************************************<+>*************************************
- ****************************************************************************
- **
- ** File: misc.h
- **
- ** Project: CDE
- **
- ** Description: Public include file for misc.c
- **
- **
- ** (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992
- ** by Hewlett-Packard Company
- **
- **
- **
- ****************************************************************************
- ************************************<+>*************************************/
-
-#ifndef _Dtksh_misc_h
-#define _Dtksh_misc_h
-
-
-
-extern int symcomp(
- const void *sym1,
- const void *sym2) ;
-extern void * getaddr(
- char *str) ;
-extern int do_deref(
- int argc,
- char **argv) ;
-extern void * nop(
- void *var) ;
-extern void * save_alloc(
- void *var) ;
-
-
-#endif /* _Dtksh_misc_h */
-/* DON'T ADD ANYTHING AFTER THIS #endif */
+++ /dev/null
-/*
- * CDE - Common Desktop Environment
- *
- * Copyright (c) 1993-2012, The Open Group. All rights reserved.
- *
- * These libraries and programs are free software; you can
- * redistribute them and/or modify them under the terms of the GNU
- * Lesser General Public License as published by the Free Software
- * Foundation; either version 2 of the License, or (at your option)
- * any later version.
- *
- * These libraries and programs are distributed in the hope that
- * they will be useful, but WITHOUT ANY WARRANTY; without even the
- * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- * PURPOSE. See the GNU Lesser General Public License for more
- * details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with these libraries and programs; if not, write
- * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
- * Floor, Boston, MA 02110-1301 USA
- */
-/* $XConsortium: struct.c /main/4 1995/11/01 15:56:35 rswiston $ */
-/* Copyright (c) 1991, 1992 UNIX System Laboratories, Inc. */
-/* All Rights Reserved */
-
-/* THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF */
-/* UNIX System Laboratories, Inc. */
-/* The copyright notice above does not evidence any */
-/* actual or intended publication of such source code. */
-
-#undef printf
-
-
-#include "shell.h"
-#include <signal.h>
-#include <fcntl.h>
-#include <X11/X.h>
-#include <X11/Intrinsic.h>
-#include <X11/IntrinsicP.h>
-#include <X11/CoreP.h>
-#include <X11/StringDefs.h>
-#include <Xm/XmStrDefs.h>
-#include <Xm/List.h>
-#include <setjmp.h>
-#include <string.h>
-#include <ctype.h>
-#include <Xm/Xm.h>
-#include <Xm/Protocols.h>
-#include "hash.h"
-#include "stdio.h"
-#define NO_AST
-#include "dtksh.h"
-#undef NO_AST
-#include "exksh.h"
-#include "xmksh.h"
-#include "dtkcmds.h"
-#include "xmcvt.h"
-#include "widget.h"
-#include "extra.h"
-#include "xmwidgets.h"
-#include "struct.h"
-#include "basetbl.h"
-#include "docall.h"
-#include "exksh_tbls.h"
-#include "msgs.h"
-
-const static char use[] = "0x%x";
-const static char use2[] = "%s=0x%x";
-
-static char structInited = 0;
-static void *Hashnams = NULL;
-
-static struct memtbl **Dynmem = NULL;
-static int Ndynmem = 0;
-static int Sdynmem = 0;
-
-struct structlist {
- char *prefix;
- int id;
- int size;
- struct memtbl **mem;
-};
-
-struct structlist *Structlist = NULL;
-int Nstructlist;
-
-
-
-static int freemem(
- struct memtbl *mem) ;
-static growmem( void ) ;
-static char * endtok(
- char *start) ;
-static int chg_structlist(
- struct memtbl **memptr,
- int id) ;
-static struct_init( void ) ;
-
-
-
-memtbl_t *
-ffind(
- memtbl_t *tbl,
- char *fld,
- char **pptr )
-{
- static memtbl_t tbluse[2];
- memtbl_t *tbl2;
- char *p, *q, op;
- unsigned int len, sub;
-
- if (!fld || !(*fld))
- return(tbl);
- tbl2 = tbluse;
- tbluse[0] = *tbl;
- tbluse[1] = Null_tbl;
- q = fld;
- while (tbl2 && q && *q) {
- p = q;
- if (*q == '[') {
- if (!tbl2->ptr)
- return(NULL);
- q++;
- xk_par_int(&q, &sub, NULL);
- if (*q != ']')
- return(NULL);
- *pptr = ((char **) (*pptr))[0];
- *pptr += sub * tbl2->size;
- q++;
- tbluse[0].ptr--;
- continue;
- }
- if ((len = strcspn(p, "[.")) < strlen(p)) {
- q = p + len;
- op = *q;
- *q = '\0';
- }
- else
- q = NULL;
- tbl2 = asl_find(NULL, tbluse, p, pptr);
- if (tbl2 && (tbl2 != tbluse)) {
- /* A field should not be a subfield of itself */
-
- tbluse[0] = *tbl2;
- tbl2 = tbluse;
- tbl2->name = ".";
- tbl2->offset = 0;
- }
- if (q) {
- if (op == '.')
- *q++ = op;
- else
- *q = op;
- }
- }
- return(tbl2);
-}
-
-static int
-freemem(
- struct memtbl *mem )
-{
- free(mem->name);
- /*
- int i;
-
- ** Because structures and typedefs now inherit fields (i.e. copy
- ** the memtbl entry) we must keep the fields of a structure
- ** around permanently, (unless we implement a reference count).
- ** Let's keep the code handy in case we do.
- if (mem->kind == K_STRUCT) {
- struct memtbl *fmem;
-
- fmem = Dynmem[mem->tbl];
- for (i = 0; fmem[i].name; i++) {
- free(fmem[i].name);
- if (fmem[i].tname)
- free(fmem[i].tname);
- }
- }
- */
- free(mem);
-}
-
-static
-growmem( void )
-{
- if (!(Dynmem = (struct memtbl **) realloc(Dynmem, (Sdynmem + 20) * sizeof(memtbl_t *))))
- return(SH_FAIL);
- chg_structlist(Dynmem, DYNMEM_ID);
- memset(((char *) Dynmem) + Sdynmem * sizeof(memtbl_t *), '\0', 20 * sizeof(memtbl_t *));
- Sdynmem += 20;
-}
-
-int
-do_struct(
- int argc,
- char **argv )
-{
- struct memtbl *mem, *fmem;
- int i, j, argstart, redo;
- char *name, *fname;
- char *p;
-
- if (!structInited)
- struct_init();
-
- if (argc > 1 && C_PAIR(argv[1], '-', 'R')) {
- redo = 0;
- argstart = 2;
- }
- else {
- argstart = 1;
- redo = 1;
- }
- if ((argstart + 1) >= argc)
- {
- XK_USAGE(argv[0]);
- }
- name = argv[argstart++];
- for (i = 0; i < Ndynmem; i++)
- if (!(Dynmem[i]->flags & F_FIELD) && (strcmp(name, Dynmem[i]->name) == 0))
- break;
- if ((i < Ndynmem) && !redo) {
- if (!redo)
- return(SH_SUCC);
- if (Sdynmem - Ndynmem < 1)
- growmem();
- }
- else if (Sdynmem - Ndynmem < 2)
- growmem();
- /*
- ** Number of memtbls needed: two for structure table and one for
- ** each field plus one for null termination. The number of
- ** fields is argc - 2.
- */
- if (!(mem = (struct memtbl *) malloc(2 * sizeof(struct memtbl))))
- return(SH_FAIL);
- if (!(fmem = (struct memtbl *) malloc((argc - 1) * sizeof(struct memtbl))))
- return(SH_FAIL);
- memset(mem, '\0', 2 * sizeof(struct memtbl));
- memset(fmem, '\0', (argc - 1) * sizeof(struct memtbl));
- if (i < Ndynmem) {
- mem->tbl = Ndynmem++;
- freemem(Dynmem[i]);
- xkhash_override(Hashnams, name, mem);
- }
- else {
- Ndynmem += 2;
- mem->tbl = i + 1;
- }
- Dynmem[i] = mem;
- Dynmem[mem->tbl] = fmem;
- mem->flags = F_TBL_IS_PTR;
- mem->id = DYNMEM_ID;
- mem->name = strdup(name);
- mem->kind = K_STRUCT;
- for (j = argstart; (j < argc) && argv[j]; j++) {
- if (p = strchr(argv[j], ':')) {
- fname = malloc(p - argv[j] + 1);
- strncpy(fname, argv[j], p - argv[j]);
- fname[p - argv[j]] = '\0';
- parse_decl(argv[0], fmem + j - argstart, p + 1, 0);
- }
- else {
- fname = strdup(argv[j]);
- fmem[j - argstart] = T_unsigned_long[0];
- }
- fmem[j - argstart].name = fname;
- fmem[j - argstart].flags |= F_FIELD;
- fmem[j - argstart].delim = 0;
- fmem[j - argstart].offset = mem->size;
- mem->size += (fmem[j - argstart].ptr) ? sizeof(void *) : fmem[j - argstart].size;
- }
- return(SH_SUCC);
-}
-
-int
-do_typedef(
- int argc,
- char **argv )
-{
- struct memtbl *mem;
- int i, redo;
- char *name, *decl;
-
- if (!structInited)
- struct_init();
-
- i = 1;
- if (argc > 1 && C_PAIR(argv[i], '-', 'R'))
- {
- redo = 0;
- i++;
- }
- else
- redo = 1;
-
- if ((i + 1) >= argc)
- {
- XK_USAGE(argv[0]);
- }
- decl = argv[i++];
- name = argv[i++];
-
- for (i = 0; i < Ndynmem; i++)
- if (!(Dynmem[i]->flags & F_FIELD) && (strcmp(name, Dynmem[i]->name) == 0))
- break;
- if ((i < Ndynmem) && !redo) {
- if (!redo)
- return(SH_SUCC);
- }
- else if (Sdynmem - Ndynmem < 1)
- growmem();
- if (!(mem = (struct memtbl *) malloc(2 * sizeof(struct memtbl))))
- return(SH_FAIL);
- mem[1] = Null_tbl;
- if (i < Ndynmem) {
- freemem(Dynmem[i]);
- xkhash_override(Hashnams, name, mem);
- }
- else
- Ndynmem++;
- Dynmem[i] = mem;
- parse_decl(argv[0], mem, decl, 0);
- mem->name = strdup(name);
- return(SH_SUCC);
-}
-
-static char *
-endtok(
- char *start )
-{
- while(*start && !isspace(*start))
- start++;
- return(start);
-}
-
-int
-parse_decl(
- char * argv0,
- struct memtbl *mem,
- char *decl,
- int tst )
-{
- struct memtbl *tbl;
- char *p, *end;
- char hold;
- int flag = 0, done;
- char * msg;
- char * errbuf;
- char * errmsg;
-
- end = decl;
- do {
- p = end;
- xk_skipwhite(&p);
- end = endtok(p);
- hold = *end;
- *end = '\0';
- done = ((strcmp(p, (const char *) "struct") != 0) &&
- (strcmp(p, (const char *) "const") != 0) &&
- (strcmp(p, (const char *) "unsigned") != 0) &&
- (strcmp(p, (const char *) "signed") != 0) &&
- (strcmp(p, (const char *) "union") != 0));
- *end = hold;
- } while (!done && hold);
- if (!p[0]) {
- if (tst) {
- return(FAIL);
- }
- errmsg = strdup(GetSharedMsg(DT_BAD_DECL));
- printerrf(argv0, errmsg,
- decl,NULL, NULL, NULL, NULL, NULL, NULL, NULL);
- free(errmsg);
- mem[0] = T_unsigned_long[0];
- return(SUCCESS);
- }
- hold = *end;
- *end = '\0';
- tbl = all_tbl_search(p, flag|NOHASH);
- *end = hold;
- if (!tbl) {
- if (tst) {
- return(FAIL);
- }
- errmsg = strdup(GetSharedMsg(DT_BAD_DECL));
- printerrf(argv0, errmsg,
- decl, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
- free(errmsg);
- mem[0] = T_unsigned_long[0];
- return(SUCCESS);
- }
- mem[0] = tbl[0];
- for (p = end; *p; p++) {
- switch(*p) {
- case '[':
- {
- char *q = strchr(p, ']');
-
- if (!q) {
- errmsg=strdup(GETMESSAGE(12,1,
- "Found a '[' character without a matching ']'"));
- printerr(argv0, errmsg, NULL);
- free(errmsg);
- continue;
- }
- p++;
- xk_par_int(&p, &(mem->subscr), NULL);
- mem->flags &= ~(F_SIMPLE);
- if (mem->subscr)
- mem->size *= mem->subscr;
- p = q;
- break;
- }
- case '*':
- if ((mem->kind == K_CHAR) && !(mem->ptr)) {
- char *name;
-
- name = mem->name;
- mem[0] = T_string_t[0];
- mem->name = name;
- }
- else {
- mem->ptr++;
- mem->flags &= ~(F_SIMPLE);
- }
- break;
- }
- }
- return(SUCCESS);
-}
-
-int
-do_structlist(
- int argc,
- char **argv )
-{
- int i, j, id = 0;
- char *prefix = NULL;
- struct memtbl **memptr = NULL;
- char * errmsg;
-
- for (i = 1; (i < argc) && argv[i]; i++) {
- if (argv[i][0] == '-') {
- for (j = 1; argv[i][j]; j++) {
- switch(argv[i][j]) {
- case 'i':
- if (argv[i][j + 1])
- fdef(argv[i] + j + 1, &id);
- else
- fdef(argv[++i], &id);
- j = strlen(argv[i]) - 1;
- break;
- case 'p':
- if (argv[i][j + 1])
- prefix = argv[i] + j + 1;
- else
- prefix = argv[++i];
- j = strlen(prefix) - 1;
- break;
- default:
- errmsg = strdup(GetSharedMsg(
- DT_UNKNOWN_OPTION));
- printerrf(argv[0], errmsg,
- argv[i], NULL, NULL, NULL, NULL,
- NULL, NULL, NULL);
- free(errmsg);
- xk_usage(argv[0]);
- return(SH_FAIL);
- }
- }
- }
- else {
- if ((memptr = (memtbl_t **) getaddr(argv[i])) == NULL)
- {
- errmsg=strdup(GETMESSAGE(12,2,
- "Unable to locate the following symbol: %s"));
- printerrf(argv[0], errmsg, argv[i],
- NULL, NULL, NULL, NULL, NULL, NULL,
- NULL);
- free(errmsg);
- return(SH_FAIL);
- }
- }
- }
-
- if (memptr == NULL)
- {
- XK_USAGE(argv[0]);
- }
-
- for (i = 0; i < Nstructlist; i++)
- {
- if ((Structlist[i].mem == memptr) &&
- (!prefix || (Structlist[i].prefix &&
- (strcmp(Structlist[i].prefix, prefix) == 0))) &&
- (!id || (Structlist[i].id == id)))
- {
- return(SH_SUCC);
- }
- }
-
- add_structlist(memptr, prefix, id);
-}
-
-static int
-chg_structlist(
- struct memtbl **memptr,
- int id )
-{
- int i;
-
- for (i = 0; i < Nstructlist; i++)
- if (Structlist[i].id == id) {
- Structlist[i].mem = memptr;
- return;
- }
-}
-
-int
-add_structlist(
- struct memtbl **memptr,
- char *prefix,
- int id )
-{
- int i;
-
- if (!Structlist)
- Structlist = (struct structlist *) malloc((Nstructlist + 1) * sizeof(struct structlist));
- else
- Structlist = (struct structlist *) realloc(Structlist, (Nstructlist + 1) * sizeof(struct structlist));
- if (!Structlist)
- return(SH_FAIL);
- Structlist[Nstructlist].mem = memptr;
- Structlist[Nstructlist].id = id;
- Structlist[Nstructlist].prefix = prefix ? strdup(prefix) : (char *)NULL;
- if (memptr[0] && memptr[0][0].name) {
- for (i = 1; memptr[i] && memptr[i][0].name && memptr[i][0].name[0]; i++)
- if (strcmp(memptr[i][0].name, memptr[i - 1][0].name) < 0)
- break;
- if (!(memptr[i] && memptr[i][0].name && memptr[i][0].name[0]))
- Structlist[Nstructlist].size = i - 1;
- else
- Structlist[Nstructlist].size = -1;
- }
- else
- Structlist[Nstructlist].size = 0;
- Nstructlist++;
- return(SH_SUCC);
-}
-
-int
-strparse(
- memtbl_t *tbl,
- char **pbuf,
- char *val )
-{
- char *p, *phold;
- int ret;
-
- if (!IS_SIMPLE(tbl) && !tbl->ptr && !(tbl->flags & F_TYPE_IS_PTR))
- tbl->ptr = 1;
- phold = p = strdup(val);
- ret = XK_PARSE(tbl, &p, (char *)pbuf, 0, 0, NULL, all_tbl_find);
- free(phold);
- return(ret != FAIL);
-}
-
-int
-strfree(
- char *buf,
- char *type )
-{
- memtbl_t tbl;
-
- if (parse_decl("strfree", &tbl, type, 1) == FAIL)
- return(SH_FAIL);
- if (!IS_SIMPLE(&tbl) && !tbl.ptr && !(tbl.flags & F_TYPE_IS_PTR))
- tbl.ptr = 1;
- if (XK_FREE(&tbl, (char *)&buf, 0, 0, all_tbl_find) == FAIL)
- return(SH_FAIL);
- return(SH_SUCC);
-}
-
-int
-do_sizeof(
- int argc,
- char **argv )
-{
- memtbl_t *tbl;
- char * errmsg;
-
- if (argc <= 1) {
- XK_USAGE(argv[0]);
- }
- if ((tbl = all_tbl_search(argv[1], 0)) == NULL) {
- errmsg=strdup(GETMESSAGE(12,3,
- "The following is not a valid data type or structure name: %s"));
- printerrf(argv[0], errmsg, argv[1], NULL, NULL,
- NULL, NULL, NULL, NULL, NULL);
- free(errmsg);
- return(SH_FAIL);
- }
- if (argc >= 3) {
- char buf[50];
-
- sprintf(buf, use2, argv[2], tbl->ptr ? sizeof(void *) : tbl->size);
- env_set(buf);
- }
- else {
- sprintf(xk_ret_buffer, use, tbl->ptr ? sizeof(void *) : tbl->size);
- xk_ret_buf = xk_ret_buffer;
- }
- return(SH_SUCC);
-}
-
-memtbl_t *
-all_tbl_find(
- char *name,
- int tbl,
- long id )
-{
- int i;
-
- if (tbl != -1) {
- for (i = 0; i < Nstructlist; i++)
- if (id == Structlist[i].id)
- return(Structlist[i].mem[tbl]);
- return(NULL);
- }
- return(all_tbl_search(name, TYPEONLY));
-}
-
-memtbl_t *
-all_tbl_search(
- char *name,
- int flag )
-{
- int i;
- void *found;
-
- if (!structInited)
- struct_init();
-
- if (found = (void *) xkhash_find(Hashnams, name))
- return((memtbl_t *) found);
- else {
- int j;
- memtbl_t **subtbl;
-
- for (i = 0; i < Nstructlist; i++) {
- if (subtbl = Structlist[i].mem)
- for (j = 0; subtbl[j]; j++)
- if (!(subtbl[j]->flags & F_FIELD) && (strcmp(name, subtbl[j]->name) == 0) && ((subtbl[j]->kind != K_TYPEDEF) || (subtbl[j]->tbl != -1))) {
- if (!(flag & NOHASH))
- xkhash_add(Hashnams, name, (char *)subtbl[j]);
- return(subtbl[j]);
- }
- }
- }
- return(NULL);
-}
-
-memtbl_t *
-asl_find(
- memtbl_t *ptbl,
- memtbl_t *tbls,
- char *fld,
- char **pptr )
-{
- int i;
- memtbl_t *tbl;
-
- if (!Structlist)
- return(NULL);
- if (!pptr && (ptbl == tbls))
- return(NULL);
- for (i = 0; tbls[i].name; i++) {
- if ((xk_Strncmp(tbls[i].name, fld, strlen(fld)) == 0) && (strlen(fld) == strlen(tbls[i].name))) {
- if (pptr && ptbl && ((ptbl->kind == K_STRUCT) || (ptbl->kind == K_ANY)))
- *pptr += tbls[i].offset;
- return(tbls + i);
- }
- }
- for (i = 0; tbls[i].name; i++) {
- if ((tbls[i].kind == K_TYPEDEF) || (tbls[i].kind == K_STRUCT) || (tbls[i].kind == K_UNION) || (tbls[i].kind == K_ANY)) {
- char *hold;
-
- if (!pptr) {
- if ((tbl = asl_find(tbls + i, all_tbl_find(tbls[i].tname, tbls[i].tbl, tbls[i].id), fld, pptr)) != NULL)
- return(tbl);
- continue;
- }
- hold = *pptr;
- if (tbls[i].ptr) {
- int nptr;
-
- nptr = tbls[i].ptr;
- /* if you hit a NULL, stop the loop */
- do {
- *pptr = *((char **) *pptr);
- } while (*pptr && --nptr);
- }
- if (*pptr) {
- if (!tbls[i].ptr)
- *pptr += tbls[i].offset;
- if ((tbl = asl_find(tbls + i, all_tbl_find(tbls[i].tname, tbls[i].tbl, tbls[i].id), fld, pptr)) != NULL)
- return(tbl);
- *pptr = hold;
- }
- }
- }
- return(NULL);
-}
-
-static
-struct_init( void )
-{
- char * errhdr;
- char * errmsg;
-
- structInited = 1;
- Hashnams = (void *) xkhash_init(50);
- if (!(Dynmem = (struct memtbl **) malloc(20 * sizeof(struct memtbl *))))
- {
- errhdr = strdup(GetSharedMsg(DT_ERROR));
- errmsg = strdup(GetSharedMsg(DT_ALLOC_FAILURE));
- printerr(errhdr, errmsg, NULL);
- free(errhdr);
- free(errmsg);
- exit(1);
- }
- Dynmem[0] = NULL;
- Sdynmem = 20;
- Ndynmem = 0;
- add_structlist(basemems, "base", BASE_ID);
- add_structlist(Dynmem, "dynamic", DYNMEM_ID);
-}
-
+++ /dev/null
-/*
- * CDE - Common Desktop Environment
- *
- * Copyright (c) 1993-2012, The Open Group. All rights reserved.
- *
- * These libraries and programs are free software; you can
- * redistribute them and/or modify them under the terms of the GNU
- * Lesser General Public License as published by the Free Software
- * Foundation; either version 2 of the License, or (at your option)
- * any later version.
- *
- * These libraries and programs are distributed in the hope that
- * they will be useful, but WITHOUT ANY WARRANTY; without even the
- * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- * PURPOSE. See the GNU Lesser General Public License for more
- * details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with these libraries and programs; if not, write
- * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
- * Floor, Boston, MA 02110-1301 USA
- */
-/* $XConsortium: struct.h /main/4 1995/11/01 15:56:45 rswiston $ */
-/************************************<+>*************************************
- ****************************************************************************
- **
- ** File: struct.h
- **
- ** Project: CDE
- **
- ** Description: Public include file for struct.c
- **
- **
- ** (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992
- ** by Hewlett-Packard Company
- **
- **
- **
- ****************************************************************************
- ************************************<+>*************************************/
-
-#ifndef _Dtksh_struct_h
-#define _Dtksh_struct_h
-
-#include "exksh.h"
-
-
-
-extern memtbl_t * ffind(
- memtbl_t *tbl,
- char *fld,
- char **pptr) ;
-extern int do_struct(
- int argc,
- char **argv) ;
-extern int do_typedef(
- int argc,
- char **argv) ;
-extern int parse_decl(
- char * argv0,
- struct memtbl *mem,
- char *decl,
- int tst) ;
-extern int do_structlist(
- int argc,
- char **argv) ;
-extern int add_structlist(
- struct memtbl **memptr,
- char *prefix,
- int id) ;
-extern int strparse(
- memtbl_t *tbl,
- char **pbuf,
- char *val) ;
-extern int strfree(
- char *buf,
- char *type) ;
-extern int do_sizeof(
- int argc,
- char **argv) ;
-extern memtbl_t * all_tbl_find(
- char *name,
- int tbl,
- long id) ;
-extern memtbl_t * all_tbl_search(
- char *name,
- int flag) ;
-extern memtbl_t * asl_find(
- memtbl_t *ptbl,
- memtbl_t *tbls,
- char *fld,
- char **pptr) ;
-
-
-
-#endif /* _Dtksh_struct_h */
-/* DON'T ADD ANYTHING AFTER THIS #endif */
+++ /dev/null
-/*
- * CDE - Common Desktop Environment
- *
- * Copyright (c) 1993-2012, The Open Group. All rights reserved.
- *
- * These libraries and programs are free software; you can
- * redistribute them and/or modify them under the terms of the GNU
- * Lesser General Public License as published by the Free Software
- * Foundation; either version 2 of the License, or (at your option)
- * any later version.
- *
- * These libraries and programs are distributed in the hope that
- * they will be useful, but WITHOUT ANY WARRANTY; without even the
- * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- * PURPOSE. See the GNU Lesser General Public License for more
- * details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with these libraries and programs; if not, write
- * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
- * Floor, Boston, MA 02110-1301 USA
- */
-/* $XConsortium: symbolic.c /main/4 1995/11/01 15:56:54 rswiston $ */
-/* Copyright (c) 1991, 1992 UNIX System Laboratories, Inc. */
-/* All Rights Reserved */
-
-/* THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF */
-/* UNIX System Laboratories, Inc. */
-/* The copyright notice above does not evidence any */
-/* actual or intended publication of such source code. */
-
-#include "name.h"
-#include "shell.h"
-#include "stdio.h"
-#include "exksh.h" /* which includes sys/types.h */
-#include "struct.h" /* which includes sys/types.h */
-#include <string.h>
-#include "msgs.h"
-
-struct symlist *Symlist = NULL;
-int Nsymlist;
-
-/*
-** There is an implicit dirty trick going on here. It is effective,
-** efficient and will work anywhere but it is tricky. A memtbl has
-** strings in it. The fact that a byte-by-byte comparison is being
-** done on a memtbl means that pointers are being compared. This
-** means that EVERY UNIQUE MEMTBL SHOULD HAVE SOME UNIQUE FIELD (i.e.
-** in this case, the string for the name field). If somebody uses
-** an algorithm in do_struct() that saves string space (by seeing if
-** the same string is lying around) this code will break and an ID
-** field will be necessary to maintain uniqueness.
-*/
-
-
-struct symlist *
-fsymbolic(
- struct memtbl *tbl )
-{
- int i;
-
- for (i = 0; i < Nsymlist; i++)
- if (memcmp(tbl, &Symlist[i].tbl, sizeof(struct memtbl)) == 0)
- return(Symlist + i);
- return(NULL);
-}
-
-int
-do_symbolic(
- int argc,
- char **argv )
-{
- int i, nsyms, isflag;
- unsigned long j;
- struct symarray syms[50];
- struct memtbl *tbl;
- char *p;
- char *type = NULL;
- char * errmsg;
-
- nsyms = 0;
- isflag = 0;
- for (i = 1; (i < argc) && argv[i]; i++) {
- if (argv[i][0] == '-') {
- for (j = 1; argv[i][j]; j++) {
- switch(argv[i][j]) {
- case 'm':
- isflag = 1;
- break;
- case 't':
- if (argv[i][j + 1])
- type = argv[i] + j + 1;
- else
- type = argv[++i];
- j = strlen(argv[i]) - 1;
- break;
- }
- }
- }
- else {
- syms[nsyms++].str = argv[i];
- if (nsyms == 50)
- break;
- }
- }
- if ((type == NULL) || (!nsyms)) {
- XK_USAGE(argv[0]);
- }
- if (p = strchr(type, '.')) {
- *p = '\0';
- if ((tbl = all_tbl_search(type, 0)) == NULL) {
- *p = '.';
- errmsg = strdup(GetSharedMsg(DT_UNDEF_TYPE));
- printerrf(argv[0], errmsg, type, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL);
- free(errmsg);
- return(SH_FAIL);
- }
- if ((tbl = ffind(tbl, p + 1, NULL)) == NULL) {
- errmsg=strdup(GETMESSAGE(13,1,
- "Unable to locate a field named '%s' for the type '%s'"));
- printerrf(argv[0], errmsg, p + 1, type, NULL,
- NULL, NULL, NULL, NULL, NULL);
- free(errmsg);
- *p = '.';
- return(SH_FAIL);
- }
- *p = '.';
- }
- else if ((tbl = all_tbl_search(type, 0)) == NULL) {
- errmsg = strdup(GetSharedMsg(DT_UNDEF_TYPE));
- printerrf(argv[0], errmsg, type, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL);
- free(errmsg);
- return(SH_FAIL);
- }
-
- for (i = 0; i < nsyms; i++) {
- if (!fdef(syms[i].str, &j)) {
- errmsg=strdup(GETMESSAGE(13,2,
- "The name '%s' has not been defined"));
- printerrf(argv[0], errmsg, syms[i].str,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL);
- free(errmsg);
- return(SH_FAIL);
- }
- syms[i].str = strdup(syms[i].str);
- syms[i].addr = j;
- }
- add_symbolic(isflag, tbl, syms, nsyms);
- return(SH_SUCC);
-}
-
-int
-add_symbolic(
- int isflag,
- struct memtbl *tbl,
- struct symarray *syms,
- int nsyms )
-{
- struct symlist *symptr;
-
- if ((symptr = fsymbolic(tbl)) == NULL) {
- if (!Symlist)
- Symlist = (struct symlist *) malloc((Nsymlist + 1) * sizeof(struct symlist));
- else
- Symlist = (struct symlist *) realloc(Symlist, (Nsymlist + 1) * sizeof(struct symlist));
- if (!Symlist)
- return(SH_FAIL);
- symptr = Symlist + Nsymlist;
- Nsymlist++;
- }
- else
- free(symptr->syms);
- symptr->tbl = *tbl;
- symptr->nsyms = nsyms;
- symptr->isflag = isflag;
- symptr->syms = (struct symarray *) malloc(nsyms * sizeof(struct symarray));
- memcpy(symptr->syms, syms, nsyms * sizeof(struct symarray));
-}
+++ /dev/null
-/*
- * CDE - Common Desktop Environment
- *
- * Copyright (c) 1993-2012, The Open Group. All rights reserved.
- *
- * These libraries and programs are free software; you can
- * redistribute them and/or modify them under the terms of the GNU
- * Lesser General Public License as published by the Free Software
- * Foundation; either version 2 of the License, or (at your option)
- * any later version.
- *
- * These libraries and programs are distributed in the hope that
- * they will be useful, but WITHOUT ANY WARRANTY; without even the
- * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- * PURPOSE. See the GNU Lesser General Public License for more
- * details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with these libraries and programs; if not, write
- * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
- * Floor, Boston, MA 02110-1301 USA
- */
-/* $XConsortium: symbolic.h /main/4 1995/11/01 15:57:03 rswiston $ */
-/************************************<+>*************************************
- ****************************************************************************
- **
- ** File: symbolic.h
- **
- ** Project: CDE
- **
- ** Description: Public include file for symbolic.c
- **
- **
- ** (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992
- ** by Hewlett-Packard Company
- **
- **
- **
- ****************************************************************************
- ************************************<+>*************************************/
-
-#ifndef _Dtksh_symbolic_h
-#define _Dtksh_symbolic_h
-
-
-
-extern struct symlist * fsymbolic(
- struct memtbl *tbl) ;
-extern int do_symbolic(
- int argc,
- char **argv) ;
-extern int add_symbolic(
- int isflag,
- struct memtbl *tbl,
- struct symarray *syms,
- int nsyms) ;
-
-
-
-#endif /* _Dtksh_symbolic_h */
-/* DON'T ADD ANYTHING AFTER THIS #endif */
+++ /dev/null
-/*
- * CDE - Common Desktop Environment
- *
- * Copyright (c) 1993-2012, The Open Group. All rights reserved.
- *
- * These libraries and programs are free software; you can
- * redistribute them and/or modify them under the terms of the GNU
- * Lesser General Public License as published by the Free Software
- * Foundation; either version 2 of the License, or (at your option)
- * any later version.
- *
- * These libraries and programs are distributed in the hope that
- * they will be useful, but WITHOUT ANY WARRANTY; without even the
- * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- * PURPOSE. See the GNU Lesser General Public License for more
- * details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with these libraries and programs; if not, write
- * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
- * Floor, Boston, MA 02110-1301 USA
- */
-/* $XConsortium: variables.c /main/3 1995/11/01 15:57:22 rswiston $ */
-/***************************************************************
-* *
-* AT&T - PROPRIETARY *
-* *
-* THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF *
-* AT&T BELL LABORATORIES *
-* AND IS NOT TO BE DISCLOSED OR USED EXCEPT IN *
-* ACCORDANCE WITH APPLICABLE AGREEMENTS *
-* *
-* Copyright (c) 1993 AT&T Bell Laboratories *
-* Unpublished & Not for Publication *
-* All Rights Reserved *
-* *
-* The copyright notice above does not evidence any *
-* actual or intended publication of such source code *
-* *
-* This software was created by the *
-* Advanced Software Technology Department *
-* AT&T Bell Laboratories *
-* *
-* For further information contact *
-* {ulysses,attmail}!dgk *
-* dgk@ulysses.att.com *
-* David Korn 908-582-7975 *
-* *
-***************************************************************/
-
-/* : : generated by proto : : */
-
-#line 1
-
-#if !defined(__PROTO__)
-#if defined(__STDC__) || defined(__cplusplus) || defined(_proto) || defined(c_plusplus)
-#if defined(__cplusplus)
-#define __MANGLE__ "C"
-#else
-#define __MANGLE__
-#endif
-#define __STDARG__
-#define __PROTO__(x) x
-#define __OTORP__(x)
-#define __PARAM__(n,o) n
-#if !defined(__STDC__) && !defined(__cplusplus)
-#if !defined(c_plusplus)
-#define const
-#endif
-#define signed
-#define void int
-#define volatile
-#define __V_ char
-#else
-#define __V_ void
-#endif
-#else
-#define __PROTO__(x) ()
-#define __OTORP__(x) x
-#define __PARAM__(n,o) o
-#define __MANGLE__
-#define __V_ char
-#define const
-#define signed
-#define void int
-#define volatile
-#endif
-#if defined(__cplusplus) || defined(c_plusplus)
-#define __VARARG__ ...
-#else
-#define __VARARG__
-#endif
-#define __VOID__ __V_
-#if defined(__STDARG__)
-#define __VA_START__(p,a) va_start(p,a)
-#else
-#define __VA_START__(p,a) va_start(p)
-#endif
-#endif
-
-#line 3
-#define mount _AST__mount
-#include <ast.h>
-#include "FEATURE/options"
-#include "FEATURE/dynamic"
-#include <shell.h>
-#include "shtable.h"
-#include "name.h"
-#include "exextra.h"
-#include "docall.h"
-#include "msgs.h"
-
-
-/*
- * This is the list of built-in shell variables and default values
- * and default attributes.
- */
-
-const struct shtable2 shtab_variables[] =
-{
- "PATH", 0, (char*)0,
- "PS1", 0, (char*)0,
- "PS2", NV_NOFREE, "> ",
- "IFS", NV_NOFREE, " \t\n",
- "PWD", 0, (char*)0,
- "HOME", 0, (char*)0,
- "MAIL", 0, (char*)0,
- "REPLY", 0, (char*)0,
- "SHELL", NV_NOFREE, "/bin/sh",
- "EDITOR", 0, (char*)0,
- "MAILCHECK", NV_NOFREE|NV_INTEGER, (char*)0,
- "RANDOM", NV_NOFREE|NV_INTEGER, (char*)0,
- "ENV", 0, (char*)0,
- "HISTFILE", 0, (char*)0,
- "HISTSIZE", 0, (char*)0,
- "HISTEDIT", NV_NOFREE, (char*)0,
- "HISTCMD", NV_NOFREE|NV_INTEGER, (char*)0,
- "FCEDIT", NV_NOFREE, "/bin/ed",
- "CDPATH", 0, (char*)0,
- "MAILPATH", 0, (char*)0,
- "PS3", NV_NOFREE, "#? ",
- "OLDPWD", 0, (char*)0,
- "VISUAL", 0, (char*)0,
- "COLUMNS", 0, (char*)0,
- "LINES", 0, (char*)0,
- "PPID", NV_NOFREE|NV_INTEGER, (char*)0,
- "_", NV_EXPORT, (char*)0,
- "TMOUT", NV_NOFREE|NV_INTEGER, (char*)0,
- "SECONDS", NV_NOFREE|NV_INTEGER|NV_DOUBLE, (char*)0,
- "LINENO", NV_NOFREE|NV_INTEGER, (char*)0,
- "OPTARG", 0, (char*)0,
- "OPTIND", NV_NOFREE|NV_INTEGER, (char*)0,
- "PS4", 0, (char*)0,
- "FPATH", 0, (char*)0,
- "LANG", 0, (char*)0,
- "LC_CTYPE", 0, (char*)0,
- "FIGNORE", 0, (char*)0,
- ".sh", 0, (char*)0,
- ".sh.edchar", 0, (char*)0,
- ".sh.edcol", 0, (char*)0,
- ".sh.edtext", 0, (char*)0,
- ".sh.edmode", 0, (char*)0,
- ".sh.name", 0, (char*)0,
- ".sh.subscript",0, (char*)0,
- ".sh.value", 0, (char*)0,
- ".sh.version", NV_NOFREE, (char*)(&e_version[5]),
-#ifdef SHOPT_FS_3D
- "VPATH", 0, (char*)0,
-#endif /* SHOPT_FS_3D */
-#ifdef SHOPT_VPIX
- "DOSPATH", 0, (char*)0,
- "VPIXDIR", 0, (char*)0,
-#endif /* SHOPT_VPIX */
-#ifdef MULTIBYTE
- "CSWIDTH", 0, (char*)0,
-#endif /* MULTIBYTE */
-EXKSH_EXTRA_VAR
- "", 0, (char*)0
-};
-
+++ /dev/null
-if [ "$_HOLDENV_" ]
-then
- ENV=$_HOLDENV_
- . $ENV
-else
- unset ENV
-fi
-unset _HOLDENV_
-if [ ! "$DTKSHPS1" ]
-then DTKSHPS1="[DTKSH] $PS1" export DTKSHPS1
-fi
-PS1="$DTKSHPS1"
-call dtk_libinit
+++ /dev/null
-/*
- * CDE - Common Desktop Environment
- *
- * Copyright (c) 1993-2012, The Open Group. All rights reserved.
- *
- * These libraries and programs are free software; you can
- * redistribute them and/or modify them under the terms of the GNU
- * Lesser General Public License as published by the Free Software
- * Foundation; either version 2 of the License, or (at your option)
- * any later version.
- *
- * These libraries and programs are distributed in the hope that
- * they will be useful, but WITHOUT ANY WARRANTY; without even the
- * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- * PURPOSE. See the GNU Lesser General Public License for more
- * details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with these libraries and programs; if not, write
- * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
- * Floor, Boston, MA 02110-1301 USA
- */
-/* $XConsortium: xmname.c /main/3 1995/11/01 15:59:34 rswiston $ */
-
-/* Copyright (c) 1991, 1992 UNIX System Laboratories, Inc. */
-/* All Rights Reserved */
-
-/* THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF */
-/* UNIX System Laboratories, Inc. */
-/* The copyright notice above does not evidence any */
-/* actual or intended publication of such source code. */
-
-#define mount _AST_mount
-#include <ast.h>
-#include <signal.h>
-#include "shtable.h"
-#include "name.h"
-#ifdef KSHELL
-# include "builtins.h"
-# include "jobs.h"
-# include "FEATURE/cmds"
-#if defined(__STDC__) || defined(__STDPP__)
-# define bltin(x) (b_##x)
-#else
-# define bltin(x) (b_/**/x)
-#endif
-
-#else
-# define bltin(x) 0
-#endif
-
-#include <X11/X.h>
-#include <X11/Intrinsic.h>
-#include <X11/IntrinsicP.h>
-#define NO_AST
-#include "dtksh.h"
-#undef NO_AST
-#include "dtextra.h"
-#include "xmextra.h"
-#include "msgs.h"
-
-#define VALPTR(x) ((char*)x)
-
-const struct shtable3 dtk_functions[] = {
- DTK_EXTRA_TABLE
- DTK_EXTRA_TABLE2
- DTK_TK_EXTRA_TABLE
- DTK_TK_LIST_TABLE
- DTK_TK_TEXT_TABLE
- { NULL, 0, NULL }
-};
-
-const struct shtable2 dtk_aliases[] = {
- DTK_EXTRA_ALIAS
- DTK_TK_EXTRA_ALIAS
- { NULL, 0, NULL }
-};