Ignore:
Timestamp:
Jan 2, 2004, 8:23:39 PM (22 years ago)
Author:
bird
Message:

getopt & getopt_long with dependencies from FreeBSD 5.1

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/emx/include/getopt.h

    • Property cvs2svn:cvs-rev changed from 1.3 to 1.4
    r927 r928  
    1 /* Declarations for getopt.
    2    Copyright 1989, 1990, 1991, 1992, 1993, 1994, 1996, 1997, 1998, 2000
    3    Free Software Foundation, Inc.
     1/*      $NetBSD: getopt.h,v 1.4 2000/07/07 10:43:54 ad Exp $    */
     2/*      $FreeBSD: src/include/getopt.h,v 1.1 2002/09/29 04:14:30 eric Exp $ */
    43
    5    NOTE: The canonical source of this file is maintained with the GNU C Library.
    6    Bugs can be reported to bug-glibc@gnu.org.
     4/*-
     5 * Copyright (c) 2000 The NetBSD Foundation, Inc.
     6 * All rights reserved.
     7 *
     8 * This code is derived from software contributed to The NetBSD Foundation
     9 * by Dieter Baron and Thomas Klausner.
     10 *
     11 * Redistribution and use in source and binary forms, with or without
     12 * modification, are permitted provided that the following conditions
     13 * are met:
     14 * 1. Redistributions of source code must retain the above copyright
     15 *    notice, this list of conditions and the following disclaimer.
     16 * 2. Redistributions in binary form must reproduce the above copyright
     17 *    notice, this list of conditions and the following disclaimer in the
     18 *    documentation and/or other materials provided with the distribution.
     19 * 3. All advertising materials mentioning features or use of this software
     20 *    must display the following acknowledgement:
     21 *        This product includes software developed by the NetBSD
     22 *        Foundation, Inc. and its contributors.
     23 * 4. Neither the name of The NetBSD Foundation nor the names of its
     24 *    contributors may be used to endorse or promote products derived
     25 *    from this software without specific prior written permission.
     26 *
     27 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
     28 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
     29 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     30 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
     31 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     32 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     33 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
     34 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
     35 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     36 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     37 * POSSIBILITY OF SUCH DAMAGE.
     38 */
    739
    8    This program is free software; you can redistribute it and/or modify it
    9    under the terms of the GNU General Public License as published by the
    10    Free Software Foundation; either version 2, or (at your option) any
    11    later version.
     40#ifndef _GETOPT_H_
     41#define _GETOPT_H_
    1242
    13    This program is distributed in the hope that it will be useful,
    14    but WITHOUT ANY WARRANTY; without even the implied warranty of
    15    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    16    GNU General Public License for more details.
     43#include <sys/cdefs.h>
     44#include <unistd.h>
    1745
    18    You should have received a copy of the GNU General Public License
    19    along with this program; if not, write to the Free Software
    20    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
    21    USA.  */
     46/*
     47 * Gnu like getopt_long() and BSD4.4 getsubopt()/optreset extensions
     48 */
     49#if !defined(_POSIX_SOURCE) && !defined(_XOPEN_SOURCE)
     50#define no_argument        0
     51#define required_argument  1
     52#define optional_argument  2
    2253
    23 #ifndef _GETOPT_H
    24 #define _GETOPT_H 1
     54struct option {
     55        /* name of long option */
     56        const char *name;
     57        /*
     58         * one of no_argument, required_argument, and optional_argument:
     59         * whether option takes an argument
     60         */
     61        int has_arg;
     62        /* if not NULL, set *flag to val when option found */
     63        int *flag;
     64        /* if flag not NULL, value to set *flag to; else return value */
     65        int val;
     66};
    2567
    26 #ifdef  __cplusplus
    27 extern "C" {
     68__BEGIN_DECLS
     69int getopt_long __P((int, char * const *, const char *,
     70    const struct option *, int *));
     71__END_DECLS
    2872#endif
    2973
    30 /* For communication from `getopt' to the caller.
    31    When `getopt' finds an option that takes an argument,
    32    the argument value is returned here.
    33    Also, when `ordering' is RETURN_IN_ORDER,
    34    each non-option ARGV-element is returned here.  */
    35 
    36 extern char *optarg;
    37 
    38 /* Index in ARGV of the next element to be scanned.
    39    This is used for communication to and from the caller
    40    and for communication between successive calls to `getopt'.
    41 
    42    On entry to `getopt', zero means this is the first call; initialize.
    43 
    44    When `getopt' returns -1, this is the index of the first of the
    45    non-option elements that the caller should itself scan.
    46 
    47    Otherwise, `optind' communicates from one call to the next
    48    how much of ARGV has been scanned so far.  */
    49 
    50 extern int optind;
    51 
    52 /* Callers store zero here to inhibit the error message `getopt' prints
    53    for unrecognized options.  */
    54 
    55 extern int opterr;
    56 
    57 /* Set to an option character which was unrecognized.  */
    58 
    59 extern int optopt;
    60 
    61 /* Describe the long-named options requested by the application.
    62    The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector
    63    of `struct option' terminated by an element containing a name which is
    64    zero.
    65 
    66    The field `has_arg' is:
    67    no_argument          (or 0) if the option does not take an argument,
    68    required_argument    (or 1) if the option requires an argument,
    69    optional_argument    (or 2) if the option takes an optional argument.
    70 
    71    If the field `flag' is not NULL, it points to a variable that is set
    72    to the value given in the field `val' when the option is found, but
    73    left unchanged if the option is not found.
    74 
    75    To have a long-named option do something other than set an `int' to
    76    a compiled-in constant, such as set a value from `optarg', set the
    77    option's `flag' field to zero and its `val' field to a nonzero
    78    value (the equivalent single-letter option character, if there is
    79    one).  For long options that have a zero `flag' field, `getopt'
    80    returns the contents of the `val' field.  */
    81 
    82 struct option
    83 {
    84 #if defined (__STDC__) && __STDC__
    85   const char *name;
    86 #else
    87   char *name;
    88 #endif
    89   /* has_arg can't be an enum because some compilers complain about
    90      type mismatches in all the code that assumes it is an int.  */
    91   int has_arg;
    92   int *flag;
    93   int val;
    94 };
    95 
    96 /* Names for the values of the `has_arg' field of `struct option'.  */
    97 
    98 #define no_argument             0
    99 #define required_argument       1
    100 #define optional_argument       2
    101 
    102 #if defined (__STDC__) && __STDC__
    103 /* HAVE_DECL_* is a three-state macro: undefined, 0 or 1.  If it is
    104    undefined, we haven't run the autoconf check so provide the
    105    declaration without arguments.  If it is 0, we checked and failed
    106    to find the declaration so provide a fully prototyped one.  If it
    107    is 1, we found it so don't provide any declaration at all.  */
    108 #if defined (__GNU_LIBRARY__) || (defined (HAVE_DECL_GETOPT) && !HAVE_DECL_GETOPT)
    109 /* Many other libraries have conflicting prototypes for getopt, with
    110    differences in the consts, in stdlib.h.  To avoid compilation
    111    errors, only prototype getopt for the GNU C library.  */
    112 extern int getopt (int argc, char *const *argv, const char *shortopts);
    113 #else /* not __GNU_LIBRARY__ */
    114 # if !defined (HAVE_DECL_GETOPT) && !defined (__cplusplus)
    115 extern int getopt ();
    116 # endif
    117 #endif /* __GNU_LIBRARY__ */
    118 extern int getopt_long (int argc, char *const *argv, const char *shortopts,
    119                         const struct option *longopts, int *longind);
    120 extern int getopt_long_only (int argc, char *const *argv,
    121                              const char *shortopts,
    122                              const struct option *longopts, int *longind);
    123 
    124 /* Internal only.  Users should not call this directly.  */
    125 extern int _getopt_internal (int argc, char *const *argv,
    126                              const char *shortopts,
    127                              const struct option *longopts, int *longind,
    128                              int long_only);
    129 #else /* not __STDC__ */
    130 extern int getopt ();
    131 extern int getopt_long ();
    132 extern int getopt_long_only ();
    133 
    134 extern int _getopt_internal ();
    135 #endif /* __STDC__ */
    136 
    137 #ifdef  __cplusplus
    138 }
    139 #endif
    140 
    141 #endif /* getopt.h */
     74#endif /* !_GETOPT_H_ */
Note: See TracChangeset for help on using the changeset viewer.