Skip site navigation (1)Skip section navigation (2)

  
 
  

home | help
clig(1) 		       Programmer's Manual			 clig(1)

NAME
     clig - generate a command line parser and/or basic manual page

SYNOPSIS
     clig [-t types] [-o outprefix] [-m manFile] [-mx manExt] [-d] infile

OPTIONS
     -t     the  types of output to generate. Currently supported types are `C',
	    `tcl' and `man',
	    1 or more String values
	    Default: `C' `man'

     -o     name of .c and .h file if type C is requested Default:  infile  with
	    suffix removed,
	    1 String value

     -m     manual  page  to  edit or generate if type man is requested Default:
	    `Name' specified in input file,
	    1 String value

     -mx    extension of manual page,
	    1 String value
	    Default: `.1'

     -d     generate the function showOptionValues if type C is requested .

     infile name of file which contains the command line specification.

DESCRIPTION
     Clig reads infile and creates the output as requested by option  -t.   Most
     often  you  will  just use the default to create a command line interpreter
     for your C program as well as the skeleton of a manual  page.  One  of  the
     main  reasons  to use clig is, that besides the command line interpreter, a
     usage() function and a manual page are generated, which are  always  up-to-
     date with respect to the options actually understood by the program.

     Currently,  options  of  type Flag, String, Int, Long, Float and Double are
     supported. Except for Flag options, all option-descriptions allow to  spec-
     ify  how  many arguments are expected for the option and whether the option
     is mandatory or not. For non-mandatory options, default values can be spec-
     ified and will be returned by the generated  command  line  interpreter  if
     necessary. In addition, for floating point and integer options, a range can
     be  declared,  and the interpreter will exit the program with an error mes-
     sage, if the option's argument lies outside the given range.

     Clig is implemented in Tcl and infile actually contains tcl-code, but under
     normal circumstances the user does not need to know anything about tcl, be-
     cause the syntax of the description-file is described below in section "DE-
     SCRIPTION FILE" and in the manual pages clig_* as noted in the section "SEE
     ALSO". (I admit that this is probably a lie, because under `normal  circum-
     stances' infile may contain syntax errors resulting in really tcl-ish error
     messages.)

DESCRIPTION FILE
     The description-file, infile, is a line-oriented ascii-file. Each line con-
     tains  a  command	which either describes an option or specifies additional
     information necessary to generate the command line interpreter or the  man-
     ual page.	A command starts with the command-name followed by mandatory pa-
     rameters  and possibly followed by options.  If a command does not fit on a
     line, it may be continued on the next line if the previous line  is  termi-
     nated with a backslash (\).

     The  commands are described in detail in their own manual pages, but let us
     consider a simple example, e.g. a command to describe an option  named  -fs
     which  wants  exactly  one parameter of type float and will be used in your
     program as a font size. (Note the backslash on the next line!)

	    Float -fs fontsize \
		{size of font in points} -d 11.0 -r 8.0 19.5

     The command's name is Float.  It has three  fixed	parameters:  The  first,
     -fs, is the string to be detected by the command line interpreter. The sec-
     ond,  fontsize,  is the name of a variable your program will use to receive
     the value found on the command line.  The third parameter, i.e.  everything
     between  the  braces, is a string which will be printed by usage().  The -d
     (for default) specifies that fontsize will be set to the default  of  11.0,
     if  -fs is not found on the command line. With -r (for range) you make sure
     that the command line interpreter will refuse any values for -fs which  are
     not within the given range.

   Mandatory Commands
     The  description file infile must contain the commands Name and Usage.  The
     first gives a name to your program and the second declares  a  short  (one-
     line)  description  for  it. Both pieces of information will be used in the
     usage()-message as well as in the manual page.

   Other Commands
     Please read the manual pages listed under "SEE ALSO" below which start with
     clig_ to find a detailed description of all commands available in	the  de-
     scription	file  infile.	An  example-infile  can  be  found  as	/usr/lo-
     cal/share/doc/clig/example/cmdline.cli.

