8322 nl: misleading-indentation
[unleashed/tickless.git] / usr / src / lib / libshell / common / DESIGN
blobc11c0aff1e84f96c68138b6c1dcb867e20086725
1 Here is an overview of the source code organization for ksh93.
3 Directory layout:
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.
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.
17         The directory edit contains the code for command line
18         editing and history.
20         The fun directory contains some shell function such as
21         pushd, popd, and dirs.
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.
27         The directory bltins contains code for most of the built-in
28         commands.  Additional built-in commands are part of libcmd.
30         The directory sh contains most of the code for ksh93.
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.
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.
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.
50 Include 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.
106 sh 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.