You can read options from the command line used to run your OmniMark program. See the OmniMark Studio for Eclipse documentation for information on specifying command line options in OmniMark Studio for Eclipse. See the OmniMark Engine documentation for information on specifying command line options with OmniMark Engine.
Command line options starting with a single -
character followed by one or more letters are
reserved for use by the OmniMark Engine. Options specified without a -
or with a double
-
character will be passed to your OmniMark program on the #args
shelf.
You can access items on the #args
shelf:
process local string input-file-name local string output-file-name do when number of #args < 2 output "Not enough command line arguments.%n" halt with 2 done set input-file-name to #args[1] set output-file-name to #args[2]
You can also repeat over the #args
shelf. In the following code, we assume every item named on the
command line is a file to be processed:
process repeat over #args submit file #args again
You may want to use command line options that have parameters. For instance, you may wish to set the value of an arbitrary item on a shelf from the command line. This requires a three part command line option:
3
You can use a --
prefix on the name of the shelf, to make it clear that it is the first
part of a multi-part option. This enables you to write a command line that looks like this:
--file-list 3 "foo" hello --file-list 7 "bar"
Here is a program that can read this command line and act appropriately:
process local string file-list size 10 local integer i initial { 1 } repeat exit when i > number of #args do when #args[i] = "--file-list" set file-list[#args[i + 1]] to #args[i + 2] increment i by 3 else output "Individual item: '" || #args[i] || "'%n" increment i by 1 done catch #program-error message message ; Handle out-of-range entries. ; put #error message || "%n" again ; Now test the shelf. ; repeat over file-list as entry output "file-list[" || "d" % #item || "] = " || entry || "%n" when entry != "" again
Using the command line given above, this program will output:
Individual item: 'hello' file-list[3] = "foo" file-list[7] = "bar"
Note that there is nothing special about the --
prefix: it is simply a useful convention
for use in multi-part options. You can also use it for single options, if you wish.
You can also access the command line indirectly using the keyword #main-input
. When
#main-input
is referenced in a program, OmniMark assumes that all the items listed on the command line are
file names. It opens all the files and concatenates them into one source which is represented
by #main-input
.
Note that OmniMark does not open all the files at once and build the source in memory. Rather, each file is
opened and read in turn. However, the files are treated as a single continuous source, with no break between
files. Thus:
process submit #main-inputsubmits all the files named on the command line as a single source, while
process repeat over #args submit #args againsubmits each file in turn in a separate scanning operation.
When processing #main-input
, if any of the items on the command line does not resolve to a file
name that can be opened, OmniMark will generate an error when it fails to open the file.
Note that options starting in --
are not exempt from inclusion
in #main-input
. If you use #main-input
, the only options you can include on the command
line are input file names. Note, however, that options beginning in -
, and any parameters
belonging to those options, are not treated as file names in processing #main-input
since these options
are not passed to the OmniMark program.