NetBSD 1.5 is lacking ecvt, fcvt, gcvt for crtdll.

diff --git a/library/port.c b/library/port.c
index 810b682..af0c244 100644
--- a/library/port.c
+++ b/library/port.c
@@ -558,3 +558,49 @@
 
     return str2;
 }
+
+#ifndef HAVE_ECVT
+/*
+ * NetBSD 1.5 doesn't have ecvt, fcvt, gcvt. We just check for ecvt, though.
+ * Fix/verify these implementations !
+ */
+
+/***********************************************************************
+ *		ecvt
+ */
+char *ecvt (double number, int  ndigits,  int  *decpt,  int *sign)
+{
+    static buf[40]; /* ought to be enough */
+    char *dec;
+    sprintf(buf, "%.*e", ndigits /* FIXME wrong */, number); 
+    *sign = (number < 0);
+    dec = strchr(buf, '.');
+    *decpt = (dec) ? (int)dec - (int)buf : -1;
+    return buf;
+}
+
+/***********************************************************************
+ *		fcvt
+ */
+char *fcvt (double number, int  ndigits,  int  *decpt,  int *sign)
+{
+    static buf[40]; /* ought to be enough */
+    char *dec;
+    sprintf(buf, "%.*e", ndigits, number);
+    *sign = (number < 0);
+    dec = strchr(buf, '.');
+    *decpt = (dec) ? (int)dec - (int)buf : -1;
+    return buf;
+}
+
+/***********************************************************************
+ *		gcvt
+ *
+ * FIXME: uses both E and F.
+ */
+char *gcvt (double number, size_t  ndigit,  char *buff)
+{
+    sprintf(buff, "%.*E", ndigit, number);
+    return buff;
+}
+#endif /* HAVE_ECVT */