/* 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 #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 #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 #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 : */