mescc: Mes C Library: Explode libc+gnu.c.
authorJan Nieuwenhuizen <janneke@gnu.org>
Fri, 24 Aug 2018 18:57:34 +0000 (20:57 +0200)
committerJan Nieuwenhuizen <janneke@gnu.org>
Fri, 24 Aug 2018 18:57:34 +0000 (20:57 +0200)
* modified:   include/math.h: Add declarations.
* lib/posix/getopt.c: Rename from lib/getopt.c.
* lib/gcc.c: Remove.
* lib/m4.c: Remove.
* lib/ctype/isalnum.c: New file, explode from libc+gnu.c.
* lib/ctype/isalpha.c: Likewise.
* lib/ctype/isascii.c: Likewise.
* lib/ctype/iscntrl.c: Likewise.
* lib/ctype/isnumber.c: Likewise.
* lib/ctype/isprint.c: Likewise.
* lib/ctype/ispunct.c: Likewise.
* lib/math/fabs.c: Likewise.
* lib/posix/alarm.c: Likewise.
* lib/posix/mktemp.c: Likewise.
* lib/posix/raise.c: Likewise.
* lib/posix/sbrk.c: Likewise.
* lib/posix/sleep.c: Likewise.
* lib/posix/unsetenv.c: Likewise.
* lib/stdio/clearerr.c: Likewise.
* lib/stdio/fdgets.c: Likewise.
* lib/stdio/feof.c: Likewise.
* lib/stdio/fgets.c: Likewise.
* lib/stdio/fileno.c: Likewise.
* lib/stdio/freeopen.c: Likewise.
* lib/stdio/freopen.c: Likewise.
* lib/stdio/perror.c: Likewise.
* lib/stdlib/__exit.c: Likewise.
* lib/stdlib/abs.c: Likewise.
* lib/stdlib/atexit.c: Likewise.
* lib/stdlib/atol.c: Likewise.
* lib/stdlib/bsearch.c: Likewise.
* lib/stdlib/mbstowcs.c: Likewise.
* lib/string/bcmp.c: Likewise.
* lib/string/bcopy.c: Likewise.
* lib/string/bzero.c: Likewise.
* lib/string/index.c: Likewise.
* lib/string/rindex.c: Likewise.
* lib/string/strcspn.c: Likewise.
* lib/string/strdup.c: Likewise.
* lib/string/strerror.c: Likewise.
* lib/string/strncat.c: Likewise.
* lib/string/strpbrk.c: Likewise.
* lib/string/strspn.c: Likewise.
* lib/stub/__cleanup.c: Likewise.
* lib/stub/atof.c: Likewise.
* lib/stub/chown.c: Likewise.
* lib/stub/ctime.c: Likewise.
* lib/stub/fpurge.c: Likewise.
* lib/stub/freadahead.c: Likewise.
* lib/stub/frexp.c: Likewise.
* lib/stub/fscanf.c: Likewise.
* lib/stub/getpwnam.c: Likewise.
* lib/stub/gmtime.c: Likewise.
* lib/stub/pclose.c: Likewise.
* lib/stub/popen.c: Likewise.
* lib/stub/rewind.c: Likewise.
* lib/stub/setbuf.c: Likewise.
* lib/stub/sigsetmask.c: Likewise.
* lib/stub/strftime.c: Likewise.
* lib/stub/sys_siglist.c: Likewise.
* lib/stub/system.c: Likewise.
* lib/stub/times.c: Likewise.
* lib/stub/umask.c: Likewise.
* lib/stub/utime.c: Likewise.
* lib/libc+gnu.c: Include explodings.
* lib/libg.c: Likewise.
* lib/libgetopt.c: Include explodings.

69 files changed:
include/math.h
lib/binutils.c [deleted file]
lib/ctype/isalnum.c [new file with mode: 0644]
lib/ctype/isalpha.c [new file with mode: 0644]
lib/ctype/isascii.c [new file with mode: 0644]
lib/ctype/iscntrl.c [new file with mode: 0644]
lib/ctype/isnumber.c
lib/ctype/isprint.c [new file with mode: 0644]
lib/ctype/ispunct.c [new file with mode: 0644]
lib/gcc.c [deleted file]
lib/getopt.c [deleted file]
lib/libc+gnu.c
lib/libg.c
lib/libgetopt.c
lib/m4.c [deleted file]
lib/math/fabs.c [new file with mode: 0644]
lib/posix/alarm.c [new file with mode: 0644]
lib/posix/getopt.c [new file with mode: 0644]
lib/posix/mktemp.c [new file with mode: 0644]
lib/posix/raise.c [new file with mode: 0644]
lib/posix/sbrk.c [new file with mode: 0644]
lib/posix/sleep.c [new file with mode: 0644]
lib/posix/unsetenv.c [new file with mode: 0644]
lib/stdio/clearerr.c [new file with mode: 0644]
lib/stdio/fdgets.c [new file with mode: 0644]
lib/stdio/feof.c [new file with mode: 0644]
lib/stdio/fgets.c [new file with mode: 0644]
lib/stdio/fileno.c [new file with mode: 0644]
lib/stdio/freeopen.c [new file with mode: 0644]
lib/stdio/freopen.c [new file with mode: 0644]
lib/stdio/perror.c [new file with mode: 0644]
lib/stdlib/__exit.c [new file with mode: 0644]
lib/stdlib/abs.c [new file with mode: 0644]
lib/stdlib/atexit.c [new file with mode: 0644]
lib/stdlib/atol.c [new file with mode: 0644]
lib/stdlib/bsearch.c [new file with mode: 0644]
lib/stdlib/mbstowcs.c [new file with mode: 0644]
lib/string/bcmp.c [new file with mode: 0644]
lib/string/bcopy.c [new file with mode: 0644]
lib/string/bzero.c [new file with mode: 0644]
lib/string/index.c [new file with mode: 0644]
lib/string/rindex.c [new file with mode: 0644]
lib/string/strcspn.c [new file with mode: 0644]
lib/string/strdup.c [new file with mode: 0644]
lib/string/strerror.c [new file with mode: 0644]
lib/string/strncat.c [new file with mode: 0644]
lib/string/strpbrk.c [new file with mode: 0644]
lib/string/strspn.c [new file with mode: 0644]
lib/stub/__cleanup.c [new file with mode: 0644]
lib/stub/atof.c [new file with mode: 0644]
lib/stub/chown.c [new file with mode: 0644]
lib/stub/ctime.c [new file with mode: 0644]
lib/stub/fpurge.c [new file with mode: 0644]
lib/stub/freadahead.c [new file with mode: 0644]
lib/stub/frexp.c [new file with mode: 0644]
lib/stub/fscanf.c [new file with mode: 0644]
lib/stub/getpwnam.c [new file with mode: 0644]
lib/stub/gmtime.c [new file with mode: 0644]
lib/stub/pclose.c [new file with mode: 0644]
lib/stub/popen.c [new file with mode: 0644]
lib/stub/rewind.c [new file with mode: 0644]
lib/stub/setbuf.c [new file with mode: 0644]
lib/stub/sigsetmask.c [new file with mode: 0644]
lib/stub/strftime.c [new file with mode: 0644]
lib/stub/sys_siglist.c [new file with mode: 0644]
lib/stub/system.c [new file with mode: 0644]
lib/stub/times.c [new file with mode: 0644]
lib/stub/umask.c [new file with mode: 0644]
lib/stub/utime.c [new file with mode: 0644]

index 14b208154a65e4a114bdae665babffc595af8db5..aea4e92382c592b716742e4b4e319931ba2832ab 100644 (file)
@@ -27,5 +27,6 @@
 double ldexp (double x, int exp);
 #endif  // ! WITH_GLIBC
 
-#endif // __MES_MATH_H
+double fabs (double number);
 
