⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gsegyformatwizard.c

📁 segy 显示程序!希望能给正在做这部分朋友提供一部分资料
💻 C
📖 第 1 页 / 共 4 页
字号:
    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 + -