add eas3_param_names linked list and functionality to extend

eas3_add_param_name
also add eas3_free_data
This commit is contained in:
Gregor Weiss 2024-10-16 10:19:30 +02:00
parent ae7d48c458
commit b48525b8e4
Signed by: Gregor Weiss
GPG key ID: 61E170A8BBFE5756
2 changed files with 100 additions and 0 deletions

View file

@ -332,6 +332,23 @@
uint64_t udef_real_size; uint64_t udef_real_size;
} eas3_std_params; } eas3_std_params;
/*----------------------------------------------------------------------------------------------*\
! !
! DESCRIPTION: !
! ------------ !
! !
! This structure is used to store field names eas3 file. !
! !
\*----------------------------------------------------------------------------------------------*/
typedef struct name
{
char name[24]; // Parameter name.
uint8 id; // Parameter index.
struct name *next; // Next element in linked-list.
struct name *root; // Linked-list root.
} eas3_param_names;
/*----------------------------------------------------------------------------------------------*\ /*----------------------------------------------------------------------------------------------*\
! ! ! !
! DESCRIPTION: ! ! DESCRIPTION: !
@ -342,6 +359,7 @@
\*----------------------------------------------------------------------------------------------*/ \*----------------------------------------------------------------------------------------------*/
typedef struct typedef struct
{ {
eas3_param_names *param_names;
eas3_std_params params; eas3_std_params params;
struct field struct field

View file

@ -586,6 +586,88 @@ endian_conversion(void *value,
} }
} }
/*----------------------------------------------------------------------------------------------------------*\
! !
! DESCRIPTION: !
! ------------ !
! This function deallocates the data structure used to store an numerical dataset !
! and can be called if an error occurs or once the data is no longer needed is to be closed. !
! The deallocation will be carried out down to the structure levels that have been allocated. !
! !
\*----------------------------------------------------------------------------------------------------------*/
void
eas3_free_data(eas3_data* data)
{
if(data)
{
if(data->aux)
{
free(data->aux->memory);
data->aux->access = NULL;
data->aux->position = 0;
data->aux->size = 0;
// TODO: remove
data->aux->L = 0;
}
free(data->aux);
free(data);
}
}
void
eas3_add_param_name(eas3_data *const data, char *name)
{
eas3_param_names *param_names;
assert(data);
param_names = &data->param_names;
/*--------------------------------------------------------*\
! Check if the specified parameter name has the proper !
! length. !
\*--------------------------------------------------------*/
if((strlen(name) > 24) && name)
{
fprintf(stderr, "o==========================================================o\n"\
"| WARNING: Invalid parameter name: %-24s|\n"\
"| |\n"\
"| Parameter names cannot exceed 24 characters. |\n"\
"| |\n"\
"o==========================================================o\n",name);
}
/*--------------------------------------------------------*\
! Check if the parameter structure has already been allo- !
! cated. !
\*--------------------------------------------------------*/
if(data->param_names == NULL)
{
/*--------------------------------------------------------*\
! If eas3_add_param_name function is called for the first !
! time, allocate the parameter structure and save the root !
! node address. !
\*--------------------------------------------------------*/
data->param_names = calloc(1, sizeof(eas3_param_names));
data->param_names->root = data->param_names;
}
else
{
/*--------------------------------------------------------*\
! If a new parameter is added, allocate the nex linked !
! list node, save the root node address in its structure !
! and set the linked list access pointer to the new node. !
\*--------------------------------------------------------*/
data->param_names->next = calloc(1, sizeof(eas3_param_names));
data->param_names->next->root = data->param_names->root;
data->param_names->next->id = data->param_names->id + 1;
data->param_names = data->param_names->next;
}
/*--------------------------------------------------------*\
! Save the name of the new parameter its precision in the !
! structure of the new node. !
\*--------------------------------------------------------*/
strcpy(data->param_names->name, name ? name : "undefined");
}
/*----------------------------------------------------------------------------------------------------------*\ /*----------------------------------------------------------------------------------------------------------*\
! FUNCTION NAME: uchar read_eas3_header(bwc_data *const data) ! ! FUNCTION NAME: uchar read_eas3_header(bwc_data *const data) !
! -------------- ! ! -------------- !