亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? gsegyfileaccessor.c

?? segy 顯示程序!希望能給正在做這部分朋友提供一部分資料
?? C
?? 第 1 頁 / 共 3 頁
字號:
/* 
 * GSEGYLIB - Library for accessing files in SEG-Y format
 *
 * Copyright (C) 2005-2006 Vladimir Bashkardin
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as
 * published by the Free Software Foundation; either version 2 of the
 * License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * General Public License for more av.
 *
 * You should have received a copy of the GNU General Public
 * License along with this program; if not, write to the
 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
 * Boston, MA 02111-1307, USA.
 *
 * Author:  Vladimir Bashkardin  <vovizmus@users.sourceforge.net>
 */

#include <stdio.h>

#ifdef LINUX
#include <sys/types.h>
#include <unistd.h>
#define LSEEK_ERR (off_t)-1
#elif WIN32
#include <io.h>
#define lseek _lseeki64
#define LSEEK_ERR -1L
#endif

#include "gsegyfileaccessor.h"
#include "gsegyfile_marshal.h"

G_DEFINE_TYPE (GSEGYFileAccessor, g_segy_file_accessor, G_TYPE_OBJECT)

#define G_SEGY_FILE_ACCESSOR_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE((obj), G_SEGY_TYPE_FILE_ACCESSOR, GSEGYFileAccessorPrivate))

typedef struct _GSEGYFileAccessorPrivate GSEGYFileAccessorPrivate;

struct _GSEGYFileAccessorPrivate {
    GSEGYFormatWizard *format_wizard;
    GIOChannel *io_channel;
    GMutex     *file_mutex;

    guint8  *ebcdic_header;
    guint16  ebcdic_header_size;
    guint8  *binary_header;
    guint16  binary_header_size;
    guint16  trace_header_size;

    guint8   sample_id;
    guint8   sample_size;
    guint16  number_of_samples;
    guint16  first_sample_value;
    guint16  sample_interval;

    GArray  *sorting_contents;
    guint16  sorting_element_size;

    GArray  *trace_positions;

    guint8  *trace_buffer;
    guint32  trace_buffer_size;

    guint8 *sorting_data_buffer;
};

static gboolean g_segy_file_accessor_scan_fraction_signal (GSEGYFileAccessor *self, gfloat fraction, GSEGYFileError *file_error) {
    gboolean return_value;

    g_signal_emit (self, G_SEGY_GET_FILE_ACCESSOR_CLASS (self)->scan_fraction_id, 0, fraction, file_error, &return_value);
    return return_value;
}

