-int
-cl_sim::proc_arguments(int argc, char *argv[])
-{
- int i, c;
- char *opts, *cp;
-
- opts= (char*)malloc((accept_args?strlen(accept_args):0)+100);
- strcpy(opts, "c:p:PX:vV");
-#ifdef SOCKET_AVAIL
- strcat(opts, "Z:r:");
-#endif
- if (accept_args)
- strcat(opts, accept_args);
- opterr= 0;
- while((c= getopt(argc, argv, opts)) != -1)
- switch (c)
- {
-
- case 'c':
- arguments->add(new cl_prg_arg('c', 0, optarg));
- break;
-
-#ifdef SOCKET_AVAIL
- case 'Z':
- // By Sandeep
- arguments->add(new cl_prg_arg('Z', 0, (long long)1));
- if (!optarg || !isdigit(*optarg))
- fprintf(stderr, "expected portnumber to follow -Z\n");
- else {
- char *p;
- long long l= strtol(optarg, &p, 0);
- arguments->add(new cl_prg_arg(0, "Zport", l));
- }
- break;
-#endif
-
- case 'p':
- arguments->add(new cl_prg_arg(0, "prompt", optarg));
- break;
-
- case 'P':
- arguments->add(new cl_prg_arg('P', 0, (long long)1));
- break;
-
-#ifdef SOCKET_AVAIL
- case 'r':
- arguments->add(new cl_prg_arg('r', 0,
- (long long)strtol(optarg, NULL, 0)));
- break;
-#endif
-
- case 'X':
- {
- double XTAL;
- for (cp= optarg; *cp; *cp= toupper(*cp), cp++);
- XTAL= strtod(optarg, &cp);
- if (*cp == 'K')
- XTAL*= 1e3;
- if (*cp == 'M')
- XTAL*= 1e6;
- if (XTAL == 0)
- {
- fprintf(stderr, "Xtal frequency must be greather than 0\n");
- exit(1);
- }
- arguments->add(new cl_prg_arg('X', 0, XTAL));
- break;
- }
-
- case 'v':
- printf("%s: %s\n", argv[0], VERSIONSTR);
- exit(0);
- break;
-
- case 'V':
- arguments->add(new cl_prg_arg('V', 0, (long long)1));
- break;
-
- case '?':
- if ((c= proc_arg(c, optarg)))
- exit(c);
- break;
-
- default:
- if ((c= proc_arg(c, optarg)))
- exit(c);
- }
- if (!arg_avail("prompt"))
- arguments->add(new cl_prg_arg(0, "prompt", "> "));
-
- for (i= optind; i < argc; i++)
- in_files->add(argv[i]);
-
- free(opts);
- return(0);
-}
-
-int
-cl_sim::proc_arg(char arg, char *optarg)
-{
- return(0);
-}
-
-int
-cl_sim::arg_avail(char name)
-{
- class cl_prg_arg *a;
- int i;
-
- for (i= 0; i < arguments->count; i++)
- {
- a= (class cl_prg_arg *)(arguments->at(i));
- if (a->short_name == name)
- return(1);
- }
- return(0);
-}
-
-int
-cl_sim::arg_avail(char *name)
-{
- class cl_prg_arg *a;
- int i;
-
- for (i= 0; i < arguments->count; i++)
- {
- a= (class cl_prg_arg *)(arguments->at(i));
- if (a->long_name &&
- strcmp(a->long_name, name) == 0)
- return(1);
- }
- return(0);
-}
-
-long long
-cl_sim::get_iarg(char sname, char *lname)
-{
- class cl_prg_arg *a;
- int i;
-
- for (i= 0; i < arguments->count; i++)
- {
- a= (class cl_prg_arg *)(arguments->at(i));
- if ((sname && a->short_name == sname) ||
- (lname && a->long_name && strcmp(a->long_name, lname) == 0))
- return(a->get_ivalue());
- }
- return(0);
-}
-
-char *
-cl_sim::get_sarg(char sname, char *lname)
-{
- class cl_prg_arg *a;
- int i;
-
- for (i= 0; i < arguments->count; i++)
- {
- a= (class cl_prg_arg *)(arguments->at(i));
- if ((sname && a->short_name == sname) ||
- (lname && a->long_name && strcmp(a->long_name, lname) == 0))
- return(a->get_svalue());
- }
- return(0);
-}
-
-
-double
-cl_sim::get_farg(char sname, char *lname)
-{
- class cl_prg_arg *a;
- int i;
-
- for (i= 0; i < arguments->count; i++)
- {
- a= (class cl_prg_arg *)(arguments->at(i));
- if ((sname && a->short_name == sname) ||
- (lname && a->long_name && strcmp(a->long_name, lname) == 0))
- return(a->get_fvalue());
- }
- return(0);
-}
-
-void *
-cl_sim::get_parg(char sname, char *lname)
-{
- class cl_prg_arg *a;
- int i;
-
- for (i= 0; i < arguments->count; i++)
- {
- a= (class cl_prg_arg *)(arguments->at(i));
- if ((sname && a->short_name == sname) ||
- (lname && a->long_name && strcmp(a->long_name, lname) == 0))
- return(a->get_pvalue());
- }
- return(0);
-}
-
-class cl_commander *
-cl_sim::mk_commander()
-{
- class cl_commander *cmd= new cl_commander(this);
- return(cmd);
-}
-