1
0
Fork 0
mirror of git://git.code.sf.net/p/cdesktopenv/code synced 2025-03-09 15:50:02 +00:00
cde/src/cmd/ksh93/include/shnodes.h
Martijn Dekker a1f5c99204 INIT: remove proto, ratz (re: 46593a89, 6137b99a); major cleanup
This takes another step towards cleaning up the build system. We
now do not even pretend to be theoretically compatible with
pre-1989 K&R C compilers or with C++ compilers. In practice, this
had already been broken for many years due to bit rot.

Commit 46593a89 already removed the license handling enormity that
depended on proto, so now we can cleanly remove it altogether. But
we do need to leave some backwards compatibility stubs to keep the
build system compatible with older AST code; it should remain
possible to build older ksh versions with the current build system
(the bin/ and src/cmd/INIT/ directories) for testing purposes.

So as of now there is no more __MANGLE__d rubbish in your generated
header files. This is only about a quarter of a century overdue...

This commit also includes a huge amount of code cleanup to remove
thousands of unused K&R C fallbacks and other cruft, particularly
in libast. This code base should now be a little easier to
understand for people who are familiar with a modern(ish) C
standard.

ratz is now also removed; this was a standalone and simplified 2005
version of gunzip. As of 6137b99a, none of our code uses it, even
theoretically. And the real g(un)zip is now everywhere.

src/cmd/INIT/proto.c, src/cmd/INIT/ratz.c:
- Removed.

COPYRIGHT:
- Remove zlib license; this only applied to ratz.

bin/package, src/cmd/INIT/package.sh:
- Related cleanups.
- Unset LC_ALL before invoking a new shell, respecting the user's
  locale again and avoiding multibyte character corruption on the
  command line.

src/cmd/INIT/proto.sh:
- Add stub for backwards compatibility with Mamfiles that depend on
  proto. It does nothing but pass input without modification and is
  now installed as the new arch/*/bin/proto by src/cmd/INIT/Mamfile.

src/cmd/INIT/iffe.sh:
- Ignore the proto-related -e (--package) and -p (--prototyped)
  options; keep parsing them for backwards compatibility.
- Trim the macros passed to every test to their standard C
  versions, removing K&R C and C++ versions. These are now
  considered to be for backwards compatibility only.

src/cmd/INIT/iffe.tst:
- Remove proto(1) mangling code.
  By the way, iffe can be regression-tested as follows:
        $ bin/package use   # set up environment in a child shell
        $ regress src/cmd/INIT/iffe.tst
        $ exit              # leave package environment

src/cmd/INIT/make.probe, src/cmd/INIT/probe.win32:
- Remove code to handle C++.

src/lib/libast/features/common:
- As in iffe.sh above, trim macros designed for compatibility with
  C++ and ancient C compilers to their standard C versions and
  comment that they are for backwards compatibility with AST code.
  This is needed to keep all the old ast and ksh code compiling.

src/cmd/ksh93/sh/init.c,
src/cmd/ksh93/sh/name.c:
- Clarify libshell ABI compatibility function versions of macros.
  A "proto workaround" comment in the original code mislead me into
  thinking this had something to do with the removed proto(1), but
  it's unrelated. Call the workaround macro BYPASS_MACRO instead.

src/cmd/ksh93/include/defs.h:
- sh_sigcheck() macro: allow &sh as an argument: parenthesise shp.

src/cmd/ksh93/sh/nvtype.c:
- Remove unused nv_mkstruct() function. (re: d0a5cab1)

**/features/*:
- Remove obsolete iffe 'set prototyped' option.

**/Mamfile:
- Remove all references to the ast/prototyped.h header.
- Remove all use of the proto command. Simply copy instead.

*** 850-ish source files: ***
- Remove all '#pragma prototyped' directives.
- Remove all C++ compat code conditional upon defined(__cplusplus).
- Remove all use of the _ARG_ macro, which on standard C expands to
  its argument:
        #define _ARG_(x)        x
  (on K&R C, it expanded to nothing)
- Remove all use of _BEGIN_EXTERNS_ and _END_EXTERNS_ macros (empty
  on standard C; this was for C++ compatibility)
- Reduce all #if __STD_C (standard code) #else (K&R code) #endif
  blocks to the standard code only, without use of the macro.
- Same for _STD_ macro which seems to have had the same function.
- Change all instances of 'Void_t' to standard 'void'.
2021-12-24 07:05:22 +00:00

221 lines
5.6 KiB
C