+#endif // __MES_MATH_H
diff --git a/lib/binutils.c b/lib/binutils.c
deleted file mode 100644 (file)
index 53f0822..0000000
+++ /dev/null
@@ -1,306 +0,0 @@
-/* -*-comment-start: "//";comment-end:""-*-
- * GNU Mes --- Maxwell Equations of Software
- * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
- *
- * This file is part of GNU Mes.
- *
- * GNU Mes is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or (at
- * your option) any later version.
- *
- * GNU Mes is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include <libmes.h>
-#include <stdint.h>
-#include <stdlib.h>
-
-int
-abs (int x)
-{
-  if (x < 0)
-    return -x;
-  return x;
-}
-
-int
-chown (char const *file_name, uid_t owner, gid_t group)
-{
-  static int stub = 0;
-  if (__mes_debug () && !stub)
-    eputs ("chown stub\n");
-  stub = 1;
-  errno = 0;
-  return 0;
-}
-
-int
-ctime (int x)
-{
-  static int stub = 0;
-  if (__mes_debug () && !stub)
-    eputs ("ctime stub\n");
-  stub = 1;
-  errno = 0;
-  return 0;
-}
-
-char *
-fdgets (char *s, int count, int fd)
-{
-  int c = 0;
-  char *p = s;
-  while (--count > 0 && c != '\n')
-    {
-      c = fdgetc (fd);
-      if (c == EOF)
-        break;
-      *p++ = c;
-    }
-  if (p == s && (c == EOF || count == -1))
-    return 0;
-  *p = 0;
-  return s;
-}
-
-int
-feof (FILE *stream)
-{
-  char c = fgetc (stream);
-  if (c != EOF)
-    ungetc (c, stream);
-  return c == EOF;
-}
-
-char *
-fgets (char *s, int count, FILE *stream)
-{
-  return fdgets (s, count, (int)stream);
-}
-
-int
-frexp (int x)
-{
-  static int stub = 0;
-  if (__mes_debug () && !stub)
-    eputs ("frexp stub\n");
-  stub = 1;
-  return 0;
-}
-
-void
-perror (char const *message)
-{
-  fprintf (stderr, "%s: %s\n", strerror (errno), message);
-}
-
-int
-sigsetmask (int x)
-{
-  static int stub = 0;
-  if (__mes_debug () && !stub)
-    eputs ("sigsetmask stub\n");
-  stub = 1;
-  errno = 0;
-  return 0;
-}
-
-size_t
-strcspn (char const *string, char const *stopset)
-{
-  char *p = string;
-  while (*p)
-    if (strchr (stopset, *p))
-      break;
-    else
-      p++;
-  return p - string;
-}
-
-char *
-strncat (char *to, char const *from, size_t size)
-{
-  if (size == 0)
-    return to;
-  char *p = strchr (to , '\0');
-  while (*from && size-- > 0)
-    *p++ = *from++;
-  *p = 0;
-  return to;
-}
-
-char *
-strpbrk (char const *string, char const* stopset)
-{
-  char *p = string;
-  while (*p)
-    if (strchr (stopset, *p))
-      break;
-    else
-      p++;
-  return p;
-}
-
-size_t
-strspn (char const *string, char const *skipset)
-{
-  char *p = string;
-  while (*p)
-    if (!strchr (skipset, *p))
-      break;
-    else
-      p++;
-  return p - string;
-}
-
-int
-sys_siglist (int x)
-{
-  static int stub = 0;
-  if (__mes_debug () && !stub)
-    eputs ("sys_siglist stub\n");
-  stub = 1;
-  errno = 0;
-  return 0;
-}
-
-int
-umask (int x)
-{
-  static int stub = 0;
-  if (__mes_debug () && !stub)
-    eputs ("umask stub\n");
-  stub = 1;
-  errno = 0;
-  return 0;
-}
-
-int
-utime (int x)
-{
-  static int stub = 0;
-  if (__mes_debug () && !stub)
-    eputs ("utime stub\n");
-  errno = 0;
-  return 0;
-}
-
-// binutils-2.10.1
-int
-fscanf (FILE *stream, char const *template, ...)
-{
-  static int stub = 0;
-  if (__mes_debug () && !stub)
-    eputs ("fscan stub\n");
-  stub = 1;
-  return 0;
-}
-
-int
-isascii (int c)
-{
-  return c >= 0 && c <= 127;
-}
-
-void *
-#if __MESC__
-bsearch (void const *key, void const *array, size_t count, size_t size, void (*compare) ())
-#else
-bsearch (void const *key, void const *array, size_t count, size_t size, comparison_fn_t compare)
-#endif
-{
-  static int stub = 0;
-  if (__mes_debug () && !stub)
-    eputs ("bsearch stub\n");
-  stub = 1;
-  return 0;
-}
-
-struct tm *
-gmtime (time_t const *time)
-{
-  static int stub = 0;
-  if (__mes_debug () && !stub)
-    eputs ("gmtime stub\n");
-  stub = 1;
-  errno = 0;
-  return localtime (time);
-}
-
-#if __SBRK_CHAR_PTRDIFF
-char *
-sbrk (ptrdiff_t)
-#else
-void *
-sbrk (intptr_t delta)
-#endif
-{
-  if (delta >= 0)
-    return malloc (delta);
-  return __brk;
-}
-
-// binutils 2.30
-char *
-strdup (char const *s)
-{
-  size_t length = strlen (s) + 1;
-  char *p = (char*)malloc (length);
-  if (p)
-    return memcpy (p, s, length);
-  return 0;
-}
-
-int
-raise (int signum)
-{
-  kill (getpid (), signum);
-}
-
-size_t
-strftime (char *s, size_t size, char const *template,
-          struct tm const *brokentime)
-{
-  static int stub = 0;
-  if (__mes_debug () && !stub)
-    eputs ("strftime stub\n");
-  stub = 1;
-  return template;
-}
-
-#if !__MESC__
-typedef char wchar_t[];
-
-size_t
-mbstowcs (wchar_t *wstring, char const *string,
-          size_t size)
-{
-  static int stub = 0;
-  if (__mes_debug () && !stub)
-    eputs ("mbstowcs stub\n");
-  stub = 1;
-  strcpy (wstring, string);
-  return strlen (string);
-}
-#endif
-
-void
-clearerr (FILE *stream)
-{
-  errno = 0;
-}
-
-double
-fabs (double number)
-{
-  if (number < 0)
-    return -number;
-  return number;
-}
diff --git a/lib/ctype/isalnum.c b/lib/ctype/isalnum.c
new file mode 100644 (file)
index 0000000..f7917ac
--- /dev/null
@@ -0,0 +1,27 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <ctype.h>
+
+int
+isalnum (int c)
+{
+  return isdigit (c) || isalpha (c);
+}
diff --git a/lib/ctype/isalpha.c b/lib/ctype/isalpha.c
new file mode 100644 (file)
index 0000000..142a884
--- /dev/null
@@ -0,0 +1,27 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <ctype.h>
+
+int
+isalpha (int c)
+{
+  return islower (c) || isupper (c);
+}
diff --git a/lib/ctype/isascii.c b/lib/ctype/isascii.c
new file mode 100644 (file)
index 0000000..48fa8f8
--- /dev/null
@@ -0,0 +1,27 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <ctype.h>
+
+int
+isascii (int c)
+{
+  return c >= 0 && c <= 127;
+}
diff --git a/lib/ctype/iscntrl.c b/lib/ctype/iscntrl.c
new file mode 100644 (file)
index 0000000..82d4c3d
--- /dev/null
@@ -0,0 +1,27 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <ctype.h>
+
+int
+iscntrl (int c)
+{
+  return c >= 0 && c < 32;
+}
index 023e90157ec9c8b02b5789697d0305c3f3918390..4c3788658099ab2d033553755534844e1396102f 100644 (file)
@@ -18,7 +18,7 @@
  * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#include <libmes.h>
+#include <ctype.h>
 
 int
 isnumber (int c, int base)
diff --git a/lib/ctype/isprint.c b/lib/ctype/isprint.c
new file mode 100644 (file)
index 0000000..b0b4be8
--- /dev/null
@@ -0,0 +1,27 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <ctype.h>
+
+int
+isprint (int c)
+{
+  return c >= 32 && c < 127;
+}
diff --git a/lib/ctype/ispunct.c b/lib/ctype/ispunct.c
new file mode 100644 (file)
index 0000000..5266012
--- /dev/null
@@ -0,0 +1,27 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <ctype.h>
+
+int
+ispunct (int c)
+{
+  return isprint (c) && !isspace (c) && !isalnum (c);
+}
diff --git a/lib/gcc.c b/lib/gcc.c
deleted file mode 100644 (file)
index 00afafa..0000000
--- a/lib/gcc.c
+++ /dev/null
@@ -1,107 +0,0 @@
-/* -*-comment-start: "//";comment-end:""-*-
- * GNU Mes --- Maxwell Equations of Software
- * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
- *
- * This file is part of GNU Mes.
- *
- * GNU Mes is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or (at
- * your option) any later version.
- *
- * GNU Mes is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include <libmes.h>
-#include <stdint.h>
-#include <time.h>
-#include <sys/times.h>
-#include <sys/time.h>
-
-FILE *
-freopen (char const *file_name, char const *opentype, FILE *stream)
-{
-  fclose (stream);
-  return fopen (file_name, opentype);
-}
-
-clock_t
-times (struct tms *buffer)
-{
-  static int stub = 0;
-  if (__mes_debug () && !stub)
-    eputs ("times stub\n");
-  stub = 1;
-  return 0;
-}
-
-unsigned int
-sleep (unsigned int seconds)
-{
-  struct timespec requested_time;
-  struct timespec remaining;
-  requested_time.tv_sec = seconds;
-  requested_time.tv_nsec = 0;
-  return nanosleep (&requested_time, &remaining);
-}
-
-// gcc-3.4
-void
-unsetenv (char const *name)
-{
-  int length = strlen (name);
-  char **p = environ;
-  while (*p)
-    {
-      if (!strncmp (name, *p, length) && *(*p + length) == '=')
-        {
-          char **q = p;
-          q[0] = q[1];
-          while (*q++)
-            q[0] = q[1];
-        }
-      p++;
-    }
-}
-
-// gcc-3.0
-int
-atexit (void (*function) (void))
-{
-  __call_at_exit = function;
-}
-
-unsigned int
-alarm (unsigned int seconds)
-{
-#if !__MESC__
-  struct itimerval old;
-  struct itimerval new;
-  new.it_interval.tv_usec = 0;
-  new.it_interval.tv_sec = 0;
-  new.it_value.tv_usec = 0;
-  new.it_value.tv_sec = (long int) seconds;
-  if (setitimer (ITIMER_REAL, &new, &old) < 0)
-    return 0;
-  return old.it_value.tv_sec;
-#endif
-}
-
-// gcc-2.95.3
-
-struct passwd *
-getpwnam (const char *NAME)
-{
-  static int stub = 0;
-  if (__mes_debug () && !stub)
-    eputs ("getpwnam stub\n");
-  stub = 1;
-  errno = 0;
-  return 0;
-}
diff --git a/lib/getopt.c b/lib/getopt.c
deleted file mode 100644 (file)
index 956a105..0000000
+++ /dev/null
@@ -1,382 +0,0 @@
-/* Getopt for GNU.
-   Copyright (C) 1987, 88, 89, 90, 91, 1992 Free Software Foundation, Inc.
-   Copyright (C) 2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2, or (at your option)
-   any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
-\f
-
-#include <stdio.h>
-#include <string.h>
-#include <getopt.h>
-
-#if __MESC__
-#define static
-#endif
-
-/* For communication from `getopt' to the caller.
-   When `getopt' finds an option that takes an argument,
-   the argument value is returned here. */
-
-char *optarg = 0;
-
-/* Index in ARGV of the next element to be scanned.
-   This is used for communication to and from the caller
-   and for communication between successive calls to `getopt'.
-
-   On entry to `getopt', zero means this is the first call; initialize.
-
-   When `getopt' returns EOF, this is the index of the first of the
-   non-option elements that the caller should itself scan.
-
-   Otherwise, `optind' communicates from one call to the next
-   how much of ARGV has been scanned so far.  */
-
-int optind = 0;
-
-/* The next char to be scanned in the option-element
-   in which the last option character we returned was found.
-   This allows us to pick up the scan where we left off.
-
-   If this is zero, or a null string, it means resume the scan
-   by advancing to the next ARGV-element.  */
-
-static char *nextchar;
-
-/* Callers store zero here to inhibit the error message
-   for unrecognized options.  */
-
-int opterr = 1;
-
-\f
-/* Handle permutation of arguments.  */
-
-/* Describe the part of ARGV that contains non-options that have
-   been skipped.  `first_nonopt' is the index in ARGV of the first of them;
-   `last_nonopt' is the index after the last of them.  */
-
-static int first_nonopt;
-static int last_nonopt;
-
-\f
-/* Scan elements of ARGV (whose length is ARGC) for option characters
-   given in OPTSTRING.
-
-   If an element of ARGV starts with '-', and is not exactly "-" or "--",
-   then it is an option element.  The characters of this element
-   (aside from the initial '-') are option characters.  If `getopt'
-   is called repeatedly, it returns successively each of the option characters
-   from each of the option elements.
-
-   If `getopt' finds another option character, it returns that character,
-   updating `optind' and `nextchar' so that the next call to `getopt' can
-   resume the scan with the following option character or ARGV-element.
-
-   If there are no more option characters, `getopt' returns `EOF'.
-   Then `optind' is the index in ARGV of the first ARGV-element
-   that is not an option.  (The ARGV-elements have been permuted
-   so that those that are not options now come last.)
-
-   OPTSTRING is a string containing the legitimate option characters.
-   If an option character is seen that is not listed in OPTSTRING,
-   return '?' after printing an error message.  If you set `opterr' to
-   zero, the error message is suppressed but we still return '?'.
-
-   If a char in OPTSTRING is followed by a colon, that means it wants an arg,
-   so the following text in the same ARGV-element, or the text of the following
-   ARGV-element, is returned in `optarg'.  Two colons mean an option that
-   wants an optional arg; if there is text in the current ARGV-element,
-   it is returned in `optarg', otherwise `optarg' is set to zero.
-
-   If OPTSTRING starts with `-' or `+', it requests different methods of
-   handling the non-option ARGV-elements.
-
-   Long-named options begin with `--' instead of `-'.
-   Their names may be abbreviated as long as the abbreviation is unique
-   or is an exact match for some defined option.  If they have an
-   argument, it follows the option name in the same ARGV-element, separated
-   from the option name by a `=', or else the in next ARGV-element.
-   When `getopt' finds a long-named option, it returns 0 if that option's
-   `flag' field is nonzero, the value of the option's `val' field
-   if the `flag' field is zero.
-
-   The elements of ARGV aren't really const, because we permute them.
-   But we pretend they're const in the prototype to be compatible
-   with other systems.
-
-   LONGOPTS is a vector of `struct option' terminated by an
-   element containing a name which is zero.
-
-   LONGIND returns the index in LONGOPT of the long-named option found.
-   It is only valid when a long-named option has been found by the most
-   recent call.
-
-   If LONG_ONLY is nonzero, '-' as well as '--' can introduce
-   long-named options.  */
-
-int
-_getopt_internal (int argc, char *const
-                  *argv, char const *optstring, struct option const *longopts, int *longind, int long_only)
-{
-  int option_index;
-
-  optarg = 0;
-
-  /* Initialize the internal data when the first call is made.
-     Start processing options with ARGV-element 1 (since ARGV-element 0
-     is the program name); the sequence of previously skipped
-     non-option ARGV-elements is empty.  */
-
-  if (optind == 0)
-    {
-      first_nonopt = last_nonopt = optind = 1;
-
-      nextchar = NULL;
-    }
-
-  if (nextchar == NULL || *nextchar == '\0')
-    {
-      /* If we have done all the ARGV-elements, stop the scan
-        and back over any non-options that we skipped and permuted.  */
-
-      if (optind == argc)
-       {
-         /* Set the next-arg-index to point at the non-options
-            that we previously skipped, so the caller will digest them.  */
-         if (first_nonopt != last_nonopt)
-           optind = first_nonopt;
-         return EOF;
-       }
-
-      /* If we have come to a non-option and did not permute it,
-        either stop the scan or describe it to the caller and pass it by.  */
-
-      if ((argv[optind][0] != '-' || argv[optind][1] == '\0'))
-        return EOF;
-
-      /* We have found another option-ARGV-element.
-        Start decoding its characters.  */
-
-      nextchar = (argv[optind] + 1
-                 + (longopts != NULL && argv[optind][1] == '-'));
-    }
-
-  if (longopts != NULL
-      && ((argv[optind][0] == '-'
-          && (argv[optind][1] == '-' || long_only))))
-    {
-      const struct option *p;
-      char *s = nextchar;
-      int exact = 0;
-      int ambig = 0;
-      const struct option *pfound = NULL;
-      int indfound;
-
-      while (*s && *s != '=')
-       s++;
-
-      /* Test all options for either exact match or abbreviated matches.  */
-      for (p = longopts, option_index = 0; p->name;
-          p++, option_index++)
-       if (!strncmp (p->name, nextchar, s - nextchar))
-         {
-           if (s - nextchar == strlen (p->name))
-             {
-               /* Exact match found.  */
-               pfound = p;
-               indfound = option_index;
-               exact = 1;
-               break;
-             }
-           else if (pfound == NULL)
-             {
-               /* First nonexact match found.  */
-               pfound = p;
-               indfound = option_index;
-             }
-           else
-             /* Second nonexact match found.  */
-             ambig = 1;
-         }
-
-      if (ambig && !exact)
-       {
-         if (opterr)
-           fprintf (stderr, "%s: option `%s' is ambiguous\n",
-                    argv[0], argv[optind]);
-         nextchar += strlen (nextchar);
-         optind++;
-         return '?';
-       }
-
-      if (pfound != NULL)
-       {
-         option_index = indfound;
-         optind++;
-         if (*s)
-           {
-             /* Don't test has_arg with >, because some C compilers don't
-                allow it to be used on enums. */
-             if (pfound->has_arg)
-               optarg = s + 1;
-             else
-               {
-                 if (opterr)
-                   {
-                     if (argv[optind - 1][1] == '-')
-                       /* --option */
-                       fprintf (stderr,
-                                "%s: option `--%s' doesn't allow an argument\n",
-                                argv[0], pfound->name);
-                     else
-                       /* +option or -option */
-                       fprintf (stderr,
-                            "%s: option `%c%s' doesn't allow an argument\n",
-                            argv[0], argv[optind - 1][0], pfound->name);
-                   }
-                 nextchar += strlen (nextchar);
-                 return '?';
-               }
-           }
-         else if (pfound->has_arg == 1)
-           {
-             if (optind < argc)
-               optarg = argv[optind++];
-             else
-               {
-                 if (opterr)
-                   fprintf (stderr, "%s: option `%s' requires an argument\n",
-                            argv[0], argv[optind - 1]);
-                 nextchar += strlen (nextchar);
-                 return '?';
-               }
-           }
-         nextchar += strlen (nextchar);
-         if (longind != NULL)
-           *longind = option_index;
-         if (pfound->flag)
-           {
-             *(pfound->flag) = pfound->val;
-             return 0;
-           }
-         return pfound->val;
-       }
-      /* Can't find it as a long option.  If this is not getopt_long_only,
-        or the option starts with '--' or is not a valid short
-        option, then it's an error.
-        Otherwise interpret it as a short option. */
-      if (!long_only || argv[optind][1] == '-'
-         || strchr (optstring, *nextchar) == NULL)
-       {
-         if (opterr)
-           {
-             if (argv[optind][1] == '-')
-               /* --option */
-               fprintf (stderr, "%s: unrecognized option `--%s'\n",
-                        argv[0], nextchar);
-             else
-               /* +option or -option */
-               fprintf (stderr, "%s: unrecognized option `%c%s'\n",
-                        argv[0], argv[optind][0], nextchar);
-           }
-         nextchar += strlen (nextchar);
-         optind++;
-         return '?';
-       }
-    }
-
-  /* Look at and handle the next option-character.  */
-
-  {
-    char c = *nextchar++;
-    char *temp = strchr (optstring, c);
-
-    /* Increment `optind' when we start to process its last character.  */
-    if (*nextchar == '\0')
-      optind++;
-
-    if (temp == NULL || c == ':')
-      {
-       if (opterr)
-         {
-           if (c < 040 || c >= 0177)
-             fprintf (stderr, "%s: unrecognized option, character code 0%o\n",
-                      argv[0], c);
-           else
-             fprintf (stderr, "%s: unrecognized option `-%c'\n", argv[0], c);
-         }
-       return '?';
-      }
-    if (temp[1] == ':')
-      {
-       if (temp[2] == ':')
-         {
-           /* This is an option that accepts an argument optionally.  */
-           if (*nextchar != '\0')
-             {
-               optarg = nextchar;
-               optind++;
-             }
-           else
-             optarg = 0;
-           nextchar = NULL;
-         }
-       else
-         {
-           /* This is an option that requires an argument.  */
-           if (*nextchar != 0)
-             {
-               optarg = nextchar;
-               /* If we end this ARGV-element by taking the rest as an arg,
-                  we must advance to the next element now.  */
-               optind++;
-             }
-           else if (optind == argc)
-             {
-               if (opterr)
-                 fprintf (stderr, "%s: option `-%c' requires an argument\n",
-                          argv[0], c);
-               c = '?';
-             }
-           else
-             /* We already incremented `optind' once;
-                increment it again when taking next ARGV-elt as argument.  */
-             optarg = argv[optind++];
-           nextchar = NULL;
-         }
-      }
-    return c;
-  }
-}
-
-int
-getopt (int argc, char *const *argv, char const *options)
-{
-  return _getopt_internal (argc, argv, options,
-                           (const struct option *) 0, (int *) 0, 0);
-}
-
-int
-getopt_long (int argc, char *const *argv, char const *options,
-             struct option const *long_options, int *opt_index)
-{
-  return _getopt_internal (argc, argv, options, long_options, opt_index, 0);
-}
-
-int
-getopt_long_only (int argc, char *const *argv, char const *options,
-                  struct option const *long_options, int *opt_index)
-{
-  return _getopt_internal (argc, argv, options, long_options, opt_index, 1);
-}
index e230309022bff4fdd69f1b0220c5c5e8b1d7b467..8974e87e15715bf046332fb901f7c5df4d6cfc64 100644 (file)
 #error both __GNU__ and _linux__ are undefined, choose one
 #endif
 
