diff options
author | Norbert Preining <norbert@preining.info> | 2020-10-12 03:04:00 +0000 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2020-10-12 03:04:00 +0000 |
commit | 0ce40abb18ec02ec6fd6bcc5f21612c88daa7578 (patch) | |
tree | 416289fe1448873fd8ca33051f50ad85bffa8aaa /support/dktools/dk4mai8dbl.ctr | |
parent | fdb18507cd80dc17f5a5256153d34668b4f4e61c (diff) |
CTAN sync 202010120303
Diffstat (limited to 'support/dktools/dk4mai8dbl.ctr')
-rw-r--r-- | support/dktools/dk4mai8dbl.ctr | 300 |
1 files changed, 0 insertions, 300 deletions
diff --git a/support/dktools/dk4mai8dbl.ctr b/support/dktools/dk4mai8dbl.ctr deleted file mode 100644 index cb132bd1ad..0000000000 --- a/support/dktools/dk4mai8dbl.ctr +++ /dev/null @@ -1,300 +0,0 @@ -%% options - -copyright owner = Dirk Krause -copyright year = 2015-xxxx -SPDX-License-Identifier: BSD-3-Clause - - - -%% header - -/** @file - Read double value from char string. - - CRT on Windows: Required. -*/ - -#ifndef DK4CONF_H_INCLUDED -#if DK4_BUILDING_DKTOOLS4 -#include "dk4conf.h" -#else -#include <dktools-4/dk4conf.h> -#endif -#endif - -#ifndef DK4TYPES_H_INCLUDED -#if DK4_BUILDING_DKTOOLS4 -#include "dk4types.h" -#else -#include <dktools-4/dk4types.h> -#endif -#endif - -#ifndef DK4ERROR_H_INCLUDED -#if DK4_BUILDING_DKTOOLS4 -#include "dk4error.h" -#else -#include <dktools-4/dk4error.h> -#endif -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -/** Read double value from char string. - The function temporarily resets the LC_NUMERIC locale setting - to "C" to retrieve the number and returns the setting to the - original value before returning. - - CRT on Windows: Required. - @param rp Address of result variable. - @param src String to process. - @param endptr Address of pointer variable. - A pointer to the first character not processed - is stored here. The function may also store - a NULL pointer here. - The pointer variable is probably left unchanged - on errors or if strtod() is not available on your - system (the sscanf() function is used as fallback). - @param atg Allow trailing garbage: - 0=no unprocessable trailing bytes allowed, - 1=trailing whitespaces allowed, - 2=any trailing characaters allowed. - @param erp Error report, may be NULL. - @return 1 on success, 0 on error. - - Error codes: - DK4_E_INVALID_ARGUMENTS if rp or src is NULL, - DK4_E_SYNTAX if there are unexpected characters in the - string, - DK4_E_MATH_OVERFLOW if a mathematical overflow occurs, - DK4_E_MATH_UNDERFLOW if a mathematical underflow occurs. -*/ - -int -dk4ma_input_c8_double( - double *rp, - const char *src, - const char **endptr, - int atg, - dk4_er_t *erp -); - -#ifdef __cplusplus -} -#endif - - -%% module - -#include "dk4conf.h" - -#if DK4_HAVE_ASSERT_H -#ifndef ASSERT_H_INCLUDED -#include <assert.h> -#define ASSERT_H_INCLUDED 1 -#endif -#endif - -#include "dk4mai8dbl.h" - -#include "dk4str8.h" - -#if DK4_HAVE_ERRNO_H -#ifndef ERRNO_H_INCLUDED -#include <errno.h> -#define ERRNO_H_INCLUDED 1 -#endif -#endif - -#if DK4_HAVE_LOCALE_H -#ifndef LOCALE_H_INCLUDED -#include <locale.h> -#define LOCALE_H_INCLUDED 1 -#endif -#endif - -#if DK4_HAVE_STDLIB_H -#ifndef STDLIB_H_INCLUDED -#include <stdlib.h> -#define STDLIB_H_INCLUDED 1 -#endif -#endif - -#if DK4_HAVE_MATH_H -#ifndef MATH_H_INCLUDED -#if DK4_ON_WINDOWS -#ifndef _USE_MATH_DEFINES -#define _USE_MATH_DEFINES 1 -#endif -#endif -#include <math.h> -#define MATH_H_INCLUDED 1 -#endif -#endif - - - -/** Default locale to use. -*/ -static const char locale_kw[] = { "C" }; - - - -/** Read double value from char string. - @param rp Address of result variable. - @param src String to process. - @param endptr Address of pointer variable. - A pointer to the first character not processed - is stored here. The function may also store - a NULL pointer here. - The pointer variable is probably left unchanged - on errors or if strtod() is not available on your - system (the sscanf() function is used as fallback). - @param atg Allow trailing garbage: - 0=no unprocessable trailing bytes allowed, - 1=trailing whitespaces allowed, - 2=any trailing characaters allowed. - @param erp Error report, may be NULL. - @return 1 on success, 0 on error. - - Error codes: - DK4_E_INVALID_ARGUMENTS if rp or src is NULL, - DK4_E_SYNTAX if there are unexpected characters in the - string, - DK4_E_MATH_OVERFLOW if a mathematical overflow occurs, - DK4_E_MATH_UNDERFLOW if a mathematical underflow occurs. -*/ - -static -int -dk4ma_internal_input_c8_double( - double *rp, - const char *src, - const char **endptr, - int atg, - dk4_er_t *erp -) -{ -#if DK4_HAVE_STRTOD || DK4_HAVE__STRTOD - double val = 0.0; - char *myend = NULL; - int back = 0; - int xerr = 0; -#if DK4_USE_ASSERT - assert(NULL != rp); - assert(NULL != src); -#endif - if ((NULL != rp) && (NULL != src)) { - errno = 0; -#if DK4_HAVE_STRTOD - val = strtod(src, &myend); -#else - val = _strtod(src, &myend); -#endif - xerr = errno; - if (NULL != endptr) { *endptr = myend; } - if (myend != src) { - switch (atg) { - case 2: { - back = 1; - } break; - case 1: { - if (NULL != dk4str8_start(myend, NULL)) { - dk4error_set_simple_error_code(erp, DK4_E_SYNTAX); - } else { - back = 1; - } - } break; - default: { - if ('\0' == *myend) { - back = 1; - } else { - dk4error_set_simple_error_code(erp, DK4_E_SYNTAX); - } - } break; - } - if (1 == back) { - if (ERANGE == xerr) { - if (HUGE_VAL == val) { - back = 0; - dk4error_set_simple_error_code(erp, DK4_E_MATH_OVERFLOW); - } - if ((-HUGE_VAL) == val) { - back = 0; - dk4error_set_simple_error_code(erp, DK4_E_MATH_OVERFLOW); - } - if (0.0 == val) { - back = 0; - dk4error_set_simple_error_code(erp, DK4_E_MATH_UNDERFLOW); - } - } - } - } else { - dk4error_set_simple_error_code(erp, DK4_E_SYNTAX); - } - if (1 == back) { - *rp = val; - } - } else { - dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS); - } - return back; -#else -#if DK4_USE_PRINTF_SCANF - double val = 0.0; - int back = 0; -#if DK4_USE_ASSERT - assert(NULL != rp); - assert(NULL != src); -#endif - if ((NULL != rp) && (NULL != src)) { - if (1 == sscanf(src, "%lf", &val)) { - *rp = val; - back = 1; - } else { - dk4error_set_simple_error_code(erp, DK4_E_SYNTAX); - } - } else { - dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS); - } - return back; -#else - dk4error_set_simple_error_code(erp, DK4_E_NOT_SUPPORTED); - return 0; -#endif -#endif -} - - - -int -dk4ma_input_c8_double( - double *rp, - const char *src, - const char **endptr, - int atg, - dk4_er_t *erp -) -{ -#if (DK4_HAVE_SETLOCALE) && defined(LC_NUMERIC) - char *oldloc = NULL; -#endif - int back = 0; -#if DK4_USE_ASSERT - assert(NULL != rp); - assert(NULL != src); -#endif -#if (DK4_HAVE_SETLOCALE) && defined(LC_NUMERIC) - oldloc = setlocale(LC_NUMERIC, NULL); - (void)setlocale(LC_NUMERIC, locale_kw); - back = dk4ma_internal_input_c8_double(rp, src, endptr, atg, erp); - (void)setlocale(LC_NUMERIC, oldloc); -#else - back = dk4ma_internal_input_c8_double(rp, src, endptr, atg, erp); -#endif - return back; -} - - |