eXept Software AG Logo

Smalltalk/X Webserver

Documentation of class 'GetOpt':

Home

Documentation
www.exept.de
Everywhere
for:
[back]

Class: GetOpt


Inheritance:

   Object
   |
   +--Collection
      |
      +--Set
         |
         +--Dictionary
            |
            +--GetOpt

Package:
stx:libbasic
Category:
System-Support
Version:
rev: 1.5 date: 2018/09/24 11:32:26
user: cg
file: GetOpt.st directory: libbasic
module: stx stc-classLibrary: libbasic
Author:
Ian Piumarta

Description:


GetOpt -- command line parser

Smalltalk version of Unix getopt(3)-like command line parser.
Crash course:

1) Create a GetOpt with 'GetOpt new'.
2) Tell it what options to expect with 'getOpt at: optChar put: optBlock'
   where optChar is a character (the option, duh) and optBlock is a
   unary block (for options without arguments) or a binary block for
   options with arguments.  (The first block parameter is always the
   option letter that was matched; the second, if present, is the
   argument to the option.)
3) Tell it what to do with option $? if you want to intercept unrecognised
   options.
4) Send it 'default: unaryBlock' to tell it what to do with non-option
   arguments.
5) Send it 'parse: aCollection' to parse the arguments in aCollection.

Note that '-x foo' and '-xfoo' are handled correctly for an option
'x' that expects an argument (in both cases the argument is 'foo').

For anyone who didn't understand the crash course, the following:

  | files searchPath outputPath verbose |
  files := OrderedCollection new.
  searchPath := OrderedCollection new.
  outputPath := nil.
  verbose := false.
  GetOpt new
      at: $I put: [ :opt :arg | searchPath add: arg ];
      at: $o put: [ :opt :arg | outputPath := arg ];
      at: $v put: [ :opt | verbose := true ];
      at: $? put: [ :opt | self error: 'illegal option: -' , opt asString ];
      default: [ :arg | files add: arg ];
      parse: Smalltalk arguments startingAt: 1.

will parse a compiler command line for include directories ('-I dir'
option, argument appended to 'searchPath'), an output filename
('-o filename' option, argument left in 'outputPath'), a verbosity
flag ('-v' option, setting 'verbose' to true), and zero or more input
filenames (anything else, appended to 'files').  
If you still don't understand then you shouldn't be here.


Related information:

    StandaloneStartup
    Smalltalk
    ReadEvalPrintLoop

Class protocol:

instance creation
o  new


Instance protocol:

accessing
o  default: unaryBlock

o  onError: unaryBlock

error reporting
o  error: aMessage

initialization
o  initializeDefaultBlock

parsing
o  parse: argumentCollection

o  parse: argumentCollection startingAt: offset

parsing - private
o  parseArgument: arg with: rest

o  parseOption: option with: rest
cg: changed to support non-single-character args (--foo)

private
o  applyOption: anOption to: unaryBlock

o  applyOption: anOption to: binaryBlock with: rest



ST/X 7.2.0.0; WebServer 1.670 at bd0aa1f87cdd.unknown:8081; Tue, 23 Apr 2024 21:25:37 GMT