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.