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