# Copyright (c) 1991 The Regents of the University of California.
# This code is derived from software contributed to Berkeley by
# %sccs.include.redist.sh%
# @(#)nodetypes 5.1 (Berkeley) %G%
# This file describes the nodes used in parse trees. Unindented lines
# contain a node type followed by a structure tag. Subsequent indented
# lines specify the fields of the structure. Several node types can share
# the same structure, in which case the fields of the structure should be
# A field of a structure is described by the name of the field followed
# by a type. The currently implemented types are:
# nodeptr - a pointer to a node
# nodelist - a pointer to a list of nodes
# string - a pointer to a nul terminated string
# other - any type that can be copied by assignment
# temp - a field that doesn't have to be copied when the node is copied
# The last two types should be followed by the text of a C declaration for
NSEMI nbinary
# two commands separated by a semicolon
ch1 nodeptr
# the first child
ch2 nodeptr
# the second child
NCMD ncmd
# a simple command
backgnd int
# set to run command in background
args nodeptr
# the arguments
redirect nodeptr
# list of file redirections
backgnd int
# set to run pipeline in background
cmdlist nodelist
# the commands in the pipeline
NREDIR nredir
# redirection (of a compex command)
redirect nodeptr
# list of file redirections
NBACKGND nredir
# run command in background
NSUBSHELL nredir
# run command in a subshell
NAND nbinary
# the && operator
NOR nbinary
# the || operator
NIF nif
# the if statement. Elif clauses are handled
type int
# using multiple if nodes.
ifpart nodeptr
# then ifpart
elsepart nodeptr
# else elsepart
NWHILE nbinary
# the while statement. First child is the test
NUNTIL nbinary
# the until statement
NFOR nfor
# the for statement
args nodeptr
# for var in args
body nodeptr
# do body; done
var string
# the for variable
NCASE ncase
# a case statement
expr nodeptr
# the word to switch on
cases nodeptr
# the list of cases (NCLIST nodes)
next nodeptr
# the next case in list
pattern nodeptr
# list of patterns for this case
body nodeptr
# code to execute for this case
NDEFUN narg
# define a function. The "next" field contains
# the body of the function.
NARG narg
# represents a word
next nodeptr
# next word in list
text string
# the text of the word
backquote nodelist
# list of commands in back quotes
NAPPEND nfile
# fd>> fname
next nodeptr
# next redirection in list
fd int
# file descriptor being redirected
fname nodeptr
# file name, in a NARG node
expfname temp char
*expfname
# actual file name
next nodeptr
# next redirection in list
fd int
# file descriptor being redirected
dupfd int
# file descriptor to duplicate
next nodeptr
# next redirection in list
fd int
# file descriptor being redirected
doc nodeptr
# input to command (NARG node)