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;
+}
+