xref: /titanic_41/usr/src/lib/libshell/common/DESIGN (revision 7c2fbfb345896881c631598ee3852ce9ce33fb07)
1Here is an overview of the source code organization for ksh93.
2
3Directory layout:
4
5	The directory include contains header files for ksh93.
6	The files nval.h and shell.h are intended to be public
7	headers and can be used to add runtime builtin command.
8	The remainder are private.
9
10	The directory data contains readonly data files for ksh93.
11	The man pages for built-ins are in builtins.c rather
12	than included as statics with the implementations in the
13	bltins directory because some systems don't make static const
14	data readonly and we want these to be shared by all running
15	shells.
16
17	The directory edit contains the code for command line
18	editing and history.
19
20	The fun directory contains some shell function such as
21	pushd, popd, and dirs.
22
23	The directory features contains files that are used to generate
24	header files in the FEATURE directory.  Most of these files
25	are in a format that is processed by iffe.
26
27	The directory bltins contains code for most of the built-in
28	commands.  Additional built-in commands are part of libcmd.
29
30	The directory sh contains most of the code for ksh93.
31
32	The directory tests contains a number of regression tests.
33	In most cases, when a bug gets fixed, a test is added to
34	one of these files.  The regression tests can be run by
35	going to this directory and running
36		SHELL=shell_path shell_path shtests
37	where shell_path is an absolute pathname for the shell to
38	be tested.
39
40	The top level directory contains the nmake Makefile, a README,
41	and several documentation files.  The RELEASE file contains
42	the list of bug fixes and new features since the original
43	ksh93 release.  The file COMPATIBILITY is a list of all
44	known incompatibilities with ksh88.
45
46	The  bash_pre_rc.sh is a startup script used when emulating
47	bash if the shell is compiled with SHOPT_BASH and the shell
48	is invoked as bash.  The bash emulation is not complete.
49
50Include directory:
51	1.	argnod.h contains the type definitions for command
52		nodes, io nodes, argument nodes, and for positional
53		parameters.a  It defines the prototypes for
54		all the positional parameters functions.
55	2.	builtins.h contains prototypes for builtins as well
56		as symbolic constants that refer to the name-pairs
57		that are associated with some of the built-ins.
58		It also contains prototypes for many of the strings.
59	3.	defs.h is the catch all for all definitions that
60		don't fit elsewhere and it includes several other
61		headers.  It defines a strucuture that contains ksh
62		global data, sh, and a structure that contains per
63		function data, sh.st.
64	4.	edit.h contains definitions that are common to both
65		vi and emacs edit modes.
66	5.	env.h contains interfaces for creating and modifying
67		environment variables.
68	6.	fault.h contains prototypes for signal related
69		functions and trap and fault handling.
70	7.	fcin.h contains macro and function definitions for
71		reading from a file or string.
72	8.	history.h contains macros and functions definitions
73		related to history file processing.
74	9.	jobs.h contains the definitions relating to job
75		processing and control.
76	10.	lexstates.h contains the states associated with
77		lexical processing.
78	11.	name.h contains the internal definitions related
79		to name-value pair processing.
80	12.	national.h contains a few I18N definitions, mostly
81		obsolete.
82	13.	nval.h is the public interface to the name-value
83		pair library that is documented with nval.3.
84	14.	path.h contains the interface for pathname processing
85		and pathname searching.
86	15.	shell.h is the public interface for shell functions
87		that are documented int shell.3.
88	16.	shlex.h contains the lexical token definitions and
89		interfaces for lexical analysis.
90	17.	shnodes.h contains the definition of the structures
91		for each of the parse nodes and flags for the attributes.
92	18.	shtable.h contains some interfaces and functions for
93		table lookup.
94	19.	streval.h contains the interface to the arithmetic
95		functions.
96	20.	terminal.h is a header file that includes the appropriate
97		terminal include.
98	21.	test.h contains the definitions for the test and [[...]]
99		commands.
100	22.	timeout.h contains the define constant for the maximum
101		shell timeout.
102	23.	ulimit.h includes the appropriate resource header.
103	24.	variables.h contains symbolic constants for the built-in
104		shell variables.
105
106sh directory:
107	1.	args.c contains functions for parsing shell options
108		and for processing positional parameters.
109	2.	arith.c contains callback functions for the streval.c
110		library and the interface to shell arithmetic.
111	3.	array.c contains the code for indexed and associative
112		arrays.
113	4.      bash.h contains code used when compiling with SHOPT_BASH
114		to add bash specific features such as shopt.
115	5.	defs.c contains the data definitions for global symbols.
116	6.	deparse.c contains code to generate shell script from
117		a parse tree.
118	7.	env.c contains code to add and delete environment variables
119		to an environment list.
120	8.	expand.c contains code for file name expansion and
121		file name generation.
122	9.	fault.c contains code for signal processing, trap
123		handling and termination.
124	10.	fcin.c contains code for reading and writing a character
125		at a time from a file or string.
126	11.	init.c contains initialization code and callbacks
127		for get and set functions for built-in variables.
128	12.	io.o contains code for redirections and managing file
129		descriptors and file streams.
130	13.	jobs.c contains the code for job management.
131	14.	lex.c contains the code for the lexical analyzer.
132	15.	macro.c contains code for the $ macro expansions, including
133		here-documents.
134	16.	main.c contains the calls to initialization, profile
135		processing and the main evaluation loop as well as
136		mail processing.
137	17.	name.c contains the name-value pair routines that are
138		built on the hash library in libast.
139	18.	nvdisc.c contains code related to name-value pair disciplines.
140	19.	nvtree.c contains code for compound variables and for
141		walking the namespace.
142	20.	nvtype.c contains most of the code related to types that
143		are created with typeset -T.
144	21.	parse.c contains the code for the shell parser.
145	22.	path.c contains the code for pathname lookup and
146		some path functions.  It also contains the code
147		that executes commands and scripts.
148	23.	pmain.c is just a calls sh_main() so that all of the
149		rest of the shell can be in a shared library.
150	24.	shcomp.c contains the main program to the shell
151		compiler.  This program parses a script and creates
152		a file that the shell can read containing the parse tree.
153	25.	streval.c is an C arithmetic evaluator.
154	26.	string.c contains some string related functions.
155	27.	subshell.c contains the code to save and restore
156		environments so that subshells can run without creating
157		a new process.
158	28.	suid_exec.c contains the program from running execute
159		only and/or setuid/setgid scripts.
160	29.	tdump.c contains the code to dump a parse tree into
161		a file.
162	30.	timers.c contains code for multiple event timeouts.
163	31.	trestore contians the code for restoring the parse
164		tree from the file created by tdump.
165	32.	userinit.c contains a dummy userinit() function.
166		This is now obsolete with the new version of sh_main().
167	33.	waitevent.c contains the sh_waitnotify function so
168		that builtins can handle processing events when the
169		shell is waiting for input or for process completion.
170	34.	xec.c is the main shell executuion loop.
171