Wi-Fizzle.com - Putting the fizzle in Wi-Fi since 2005 .. (yes, this was a poor choice for a domain name)

clig --- Command Line Interpreter Generator

For the impatient and those who know

You can download the gzipped PostScript documentation or the latest release as * clig-1.9.11.tar.gz, * clig-, or * clig-, which includes the documentation.

*Note: these are all linking to the same file, because the "official" maintainer is a lazy pig and has created confusion over which release is actuallu the latest. The OFFICIAL latest release is clig-1.9.11.tar.gz.

If you know clig already, you may be interested in the changes since the last release.

What is clig?

Clig creates for your C-Program or lets you use in your Tcl-script

  • a command line interpreter with those features:
    • Flag, Int, Long, Float, Double or String options
    • no. of parameters of options can be specified
    • a range can be specified for the numerical options
    • options can have defaults
    • options can be mandatory (not really optional then :-)
    The command line interpreter will check for your C-program or Tcl-script the existence of mandatory options, correct range of numerical option arguments and correct number of arguments. Violation results in readable error messages. Parsed results are delivered to your C-program in a custum-built structure or as directly accessible variables to your Tcl-script.
  • a readable, up-to-date usage-message
  • a basic manual page

Clig takes as input a simple description file.

Clig generates standard C (well, I tried as hard as I can :-) It is reported to work well with C++. Within a Tcl-script, code generation is not necessary. Just declare your command line arguments and then run the parser.

The resulting code is self contained and does not depend on a library (except for libc, of course).

Clig is written in Tcl

Clig is free software. Its licence is the GPL.

An Example

Consider the following specification: Int -rgb rgb \ "specifies a color by its red, green and blue components"\ -c 3 3 \ -r 0 255 It shows most of the features available in clig. Here an option -rgb is declared with parameters of type int. Within the C-program or Tcl-script, it will be called rgb. The next line contains in quotes a usage string to be displayed by the generated usage()-function. The line -c 3 3 specifies that the option -rgb must be followed by at least 3 but no more than three (i.e. exactly 3) integer values. Finally the allowed range for the three values is specified.

An example demonstrating most features of clig is also available.

Currently, clig understands the following option types:

is a boolean option (or flag) without parameters.
is an option with zero or more floating point parameters.
is an option with zero or more double parameters.
accepts zero or more int parameters.
accepts zero or more long (i.e. 8 byte int on some machines) parameters.
allows arbitrary strings as parameters.
For floating point, integer and string valued options a range can be specified for the number of allowed parameters. The allowed range for floating point and integer option values can also be specified.

Features missing on my todo-list

  • neural net type command line parser,
  • fuzzy logic command line parser,
  • inheritance hierarchy for command line options,
  • visual basic support,
  • command lines shorter than 128 characters,
  • generation of WINDOS program group,
  • Ole, Nils or Jens support,
  • InactiveX-aware buzzword-recognition.


Clig is implemented in Tcl and you will not be able to make it work without. The generated C-code is Tcl-free.

Clig has been originally been written by Harald Kirsch and is now mantained by Sven Geggus.

Please send comments and suggestions to Sven Geggus. Flames expressing the opinion that getopt() is the only way to go are silently ignored.