Skip to content

Latest commit

 

History

History
98 lines (71 loc) · 3.07 KB

cmdline.md

File metadata and controls

98 lines (71 loc) · 3.07 KB

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 cannot 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 command-line the two style can be used together:

    harbour -wnes2 /gc0/q0 -iC:\hb\include
    

    Exceptions:

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

    • CLIPPER, HARBOUR envvars and Harbour application command-line parsing is a different beast, see src/vm/cmdarg.c for a NOTE.

      Just some examples for the various accepted forms:

      //F20 == /F20 == F20 == F:20 == F20X
      F20//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 4.0: https://creativecommons.org/licenses/by-sa/4.0/ See LICENSE.txt