File Naming Conventions -=-=-=-=-=-=-=-=-=-=-=- sqsh_*.[ch] All files beginning with sqsh_*.[ch] are core functions to the shell, they define functions that are called or do call user defined functions. cmd_*.[ch] These are the source behind the commands that may be invoked by a user. var_*.[ch] These are validation functions for setting and retrieving environment variables. Modules -=-=-=-=- sqsh_fd.c - Most libc functions that deal with file descriptors or FILE structures are replaced here with sqsh equiv- alents (they attempt to be a little smarter). All file access should be performed through these function. sqsh_global.c - Contains definitions for all global variables. These are such variables as the DBPROCESS connection to the database, and the environment structure to contain all environment variables. sqsh_init.c - Where all globals defined in sqsh_global.[ch] are initialized to thier default values, this includes setting up default values for system-supplied environment variables. sqsh_fork.c - Fork replacement function for starting a child process. This is responsible for re-initializing any global variables defined in sqsh_global.[ch] for use by the child (for example, the child should not inherit the parent's DBPROCESS pointer). sqsh_sigcld.c - Functions for queueing SIGCLD (or SIGCHLD) events for later processing. These functions are used in jobset_*() functions and sqsh_popen() functions. Error Condititions -=-=-=-=-=-=-=-=-=- There are only three places in which actual printfs should be called: 1. In any user-defined cmd_*() functions. 2. In sqsh_main.c to report configuration errors, etc. 3. Any asyncronous signal handlers (sqsh_sigcld.c: sigcld_handler(), in particular). In all other functions and modules error conditions should be returned via return codes and setting error conditions with sqsh_set_error(). All functions that don't fit criterea 1 or 2, above, should aways call sqsh_set_error() to identify an error condition, even if no error ocurres (in this case it would be sqsh_set_error( SQSH_E_NONE, NULL ). Shell Misfeatures -=-=-=-=-=-=-=-=- Unlike most shells, sqsh expands all variables on the command line first then tokenizes the command line, so if it is known or thought that a variable may contain white-space then it should be quoted.