The toplevel function should be programmed to accept arbitrary number of arguments. Each argument on the command line is coerced to a string and transfered to the toplevel function. The program below repeatedly reads expressions from the file given by the first argument and pretty-prints them to the second argument file.
(defun pprint-copy (infile outfile) (with-open-file (in infile) (with-open-file (out outfile :direction :output) (let ((eof (cons nil nil)) (exp)) (while (not (eq (setq exp (read in nil eof)) eof)) (pprint exp out)))))) (defun pprint-copy-top (&rest argv) (when (= (length argv) 2) (pprint-copy (first argv) (second argv))))
Once you defined these functions in EusLisp, (save "ppcopy" "" 'pprint-copy-top) creates a unix executable command named ppcopy.
In Solaris based EusLisp, the toplevel evaluator cannot change in this manner, since save is not available. Instead, edit lib/eusrt.l to define the custom toplevel evaluator and set it to *toplevel*. lib/eusrt.l defines initialization procedures evaluated at every invocation of the EusLisp.