-#include <m4.c>
-#include <binutils.c>
-#include <gcc.c>
+// m4
+#include <stdlib/abort.c>
+#include <stdlib/atol.c>
+#include <stub/atof.c>
+#include <string/bcmp.c>
+#include <string/bcopy.c>
+#include <string/bzero.c>
+#include <stdio/fileno.c>
+#include <stub/fpurge.c>
+#include <stub/freadahead.c>
+#include <string/index.c>
+#include <ctype/isalnum.c>
+#include <ctype/isalpha.c>
+#include <ctype/iscntrl.c>
+#include <ctype/isprint.c>
+#include <ctype/ispunct.c>
+#include <posix/mktemp.c>
+#include <stub/pclose.c>
+#include <stub/popen.c>
+#include <string/rindex.c>
+#include <stub/rewind.c>
+#include <stub/setbuf.c>
+#include <stub/system.c>
+#include <string/strerror.c>
+
+// binutils
+#include <stdlib/abs.c>
+#include <stub/chown.c>
+#include <stub/ctime.c>
+#include <stdio/fdgets.c>
+#include <stdio/feof.c>
+#include <stdio/fgets.c>
+#include <stub/frexp.c>
+#include <stdio/perror.c>
+#include <stub/sigsetmask.c>
+#include <string/strcspn.c>
+#include <string/strncat.c>
+#include <string/strpbrk.c>
+#include <string/strspn.c>
+#include <stub/sys_siglist.c>
+#include <stub/umask.c>
+#include <stub/utime.c>
+#include <stub/fscanf.c>
+#include <ctype/isascii.c>
+#include <stdlib/bsearch.c>
+#include <stub/gmtime.c>
+#include <posix/sbrk.c>
+#include <string/strdup.c>
+#include <posix/raise.c>
+#include <stub/strftime.c>
+#include <stdlib/mbstowcs.c>
+#include <stdio/clearerr.c>
+#include <math/fabs.c>
+
+// gcc
+
+#include <stdio/freopen.c>
+#include <stub/times.c>
+#include <posix/sleep.c>
+#include <posix/unsetenv.c>
+#include <stdlib/atexit.c>
+#include <posix/alarm.c>
+#include <stub/getpwnam.c>
+
 #if !__GNU__
 #include <stdlib/alloca.c>
 #endif
