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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? epr_core.c

?? Insar圖像處理軟件
?? C
字號(hào):
/* * $Id: epr_core.c,v 1.1.1.1 2003/03/05 17:36:43 hartmut Exp $ * * Copyright (C) 2002 by Brockmann Consult (info@brockmann-consult.de) * * 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. This program is distributed in the hope 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 details. * * 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. */#include <assert.h>#include <errno.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include "epr_api.h"#include "epr_core.h"#include "epr_string.h"#include "epr_ptrarray.h"#include "epr_swap.h"#include "epr_field.h"#include "epr_record.h"#include "epr_param.h"#include "epr_dsd.h"#include "epr_msph.h"#include "epr_band.h"#include "epr_bitmask.h"#include "epr_dddb.h"/** * The one and only ENVISAT API instance. */EPR_SAPI epr_api;/*   Function:    epr_str_to_data_type_id   Access:      private API implementation helper   Changelog:   2002/01/05  nf initial version *//** * Converts the given string into a data type identifier. * * @param str the string to be converted. * @return the data type identifier represented by the given string. *         If the string can not be converted the special value *         <code>e_tid_unknown</code> is returned. */EPR_EDataTypeId epr_str_to_data_type_id(const char* str){    assert(str != NULL);    if (epr_equal_names(str, "UChar"))         return e_tid_uchar;    else if (epr_equal_names(str, "AChar"))         return e_tid_char;    else if (epr_equal_names(str, "SChar"))         return e_tid_char;    else if (epr_equal_names(str, "UShort"))         return e_tid_ushort;    else if (epr_equal_names(str, "SShort"))         return e_tid_short;    else if (epr_equal_names(str, "ULong"))         return e_tid_ulong;    else if (epr_equal_names(str, "SLong"))         return e_tid_long;    else if (epr_equal_names(str, "Float"))         return e_tid_float;    else if (epr_equal_names(str, "Double"))         return e_tid_double;    else if (epr_equal_names(str, "@/types/UTC.dd"))         return e_tid_time;    else if (epr_equal_names(str, "String"))         return e_tid_string;    else if (epr_equal_names(str, "Spare"))         return e_tid_spare;    else         return e_tid_unknown;}/*   Function:    epr_get_data_type_size   Access:      private API implementation helper   Changelog:   2002/01/24  nf initial version *//** * Determines the length of the given data type identifier. * * @param data_type_id the data type identifier. * @return the the length of the data type identifier. *         If the data type identifier is unknown, *         <code>e_tid_unknown</code> is returned. */uint epr_get_data_type_size(EPR_EDataTypeId data_type_id){    switch (data_type_id)    {        case e_tid_uchar:            return sizeof(uchar);        case e_tid_char:            return sizeof(char);        case e_tid_ushort:            return sizeof(ushort);        case e_tid_short:            return sizeof(short);        case e_tid_ulong:            return sizeof(ulong);        case e_tid_long:            return sizeof(long);        case e_tid_float:            return sizeof(float);        case e_tid_double:            return sizeof(double);        case e_tid_string:            return sizeof(char);        case e_tid_spare:            return sizeof(uchar);        case e_tid_time:            return sizeof (long)   /* days */                +  sizeof (ulong)  /* seconds */                +  sizeof (ulong); /* microseconds */        default:             return 0;    }}/* * ===================== Logging ============================== *//*   Function:    epr_log   Access:      private API implementation helper   Changelog:   2002/01/05  mp initial version *//** * Logs a message with the given log level. * * <p> The function calls this API's log handler if  * it is not <code>NULL</code> and if the given log * level is greater than or equal to the global log level. *  * @param log_level the log level (or message type) for the mesage * @param log_message the mesage */void epr_log(EPR_ELogLevel log_level, const char* log_message){    if (epr_api.log_handler != NULL && log_level >= epr_api.log_level)         epr_api.log_handler(log_level, log_message);}/* * ===================== Error Handling ============================== *//*   Function:    epr_set_error   Access:      private API implementation helper   Changelog:   2002/01/05  mp initial version *//** * Sets the given error code and the associated error message and * calls this API's error handler if it is not <code>NULL</code>. * * @param err_code the error code * @param err_message the error mesage */void epr_set_err(EPR_EErrCode err_code, const char* err_message){    epr_api.last_err_code = err_code;    epr_assign_string(&epr_api.last_err_message, err_message);    if (epr_api.log_handler != NULL)     {        epr_api.log_handler(e_log_error, err_message);    }    if (epr_api.err_handler != NULL)     {        epr_api.err_handler(err_code, err_message);    }}/*   Function:    epr_set_error   Access:      private API implementation helper   Changelog:   2002/01/05  mp initial version *//** * Clears the last error. After calling this function, calling * <code>epr_get_last_err_code</code> returns <code>e_err_none</code> or zero and  * <code>epr_get_last_err_message</code> returns <code>NULL</code>. */void epr_clear_err(){    epr_api.last_err_code = e_err_none;    epr_free_string(epr_api.last_err_message);    epr_api.last_err_message = NULL;}/*   Function:    epr_get_last_err_code   Access:      private API implementation helper   Changelog:   2002/01/05  nf initial version *//** * Sets the error code of the error that occured during  * the last API function call. * * @return the error code, <code>e_err_none</code> or zero if no error occured */EPR_EErrCode epr_get_last_err_code(){    return epr_api.last_err_code;}/*   Function:    epr_get_last_err_message   Access:      private API implementation helper   Changelog:   2002/01/05  nf initial version *//** * Sets the error message of the error that occured during  * the last API function call. * * @return the error message, <code>NULL</code> if no error occured */const char* epr_get_last_err_message(){    return epr_api.last_err_message;}/** * Opens a file to read. * * @param file_path the path to the file. * * @return the file handle or  *         <code>NULL</code> if an error occured. */FILE* epr_open_file(char* file_path){    FILE* db_file;	epr_log(e_log_debug, "about to open file: ");	epr_log(e_log_debug, file_path);        db_file = fopen(epr_trim_string(file_path), "rb");    if (db_file == NULL)     {                epr_log(e_log_debug, "open failed");        if (errno == ENOENT)         {            epr_set_err(e_err_file_not_found,                     "epr_open_file: file not found");        }        else {            epr_set_err(e_err_file_access_denied,                     "epr_open_file: file open failed");        }    }    /*epr_log(e_log_debug, "open successful");*/    return db_file;}/** * Converts the given string into a long number. * * @param str the string to be converted. * @return the long type number represented by the given string. *         If the string can not be converted,  *         the value of <code>1</code> is returned. */long epr_str_to_number(const char* str){   char   *stopstring;   long   l;   assert(str != NULL);   if (strcmp(str, "*") == 0) return 1;   if (strcmp(str, "") == 0) return 1;    l = strtol( str, &stopstring, 10 );    if (errno == EDOM)     {        epr_set_err(e_err_illegal_conversion,                 "failed to convert string to integer: errno = EDOM");        return -1L;    }    if (errno == ERANGE)     {        epr_set_err(e_err_illegal_conversion,                 "failed to convert string to integer: errno = ERANGE");        return -1L;    }       return l;}/** * Converts the given string into a field length. *  * The string can represent a single integer value or a sequence * of integer value and parameter references (names). Integers  * and value are expected to be separated by the asterisk * character ('*'). E.g. the string "3 * 4 * num_pixels_across" * is represents a valid field length as long as the parameter  * name 'num_pixels_across' is found in the given parameter table. * * @param count the string to be converted * @param product_id the Product identifier containing the values *                    for the Product * @return the field length computed from the given string or *         <code>(uint)-1</code> if an error occured. */uint epr_parse_value_count(EPR_SProductId* product_id, const char* count){    char seps[] = EPR_COUNT_SEPARATOR_ARRAY;    char * token;    char * str;    uint c;    int pos = 0;    uint comes_from_convert;    c = 1;    str = epr_clone_string(count);    if (str == NULL)    {        epr_set_err(e_err_out_of_memory,                    "epr_parse_value_count: cannot allocate memory");        return 16111;/*8999*/  /* @todo check: why in the hell 16111 ? */    }    while ((token = epr_str_tok(str, seps, &pos)) != NULL)     {        comes_from_convert = epr_str_to_number(token);        if (comes_from_convert == 0 && (strcmp(token, "0") != 0))        {            /* check if "token" belongs to param_table*/            comes_from_convert = epr_param_to_value(token, product_id->param_table);            if (comes_from_convert == -1)            {                epr_set_err(e_err_illegal_conversion,                    "epr_parse_value_count: parameter not found");                return 16111; /* @todo check: why in the hell 16111 ? */            }        }        c *= comes_from_convert;        epr_free_string(token);        token = NULL;    }    epr_free_string(str);    return c;}/** * Finds in the param_table the value corresponding to its name. *  * @param str the parameter name * @param param_table the pointer to param_table * * @return the value of the given name or *         <code>(uint)-1</code> if an error occured. */uint epr_param_to_value(const char* str, EPR_SPtrArray* param_table){    EPR_SParamElem* param_elem = NULL;    int elem_index;    int param_table_length;    param_table_length = (int)epr_get_ptr_array_length(param_table);    for (elem_index = 0; elem_index < param_table_length; elem_index++)    {        param_elem = (EPR_SParamElem*)epr_get_ptr_array_elem_at(param_table, elem_index);        if (epr_equal_names(param_elem->param_name, str))        {            return param_elem->param_value;        }    }    return (uint) -1; /*error*/}/** * Adapts path description to operating system. *  * @param path the path to a file. * */void epr_make_os_compatible_path(char* path) {    if (path != NULL)    {        char* pc = path;        while (*pc != '\0')        {#ifdef WIN32            if (*pc == '/')                *pc = '\\';#elif _M_MPPC            if (*pc == '/')                *pc = ':';	/* UK note: the colon is an old-style path separator of the Mac OS */							/* possibly not used any more but supported for Classic compatibility */							/* @to do: check whether the forward slash / should be used in Mac OS X */#else            if (*pc == '\\')                *pc = '/';#endif            pc++;        }    }}boolean epr_check_api_init_flag() {    if (!epr_api.init_flag) {        epr_set_err(e_err_api_not_initialized,                     "epr_open_product: API not initialized (forgot to call epr_init_api?)");        return FALSE;    }    return TRUE;}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91麻豆精品久久久久蜜臀| 久久综合久色欧美综合狠狠| 国产麻豆一精品一av一免费| 亚洲免费观看在线视频| 久久精品一区二区三区不卡| 欧美精品电影在线播放| 色综合久久综合| 国产一区二三区| 日韩福利视频导航| 一区二区欧美在线观看| 国产精品一二三区在线| 中文av一区二区| 制服丝袜成人动漫| 色综合激情久久| 粉嫩欧美一区二区三区高清影视| 香蕉影视欧美成人| 亚洲一区二区欧美激情| 亚洲日本欧美天堂| 国产精品国产馆在线真实露脸| 欧美成人乱码一区二区三区| 欧美三级在线视频| 在线亚洲高清视频| 一本到三区不卡视频| 风流少妇一区二区| 国产盗摄一区二区三区| 激情六月婷婷久久| 精品综合久久久久久8888| 蜜桃精品在线观看| 日本大胆欧美人术艺术动态| 2021中文字幕一区亚洲| 99国产精品久久久久久久久久| 激情深爱一区二区| 久久99精品久久久久婷婷| 奇米影视一区二区三区| 蜜臀av一区二区| 日韩电影在线观看一区| 日韩电影网1区2区| 五月激情综合网| 日韩成人免费电影| 美女网站视频久久| 精品一区二区免费| 国产成人精品综合在线观看 | 粗大黑人巨茎大战欧美成人| 国产精品996| 懂色av一区二区三区免费观看| 成人h精品动漫一区二区三区| 成人aaaa免费全部观看| 91美女视频网站| 在线视频国内一区二区| 欧美高清精品3d| 欧美zozozo| 国产精品久久久久天堂| 一区二区三区波多野结衣在线观看| 一区二区三区av电影| 午夜电影一区二区| 麻豆精品在线视频| 欧美videofree性高清杂交| wwwwxxxxx欧美| 国产精品乱码一区二三区小蝌蚪| 亚洲精品成人少妇| 日本成人中文字幕| 东方欧美亚洲色图在线| 亚洲一区二区三区中文字幕在线| 国产高清亚洲一区| 99久久综合精品| 在线精品观看国产| 欧美一区在线视频| 国产日韩三级在线| 亚洲自拍与偷拍| 国产一区二区三区蝌蚪| 色域天天综合网| 日韩欧美激情一区| 中文字幕亚洲电影| 青青草国产成人av片免费| 成人在线视频一区| 欧美日韩二区三区| 国产女人水真多18毛片18精品视频 | 裸体健美xxxx欧美裸体表演| 成人久久18免费网站麻豆 | 韩国av一区二区三区四区| 国产91在线观看| 欧美乱妇15p| 国产精品少妇自拍| 日本在线不卡一区| 欧美在线观看视频一区二区| 欧美日本韩国一区二区三区视频| 日韩一区二区电影在线| 亚洲国产成人自拍| 日韩精品亚洲一区| 色综合久久综合网97色综合 | 成人黄色av电影| 欧美肥妇毛茸茸| 中文字幕亚洲一区二区va在线| 免费看精品久久片| 在线免费观看成人短视频| 久久久久97国产精华液好用吗| 亚洲国产精品天堂| 白白色 亚洲乱淫| 日韩欧美高清在线| 亚洲一卡二卡三卡四卡无卡久久| 精品一区二区日韩| 8x8x8国产精品| 亚洲午夜久久久久久久久电影网| 国产成人av资源| 欧美精品一区二区三区蜜桃| 亚洲一区二区三区四区中文字幕| 不卡的av在线播放| 久久久99精品免费观看不卡| 日韩欧美一区二区不卡| 欧美精品v国产精品v日韩精品| 中文天堂在线一区| 韩国精品主播一区二区在线观看| 欧美视频精品在线观看| 亚洲免费大片在线观看| 99视频国产精品| 国产精品久久免费看| 国产v综合v亚洲欧| 国产偷国产偷精品高清尤物| 精品制服美女久久| 日韩一区二区在线观看视频| 亚洲va国产va欧美va观看| 欧美在线高清视频| 一区二区三区免费看视频| 色综合视频一区二区三区高清| 国产精品对白交换视频 | 欧美日韩免费不卡视频一区二区三区| 中文字幕在线一区免费| 成人av免费在线观看| 欧美国产成人在线| 成人午夜短视频| 中文字幕高清不卡| av一二三不卡影片| 亚洲人妖av一区二区| 91在线无精精品入口| 亚洲色大成网站www久久九九| 91免费看片在线观看| 欧美老年两性高潮| 亚洲成人777| 日韩亚洲电影在线| 九九九久久久精品| 国产欧美日韩综合| www.欧美亚洲| 一区2区3区在线看| 欧美精品丝袜久久久中文字幕| 日韩精品一区第一页| 欧美一激情一区二区三区| 麻豆久久久久久| 国产女主播视频一区二区| 成人深夜福利app| 亚洲黄色录像片| 欧美精品第1页| 国产在线播放一区二区三区| 亚洲国产精品黑人久久久| 色网站国产精品| 青青草精品视频| 国产亚洲成aⅴ人片在线观看| jlzzjlzz亚洲日本少妇| 亚洲成av人片| 精品成人一区二区三区| av在线不卡电影| 天天影视网天天综合色在线播放| 日韩精品专区在线影院观看 | 欧美一区二区播放| 国产91富婆露脸刺激对白| 亚洲美女电影在线| 欧美一级日韩一级| 国产成人在线视频免费播放| 亚洲欧美日韩在线| 91丨九色丨尤物| 精品国产一二三| av午夜精品一区二区三区| 亚洲国产精品影院| 欧美电影免费观看高清完整版在 | 欧美性受xxxx黑人xyx性爽| 蜜臀av一区二区| 中文字幕一区二区三区蜜月| 91精品国产综合久久久久久久| 国产不卡视频在线观看| 亚洲国产精品久久一线不卡| 久久色在线视频| 在线观看av一区| 国产乱对白刺激视频不卡| 一区二区免费看| 久久久久久久网| 欧美日韩亚洲综合一区二区三区| 国产精品一区二区在线看| 亚洲在线视频免费观看| 久久久久国产精品厨房| 欧美日韩在线播放| 成人免费视频播放| 美女视频第一区二区三区免费观看网站| 国产精品乱码一区二区三区软件 | 中文字幕亚洲综合久久菠萝蜜| 日韩一区和二区| 日本不卡视频一二三区| 久久久美女毛片 | 中文字幕视频一区二区三区久| 69久久99精品久久久久婷婷| 波多野结衣中文一区| 激情国产一区二区|