void clear1Dall(struct data *d) { clear1Ddata(d); clear1Dmask(d); clearnoise1D(d); clearpars(&d->p); clearpars(&d->s); cleararray(&d->a); }
void clear2Dall(struct data *d) { clear2Ddata(d); clear2Dmask(d); clearnoise2D(d); clearCSIdata(d); cleardimorder(d); clearstatus(d); clearpars(&d->p); clearpars(&d->s); cleararray(&d->a); }
void copypars(struct pars *p1, struct pars *p2) { int i; /* Delete existing parameters */ clearpars(p2); /* Copy the current p1 set to p2 */ p2->npars = p1->npars; if (p2->npars > 0) mallocnpars(p2); for (i=0;i<p2->npars;i++) { if ((p2->name[i] = (char *)malloc((strlen(p1->name[i])+1)*sizeof(char))) == NULL) nomem(__FILE__,__FUNCTION__,__LINE__); strcpy(p2->name[i],p1->name[i]); /* Copy values from p1 to p2 */ copyvalues(p1,i,p2,i); } }
void setval(struct pars *p,char *par,double value) { struct pars p2; /* Set the value of the parameter in pars struct p2 */ p2.npars = 1; /* One parameter */ mallocnpars(&p2); /* Malloc for one parameter */ p2.type[0] = 1; /* Value is real */ p2.active[0] = 1; /* Parameter is active */ p2.nvals[0] = 1; /* There is one parameter value */ /* Malloc and fill parameter name */ if ((p2.name[0] = (char *)malloc((strlen(par)+1)*sizeof(char))) == NULL) nomem(__FILE__,__FUNCTION__,__LINE__); strcpy(p2.name[0],par); /* Malloc and fill the parmaeter value */ if ((p2.d[0] = (double *)malloc(sizeof(double *))) == NULL) nomem(__FILE__,__FUNCTION__,__LINE__); *p2.d[0] = value; /* Now copy the value from p2 to p */ copypar(par,&p2,p); /* Clear p2 */ clearpars(&p2); }
void cppar(char *par1,struct pars *p1,char *par2,struct pars *p2) { int i; int ix; struct pars p3; /* Find the index of par1 in the p1 set otherwise return */ ix=parindex(par1,p1); if (ix<0) return; /* Search for par2 in the p2 set to modify an exisiting parameter */ for (i=0;i<p2->npars;i++) { if (!strcmp(p2->name[i],par2)) { /* There is a match */ /* Free existing values */ switch(p2->type[i]) { case 0: free(p2->i[i]); break; case 1: free(p2->d[i]); break; case 2: free(p2->s[i]); break; } /* end p->type switch */ /* Copy values from p1 to p2 */ copyvalues(p1,ix,p2,i); return; } } /* If we have not already returned then add the parameter */ /* Copy the current p2 set to p3 */ p3.npars = p2->npars; if (p3.npars > 0) mallocnpars(&p3); for (i=0;i<p3.npars;i++) { if ((p3.name[i] = (char *)malloc((strlen(p2->name[i])+1)*sizeof(char))) == NULL) nomem(__FILE__,__FUNCTION__,__LINE__); strcpy(p3.name[i],p2->name[i]); /* Copy values from p2 to p3 */ copyvalues(p2,i,&p3,i); } /* Clear the current p2 set */ clearpars(p2); /* Restore the p2 set but allocate for an extra parameter */ p2->npars = p3.npars+1; mallocnpars(p2); for (i=0;i<p3.npars;i++) { if ((p2->name[i] = (char *)malloc((strlen(p3.name[i])+1)*sizeof(char))) == NULL) nomem(__FILE__,__FUNCTION__,__LINE__); strcpy(p2->name[i],p3.name[i]); /* Copy values back from p3 to p2 */ copyvalues(&p3,i,p2,i); } /* Clear the p3 set */ clearpars(&p3); /* Now add the parameter */ if ((p2->name[i] = (char *)malloc((strlen(par2)+1)*sizeof(char))) == NULL) nomem(__FILE__,__FUNCTION__,__LINE__); strcpy(p2->name[i],par2); /* Copy values from p1 to p2 */ copyvalues(p1,ix,p2,i); }