/*1* Copyright (c) 1999-2000, Image Power, Inc. and the University of2* British Columbia.3* Copyright (c) 2001-2002 Michael David Adams.4* All rights reserved.5*/67/* __START_OF_JASPER_LICENSE__8*9* JasPer License Version 2.010*11* Copyright (c) 2001-2006 Michael David Adams12* Copyright (c) 1999-2000 Image Power, Inc.13* Copyright (c) 1999-2000 The University of British Columbia14*15* All rights reserved.16*17* Permission is hereby granted, free of charge, to any person (the18* "User") obtaining a copy of this software and associated documentation19* files (the "Software"), to deal in the Software without restriction,20* including without limitation the rights to use, copy, modify, merge,21* publish, distribute, and/or sell copies of the Software, and to permit22* persons to whom the Software is furnished to do so, subject to the23* following conditions:24*25* 1. The above copyright notices and this permission notice (which26* includes the disclaimer below) shall be included in all copies or27* substantial portions of the Software.28*29* 2. The name of a copyright holder shall not be used to endorse or30* promote products derived from the Software without specific prior31* written permission.32*33* THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS34* LICENSE. NO USE OF THE SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER35* THIS DISCLAIMER. THE SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS36* "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING37* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A38* PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO39* EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL40* INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING41* FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,42* NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION43* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. NO ASSURANCES ARE44* PROVIDED BY THE COPYRIGHT HOLDERS THAT THE SOFTWARE DOES NOT INFRINGE45* THE PATENT OR OTHER INTELLECTUAL PROPERTY RIGHTS OF ANY OTHER ENTITY.46* EACH COPYRIGHT HOLDER DISCLAIMS ANY LIABILITY TO THE USER FOR CLAIMS47* BROUGHT BY ANY OTHER ENTITY BASED ON INFRINGEMENT OF INTELLECTUAL48* PROPERTY RIGHTS OR OTHERWISE. AS A CONDITION TO EXERCISING THE RIGHTS49* GRANTED HEREUNDER, EACH USER HEREBY ASSUMES SOLE RESPONSIBILITY TO SECURE50* ANY OTHER INTELLECTUAL PROPERTY RIGHTS NEEDED, IF ANY. THE SOFTWARE51* IS NOT FAULT-TOLERANT AND IS NOT INTENDED FOR USE IN MISSION-CRITICAL52* SYSTEMS, SUCH AS THOSE USED IN THE OPERATION OF NUCLEAR FACILITIES,53* AIRCRAFT NAVIGATION OR COMMUNICATION SYSTEMS, AIR TRAFFIC CONTROL54* SYSTEMS, DIRECT LIFE SUPPORT MACHINES, OR WEAPONS SYSTEMS, IN WHICH55* THE FAILURE OF THE SOFTWARE OR SYSTEM COULD LEAD DIRECTLY TO DEATH,56* PERSONAL INJURY, OR SEVERE PHYSICAL OR ENVIRONMENTAL DAMAGE ("HIGH57* RISK ACTIVITIES"). THE COPYRIGHT HOLDERS SPECIFICALLY DISCLAIM ANY58* EXPRESS OR IMPLIED WARRANTY OF FITNESS FOR HIGH RISK ACTIVITIES.59*60* __END_OF_JASPER_LICENSE__61*/6263/*64* Command Line Option Parsing Library65*66* $Id: jas_getopt.c,v 1.2 2008-05-26 09:40:52 vp153 Exp $67*/6869/******************************************************************************\70* Includes.71\******************************************************************************/7273#include <stdio.h>74#include <string.h>7576#include "jasper/jas_getopt.h"77#include "jasper/jas_math.h"7879/******************************************************************************\80* Global data.81\******************************************************************************/8283int jas_optind = 0;84int jas_opterr = 1;85char *jas_optarg = 0;8687/******************************************************************************\88* Code.89\******************************************************************************/9091static jas_opt_t *jas_optlookup(jas_opt_t *opts, char *name)92{93jas_opt_t *opt;9495for (opt = opts; opt->id >= 0 && opt->name; ++opt) {96if (!strcmp(opt->name, name)) {97return opt;98}99}100return 0;101}102103int jas_getopt(int argc, char **argv, jas_opt_t *opts)104{105char *cp;106int id;107int hasarg;108jas_opt_t *opt;109char *s;110111if (!jas_optind) {112jas_optind = JAS_MIN(1, argc);113}114while (jas_optind < argc) {115s = cp = argv[jas_optind];116if (*cp == '-') {117/* We are processing an option. */118++jas_optind;119if (*++cp == '-') {120/* We are processing a long option. */121++cp;122if (*cp == '\0') {123/* This is the end of the options. */124return JAS_GETOPT_EOF;125}126if (!(opt = jas_optlookup(opts, cp))) {127if (jas_opterr) {128jas_eprintf("unknown long option %s\n", s);129}130return JAS_GETOPT_ERR;131}132hasarg = (opt->flags & JAS_OPT_HASARG) != 0;133id = opt->id;134} else {135/* We are processing a short option. */136if (strlen(cp) != 1 ||137!(opt = jas_optlookup(opts, cp))) {138if (jas_opterr) {139jas_eprintf("unknown short option %s\n", s);140}141return JAS_GETOPT_ERR;142}143hasarg = (opt->flags & JAS_OPT_HASARG) != 0;144id = opt->id;145}146if (hasarg) {147/* The option has an argument. */148if (jas_optind >= argc) {149if (jas_opterr) {150jas_eprintf("missing argument for option %s\n", s);151}152return JAS_GETOPT_ERR;153}154jas_optarg = argv[jas_optind];155++jas_optind;156} else {157/* The option does not have an argument. */158jas_optarg = 0;159}160return id;161} else {162/* We are not processing an option. */163return JAS_GETOPT_EOF;164}165}166return JAS_GETOPT_EOF;167}168169170