summaryrefslogtreecommitdiff
path: root/support/dktools/dk4mao8dns.c
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2020-09-20 03:03:26 +0000
committerNorbert Preining <norbert@preining.info>2020-09-20 03:03:26 +0000
commit1f457376b478257b88d4a857f5ec1b6155442dd7 (patch)
tree2a06a60551dea362cf8cb0cb0ba66c78608717c4 /support/dktools/dk4mao8dns.c
parentac690ca29ad5bf8a5203a65fd6252f7b564f4727 (diff)
CTAN sync 202009200303
Diffstat (limited to 'support/dktools/dk4mao8dns.c')
-rw-r--r--support/dktools/dk4mao8dns.c299
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 : */
+