2.11BSD/man/cat3/getsubopt.0

Compare this file to the similar file:
Show the results in this format:




GETSUBOPT(3)	    UNIX Programmer's Manual	     GETSUBOPT(3)



NAME
     getsubopt - get sub options from an argument

SYNOPSIS
     #include <stdlib.h>

     extern char *suboptarg

     int
     getsubopt(optionp, tokens, valuep)
     char **optionp;
     char **tokens;
     char **valuep;

DESCRIPTION
     The getsubopt() function parses a string containing tokens
     delimited by one or more tab, space or comma (`,') charac-
     ters.  It is intended for use in parsing groups of option
     arguments provided as part of a utility command line.

     The argument _o_p_t_i_o_n_p is a pointer to a pointer to the
     string.  The argument _t_o_k_e_n_s is a pointer to a NULL-
     terminated array of pointers to strings.

     The getsubopt() function returns the zero-based offset of
     the pointer in the _t_o_k_e_n_s array referencing a string which
     matches the first token in the string, or, -1 if the string
     contains no tokens or _t_o_k_e_n_s does not contain a matching
     string.

     If the token is of the form ``name=value'', the location
     referenced by _v_a_l_u_e_p will be set to point to the start of
     the ``value'' portion of the token.

     On return from getsubopt(), _o_p_t_i_o_n_p will be set to point to
     the start of the next token in the string, or the null at
     the end of the string if no more tokens are present.  The
     external variable _s_u_b_o_p_t_a_r_g will be set to point to the
     start of the current token, or NULL if no tokens were
     present.  The argument _v_a_l_u_e_p will be set to point to the
     ``value'' portion of the token, or NULL if no ``value'' por-
     tion was present.

EXAMPLE
     char *tokens[] = {
	  #define   ONE  0
	       "one",
	  #define   TWO  1
	       "two",
	  NULL
     };




Printed 11/26/99	January 12, 1996			1






GETSUBOPT(3)	    UNIX Programmer's Manual	     GETSUBOPT(3)



     ...

     extern char *optarg, *suboptarg;
     char *options, *value;

     while ((ch = getopt(argc, argv, "ab:")) != -1) {
	  switch(ch) {
	  case 'a':
	       /* process ``a'' option */
	       break;
	  case 'b':
	       options = optarg;
	       while (*options) {
		    switch(getsubopt(&options, tokens, &value)) {
		    case ONE:
			 /* process ``one'' sub option */
			 break;
		    case TWO:
			 /* process ``two'' sub option */
			 if (!value)
			      error("no value for two");
			 i = atoi(value);
			 break;
		    case -1:
			 if (suboptarg)
			      error("illegal sub option %s",
				suboptarg);
			 else
			      error("missing sub option");
			 break;
	       }
	       break;
	  }

SEE ALSO
     getopt(3), strsep(3)

HISTORY
     The getsubopt() function first appeared in 4.4BSD.
















Printed 11/26/99	January 12, 1996			2