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

📄 gsegyformatwizard.c

📁 segy 显示程序!希望能给正在做这部分朋友提供一部分资料
💻 C
📖 第 1 页 / 共 4 页
字号:
        case G_SEGY_HEADER_FIELD_ARRAY_OF_INT16:        case G_SEGY_HEADER_FIELD_ARRAY_OF_UINT32:        case G_SEGY_HEADER_FIELD_ARRAY_OF_INT32:        case G_SEGY_HEADER_FIELD_ARRAY_OF_IEEE_FLOAT:        case G_SEGY_HEADER_FIELD_ARRAY_OF_IBM_FLOAT:        case G_SEGY_HEADER_FIELD_ARRAY_OF_GAIN_CODE:        case G_SEGY_HEADER_FIELD_ARRAY_OF_CHAR:        case G_SEGY_HEADER_FIELD_UNASSIGNED:            break;    }    return;}void g_segy_format_wizard_get_labels_for_sorting_field (GSEGYFormatWizard *self, guint16 field_number,                                                        GArray *traces_indices, GArray *sorting_content,                                                        GStringChunk **chunk, GPtrArray **labels) {    GSEGYFormatWizardPrivate *private = G_SEGY_FORMAT_WIZARD_GET_PRIVATE (self);    GSEGYSortingField *sort_field;    gchar gbuffer[G_ASCII_DTOSTR_BUF_SIZE];    guint i;    if (NULL == chunk || NULL == labels)        return;    *chunk = NULL;    *labels = NULL;    if (0 == field_number || field_number >= private->sorting_fields_desc->len)        return;    sort_field = g_ptr_array_index (private->sorting_fields_desc, field_number - 1);    guint8 *data;    switch (sort_field->field_desc->type) {        case G_SEGY_HEADER_FIELD_UINT8:            *chunk = g_string_chunk_new (1 << 12);            *labels = g_ptr_array_new ();            for (i = 0; i < traces_indices->len; i++) {                data = &(g_array_index (sorting_content, guint8, g_array_index (traces_indices, guint32, i) *                                                                 private->sorting_desc_size));                g_snprintf (gbuffer, G_ASCII_DTOSTR_BUF_SIZE, "%hhu", *(guint8*)&data[sort_field->offset]);                g_ptr_array_add (*labels, g_string_chunk_insert_const (*chunk, gbuffer));            }            break;        case G_SEGY_HEADER_FIELD_INT8:            *chunk = g_string_chunk_new (1 << 12);            *labels = g_ptr_array_new ();            for (i = 0; i < traces_indices->len; i++) {                data = &(g_array_index (sorting_content, guint8, g_array_index (traces_indices, guint32, i) *                                                                 private->sorting_desc_size));                g_snprintf (gbuffer, G_ASCII_DTOSTR_BUF_SIZE, "%hhd", *(gint8*)&data[sort_field->offset]);                g_ptr_array_add (*labels, g_string_chunk_insert_const (*chunk, gbuffer));            }            break;        case G_SEGY_HEADER_FIELD_UINT16:            *chunk = g_string_chunk_new (1 << 12);            *labels = g_ptr_array_new ();            for (i = 0; i < traces_indices->len; i++) {                data = &(g_array_index (sorting_content, guint8, g_array_index (traces_indices, guint32, i) *                                                                 private->sorting_desc_size));                g_snprintf (gbuffer, G_ASCII_DTOSTR_BUF_SIZE, "%"G_GINT16_MODIFIER"u", *(guint16*)&data[sort_field->offset]);                g_ptr_array_add (*labels, g_string_chunk_insert_const (*chunk, gbuffer));            }            break;        case G_SEGY_HEADER_FIELD_INT16:            *chunk = g_string_chunk_new (1 << 12);            *labels = g_ptr_array_new ();            for (i = 0; i < traces_indices->len; i++) {                data = &(g_array_index (sorting_content, guint8, g_array_index (traces_indices, guint32, i) *                                                                 private->sorting_desc_size));                g_snprintf (gbuffer, G_ASCII_DTOSTR_BUF_SIZE, "%"G_GINT16_MODIFIER"d", *(gint16*)&data[sort_field->offset]);                g_ptr_array_add (*labels, g_string_chunk_insert_const (*chunk, gbuffer));            }            break;        case G_SEGY_HEADER_FIELD_UINT32:            *chunk = g_string_chunk_new (1 << 12);            *labels = g_ptr_array_new ();            for (i = 0; i < traces_indices->len; i++) {                data = &(g_array_index (sorting_content, guint8, g_array_index (traces_indices, guint32, i) *                                                                 private->sorting_desc_size));                g_snprintf (gbuffer, G_ASCII_DTOSTR_BUF_SIZE, "%"G_GINT32_MODIFIER"u", *(guint32*)&data[sort_field->offset]);                g_ptr_array_add (*labels, g_string_chunk_insert_const (*chunk, gbuffer));            }            break;        case G_SEGY_HEADER_FIELD_INT32:            *chunk = g_string_chunk_new (1 << 12);            *labels = g_ptr_array_new ();            for (i = 0; i < traces_indices->len; i++) {                data = &(g_array_index (sorting_content, guint8, g_array_index (traces_indices, guint32, i) *                                                                 private->sorting_desc_size));                g_snprintf (gbuffer, G_ASCII_DTOSTR_BUF_SIZE, "%"G_GINT32_MODIFIER"d", *(guint32*)&data[sort_field->offset]);                g_ptr_array_add (*labels, g_string_chunk_insert_const (*chunk, gbuffer));            }            break;        case G_SEGY_HEADER_FIELD_IEEE_FLOAT:            *chunk = g_string_chunk_new (1 << 12);            *labels = g_ptr_array_new ();            for (i = 0; i < traces_indices->len; i++) {                data = &(g_array_index (sorting_content, guint8, g_array_index (traces_indices, guint32, i) *                                                                 private->sorting_desc_size));                g_snprintf (gbuffer, G_ASCII_DTOSTR_BUF_SIZE, "%f", *(gfloat*)&data[sort_field->offset]);                g_ptr_array_add (*labels, g_string_chunk_insert_const (*chunk, gbuffer));            }            break;        case G_SEGY_HEADER_FIELD_IBM_FLOAT:        case G_SEGY_HEADER_FIELD_GAIN_CODE:        case G_SEGY_HEADER_FIELD_ARRAY_OF_UINT8:        case G_SEGY_HEADER_FIELD_ARRAY_OF_INT8:        case G_SEGY_HEADER_FIELD_ARRAY_OF_UINT16:        case G_SEGY_HEADER_FIELD_ARRAY_OF_INT16:        case G_SEGY_HEADER_FIELD_ARRAY_OF_UINT32:        case G_SEGY_HEADER_FIELD_ARRAY_OF_INT32:        case G_SEGY_HEADER_FIELD_ARRAY_OF_IEEE_FLOAT:        case G_SEGY_HEADER_FIELD_ARRAY_OF_IBM_FLOAT:        case G_SEGY_HEADER_FIELD_ARRAY_OF_GAIN_CODE:        case G_SEGY_HEADER_FIELD_ARRAY_OF_CHAR:        case G_SEGY_HEADER_FIELD_UNASSIGNED:            break;    }    return;}void g_segy_format_wizard_decode_trace (GSEGYFormatWizard *self, guint8 sample_id, guint32 samples_num,                                        guint8 *input_trace_buffer, gfloat *output_trace_buffer) {    GSEGYFormatWizardPrivate *private = G_SEGY_FORMAT_WIZARD_GET_PRIVATE (self);    guint32 i;    if (NULL == input_trace_buffer || NULL == output_trace_buffer)        return;    switch (sample_id) {        case (G_SEGY_HEADER_FIELD_UINT8):            for (i = 0; i < samples_num; i++)                output_trace_buffer[i] = (gfloat)input_trace_buffer[i];            return;        case (G_SEGY_HEADER_FIELD_INT8):            for (i = 0; i < samples_num; i++)                output_trace_buffer[i] = (gfloat)(gint8)input_trace_buffer[i];            return;        case (G_SEGY_HEADER_FIELD_UINT16):            g_segy_endianess_swap_guint16_array (private->endianess, (guint16*)input_trace_buffer,                                                 (guint16*)input_trace_buffer, samples_num);            for (i = 0; i < samples_num; i++)                output_trace_buffer[i] = (gfloat)((guint16*)input_trace_buffer)[i];            return;        case (G_SEGY_HEADER_FIELD_INT16):            g_segy_endianess_swap_gint16_array (private->endianess, (gint16*)input_trace_buffer,                                                (gint16*)input_trace_buffer, samples_num);            for (i = 0; i < samples_num; i++)                output_trace_buffer[i] = (gfloat)((gint16*)input_trace_buffer)[i];            return;        case (G_SEGY_HEADER_FIELD_UINT32):            g_segy_endianess_swap_guint32_array (private->endianess, (guint32*)input_trace_buffer,                                                 (guint32*)input_trace_buffer, samples_num);            for (i = 0; i < samples_num; i++)                output_trace_buffer[i] = (gfloat)((guint32*)input_trace_buffer)[i];            return;        case (G_SEGY_HEADER_FIELD_INT32):            g_segy_endianess_swap_gint32_array (private->endianess, (gint32*)input_trace_buffer,                                                (gint32*)input_trace_buffer, samples_num);            for (i = 0; i < samples_num; i++)                output_trace_buffer[i] = (gfloat)((gint32*)input_trace_buffer)[i];            return;        case (G_SEGY_HEADER_FIELD_IEEE_FLOAT):            g_segy_endianess_swap_ieee_float_array (private->endianess, (guint32*)input_trace_buffer,                                                    (guint32*)output_trace_buffer, samples_num);            return;        case (G_SEGY_HEADER_FIELD_IBM_FLOAT):            g_segy_endianess_ibm_to_ieee_array (private->endianess, (guint32*)input_trace_buffer,                                                (guint32*)output_trace_buffer, samples_num);            return;        case (G_SEGY_HEADER_FIELD_GAIN_CODE):            g_segy_endianess_gain_code_to_float_array (private->endianess, (guint32*)input_trace_buffer,                                                       (guint32*)output_trace_buffer, samples_num);            return;    }    return;}static void g_segy_format_wizard_init (GSEGYFormatWizard *self) {    GSEGYFormatWizardPrivate *private = G_SEGY_FORMAT_WIZARD_GET_PRIVATE (self);    private->endianess = NULL;    private->format_name = NULL;    private->short_format_name = NULL;    private->files_name = NULL;    private->files_extensions = g_ptr_array_new ();    private->binary_header_desc = g_ptr_array_new ();    private->trace_header_desc = g_ptr_array_new ();    private->bin_fields_desc = g_ptr_array_new ();    private->fields_desc = g_ptr_array_new ();    private->fields_names = g_ptr_array_new ();    private->sorting_fields_names = g_ptr_array_new ();    private->sorting_fields_desc = g_ptr_array_new ();    private->free_ptr_arrays = TRUE;#ifdef DEBUG    g_print ("<GSEGYFormatWizard is inited>\n");#endif}static void g_segy_format_wizard_finalize (GObject *object) {    GSEGYFormatWizardPrivate *private = G_SEGY_FORMAT_WIZARD_GET_PRIVATE (G_SEGY_FORMAT_WIZARD (object));    guint i;    if (private->format_name)        g_free ((gchar*)private->format_name);    if (private->short_format_name)        g_free ((gchar*)private->short_format_name);    if (private->files_name)        g_free ((gchar*)private->files_name);    for (i = 0; i < private->files_extensions->len; i++)        g_free (g_ptr_array_index (private->files_extensions, i));    g_ptr_array_free (private->files_extensions, TRUE);    for (i = 0; i < private->sorting_fields_desc->len - 1; i++)        g_free (g_ptr_array_index (private->sorting_fields_desc, i));/* To be implemented when we have cusomizeable file formats *//*  if (private->free_ptr_arrays) {            }*/    g_ptr_array_free (private->binary_header_desc, TRUE);    g_ptr_array_free (private->trace_header_desc, TRUE);    g_ptr_array_free (private->bin_fields_desc, TRUE);    g_ptr_array_free (private->fields_desc, TRUE);    g_ptr_array_free (private->fields_names, TRUE);    g_ptr_array_free (private->sorting_fields_names, TRUE);    g_ptr_array_free (private->sorting_fields_desc, TRUE);    if (private->endianess)        g_object_unref (G_OBJECT (private->endianess));#ifdef DEBUG    g_print ("<GSEGYFormatWizard is finalized>\n");#endif    if (G_OBJECT_CLASS (g_segy_format_wizard_parent_class)->finalize)        G_OBJECT_CLASS (g_segy_format_wizard_parent_class)->finalize (object);}enum {    PROP_0,    PROP_ENDIANESS};static void g_segy_format_wizard_set_property (GObject *object, guint prop_id,                                               const GValue *value, GParamSpec *pspec) {    GSEGYFormatWizardPrivate *private = G_SEGY_FORMAT_WIZARD_GET_PRIVATE (G_SEGY_FORMAT_WIZARD (object));    switch (prop_id) {        case PROP_ENDIANESS: {            GSEGYEndianess *endianess = G_SEGY_ENDIANESS (g_value_get_object (value));            private->endianess = endianess;            g_object_ref (G_OBJECT (private->endianess));            g_segy_format_wizard_setup (G_SEGY_FORMAT_WIZARD (object));            g_object_notify (object, "endianess");            }            break;        default:            G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);            break;    }}static void g_segy_format_wizard_get_property (GObject *object, guint prop_id,                                               GValue *value, GParamSpec *pspec) {    GSEGYFormatWizardPrivate *private = G_SEGY_FORMAT_WIZARD_GET_PRIVATE (G_SEGY_FORMAT_WIZARD (object));    switch (prop_id) {        case PROP_ENDIANESS:            g_value_set_object (value, private->endianess);            break;        default:            G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);            break;    }}static void g_segy_format_wizard_class_init (GSEGYFormatWizardClass *klass) {    GObjectClass *gobject_class = G_OBJECT_CLASS (klass);    gobject_class->finalize = (GObjectFinalizeFunc) g_segy_format_wizard_finalize;    gobject_class->set_property = g_segy_format_wizard_set_property;    gobject_class->get_property = g_segy_format_wizard_get_property;    g_type_class_add_private (klass, sizeof (GSEGYFormatWizardPrivate));    g_object_class_install_property (gobject_class,                                     PROP_ENDIANESS,                                     g_param_spec_object ("endianess", "Endianess",                                     "Object responsible for byte swapping",                                     G_SEGY_TYPE_ENDIANESS,                                     G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));#ifdef DEBUG    g_print ("<GSEGYFormatWizard class is inited>\n");#endif}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -