diff --git a/include/log.h b/include/log.h index 488ce3f8fb47e8bbff13e4f47a3016d3b56d3e45..e713b2600643cac2089ba81aecd04dce38a258e0 100644 --- a/include/log.h +++ b/include/log.h @@ -41,7 +41,6 @@ void prealunit(double r, short p, char *u, char *s); void prealunit2(double r, short p, char *u, char *s); void beginerror(); void enderror(); -void realstr(); void setvlsimode(int flag); void newbox(log_brec **b); short readlibrary(char *n); diff --git a/include/utils.h b/include/utils.h index 7be2a4ce69d7d7763beb4abe1fd3f8f36301f77b..78d49932b6e1c8ef2abdd4057988a31bba4964b0 100644 --- a/include/utils.h +++ b/include/utils.h @@ -5,4 +5,7 @@ void readreal(char s_[], double *r); void stamp(long *i); void getword(char *buf, char *wrd); void sortshints(short *x, short *y); +char *realstr(char *Result, double r, short p); +char *realunit(char *Result, double r, short p, char *u, int mu); + #endif diff --git a/src/log.c b/src/log.c index 06a4c66593394189574d9cdc4f5d459d0cf86ccc..a09d2aa0d461f37cc8587d74e5442711359d40dc 100644 --- a/src/log.c +++ b/src/log.c @@ -7258,127 +7258,6 @@ void setvlsimode(int flag) } -/// Convert a real number to a string. -char *realstr(char *Result, double r, short p) -{ - long i, j; - char s[81]; - - s[80] = '\0'; - if ((fabs(r) < 1e-2 || fabs(r) >= 1e6) && r != 0) - { - sprintf(s, "% .13E", r); - i = strlen(s) + 1; - s[i - 1] = '\0'; - i = strposc(s, 'E', 1L) - 1; - j = strposc(s, '.', 1L); - while (s[i - 1] == '0' || (p != 0 && i > j + p)) - { - strcpy_overlap(s + i - 1, s + i); - i--; - } - if (s[i - 1] == '.') - { - strcpy_overlap(s + i - 1, s + i); - i--; - } - while (strlen(s) > i + 3 && s[i + 2] == '0') - strcpy_overlap(s + i + 2, s + i + 3); - if (s[i + 1] == '+') - strcpy_overlap(s + i + 1, s + i + 2); - return strcpy(Result, strltrim(s)); - } - - if (p == 0) - { - sprintf(s, "%30.9f", r); - i = strlen(s) + 1; - do - { - i--; - } while (s[i - 1] == '0'); - - if (s[i - 1] == '.') - i--; - s[i] = '\0'; - return strcpy(Result, strltrim(s)); - } - sprintf(s, "%25.*f", p, r); - i = strlen(s) + 1; - s[i - 1] = '\0'; - /* zfprintf(stdout, "realstr:%lf p: %d s: %s\n", r, p, s); **MDG** */ - return strcpy(Result, strltrim(s)); -} - - -/// Convert a unitted real number to a string. -static char *realunit(char *Result, double r, short p, char *u, int mu) -{ - char s[81], STR1[81]; - char STR2[162]; - - /* zfprintf(stdout, "Realunit r: %le\n ", r); ***MDG** */ - *s = '\0'; - if (r == 0 || fabs(r) >= 1.0e15 || fabs(r) < 1.0e-16) - { - *s = '\0'; - } - else if (fabs(r) >= 1e12) - { - strcpy(s, "T"); - r /= 1e12; - } - else if (fabs(r) >= 1e9) - { - strcpy(s, "G"); - r /= 1e9; - } - else if (fabs(r) >= 1e6) - { - strcpy(s, "Meg"); - r /= 1e6; - } - else if (fabs(r) >= 1e3) - { - strcpy(s, "K"); - r /= 1e3; - } - else if (fabs(r) >= 0.1) - { - *s = '\0'; - } - else if (fabs(r) >= 1e-3) - { - strcpy(s, "m"); - r *= 1e3; - } - else if (fabs(r) >= 1e-6) - { - strcpy(s, "u"); - r *= 1e6; - } - else if (fabs(r) >= 1e-9) - { - strcpy(s, "n"); - r *= 1e9; - } - else if (fabs(r) >= 1e-12) - { - strcpy(s, "p"); - r *= 1e12; - } - else - { - strcpy(s, "f"); - r *= 1e15; - } - - sprintf(s, "%s%s", realstr(STR1, r, p), strcpy(STR2, s)); - sprintf(Result, "%s%s", s, u); - /* zfprintf(stdout, "realunit Result: %s\n", Result); ***MDG** */ - return Result; -} - /* was static void, cause gcc problems in some releases */ void prealunit(double r, short p, char *u, char *s) { diff --git a/src/utils.c b/src/utils.c index f315cde09b989bf0bad68f1a72579327d1db3cd3..e8bb20a03d6ea399d6e2a22c1d4a9580a969f1e6 100644 --- a/src/utils.c +++ b/src/utils.c @@ -116,3 +116,124 @@ void sortshints(short *x, short *y) *y = temp; } +/// Convert a real number to a string. +char *realstr(char *Result, double r, short p) +{ + long i, j; + char s[81]; + + s[80] = '\0'; + if ((fabs(r) < 1e-2 || fabs(r) >= 1e6) && r != 0) + { + sprintf(s, "% .13E", r); + i = strlen(s) + 1; + s[i - 1] = '\0'; + i = strposc(s, 'E', 1L) - 1; + j = strposc(s, '.', 1L); + while (s[i - 1] == '0' || (p != 0 && i > j + p)) + { + strcpy_overlap(s + i - 1, s + i); + i--; + } + if (s[i - 1] == '.') + { + strcpy_overlap(s + i - 1, s + i); + i--; + } + while (strlen(s) > i + 3 && s[i + 2] == '0') + strcpy_overlap(s + i + 2, s + i + 3); + if (s[i + 1] == '+') + strcpy_overlap(s + i + 1, s + i + 2); + return strcpy(Result, strltrim(s)); + } + + if (p == 0) + { + sprintf(s, "%30.9f", r); + i = strlen(s) + 1; + do + { + i--; + } while (s[i - 1] == '0'); + + if (s[i - 1] == '.') + i--; + s[i] = '\0'; + return strcpy(Result, strltrim(s)); + } + sprintf(s, "%25.*f", p, r); + i = strlen(s) + 1; + s[i - 1] = '\0'; + /* zfprintf(stdout, "realstr:%lf p: %d s: %s\n", r, p, s); **MDG** */ + return strcpy(Result, strltrim(s)); +} + + +/// Convert a unitted real number to a string. +char *realunit(char *Result, double r, short p, char *u, int mu) +{ + char s[81], STR1[81]; + char STR2[162]; + + /* zfprintf(stdout, "Realunit r: %le\n ", r); ***MDG** */ + *s = '\0'; + if (r == 0 || fabs(r) >= 1.0e15 || fabs(r) < 1.0e-16) + { + *s = '\0'; + } + else if (fabs(r) >= 1e12) + { + strcpy(s, "T"); + r /= 1e12; + } + else if (fabs(r) >= 1e9) + { + strcpy(s, "G"); + r /= 1e9; + } + else if (fabs(r) >= 1e6) + { + strcpy(s, "Meg"); + r /= 1e6; + } + else if (fabs(r) >= 1e3) + { + strcpy(s, "K"); + r /= 1e3; + } + else if (fabs(r) >= 0.1) + { + *s = '\0'; + } + else if (fabs(r) >= 1e-3) + { + strcpy(s, "m"); + r *= 1e3; + } + else if (fabs(r) >= 1e-6) + { + strcpy(s, "u"); + r *= 1e6; + } + else if (fabs(r) >= 1e-9) + { + strcpy(s, "n"); + r *= 1e9; + } + else if (fabs(r) >= 1e-12) + { + strcpy(s, "p"); + r *= 1e12; + } + else + { + strcpy(s, "f"); + r *= 1e15; + } + + sprintf(s, "%s%s", realstr(STR1, r, p), strcpy(STR2, s)); + sprintf(Result, "%s%s", s, u); + /* zfprintf(stdout, "realunit Result: %s\n", Result); ***MDG** */ + return Result; +} +