int _nrrdReadNrrdParse_axis_maxs (FILE *file, Nrrd *nrrd, NrrdIoState *nio, int useBiff) { char me[]="_nrrdReadNrrdParse_axis_maxs", err[BIFF_STRLEN]; unsigned int ret; double val[NRRD_DIM_MAX]; char *info; AIR_UNUSED(file); info = nio->line + nio->pos; _CHECK_HAVE_DIM; ret = airParseStrD(val, info, _nrrdFieldSep, nrrd->dim); _CHECK_GOT_ALL_VALUES; nrrdAxisInfoSet_nva(nrrd, nrrdAxisInfoMax, val); /* HEY: this is a very imperfect check of excess info */ if (nrrd->dim+1 == airParseStrD(val, info, _nrrdFieldSep, nrrd->dim+1)) { sprintf(err, "%s: seem to have more than expected %d axis maxs", me, nrrd->dim); biffMaybeAdd(NRRD, err, useBiff); return 1; } if (_nrrdFieldCheck[nrrdField_axis_maxs](nrrd, useBiff)) { sprintf(err, "%s: trouble", me); biffMaybeAdd(NRRD, err, useBiff); return 1; } return 0; }
int rvaLattSpecParse(rvaLattSpec *lsp, const char *_str) { static const char me[]="rvaLattSpecParse"; char *col, *pstr, *str; airArray *mop; int smeth; unsigned got; if (!(lsp && _str)) { biffAddf(RVA, "%s: got NULL pointer", me); return 1; } if (!( str = airStrdup(_str) )) { biffAddf(RVA, "%s: couldn't strdup", me); return 1; } mop = airMopNew(); airMopAdd(mop, str, airFree, airMopAlways); col = strchr(str, ':'); if (!col) { biffAddf(RVA, "%s: didn't see \":\" separator in \"%s\" between " "lattice specification method and parameters", me, _str); airMopError(mop); return 1; } *col = '\0'; lsp->latt = airEnumVal(rvaLatt, str); if (rvaLattUnknown == lsp->latt) { biffAddf(RVA, "%s: didn't recognize \"%s\" as a %s", me, str, rvaLatt->name); airMopError(mop); return 1; } pstr = col + 1; got = airParseStrD(lsp->parm, pstr, ",", rvaLattParmNum[lsp->latt]); if (got != rvaLattParmNum[lsp->latt]) { biffAddf(RVA, "%s: got %u (not %u) parms in \"%s\"", me, got, rvaLattParmNum[lsp->latt], _str); airMopError(mop); return 1; } airMopOkay(mop); return 0; }
int _nrrdSpaceVectorParse(double val[NRRD_SPACE_DIM_MAX], char **hhP, unsigned int spaceDim, int useBiff) { char me[]="_nrrdSpaceVectorParse", err[BIFF_STRLEN], *hh, *buff, sep[]=",)"; airArray *mop; unsigned int ret, dd, length; mop = airMopNew(); hh = *hhP; /* skip past space */ length = strspn(hh, _nrrdFieldSep); hh += length; /* make sure we have something */ if (!*hh) { sprintf(err, "%s: hit end of string before seeing (", me); biffMaybeAdd(NRRD, err, useBiff); airMopError(mop); return 1; } /* first, see if we're getting the non-vector */ if ( (strstr(hh, _nrrdNoSpaceVector) == hh) ) { if (!hh[strlen(_nrrdNoSpaceVector)] || strchr(_nrrdFieldSep, hh[strlen(_nrrdNoSpaceVector)])) { /* yes, we got the non-vector */ for (dd=0; dd<spaceDim; dd++) { val[dd] = AIR_NAN; } length += strlen(_nrrdNoSpaceVector); } else { /* we got something that started out looking like the non-vector */ sprintf(err, "%s: couldn't parse non-vector \"%s\"", me, hh); biffMaybeAdd(NRRD, err, useBiff); airMopError(mop); return 1; } } else { /* this isn't a non-vector */ /* make sure we have an open paren */ if ('(' != *hh) { sprintf(err, "%s: first vector in \"%s\" didn't start with '('", me, hh); biffMaybeAdd(NRRD, err, useBiff); airMopError(mop); return 1; } /* copy string (including open paren) for local fiddling */ if (!(buff = airStrdup(hh))) { sprintf(err, "%s: couldn't allocate local buffer", me); biffMaybeAdd(NRRD, err, useBiff); airMopError(mop); return 1; } airMopAdd(mop, buff, airFree, airMopAlways); /* scan for close paren */ hh = buff+1; while (*hh) { if (')' == *hh) { break; } else { hh++; } } if (')' != *hh) { sprintf(err, "%s: didn't see ')' at end of first vector in \"%s\"", me, hh); biffMaybeAdd(NRRD, err, useBiff); airMopError(mop); return 1; } /* terminate at end paren */ *(hh+1) = 0; length += strlen(buff); /* see if we have too many fields */ ret = airStrntok(buff+1, sep); if (ret > spaceDim) { sprintf(err, "%s: space dimension is %d, but seem to have %d " "coefficients", me, spaceDim, ret); biffMaybeAdd(NRRD, err, useBiff); airMopError(mop); return 1; } /* try to parse the values */ ret = airParseStrD(val, buff+1, ",", spaceDim); if (spaceDim != ret) { sprintf(err, "%s: parsed %d values, but space dimension is %d", me, ret, spaceDim); biffMaybeAdd(NRRD, err, useBiff); airMopError(mop); return 1; } } /* probably not useful */ for (dd=spaceDim; dd<NRRD_SPACE_DIM_MAX; dd++) { val[dd] = AIR_NAN; } /* make sure all coefficients exist or not together */ for (dd=1; dd<spaceDim; dd++) { if (!!AIR_EXISTS(val[0]) ^ !!AIR_EXISTS(val[dd])) { sprintf(err, "%s: existance of all space vector coefficients must " "be consistent (val[0] not like val[%d])", me, dd); biffMaybeAdd(NRRD, err, useBiff); airMopError(mop); return 1; } } for (dd=0; dd<spaceDim; dd++) { if (airIsInf_d(val[dd])) { sprintf(err, "%s: vector coefficient %d can't be infinite", me, dd); biffMaybeAdd(NRRD, err, useBiff); airMopError(mop); return 1; } } *hhP += length; airMopOkay(mop); return 0; }