/***********************************************************************
* *
* This software is part of the ast package *
* Copyright (c) 1982-2012 AT&T Intellectual Property *
* Copyright (c) 2020-2021 Contributors to ksh 93u+m *
* 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> *
* *
***********************************************************************/
#ifndef _SHNODES_H
#define _SHNODES_H 1
/*
* UNIX shell
* Written by David Korn
*
*/
#include <ast.h>
#include "argnod.h"
/* command tree for tretyp */
#define FINT (02<<COMBITS) /* non-interruptible */
#define FAMP (04<<COMBITS) /* background */
#define FPIN (010<<COMBITS) /* input is a pipe */
#define FPOU (040<<COMBITS) /* output is a pipe */
#define FPCL (0100<<COMBITS) /* close the pipe */
#define FCOOP (0200<<COMBITS) /* cooperating process */
#define FSHOWME (0400<<COMBITS) /* set for showme commands */
#define FALTPIPE (02000<<COMBITS) /* alternate pipes &| */
#define FPOSIX (02<<COMBITS) /* POSIX semantics function */
#define FLINENO (04<<COMBITS) /* for/case has line number */
#define FOPTGET (0200<<COMBITS) /* function calls getopts */
#define TNEGATE (01<<COMBITS) /* ! inside [[ ... ]] */
#define TBINARY (02<<COMBITS) /* binary operator in [[ ... ]] */
#define TUNARY (04<<COMBITS) /* unary operator in [[ ... ]] */
#define TTEST (010<<COMBITS)
#define TPAREN (TBINARY|TUNARY)
#define TSHIFT (COMBITS+4)
#define TNSPACE (TFUN|COMSCAN)
#define TCOM 0
#define TPAR 1
#define TFIL 2
#define TLST 3
#define TIF 4
#define TWH 5
#define TUN (TWH|COMSCAN)
#define TTST 6
#define TSW 7
#define TAND 8
#define TORF 9
#define TFORK 10
#define TFOR 11
#define TSELECT (TFOR|COMSCAN)
#define TARITH 12
#define TTIME 13
#define TSETIO 14
#define TFUN 15
/* this node is a proforma for those that follow */
struct trenod
{
int tretyp;
struct ionod *treio;
};
struct forknod
{
int forktyp;
struct ionod *forkio;
Shnode_t *forktre;
int forkline;
};
struct ifnod
{
int iftyp;
Shnode_t *iftre;
Shnode_t *thtre;
Shnode_t *eltre;
};
struct whnod
{
int whtyp;
Shnode_t *whtre;
Shnode_t *dotre;
struct arithnod *whinc;
};
struct fornod
{
int fortyp;
char *fornam;
Shnode_t *fortre;
struct comnod *forlst;
int forline;
};
struct swnod
{
int swtyp;
struct argnod *swarg;
struct regnod *swlst;
struct ionod *swio;
int swline;
};
struct regnod
{
struct argnod *regptr;
Shnode_t *regcom;
struct regnod *regnxt;
char regflag;
};
struct parnod
{
int partyp;
Shnode_t *partre;
};
struct lstnod
{
int lsttyp;
Shnode_t *lstlef;
Shnode_t *lstrit;
};
/* tst is same as lst, but with extra field for line number */
struct tstnod
{
struct lstnod tstlst;
int tstline;
};
struct functnod
{
int functtyp;
char *functnam;
Shnode_t *functtre;
int functline;
off_t functloc;
struct slnod *functstak;
struct comnod *functargs;
};
struct arithnod
{
int artyp;
int arline;
struct argnod *arexpr;
void *arcomp;
};
/* types of ionodes stored in iofile */
#define IOUFD 0x3f /* file descriptor number mask */
#define IOPUT 0x40 /* > redirection operator */
#define IOAPP 0x80 /* >> redirection operator */
#define IODOC 0x100 /* << redirection operator */
#define IOMOV 0x200 /* <& or >& operators */
#define IOCLOB 0x400 /* noclobber bit */
#define IORDW 0x800 /* <> redirection operator */
#define IORAW 0x1000 /* no expansion needed for filename */
#define IOSTRG 0x2000 /* here-document stored as incore string */
#define IOSTRIP 0x4000 /* strip leading tabs for here-document */
#define IOQUOTE 0x8000 /* here-document delimiter was quoted */
#define IOVNM 0x10000 /* iovname field is non-zero */
#define IOLSEEK 0x20000 /* seek operators <# or ># */
#define IOARITH 0x40000 /* arithmetic seek <# ((expr)) */
#define IOREWRITE 0x80000 /* arithmetic seek <# ((expr)) */
#define IOCOPY IOCLOB /* copy skipped lines onto standard output */
#define IOPROCSUB IOARITH /* process substitution redirection */
union Shnode_u
{
struct argnod arg;
struct ionod io;
struct whnod wh;
struct swnod sw;
struct ifnod if_;
struct dolnod dol;
struct comnod com;
struct trenod tre;
struct forknod fork;
struct fornod for_;
struct regnod reg;
struct parnod par;
struct lstnod lst;
struct tstnod tst;
struct functnod funct;
struct arithnod ar;
};
extern void sh_freeup(Shell_t*);
extern void sh_funstaks(struct slnod*,int);
extern Sfio_t *sh_subshell(Shell_t*,Shnode_t*, volatile int, int);
#if defined(__EXPORT__) && defined(_BLD_DLL)
__EXPORT__
#endif
extern int sh_tdump(Sfio_t*, const Shnode_t*);
extern Shnode_t *sh_trestore(Shell_t*, Sfio_t*);
#endif /* _SHNODES_H */