1
0
Fork 0
mirror of git://git.code.sf.net/p/cdesktopenv/code synced 2025-02-24 23:14:14 +00:00
cde/src/cmd/ksh93/include/builtins.h
Martijn Dekker 1fbbeaa19d Convert default typeset aliases to regular builtins
This converts the 'autoload', 'compound', 'float', 'functions',
'integer' and 'nameref' default aliases into regular built-in
commands, so that 'unalias -a' does not remove them. Shell
functions can now use these names, which improves compatibility
with POSIX shell scripts.

src/cmd/ksh93/data/aliases.c:
- Remove default typeset aliases.

src/cmd/ksh93/data/builtins.c,
src/cmd/ksh93/include/builtins.h:
- Add corresponding built-in command declarations. Typeset-style
  commands are now defined by a pointer range, SYSTYPESET ..
  SYSTYPESET_END. A couple need their own IDs (SYSCOMPOUND,
  SYSNAMEREF) for special-casing in sh/xec.c.
- Update 'typeset --man'.

src/cmd/ksh93/bltins/typeset.c: b_typeset():
- Recognise the new builtin commands by argv[0]. Implement them by
  inserting the corresponding 'typeset' options into the argument
  list before parsing options. This may seem like a bit of a hack,
  but it is simpler, shorter, more future-proof and less
  error-prone than manually copying and adapting all the complex
  flaggery from the option parsing loop.

src/cmd/ksh93/sh/parse.c,
src/cmd/ksh93/sh/xec.c:
- Recognise typeset-style commands by SYSTYPESET .. SYSTYPESET_END
  pointer range.
- Special-case 'compound' (SYSCOMPOUND) and 'nameref' (SYSNAMEREF)
  along with recognising the corresponding 'typeset' options.

src/cmd/ksh93/sh.1:
- Update to document the new built-ins.
- Since not all declaration commands are special built-ins now,
  identify declaration commands using a double-dagger "\(dd"
  character (which renders as '=' in ASCII) and disassociate their
  definition from that of special built-ins.

src/cmd/ksh93/tests/variables.sh:
- Adapt a regression test as there is no more 'integer' alias.
2020-07-15 20:54:06 +01:00

218 lines
7.8 KiB
C

