/******************************************************************************* * Simplified Wrapper and Interface Generator (SWIG) * * Author : David Beazley * * Department of Computer Science * University of Chicago * 1100 E 58th Street * Chicago, IL 60637 * beazley@cs.uchicago.edu * * Please read the file LICENSE for the copyright and terms by which SWIG * can be used and distributed. *******************************************************************************/ #include "internal.h" /******************************************************************************* * $Header$ * * File : getopt.cxx * * This file defines a few functions for handling command line arguments. * C++ makes this really funky---especially since each language module * may want to extract it's own command line arguments. * * My own special version of getopt. This is a bit weird, because we * don't know what the options are in advance (they could be determined * by a language module). *******************************************************************************/ static char **args; static int numargs; static int *marked; // ----------------------------------------------------------------------------- // void init_args(int argc, char **argv) // // Initializes the argument list. // // Inputs : // argc = Argument count // argv = Argument array // // Output : None // // Side Effects : Saves local copy of argc and argv // ----------------------------------------------------------------------------- void init_args(int argc, char **argv) { int i; numargs = argc; args = argv; marked = new int[numargs]; for (i = 0; i < argc; i++) { marked[i] = 0; } marked[0] = 1; } // ----------------------------------------------------------------------------- // void mark_arg(int n) // // Marks an argument as being parsed. All modules should do this whenever they // parse a command line option. // // Inputs : n = Argument number // // Output : None // // Side Effects : Sets a status bit internally // ----------------------------------------------------------------------------- void mark_arg(int n) { if (marked) marked[n] = 1; } // ----------------------------------------------------------------------------- // void check_options() // // Checks for unparsed command line options. If so, issues an error and exits. // // Inputs : None // // Output : None // // Side Effects : exits if there are unparsed options // ----------------------------------------------------------------------------- void check_options() { int error = 0; int i; if (!marked) { fprintf(stderr,"Must specify an input file. Use -help for available options.\n"); SWIG_exit(1); } for (i = 1; i < numargs-1; i++) { if (!marked[i]) { fprintf(stderr,"swig error : Unrecognized option %s\n", args[i]); error=1; } } if (error) { fprintf(stderr,"Use 'swig -help' for available options.\n"); SWIG_exit(1); } if (marked[numargs-1]) { fprintf(stderr,"Must specify an input file. Use -help for available options.\n"); SWIG_exit(1); } } // ----------------------------------------------------------------------------- // void arg_error() // // Generates a generic error message and exits. // // Inputs : None // // Output : None // // Side Effects : Exits // ----------------------------------------------------------------------------- void arg_error() { fprintf(stderr,"SWIG : Unable to parse command line options.\n"); fprintf(stderr,"Use 'swig -help' for available options.\n"); SWIG_exit(1); }