static gboolean g_segy_file_accessor_initial_read (GSEGYFileAccessor *self, GSEGYFileError *file_error) {
    GSEGYFileAccessorPrivate *private = G_SEGY_FILE_ACCESSOR_GET_PRIVATE (self);
    gsize bytes_read = 0;
    GError *gerror = NULL;
    GIOStatus status;
    guint16 number_of_samples;
    guint64 trace_position, prev_trace_position;
    guint64 total_size = 0;
    guint64 seek_pos = 0;
    gint fd;
    gboolean continue_scan = TRUE;

    if (0 == private->trace_buffer_size) {
        private->trace_buffer_size = (G_MAXINT16 + 1) * sizeof (gfloat);
        private->trace_buffer = (guint8*)g_malloc (private->trace_buffer_size);
    }

    if (file_error) {
        file_error->gerror = NULL;
        file_error->id = G_SEGY_FILE_NO_ERROR;
    }

    fd = g_io_channel_unix_get_fd (private->io_channel);

#if defined LINUX || defined WIN32
    if (private->file_mutex)
        g_mutex_lock (private->file_mutex);

    total_size = lseek (fd, 0, SEEK_END);
    if (total_size != (guint64)LSEEK_ERR) {
#ifdef DEBUG
        g_printf ("File size: %"G_GUINT64_FORMAT"\n", total_size);
#endif
        lseek (fd, 0, SEEK_SET);
    } else {
#ifdef DEBUG
        g_printf ("Impossible to determine file size\n");
        total_size = 0;
#endif
    }
#endif

#if defined LINUX || defined WIN32
    lseek (fd, 0, SEEK_SET);
#else
    g_io_channel_seek_position (private->io_channel, 0, G_SEEK_SET, NULL);
    g_io_channel_set_encoding (private->io_channel, NULL, NULL);
#endif

    if (private->ebcdic_header_size) {
#if defined LINUX || defined WIN32
        bytes_read = read (fd, private->ebcdic_header, private->ebcdic_header_size);
        if (!bytes_read && bytes_read != private->ebcdic_header_size) {
            if (private->file_mutex)
                g_mutex_unlock (private->file_mutex);
#else
        status = g_io_channel_read_chars (private->io_channel, private->ebcdic_header,
                                          private->ebcdic_header_size, &bytes_read, &gerror);
        if (G_IO_STATUS_EOF == status || bytes_read != private->ebcdic_header_size) {
#endif
            if (file_error) {
                file_error->id = G_SEGY_FILE_PREMATURE_EOF;
                file_error->gerror = gerror;
            }
            return FALSE;
#if defined LINUX || defined WIN32
        } else if (bytes_read && bytes_read != private->ebcdic_header_size) {
            if (private->file_mutex)
                g_mutex_unlock (private->file_mutex);
#else
        } else if (status != G_IO_STATUS_NORMAL) {
#endif
            if (file_error) {
                file_error->id = G_SEGY_FILE_READ_ERROR;
                file_error->gerror = gerror;
            }
            return FALSE;
        }
#ifdef DEBUG
        g_print ("EBCDIC header read\n");
#endif
        g_segy_format_wizard_decode_ebcdic_header (private->format_wizard, private->ebcdic_header, private->ebcdic_header);

        private->ebcdic_header[private->ebcdic_header_size] = '\0';
    }
    if (private->binary_header_size) {
#if defined LINUX || defined WIN32
        bytes_read = read (fd, private->binary_header, private->binary_header_size);
        if (!bytes_read && bytes_read != private->binary_header_size) {
            if (private->file_mutex)
                g_mutex_unlock (private->file_mutex);
#else
        status = g_io_channel_read_chars (private->io_channel, private->binary_header,
                                          private->binary_header_size, &bytes_read, &gerror);
        if (G_IO_STATUS_EOF == status || bytes_read != private->binary_header_size) {
#endif
            if (file_error) {
                file_error->id = G_SEGY_FILE_PREMATURE_EOF;
                file_error->gerror = gerror;
            }
            g_segy_file_accessor_scan_fraction_signal (self, -1, file_error);
            return FALSE;
#if defined LINUX || defined WIN32
        } else if (bytes_read && bytes_read != private->binary_header_size) {
            if (private->file_mutex)
                g_mutex_unlock (private->file_mutex);
#else
        } else if (status != G_IO_STATUS_NORMAL) {
#endif
            if (file_error) {
                file_error->id = G_SEGY_FILE_READ_ERROR;
                file_error->gerror = gerror;
            }
            g_segy_file_accessor_scan_fraction_signal (self, -1, file_error);
            return FALSE;
        }
#ifdef DEBUG
        g_print ("Binary header read\n");
#endif
        if (FALSE == g_segy_format_wizard_get_sample_format_id (private->format_wizard, private->binary_header, &private->sample_id, &private->sample_size)) {
            if (file_error)
                file_error->id = G_SEGY_FILE_UNKNOW_SAMPLE_ID;
            g_segy_file_accessor_scan_fraction_signal (self, -1, file_error);
#if defined LINUX || defined WIN32
            if (private->file_mutex)
                g_mutex_unlock (private->file_mutex);
#endif
            return FALSE;
        }
#ifdef DEBUG
        g_printf ("Sample format ID: %d (%d bytes)\n", private->sample_id, private->sample_size);
#endif
    } else
        g_segy_format_wizard_get_default_sample_format_id (private->format_wizard, &private->sample_id, &private->sample_size);

    if (NULL == private->sorting_data_buffer)
        private->sorting_data_buffer = (guint8*)g_malloc (private->sorting_element_size);
    trace_position = private->ebcdic_header_size + private->binary_header_size;
    prev_trace_position = trace_position;

    for (;;) {
#if defined LINUX || defined WIN32
        bytes_read = read (fd, private->trace_buffer, private->trace_header_size);
        if (bytes_read != private->trace_header_size) {
            if (private->file_mutex)
                g_mutex_unlock (private->file_mutex);
            if (file_error && bytes_read != 0) {
                    file_error->id = G_SEGY_FILE_PREMATURE_EOF;
#else
        status = g_io_channel_read_chars (private->io_channel, private->trace_buffer, private->trace_header_size,
                                          &bytes_read, &file_error->gerror);
        if (status != G_IO_STATUS_NORMAL || bytes_read != private->trace_header_size) {
            if (file_error && (status != G_IO_STATUS_EOF || bytes_read != 0)) {
                if (status == G_IO_STATUS_EOF && bytes_read != 0)
                    file_error->id = G_SEGY_FILE_PREMATURE_EOF;
                else
                    file_error->id = G_SEGY_FILE_READ_ERROR;                  
#endif
                file_error->gerror = gerror;
                g_segy_file_accessor_scan_fraction_signal (self, -1, file_error);
            }
            break;
        }

        g_segy_format_wizard_get_number_of_samples (private->format_wizard, private->trace_buffer, &number_of_samples);
        if (0 == private->trace_positions->len) {
            g_segy_format_wizard_get_first_sample_value (private->format_wizard, private->trace_buffer,
                                                         &private->first_sample_value);
            g_segy_format_wizard_get_sample_interval (private->format_wizard, private->trace_buffer,
                                                      &private->sample_interval);
            if (number_of_samples > 0 && number_of_samples <= G_MAXINT16)
                private->number_of_samples = number_of_samples;
            else if (private->binary_header_size) {
                g_segy_format_wizard_get_number_of_samples_from_bin (private->format_wizard,
                                                                     private->binary_header,
                                                                     &private->number_of_samples);
                number_of_samples = private->number_of_samples;
            }
            if (0 == private->number_of_samples) {
                if (file_error)
                    file_error->id = G_SEGY_FILE_ZERO_NUMBER_OF_SAMPLES;
                g_segy_file_accessor_scan_fraction_signal (self, -1, file_error);
#if defined LINUX || defined WIN32
                if (private->file_mutex)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
丁香婷婷深情五月亚洲| 久久综合九色综合97婷婷| 国产精品全国免费观看高清 | 在线观看免费视频综合| 国产精品你懂的| 99久久精品一区二区| 国产婷婷色一区二区三区四区 | 91极品美女在线| 亚洲欧美日韩久久| 欧美精品视频www在线观看| 亚洲成人av一区二区三区| 欧美色图天堂网| 日韩影院在线观看| 精品三级在线观看| 国产精品一区二区在线播放| 中文欧美字幕免费| 色香蕉成人二区免费| 亚洲成人久久影院| 欧美va天堂va视频va在线| 国产综合久久久久影院| 国产精品久久夜| 欧美揉bbbbb揉bbbbb| 麻豆成人免费电影| 国产精品入口麻豆九色| 欧美在线视频你懂得| 秋霞影院一区二区| 国产精品久久久一本精品| 国产成人av在线影院| 亚洲视频综合在线| 欧美人与性动xxxx| 激情久久久久久久久久久久久久久久| 久久久国产精品不卡| 色偷偷久久人人79超碰人人澡| 亚洲国产成人porn| 久久亚洲一级片| 色系网站成人免费| 免费观看在线综合| 国产精品久久久久一区| 在线观看中文字幕不卡| 久久精品理论片| 麻豆极品一区二区三区| 欧美国产精品劲爆| 欧美性大战久久久久久久蜜臀 | 久久亚洲一级片| 在线观看欧美精品| 国产麻豆精品95视频| 青青国产91久久久久久| 日韩欧美国产电影| 91免费观看视频| 精品午夜久久福利影院| 亚洲综合小说图片| 欧美国产一区视频在线观看| 欧美蜜桃一区二区三区| 国产一区999| 婷婷一区二区三区| 亚洲色图一区二区| 国产亚洲精品bt天堂精选| 欧美日韩一级黄| 91香蕉视频在线| 国产成人在线视频网站| 美女尤物国产一区| 香港成人在线视频| 亚洲综合成人在线| 国产欧美视频一区二区| 欧美成人免费网站| 91精品国产综合久久久久久久 | 久久99精品久久久久| 亚洲图片激情小说| 中文幕一区二区三区久久蜜桃| 精品国产免费视频| 日韩写真欧美这视频| 欧美精品乱码久久久久久按摩| 色八戒一区二区三区| 99精品视频在线观看免费| 国产一区二区久久| 狠狠网亚洲精品| 久久机这里只有精品| 免费不卡在线观看| 看电影不卡的网站| 久久99精品国产麻豆婷婷洗澡| 日本va欧美va欧美va精品| 天使萌一区二区三区免费观看| 亚洲一区二三区| 亚洲在线视频一区| 亚洲国产另类av| 亚欧色一区w666天堂| 午夜精品爽啪视频| 无码av中文一区二区三区桃花岛| 亚洲资源在线观看| 日一区二区三区| 免费在线一区观看| 精品午夜久久福利影院| 国产精品 欧美精品| 国产精品88888| 成人一道本在线| 99国产精品久久久久久久久久| 99久久婷婷国产综合精品电影| 99视频热这里只有精品免费| 91麻豆123| 欧美日韩情趣电影| 日韩一区二区影院| 国产亚洲欧美在线| 亚洲三级在线看| 亚洲综合在线第一页| 日日夜夜免费精品视频| 成人做爰69片免费看网站| 蜜桃一区二区三区在线观看| 韩国一区二区三区| 成人高清视频在线| 在线区一区二视频| 日韩欧美中文字幕精品| 2020国产成人综合网| 久久久久国产精品人| 亚洲欧洲www| 亚洲123区在线观看| 老司机精品视频在线| 国产福利一区二区三区视频在线| proumb性欧美在线观看| 欧美午夜精品理论片a级按摩| 91精品国产综合久久福利| 国产亚洲欧洲997久久综合| 亚洲激情成人在线| 久久精品国产亚洲一区二区三区| 国产成人一区二区精品非洲| 色婷婷狠狠综合| 欧美一区二区三区影视| 国产精品无圣光一区二区| 亚洲午夜私人影院| 国产伦精品一区二区三区免费| 91一区二区三区在线观看| 欧美日产国产精品| 日本一区二区三区在线不卡| 亚洲综合视频网| 国产精品羞羞答答xxdd| 在线观看免费视频综合| 欧美国产乱子伦| 欧美aa在线视频| 色欧美片视频在线观看| 26uuu精品一区二区在线观看| 亚洲精品精品亚洲| 精品一区二区三区免费观看| 日本高清不卡一区| 国产日韩影视精品| 免费成人美女在线观看.| 一本大道久久a久久精二百| 久久综合久久综合久久综合| 亚洲一二三区视频在线观看| 国产·精品毛片| 日韩精品专区在线影院重磅| 亚洲人成影院在线观看| 国产伦精品一区二区三区免费迷| 欧美日韩一区二区三区视频| 国产精品久久久久影院色老大| 精品一区二区免费在线观看| 欧美日韩国产精选| 亚洲欧美aⅴ...| 丁香桃色午夜亚洲一区二区三区| 在线综合+亚洲+欧美中文字幕| 亚洲精品一二三四区| 成人午夜看片网址| 2017欧美狠狠色| 精品在线观看免费| 91精品国产综合久久国产大片| 亚洲线精品一区二区三区八戒| 色综合一个色综合亚洲| 国产精品视频免费| 国产成人精品1024| 久久久精品欧美丰满| 捆绑调教美女网站视频一区| 亚洲午夜精品久久久久久久久| 国产真实乱子伦精品视频| 制服丝袜成人动漫| 日韩黄色片在线观看| 欧美日高清视频| 日韩高清不卡一区二区| 欧美视频一区在线观看| 亚洲图片一区二区| 欧美日韩精品一区二区三区四区| 亚洲精品免费在线观看| 91美女片黄在线观看91美女| 综合久久久久综合| 色婷婷av久久久久久久| 亚洲综合视频在线| 欧美激情在线看| 成人av网在线| 亚洲欧美电影院| 欧美日韩视频第一区| 天堂成人国产精品一区| 日韩欧美高清一区| 精品亚洲国产成人av制服丝袜| 久久久精品综合| 成人成人成人在线视频| 亚洲人午夜精品天堂一二香蕉| 欧美在线你懂的| 日本午夜一本久久久综合| 精品日韩在线一区| 国产suv精品一区二区6| 亚洲日本在线a| 欧美老女人在线| 国产中文字幕一区|