16d670f6c0f3b9383b8b4c8ed12beaeec56928266José Fonseca/*	$OpenBSD: getopt.h,v 1.2 2008/06/26 05:42:04 ray Exp $	*/
26d670f6c0f3b9383b8b4c8ed12beaeec56928266José Fonseca/*	$NetBSD: getopt.h,v 1.4 2000/07/07 10:43:54 ad Exp $	*/
36d670f6c0f3b9383b8b4c8ed12beaeec56928266José Fonseca
46d670f6c0f3b9383b8b4c8ed12beaeec56928266José Fonseca/*-
56d670f6c0f3b9383b8b4c8ed12beaeec56928266José Fonseca * Copyright (c) 2000 The NetBSD Foundation, Inc.
66d670f6c0f3b9383b8b4c8ed12beaeec56928266José Fonseca * All rights reserved.
76d670f6c0f3b9383b8b4c8ed12beaeec56928266José Fonseca *
86d670f6c0f3b9383b8b4c8ed12beaeec56928266José Fonseca * This code is derived from software contributed to The NetBSD Foundation
96d670f6c0f3b9383b8b4c8ed12beaeec56928266José Fonseca * by Dieter Baron and Thomas Klausner.
106d670f6c0f3b9383b8b4c8ed12beaeec56928266José Fonseca *
116d670f6c0f3b9383b8b4c8ed12beaeec56928266José Fonseca * Redistribution and use in source and binary forms, with or without
126d670f6c0f3b9383b8b4c8ed12beaeec56928266José Fonseca * modification, are permitted provided that the following conditions
136d670f6c0f3b9383b8b4c8ed12beaeec56928266José Fonseca * are met:
146d670f6c0f3b9383b8b4c8ed12beaeec56928266José Fonseca * 1. Redistributions of source code must retain the above copyright
156d670f6c0f3b9383b8b4c8ed12beaeec56928266José Fonseca *    notice, this list of conditions and the following disclaimer.
166d670f6c0f3b9383b8b4c8ed12beaeec56928266José Fonseca * 2. Redistributions in binary form must reproduce the above copyright
176d670f6c0f3b9383b8b4c8ed12beaeec56928266José Fonseca *    notice, this list of conditions and the following disclaimer in the
186d670f6c0f3b9383b8b4c8ed12beaeec56928266José Fonseca *    documentation and/or other materials provided with the distribution.
196d670f6c0f3b9383b8b4c8ed12beaeec56928266José Fonseca *
206d670f6c0f3b9383b8b4c8ed12beaeec56928266José Fonseca * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
216d670f6c0f3b9383b8b4c8ed12beaeec56928266José Fonseca * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
226d670f6c0f3b9383b8b4c8ed12beaeec56928266José Fonseca * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
236d670f6c0f3b9383b8b4c8ed12beaeec56928266José Fonseca * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
246d670f6c0f3b9383b8b4c8ed12beaeec56928266José Fonseca * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
256d670f6c0f3b9383b8b4c8ed12beaeec56928266José Fonseca * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
266d670f6c0f3b9383b8b4c8ed12beaeec56928266José Fonseca * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
276d670f6c0f3b9383b8b4c8ed12beaeec56928266José Fonseca * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
286d670f6c0f3b9383b8b4c8ed12beaeec56928266José Fonseca * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
296d670f6c0f3b9383b8b4c8ed12beaeec56928266José Fonseca * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
306d670f6c0f3b9383b8b4c8ed12beaeec56928266José Fonseca * POSSIBILITY OF SUCH DAMAGE.
316d670f6c0f3b9383b8b4c8ed12beaeec56928266José Fonseca */
326d670f6c0f3b9383b8b4c8ed12beaeec56928266José Fonseca
336d670f6c0f3b9383b8b4c8ed12beaeec56928266José Fonseca#ifndef _GETOPT_H_
346d670f6c0f3b9383b8b4c8ed12beaeec56928266José Fonseca#define _GETOPT_H_
356d670f6c0f3b9383b8b4c8ed12beaeec56928266José Fonseca
366d670f6c0f3b9383b8b4c8ed12beaeec56928266José Fonseca/*
376d670f6c0f3b9383b8b4c8ed12beaeec56928266José Fonseca * GNU-like getopt_long() and 4.4BSD getsubopt()/optreset extensions
386d670f6c0f3b9383b8b4c8ed12beaeec56928266José Fonseca */
396d670f6c0f3b9383b8b4c8ed12beaeec56928266José Fonseca#define no_argument        0
406d670f6c0f3b9383b8b4c8ed12beaeec56928266José Fonseca#define required_argument  1
416d670f6c0f3b9383b8b4c8ed12beaeec56928266José Fonseca#define optional_argument  2
426d670f6c0f3b9383b8b4c8ed12beaeec56928266José Fonseca
43f9bb5323eb96f47cfb4ab5f93165323df0a1fd61José Fonseca#ifdef __cplusplus
44f9bb5323eb96f47cfb4ab5f93165323df0a1fd61José Fonsecaextern "C" {
45f9bb5323eb96f47cfb4ab5f93165323df0a1fd61José Fonseca#endif
46f9bb5323eb96f47cfb4ab5f93165323df0a1fd61José Fonseca
476d670f6c0f3b9383b8b4c8ed12beaeec56928266José Fonsecastruct option {
486d670f6c0f3b9383b8b4c8ed12beaeec56928266José Fonseca	/* name of long option */
496d670f6c0f3b9383b8b4c8ed12beaeec56928266José Fonseca	const char *name;
506d670f6c0f3b9383b8b4c8ed12beaeec56928266José Fonseca	/*
516d670f6c0f3b9383b8b4c8ed12beaeec56928266José Fonseca	 * one of no_argument, required_argument, and optional_argument:
526d670f6c0f3b9383b8b4c8ed12beaeec56928266José Fonseca	 * whether option takes an argument
536d670f6c0f3b9383b8b4c8ed12beaeec56928266José Fonseca	 */
546d670f6c0f3b9383b8b4c8ed12beaeec56928266José Fonseca	int has_arg;
556d670f6c0f3b9383b8b4c8ed12beaeec56928266José Fonseca	/* if not NULL, set *flag to val when option found */
566d670f6c0f3b9383b8b4c8ed12beaeec56928266José Fonseca	int *flag;
576d670f6c0f3b9383b8b4c8ed12beaeec56928266José Fonseca	/* if flag not NULL, value to set *flag to; else return value */
586d670f6c0f3b9383b8b4c8ed12beaeec56928266José Fonseca	int val;
596d670f6c0f3b9383b8b4c8ed12beaeec56928266José Fonseca};
606d670f6c0f3b9383b8b4c8ed12beaeec56928266José Fonseca
616d670f6c0f3b9383b8b4c8ed12beaeec56928266José Fonsecaint	 getopt_long(int, char * const *, const char *,
626d670f6c0f3b9383b8b4c8ed12beaeec56928266José Fonseca	    const struct option *, int *);
636d670f6c0f3b9383b8b4c8ed12beaeec56928266José Fonsecaint	 getopt_long_only(int, char * const *, const char *,
646d670f6c0f3b9383b8b4c8ed12beaeec56928266José Fonseca	    const struct option *, int *);
656d670f6c0f3b9383b8b4c8ed12beaeec56928266José Fonseca#ifndef _GETOPT_DEFINED_
666d670f6c0f3b9383b8b4c8ed12beaeec56928266José Fonseca#define _GETOPT_DEFINED_
676d670f6c0f3b9383b8b4c8ed12beaeec56928266José Fonsecaint	 getopt(int, char * const *, const char *);
686d670f6c0f3b9383b8b4c8ed12beaeec56928266José Fonsecaint	 getsubopt(char **, char * const *, char **);
696d670f6c0f3b9383b8b4c8ed12beaeec56928266José Fonseca
706d670f6c0f3b9383b8b4c8ed12beaeec56928266José Fonsecaextern   char *optarg;                  /* getopt(3) external variables */
716d670f6c0f3b9383b8b4c8ed12beaeec56928266José Fonsecaextern   int opterr;
726d670f6c0f3b9383b8b4c8ed12beaeec56928266José Fonsecaextern   int optind;
736d670f6c0f3b9383b8b4c8ed12beaeec56928266José Fonsecaextern   int optopt;
746d670f6c0f3b9383b8b4c8ed12beaeec56928266José Fonsecaextern   int optreset;
756d670f6c0f3b9383b8b4c8ed12beaeec56928266José Fonsecaextern   char *suboptarg;               /* getsubopt(3) external variable */
766d670f6c0f3b9383b8b4c8ed12beaeec56928266José Fonseca#endif
77f9bb5323eb96f47cfb4ab5f93165323df0a1fd61José Fonseca
78f9bb5323eb96f47cfb4ab5f93165323df0a1fd61José Fonseca#ifdef __cplusplus
79f9bb5323eb96f47cfb4ab5f93165323df0a1fd61José Fonseca}
80f9bb5323eb96f47cfb4ab5f93165323df0a1fd61José Fonseca#endif
816d670f6c0f3b9383b8b4c8ed12beaeec56928266José Fonseca
826d670f6c0f3b9383b8b4c8ed12beaeec56928266José Fonseca#endif /* !_GETOPT_H_ */
83