Ejemplo n.º 1
0
local void setarguments(param *pvec, string *argv)
{
  bool scanpos;
  param *pp;
  string *ap, name;

  scanpos = TRUE;				// start scan by position
  pp = pvec;					// start with 0th param
  for (ap = argv + 1; *ap != NULL; ap++) {	// loop over the arguments
    name = parname(*ap);			// get param name, if any
    scanpos = scanpos && (name == NULL);	// see how to match args
    if (scanpos) {				// match by position?
      pp++;					// move to next param
      if (pp->name == NULL)			// past last parameter?
	error("%s.initparam: too many arguments\n", progname);
      pp->value = strdup(*ap);			// set new param value
    } else {					// matching by name?
      if (name == NULL)				// but no name given?
	error("%s.initparam: arg %s must be named\n", progname, *ap);
      pp = findparam(name, pvec);		// look for named param
      if (pp == NULL)				// an unknown param?
	error("%s.initparam: parameter %s unknown\n", progname, name);
      if (pp->flags & ARGPARAM)			// already on arg list?
	error("%s.initparam: parameter %s duplicated\n", progname, name);
      pp->value = strdup(parvalue(*ap));	// set new param value
    }
    pp->flags = (pp->flags & ~DEFPARAM) | ARGPARAM;
						// switch source flag
  }
}
Ejemplo n.º 2
0
qstr *bas_getstrpar()
{
  int l;
  qstr *p;
  char *bp;

  if (argused())
    return bas_getstr();
  l=parname();
  if (l == -1)
    return (qstr*)0;
  bp = (char*) (l*8+ReadLong(aReg[6]+0x18));
  printf("bp %p\n",bp);
  bp = ReadWord(aReg[6]+bp+2)+ReadLong(aReg[6]+0x20);
  printf("%p ,%d\n%s\n",bp,l,(char*)bp+1+aReg[6]);
  return p;
}
Ejemplo n.º 3
0
local void copydefaults(param *pvec, string *defv)
{
  param *pp;
  string *dp, name, value, com;

  pp = pvec;					// start with 0th param
  for (dp = defv; *dp != NULL; dp++)		// loop over the defaults
    if (**dp != ';') {				// if not a comment...
      pp++;					// go on to new param
      name = parname(*dp);			// extract param name
      value = parvalue(*dp);			// and param value
      if (name == NULL || value == NULL)	// any problems found?
	error("%s.initparam: bad parameter %s\n", progname, *dp);
      pp->name = strdup(name);			// assign param name
      pp->value = strdup(value);		// and parameter value
      pp->comment = NULL;			// clear comment field
      pp->flags = DEFPARAM;			// source is default
      if (streq(pp->value, "???"))		// a required param?
	pp->flags |= REQPARAM;			// set required flag
      if (**dp == '<')				// an input parameter?
	pp->flags |= INPARAM;			// set input flag
      else if (**dp == '>')			// an output parameter?
	pp->flags |= OUTPARAM;			// set output flag
    } else if (pp->comment == NULL)	{	// a new comment...
      pp->comment = strdup(*dp + 1);		// assign comment field
    } else {					// more text for comment...
      com = (string) allocate(strlen(pp->comment) + strlen(*dp+1) + 2);
						// get space for comment
      strcpy(com, pp->comment);			// copy existing text
      strcat(com, "\n");			// indicate end of line
      strcat(com, *dp + 1);			// store text of comment
      free(pp->comment);			// free up old space
      pp->comment = com;			// and store new comment
    }
  pp++;						// past last real param
  pp->name = NULL;				// end list of parameters
}