-#include <glibc.c>
+
+#include <stdlib/__exit.c>
+#include <stub/__cleanup.c>
index bf3ee22cc58ae68327fdda171f4848477bc67abe..166b8a5f2555abac1c5907718b1a966829bb1bf2 100644 (file)
 #error both __GNU__ and _linux__ are undefined, choose one
 #endif
 
-#include <m4.c>
-#include <binutils.c>
-#include <gcc.c>
+// m4
+#include <stdlib/abort.c>
+#include <stub/atof.c>
+#include <string/bcmp.c>
+#include <string/bcopy.c>
+#include <string/bzero.c>
+#include <stdio/fileno.c>
+#include <stub/fpurge.c>
+#include <stub/freadahead.c>
+#include <string/index.c>
+#include <ctype/isalnum.c>
+#include <ctype/isalpha.c>
+#include <ctype/iscntrl.c>
+#include <ctype/isprint.c>
+#include <ctype/ispunct.c>
+#include <posix/mktemp.c>
+#include <stub/pclose.c>
+#include <stub/popen.c>
+#include <string/rindex.c>
+#include <stub/rewind.c>
+#include <stub/setbuf.c>
+#include <stub/system.c>
+#include <string/strerror.c>
 
-int
-__cleanup ()
-{
-  static int stub = 0;
-  if (__mes_debug () && !stub)
-    eputs ("__cleanup stub\n");
-  stub = 1;
-  return 0;
-}
+// binutils
+#include <stdlib/abs.c>
+#include <stub/chown.c>
+#include <stub/ctime.c>
+#include <stdio/fdgets.c>
+#include <stdio/feof.c>
+#include <stdio/fgets.c>
+#include <stub/frexp.c>
+#include <stdio/perror.c>
+#include <stub/sigsetmask.c>
+#include <string/strcspn.c>
+#include <string/strncat.c>
+#include <string/strpbrk.c>
+#include <string/strspn.c>
+#include <stub/sys_siglist.c>
+#include <stub/umask.c>
+#include <stub/utime.c>
+#include <stub/fscanf.c>
+#include <ctype/isascii.c>
+#include <stdlib/bsearch.c>
+#include <stub/gmtime.c>
+#include <posix/sbrk.c>
+#include <string/strdup.c>
+#include <posix/raise.c>
+#include <stub/strftime.c>
+#include <stdlib/mbstowcs.c>
+#include <stdio/clearerr.c>
+#include <math/fabs.c>
+
+// gcc
+
+#include <stdio/freopen.c>
+#include <stub/times.c>
+#include <posix/sleep.c>
+#include <posix/unsetenv.c>
+#include <stdlib/atexit.c>
+#include <posix/alarm.c>
+#include <stub/getpwnam.c>
+
+#if !__GNU__
+#include <stdlib/alloca.c>
+#endif
+
+//#include <stdlib/__exit.c>
+#include <stub/__cleanup.c>
 
 int
 __libc_subinit ()
index d8f0dbfc2ec3f7779f0e66ed02848afd6151300b..3eb4cc23e86915eec871f6e79dac21873bf454e7 100644 (file)
@@ -18,4 +18,4 @@
  * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#include <getopt.c>
