diff options
author | Norbert Preining <norbert@preining.info> | 2020-09-20 03:03:26 +0000 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2020-09-20 03:03:26 +0000 |
commit | 1f457376b478257b88d4a857f5ec1b6155442dd7 (patch) | |
tree | 2a06a60551dea362cf8cb0cb0ba66c78608717c4 /support/dktools/dk4mao8dns.c | |
parent | ac690ca29ad5bf8a5203a65fd6252f7b564f4727 (diff) |
CTAN sync 202009200303
Diffstat (limited to 'support/dktools/dk4mao8dns.c')
-rw-r--r-- | support/dktools/dk4mao8dns.c | 299 |
1 files changed, 299 insertions, 0 deletions
diff --git a/support/dktools/dk4mao8dns.c b/support/dktools/dk4mao8dns.c new file mode 100644 index 0000000000..c1d6bff8cf --- /dev/null +++ b/support/dktools/dk4mao8dns.c @@ -0,0 +1,299 @@ +/* +Copyright (C) 2017-2020, Dirk Krause +SPDX-License-Identifier: BSD-3-Clause +*/ + +/* + WARNING: This file was generated by the dkct program (see + http://dktools.sourceforge.net/ for details). + Changes you make here will be lost if dkct is run again! + You should modify the original source and run dkct on it. + Original source: dk4mao8dns.ctr +*/ + +/** @file dk4mao8dns.c The dk4mao8dns module. +*/ + + +#line 132 "dk4mao8dns.ctr" + + +#include "dk4conf.h" + +#ifndef DK4MAO8DNS_H_INCLUDED +#include "dk4mao8dns.h" +#endif + +#if DK4_HAVE_STRING_H +#ifndef STRING_H_INCLUDED +#include <string.h> +#define STRING_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 + +#ifndef DK4MAO8DBL_H_INCLUDED +#include "dk4mao8dbl.h" +#endif + +#ifndef DK4MAI8DDI_H_INCLUDED +#include "dk4mai8ddi.h" +#endif + +#ifndef DK4STR8_H_INCLUDED +#include "dk4str8.h" +#endif + +#if DK4_HAVE_ASSERT_H +#ifndef ASSERT_H_INCLUDED +#include <assert.h> +#define ASSERT_H_INCLUDED 1 +#endif +#endif + + + + +#line 180 "dk4mao8dns.ctr" + + + +int +dk4ma_write_c8_double_string_no_sci_to_stream( + dk4_stream_t *strm, + char *buf, + dk4_er_t *erp +) +{ + char *ptrex = NULL; /* Start of exponent */ + char *ptrdd = NULL; /* Decimal dot */ + char *ptrout = NULL; /* Character to output */ + const char *endptr = NULL; /* First unusable exponent character */ + dk4_im_t dotpos = (dk4_im_t)0L; /* Dot position */ + dk4_im_t expon = (dk4_im_t)0L; /* Exponent */ + dk4_im_t i = (dk4_im_t)0L; /* Running index */ + int isneg = 0; /* Flag: Negative value */ + int res = 0; /* Conversion result */ + int back = 0; /* Result */ + + +#line 201 "dk4mao8dns.ctr" +#if DK4_USE_ASSERT + assert(NULL != strm); + assert(NULL != buf); +#endif + if ((NULL != strm) && (NULL != buf)) { + back = 1; + if ('-' == *buf) { + +#line 208 "dk4mao8dns.ctr" + isneg = 1; + buf++; + } +#if TRACE_DEBUG + else { + +#line 213 "dk4mao8dns.ctr" + } +#endif + /* + Find exponent + */ + ptrex = strchr(buf, 'e'); + if (NULL == ptrex) { ptrex = strchr(buf, 'E'); } + if (NULL != ptrex) { + *(ptrex++) = '\0'; + +#line 222 "dk4mao8dns.ctr" + if ('+' == *ptrex) { ptrex++; } + res = dk4ma_input_c8_dec_dk4_im_t(&expon, ptrex, &endptr, 1, erp); + if (0 == res) { expon = (dk4_im_t)0L; back = 0; } + + +#line 226 "dk4mao8dns.ctr" + } +#if TRACE_DEBUG + else { + +#line 229 "dk4mao8dns.ctr" + } +#endif + /* Find decimal dot + */ + ptrdd = strchr(buf, '.'); + if (NULL != ptrdd) { + +#line 235 "dk4mao8dns.ctr" + *ptrdd = '\0'; + dotpos = strlen(buf); + dk4str8_cpy_to_left(ptrdd, &(ptrdd[1])); + } + else { + +#line 240 "dk4mao8dns.ctr" + dotpos = strlen(buf); + } + /* Calculate dot position from original position and exponent + */ + dotpos += expon; + +#line 245 "dk4mao8dns.ctr" + /* + Write leading zero(s) + */ + if ((dk4_im_t)0L >= dotpos) { + +#line 249 "dk4mao8dns.ctr" + if (0 != isneg) { + if (0 == dk4stream_write_byte(strm, '-', erp)) { back = 0; } + isneg = 0; + } + if (0 == dk4stream_write_byte(strm, '0', erp)) { back = 0; } + if (0 == dk4stream_write_byte(strm, '.', erp)) { back = 0; } + i = dotpos; + while ((dk4_im_t)0L > i++) { + if (0 == dk4stream_write_byte(strm, '0', erp)) { back = 0; } + } + } +#if TRACE_DEBUG + else { + +#line 262 "dk4mao8dns.ctr" + } +#endif + /* Write digits from buffer + */ + if (0 != isneg) { + +#line 267 "dk4mao8dns.ctr" + if (0 == dk4stream_write_byte(strm, '-', erp)) { back = 0; } + } +#if TRACE_DEBUG + else { + +#line 271 "dk4mao8dns.ctr" + } +#endif + i = (dk4_im_t)0L; + ptrout = buf; + while ('\0' != *ptrout) { + + +#line 277 "dk4mao8dns.ctr" + + +#line 278 "dk4mao8dns.ctr" + if ((dotpos == i) && ((dk4_im_t)0L != dotpos)) { + + +#line 280 "dk4mao8dns.ctr" + if (0 == dk4stream_write_byte(strm, '.', erp)) { + back = 0; + +#line 282 "dk4mao8dns.ctr" + } + } + + +#line 285 "dk4mao8dns.ctr" + if (0 == dk4stream_write_byte(strm, *(ptrout++), erp)) { + back = 0; + +#line 287 "dk4mao8dns.ctr" + } + + +#line 289 "dk4mao8dns.ctr" + i++; + } + /* Append trailing zero(s) + */ + + +#line 294 "dk4mao8dns.ctr" + while (i++ < dotpos) { + if (0 == dk4stream_write_byte(strm, '0', erp)) { + back = 0; + +#line 297 "dk4mao8dns.ctr" + } + } + } + else { + dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS); + } + + +#line 304 "dk4mao8dns.ctr" + return back; +} + + + +int +dk4ma_write_c8_double_no_sci_to_stream( + dk4_stream_t *strm, + double v, + double eps, + int ex, + int min, + dk4_er_t *erp +) +{ + char buf[16*sizeof(double)]; + size_t szbuf = sizeof(buf); + int back = 0; + + +#line 323 "dk4mao8dns.ctr" +#if DK4_USE_ASSERT + assert(NULL != strm); +#endif + if (NULL != strm) { + if (fabs(v) < eps) { + +#line 328 "dk4mao8dns.ctr" + back = dk4stream_write_byte(strm, '0', erp); + } + else { + +#line 331 "dk4mao8dns.ctr" + if (0 != dk4ma_write_c8_double(buf, szbuf, v, ex, min, erp)) { + + +#line 333 "dk4mao8dns.ctr" + back = dk4ma_write_c8_double_string_no_sci_to_stream( + strm, buf, erp + ); + } +#if TRACE_DEBUG + else { + +#line 339 "dk4mao8dns.ctr" + } +#endif + } + } + else { + dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS); + } + + +#line 347 "dk4mao8dns.ctr" + return back; +} + + +/* vim: set ai sw=4 ts=4 : */ + |