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

Exceptions:

- 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
  //TMPPATH:C:\hello
  F20//TMPPATH:/temp///F:30000000 NOIDLE
  F0NOIDLEX10
  SQUAWKNOIDLE

  "//" should always be used on the command line.


[ Copyright (c) 1999-2009 Viktor Szakats (vszakats.net/harbour)
  Licensed under Creative Commons Attribution-ShareAlike 3.0:
  http://creativecommons.org/licenses/by-sa/3.0/
  See COPYING.txt. ]