/***********************************************************************
* *
* This software is part of the ast package *
* Copyright (c) 1982-2012 AT&T Intellectual Property *
* and is licensed under the *
* Eclipse Public License, Version 1.0 *
* by AT&T Intellectual Property *
* *
* A copy of the License is available at *
* http://www.eclipse.org/org/documents/epl-v10.html *
* (with md5 checksum b35adb5213ca9657e911e9befb180842) *
* *
* Information and Software Systems Research *
* AT&T Research *
* Florham Park NJ *
* *
* David Korn <dgk@research.att.com> *
* *
***********************************************************************/
#pragma prototyped
#ifndef SYSDECLARE
#include <option.h>
#include "FEATURE/options"
#include "FEATURE/dynamic"
#include "shtable.h"
/*
* IDs for the parser (parse.c) and parse tree executer (xec.c)
* to implement special handling for the corresponding builtins.
* IMPORTANT: The offsets on these macros must be synchronous
* with the order of shtab_builtins[] in data/builtins.c!
*/
#define SYSEXEC (shgd->bltin_cmds) /* exec */
#define SYSREDIR (shgd->bltin_cmds+1) /* redirect */
#define SYSSET (shgd->bltin_cmds+2) /* set */
/* : */
#define SYSTRUE (shgd->bltin_cmds+4) /* true */
#define SYSCOMMAND (shgd->bltin_cmds+5) /* command */
#define SYSCD (shgd->bltin_cmds+6) /* cd */
#define SYSBREAK (shgd->bltin_cmds+7) /* break */
#define SYSCONT (shgd->bltin_cmds+8) /* continue */
#define SYSTYPESET (shgd->bltin_cmds+9) /* typeset \ */
/* autoload | */
#define SYSCOMPOUND (shgd->bltin_cmds+11) /* compound | */
/* float >typeset range */
/* functions | */
/* integer | */
#define SYSNAMEREF (shgd->bltin_cmds+15) /* nameref | */
#define SYSTYPESET_END (shgd->bltin_cmds+15) /* / */
#define SYSTEST (shgd->bltin_cmds+16) /* test */
#define SYSBRACKET (shgd->bltin_cmds+17) /* [ */
#define SYSLET (shgd->bltin_cmds+18) /* let */
#define SYSEXPORT (shgd->bltin_cmds+19) /* export */
#define SYSDOT (shgd->bltin_cmds+20) /* . */
#define SYSSOURCE (shgd->bltin_cmds+21) /* source */
#define SYSRETURN (shgd->bltin_cmds+22) /* return */
#if SHOPT_BASH
# define SYSLOCAL (shgd->bltin_cmds+23) /* local */
#else
# define SYSLOCAL 0
#endif
/* entry point for shell special builtins */
#if _BLD_shell && defined(__EXPORT__)
# define extern __EXPORT__
#endif
extern int b_alias(int, char*[],Shbltin_t*);
extern int b_break(int, char*[],Shbltin_t*);
extern int b_dot_cmd(int, char*[],Shbltin_t*);
extern int b_enum(int, char*[],Shbltin_t*);
extern int b_exec(int, char*[],Shbltin_t*);
extern int b_eval(int, char*[],Shbltin_t*);
extern int b_return(int, char*[],Shbltin_t*);
extern int B_login(int, char*[],Shbltin_t*);
extern int b_true(int, char*[],Shbltin_t*);
extern int b_false(int, char*[],Shbltin_t*);
extern int b_readonly(int, char*[],Shbltin_t*);
extern int b_set(int, char*[],Shbltin_t*);
extern int b_shift(int, char*[],Shbltin_t*);
extern int b_trap(int, char*[],Shbltin_t*);
extern int b_typeset(int, char*[],Shbltin_t*);
extern int b_unset(int, char*[],Shbltin_t*);
extern int b_unalias(int, char*[],Shbltin_t*);
/* The following are for job control */
#if defined(SIGCLD) || defined(SIGCHLD)
extern int b_jobs(int, char*[],Shbltin_t*);
extern int b_kill(int, char*[],Shbltin_t*);
# ifdef SIGTSTP
extern int b_bg(int, char*[],Shbltin_t*);
# endif /* SIGTSTP */
# ifdef SIGSTOP
extern int b_suspend(int, char*[],Shbltin_t*);
# endif /* SIGSTOP */
#endif
/* The following utilities are built-in because of side-effects */
extern int b_builtin(int, char*[],Shbltin_t*);
extern int b_cd(int, char*[],Shbltin_t*);
extern int b_command(int, char*[],Shbltin_t*);
extern int b_getopts(int, char*[],Shbltin_t*);
extern int b_hist(int, char*[],Shbltin_t*);
extern int b_let(int, char*[],Shbltin_t*);
extern int b_read(int, char*[],Shbltin_t*);
extern int b_ulimit(int, char*[],Shbltin_t*);
extern int b_umask(int, char*[],Shbltin_t*);
#ifdef _cmd_universe
extern int b_universe(int, char*[],Shbltin_t*);
#endif /* _cmd_universe */
extern int b_wait(int, char*[],Shbltin_t*);
extern int b_whence(int, char*[],Shbltin_t*);
extern int b_alarm(int, char*[],Shbltin_t*);
extern int b_print(int, char*[],Shbltin_t*);
extern int b_printf(int, char*[],Shbltin_t*);
extern int b_pwd(int, char*[],Shbltin_t*);
extern int b_sleep(int, char*[],Shbltin_t*);
extern int b_test(int, char*[],Shbltin_t*);
extern int b_times(int, char*[],Shbltin_t*);
#if !SHOPT_ECHOPRINT
extern int B_echo(int, char*[],Shbltin_t*);
#endif /* SHOPT_ECHOPRINT */
#undef extern
extern const char e_alrm1[];
extern const char e_alrm2[];
extern const char e_badfun[];
extern const char e_baddisc[];
extern const char e_nofork[];
extern const char e_nosignal[];
extern const char e_nolabels[];
extern const char e_notimp[];
extern const char e_nosupport[];
extern const char e_badbase[];
extern const char e_overlimit[];
extern const char e_eneedsarg[];
extern const char e_oneoperand[];
extern const char e_toomanyops[];
extern const char e_toodeep[];
extern const char e_badname[];
extern const char e_badsyntax[];
#ifdef _cmd_universe
extern const char e_nouniverse[];
#endif /* _cmd_universe */
extern const char e_histopen[];
extern const char e_condition[];
extern const char e_badrange[];
extern const char e_trap[];
extern const char e_direct[];
extern const char e_defedit[];
extern const char e_cneedsarg[];
extern const char e_defined[];
/* for option parsing */
extern const char sh_set[];
extern const char sh_optalarm[];
extern const char sh_optalias[];
extern const char sh_optbreak[];
extern const char sh_optbuiltin[];
extern const char sh_optcd[];
extern const char sh_optcommand[];
extern const char sh_optcont[];
extern const char sh_optdot[];
#ifndef ECHOPRINT
extern const char sh_optecho[];
#endif /* !ECHOPRINT */
extern const char sh_opteval[];
extern const char sh_optexec[];
extern const char sh_optredirect[];
extern const char sh_optexit[];
extern const char sh_optexport[];
extern const char sh_optgetopts[];
extern const char sh_optbg[];
extern const char sh_optdisown[];
extern const char sh_optfg[];
extern const char sh_opthash[];
extern const char sh_opthist[];
extern const char sh_optjobs[];
extern const char sh_optkill[];
#if defined(JOBS) && defined(SIGSTOP)
extern const char sh_optstop[];
extern const char sh_optsuspend[];
#endif /* defined(JOBS) && defined(SIGSTOP) */
extern const char sh_optksh[];
extern const char sh_optlet[];
extern const char sh_optprint[];
extern const char sh_optprintf[];
extern const char sh_optpwd[];
extern const char sh_optread[];
extern const char sh_optreadonly[];
extern const char sh_optreturn[];
extern const char sh_optset[];
extern const char sh_optshift[];
extern const char sh_optsleep[];
extern const char sh_opttrap[];
extern const char sh_opttypeset[];
extern const char sh_optulimit[];
extern const char sh_optumask[];
extern const char sh_optunalias[];
extern const char sh_optwait[];
#ifdef _cmd_universe
extern const char sh_optuniverse[];
#endif /* _cmd_universe */
extern const char sh_optunset[];
extern const char sh_optwhence[];
#endif /* SYSDECLARE */
extern const char sh_opttimes[];
extern const char e_dict[];