It is recommended that the application developer (or the compiler)
package virtual machine code applications as shell scripts with the
avram
command line embedded in them. This style relieves the user
of the need to remember the appropriate virtual machine options for
invoking the application, which are always the same for a given
application, or even to be aware of the virtual machine at all.
Here is a script that performs a similar operation to the standard Unix cat utility.
#!/bin/sh #\ exec avram --force-text-input --default-to-stdin "$0" "$@" sKYQNTP\
That is, it copies the contents of a file whose
name is given on the command line to standard output, or copies
standard input to standard output if no file name is given. This
script can be marked executable
(with chmod) and run by any user
with the directory of the avram
executable in his or her
PATH
environment variable, even if avram
had to be
installed in a non-standard directory such as
~/bin.
The idea for this script is blatantly lifted from the wish
manpage. The first line of the script invokes a shell to process
what follows. The shell treats the second line as a comment and
ignores it. Based on the third line, the shell invokes avram
with the indicated options, the script itself as the next argument, and
whatever command line parameters were initially supplied by the user
as the remaining arguments. The rest of the script after
that line is never processed by the shell.
When avram
attempts to load the shell script as a virtual
machine code file, which happens as a result of it being executed by
the shell, it treats the first line as a comment and ignores it. It
also treats the second line as a comment, but takes heed of the
trailing backslash, which is interpreted as a comment continuation
character. It therefore also treats the third line as a comment and
ignores it. Starting with the fourth line, it reads the virtual code,
which is in a binary data format encoded with printable characters,
and evaluates it.