+#include <posix/getopt.c>
diff --git a/lib/m4.c b/lib/m4.c
deleted file mode 100644 (file)
index aaee563..0000000
--- a/lib/m4.c
+++ /dev/null
@@ -1,253 +0,0 @@
-/* -*-comment-start: "//";comment-end:""-*-
- * GNU Mes --- Maxwell Equations of Software
- * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
- *
- * This file is part of GNU Mes.
- *
- * GNU Mes is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or (at
- * your option) any later version.
- *
- * GNU Mes is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include <ctype.h>
-
-#include "stdlib/abort.c"
-
-int
-atof (int x)
-{
-  static int stub = 0;
-  if (__mes_debug () && !stub)
-    eputs ("atof stub\n");
-  stub = 1;
-  return 0;
-}
-
-int
-atol (char const *s)
-{
-  return atoi (s);
-}
-
-int
-bcmp (void const *s1, void const *s2, size_t size)
-{
-  return memcmp (s1, s2, size);
-}
-
-void
-bcopy (void const *src, void *dest, size_t n)
-{
-  memmove (dest, src, n);
-}
-
-int
-bzero (void *block, size_t size)
-{
-  return memset (block, 0, size);
-}
-
-int
-fileno (FILE *stream)
-{
-  return (int)stream;
-}
-
-int
-fpurge (FILE *stream)
-{
-  static int stub = 0;
-  if (__mes_debug () && !stub)
-    eputs ("fpurge stub\n");
-  stub = 1;
-  errno = 0;
-  return 0;
-}
-
-size_t
-freadahead (FILE *fp)
-{
-  static int stub = 0;
-  if (__mes_debug () && !stub)
-    eputs ("freadahead stub\n");
-  stub = 1;
-  errno = 0;
-  return 0;
-}
-
-int
-index (char const *s, int c)
-{
-  return strchr (s, c);
-}
-
-int
-isalnum (int c)
-{
-  return isdigit (c) || isalpha (c);
-}
-
-int
-isalpha (int c)
-{
-  return islower (c) || isupper (c);
-}
-
-int
-iscntrl (int c)
-{
-  return c >= 0 && c < 32;
-}
-
-int
-isprint (int c)
-{
-  return c >= 32 && c < 127;
-}
-
-int
-ispunct (int c)
-{
-  return isprint (c) && !isspace (c) && !isalnum (c);
-}
-
-char *
-mktemp (char *template)
-{
-  char *p = strchr (template, '\0');
-  int q = (int)template;
-  *--p = ((unsigned char)(q >> 4)) % 26 + 'a';
-  *--p = ((unsigned char)(q >> 8)) % 26 + 'a';
-  *--p = ((unsigned char)(q >> 12)) % 26 + 'a';
-  *--p = ((unsigned char)(q >> 16)) % 26 + 'a';
-  *--p = ((unsigned char)(q >> 20)) % 26 + 'a';
-  *--p = ((unsigned char)(q >> 24)) % 26 + 'a';
-  return template;
-}
-
-int
-pclose (int x)
-{
-  static int stub = 0;
-  if (__mes_debug () && !stub)
-    eputs ("pclose stub\n");
-  stub = 1;
-  errno = 0;
-  return 0;
-}
-
-int
-popen (int x)
-{
-  static int stub = 0;
-  if (__mes_debug () && !stub)
-    eputs ("popen stub\n");
-  stub = 1;
-  errno = 0;
-  return 0;
-}
-
-int
-rindex (char const *s, int c)
-{
-  return strrchr (s, c);
-}
-
-int
-rewind (int x)
-{
-  static int stub = 0;
-  if (__mes_debug () && !stub)
-    eputs ("rewind stub\n");
-  stub = 1;
-  errno = 0;
-  return 0;
-}
-
-int
-setbuf (int x)
-{
-  static int stub = 0;
-  if (__mes_debug () && !stub)
-    eputs ("setbuf stub\n");
-  stub = 1;
-  errno = 0;
-  return 0;
-}
-
-int
-system (int x)
-{
-  static int stub = 0;
-  if (__mes_debug () && !stub)
-    eputs ("system stub\n");
-  stub = 1;
-  errno = 0;
-  return 0;
-}
-
-char *sys_errlist[] = {
-  "error 00",
-  "error 01",
-  "error 02",
-  "error 03",
-  "error 04",
-  "error 05",
-  "error 06",
-  "error 07",
-  "error 08",
-  "error 09",
-  "error 10",
-  "error 11",
-  "error 12",
-  "error 13",
-  "error 14",
-  "error 15",
-  "error 16",
-  "error 17",
-  "error 18",
-  "error 19",
-  "error 20",
-  "error 21",
-  "error 22",
-  "error 23",
-  "error 24",
-  "error 25",
-  "error 26",
-  "error 27",
-  "error 28",
-  "error 29",
-  "error 30",
-  "error 31",
-  "error 32",
-  "error 33",
-  "error 34",
-  "error 35",
-  "error 36",
-  "error 37",
-  "error 38",
-  "error 39",
-};
-
-int sys_nerr = 39;
-
-char *
-strerror (int errnum)
-{
-  if (__mes_debug ())
-    {
-      eputs ("strerror errnum="); eputs (itoa (errnum)); eputs ("\n");
-    }
-  if (errnum > 0 && errnum <= sys_nerr)
-    return sys_errlist[errnum];
-  return "sterror: unknown error";
-}
diff --git a/lib/math/fabs.c b/lib/math/fabs.c
new file mode 100644 (file)
index 0000000..5726c72
--- /dev/null
@@ -0,0 +1,29 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+//#include <math.h>
+
+double
+fabs (double number)
+{
+  if (number < 0)
+    return -number;
+  return number;
+}
diff --git a/lib/posix/alarm.c b/lib/posix/alarm.c
new file mode 100644 (file)
index 0000000..5261c2e
--- /dev/null
@@ -0,0 +1,37 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <unistd.h>
+
+unsigned int
+alarm (unsigned int seconds)
+{
+#if !__MESC__
+  struct itimerval old;
+  struct itimerval new;
+  new.it_interval.tv_usec = 0;
+  new.it_interval.tv_sec = 0;
+  new.it_value.tv_usec = 0;
+  new.it_value.tv_sec = (long int) seconds;
+  if (setitimer (ITIMER_REAL, &new, &old) < 0)
+    return 0;
+  return old.it_value.tv_sec;
+#endif
+}
diff --git a/lib/posix/getopt.c b/lib/posix/getopt.c
new file mode 100644 (file)
index 0000000..956a105
--- /dev/null
@@ -0,0 +1,382 @@
+/* Getopt for GNU.
+   Copyright (C) 1987, 88, 89, 90, 91, 1992 Free Software Foundation, Inc.
+   Copyright (C) 2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
+\f
+
+#include <stdio.h>
+#include <string.h>
+#include <getopt.h>
+
+#if __MESC__
+#define static
+#endif
+
+/* For communication from `getopt' to the caller.
+   When `getopt' finds an option that takes an argument,
+   the argument value is returned here. */
+
+char *optarg = 0;
+
+/* Index in ARGV of the next element to be scanned.
+   This is used for communication to and from the caller
+   and for communication between successive calls to `getopt'.
+
+   On entry to `getopt', zero means this is the first call; initialize.
+
+   When `getopt' returns EOF, this is the index of the first of the
+   non-option elements that the caller should itself scan.
+
+   Otherwise, `optind' communicates from one call to the next
+   how much of ARGV has been scanned so far.  */
+
+int optind = 0;
+
+/* The next char to be scanned in the option-element
+   in which the last option character we returned was found.
+   This allows us to pick up the scan where we left off.
+
+   If this is zero, or a null string, it means resume the scan
+   by advancing to the next ARGV-element.  */
+
+static char *nextchar;
+
+/* Callers store zero here to inhibit the error message
+   for unrecognized options.  */
+
+int opterr = 1;
+
+\f
+/* Handle permutation of arguments.  */
+
+/* Describe the part of ARGV that contains non-options that have
+   been skipped.  `first_nonopt' is the index in ARGV of the first of them;
+   `last_nonopt' is the index after the last of them.  */
+
+static int first_nonopt;
+static int last_nonopt;
+
+\f
+/* Scan elements of ARGV (whose length is ARGC) for option characters
+   given in OPTSTRING.
+
+   If an element of ARGV starts with '-', and is not exactly "-" or "--",
+   then it is an option element.  The characters of this element
+   (aside from the initial '-') are option characters.  If `getopt'
+   is called repeatedly, it returns successively each of the option characters
+   from each of the option elements.
+
+   If `getopt' finds another option character, it returns that character,
+   updating `optind' and `nextchar' so that the next call to `getopt' can
+   resume the scan with the following option character or ARGV-element.
+
+   If there are no more option characters, `getopt' returns `EOF'.
+   Then `optind' is the index in ARGV of the first ARGV-element
+   that is not an option.  (The ARGV-elements have been permuted
+   so that those that are not options now come last.)
+
+   OPTSTRING is a string containing the legitimate option characters.
+   If an option character is seen that is not listed in OPTSTRING,
+   return '?' after printing an error message.  If you set `opterr' to
+   zero, the error message is suppressed but we still return '?'.
+
+   If a char in OPTSTRING is followed by a colon, that means it wants an arg,
+   so the following text in the same ARGV-element, or the text of the following
+   ARGV-element, is returned in `optarg'.  Two colons mean an option that
+   wants an optional arg; if there is text in the current ARGV-element,
+   it is returned in `optarg', otherwise `optarg' is set to zero.
+
+   If OPTSTRING starts with `-' or `+', it requests different methods of
+   handling the non-option ARGV-elements.
+
+   Long-named options begin with `--' instead of `-'.
+   Their names may be abbreviated as long as the abbreviation is unique
+   or is an exact match for some defined option.  If they have an
+   argument, it follows the option name in the same ARGV-element, separated
+   from the option name by a `=', or else the in next ARGV-element.
+   When `getopt' finds a long-named option, it returns 0 if that option's
+   `flag' field is nonzero, the value of the option's `val' field
+   if the `flag' field is zero.
+
+   The elements of ARGV aren't really const, because we permute them.
+   But we pretend they're const in the prototype to be compatible
+   with other systems.
+
+   LONGOPTS is a vector of `struct option' terminated by an
+   element containing a name which is zero.
+
+   LONGIND returns the index in LONGOPT of the long-named option found.
+   It is only valid when a long-named option has been found by the most
+   recent call.
+
+   If LONG_ONLY is nonzero, '-' as well as '--' can introduce
+   long-named options.  */
+
+int
+_getopt_internal (int argc, char *const
+                  *argv, char const *optstring, struct option const *longopts, int *longind, int long_only)
+{
+  int option_index;
+
+  optarg = 0;
+
+  /* Initialize the internal data when the first call is made.
+     Start processing options with ARGV-element 1 (since ARGV-element 0
+     is the program name); the sequence of previously skipped
+     non-option ARGV-elements is empty.  */
+
+  if (optind == 0)
+    {
+      first_nonopt = last_nonopt = optind = 1;
+
+      nextchar = NULL;
+    }
+
+  if (nextchar == NULL || *nextchar == '\0')
+    {
+      /* If we have done all the ARGV-elements, stop the scan
+        and back over any non-options that we skipped and permuted.  */
+
+      if (optind == argc)
+       {
+         /* Set the next-arg-index to point at the non-options
+            that we previously skipped, so the caller will digest them.  */
+         if (first_nonopt != last_nonopt)
+           optind = first_nonopt;
+         return EOF;
+       }
+
+      /* If we have come to a non-option and did not permute it,
+        either stop the scan or describe it to the caller and pass it by.  */
+
+      if ((argv[optind][0] != '-' || argv[optind][1] == '\0'))
+        return EOF;
+
+      /* We have found another option-ARGV-element.
+        Start decoding its characters.  */
+
+      nextchar = (argv[optind] + 1
+                 + (longopts != NULL && argv[optind][1] == '-'));
+    }
+
+  if (longopts != NULL
+      && ((argv[optind][0] == '-'
+          && (argv[optind][1] == '-' || long_only))))
+    {
+      const struct option *p;
+      char *s = nextchar;
+      int exact = 0;
+      int ambig = 0;
+      const struct option *pfound = NULL;
+      int indfound;
+
+      while (*s && *s != '=')
+       s++;
+
+      /* Test all options for either exact match or abbreviated matches.  */
+      for (p = longopts, option_index = 0; p->name;
+          p++, option_index++)
+       if (!strncmp (p->name, nextchar, s - nextchar))
+         {
+           if (s - nextchar == strlen (p->name))
+             {
+               /* Exact match found.  */
+               pfound = p;
+               indfound = option_index;
+               exact = 1;
+               break;
+             }
+           else if (pfound == NULL)
+             {
+               /* First nonexact match found.  */
+               pfound = p;
+               indfound = option_index;
+             }
+           else
+             /* Second nonexact match found.  */
+             ambig = 1;
+         }
+
+      if (ambig && !exact)
+       {
+         if (opterr)
+           fprintf (stderr, "%s: option `%s' is ambiguous\n",
+                    argv[0], argv[optind]);
+         nextchar += strlen (nextchar);
+         optind++;
+         return '?';
+       }
+
+      if (pfound != NULL)
+       {
+         option_index = indfound;
+         optind++;
+         if (*s)
+           {
+             /* Don't test has_arg with >, because some C compilers don't
+                allow it to be used on enums. */
+             if (pfound->has_arg)
+               optarg = s + 1;
+             else
+               {
+                 if (opterr)
+                   {
+                     if (argv[optind - 1][1] == '-')
+                       /* --option */
+                       fprintf (stderr,
+                                "%s: option `--%s' doesn't allow an argument\n",
+                                argv[0], pfound->name);
+                     else
+                       /* +option or -option */
+                       fprintf (stderr,
+                            "%s: option `%c%s' doesn't allow an argument\n",
+                            argv[0], argv[optind - 1][0], pfound->name);
+                   }
+                 nextchar += strlen (nextchar);
+                 return '?';
+               }
+           }
+         else if (pfound->has_arg == 1)
+           {
+             if (optind < argc)
+               optarg = argv[optind++];
+             else
+               {
+                 if (opterr)
+                   fprintf (stderr, "%s: option `%s' requires an argument\n",
+                            argv[0], argv[optind - 1]);
+                 nextchar += strlen (nextchar);
+                 return '?';
+               }
+           }
+         nextchar += strlen (nextchar);
+         if (longind != NULL)
+           *longind = option_index;
+         if (pfound->flag)
+           {
+             *(pfound->flag) = pfound->val;
+             return 0;
+           }
+         return pfound->val;
+       }
+      /* Can't find it as a long option.  If this is not getopt_long_only,
+        or the option starts with '--' or is not a valid short
+        option, then it's an error.
+        Otherwise interpret it as a short option. */
+      if (!long_only || argv[optind][1] == '-'
+         || strchr (optstring, *nextchar) == NULL)
+       {
+         if (opterr)
+           {
+             if (argv[optind][1] == '-')
+               /* --option */
+               fprintf (stderr, "%s: unrecognized option `--%s'\n",
+                        argv[0], nextchar);
+             else
+               /* +option or -option */
+               fprintf (stderr, "%s: unrecognized option `%c%s'\n",
+                        argv[0], argv[optind][0], nextchar);
+           }
+         nextchar += strlen (nextchar);
+         optind++;
+         return '?';
+       }
+    }
+
+  /* Look at and handle the next option-character.  */
+
+  {
+    char c = *nextchar++;
+    char *temp = strchr (optstring, c);
+
+    /* Increment `optind' when we start to process its last character.  */
+    if (*nextchar == '\0')
+      optind++;
+
+    if (temp == NULL || c == ':')
+      {
+       if (opterr)
+         {
+           if (c < 040 || c >= 0177)
+             fprintf (stderr, "%s: unrecognized option, character code 0%o\n",
+                      argv[0], c);
+           else
+             fprintf (stderr, "%s: unrecognized option `-%c'\n", argv[0], c);
+         }
+       return '?';
+      }
+    if (temp[1] == ':')
+      {
+       if (temp[2] == ':')
+         {
+           /* This is an option that accepts an argument optionally.  */
+           if (*nextchar != '\0')
+             {
+               optarg = nextchar;
+               optind++;
+             }
+           else
+             optarg = 0;
+           nextchar = NULL;
+         }
+       else
+         {
+           /* This is an option that requires an argument.  */
+           if (*nextchar != 0)
+             {
+               optarg = nextchar;
+               /* If we end this ARGV-element by taking the rest as an arg,
+                  we must advance to the next element now.  */
+               optind++;
+             }
+           else if (optind == argc)
+             {
+               if (opterr)
+                 fprintf (stderr, "%s: option `-%c' requires an argument\n",
+                          argv[0], c);
+               c = '?';
+             }
+           else
+             /* We already incremented `optind' once;
+                increment it again when taking next ARGV-elt as argument.  */
+             optarg = argv[optind++];
+           nextchar = NULL;
+         }
+      }
+    return c;
+  }
+}
+
+int
+getopt (int argc, char *const *argv, char const *options)
+{
+  return _getopt_internal (argc, argv, options,
+                           (const struct option *) 0, (int *) 0, 0);
+}
+
+int
+getopt_long (int argc, char *const *argv, char const *options,
+             struct option const *long_options, int *opt_index)
+{
+  return _getopt_internal (argc, argv, options, long_options, opt_index, 0);
+}
+
+int
+getopt_long_only (int argc, char *const *argv, char const *options,
+                  struct option const *long_options, int *opt_index)
+{
+  return _getopt_internal (argc, argv, options, long_options, opt_index, 1);
+}
diff --git a/lib/posix/mktemp.c b/lib/posix/mktemp.c
new file mode 100644 (file)
index 0000000..256db92
--- /dev/null
@@ -0,0 +1,35 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <unistd.h>
+
+char *
+mktemp (char *template)
+{
+  char *p = strchr (template, '\0');
+  int q = (int)template;
+  *--p = ((unsigned char)(q >> 4)) % 26 + 'a';
+  *--p = ((unsigned char)(q >> 8)) % 26 + 'a';
+  *--p = ((unsigned char)(q >> 12)) % 26 + 'a';
+  *--p = ((unsigned char)(q >> 16)) % 26 + 'a';
+  *--p = ((unsigned char)(q >> 20)) % 26 + 'a';
+  *--p = ((unsigned char)(q >> 24)) % 26 + 'a';
+  return template;
+}
diff --git a/lib/posix/raise.c b/lib/posix/raise.c
new file mode 100644 (file)
index 0000000..f05c210
--- /dev/null
@@ -0,0 +1,27 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <unistd.h>
+
+int
+raise (int signum)
+{
+  kill (getpid (), signum);
+}
diff --git a/lib/posix/sbrk.c b/lib/posix/sbrk.c
new file mode 100644 (file)
index 0000000..723db5f
--- /dev/null
@@ -0,0 +1,34 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <unistd.h>
+
+#if __SBRK_CHAR_PTRDIFF
+char *
+sbrk (ptrdiff_t)
+#else
+void *
+sbrk (intptr_t delta)
+#endif
+{
+  if (delta >= 0)
+    return malloc (delta);
+  return __brk;
+}
diff --git a/lib/posix/sleep.c b/lib/posix/sleep.c
new file mode 100644 (file)
index 0000000..4e3377a
--- /dev/null
@@ -0,0 +1,31 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <unistd.h>
+
+unsigned int
+sleep (unsigned int seconds)
+{
+  struct timespec requested_time;
+  struct timespec remaining;
+  requested_time.tv_sec = seconds;
+  requested_time.tv_nsec = 0;
+  return nanosleep (&requested_time, &remaining);
+}
diff --git a/lib/posix/unsetenv.c b/lib/posix/unsetenv.c
new file mode 100644 (file)
index 0000000..70aed68
--- /dev/null
@@ -0,0 +1,39 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <unistd.h>
+
+void
+unsetenv (char const *name)
+{
+  int length = strlen (name);
+  char **p = environ;
+  while (*p)
+    {
+      if (!strncmp (name, *p, length) && *(*p + length) == '=')
+        {
+          char **q = p;
+          q[0] = q[1];
+          while (*q++)
+            q[0] = q[1];
+        }
+      p++;
+    }
+}
diff --git a/lib/stdio/clearerr.c b/lib/stdio/clearerr.c
new file mode 100644 (file)
index 0000000..3be2ba9
--- /dev/null
@@ -0,0 +1,27 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <stdio.h>
+
+void
+clearerr (FILE *stream)
+{
+  errno = 0;
+}
diff --git a/lib/stdio/fdgets.c b/lib/stdio/fdgets.c
new file mode 100644 (file)
index 0000000..b151a45
--- /dev/null
@@ -0,0 +1,39 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <stdio.h>
+
+char *
+fdgets (char *s, int count, int fd)
+{
+  int c = 0;
+  char *p = s;
+  while (--count > 0 && c != '\n')
+    {
+      c = fdgetc (fd);
+      if (c == EOF)
+        break;
+      *p++ = c;
+    }
+  if (p == s && (c == EOF || count == -1))
+    return 0;
+  *p = 0;
+  return s;
+}
diff --git a/lib/stdio/feof.c b/lib/stdio/feof.c
new file mode 100644 (file)
index 0000000..0e7149f
--- /dev/null
@@ -0,0 +1,30 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <stdio.h>
+
+int
+feof (FILE *stream)
+{
+  char c = fgetc (stream);
+  if (c != EOF)
+    ungetc (c, stream);
+  return c == EOF;
+}
diff --git a/lib/stdio/fgets.c b/lib/stdio/fgets.c
new file mode 100644 (file)
index 0000000..fb6d5f7
--- /dev/null
@@ -0,0 +1,27 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <stdio.h>
+
+char *
+fgets (char *s, int count, FILE *stream)
+{
+  return fdgets (s, count, (int)stream);
+}
diff --git a/lib/stdio/fileno.c b/lib/stdio/fileno.c
new file mode 100644 (file)
index 0000000..f5fe98e
--- /dev/null
@@ -0,0 +1,27 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <stdio.h>
+
+int
+fileno (FILE *stream)
+{
+  return (int)stream;
+}
diff --git a/lib/stdio/freeopen.c b/lib/stdio/freeopen.c
new file mode 100644 (file)
index 0000000..757e48b
--- /dev/null
@@ -0,0 +1,28 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <stdio.h>
+
+FILE *
+freopen (char const *file_name, char const *opentype, FILE *stream)
+{
+  fclose (stream);
+  return fopen (file_name, opentype);
+}
diff --git a/lib/stdio/freopen.c b/lib/stdio/freopen.c
new file mode 100644 (file)
index 0000000..757e48b
--- /dev/null
@@ -0,0 +1,28 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <stdio.h>
+
+FILE *
+freopen (char const *file_name, char const *opentype, FILE *stream)
+{
+  fclose (stream);
+  return fopen (file_name, opentype);
+}
diff --git a/lib/stdio/perror.c b/lib/stdio/perror.c
new file mode 100644 (file)
index 0000000..8ac7236
--- /dev/null
@@ -0,0 +1,27 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <stdio.h>
+
+void
+perror (char const *message)
+{
+  fprintf (stderr, "%s: %s\n", strerror (errno), message);
+}
diff --git a/lib/stdlib/__exit.c b/lib/stdlib/__exit.c
new file mode 100644 (file)
index 0000000..4eb7c76
--- /dev/null
@@ -0,0 +1,25 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+int
+__exit (int status)
+{
+  exit (status);
+}
diff --git a/lib/stdlib/abs.c b/lib/stdlib/abs.c
new file mode 100644 (file)
index 0000000..338aeaf
--- /dev/null
@@ -0,0 +1,29 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <stdlib.h>
+
+int
+abs (int x)
+{
+  if (x < 0)
+    return -x;
+  return x;
+}
diff --git a/lib/stdlib/atexit.c b/lib/stdlib/atexit.c
new file mode 100644 (file)
index 0000000..df35321
--- /dev/null
@@ -0,0 +1,27 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <stdlib.h>
+
+int
+atexit (void (*function) (void))
+{
+  __call_at_exit = function;
+}
diff --git a/lib/stdlib/atol.c b/lib/stdlib/atol.c
new file mode 100644 (file)
index 0000000..9339537
--- /dev/null
@@ -0,0 +1,27 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <stdlib.h>
+
+int
+atol (char const *s)
+{
+  return atoi (s);
+}
diff --git a/lib/stdlib/bsearch.c b/lib/stdlib/bsearch.c
new file mode 100644 (file)
index 0000000..a630302
--- /dev/null
@@ -0,0 +1,35 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <stdlib.h>
+
+void *
+#if __MESC__
+bsearch (void const *key, void const *array, size_t count, size_t size, void (*compare) ())
+#else
+bsearch (void const *key, void const *array, size_t count, size_t size, comparison_fn_t compare)
+#endif
+{
+  static int stub = 0;
+  if (__mes_debug () && !stub)
+    eputs ("bsearch stub\n");
+  stub = 1;
+  return 0;
+}
diff --git a/lib/stdlib/mbstowcs.c b/lib/stdlib/mbstowcs.c
new file mode 100644 (file)
index 0000000..9330f35
--- /dev/null
@@ -0,0 +1,37 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <stdlib.h>
+
+#if !__MESC__
+typedef char wchar_t[];
+
+size_t
+mbstowcs (wchar_t *wstring, char const *string,
+          size_t size)
+{
+  static int stub = 0;
+  if (__mes_debug () && !stub)
+    eputs ("mbstowcs stub\n");
+  stub = 1;
+  strcpy (wstring, string);
+  return strlen (string);
+}
+#endif
diff --git a/lib/string/bcmp.c b/lib/string/bcmp.c
new file mode 100644 (file)
index 0000000..bf2c597
--- /dev/null
@@ -0,0 +1,27 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <string.h>
+
+int
+bcmp (void const *s1, void const *s2, size_t size)
+{
+  return memcmp (s1, s2, size);
+}
diff --git a/lib/string/bcopy.c b/lib/string/bcopy.c
new file mode 100644 (file)
index 0000000..7b02a1d
--- /dev/null
@@ -0,0 +1,27 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <string.h>
+
+void
+bcopy (void const *src, void *dest, size_t n)
+{
+  memmove (dest, src, n);
+}
diff --git a/lib/string/bzero.c b/lib/string/bzero.c
new file mode 100644 (file)
index 0000000..69bdcca
--- /dev/null
@@ -0,0 +1,27 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <string.h>
+
+int
+bzero (void *block, size_t size)
+{
+  return memset (block, 0, size);
+}
diff --git a/lib/string/index.c b/lib/string/index.c
new file mode 100644 (file)
index 0000000..3841d94
--- /dev/null
@@ -0,0 +1,27 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <string.h>
+
+int
+index (char const *s, int c)
+{
+  return strchr (s, c);
+}
diff --git a/lib/string/rindex.c b/lib/string/rindex.c
new file mode 100644 (file)
index 0000000..848fae7
--- /dev/null
@@ -0,0 +1,27 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <string.h>
+
+int
+rindex (char const *s, int c)
+{
+  return strrchr (s, c);
+}
diff --git a/lib/string/strcspn.c b/lib/string/strcspn.c
new file mode 100644 (file)
index 0000000..4a4ed5e
--- /dev/null
@@ -0,0 +1,33 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <string.h>
+
+size_t
+strcspn (char const *string, char const *stopset)
+{
+  char *p = string;
+  while (*p)
+    if (strchr (stopset, *p))
+      break;
+    else
+      p++;
+  return p - string;
+}
diff --git a/lib/string/strdup.c b/lib/string/strdup.c
new file mode 100644 (file)
index 0000000..5a81323
--- /dev/null
@@ -0,0 +1,31 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <string.h>
+
+char *
+strdup (char const *s)
+{
+  size_t length = strlen (s) + 1;
+  char *p = (char*)malloc (length);
+  if (p)
+    return memcpy (p, s, length);
+  return 0;
+}
diff --git a/lib/string/strerror.c b/lib/string/strerror.c
new file mode 100644 (file)
index 0000000..d409482
--- /dev/null
@@ -0,0 +1,79 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <string.h>
+
+char *sys_errlist[] =
+  {
+   "error 00",
+   "error 01",
+   "error 02",
+   "error 03",
+   "error 04",
+   "error 05",
+   "error 06",
+   "error 07",
+   "error 08",
+   "error 09",
+   "error 10",
+   "error 11",
+   "error 12",
+   "error 13",
+   "error 14",
+   "error 15",
+   "error 16",
+   "error 17",
+   "error 18",
+   "error 19",
+   "error 20",
+   "error 21",
+   "error 22",
+   "error 23",
+   "error 24",
+   "error 25",
+   "error 26",
+   "error 27",
+   "error 28",
+   "error 29",
+   "error 30",
+   "error 31",
+   "error 32",
+   "error 33",
+   "error 34",
+   "error 35",
+   "error 36",
+   "error 37",
+   "error 38",
+   "error 39",
+  };
+
+int sys_nerr = 39;
+
+char *
+strerror (int errnum)
+{
+  if (__mes_debug ())
+    {
+      eputs ("strerror errnum="); eputs (itoa (errnum)); eputs ("\n");
+    }
+  if (errnum > 0 && errnum <= sys_nerr)
+    return sys_errlist[errnum];
+  return "sterror: unknown error";
+}
diff --git a/lib/string/strncat.c b/lib/string/strncat.c
new file mode 100644 (file)
index 0000000..ff3ba12
--- /dev/null
@@ -0,0 +1,33 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <string.h>
+
+char *
+strncat (char *to, char const *from, size_t size)
+{
+  if (size == 0)
+    return to;
+  char *p = strchr (to , '\0');
+  while (*from && size-- > 0)
+    *p++ = *from++;
+  *p = 0;
+  return to;
+}
diff --git a/lib/string/strpbrk.c b/lib/string/strpbrk.c
new file mode 100644 (file)
index 0000000..a79a812
--- /dev/null
@@ -0,0 +1,33 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <string.h>
+
+char *
+strpbrk (char const *string, char const* stopset)
+{
+  char *p = string;
+  while (*p)
+    if (strchr (stopset, *p))
+      break;
+    else
+      p++;
+  return p;
+}
diff --git a/lib/string/strspn.c b/lib/string/strspn.c
new file mode 100644 (file)
index 0000000..d668d29
--- /dev/null
@@ -0,0 +1,33 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <string.h>
+
+size_t
+strspn (char const *string, char const *skipset)
+{
+  char *p = string;
+  while (*p)
+    if (!strchr (skipset, *p))
+      break;
+    else
+      p++;
+  return p - string;
+}
diff --git a/lib/stub/__cleanup.c b/lib/stub/__cleanup.c
new file mode 100644 (file)
index 0000000..f7299fc
--- /dev/null
@@ -0,0 +1,31 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <libmes.h>
+
+int
+__cleanup ()
+{
+  static int stub = 0;
+  if (__mes_debug () && !stub)
+    eputs ("__cleanup stub\n");
+  stub = 1;
+  return 0;
+}
diff --git a/lib/stub/atof.c b/lib/stub/atof.c
new file mode 100644 (file)
index 0000000..3cc951d
--- /dev/null
@@ -0,0 +1,31 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <libmes.h>
+
+int
+atof (int x)
+{
+  static int stub = 0;
+  if (__mes_debug () && !stub)
+    eputs ("atof stub\n");
+  stub = 1;
+  return 0;
+}
diff --git a/lib/stub/chown.c b/lib/stub/chown.c
new file mode 100644 (file)
index 0000000..bf44169
--- /dev/null
@@ -0,0 +1,33 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <libmes.h>
+#include <unistd.h>
+
+int
+chown (char const *file_name, uid_t owner, gid_t group)
+{
+  static int stub = 0;
+  if (__mes_debug () && !stub)
+    eputs ("chown stub\n");
+  stub = 1;
+  errno = 0;
+  return 0;
+}
diff --git a/lib/stub/ctime.c b/lib/stub/ctime.c
new file mode 100644 (file)
index 0000000..30c7475
--- /dev/null
@@ -0,0 +1,32 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <libmes.h>
+
+int
+ctime (int x)
+{
+  static int stub = 0;
+  if (__mes_debug () && !stub)
+    eputs ("ctime stub\n");
+  stub = 1;
+  errno = 0;
+  return 0;
+}
diff --git a/lib/stub/fpurge.c b/lib/stub/fpurge.c
new file mode 100644 (file)
index 0000000..991cd49
--- /dev/null
@@ -0,0 +1,33 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <libmes.h>
+#include <stdio.h>
+
+int
+fpurge (FILE *stream)
+{
+  static int stub = 0;
+  if (__mes_debug () && !stub)
+    eputs ("fpurge stub\n");
+  stub = 1;
+  errno = 0;
+  return 0;
+}
diff --git a/lib/stub/freadahead.c b/lib/stub/freadahead.c
new file mode 100644 (file)
index 0000000..136b03a
--- /dev/null
@@ -0,0 +1,33 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <libmes.h>
+#include <stdio.h>
+
+size_t
+freadahead (FILE *fp)
+{
+  static int stub = 0;
+  if (__mes_debug () && !stub)
+    eputs ("freadahead stub\n");
+  stub = 1;
+  errno = 0;
+  return 0;
+}
diff --git a/lib/stub/frexp.c b/lib/stub/frexp.c
new file mode 100644 (file)
index 0000000..22c1e6c
--- /dev/null
@@ -0,0 +1,31 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <libmes.h>
+
+int
+frexp (int x)
+{
+  static int stub = 0;
+  if (__mes_debug () && !stub)
+    eputs ("frexp stub\n");
+  stub = 1;
+  return 0;
+}
diff --git a/lib/stub/fscanf.c b/lib/stub/fscanf.c
new file mode 100644 (file)
index 0000000..daae853
--- /dev/null
@@ -0,0 +1,32 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <libmes.h>
+#include <stdio.h>
+
+int
+fscanf (FILE *stream, char const *template, ...)
+{
+  static int stub = 0;
+  if (__mes_debug () && !stub)
+    eputs ("fscan stub\n");
+  stub = 1;
+  return 0;
+}
diff --git a/lib/stub/getpwnam.c b/lib/stub/getpwnam.c
new file mode 100644 (file)
index 0000000..472b42a
--- /dev/null
@@ -0,0 +1,33 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <libmes.h>
+#include <pwd.h>
+
+struct passwd *
+getpwnam (const char *NAME)
+{
+  static int stub = 0;
+  if (__mes_debug () && !stub)
+    eputs ("getpwnam stub\n");
+  stub = 1;
+  errno = 0;
+  return 0;
+}
diff --git a/lib/stub/gmtime.c b/lib/stub/gmtime.c
new file mode 100644 (file)
index 0000000..85e45dd
--- /dev/null
@@ -0,0 +1,34 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <libmes.h>
+#include <time.h>
+#include <sys/time.h>
+
+struct tm *
+gmtime (time_t const *time)
+{
+  static int stub = 0;
+  if (__mes_debug () && !stub)
+    eputs ("gmtime stub\n");
+  stub = 1;
+  errno = 0;
+  return localtime (time);
+}
diff --git a/lib/stub/pclose.c b/lib/stub/pclose.c
new file mode 100644 (file)
index 0000000..244bcc7
--- /dev/null
@@ -0,0 +1,32 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <libmes.h>
+
+int
+pclose (int x)
+{
+  static int stub = 0;
+  if (__mes_debug () && !stub)
+    eputs ("pclose stub\n");
+  stub = 1;
+  errno = 0;
+  return 0;
+}
diff --git a/lib/stub/popen.c b/lib/stub/popen.c
new file mode 100644 (file)
index 0000000..294a24c
--- /dev/null
@@ -0,0 +1,32 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <libmes.h>
+
+int
+popen (int x)
+{
+  static int stub = 0;
+  if (__mes_debug () && !stub)
+    eputs ("popen stub\n");
+  stub = 1;
+  errno = 0;
+  return 0;
+}
diff --git a/lib/stub/rewind.c b/lib/stub/rewind.c
new file mode 100644 (file)
index 0000000..e62d3fb
--- /dev/null
@@ -0,0 +1,32 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <libmes.h>
+
+int
+rewind (int x)
+{
+  static int stub = 0;
+  if (__mes_debug () && !stub)
+    eputs ("rewind stub\n");
+  stub = 1;
+  errno = 0;
+  return 0;
+}
diff --git a/lib/stub/setbuf.c b/lib/stub/setbuf.c
new file mode 100644 (file)
index 0000000..debf05b
--- /dev/null
@@ -0,0 +1,32 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <libmes.h>
+
+int
+setbuf (int x)
+{
+  static int stub = 0;
+  if (__mes_debug () && !stub)
+    eputs ("setbuf stub\n");
+  stub = 1;
+  errno = 0;
+  return 0;
+}
diff --git a/lib/stub/sigsetmask.c b/lib/stub/sigsetmask.c
new file mode 100644 (file)
index 0000000..4c6b570
--- /dev/null
@@ -0,0 +1,32 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <libmes.h>
+
+int
+sigsetmask (int x)
+{
+  static int stub = 0;
+  if (__mes_debug () && !stub)
+    eputs ("sigsetmask stub\n");
+  stub = 1;
+  errno = 0;
+  return 0;
+}
diff --git a/lib/stub/strftime.c b/lib/stub/strftime.c
new file mode 100644 (file)
index 0000000..ad7a26b
--- /dev/null
@@ -0,0 +1,32 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <libmes.h>
+
+size_t
+strftime (char *s, size_t size, char const *template,
+          struct tm const *brokentime)
+{
+  static int stub = 0;
+  if (__mes_debug () && !stub)
+    eputs ("strftime stub\n");
+  stub = 1;
+  return template;
+}
diff --git a/lib/stub/sys_siglist.c b/lib/stub/sys_siglist.c
new file mode 100644 (file)
index 0000000..6f4aef3
--- /dev/null
@@ -0,0 +1,32 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <libmes.h>
+
+int
+sys_siglist (int x)
+{
+  static int stub = 0;
+  if (__mes_debug () && !stub)
+    eputs ("sys_siglist stub\n");
+  stub = 1;
+  errno = 0;
+  return 0;
+}
diff --git a/lib/stub/system.c b/lib/stub/system.c
new file mode 100644 (file)
index 0000000..401854a
--- /dev/null
@@ -0,0 +1,32 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <libmes.h>
+
+int
+system (int x)
+{
+  static int stub = 0;
+  if (__mes_debug () && !stub)
+    eputs ("system stub\n");
+  stub = 1;
+  errno = 0;
+  return 0;
+}
diff --git a/lib/stub/times.c b/lib/stub/times.c
new file mode 100644 (file)
index 0000000..4de69cb
--- /dev/null
@@ -0,0 +1,33 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <libmes.h>
+#include <sys/times.h>
+#include <sys/time.h>
+
+clock_t
+times (struct tms *buffer)
+{
+  static int stub = 0;
+  if (__mes_debug () && !stub)
+    eputs ("times stub\n");
+  stub = 1;
+  return 0;
+}
diff --git a/lib/stub/umask.c b/lib/stub/umask.c
new file mode 100644 (file)
index 0000000..41c736b
--- /dev/null
@@ -0,0 +1,32 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <libmes.h>
+
+int
+umask (int x)
+{
+  static int stub = 0;
+  if (__mes_debug () && !stub)
+    eputs ("umask stub\n");
+  stub = 1;
+  errno = 0;
+  return 0;
+}
diff --git a/lib/stub/utime.c b/lib/stub/utime.c
new file mode 100644 (file)
index 0000000..67247c9
--- /dev/null
@@ -0,0 +1,31 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <libmes.h>
+
+int
+utime (int x)
+{
+  static int stub = 0;
+  if (__mes_debug () && !stub)
+    eputs ("utime stub\n");
+  errno = 0;
+  return 0;
+}