📄 gsegyformatwizard.c
字号:
return G_SEGY_FORMAT_WIZARD_GET_PRIVATE (self)->format_name;}const gchar* g_segy_format_wizard_get_short_name (GSEGYFormatWizard *self) { return G_SEGY_FORMAT_WIZARD_GET_PRIVATE (self)->short_format_name;}const gchar* g_segy_format_wizard_get_files_name (GSEGYFormatWizard *self) { return G_SEGY_FORMAT_WIZARD_GET_PRIVATE (self)->files_name;}GPtrArray* g_segy_format_wizard_get_files_extensions (GSEGYFormatWizard *self) { return G_SEGY_FORMAT_WIZARD_GET_PRIVATE (self)->files_extensions;}guint16 g_segy_format_wizard_get_ebcdic_header_size (GSEGYFormatWizard *self) { return G_SEGY_FORMAT_WIZARD_GET_PRIVATE (self)->ebcdic_header_size;}guint16 g_segy_format_wizard_get_binary_header_size (GSEGYFormatWizard *self) { return G_SEGY_FORMAT_WIZARD_GET_PRIVATE (self)->binary_header_size;}guint16 g_segy_format_wizard_get_trace_header_size (GSEGYFormatWizard *self) { return G_SEGY_FORMAT_WIZARD_GET_PRIVATE (self)->trace_header_size;}guint16 g_segy_format_wizard_get_binary_header_number_of_fields (GSEGYFormatWizard *self) { return G_SEGY_FORMAT_WIZARD_GET_PRIVATE (self)->binary_header_desc->len - 1;}guint16 g_segy_format_wizard_get_trace_header_number_of_fields (GSEGYFormatWizard *self) { return G_SEGY_FORMAT_WIZARD_GET_PRIVATE (self)->trace_header_desc->len - 1;}static gboolean g_segy_format_wizard_decode_data_to_guint16 (GSEGYEndianess *endianess, GSEGYHeaderFieldType type, guint8 *input, guint16 *output) { guint16 temp_guint16; gint16 temp_gint16; guint32 temp_guint32; gint32 temp_gint32; gfloat temp_gfloat; switch ((guint8)type) { case (G_SEGY_HEADER_FIELD_UINT8): case (G_SEGY_HEADER_FIELD_INT8): *output = *input; return TRUE; case (G_SEGY_HEADER_FIELD_UINT16): g_segy_endianess_swap_guint16 (endianess, (guint16*)input, &temp_guint16); *output = temp_guint16; return TRUE; case (G_SEGY_HEADER_FIELD_INT16): g_segy_endianess_swap_gint16 (endianess, (gint16*)input, &temp_gint16); *output = temp_gint16; return TRUE; case (G_SEGY_HEADER_FIELD_UINT32): g_segy_endianess_swap_guint32 (endianess, (guint32*)input, &temp_guint32); *output = temp_guint32; return TRUE; case (G_SEGY_HEADER_FIELD_INT32): g_segy_endianess_swap_gint32 (endianess, (gint32*)input, &temp_gint32); *output = temp_gint32; return TRUE; case (G_SEGY_HEADER_FIELD_IEEE_FLOAT): g_segy_endianess_swap_ieee_float (endianess, (guint32*)input, (guint32*)&temp_gfloat); *output = temp_gfloat; return TRUE; case (G_SEGY_HEADER_FIELD_IBM_FLOAT): g_segy_endianess_ibm_to_ieee (endianess, (guint32*)input, (guint32*)&temp_gfloat); *output = temp_gfloat; return TRUE; } return FALSE;}gboolean g_segy_format_wizard_get_sample_format_id (GSEGYFormatWizard *self, guint8 *binary_header, guint8 *sample_id, guint8 *sample_size) { GSEGYFormatWizardPrivate *private = G_SEGY_FORMAT_WIZARD_GET_PRIVATE (self); GSEGYBinaryHeaderField *sample_field = g_ptr_array_index (private->binary_header_desc, private->bin_sample_format); guint16 sample_id_value; if (!binary_header || !sample_id) return FALSE; g_segy_format_wizard_decode_data_to_guint16 (private->endianess, sample_field->type, &binary_header[sample_field->offset], &sample_id_value); switch (sample_id_value) { case (1): *sample_id = G_SEGY_HEADER_FIELD_IBM_FLOAT; *sample_size = 4; return TRUE; case (2): *sample_id = G_SEGY_HEADER_FIELD_INT32; *sample_size = 4; return TRUE; case (3): *sample_id = G_SEGY_HEADER_FIELD_INT16; *sample_size = 2; return TRUE; case (4): *sample_id = G_SEGY_HEADER_FIELD_GAIN_CODE; *sample_size = 4; return TRUE; case (5): *sample_id = G_SEGY_HEADER_FIELD_IEEE_FLOAT; *sample_size = 4; return TRUE; case (8): *sample_id = G_SEGY_HEADER_FIELD_INT8; *sample_size = 1; return TRUE; }#ifdef DEBUG g_print ("Failed to determine sample format. The code is %" G_GUINT16_FORMAT "\n", sample_id_value);#endif return FALSE;}gboolean g_segy_format_wizard_get_default_sample_format_id (GSEGYFormatWizard *self, guint8 *sample_id, guint8 *sample_size) { GSEGYFormatWizardPrivate *private = G_SEGY_FORMAT_WIZARD_GET_PRIVATE (self); *sample_id = private->default_sample_id; *sample_size = private->default_sample_size; return TRUE;}gboolean g_segy_format_wizard_get_sample_interval_from_bin (GSEGYFormatWizard *self, guint8 *binary_header, guint16 *sample_interval) { GSEGYFormatWizardPrivate *private = G_SEGY_FORMAT_WIZARD_GET_PRIVATE (self); if (!binary_header || !sample_interval || 0 == private->binary_header_size) return FALSE; GSEGYBinaryHeaderField *sample_interval_field = g_ptr_array_index (private->binary_header_desc, private->bin_sample_interval); g_segy_format_wizard_decode_data_to_guint16 (private->endianess, sample_interval_field->type, &binary_header[sample_interval_field->offset], sample_interval); return TRUE;}gboolean g_segy_format_wizard_get_number_of_samples_from_bin (GSEGYFormatWizard *self, guint8 *binary_header, guint16 *number_of_samples) { GSEGYFormatWizardPrivate *private = G_SEGY_FORMAT_WIZARD_GET_PRIVATE (self); if (!binary_header || !number_of_samples || 0 == private->binary_header_size) return FALSE; GSEGYBinaryHeaderField *number_of_samples_field = g_ptr_array_index (private->binary_header_desc, private->bin_number_of_samples); g_segy_format_wizard_decode_data_to_guint16 (private->endianess, number_of_samples_field->type, &binary_header[number_of_samples_field->offset], number_of_samples); return TRUE;}gboolean g_segy_format_wizard_get_number_of_samples (GSEGYFormatWizard *self, guint8 *trace_header, guint16 *number_of_samples) { GSEGYFormatWizardPrivate *private = G_SEGY_FORMAT_WIZARD_GET_PRIVATE (self); GSEGYTraceHeaderField *number_of_samples_field = g_ptr_array_index (private->trace_header_desc, private->trc_number_of_samples); if (!trace_header || !number_of_samples) return FALSE; g_segy_format_wizard_decode_data_to_guint16 (private->endianess, number_of_samples_field->type, &trace_header[number_of_samples_field->offset], number_of_samples); return TRUE;}gboolean g_segy_format_wizard_get_first_sample_value (GSEGYFormatWizard *self, guint8 *trace_header, guint16 *first_sample_value) { GSEGYFormatWizardPrivate *private = G_SEGY_FORMAT_WIZARD_GET_PRIVATE (self); GSEGYTraceHeaderField *first_sample_value_field = g_ptr_array_index (private->trace_header_desc, private->trc_first_sample_value); if (!trace_header || !first_sample_value) return FALSE; g_segy_format_wizard_decode_data_to_guint16 (private->endianess, first_sample_value_field->type, &trace_header[first_sample_value_field->offset], first_sample_value); return TRUE;}gboolean g_segy_format_wizard_get_sample_interval (GSEGYFormatWizard *self, guint8 *trace_header, guint16 *sample_interval) { GSEGYFormatWizardPrivate *private = G_SEGY_FORMAT_WIZARD_GET_PRIVATE (self); GSEGYTraceHeaderField *sample_interval_field = g_ptr_array_index (private->trace_header_desc, private->trc_sample_interval); if (!trace_header || !sample_interval) return FALSE; g_segy_format_wizard_decode_data_to_guint16 (private->endianess, sample_interval_field->type, &trace_header[sample_interval_field->offset], sample_interval); return TRUE;}static void g_segy_format_wizard_decode_one_field (GSEGYEndianess *endianess, guint8 type, guint16 length, guint8 *input, guint8 *output) { guint16 i; switch (type) { case G_SEGY_HEADER_FIELD_UINT8: case G_SEGY_HEADER_FIELD_INT8: if (output != input) *output = *input; break; case G_SEGY_HEADER_FIELD_UINT16: g_segy_endianess_swap_guint16 (endianess, (guint16*)input, (guint16*)output); break; case G_SEGY_HEADER_FIELD_INT16: g_segy_endianess_swap_gint16 (endianess, (gint16*)input, (gint16*)output); break; case G_SEGY_HEADER_FIELD_UINT32: g_segy_endianess_swap_guint32 (endianess, (guint32*)input, (guint32*)output); break; case G_SEGY_HEADER_FIELD_INT32: g_segy_endianess_swap_gint32 (endianess, (gint32*)input, (gint32*)output); break; case G_SEGY_HEADER_FIELD_IEEE_FLOAT: g_segy_endianess_swap_ieee_float (endianess, (guint32*)input, (guint32*)output); break; case G_SEGY_HEADER_FIELD_IBM_FLOAT: g_segy_endianess_ibm_to_ieee (endianess, (guint32*)input, (guint32*)output); break; case G_SEGY_HEADER_FIELD_GAIN_CODE: g_segy_endianess_gain_code_to_float (endianess, (guint32*)input, (guint32*)output); break; case G_SEGY_HEADER_FIELD_ARRAY_OF_UINT8: case G_SEGY_HEADER_FIELD_ARRAY_OF_INT8: if (output != input) { for (i = 0; i < length; i++) output[i] = input[i]; } break; case G_SEGY_HEADER_FIELD_ARRAY_OF_UINT16: g_segy_endianess_swap_guint16_array (endianess, (guint16*)input, (guint16*)output, length / sizeof (guint16)); break; case G_SEGY_HEADER_FIELD_ARRAY_OF_INT16: g_segy_endianess_swap_gint16_array (endianess, (gint16*)input, (gint16*)output, length / sizeof (gint16)); break; case G_SEGY_HEADER_FIELD_ARRAY_OF_UINT32: g_segy_endianess_swap_guint32_array (endianess, (guint32*)input, (guint32*)output, length / sizeof (guint32)); break; case G_SEGY_HEADER_FIELD_ARRAY_OF_INT32: g_segy_endianess_swap_gint32_array (endianess, (gint32*)input, (gint32*)output, length / sizeof (gint32)); break; case G_SEGY_HEADER_FIELD_ARRAY_OF_IEEE_FLOAT: g_segy_endianess_swap_ieee_float_array (endianess, (guint32*)input, (guint32*)output, length / sizeof (gfloat)); break; case G_SEGY_HEADER_FIELD_ARRAY_OF_IBM_FLOAT: g_segy_endianess_ibm_to_ieee_array (endianess, (guint32*)input, (guint32*)output, length / sizeof (gfloat)); break; case G_SEGY_HEADER_FIELD_ARRAY_OF_GAIN_CODE: g_segy_endianess_gain_code_to_float_array (endianess, (guint32*)input, (guint32*)output, length / sizeof (gfloat)); break; }}void g_segy_format_wizard_decode_ebcdic_header (GSEGYFormatWizard *self, guint8 *input_header, guint8 *output_header) { GSEGYFormatWizardPrivate *private = G_SEGY_FORMAT_WIZARD_GET_PRIVATE (self); if (!input_header || !output_header) return; g_segy_endianess_ebcdic_to_ascii_array (private->endianess, input_header, output_header, private->ebcdic_header_size);}void g_segy_format_wizard_decode_binary_header (GSEGYFormatWizard *self, guint8 *input_header, guint8 *output_header) { GSEGYFormatWizardPrivate *private = G_SEGY_FORMAT_WIZARD_GET_PRIVATE (self); guint16 i = 0; if (!input_header || !output_header) return; while (segy_rev1_binary_header[i].title) { g_segy_format_wizard_decode_one_field (private->endianess, segy_rev1_binary_header[i].type, segy_rev1_binary_header[i].size, &input_header[segy_rev1_binary_header[i].offset], &output_header[segy_rev1_binary_header[i].offset]); i++; }}void g_segy_format_wizard_decode_trace_header (GSEGYFormatWizard *self, guint8 *input_header, guint8 *output_header) { GSEGYFormatWizardPrivate *private = G_SEGY_FORMAT_WIZARD_GET_PRIVATE (self); guint16 i = 0; if (!input_header || !output_header) return; while (segy_rev1_trace_header[i].title) { g_segy_format_wizard_decode_one_field (private->endianess, segy_rev1_trace_header[i].type, segy_rev1_trace_header[i].size, &input_header[segy_rev1_trace_header[i].offset], &output_header[segy_rev1_trace_header[i].offset]); i++; }}void g_segy_format_wizard_decode_sorting_fields (GSEGYFormatWizard *self, guint8 *input_fields, guint8 *output_fields) { GSEGYFormatWizardPrivate *private = G_SEGY_FORMAT_WIZARD_GET_PRIVATE (self); guint16 i = 0; GSEGYSortingField *sort_field; if (!input_fields || !output_fields) return; sort_field = g_ptr_array_index (private->sorting_fields_desc, i); while (sort_field) { g_segy_format_wizard_decode_one_field (private->endianess, sort_field->field_desc->type, sort_field->field_desc->size, &input_fields[sort_field->field_desc->offset], &output_fields[sort_field->offset]); i++; sort_field = g_ptr_array_index (private->sorting_fields_desc, i); }}GPtrArray* g_segy_format_wizard_get_binary_header_fields_desc (GSEGYFormatWizard *self) { GSEGYFormatWizardPrivate *private = G_SEGY_FORMAT_WIZARD_GET_PRIVATE (self); return private->bin_fields_desc;}GPtrArray* g_segy_format_wizard_get_trace_header_fields_desc (GSEGYFormatWizard *self) { GSEGYFormatWizardPrivate *private = G_SEGY_FORMAT_WIZARD_GET_PRIVATE (self); return private->fields_desc;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -