 
/* rocket args stuff  */
 
 
     #include <argp.h>            
 
     const char *argp_program_version =
       "rocketargs 1.0";
     const char *argp_program_bug_address =
       "<rocketargs@halftoanywhere.com>";
 
     /* Program documentation. */
     static char doc[] =
       "rocket args test";
 
     /* A description of the arguments we accept. */
     static char args_doc[] = "ARG1 ARG2 ARG3 ARG4 ARG5 ARG6 ARG7 ARG8 ARG9 ARG10";
 
     /* The options we understand. */
     static struct argp_option options[] = {
       {"verbose",  'v', 0,      0,  "Produce verbose output" },
       {"quiet",    'q', 0,      0,  "Don't produce any output" },
       {"silent",   's', 0,      OPTION_ALIAS },
       {"payload",  'l', "kg",	 0,  "payload kg" },
       {"payloadenglish",  'L', "lb",	 0,  "payload lb" },
       {"altitude",  'h',"meters",	 0,  "Orgital Altitude m" },
       {"altitudeenglish",  'H',"miles",	 0,  "Orgital Altitude miles" },
       {"altitudeonly",  'a',"p",	 0,  "Altitude only, not orbital" },
	{"load",'f',"factor",	0,	"laborloadfactor"},
	{"latitude",'d',"degrees",	0,	"latitude of launch site"},
       {"output",   'o', "FILE", 0,
        "Output to FILE instead of standard output" },
       { 0 }
     };
 
     /* Used by `main' to communicate with `parse_opt'. */
     struct arguments
     {
       char *args[10]; /* ARG1 & ARG2 */
	int silent, verbose;
	float payload_kg;
	float payloadenglish_lb;
        float altitude_meters;
        float altitudeenglish_miles;
	int altitudeonly_p;
       float load_factor;
       float latitude_degrees;
       char *output_file;
     };
 
double rocket_cost_function (double *x,
               double *parameter_lower_bound,
               double *parameter_upper_bound,
               double *cost_tangents,
               double *cost_curvature,
               int * parameter_dimension,
               int *parameter_int_real,
               int *cost_flag,
               int *exit_code,
               int * USER_OPTIONS)
 
{    return 0.;   } // for linker
  static error_t  parse_opt (int key, char *arg, struct argp_state *state)
     {                                                /* Get the INPUT argument from `argp_parse', which we
          know is a pointer to our arguments structure. */
       struct arguments *arguments = state->input;
 
       switch (key)
         {
         case 'q': case 's':
           arguments->silent = 1;
           break;
         case 'v':
           arguments->verbose = 1;
           break;
         case 'o':
           arguments->output_file = arg;
           break;
         case 'l':
      	   sscanf(arg,"%g",&(arguments->payload_kg));
	   break;
	 case 'L':
      	   sscanf(arg,"%g",&(arguments->payloadenglish_lb));
		 arguments->payload_kg = arguments->payloadenglish_lb /2.2; 
         case 'h':
      	   sscanf(arg,"%g",&(arguments->altitude_meters));
	   break;
	 case 'H':
      	   sscanf(arg,"%g",&(arguments->altitudeenglish_miles));
		 arguments->altitude_meters = arguments->altitudeenglish_miles*1609.344; 
	   break;
         case 'a':
           arguments->altitudeonly_p = 1;
	   break;
	 case 'f':
      	   sscanf(arg,"%g",&(arguments->load_factor));
           break;
	 case 'd':
      	   sscanf(arg,"%g",&(arguments->latitude_degrees));
           break;
       case ARGP_KEY_ARG:
           if (state->arg_num >= 10)
             /* Too many arguments. */
             argp_usage (state);
 
           arguments->args[state->arg_num] = arg;
 
           break;
 
         case ARGP_KEY_END:
           if (state->arg_num < 0)
             /* Not enough arguments. */
             argp_usage (state);
           break;
 
         default:
      return ARGP_ERR_UNKNOWN;
         }
       return 0;
     }
 
     /* Our argp parser. */
     static struct argp argp = { options, parse_opt, args_doc, doc };
 
     int main (int argc, char **argv)
     {
       struct arguments arguments;
 
       /* Default values. */
       arguments.silent = 0;
       arguments.verbose = 0;
       arguments.payload_kg = 100;
       arguments.payloadenglish_lb= 0;
       arguments.altitude_meters = 123456.;
       arguments.altitudeenglish_miles = 0;
       arguments.altitudeonly_p  = 0;
       arguments.load_factor = 1.;
       arguments.latitude_degrees = 90.;
       arguments.output_file = "-";



 
 
       /* Parse our arguments; every option seen by `parse_opt' will
          be reflected in `arguments'. */
fprintf(stderr,"foo\n");
       argp_parse (&argp, argc, argv, 0, 0, &arguments);
fprintf(stderr,"bar\n");
       fprintf (stderr,"OUTPUT_FILE = %s PAYLOAD = %g PAYLOAD_E = %g ALTITUDE = %g ALTITUDE_E = %g ALTITUDE_ONLY = %d LATITUDE = %g LOADFACTOR %g\n"
               "VERBOSE = %s\nSILENT = %s\n",
               arguments.output_file,
               arguments.payload_kg,
               arguments.payloadenglish_lb, 
	       arguments.altitude_meters, 
	       arguments.altitudeenglish_miles, 
	       arguments.altitudeonly_p, 
	       arguments.latitude_degrees,
	       arguments.load_factor, 
               arguments.verbose ? "yes" : "no",
               arguments.silent ? "yes" : "no");

       exit (0);
     }
 
 
                                





