#ident "@(#) ParseOldVIDF.c 1.5 05/08/19 SwRI" #include #include #include #include #include #include #include #include "old_local_defs.h" #include "old_vidf_str.h" #include "vidf_codes.h" #include "SDDAS_types.h" /******************************************************************************* * * * ParseOldVIDF SUBROUTINE * * * * DESCRIPTION * * This routine is called to indicate how the information from the VIDF file* * is to be accessed, that is, held in memory or read from disk for each * * element. * * * * INPUT VARIABLES * * VIDF_INFO buffer to place information * * filename filename to read from * * * * USAGE * * x = ParseOldVIDF (vidf_info *VIDF_INFO, filename) * * * * * * NECESSARY SUBPROGRAMS * * lseek() moves the file pointer to a location within * * the file * * read() reads N bytes from the file associated with * * the file descriptor given * * malloc() allocates memory * * free () frees previously allocated memory * * strncmp () compares two strings byte-by-byte up to a * * maximum number of bytes * * * * EXTERNAL VARIABLES * * None * * * * INTERNAL VARIABLES * * off_t ret_val holds value returned by LSEEK() * * SDDAS_LONG bytes the number of bytes to read/lseek * * * * SUBSYSTEM * * Display Level * * * ******************************************************************************/ SDDAS_SHORT ir_size[72] = { _MISSION_, _SPACECRAFT_, _EXP_DESC_, _INST_DESC_, _CONTACT_, _NUM_COMNTS_, _COMMENTS_, _DS_YEAR_, _DS_DAY_, _DS_MSEC_, _DS_USEC_, _DE_YEAR_, _DE_DAY_, _DE_MSEC_, _DE_USEC_, _SMP_ID_, _SEN_MODE_, _N_QUAL_, _CAL_SETS_, _NUM_TBLS_, _NUM_CONSTS_, _STATUS_, _PA_DEFINED_, _SEN_, _SWP_LEN_, _MAX_NSS_, _DATA_LEN_, _FILL_FLG_, _FILL_, _DA_METHOD_, _STATUS_NAME_, _STATES_, _SEN_NAME_, _CAL_NAMES_, _QUAL_NAME_, _PA_FORMAT_, _PA_PROJECT_, _PA_MISSION_, _PA_EXPER_, _PA_INST_, _PA_VINST_, _PA_BXBYBZ_, _PA_APPS_, _PA_TBLS_, _PA_OPS_, _D_TYPE_, _TDW_LEN_, _SEN_STATUS_, _TIME_OFF_, _CAL_USE_, _CAL_WLEN_, _CAL_TARGET_, _TBL_SCA_SZ_, _TBL_ELE_SZ_, _TBL_TYPE_, _TBL_DESC_LEN_, _TBL_DESC_, _TBL_VAR_, _TBL_EXPAND_, _CRIT_ACT_SZ_, _CRIT_STATUS_, _CRIT_OFF_, _CRIT_ACTION_, _TBL_FMT_, _TBL_OFF_, _TBL_SCA_, _TBL_, _CONST_ID_, _CONST_DESC_LEN_, _CONST_DESC_, _CONST_SCA_, _CONST_ }; SDDAS_SHORT ParseOldVIDF (vidf_info * VIDF_INFO, char *filename) { off_t ret_val; SDDAS_LONG bytes; int fdi; /***********************************************************************/ /* The VIDF information has not been loaded yet. */ /***********************************************************************/ fdi = open (filename, O_RDONLY | O_BINARY); if (fdi == -1) return (VIDF_NOT_READABLE); /* 8 characters are read for the version string. */ VIDF_INFO->info_off += 8; ret_val = lseek (fdi, 0, SEEK_SET); if (ret_val == -1) return (INIT_VIDF_BAD_VERSION); read (fdi, (char *) VIDF_INFO->version, 8); VIDF_INFO->version[8] = 0; if (strncmp (VIDF_INFO->version, "V2.1", 4) != 0) { close (fdi); return (INIT_VIDF_BAD_VERSION); } else { read (fdi, (char *) &bytes, sizeof (SDDAS_LONG)); VIDF_INFO->info_off += bytes + sizeof (SDDAS_LONG); read (fdi, (char *) VIDF_INFO->offsets, bytes); read (fdi, (char *) &VIDF_INFO->TABLES, sizeof (SDDAS_LONG)); VIDF_INFO->info_off += sizeof (SDDAS_LONG); read (fdi, (char *) &bytes, sizeof (SDDAS_LONG)); if ((VIDF_INFO->tbl_offs = malloc (bytes)) == NULL) return (INIT_VIDF_TBL_MALLOC); else { VIDF_INFO->info_off += bytes + sizeof (SDDAS_LONG); read (fdi, (char *) VIDF_INFO->tbl_offs, bytes); read (fdi, (char *) &VIDF_INFO->CONSTS, sizeof (SDDAS_LONG)); VIDF_INFO->info_off += sizeof (SDDAS_LONG); read (fdi, (char *) &bytes, sizeof (SDDAS_LONG)); if ((VIDF_INFO->const_offs = malloc (bytes)) == NULL) return (INIT_VIDF_CONST_MALLOC); else { VIDF_INFO->info_off += bytes + sizeof (SDDAS_LONG); read (fdi, (char *) VIDF_INFO->const_offs, bytes); VIDF_INFO->info_off += sizeof (SDDAS_LONG); } } read (fdi, (char *) &bytes, sizeof (SDDAS_LONG)); if ((VIDF_INFO->vidf_data = malloc (bytes)) != NULL) read (fdi, (char *) VIDF_INFO->vidf_data, bytes); close (fdi); } return (ALL_OKAY); }