Command Line Issues

Harbour switch handling spec


This spec goes for CLIPPERCMD, HARBOURCMD, Harbour
compiler and #pragma directives in the source code.

The command line always overrides the envvar.

Note that some switches are not accepted in envvar,
some others in #pragmas.

First the parser should start to step through
all the tokens in the string separated by
whitespace. (or just walk through all argv[])

1.) If the token begins with “-“, it
should be treated as a new style switch.

One or more switch characters can follow
this. The “-” sign inside the token
will turn off the switch.

If the switch has an argument all the following
characters are treated as part of the argument.

The “/” sign has no special meaning here.

Switch Resulting options

-wn ( W N )
-w-n ( !W N )
-wi/harbour/include/ ( W I=/harbour/include/ )
-wi/harbour/include/n ( W I=/harbour/include/n )
-wes0n ( W ES=0 N )
-wen ( W [invalid switch: e] N )
-wesn ( W ES=Default(0) N )
-wses ( W S ES=Default(0) )
-wess ( W ES=Default(0) S )
– ( [invalid switch] )
-w-n-p ( !W !N P )
-w-n-p- ( !W !N !P )

-w- -w -w- ( finally: !W )

2.) If the token begins with “/”, it
should be treated as a compatibility style switch.

The parser scans the token for the next “/” sign or EOS
and treats the resulting string as one switch.

This means that a switch with an argument containing
“/” sign has some limitations. This may be solved by
allowing the usage of quote characters. This is mostly
a problem on systems which use “/” as path separator.

The “-” sign has no special meaning here, it can’t be
used to disable a switch.

Switch Resulting options

/w/n ( W N )
/wo/n ( [invalid switch: wo] N )
/ihello/world/ ( I=hello [invalid switch: world] [invalid switch: /] )
/i”hello/world/”/w ( I=hello/world/ W )
/ihello\world\ ( I=hello\world\ )

3.) If the token begins with anything else it should
be skipped.

The Harbour switches are always case insensitive.

In the Harbour commandline the two style can be used together:
harbour -wnes2 /gc0/q0 -iC:\hello


– Handling of the /CREDIT undocumented switch
on Harbour command line is unusual, check the current code
for this.

– The CLIPPER, HARBOUR and Harbour application
command line parsing is a different beast,
see cmdarg.c for a NOTE.

Just some examples for the various accepted forms:
//F20 == /F20 == F20 == F:20 == F20X
F20//TMPPATH:/temp///F:30000000 NOIDLE

“//” should always be used on the command line.
[ Copyright (c) 1999-2009 Viktor Szakats (
Licensed under Creative Commons Attribution-ShareAlike 3.0:
See COPYING.txt. ]

Source :