Simulates starting the stand-alone version of MzScheme with the vector
of command-line strings argv. The init-argv,
adjust-flag-table, and init-namespace arguments are used
to modify the default settings for command-line flags, adjust the
parsing of command-line flags, and customize the initial namespace,
respectively.
The vector of strings init-argv is read first with the standard
MzScheme command-line parsing. Flags that load files or evaluate
expressions (e.g., -f and -e) are ignored, but flags that
set MzScheme's modes (e.g., -g or -m) effectively set the
default mode before argv is parsed.
Before argv is parsed, the procedure adjust-flag-table is
called with a command-line flag table as accepted by
parse-command-line (see section 7). The return
value must also be a table of command-line flags, and this table is
used to parse argv. The intent is to allow
adjust-flag-table to add or remove flags from the standard set.
After argv is parsed, a new thread and a namespace are created
for the ``restarted'' MzScheme. (The new namespace is installed as
the current namespace in the new thread.) In the new thread,
restarting performs the following actions:
The init-namespace procedure is called with no arguments.
The return value is ignored.
Expressions and files specified by argv are evaluated and
loaded. If an error occurs, the remaining expressions and files are
ignored, and the return value for restart-mzscheme is set to
#f.
The read-eval-print-loop procedure is called, unless a
flag in init-argv or argv disables it. When
read-eval-print-loop returns, the return value for
restart-mzscheme is set to #t.
Before evaluating command-line arguments, an exit handler is installed
that immediately returns from restart-mzscheme with the value
supplied to the handler. This exit handler remains in effect when
read-eval-print-loop is called (unless a command-line argument
changes it). If restart-mzscheme returns normally, the return
value is determined as described above. (Note that an error in a
command-line expression followed by read-eval-print-loop
produces a #t result. This is consistent with MzScheme's
stand-alone behavior.)