?? gsegyformatwizard.c
字號:
}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 + -