#ident "%r% 05/08/19 SwRI" #include #include /* for abort */ #include #include #include #include /* for INT_MAX */ #include /* for MAXPATHLEN */ #include "SDDAS_types.h" #include "libdb.h" /* for MAX_IDFS_VIRT_NAME */ #include "pidf_ret.h" #include "pidf_local.h" #include "pidf_parse.h" /* for the pidf_vals structure */ void CheckReturnType (PIDF what, pidf_vals *ret_val, void *ToBeFilled); int IntroPIDF (SDDAS_ULONG key, char **V); int PIDF_Return_Code (PIDF what, SDDAS_INT DataType); int ReadNewPidf (SDDAS_ULONG key, const SDDAS_CHAR *Exten, SDDAS_INT DataType, SDDAS_INT sennum, SDDAS_INT unitnum, PIDF what, void *ToBeFilled) { pidf_vals *ret_val = NULL; char *V; int err, whichPIDF; char tmp [100]; char pidf_name [4 + MAX_IDFS_VIRT_NAME]; if ((whichPIDF = IntroPIDF (key, &V)) < 0) return whichPIDF; /* an error occurred */ sprintf (pidf_name, "v2_%s", V); switch (what) { case FLOWINTO : snprintf (tmp, sizeof (tmp), "%s.flow_into", pidf_name); break; case PLTAVL : snprintf (tmp, sizeof (tmp), "%s.plot_avail_flag", pidf_name); break; case MASK: snprintf (tmp, sizeof (tmp), "%s.data_type_mask", pidf_name); break; case VERSION: snprintf (tmp, sizeof (tmp), "%s.version", pidf_name); break; case INSTITUTE: snprintf (tmp, sizeof (tmp), "%s.institution", pidf_name); break; case PROJ: snprintf (tmp, sizeof (tmp), "%s.project", pidf_name); break; case MISS: snprintf (tmp, sizeof (tmp), "%s.mission", pidf_name); break; case EXP: snprintf (tmp, sizeof (tmp), "%s.experiment", pidf_name); break; case INST: snprintf (tmp, sizeof (tmp), "%s.instrument", pidf_name); break; case VINST: snprintf (tmp, sizeof (tmp), "%s.vinst", pidf_name); break; case TOTALUNITS: snprintf (tmp, sizeof (tmp), "%s.num_units", pidf_name); break; default: snprintf (tmp, sizeof (tmp), "%s", pidf_name); err = ReadNewPidfRec (tmp, DataType, what, sennum, unitnum); if (err != ALL_OKAY) { return err; } } Find_Name (whichPIDF, tmp, &ret_val); if (ret_val != NULL) { CheckReturnType (what, ret_val, ToBeFilled); FreePidfVals (&ret_val); return ALL_OKAY; } else return (PIDF_Return_Code (what, DataType)); } void ConvertToFloat (pidf_vals *ret_val, void *ToBeFilled) { SDDAS_FLOAT temp; temp = (SDDAS_FLOAT) ret_val->val.dval; memcpy (ToBeFilled, &temp, sizeof (SDDAS_FLOAT)); } void ConvertToFloatList (pidf_vals *ret_val, void *ToBeFilled) { SDDAS_FLOAT *fptr = (SDDAS_FLOAT *) ToBeFilled; int i = 0; pidf_vals *temp = ret_val; while (temp != NULL) { fptr [i] = (SDDAS_FLOAT) temp->val.dval; i++; temp = temp->next; } } void ConvertToCharPtrs (pidf_vals *ret_val, void *ToBeFilled) { SDDAS_CHAR **cptr = (SDDAS_CHAR **) ToBeFilled; int i = 0; pidf_vals *temp = ret_val; while (temp != NULL) { snprintf (cptr [i], MAX_PIDF_NAME, "%s", temp->val.sval); i++; temp = temp->next; } } void ConvertToCharList (pidf_vals *ret_val, void *ToBeFilled) { int i = 0; pidf_vals *temp = ret_val; SDDAS_CHAR *Memory = (SDDAS_CHAR *) ToBeFilled; while (temp != NULL) { memcpy (&(Memory [i]), &temp->val.cval, sizeof (SDDAS_CHAR)); i++; temp = temp->next; } } void ConvertToIntList (pidf_vals *ret_val, void *ToBeFilled) { SDDAS_INT *iptr = (SDDAS_INT *) ToBeFilled; int i = 0; pidf_vals *temp = ret_val; while (temp != NULL) { /* memcpy (&(iptr [i]), &temp->val.ival, sizeof (int)); */ iptr [i] = (SDDAS_INT) temp->val.ival; i++; temp = temp->next; } } void ConvertToCharPtr (pidf_vals *ret_val, void *ToBeFilled) { snprintf ((char *)ToBeFilled, MAX_PIDF_NAME, "%s", ret_val->val.sval); } void ConvertToChar (pidf_vals *ret_val, void *ToBeFilled) { memcpy (ToBeFilled, &ret_val->val.cval, sizeof (SDDAS_CHAR)); } void ConvertToInt (pidf_vals *ret_val, void *ToBeFilled) { memcpy (ToBeFilled, &ret_val->val.ival, sizeof (SDDAS_INT)); } void CheckReturnType (PIDF what, pidf_vals *ret_val, void *ToBeFilled) { switch (what) { case BININDEX : ConvertToIntList (ret_val, ToBeFilled); break; case BINMETHOD : ConvertToInt (ret_val, ToBeFilled); break; case COMPNAME : ConvertToCharPtr (ret_val, ToBeFilled); break; case COMPNAMES : ConvertToCharPtrs (ret_val, ToBeFilled); break; case DEFAULTMAX : ConvertToFloat (ret_val, ToBeFilled); break; case DEFAULTMIN : ConvertToFloat (ret_val, ToBeFilled); break; case DEPEN : ConvertToChar (ret_val, ToBeFilled); break; case DIMEN : ConvertToInt (ret_val, ToBeFilled); break; case DISPLAY : ConvertToInt (ret_val, ToBeFilled); break; case EXP : ConvertToCharPtr (ret_val, ToBeFilled); break; case GRPNUM : ConvertToInt (ret_val, ToBeFilled); break; case INST : ConvertToCharPtr (ret_val, ToBeFilled); break; case INSTITUTE : ConvertToCharPtr (ret_val, ToBeFilled); break; case LONGDESC : ConvertToCharPtr (ret_val, ToBeFilled); break; case MASK : ConvertToInt (ret_val, ToBeFilled); break; case MISS : ConvertToCharPtr (ret_val, ToBeFilled); break; case MODIFY : ConvertToChar (ret_val, ToBeFilled); break; case NAME : ConvertToCharPtr (ret_val, ToBeFilled); break; case NAMES : ConvertToCharPtrs (ret_val, ToBeFilled); break; case NSETS : ConvertToInt (ret_val, ToBeFilled); break; case NUMBININDEX : ConvertToInt (ret_val, ToBeFilled); break; case NUMINGRP : ConvertToInt (ret_val, ToBeFilled); break; case NUMTBLAPP : ConvertToInt (ret_val, ToBeFilled); break; case NUMOF : ConvertToInt (ret_val, ToBeFilled); break; case NUNITS : ConvertToInt (ret_val, ToBeFilled); break; case PIDFTYPE : ConvertToChar (ret_val, ToBeFilled); break; case PLTAVL : ConvertToInt (ret_val, ToBeFilled); break; case PROJ : ConvertToCharPtr (ret_val, ToBeFilled); break; case SCALING : ConvertToInt (ret_val, ToBeFilled); break; case SCFPATH : ConvertToCharPtr (ret_val, ToBeFilled); break; case SENNAMES : ConvertToCharPtrs (ret_val, ToBeFilled); break; case PIDFNUM : ConvertToInt (ret_val, ToBeFilled); break; case SENSETS : ConvertToIntList (ret_val, ToBeFilled); break; case SHORTDESC : ConvertToCharPtr (ret_val, ToBeFilled); break; case SHORTNAME : ConvertToCharPtr (ret_val, ToBeFilled); break; case SPACING : ConvertToInt (ret_val, ToBeFilled); break; case START : ConvertToFloat (ret_val, ToBeFilled); break; case STOP : ConvertToFloat (ret_val, ToBeFilled); break; case SWPNDX : ConvertToInt (ret_val, ToBeFilled); break; case TABLEAPP : ConvertToIntList (ret_val, ToBeFilled); break; case TBLAPPOPS : ConvertToIntList (ret_val, ToBeFilled); break; case UNITID : ConvertToInt (ret_val, ToBeFilled); break; case UNITNUM : ConvertToInt (ret_val, ToBeFilled); break; case UNITNUMS : ConvertToIntList (ret_val, ToBeFilled); break; case UNITFMT : ConvertToChar (ret_val, ToBeFilled); break; case UNITLAB : ConvertToCharPtr (ret_val, ToBeFilled); break; case VARUNITFMT : ConvertToChar (ret_val, ToBeFilled); break; case VARUNITNUM : ConvertToInt (ret_val, ToBeFilled); break; case VARUNITUBNUM : ConvertToInt (ret_val, ToBeFilled); break; case VERSION : ConvertToFloat (ret_val, ToBeFilled); break; case VIDFNUM : ConvertToInt (ret_val, ToBeFilled); break; case VINST : ConvertToCharPtr (ret_val, ToBeFilled); break; case IMGFMT : ConvertToChar (ret_val, ToBeFilled); break; case IMGTYPE : ConvertToChar (ret_val, ToBeFilled); break; case IMGBIN : ConvertToChar (ret_val, ToBeFilled); break; case IMGLONGLOC : ConvertToChar (ret_val, ToBeFilled); break; case IMGLONGNUM : case IMGLONGUN : ConvertToInt (ret_val, ToBeFilled); break; case IMGLONGMIN : case IMGLONGMAX : case IMGLONGDEL : ConvertToFloat (ret_val, ToBeFilled); break; case IMGLONGDEF : ConvertToCharPtr (ret_val, ToBeFilled); break; case IMGLATLOC : ConvertToChar (ret_val, ToBeFilled); break; case IMGLATNUM : case IMGLATUN : ConvertToInt (ret_val, ToBeFilled); break; case IMGLATMIN : case IMGLATMAX : case IMGLATDEL : ConvertToFloat (ret_val, ToBeFilled); break; case IMGLATDEF : ConvertToCharPtr (ret_val, ToBeFilled); break; case IMGSTORAGE : ConvertToCharPtr (ret_val, ToBeFilled); break; case IMGNUMSWPS : ConvertToInt (ret_val, ToBeFilled); break; case SCANSCFSEN : ConvertToInt (ret_val, ToBeFilled); break; case VSCANSCFSEN : ConvertToInt (ret_val, ToBeFilled); break; case VSCANUBSCFSEN : ConvertToInt (ret_val, ToBeFilled); break; case SRCFLAG : ConvertToChar (ret_val, ToBeFilled); break; case MOMENTMASS : ConvertToFloat (ret_val, ToBeFilled); break; case VUNIT : ConvertToInt (ret_val, ToBeFilled); break; case VDIFFUNIT : ConvertToInt (ret_val, ToBeFilled); break; case MOMENTCHARGE : ConvertToInt (ret_val, ToBeFilled); break; case FLOWINTO : ConvertToChar (ret_val, ToBeFilled); break; case GRPSEN : ConvertToIntList (ret_val, ToBeFilled); break; case TOTALUNITS : ConvertToInt (ret_val, ToBeFilled); break; case NUNITSUSEP : ConvertToInt (ret_val, ToBeFilled); break; case USEDUNITNUMS : ConvertToIntList (ret_val, ToBeFilled); break; case TENSORRANK : ConvertToInt (ret_val, ToBeFilled); break; case DIMENNAME : ConvertToCharPtr (ret_val, ToBeFilled); break; case DIMENID : ConvertToInt (ret_val, ToBeFilled); break; case DIMENSIZE : ConvertToInt (ret_val, ToBeFilled); break; case DIMENVALUES : ConvertToFloatList (ret_val, ToBeFilled); break; case CSDEFAULT : ConvertToCharPtr (ret_val, ToBeFilled); break; case CSNUMTRANSFER : ConvertToInt (ret_val, ToBeFilled); break; case CSTRANSFERUNIT : ConvertToCharPtrs (ret_val, ToBeFilled); break; default: printf ("newRead - unknown what!\n"); abort (); } } int PIDF_Return_Code (PIDF what, SDDAS_INT DataType) { int ret_val; switch (what) { case BININDEX : ret_val = FORMAT_ERR_BIN_INDEX; break; case BINMETHOD : ret_val = FORMAT_ERR_BIN_METHOD; break; case COMPNAME : ret_val = FORMAT_ERR_COMPNAM; break; case COMPNAMES : ret_val = FORMAT_ERR_COMPNAM; break; case DEFAULTMAX : ret_val = FORMAT_ERR_UNIT_MIN_MAX; break; case DEFAULTMIN : ret_val = FORMAT_ERR_UNIT_MIN_MAX; break; case DEPEN : ret_val = FORMAT_ERR_PHI_DEPEN; break; case DIMEN : ret_val = FORMAT_ERR_DIMEN; break; case DISPLAY : ret_val = FORMAT_ERR_SEN_DISPLAY; break; case EXP : ret_val = FORMAT_ERR_EXPER; break; case GRPNUM : ret_val = FORMAT_ERR_GRPNUM; break; case INST : ret_val = FORMAT_ERR_INST; break; case INSTITUTE : ret_val = FORMAT_ERR_INSTITUTE; break; case LONGDESC : ret_val = FORMAT_ERR_LONGDESC; break; case MASK : ret_val = FORMAT_ERR_DTMASK; break; case MISS : ret_val = FORMAT_ERR_MISSION; break; case MODIFY : ret_val = FORMAT_ERR_MODIFY; break; case NAME : ret_val = FORMAT_ERR_NAME; break; case NAMES : ret_val = FORMAT_ERR_NAMES; break; case NSETS : ret_val = FORMAT_ERR_NSETS; break; case NUMBININDEX : ret_val = FORMAT_ERR_BIN_NUM; break; case NUMINGRP : ret_val = FORMAT_ERR_NGRP; break; case NUMTBLAPP : ret_val = FORMAT_ERR_NUMTBLAPP; break; case NUMOF : ret_val = FORMAT_ERR_NUM_OF; break; case NUNITS : ret_val = FORMAT_ERR_NUNIT; break; case PIDFTYPE : ret_val = FORMAT_ERR_PIDFTYPE; break; case PLTAVL : ret_val = FORMAT_ERR_PLTAVL; break; case PROJ : ret_val = FORMAT_ERR_PROJECT; break; case SCALING : ret_val = FORMAT_ERR_UNIT_SCALING; break; case SCFPATH : ret_val = FORMAT_ERR_SCFPATH; break; case SENNAMES : ret_val = FORMAT_ERR_SENNAM; break; case PIDFNUM : ret_val = FORMAT_ERR_PIDF_NUM; break; case SENSETS : ret_val = FORMAT_ERR_CAL_NUMS; break; case SHORTDESC : ret_val = FORMAT_ERR_SHORTDESC; break; case SHORTNAME : ret_val = FORMAT_ERR_SHORTDESC; break; case SPACING : ret_val = FORMAT_ERR_BIN_SPACING; break; case START : case STOP : switch (DataType) { case MASS : ret_val = FORMAT_ERR_AVG_MIN_MAX; break; case CHARGE : ret_val = FORMAT_ERR_CHARGE_MIN_MAX; break; case PHI : ret_val = FORMAT_ERR_PHI_MIN_MAX; break; case THETA : ret_val = FORMAT_ERR_THETA_MIN_MAX; break; case SCAN : ret_val = FORMAT_ERR_SCAN_MIN_MAX; break; default : ret_val = PIDF_UNK_DT; break; } break; case SWPNDX : ret_val = FORMAT_ERR_SWP_NDX; break; case TABLEAPP : ret_val = FORMAT_ERR_TBLAPP; break; case TBLAPPOPS : ret_val = FORMAT_ERR_TBLAPPOPERS; break; case UNITID : ret_val = FORMAT_ERR_UNIT_ID; break; case UNITNUM : ret_val = INVALID_UNIT_NUM; break; case UNITNUMS : ret_val = INVALID_UNIT_NUM; break; case UNITFMT : ret_val = FORMAT_ERR_UNITFMT; break; case UNITLAB : ret_val = FORMAT_ERR_UNITLAB; break; case VARUNITFMT : ret_val = FORMAT_ERR_VAR_UNIT_FMT; break; case VARUNITNUM : ret_val = FORMAT_ERR_VAR_UNIT_NUM; break; case VARUNITUBNUM : ret_val = FORMAT_ERR_VAR_UNIT_UB_NUM; break; case VERSION : ret_val = FORMAT_ERR_VERSION; break; case VIDFNUM : ret_val = FORMAT_ERR_VIDF_NUM; break; case VINST : ret_val = FORMAT_ERR_VINST; break; case IMGFMT : ret_val = FORMAT_ERR_IMG_FORMAT; break; case IMGTYPE : ret_val = FORMAT_ERR_IMG_TYPE; break; case IMGBIN : ret_val = FORMAT_ERR_IMG_NUMLOC; break; case IMGLONGLOC : ret_val = FORMAT_ERR_IMG_LONGLOC; break; case IMGLONGNUM : ret_val = FORMAT_ERR_IMG_LONGNUM; break; case IMGLONGUN : ret_val = FORMAT_ERR_IMG_LONGMMD; break; case IMGLONGMIN : ret_val = FORMAT_ERR_IMG_LONGMMD; break; case IMGLONGMAX : ret_val = FORMAT_ERR_IMG_LONGMMD; break; case IMGLONGDEL : ret_val = FORMAT_ERR_IMG_LONGMMD; break; case IMGLONGDEF : ret_val = FORMAT_ERR_IMG_LONGMMD; break; case IMGLATLOC : ret_val = FORMAT_ERR_IMG_LATLOC; break; case IMGLATNUM : ret_val = FORMAT_ERR_IMG_LATNUM; break; case IMGLATUN : ret_val = FORMAT_ERR_IMG_LATMMD; break; case IMGLATMIN : ret_val = FORMAT_ERR_IMG_LATMMD; break; case IMGLATMAX : ret_val = FORMAT_ERR_IMG_LATMMD; break; case IMGLATDEL : ret_val = FORMAT_ERR_IMG_LATMMD; break; case IMGLATDEF : ret_val = FORMAT_ERR_IMG_LATMMD; break; case IMGSTORAGE : ret_val = FORMAT_ERR_IMG_STORAGE; break; case IMGNUMSWPS : ret_val = FORMAT_ERR_IMG_NUMSWPS; break; case SCANSCFSEN : ret_val = FORMAT_ERR_SCAN_SCF_SEN; break; case VSCANSCFSEN : ret_val = FORMAT_ERR_V_SCAN_SCF_SEN; break; case VSCANUBSCFSEN : ret_val = FORMAT_ERR_V_SCAN_UB_SCF_SEN; break; case SRCFLAG : switch (DataType) { case SENSOR : ret_val = FORMAT_ERR_SEN_SRCFLAG; break; case CAL_DATA : ret_val = FORMAT_ERR_CAL_SRCFLAG; break; default : ret_val = PIDF_UNK_DT; break; } break; case MOMENTSDEF : ret_val = FORMAT_ERR_MOMENTS_DEFINED; break; case MOMENTMASS : ret_val = FORMAT_ERR_MOMENTS_MASS; break; case VUNIT : ret_val = FORMAT_ERR_VUNIT; break; case VDIFFUNIT : ret_val = FORMAT_ERR_VDIFF_UNIT; break; case MOMENTCHARGE : ret_val = FORMAT_ERR_MOMENTS_CHARGE; break; case FLOWINTO : ret_val = FORMAT_ERR_FLOW_INTO; break; case NUNITSUSEP : ret_val = FORMAT_ERR_SCPOT_NUNITS_USE; break; case USEDUNITNUMS : ret_val = FORMAT_ERR_USED_UNIT_NUM; break; case TENSORDEF : ret_val = FORMAT_ERR_TENSOR_DEFINED; break; case TENSORRANK : ret_val = FORMAT_ERR_TENSOR_RANK; break; case DIMENNAME : ret_val = FORMAT_ERR_TENSOR_DNAME; break; case DIMENID : ret_val = FORMAT_ERR_TENSOR_DID; break; case DIMENSIZE : ret_val = FORMAT_ERR_TENSOR_DSIZE; break; case DIMENVALUES : ret_val = FORMAT_ERR_TENSOR_DVALUES; break; case CSDEF : ret_val = FORMAT_ERR_CS_DEFINED; break; case CSDEFAULT : ret_val = FORMAT_ERR_CS_DEFAULT; break; case CSNUMTRANSFER : ret_val = FORMAT_ERR_CS_NUM_TRANSFER; break; case CSTRANSFERUNIT : ret_val = FORMAT_ERR_CS_TRANSFER_UNIT; break; default : ret_val = PIDF_UNK_WHAT; } return ret_val; }