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

📄 gsegyformatwizard.c

📁 segy 显示程序!希望能给正在做这部分朋友提供一部分资料
💻 C
📖 第 1 页 / 共 4 页
字号:
}GPtrArray* g_segy_format_wizard_get_trace_header_fields_names (GSEGYFormatWizard *self) {    GSEGYFormatWizardPrivate *private = G_SEGY_FORMAT_WIZARD_GET_PRIVATE (self);    return private->fields_names;}GPtrArray* g_segy_format_wizard_get_sorting_fields_names (GSEGYFormatWizard *self) {    GSEGYFormatWizardPrivate *private = G_SEGY_FORMAT_WIZARD_GET_PRIVATE (self);    return private->sorting_fields_names;}guint16 g_segy_format_wizard_get_sorting_desc_size (GSEGYFormatWizard *self) {    GSEGYFormatWizardPrivate *private = G_SEGY_FORMAT_WIZARD_GET_PRIVATE (self);    return private->sorting_desc_size;}guint16 g_segy_format_wizard_get_number_of_sorting_fields (GSEGYFormatWizard *self) {    GSEGYFormatWizardPrivate *private = G_SEGY_FORMAT_WIZARD_GET_PRIVATE (self);    return private->sorting_fields_desc->len - 1;}guint16 g_segy_format_wizard_get_sorting_field_offset (GSEGYFormatWizard *self, guint16 field_number) {    GSEGYFormatWizardPrivate *private = G_SEGY_FORMAT_WIZARD_GET_PRIVATE (self);    GSEGYSortingField *sort_field;    if (field_number >= private->sorting_fields_desc->len)        return 0;    sort_field = g_ptr_array_index (private->sorting_fields_desc, field_number - 1);    return sort_field->offset;}#define call_next_link(data) ((GCompareDataFunc)((gpointer*)data)[0]) ((gconstpointer)(((gpointer*)data)[1]), \                                                                       (gconstpointer)(((gpointer*)data)[2]), \                                                                       (gpointer)(((gpointer*)data)[3]))#define G_SEGY_FORMAT_WIZARD_DEFINE_COMPARE_ASC_FUNC(type) \static gint g_segy_format_wizard_compare_##type##_asc_func (gconstpointer a, gconstpointer b, gpointer user_data) { \    if (*(g##type*)a < *(g##type*)b) \        return -1; \    else if (*(g##type*)a > *(g##type*)b) \        return 1; \    else { \        if (NULL == user_data) \            return 0; \        return call_next_link (user_data); \    } \}#define G_SEGY_FORMAT_WIZARD_DEFINE_COMPARE_DESC_FUNC(type) \static gint g_segy_format_wizard_compare_##type##_desc_func (gconstpointer a, gconstpointer b, gpointer user_data) { \    if (*(g##type*)a > *(g##type*)b) \        return -1; \    else if (*(g##type*)a < *(g##type*)b) \        return 1; \    else { \        if (NULL == user_data) \            return 0; \        return call_next_link (user_data); \    } \}G_SEGY_FORMAT_WIZARD_DEFINE_COMPARE_ASC_FUNC (uint8)G_SEGY_FORMAT_WIZARD_DEFINE_COMPARE_DESC_FUNC (uint8)G_SEGY_FORMAT_WIZARD_DEFINE_COMPARE_ASC_FUNC (int8)G_SEGY_FORMAT_WIZARD_DEFINE_COMPARE_DESC_FUNC (int8)G_SEGY_FORMAT_WIZARD_DEFINE_COMPARE_ASC_FUNC (uint16)G_SEGY_FORMAT_WIZARD_DEFINE_COMPARE_DESC_FUNC (uint16)G_SEGY_FORMAT_WIZARD_DEFINE_COMPARE_ASC_FUNC (int16)G_SEGY_FORMAT_WIZARD_DEFINE_COMPARE_DESC_FUNC (int16)G_SEGY_FORMAT_WIZARD_DEFINE_COMPARE_ASC_FUNC (uint32)G_SEGY_FORMAT_WIZARD_DEFINE_COMPARE_DESC_FUNC (uint32)G_SEGY_FORMAT_WIZARD_DEFINE_COMPARE_ASC_FUNC (int32)G_SEGY_FORMAT_WIZARD_DEFINE_COMPARE_DESC_FUNC (int32)G_SEGY_FORMAT_WIZARD_DEFINE_COMPARE_ASC_FUNC (float)G_SEGY_FORMAT_WIZARD_DEFINE_COMPARE_DESC_FUNC (float)GCompareDataFunc g_segy_format_wizard_get_compare_func_for_sorting_field (GSEGYFormatWizard *self,                                                                          gint16 field_number,                                                                          gboolean ascending) {    GSEGYFormatWizardPrivate *private = G_SEGY_FORMAT_WIZARD_GET_PRIVATE (self);    GSEGYSortingField *sort_field;    if (field_number <= 0 || field_number >= private->sorting_fields_desc->len)        return NULL;    sort_field = g_ptr_array_index (private->sorting_fields_desc, field_number - 1);    switch (sort_field->field_desc->type) {        case G_SEGY_HEADER_FIELD_UINT8:            return ascending ? g_segy_format_wizard_compare_uint8_asc_func : g_segy_format_wizard_compare_uint8_desc_func;        case G_SEGY_HEADER_FIELD_INT8:            return ascending ? g_segy_format_wizard_compare_int8_asc_func : g_segy_format_wizard_compare_int8_desc_func;        case G_SEGY_HEADER_FIELD_UINT16:            return ascending ? g_segy_format_wizard_compare_uint16_asc_func : g_segy_format_wizard_compare_uint16_desc_func;        case G_SEGY_HEADER_FIELD_INT16:            return ascending ? g_segy_format_wizard_compare_int16_asc_func : g_segy_format_wizard_compare_int16_desc_func;        case G_SEGY_HEADER_FIELD_UINT32:            return ascending ? g_segy_format_wizard_compare_uint32_asc_func : g_segy_format_wizard_compare_uint32_desc_func;        case G_SEGY_HEADER_FIELD_INT32:            return ascending ? g_segy_format_wizard_compare_int32_asc_func : g_segy_format_wizard_compare_int32_desc_func;        case G_SEGY_HEADER_FIELD_IEEE_FLOAT:        case G_SEGY_HEADER_FIELD_IBM_FLOAT:        case G_SEGY_HEADER_FIELD_GAIN_CODE:            return ascending ? g_segy_format_wizard_compare_float_asc_func : g_segy_format_wizard_compare_float_desc_func;        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:            return NULL;    }    return NULL;}void g_segy_format_wizard_get_labels_for_binary_header (GSEGYFormatWizard *self, guint8 *binary_header,                                                        GStringChunk **chunk, GPtrArray **labels) {    GSEGYFormatWizardPrivate *private = G_SEGY_FORMAT_WIZARD_GET_PRIVATE (self);    gchar gbuffer[G_ASCII_DTOSTR_BUF_SIZE];    GSEGYBinaryHeaderField *binary_header_field;    guint i;    if (NULL == chunk || NULL == labels || NULL == binary_header)        return;    if (NULL == *chunk)        *chunk = g_string_chunk_new (1 << 12);    if (NULL == *labels)        *labels = g_ptr_array_new ();    for (i = 0; i < private->binary_header_desc->len; i++) {        binary_header_field = (GSEGYBinaryHeaderField*)g_ptr_array_index (private->binary_header_desc, i);        switch (binary_header_field->type) {            case G_SEGY_HEADER_FIELD_UINT8:                g_snprintf (gbuffer, G_ASCII_DTOSTR_BUF_SIZE, "%hhu", *(guint8*)&binary_header[binary_header_field->offset]);                g_ptr_array_add (*labels, g_string_chunk_insert_const (*chunk, gbuffer));                break;            case G_SEGY_HEADER_FIELD_INT8:                g_snprintf (gbuffer, G_ASCII_DTOSTR_BUF_SIZE, "%hhd", *(gint8*)&binary_header[binary_header_field->offset]);                g_ptr_array_add (*labels, g_string_chunk_insert_const (*chunk, gbuffer));                break;            case G_SEGY_HEADER_FIELD_UINT16:                g_snprintf (gbuffer, G_ASCII_DTOSTR_BUF_SIZE, "%"G_GINT16_MODIFIER"u", *(guint16*)&binary_header[binary_header_field->offset]);                g_ptr_array_add (*labels, g_string_chunk_insert_const (*chunk, gbuffer));                break;            case G_SEGY_HEADER_FIELD_INT16:                g_snprintf (gbuffer, G_ASCII_DTOSTR_BUF_SIZE, "%"G_GINT16_MODIFIER"d", *(gint16*)&binary_header[binary_header_field->offset]);                g_ptr_array_add (*labels, g_string_chunk_insert_const (*chunk, gbuffer));                break;            case G_SEGY_HEADER_FIELD_UINT32:                g_snprintf (gbuffer, G_ASCII_DTOSTR_BUF_SIZE, "%"G_GINT32_MODIFIER"u", *(guint32*)&binary_header[binary_header_field->offset]);                g_ptr_array_add (*labels, g_string_chunk_insert_const (*chunk, gbuffer));                break;            case G_SEGY_HEADER_FIELD_INT32:                g_snprintf (gbuffer, G_ASCII_DTOSTR_BUF_SIZE, "%"G_GINT32_MODIFIER"d", *(guint32*)&binary_header[binary_header_field->offset]);                g_ptr_array_add (*labels, g_string_chunk_insert_const (*chunk, gbuffer));                break;            case G_SEGY_HEADER_FIELD_IEEE_FLOAT:            case G_SEGY_HEADER_FIELD_GAIN_CODE:            case G_SEGY_HEADER_FIELD_IBM_FLOAT:                g_snprintf (gbuffer, G_ASCII_DTOSTR_BUF_SIZE, "%f", *(gfloat*)&binary_header[binary_header_field->offset]);                g_ptr_array_add (*labels, g_string_chunk_insert_const (*chunk, gbuffer));                break;            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_get_labels_for_trace_header (GSEGYFormatWizard *self, guint8 *trace_header,                                                       GStringChunk **chunk, GPtrArray **labels) {    GSEGYFormatWizardPrivate *private = G_SEGY_FORMAT_WIZARD_GET_PRIVATE (self);    gchar gbuffer[G_ASCII_DTOSTR_BUF_SIZE];    GSEGYTraceHeaderField *trace_header_field;    guint i;    if (NULL == chunk || NULL == labels || NULL == trace_header)        return;    if (NULL == *chunk)        *chunk = g_string_chunk_new (1 << 12);    if (NULL == *labels)        *labels = g_ptr_array_new ();    for (i = 0; i < private->trace_header_desc->len; i++) {        trace_header_field = (GSEGYTraceHeaderField*)g_ptr_array_index (private->trace_header_desc, i);        switch (trace_header_field->type) {            case G_SEGY_HEADER_FIELD_UINT8:                g_snprintf (gbuffer, G_ASCII_DTOSTR_BUF_SIZE, "%hhu", *(guint8*)&trace_header[trace_header_field->offset]);                g_ptr_array_add (*labels, g_string_chunk_insert_const (*chunk, gbuffer));                break;            case G_SEGY_HEADER_FIELD_INT8:                g_snprintf (gbuffer, G_ASCII_DTOSTR_BUF_SIZE, "%hhd", *(gint8*)&trace_header[trace_header_field->offset]);                g_ptr_array_add (*labels, g_string_chunk_insert_const (*chunk, gbuffer));                break;            case G_SEGY_HEADER_FIELD_UINT16:                g_snprintf (gbuffer, G_ASCII_DTOSTR_BUF_SIZE, "%"G_GINT16_MODIFIER"u", *(guint16*)&trace_header[trace_header_field->offset]);                g_ptr_array_add (*labels, g_string_chunk_insert_const (*chunk, gbuffer));                break;            case G_SEGY_HEADER_FIELD_INT16:                g_snprintf (gbuffer, G_ASCII_DTOSTR_BUF_SIZE, "%"G_GINT16_MODIFIER"d", *(gint16*)&trace_header[trace_header_field->offset]);                g_ptr_array_add (*labels, g_string_chunk_insert_const (*chunk, gbuffer));                break;            case G_SEGY_HEADER_FIELD_UINT32:                g_snprintf (gbuffer, G_ASCII_DTOSTR_BUF_SIZE, "%"G_GINT32_MODIFIER"u", *(guint32*)&trace_header[trace_header_field->offset]);                g_ptr_array_add (*labels, g_string_chunk_insert_const (*chunk, gbuffer));                break;            case G_SEGY_HEADER_FIELD_INT32:                g_snprintf (gbuffer, G_ASCII_DTOSTR_BUF_SIZE, "%"G_GINT32_MODIFIER"d", *(guint32*)&trace_header[trace_header_field->offset]);                g_ptr_array_add (*labels, g_string_chunk_insert_const (*chunk, gbuffer));                break;            case G_SEGY_HEADER_FIELD_IEEE_FLOAT:            case G_SEGY_HEADER_FIELD_GAIN_CODE:            case G_SEGY_HEADER_FIELD_IBM_FLOAT:                g_snprintf (gbuffer, G_ASCII_DTOSTR_BUF_SIZE, "%f", *(gfloat*)&trace_header[trace_header_field->offset]);                g_ptr_array_add (*labels, g_string_chunk_insert_const (*chunk, gbuffer));                break;            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_get_label_for_sorting_field (GSEGYFormatWizard *self, guint16 field_number,                                                       guint32 trace_index, GArray *sorting_content,                                                       gchar *gbuffer, guint32 buffer_len) {    GSEGYFormatWizardPrivate *private = G_SEGY_FORMAT_WIZARD_GET_PRIVATE (self);    GSEGYSortingField *sort_field;    if (NULL == gbuffer || 0 == buffer_len || 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:            data = &(g_array_index (sorting_content, guint8, trace_index * private->sorting_desc_size));            g_snprintf (gbuffer, buffer_len, "%hhu", *(guint8*)&data[sort_field->offset]);            break;        case G_SEGY_HEADER_FIELD_INT8:            data = &(g_array_index (sorting_content, guint8, trace_index * private->sorting_desc_size));            g_snprintf (gbuffer, buffer_len, "%hhd", *(gint8*)&data[sort_field->offset]);            break;        case G_SEGY_HEADER_FIELD_UINT16:            data = &(g_array_index (sorting_content, guint8, trace_index * private->sorting_desc_size));            g_snprintf (gbuffer, buffer_len, "%"G_GINT16_MODIFIER"u", *(guint16*)&data[sort_field->offset]);            break;        case G_SEGY_HEADER_FIELD_INT16:            data = &(g_array_index (sorting_content, guint8, trace_index * private->sorting_desc_size));            g_snprintf (gbuffer, buffer_len, "%"G_GINT16_MODIFIER"d", *(gint16*)&data[sort_field->offset]);            break;        case G_SEGY_HEADER_FIELD_UINT32:            data = &(g_array_index (sorting_content, guint8, trace_index * private->sorting_desc_size));            g_snprintf (gbuffer, buffer_len, "%"G_GINT32_MODIFIER"u", *(guint32*)&data[sort_field->offset]);            break;        case G_SEGY_HEADER_FIELD_INT32:            data = &(g_array_index (sorting_content, guint8, trace_index * private->sorting_desc_size));            g_snprintf (gbuffer, buffer_len, "%"G_GINT32_MODIFIER"d", *(guint32*)&data[sort_field->offset]);            break;        case G_SEGY_HEADER_FIELD_IEEE_FLOAT:            data = &(g_array_index (sorting_content, guint8, trace_index * private->sorting_desc_size));            g_snprintf (gbuffer, buffer_len, "%f", *(gfloat*)&data[sort_field->offset]);            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:

⌨️ 快捷键说明

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