OUTPUT TYPE C
     Clig generates the files outprefix.c  and	outprefix.h,  where  outprefix.h
     contains all declarations necessary to use the services defined in the out-
     prefix.c.	If a prefix is not given on the command line, it defaults to the
     name of the input file with any suffix removed.

   parseCmdline
     The output files implement a command line interpreter with the prototype

	    Cmdline *parseCmdline(int argc, char **argv);

     which  is	meant  to be called by your main() to interpret the command line
     given as argc and argv.

   usage
     The output files also implement the function

	    void usage(void);

     custom made from the information in infile.  IF  parseCmdline()  encounters
     an  undeclared  option  on  the command line, it immediately calls usage().
     Therefore you should normally declare neither -h nor --help as options  for
     your  program  so that usage-message can be requested with any of these op-
     tions. Normally it is not necessary to call usage()  directly,  but  it  is
     possible.

   Cmdline
     The type Cmdline, a pointer to which is returned by parseCmdline(), is also
     declared  in the generated header file. It is custom-made according to what
     is found in infile.  If, for example, infile contains the declaration

       Float -pi pi {your personal approximation of pi}

     the structure will have the three slots piP, pi and piC,  where  piP  is  a
     boolean set to 1 if and only if the option -r is found on the command line.
     In that case piC contains the number of parameters found for -r.  The para-
     meters  found are stored in pi itself. It is either of type float* or float
     depending on whether option -r may at all have more than one  argument.  In
     the example above, this is not the case, but if you declare

       Float -ival ival {interval to consider} -c 2 2

     in  infile,  ival	must  store 2 values and consequently it will be of type
     float* with sufficient memory allocated.

   Program
     To be conveniently available for error message and for use in usage(), par-
     seCmdline() will also set the global variable

	    char *Program;

     to the tail of argv[0].

   showOptionValues
     If so requested with option -d, the output will contain a function

	    void showOptionValues(void);

     which can be called after parseCmdline() to print the structure Cmdline  to
     stdout. This is merely for debugging purposes.

   Example Main Program
     The following example demonstrates the use of the command line parser, pro-
     vided  that  outprefix = cmdline and that clig was called with option -d to
     generate the function showOptionValues().

       #include "cmdline.h"

       int main(int argc, char **argv)
       {
	 Cmdline *cmd = parseCmdline(argc, argv);
	 showOptionValues();

	 /* Program is set by parseCmdline */
	 printf("Program = `%s'\n", Program);

	 /*****
	   Your code goes here. Option parameters and cleaned-up
	   argc and argv are referenced with cmd->...
	 *****/

	 return 0;
       }

OUTPUT TYPE tcl
     In fact, output type tcl is not yet supported. However this does  not  mean
     you  cannot  use  ::clig to instrument your Tcl-scripts. It only means that
     you must have ::clig installed on the machine were an  instrumented  script
     should  run. Read clig_parseCmdline(n) to learn how to instrument your Tcl-
     script with ::clig.

OUTPUT TYPE man
     Clig can generate or edit a manual page in *roff format. The  name  of  the
     manual page can be specified with option -m and its suffix can be specified
     with -mx.	By default, the name will be the string specified with the Name-
     command in the description file and the default suffix is .1.

     If the manual page file exists, clig edits specially marked sections of the
     file  by filling in up-to-date information. If the file does not yet exist,
     it copies a template file into it and then edits the template in  the  same
     way.

     Clig  is able to fill out the manual page sections `NAME', `SYNOPSIS', `OP-
     TIONS' and, in a very limited way, `DESCRIPTION'. In addition it will  sup-
     ply  a  default  title macro (.TH). The lines of the manual page file which
     are replaced by clig must be clearly marked by matching pairs of tag  lines
     like

       .\" cligPart <section>

     and

       .\" cligPart <section> end

     where <section> is one of the section names listed above.

     The  idea	is, that you edit the manual page, while clig fills in the parts
     that can be deduced from the description file. If you don't like what  clig
     fills  in, simply remove both tag-lines of a section and clig will leave it
     alone. You certainly want to do this for the DESCRIPTION-section.

SEE ALSO
     clig_Rest(n), clig_Flag(n), clig_Double(n), clig_Float(n), clig_Version(n),
     clig_Usage(n),	clig_Name(n),	  clig_Int(n),	   clig_parseCmdline(n),
     clig_Long(n), clig_String(n), clig_Commandline(n), clig_Description(n)

Clig-manuals			    1.9.11.1				 clig(1)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=clig&sektion=1&manpath=FreeBSD+Ports+15.1.quarterly>

home | help