/* Copyright (C) 2014-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: dk3madfo.ctr */ /** @file dk3madfo.c The dk3madfo module. */ #line 67 "dk3madfo.ctr" #include "dk3conf.h" #include "dk3ma.h" #if DK3_HAVE_STDLIB_H #include #endif #if DK3_HAVE_UNISTD_H #include #endif #if DK3_HAVE_STRING_H #include #endif #if DK3_HAVE_ERRNO_H #include #endif #line 86 "dk3madfo.ctr" void dk3ma_print_double_c8_str_no_sci(FILE *of, char *buffer) { char *start; /* Start of string. */ char *eptr; /* Start of exponent substring. */ char *ptr; /* Traverse string. */ size_t lgt; /* String length. */ int dp; /* Decimal dot position. */ int exponent; /* Exponent. */ int i; /* Traverse the string. */ #line 100 "dk3madfo.ctr" if((of) && (buffer)) { eptr = NULL; start = buffer; /* Print sign. */ switch(*start) { case '-': { fputc('-', of); start++; } break; case '+': { start++; } break; } /* Find exponent substring and exponent. */ eptr = NULL; ptr = start; while(*ptr) { switch(*ptr) { case 'e': case 'E': { eptr = ptr; } break; } ptr++; } if(eptr) { *(eptr++) = '\0'; #if VERSION_BEFORE_20140716 if(sscanf(eptr, "%d", &exponent) != 1) #else if (0 == dk3ma_i_from_c8_string(&exponent, eptr, NULL)) #endif { exponent = 0; } } else { exponent = 0; } /* Find decimal dot. */ eptr = strchr(start, '.'); if(eptr) { /* Keep dot position in dp, squeeze string. */ *eptr = '\0'; dp = (int)strlen(start); *eptr = '.'; while(*eptr) { eptr[0] = eptr[1]; eptr++; } } else { /* Dot position is after the string. */ dp = (int)strlen(start); } /* Correct dot position. */ dp = dp + exponent; /* Remove leading zeroes (if any). */ while('0' == *start) { start++; dp--; } /* Remove trailing zeroes (if any). */ eptr = NULL; ptr = start; while(*ptr) { if('0' == *ptr) { if(!(eptr)) { eptr = ptr; } } else { eptr = NULL; } ptr++; } if(eptr) { *eptr = '\0'; } lgt = strlen(start); if(0 < lgt) { if(dp >= (int)lgt) { /* Decimal dot is at end or after string. */ fputs(start, of); /* Decimal dot is after the string. */ for(i = 0; i < (dp - (int)lgt); i++) { fputc('0', of); } } else { if(dp <= 0) { /* Decimal dot is before the string. */ fputc('0', of); fputc('.', of); while(dp++ < 0) { fputc('0', of); } fputs(start, of); } else { /* Decimal dot is in the string. */ for(i = 0; i < (int)lgt; i++) { if(dp == i) { fputc('.', of); } fputc(start[i], of); } } } } else { /* No non-zero digits in string. */ fputc('0', of); } } #line 229 "dk3madfo.ctr" } void dk3ma_print_double_c8_no_sci(FILE *of, double x) { char buffer[64]; #line 238 "dk3madfo.ctr" if(of) { sprintf(buffer, "%g", x); dk3ma_print_double_c8_str_no_sci(of, buffer); } #line 242 "dk3madfo.ctr" }