One of the goals of FunnelWeb is that it must be extremely portable. Huge efforts, desperate actions, and great sacrifices were made in the name of portability. For example, FunnelWeb is written in C.
An equally important goal was that of correctness and reliability. To this end, it was determined that a large automated suite of test programs be prepared to assist in regression testing. Preparing the test suite was tedious, but achievable. Automating it portably was more difficult.
The difficulty faced was that if FunnelWeb was implemented in the form of a utility that could be invoked from the operating system command language, the only way to set up regression testing was in the command language of the operating system of the target machine (shellscripts for UNIX, DCL for VMS, batch files for MSDOS, and ınothing on the Macintosh). The huge variation in these command languages led to the conclusion that either the automation of regression testing would have to be rewritten on each target machine, or a small command language would have to be created within FunnelWeb. In the end, the twin goals of portability and regression testing were considered so important that a small command shell was constructed inside FunnelWeb. This is called the FunnelWeb command shell, or just the shell for short.
By default, when FunnelWeb is invoked, it does not enter its shell. If just given the name of an input file, it will simple process the input file in the normal manner and then terminate. To instruct FunnelWeb to invoke its shell, the +K or +X command line option must be specified when FunnelWeb is invoked from the operating system. It is also invoked upon startup if the file fwinit.fws exists.
Most FunnelWeb users will never need to use the shell and need not even know about it. There are four main uses of the shell:usesshell