mescc: move include into share/mlibc, allows installing alongside gcc.
authorJan Nieuwenhuizen <janneke@gnu.org>
Sat, 3 Jun 2017 10:11:57 +0000 (12:11 +0200)
committerJan Nieuwenhuizen <janneke@gnu.org>
Sat, 3 Jun 2017 10:27:53 +0000 (12:27 +0200)
* mlibc: Rename from libc.
* HACKING: Update for name change.
* make/bin.make: Likewise.
* make/mescc-guile.make: Likewise.
* make/mescc-mes.make: Likewise.
* scaffold/scaffold.make: Likewise.
* make/install.make: Likewise.
  (install): Install mlibc into share/mlibc.

66 files changed:
HACKING
libc/include/assert.h [deleted file]
libc/include/ctype.h [deleted file]
libc/include/dlfcn.h [deleted file]
libc/include/errno.h [deleted file]
libc/include/fcntl.h [deleted file]
libc/include/features.h [deleted file]
libc/include/inttypes.h [deleted file]
libc/include/limits.h [deleted file]
libc/include/math.h [deleted file]
libc/include/mlibc.h [deleted file]
libc/include/setjmp.h [deleted file]
libc/include/signal.h [deleted file]
libc/include/stdarg.h [deleted file]
libc/include/stdio.h [deleted file]
libc/include/stdlib.h [deleted file]
libc/include/string.h [deleted file]
libc/include/strings.h [deleted file]
libc/include/sys/cdefs.h [deleted file]
libc/include/sys/mman.h [deleted file]
libc/include/sys/stat.h [deleted file]
libc/include/sys/time.h [deleted file]
libc/include/sys/timeb.h [deleted file]
libc/include/sys/types.h [deleted file]
libc/include/sys/ucontext.h [deleted file]
libc/include/time.h [deleted file]
libc/include/unistd.h [deleted file]
libc/libc-gcc.c [deleted file]
libc/libc-mes.c [deleted file]
libc/mini-libc-mes.c [deleted file]
make/bin.make
make/install.make
make/mescc-guile.make
make/mescc-mes.make
mlibc/include/assert.h [new file with mode: 0644]
mlibc/include/ctype.h [new file with mode: 0644]
mlibc/include/dlfcn.h [new file with mode: 0644]
mlibc/include/errno.h [new file with mode: 0644]
mlibc/include/fcntl.h [new file with mode: 0644]
mlibc/include/features.h [new file with mode: 0644]
mlibc/include/inttypes.h [new file with mode: 0644]
mlibc/include/limits.h [new file with mode: 0644]
mlibc/include/math.h [new file with mode: 0644]
mlibc/include/mlibc.h [new file with mode: 0644]
mlibc/include/setjmp.h [new file with mode: 0644]
mlibc/include/signal.h [new file with mode: 0644]
mlibc/include/stdarg.h [new file with mode: 0644]
mlibc/include/stdio.h [new file with mode: 0644]
mlibc/include/stdlib.h [new file with mode: 0644]
mlibc/include/string.h [new file with mode: 0644]
mlibc/include/strings.h [new file with mode: 0644]
mlibc/include/sys/cdefs.h [new file with mode: 0644]
mlibc/include/sys/mman.h [new file with mode: 0644]
mlibc/include/sys/stat.h [new file with mode: 0644]
mlibc/include/sys/time.h [new file with mode: 0644]
mlibc/include/sys/timeb.h [new file with mode: 0644]
mlibc/include/sys/types.h [new file with mode: 0644]
mlibc/include/sys/ucontext.h [new file with mode: 0644]
mlibc/include/time.h [new file with mode: 0644]
mlibc/include/unistd.h [new file with mode: 0644]
mlibc/libc-gcc.c [new file with mode: 0644]
mlibc/libc-mes.c [new file with mode: 0644]
mlibc/mini-libc-mes.c [new file with mode: 0644]
module/language/c99/compiler.mes
scaffold/scaffold.make
src/src.make

diff --git a/HACKING b/HACKING
index 3038bfb7676a0fea6f8801e15db1739b27fe1aa7..d9e40bd4eca2b0e8f4470167900e023102e207d1 100644 (file)
--- a/HACKING
+++ b/HACKING
@@ -21,7 +21,7 @@ slower than guile.  That's why we usually don't use mes during development.
 gcc is used to verify the sanity of our C sources.
 
 i686-unknown-linux-gnu-gcc is used to compare hex/assembly, to test
-the gcc variant of mlbic: libc/libc-gcc.c and steal ideas.
+the gcc variant of mlbic: mlibc/libc-gcc.c and steal ideas.
 
 guile is used to develop mescc, the C compiler in Scheme that during
 bootstrapping will be executed by mes.
diff --git a/libc/include/assert.h b/libc/include/assert.h
deleted file mode 100644 (file)
index d301c19..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-/* -*-comment-start: "//";comment-end:""-*-
- * Mes --- Maxwell Equations of Software
- * Copyright © 2017 Jan Nieuwenhuizen <janneke@gnu.org>
- *
- * This file is part of Mes.
- *
- * 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.
- *
- * 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 Mes.  If not, see <http://www.gnu.org/licenses/>.
- */
-#ifndef __MES_ASSERT_H
-#define __MES_ASSERT_H 1
-
-#if __GNUC__ && POSIX
-#ifndef _GNU_SOURCE
-#define _GNU_SOURCE
-#endif
-#include_next <assert.h>
-#else // ! (__GNUC__ && POSIX)
-#define assert(x) ((x) ? (void)0 : assert_fail (#x))
-void assert_fail (char* s);
-#endif // ! (__GNUC__ && POSIX)
-
-#endif // __MES_ASSERT_H
diff --git a/libc/include/ctype.h b/libc/include/ctype.h
deleted file mode 100644 (file)
index 722814c..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-/* -*-comment-start: "//";comment-end:""-*-
- * Mes --- Maxwell Equations of Software
- * Copyright © 2017 Jan Nieuwenhuizen <janneke@gnu.org>
- *
- * This file is part of Mes.
- *
- * 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.
- *
- * 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 Mes.  If not, see <http://www.gnu.org/licenses/>.
- */
-#ifndef __MES_CTYPE_H
-#define __MES_CTYPE_H 1
-
-#if __GNUC__ && POSIX
-#ifndef _GNU_SOURCE
-#define _GNU_SOURCE
-#endif
-#include_next <ctype.h>
-
-#else // ! (__GNUC__ && POSIX)
-int isdigit (int);
-#endif // ! (__GNUC__ && POSIX)
-
-#endif // __MES_CTYPE_H
diff --git a/libc/include/dlfcn.h b/libc/include/dlfcn.h
deleted file mode 100644 (file)
index 254a237..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/* -*-comment-start: "//";comment-end:""-*-
- * Mes --- Maxwell Equations of Software
- * Copyright © 2017 Jan Nieuwenhuizen <janneke@gnu.org>
- *
- * This file is part of Mes.
- *
- * 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.
- *
- * 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 Mes.  If not, see <http://www.gnu.org/licenses/>.
- */
-#ifndef __MES_DLFCN_H
-#define __MES_DLFCN_H 1
-
-#if __GNUC__ && POSIX
-#include_next <dlfcn.h>
-#endif // (__GNUC__ && POSIX)
-
-#endif // __MES_DLFCN_H
-
diff --git a/libc/include/errno.h b/libc/include/errno.h
deleted file mode 100644 (file)
index 3ffd1a0..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-/* -*-comment-start: "//";comment-end:""-*-
- * Mes --- Maxwell Equations of Software
- * Copyright © 2017 Jan Nieuwenhuizen <janneke@gnu.org>
- *
- * This file is part of Mes.
- *
- * 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.
- *
- * 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 Mes.  If not, see <http://www.gnu.org/licenses/>.
- */
-#ifndef __MES_ERRNO_H
-#define __MES_ERRNO_H 1
-
-#if __GNUC__ && POSIX
-#ifndef _GNU_SOURCE
-#define _GNU_SOURCE
-#endif
-#include_next <errno.h>
-#endif // ! (__GNUC__ && POSIX)
-
-#endif // __MES_ERRNO_H
diff --git a/libc/include/fcntl.h b/libc/include/fcntl.h
deleted file mode 100644 (file)
index c728f8a..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-/* -*-comment-start: "//";comment-end:""-*-
- * Mes --- Maxwell Equations of Software
- * Copyright © 2017 Jan Nieuwenhuizen <janneke@gnu.org>
- *
- * This file is part of Mes.
- *
- * 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.
- *
- * 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 Mes.  If not, see <http://www.gnu.org/licenses/>.
- */
-#ifndef __MES_FCNTL_H
-#define __MES_FCNTL_H 1
-
-#if __GNUC__ && POSIX
-#ifndef _GNU_SOURCE
-#define _GNU_SOURCE
-#endif
-#include_next <fcntl.h>
-
-#else // ! (__GNUC__ && POSIX)
-#define O_RDONLY 0
-#define O_WRONLY 1
-#define O_RDWR 2
-#define O_CREAT 64
-#define O_TRUNC 512
-
-#define S_IRWXU 00700
-#define S_IXUSR 00100
-#define S_IWUSR 00200
-#define S_IRUSR 00400
-int open (char const *s, int flags, ...);
-#endif // ! (__GNUC__ && POSIX)
-
-#endif // __MES_FCNTL_H
diff --git a/libc/include/features.h b/libc/include/features.h
deleted file mode 100644 (file)
index d4cbf27..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/* -*-comment-start: "//";comment-end:""-*-
- * Mes --- Maxwell Equations of Software
- * Copyright © 2017 Jan Nieuwenhuizen <janneke@gnu.org>
- *
- * This file is part of Mes.
- *
- * 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.
- *
- * 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 Mes.  If not, see <http://www.gnu.org/licenses/>.
- */
-#ifndef __MES_FEATURES_H
-#define __MES_FEATURES_H 1
-
-#if __GNUC__ && POSIX
-#include_next <features.h>
-#endif // (__GNUC__ && POSIX)
-
-#endif // __MES_FEATURES_H
-
diff --git a/libc/include/inttypes.h b/libc/include/inttypes.h
deleted file mode 100644 (file)
index 39127be..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-/* -*-comment-start: "//";comment-end:""-*-
- * Mes --- Maxwell Equations of Software
- * Copyright © 2017 Jan Nieuwenhuizen <janneke@gnu.org>
- *
- * This file is part of Mes.
- *
- * 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.
- *
- * 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 Mes.  If not, see <http://www.gnu.org/licenses/>.
- */
-#ifndef __MES_INTTYPES_H
-#define __MES_INTTYPES_H 1
-
-#if __GNUC__ && POSIX
-#ifndef _GNU_SOURCE
-#define _GNU_SOURCE
-#endif
-#include_next <inttypes.h>
-#else // ! (__GNUC__ && POSIX)
-
-typedef unsigned char uint8_t;
-typedef char int8_t;
-typedef unsigned short uint16_t;
-typedef unsigned uint32_t;
-typedef int int32_t;
-
-typedef unsigned long long uint64_t;
-typedef long long int64_t;
-
-#endif // ! (__GNUC__ && POSIX)
-
-#endif // __MES_INTTYPES_H
diff --git a/libc/include/limits.h b/libc/include/limits.h
deleted file mode 100644 (file)
index e4ec62c..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-/* -*-comment-start: "//";comment-end:""-*-
- * Mes --- Maxwell Equations of Software
- * Copyright © 2017 Jan Nieuwenhuizen <janneke@gnu.org>
- *
- * This file is part of Mes.
- *
- * 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.
- *
- * 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 Mes.  If not, see <http://www.gnu.org/licenses/>.
- */
-#ifndef __MES_LIMITS_H
-#define __MES_LIMITS_H 1
-
-#if __GNUC__ && POSIX
-#ifndef _GNU_SOURCE
-#define _GNU_SOURCE
-#endif
-#include_next <limits.h>
-
-#else // ! (__GNUC__ && POSIX)
-#define INT_MIN -2147483648
-#define INT_MAX 2147483647
-#endif // ! (__GNUC__ && POSIX)
-
-#endif // __MES_LIMITS_H
diff --git a/libc/include/math.h b/libc/include/math.h
deleted file mode 100644 (file)
index 15dec7c..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/* -*-comment-start: "//";comment-end:""-*-
- * Mes --- Maxwell Equations of Software
- * Copyright © 2017 Jan Nieuwenhuizen <janneke@gnu.org>
- *
- * This file is part of Mes.
- *
- * 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.
- *
- * 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 Mes.  If not, see <http://www.gnu.org/licenses/>.
- */
-#ifndef __MES_MATH_H
-#define __MES_MATH_H 1
-
-#if __GNUC__ && POSIX
-#include_next <math.h>
-#endif // (__GNUC__ && POSIX)
-
-#endif // __MES_MATH_H
-
diff --git a/libc/include/mlibc.h b/libc/include/mlibc.h
deleted file mode 100644 (file)
index 84573ac..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-/* -*-comment-start: "//";comment-end:""-*-
- * Mes --- Maxwell Equations of Software
- * Copyright © 2016,2017 Jan Nieuwenhuizen <janneke@gnu.org>
- *
- * This file is part of Mes.
- *
- * 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.
- *
- * 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 Mes.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef __MES_MLIBC_H
-#define __MES_MLIBC_H
-
-char const* itoa (int);
-
-#endif //__MLIBC_H
diff --git a/libc/include/setjmp.h b/libc/include/setjmp.h
deleted file mode 100644 (file)
index e28153f..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-/* -*-comment-start: "//";comment-end:""-*-
- * Mes --- Maxwell Equations of Software
- * Copyright © 2017 Jan Nieuwenhuizen <janneke@gnu.org>
- *
- * This file is part of Mes.
- *
- * 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.
- *
- * 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 Mes.  If not, see <http://www.gnu.org/licenses/>.
- */
-#ifndef __MES_SETJMP_H
-#define __MES_SETJMP_H 1
-
-#if __GNUC__ && POSIX
-#include_next <setjmp.h>
-#else // ! (__GNUC__ && POSIX)
-
-typedef int jmp_buf;
-
-#endif // ! (__GNUC__ && POSIX)
-
-#endif // __MES_SETJMP_H
-
diff --git a/libc/include/signal.h b/libc/include/signal.h
deleted file mode 100644 (file)
index 50837dc..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/* -*-comment-start: "//";comment-end:""-*-
- * Mes --- Maxwell Equations of Software
- * Copyright © 2017 Jan Nieuwenhuizen <janneke@gnu.org>
- *
- * This file is part of Mes.
- *
- * 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.
- *
- * 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 Mes.  If not, see <http://www.gnu.org/licenses/>.
- */
-#ifndef __MES_SIGNAL_H
-#define __MES_SIGNAL_H 1
-
-#if __GNUC__ && POSIX
-#include_next <signal.h>
-#endif // (__GNUC__ && POSIX)
-
-#endif // __MES_SIGNAL_H
-
diff --git a/libc/include/stdarg.h b/libc/include/stdarg.h
deleted file mode 100644 (file)
index 40436a6..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/* -*-comment-start: "//";comment-end:""-*-
- * Mes --- Maxwell Equations of Software
- * Copyright © 2017 Jan Nieuwenhuizen <janneke@gnu.org>
- *
- * This file is part of Mes.
- *
- * 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.
- *
- * 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 Mes.  If not, see <http://www.gnu.org/licenses/>.
- */
-#ifndef __MES_STDARG_H
-#define __MES_STDARG_H 1
-
-#if __GNUC__ && POSIX
-#include_next <stdarg.h>
-#endif // (__GNUC__ && POSIX)
-
-#endif // __MES_STDARG_H
-
diff --git a/libc/include/stdio.h b/libc/include/stdio.h
deleted file mode 100644 (file)
index e66bab8..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-/* -*-comment-start: "//";comment-end:""-*-
- * Mes --- Maxwell Equations of Software
- * Copyright © 2016,2017 Jan Nieuwenhuizen <janneke@gnu.org>
- *
- * This file is part of Mes.
- *
- * 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.
- *
- * 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 Mes.  If not, see <http://www.gnu.org/licenses/>.
- */
-#ifndef __MES_STDIO_H
-#define __MES_STDIO_H 1
-
-char **g_environment;
-int g_stdin;
-int g_stdout;
-
-#define EOF -1
-#define NULL 0
-#define STDIN 0
-#define STDOUT 1
-#define STDERR 2
-
-int printf (char const* format, ...);
-
-#if __GNUC__ && POSIX
-#ifndef _GNU_SOURCE
-#define _GNU_SOURCE
-#endif
-#include_next <stdio.h>
-
-int fdputs (char const* s, int fd);
-
-#undef puts
-#define puts(x) fdputs(x, STDOUT)
-#define eputs(x) fdputs(x, STDERR)
-#define fputs fdputs
-
-#ifdef putc
-#undef putc
-#endif
-
-int getchar ();
-
-int fdputc (int c, int fd);
-
-#define fputc fdputc
-#define ungetc fdungetc
-int fdungetc (int c, int fd);
-
-#else // ! (__GNUC__ && POSIX)
-
-// Hmm
-#define stdin 0
-#define stdout 1
-#define stderr 2
-
-// TODO: fseek etc
-#define SEEK_SET 0
-#define SEEK_CUR 1
-#define SEEK_END 2
-
-#if __GNUC__
-#undef fputs
-#undef fdputs
-int fdputs (char const* s, int fd);
-#endif // __MES_GNUC__
-
-int eputs (char const* s);
-int fputs (char const* s, int fd);
-int puts (char const* s);
-int putchar (int c);
-int fputc (int c, int fd);
-int getchar ();
-int ungetc (int c, int fd);
-
-typedef int FILE;
-
-#endif // ! (__GNUC__ && POSIX)
-
-#endif // __MES_STDIO_H
diff --git a/libc/include/stdlib.h b/libc/include/stdlib.h
deleted file mode 100644 (file)
index ebaba06..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-/* -*-comment-start: "//";comment-end:""-*-
- * Mes --- Maxwell Equations of Software
- * Copyright © 2017 Jan Nieuwenhuizen <janneke@gnu.org>
- *
- * This file is part of Mes.
- *
- * 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.
- *
- * 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 Mes.  If not, see <http://www.gnu.org/licenses/>.
- */
-#ifndef __MES_STDLIB_H
-#define __MES_STDLIB_H 1
-
-#if __GNUC__ && POSIX
-#ifndef _GNU_SOURCE
-#define _GNU_SOURCE
-#endif
-#include_next <stdlib.h>
-#else  // !(__GNUC__ && POSIX)
-
-#ifndef __MES_SIZE_T
-#define __MES_SIZE_T
-typedef long size_t;
-#endif
-
-char* getenv (char const* s);
-int atoi (char const *s);
-void *malloc (size_t);
-void *realloc (void *p, size_t size);
-void exit (int);
-
-#endif // !(__GNUC__ && POSIX)
-
-#endif // __MES_STDLIB_H
-
diff --git a/libc/include/string.h b/libc/include/string.h
deleted file mode 100644 (file)
index 42fe7c6..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-/* -*-comment-start: "//";comment-end:""-*-
- * Mes --- Maxwell Equations of Software
- * Copyright © 2017 Jan Nieuwenhuizen <janneke@gnu.org>
- *
- * This file is part of Mes.
- *
- * 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.
- *
- * 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 Mes.  If not, see <http://www.gnu.org/licenses/>.
- */
-#ifndef __MES_STRING_H
-#define __MES_STRING_H 1
-
-#if __GNUC__ && POSIX
-#ifndef _GNU_SOURCE
-#define _GNU_SOURCE
-#endif
-#include_next <string.h>
-
-#else // ! (__GNUC__ && POSIX)
-
-#ifndef __MES_SIZE_T
-#define __MES_SIZE_T
-typedef long size_t;
-#endif
-
-size_t strlen (char const*);
-int strcmp (char const*, char const*);
-int strncmp (char const*, char const*, size_t);
-char *strcpy (char *dest, char const *src);
-#endif // ! (__GNUC__ && POSIX)
-
-#endif // __MES_STRING_H
diff --git a/libc/include/strings.h b/libc/include/strings.h
deleted file mode 100644 (file)
index 0878530..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/* -*-comment-start: "//";comment-end:""-*-
- * Mes --- Maxwell Equations of Software
- * Copyright © 2017 Jan Nieuwenhuizen <janneke@gnu.org>
- *
- * This file is part of Mes.
- *
- * 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.
- *
- * 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 Mes.  If not, see <http://www.gnu.org/licenses/>.
- */
-#ifndef __MES_STRINGS_H
-#define __MES_STRINGS_H 1
-
-#if __GNUC__ && POSIX
-#include_next <strings.h>
-#endif // (__GNUC__ && POSIX)
-
-#endif // __MES_STRINGS_H
-
diff --git a/libc/include/sys/cdefs.h b/libc/include/sys/cdefs.h
deleted file mode 100644 (file)
index 63c7dfa..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/* -*-comment-start: "//";comment-end:""-*-
- * Mes --- Maxwell Equations of Software
- * Copyright © 2017 Jan Nieuwenhuizen <janneke@gnu.org>
- *
- * This file is part of Mes.
- *
- * 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.
- *
- * 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 Mes.  If not, see <http://www.gnu.org/licenses/>.
- */
-#ifndef __MES_SYS_CDEFS_H
-#define __MES_SYS_CDEFS_H 1
-
-#if __GNUC__ && POSIX
-#include_next <sys/cdefs.h>
-#endif // (__GNUC__ && POSIX)
-
-#endif // __MES_SYS_CDEFS_H
-
diff --git a/libc/include/sys/mman.h b/libc/include/sys/mman.h
deleted file mode 100644 (file)
index 522a710..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/* -*-comment-start: "//";comment-end:""-*-
- * Mes --- Maxwell Equations of Software
- * Copyright © 2017 Jan Nieuwenhuizen <janneke@gnu.org>
- *
- * This file is part of Mes.
- *
- * 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.
- *
- * 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 Mes.  If not, see <http://www.gnu.org/licenses/>.
- */
-#ifndef __MES_SYS_MMAN_H
-#define __MES_SYS_MMAN_H 1
-
-#if __GNUC__ && POSIX
-#include_next <sys/mman.h>
-#endif // (__GNUC__ && POSIX)
-
-#endif // __MES_SYS_MMAN_H
-
diff --git a/libc/include/sys/stat.h b/libc/include/sys/stat.h
deleted file mode 100644 (file)
index 6adae74..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/* -*-comment-start: "//";comment-end:""-*-
- * Mes --- Maxwell Equations of Software
- * Copyright © 2017 Jan Nieuwenhuizen <janneke@gnu.org>
- *
- * This file is part of Mes.
- *
- * 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.
- *
- * 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 Mes.  If not, see <http://www.gnu.org/licenses/>.
- */
-#ifndef __MES_SYS_STAT_H
-#define __MES_SYS_STAT_H 1
-
-#if __GNUC__ && POSIX
-#include_next <sys/stat.h>
-#endif // (__GNUC__ && POSIX)
-
-#endif // __MES_SYS_STAT_H
-
diff --git a/libc/include/sys/time.h b/libc/include/sys/time.h
deleted file mode 100644 (file)
index de78891..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/* -*-comment-start: "//";comment-end:""-*-
- * Mes --- Maxwell Equations of Software
- * Copyright © 2017 Jan Nieuwenhuizen <janneke@gnu.org>
- *
- * This file is part of Mes.
- *
- * 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.
- *
- * 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 Mes.  If not, see <http://www.gnu.org/licenses/>.
- */
-#ifndef __MES_SYS_TIME_H
-#define __MES_SYS_TIME_H 1
-
-#if __GNUC__ && POSIX
-#include_next <sys/time.h>
-#endif // (__GNUC__ && POSIX)
-
-#endif // __MES_SYS_TIME_H
-
diff --git a/libc/include/sys/timeb.h b/libc/include/sys/timeb.h
deleted file mode 100644 (file)
index 2cd9908..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/* -*-comment-start: "//";comment-end:""-*-
- * Mes --- Maxwell Equations of Software
- * Copyright © 2017 Jan Nieuwenhuizen <janneke@gnu.org>
- *
- * This file is part of Mes.
- *
- * 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.
- *
- * 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 Mes.  If not, see <http://www.gnu.org/licenses/>.
- */
-#ifndef __MES_SYS_TIMEB_H
-#define __MES_SYS_TIMEB_H 1
-
-#if __GNUC__ && POSIX
-#include_next <sys/timeb.h>
-#endif // (__GNUC__ && POSIX)
-
-#endif // __MES_SYS_TIMEB_H
-
diff --git a/libc/include/sys/types.h b/libc/include/sys/types.h
deleted file mode 100644 (file)
index b7b05c6..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/* -*-comment-start: "//";comment-end:""-*-
- * Mes --- Maxwell Equations of Software
- * Copyright © 2017 Jan Nieuwenhuizen <janneke@gnu.org>
- *
- * This file is part of Mes.
- *
- * 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.
- *
- * 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 Mes.  If not, see <http://www.gnu.org/licenses/>.
- */
-#ifndef __MES_SYS_TYPES_H
-#define __MES_SYS_TYPES_H 1
-
-#if __GNUC__ && POSIX
-#include_next <sys/types.h>
-#endif // (__GNUC__ && POSIX)
-
-#endif // __MES_SYS_TYPES_H
-
diff --git a/libc/include/sys/ucontext.h b/libc/include/sys/ucontext.h
deleted file mode 100644 (file)
index bdf9274..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/* -*-comment-start: "//";comment-end:""-*-
- * Mes --- Maxwell Equations of Software
- * Copyright © 2017 Jan Nieuwenhuizen <janneke@gnu.org>
- *
- * This file is part of Mes.
- *
- * 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.
- *
- * 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 Mes.  If not, see <http://www.gnu.org/licenses/>.
- */
-#ifndef __MES_SYS_UCONTEXT_H
-#define __MES_SYS_UCONTEXT_H 1
-
-#if __GNUC__ && POSIX
-#include_next <sys/ucontext.h>
-#endif // (__GNUC__ && POSIX)
-
-#endif // __MES_SYS_UCONTEXT_H
-
diff --git a/libc/include/time.h b/libc/include/time.h
deleted file mode 100644 (file)
index b15cf52..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/* -*-comment-start: "//";comment-end:""-*-
- * Mes --- Maxwell Equations of Software
- * Copyright © 2017 Jan Nieuwenhuizen <janneke@gnu.org>
- *
- * This file is part of Mes.
- *
- * 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.
- *
- * 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 Mes.  If not, see <http://www.gnu.org/licenses/>.
- */
-#ifndef __MES_TIME_H
-#define __MES_TIME_H 1
-
-#if __GNUC__ && POSIX
-#include_next <time.h>
-#endif // (__GNUC__ && POSIX)
-
-#endif // __MES_TIME_H
-
diff --git a/libc/include/unistd.h b/libc/include/unistd.h
deleted file mode 100644 (file)
index 0ba84e5..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-/* -*-comment-start: "//";comment-end:""-*-
- * Mes --- Maxwell Equations of Software
- * Copyright © 2017 Jan Nieuwenhuizen <janneke@gnu.org>
- *
- * This file is part of Mes.
- *
- * 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.
- *
- * 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 Mes.  If not, see <http://www.gnu.org/licenses/>.
- */
-#ifndef __MES_UNISTD_H
-#define __MES_UNISTD_H 1
-
-#if __GNUC__ && POSIX
-#ifndef _GNU_SOURCE
-#define _GNU_SOURCE
-#endif
-#include_next <unistd.h>
-
-#else // ! (__GNUC__ && POSIX)
-
-#ifndef __MES_SIZE_T
-#define __MES_SIZE_T
-typedef long size_t;
-#endif
-
-int access (char const *s, int mode);
-int read (int fd, void* buf, size_t n);
-int write (int fd, char const* s, int n);
-#endif // ! (__GNUC__ && POSIX)
-
-#endif // __MES_UNISTD_H
diff --git a/libc/libc-gcc.c b/libc/libc-gcc.c
deleted file mode 100644 (file)
index 83a58f9..0000000
+++ /dev/null
@@ -1,543 +0,0 @@
-/* -*-comment-start: "//";comment-end:""-*-
- * Mes --- Maxwell Equations of Software
- * Copyright © 2016,2017 Jan Nieuwenhuizen <janneke@gnu.org>
- *
- * This file is part of Mes.
- *
- * 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.
- *
- * 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 Mes.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-char **g_environment = 0;
-int g_stdin = 0;
-
-#include <stdio.h>
-#include <mlibc.h>
-
-#if __GNUC__
-#include <stdlib.h>
-#endif
-
-#if __GNUC__ && !POSIX
-
-void
-exit (int code)
-{
-  asm (
-       "movl %0,%%ebx\n\t"
-       "movl $1,%%eax\n\t"
-       "int  $0x80"
-       : // no outputs "=" (r)
-       : "" (code)
-       );
-  // not reached
-  exit (0);
-}
-
-int
-read (int fd, void* buf, size_t n)
-{
-  int r;
-  //syscall (SYS_write, fd, s, n));
-  asm (
-       "movl %1,%%ebx\n\t"
-       "movl %2,%%ecx\n\t"
-       "movl %3,%%edx\n\t"
-
-       "movl $0x3,%%eax\n\t"
-       "int  $0x80\n\t"
-
-       "mov %%eax,%0\n\t"
-       : "=r" (r)
-       : "" (fd), "" (buf), "" (n)
-       : "eax", "ebx", "ecx", "edx"
-       );
-  return r;
-}
-
-int
-write (int fd, char const* s, int n)
-{
-  int r;
-  //syscall (SYS_write, fd, s, n));
-  asm (
-       "mov %1,%%ebx\n\t"
-       "mov %2,%%ecx\n\t"
-       "mov %3,%%edx\n\t"
-
-       "mov $0x4, %%eax\n\t"
-       "int $0x80\n\t"
-       "mov %%eax,%0\n\t"
-       : "=r" (r)
-       : "" (fd), "" (s), "" (n)
-       : "eax", "ebx", "ecx", "edx"
-       );
-  return r;
-}
-
-int
-open (char const *s, int flags, ...)
-{
-  int mode;
-  asm (
-       "mov %%ebp,%%eax\n\t"
-       "add $0x10,%%eax\n\t"
-       "mov (%%eax),%%eax\n\t"
-       "mov %%eax,%0\n\t"
-       : "=mode" (mode)
-       : //no inputs ""
-       );
-  int r;
-  //syscall (SYS_open, mode));
-  asm (
-       "mov %1,%%ebx\n\t"
-       "mov %2,%%ecx\n\t"
-       "mov %3,%%edx\n\t"
-       "mov $0x5,%%eax\n\t"
-       "int $0x80\n\t"
-       "mov %%eax,%0\n\t"
-       : "=r" (r)
-       : "" (s), "" (flags), "" (mode)
-       : "eax", "ebx", "ecx", "edx"
-       );
-  return r;
-}
-
-int
-access (char const *s, int mode)
-{
-  int r;
-  //syscall (SYS_access, mode));
-  asm (
-       "mov %1,%%ebx\n\t"
-       "mov %2,%%ecx\n\t"
-       "mov $0x21,%%eax\n\t"
-       "int $0x80\n\t"
-       "mov %%eax,%0\n\t"
-       : "=r" (r)
-       : "" (s), "" (mode)
-       : "eax", "ebx", "ecx"
-       );
-  return r;
-}
-
-void *
-brk (void *p)
-{
-  void *r;
-  asm (
-       "mov %1,%%ebx\n\t"
-
-       "mov $0x2d,%%eax\n\t"
-       "int $0x80\n\t"
-
-       "mov %%eax,%0\n\t"
-       : "=r" (r)
-       : "" (p)
-       : "eax", "ebx"
-       );
-  return r;
-}
-
-int
-fsync (int fd)
-{
-  int r;
-  //syscall (SYS_fsync, fd));
-  asm (
-       "mov %1,%%ebx\n\t"
-
-       "mov $0x76, %%eax\n\t"
-       "int $0x80\n\t"
-       "mov %%eax,%0\n\t"
-       : "=r" (r)
-       : "" (fd)
-       : "eax", "ebx"
-       );
-  return r;
-}
-
-int
-fputc (int c, int fd)
-{
-  write (fd, (char*)&c, 1);
-  return 0;
-}
-
-int
-putchar (int c)
-{
-  write (STDOUT, (char*)&c, 1);
-  return 0;
-}
-
-void *g_malloc_base = 0;
-
-void *
-malloc (size_t size)
-{
-  void *p = brk (0);
-  if (!g_malloc_base) g_malloc_base = p;
-  brk (p+size);
-  return p;
-}
-
-void *
-realloc (void *p, size_t size)
-{
-  (void)p;
-  brk (g_malloc_base + size);
-  return g_malloc_base;
-}
-
-void
-free (void *p)
-{
-  int *n = (int*)p-1;
-  //munmap ((void*)p, *n);
-}
-
-size_t
-strlen (char const* s)
-{
-  int i = 0;
-  while (s[i]) i++;
-  return i;
-}
-
-int
-strcmp (char const* a, char const* b)
-{
-  while (*a && *b && *a == *b) {a++;b++;}
-  return *a - *b;
-}
-
-char *
-strcpy (char *dest, char const *src)
-{
-  char *p = dest;
-  while (*src) *p++ = *src++;
-  *p = 0;
-  return dest;
-}
-
-int
-eputs (char const* s)
-{
-  int i = strlen (s);
-  write (STDERR, s, i);
-  return 0;
-}
-
-int
-fputs (char const* s, int fd)
-{
-  int i = strlen (s);
-  write (fd, s, i);
-  return 0;
-}
-
-int
-puts (char const* s)
-{
-  int i = strlen (s);
-  write (STDOUT, s, i);
-  return 0;
-}
-
-void
-assert_fail (char* s)
-{
-  eputs ("assert fail: ");
-  eputs (s);
-  eputs ("\n");
-  *((int*)0) = 0;
-}
-
-#define assert(x) ((x) ? (void)0 : assert_fail (#x))
-
-int ungetc_char = -1;
-char ungetc_buf[2];
-
-int
-getchar ()
-{
-  char c;
-  int i;
-  if (ungetc_char == -1)
-    {
-      int r = read (g_stdin, &c, 1);
-      if (r < 1) return -1;
-      i = c;
-    }
-  else
-    i = ungetc_buf[ungetc_char--];
-
-  if (i < 0) i += 256;
-
-  return i;
-}
-
-int
-ungetc (int c, int fd)
-{
-  assert (ungetc_char < 2);
-  ungetc_buf[++ungetc_char] = c;
-  return c;
-}
-
-char const* itoa (int);
-
-int
-strncmp (char const* a, char const* b, size_t length)
-{
-  while (*a && *b && *a == *b && --length) {a++;b++;}
-  return *a - *b;
-}
-
-char *
-getenv (char const* s)
-{
-  char **p = g_environment;
-  int length = strlen (s);
-  while (*p)
-    {
-      if (!strncmp (s, *p, length) && *(*p + length) == '=') return (*p + length + 1);
-      p++;
-    }
-  return 0;
-}
-
-int
-isdigit (int c)
-{
-  return (c>='0') && (c<='9');
-}
-
-int
-atoi (char const *s)
-{
-  int i = 0;
-  int sign = 1;
-  if (*s && *s == '-')
-    {
-      sign = -1;
-      s++;
-    }
-  while (isdigit (*s))
-    {
-      i *= 10;
-      i += (*s - '0');
-      s++;
-    }
-  return i * sign;
-}
-
-int
-printf (char const* format, ...)
-{
-  int va_arg = 0;
-  int va;
-  char const *p = format;
-  while (*p)
-    if (*p != '%')
-      putchar (*p++);
-    else
-      {
-        p++;
-        char c = *p;
-        switch (c)
-          {
-          case '%': {putchar (*p); break;}
-          case 'c':
-            {
-            asm (
-                 "mov    -0xc(%%ebp),%%eax\n\t"
-                 "shl     $0x2,%%eax\n\t"
-                 "add     %%ebp,%%eax\n\t"
-                 "add     $0xc,%%eax\n\t"
-                 "mov     (%%eax),%%eax\n\t"
-                 //"mov     %%eax,%0\n\t"
-                 : "=va" (va)
-                 : //no inputs ""
-                 );
-            putchar ((char)va);
-            va_arg++;
-            break;
-            }
-          case 'd': {
-            asm (
-                 "mov    -0xc(%%ebp),%%eax\n\t"
-                 "shl     $0x2,%%eax\n\t"
-                 "add     %%ebp,%%eax\n\t"
-                 "add     $0xc,%%eax\n\t"
-                 "mov     (%%eax),%%eax\n\t"
-                 //"mov     %%eax,%0\n\t"
-                 : "=va" (va)
-                 : //no inputs ""
-                 );
-            puts (itoa ((int)va));
-            va_arg++;
-            break;
-          }
-          case 's': {
-            asm (
-                 "mov    -0xc(%%ebp),%%eax\n\t"
-                 "shl     $0x2,%%eax\n\t"
-                 "add     %%ebp,%%eax\n\t"
-                 "add     $0xc,%%eax\n\t"
-                 "mov     (%%eax),%%eax\n\t"
-                 //"mov     %%eax,%0\n\t"
-                 : "=va" (va)
-                 : //no inputs ""
-                 );
-            puts ((char*)va);
-            va_arg++;
-            break;
-          }
-          default: putchar (*p);
-          }
-        p++;
-      }
-  return 0;
-}
-#endif
-
-char itoa_buf[10];
-
-char const*
-itoa (int x)
-{
-  //static char itoa_buf[10];
-  //char *p = buf+9;
-  char *p = itoa_buf;
-  p += 9;
-  *p-- = 0;
-
-  //int sign = x < 0;
-  int sign;
-  sign = x < 0;
-  if (sign)
-    x = -x;
-
-  do
-    {
-      *p-- = '0' + (x % 10);
-      x = x / 10;
-    } while (x);
-
-  if (sign)
-    *p-- = '-';
-
-  return p+1;
-}
-
-#if POSIX
-#define _GNU_SOURCE
-#include <assert.h>
-#include <fcntl.h>
-#include <string.h>
-#include <unistd.h>
-#endif // POSIX
-
-int
-fdputs (char const* s, int fd)
-{
-  int i = strlen (s);
-  write (fd, s, i);
-  return 0;
-}
-
-#if POSIX
-
-int
-fdputc (int c, int fd)
-{
-  write (fd, (char*)&c, 1);
-  return 0;
-}
-
-int
-putchar (int c)
-{
-  write (STDOUT, (char*)&c, 1);
-  return 0;
-}
-
-int ungetc_char = -1;
-char ungetc_buf[2];
-
-int
-getchar ()
-{
-  char c;
-  int i;
-  if (ungetc_char == -1)
-    {
-      int r = read (g_stdin, &c, 1);
-      if (r < 1) return -1;
-      i = c;
-    }
-  else
-    i = ungetc_buf[ungetc_char--];
-
-  if (i < 0) i += 256;
-
-  return i;
-}
-
-int
-fdungetc (int c, int fd)
-{
-  assert (ungetc_char < 2);
-  ungetc_buf[++ungetc_char] = c;
-  return c;
-}
-
-#endif // POSIX
-
-#if __GNUC__ && !POSIX
-void
-_start ()
-{
-  //  char **;
-  asm (
-       "mov     %%ebp,%%eax\n\t"
-       "addl    $4,%%eax\n\t"
-       "movzbl  (%%eax),%%eax\n\t"
-       "addl    $3,%%eax\n\t"
-       "shl     $2,%%eax\n\t"
-       "add     %%ebp,%%eax\n\t"
-       "movl    %%eax,%0\n\t"
-       : "=g_environment" (g_environment)
-       : //no inputs ""
-       );
-  int r;
-  asm (
-       "mov     %%ebp,%%eax\n\t"
-       "addl    $8,%%eax\n\t"
-       "push    %%eax\n\t"
-
-       "mov     %%ebp,%%eax\n\t"
-       "addl    $4,%%eax\n\t"
-       "movzbl  (%%eax),%%eax\n\t"
-       "push     %%eax\n\t"
-
-       "call    main\n\t"
-       "movl    %%eax,%0\n\t"
-       : "=r" (r)
-       : //no inputs ""
-       );
-  exit (r);
-}
-#endif // __GNUC__ && !POSIX
diff --git a/libc/libc-mes.c b/libc/libc-mes.c
deleted file mode 100644 (file)
index a5f074f..0000000
+++ /dev/null
@@ -1,387 +0,0 @@
-/* -*-comment-start: "//";comment-end:""-*-
- * Mes --- Maxwell Equations of Software
- * Copyright © 2016,2017 Jan Nieuwenhuizen <janneke@gnu.org>
- *
- * This file is part of Mes.
- *
- * 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.
- *
- * 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 Mes.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-int g_stdin = 0;
-
-void
-exit ()
-{
-  asm (".byte 0x8b 0x5d 0x08");                    // mov    0x8(%ebp),%ebx
-  asm (".byte 0xb8 0x01 0x00 0x00 0x00");          // mov    $0x1,%eax
-  asm (".byte 0xcd 0x80");                         // int    $0x80
-}
-
-void
-read ()
-{
-  asm (".byte 0x8b 0x5d 0x08");                    // mov    0x8(%ebp),%ebx
-  asm (".byte 0x8b 0x4d 0x0c");                    // mov    0xc(%ebp),%ecx
-  asm (".byte 0x8b 0x55 0x10");                    // mov    0x10(%ebp),%edx
-
-  asm (".byte 0xb8 0x03 0x00 0x00 0x00");          // mov    $0x3,%eax
-  asm (".byte 0xcd 0x80");                         // int    $0x80
-}
-
-void
-write ()
-{
-  asm (".byte 0x8b 0x5d 0x08");                   // mov    0x8(%ebp),%ebx
-  asm (".byte 0x8b 0x4d 0x0c");                   // mov    0xc(%ebp),%ecx
-  asm (".byte 0x8b 0x55 0x10");                   // mov    0x10(%ebp),%edx
-              
-  asm (".byte 0xb8 0x04 0x00 0x00 0x00");         // mov    $0x4,%eax
-  asm (".byte 0xcd 0x80");                        // int    $0x80
-}
-
-void
-open ()
-{
-  asm (".byte 0x8b 0x5d 0x08");                    // mov    0x8(%ebp),%ebx
-  asm (".byte 0x8b 0x4d 0x0c");                    // mov    0xc(%ebp),%ecx
-  asm (".byte 0x8b 0x55 0x10");                    // mov    0x10(%ebp),%edx
-
-  asm (".byte 0xb8 0x05 0x00 0x00 0x00");          // mov    $0x5,%eax
-  asm (".byte 0xcd 0x80");                         // int    $0x80
-}
-
-void
-access ()
-{
-  asm (".byte 0x8b 0x5d 0x08");                    // mov    0x8(%ebp),%ebx
-  asm (".byte 0x8b 0x4d 0x0c");                    // mov    0xc(%ebp),%ecx
-
-  asm (".byte 0xb8 0x21 0x00 0x00 0x00");          // mov    $0x21,%eax
-  asm (".byte 0xcd 0x80");                         // int    $0x80
-}
-
-void
-brk ()
-{
-  asm (".byte 0x8b 0x5d 0x08");                    // mov    0x8(%ebp),%ebx
-  asm (".byte 0xb8 0x2d 0x00 0x00 0x00");          // mov    $0x2d,%eax
-  asm (".byte 0xcd 0x80");                         // int    $0x80
-}
-
-void
-fsync ()
-{
-  asm (".byte 0x8b 0x5d 0x08");                    // mov    0x8(%ebp),%ebx
-  asm (".byte 0xb8 0x76 0x00 0x00 0x00");          // mov    $0x76,%eax
-  asm (".byte 0xcd 0x80");                         // int    $0x80
-}
-
-int
-strlen (char const* s)
-{
-  int i = 0;
-  while (s[i]) i++;
-  return i;
-}
-
-int
-eputs (char const* s)
-{
-  int i = strlen (s);
-  write (2, s, i);
-  return 0;
-}
-
-int
-fputs (char const* s, int fd)
-{
-  int i = strlen (s);
-  write (fd, s, i);
-  return 0;
-}
-
-int
-puts (char const* s)
-{
-  int i = strlen (s);
-  write (1, s, i);
-  return 0;
-}
-
-int
-putchar (int c)
-{
-  write (1, (char*)&c, 1);
-  return 0;
-}
-
-int
-fputc (int c, int fd)
-{
-  write (fd, (char*)&c, 1);
-  return 0;
-}
-
-void
-assert_fail (char* s)
-{
-  eputs ("assert fail: ");
-  eputs (s);
-  eputs ("\n");
-  //*((int*)0) = 0;
-  char *fail = s;
-  fail = 0;
-  *fail = 0;
-}
-
-int ungetc_char = -1;
-char ungetc_buf[2];
-int
-getchar ()
-{
-  char c;
-  int i;
-  if (ungetc_char == -1)
-    {
-      int r = read (g_stdin, &c, 1);
-      if (r < 1) return -1;
-      i = c;
-   }
-  else
-    {
-       //FIXME
-       //i = ungetc_buf[ungetc_char--];
-       i = ungetc_buf[ungetc_char];
-       //ungetc_char--;
-       ungetc_char = ungetc_char - 1;
-     }
-  if (i < 0) i += 256;
-
-  return i;
-}
-
-//#define assert(x) ((x) ? (void)0 : assert_fail (#x))
-int
-ungetc (int c, int fd)
-{
-  //FIXME
-  //assert (ungetc_char < 2);
-  //assert (ungetc_char == -1 || ungetc_char < 2);
-  //FIXME
-  //ungetc_buf[++ungetc_char] = c;
-  ungetc_char++;
-  ungetc_buf[ungetc_char] = c;
-  return c;
-}
-
-int
-strcmp (char const* a, char const* b)
-{
-  while (*a && *b && *a == *b)
-    {
-      a++;b++;
-    }
-  return *a - *b;
-}
-
-char *
-strcpy (char *dest, char const *src)
-{
-  char *p = dest;
-  while (*src) *p++ = *src++;
-  *p = 0;
-  return dest;
-}
-
-char itoa_buf[10];
-
-char const*
-itoa (int x)
-{
-  //static char itoa_buf[10];
-  //char *p = buf+9;
-  char *p = itoa_buf;
-  p += 9;
-  *p-- = 0;
-
-  //int sign = x < 0; // FIXME
-  int sign = 0;
-  if (x < 0) sign = 1;
-  if (sign)
-    x = -x;
-
-  do
-     {
-       *p-- = '0' + (x % 10);
-       x = x / 10;
-     } while (x);
-
-  if (sign && *(p + 1) != '0')
-    *p-- = '-';
-
-  return p+1;
-}
-
-int
-isdigit (char c)
-{
-  //return (c>='0') && (c<='9');
-  if (c>='0' && c<='9') return 1;
-  return 0;
-}
-
-int
-atoi (char const *s)
-{
-  int i = 0;
-  int sign = 1;
-  if (*s && *s == '-')
-    {
-      sign = -1;
-      s++;
-    }
-  while (isdigit (*s))
-    {
-      i *= 10;
-      i += (*s - '0');
-      s++;
-    }
-  return i * sign;
-}
-
-//void *g_malloc_base = 0;
-char *g_malloc_base = 0;
-
-//void *
-int *
-malloc (int size)
-{
-  //void *p = brk (0);
-  char *p = 0;
-  p = brk (0);
-  if (!g_malloc_base) g_malloc_base = p;
-  brk (p+size);
-  return p;
-}
-
-//void *
-int *
-//realloc (void *p, int size)
-realloc (int *p, int size)
-{
-  brk (g_malloc_base + size);
-  return g_malloc_base;
-}
-
-int
-strncmp (char const* a, char const* b, int length)
-{
-  while (*a && *b && *a == *b && --length) {a++;b++;}
-  return *a - *b;
-}
-
-char **g_environment;
-char *
-getenv (char const* s)
-{
-  char **p = g_environment;
-  p = *g_environment;
-  int length = strlen (s);
-  while (*p)
-    {
-      if (!strncmp (s, *p, length) && *(*p + length) == '=') return (*p + length + 1);
-      p++;
-    }
-  return 0;
-}
-
-#if 0
-
-// !__MESC__
-// FIXME: mes+nyacc parser bug here
-// works fine with Guile, but let's keep a single input source
-
-#define pop_va_arg \
-  asm (".byte 0x8b 0x45 0xfc"); /* mov   -<0x4>(%ebp),%eax :va_arg */ \
-  asm (".byte 0xc1 0xe0 0x02"); /* shl   $0x2,%eax */ \
-  asm (".byte 0x01 0xe8");      /* add   %ebp,%eax */ \
-  asm (".byte 0x83 0xc0 0x0c"); /* add   $0xc,%eax */ \
-  asm (".byte 0x8b 0x00");      /* mov   (%eax),%eax */ \
-  asm (".byte 0x89 0x45 0xf8"); /* mov   %eax,-0x8(%ebp) :va */ \
-  asm (".byte 0x50")            /* push   %eax */
-
-#else // __MESC__
-
-#define pop_va_arg asm (".byte 0x8b 0x45 0xfc 0xc1 0xe0 0x02 0x01 0xe8 0x83 0xc0 0x0c 0x8b 0x00 0x89 0x45 0xf8 0x50")
-
-#endif
-
-int
-printf (char const* format, int va_args)
-{
-  int va_arg = 0;
-  int va;
-  char *p = format;
-  while (*p)
-    if (*p != '%')
-      putchar (*p++);
-    else
-      {
-        p++;
-        char c = *p;
-        switch (c)
-          {
-          case '%': {putchar (*p); break;}
-          case 'c': {pop_va_arg; putchar ((char)va); va_arg++; break;}
-          case 'd': {pop_va_arg; puts (itoa (va)); va_arg++; break;}
-          case 's': {pop_va_arg; puts ((char*)va); va_arg++; break;}
-          default: putchar (*p);
-          }
-        p++;
-      }
-  return 0;
-}
-
-char **g_environment;
-char **
-_env (char **e)
-{
-  return e;
-}
-
-int
-_start ()
-{
-  asm (".byte 0x89 0xe8");      // mov    %ebp,%eax
-  asm (".byte 0x83 0xc0 0x08"); // add    $0x8,%eax
-  asm (".byte 0x50");           // push   %eax
-
-  asm (".byte 0x89 0xe8");      // mov    %ebp,%eax
-  asm (".byte 0x83 0xc0 0x04"); // add    $0x4,%eax
-  asm (".byte 0x0f 0xb6 0x00"); // movzbl (%eax),%eax
-  asm (".byte 0x50");           // push   %eax
-
-  asm (".byte 0x89 0xe8");      // mov    %ebp,%eax
-  asm (".byte 0x83 0xc0 0x04"); // add    $0x4,%eax
-  asm (".byte 0x0f 0xb6 0x00"); // movzbl (%eax),%eax
-  asm (".byte 0x83 0xc0 0x03"); // add    $0x3,%eax
-  asm (".byte 0xc1 0xe0 0x02"); // shl    $0x2,%eax
-  asm (".byte 0x01 0xe8");      // add    %ebp,%eax
-  asm (".byte 0x50");           // push   %eax
-
-  g_environment = _env ();
-  asm (".byte 0x58");
-  int r = main ();
-  exit (r);
-}
diff --git a/libc/mini-libc-mes.c b/libc/mini-libc-mes.c
deleted file mode 100644 (file)
index 9cc021b..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-/* -*-comment-start: "//";comment-end:""-*-
- * Mes --- Maxwell Equations of Software
- * Copyright © 2016,2017 Jan Nieuwenhuizen <janneke@gnu.org>
- *
- * This file is part of Mes.
- *
- * 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.
- *
- * 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 Mes.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-void
-exit ()
-{
-  asm (".byte 0x8b 0x5d 0x08");                    // mov    0x8(%ebp),%ebx
-  asm (".byte 0xb8 0x01 0x00 0x00 0x00");          // mov    $0x1,%eax
-  asm (".byte 0xcd 0x80");                         // int    $0x80
-}
-
-void
-write ()
-{
-  asm (".byte 0x8b 0x5d 0x08");                   // mov    0x8(%ebp),%ebx
-  asm (".byte 0x8b 0x4d 0x0c");                   // mov    0xc(%ebp),%ecx
-  asm (".byte 0x8b 0x55 0x10");                   // mov    0x10(%ebp),%edx
-
-  asm (".byte 0xb8 0x04 0x00 0x00 0x00");         // mov    $0x4,%eax
-  asm (".byte 0xcd 0x80");                        // int    $0x80
-}
-
-int
-strlen (char const* s)
-{
-  int i = 0;
-  while (s[i]) i++;
-  return i;
-}
-
-int
-eputs (char const* s)
-{
-  int i = strlen (s);
-  write (2, s, i);
-  return 0;
-}
-
-char **g_environment;
-char **
-_env (char **e)
-{
-  return e;
-}
-
-int
-_start ()
-{
-  asm (".byte 0x89 0xe8");      // mov    %ebp,%eax
-  asm (".byte 0x83 0xc0 0x08"); // add    $0x8,%eax
-  asm (".byte 0x50");           // push   %eax
-
-  asm (".byte 0x89 0xe8");      // mov    %ebp,%eax
-  asm (".byte 0x83 0xc0 0x04"); // add    $0x4,%eax
-  asm (".byte 0x0f 0xb6 0x00"); // movzbl (%eax),%eax
-  asm (".byte 0x50");           // push   %eax
-
-  asm (".byte 0x89 0xe8");      // mov    %ebp,%eax
-  asm (".byte 0x83 0xc0 0x04"); // add    $0x4,%eax
-  asm (".byte 0x0f 0xb6 0x00"); // movzbl (%eax),%eax
-  asm (".byte 0x83 0xc0 0x03"); // add    $0x3,%eax
-  asm (".byte 0xc1 0xe0 0x02"); // shl    $0x2,%eax
-  asm (".byte 0x01 0xe8");      // add    %ebp,%eax
-  asm (".byte 0x50");           // push   %eax
-
-  g_environment = _env ();
-  asm (".byte 0x58");
-  int r = main ();
-  exit (r);
-}
index c57bd4bcaaf0d2fff300f36b76a0054321f7c4c0..7d2c6373b346c2f22b71fea7994684c764b5c808 100644 (file)
@@ -12,7 +12,7 @@ endif
 CLEAN+=$(O_FILES) $(OUT)/$(TARGET)
 DIST-CLEAN+=$(D_FILES)
 
-INCLUDES+=libc/include libc $(OUT)/$(DIR)
+INCLUDES+=mlibc/include mlibc $(OUT)/$(DIR)
 
 $(OUT)/$(TARGET): ld:=$(CROSS)LD
 $(OUT)/$(TARGET): LD:=$(CROSS)$(LD)
index 17535db378beca08fc814288e49a346653cd6cf2..9b6082411869898fc95d05ce7d21664f5df165de 100644 (file)
@@ -100,9 +100,9 @@ endif
        tar -cf- -C module $(INSTALL_GO_FILES:module/%=%)\
                | tar -C $(DESTDIR)$(GODIR) -xf-
        mkdir -p $(DESTDIR)$(PREFIX)/lib
-       $(GIT_ARCHIVE_HEAD) libc/include \
-               | tar -C $(DESTDIR)$(PREFIX) --strip=1 -xf-
-       cp out/libc/libc-mes.guile-o $(DESTDIR)$(PREFIX)/lib/libc-mes.o
+       $(GIT_ARCHIVE_HEAD) mlibc/include \
+               | tar -C $(DESTDIR)$(PREFIX)/share -xf-
+       cp out/mlibc/libc-mes.guile-o $(DESTDIR)$(PREFIX)/lib/libc-mes.o
 
 release: tree-clean-p check dist
        git tag v$(VERSION)
index f89e16012ddf0071ebea0d9ee39ab6343a3ac272..76aa21d431a563ed835fdbc9f17a535c5597a35b 100644 (file)
@@ -1,7 +1,7 @@
 ifneq ($(GUILE),)
 CROSS:=guile-
-C_FILES:=libc/libc-mes.c $(C_FILES)
-#C_FILES:=libc/mini-libc-mes.c $(C_FILES)
+C_FILES:=mlibc/libc-mes.c $(C_FILES)
+#C_FILES:=mlibc/mini-libc-mes.c $(C_FILES)
 O_FILES:=$(C_FILES:%.c=$(OUT)/%.$(CROSS)o)
 
 ifneq ($(DEBUG),)
@@ -14,7 +14,7 @@ CLEAN+=$(O_FILES) $(OUT)/$(TARGET)
 
 CLEAN+=$(OUT)/$(TARGET)
 
-INCLUDES+=libc/include libc $(OUT)/$(DIR)
+INCLUDES+=mlibc/include mlibc $(OUT)/$(DIR)
 MESCC.scm:=guile/mescc.scm
 MESLD.scm:=guile/mescc.scm
 
@@ -73,8 +73,8 @@ endef
 ifeq ($(MLIBC.scm),)
 MLIBC.scm:=DONE
 else
-C_FILES:=$(filter-out libc/libc-mes.c,$(C_FILES))
-C_FILES:=$(filter-out libc/mini-libc-mes.c,$(C_FILES))
+C_FILES:=$(filter-out mlibc/libc-mes.c,$(C_FILES))
+C_FILES:=$(filter-out mlibc/mini-libc-mes.c,$(C_FILES))
 endif
 
 ifneq ($(MESC_DIRECT),)
index b6f49ac810288083360934333b17d0a3c2128992..6f182f165ae75a10d4b4bacb546f9dc16581d9df 100644 (file)
@@ -1,6 +1,6 @@
 ifneq ($(MES),)
 CROSS:=mes-
-C_FILES:=libc/libc-mes.c $(C_FILES)
+C_FILES:=mlibc/libc-mes.c $(C_FILES)
 O_FILES:=$(C_FILES:%.c=$(OUT)/%.$(CROSS)o)
 
 ifneq ($(DEBUG),)
@@ -13,7 +13,7 @@ CLEAN+=$(O_FILES) $(OUT)/$(TARGET)
 
 CLEAN+=$(OUT)/$(TARGET)
 
-INCLUDES+=libc/include libc $(OUT)/$(DIR)
+INCLUDES+=mlibc/include mlibc $(OUT)/$(DIR)
 MESCC.mes:=scripts/mescc.mes
 MESLD.mes:=scripts/mescc.mes
 
@@ -84,7 +84,7 @@ endef
 ifeq ($(MLIBC.mes),)
 MLIBC.mes:=DONE
 else
-C_FILES:=$(filter-out libc/libc-mes.c,$(C_FILES))
+C_FILES:=$(filter-out mlibc/libc-mes.c,$(C_FILES))
 endif
 
 ifneq ($(MESC_DIRECT),)
diff --git a/mlibc/include/assert.h b/mlibc/include/assert.h
new file mode 100644 (file)
index 0000000..d301c19
--- /dev/null
@@ -0,0 +1,33 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * Mes --- Maxwell Equations of Software
+ * Copyright © 2017 Jan Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of Mes.
+ *
+ * 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.
+ *
+ * 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 Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef __MES_ASSERT_H
+#define __MES_ASSERT_H 1
+
+#if __GNUC__ && POSIX
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
+#endif
+#include_next <assert.h>
+#else // ! (__GNUC__ && POSIX)
+#define assert(x) ((x) ? (void)0 : assert_fail (#x))
+void assert_fail (char* s);
+#endif // ! (__GNUC__ && POSIX)
+
+#endif // __MES_ASSERT_H
diff --git a/mlibc/include/ctype.h b/mlibc/include/ctype.h
new file mode 100644 (file)
index 0000000..722814c
--- /dev/null
@@ -0,0 +1,33 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * Mes --- Maxwell Equations of Software
+ * Copyright © 2017 Jan Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of Mes.
+ *
+ * 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.
+ *
+ * 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 Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef __MES_CTYPE_H
+#define __MES_CTYPE_H 1
+
+#if __GNUC__ && POSIX
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
+#endif
+#include_next <ctype.h>
+
+#else // ! (__GNUC__ && POSIX)
+int isdigit (int);
+#endif // ! (__GNUC__ && POSIX)
+
+#endif // __MES_CTYPE_H
diff --git a/mlibc/include/dlfcn.h b/mlibc/include/dlfcn.h
new file mode 100644 (file)
index 0000000..254a237
--- /dev/null
@@ -0,0 +1,28 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * Mes --- Maxwell Equations of Software
+ * Copyright © 2017 Jan Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of Mes.
+ *
+ * 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.
+ *
+ * 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 Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef __MES_DLFCN_H
+#define __MES_DLFCN_H 1
+
+#if __GNUC__ && POSIX
+#include_next <dlfcn.h>
+#endif // (__GNUC__ && POSIX)
+
+#endif // __MES_DLFCN_H
+
diff --git a/mlibc/include/errno.h b/mlibc/include/errno.h
new file mode 100644 (file)
index 0000000..3ffd1a0
--- /dev/null
@@ -0,0 +1,30 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * Mes --- Maxwell Equations of Software
+ * Copyright © 2017 Jan Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of Mes.
+ *
+ * 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.
+ *
+ * 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 Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef __MES_ERRNO_H
+#define __MES_ERRNO_H 1
+
+#if __GNUC__ && POSIX
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
+#endif
+#include_next <errno.h>
+#endif // ! (__GNUC__ && POSIX)
+
+#endif // __MES_ERRNO_H
diff --git a/mlibc/include/fcntl.h b/mlibc/include/fcntl.h
new file mode 100644 (file)
index 0000000..c728f8a
--- /dev/null
@@ -0,0 +1,43 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * Mes --- Maxwell Equations of Software
+ * Copyright © 2017 Jan Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of Mes.
+ *
+ * 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.
+ *
+ * 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 Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef __MES_FCNTL_H
+#define __MES_FCNTL_H 1
+
+#if __GNUC__ && POSIX
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
+#endif
+#include_next <fcntl.h>
+
+#else // ! (__GNUC__ && POSIX)
+#define O_RDONLY 0
+#define O_WRONLY 1
+#define O_RDWR 2
+#define O_CREAT 64
+#define O_TRUNC 512
+
+#define S_IRWXU 00700
+#define S_IXUSR 00100
+#define S_IWUSR 00200
+#define S_IRUSR 00400
+int open (char const *s, int flags, ...);
+#endif // ! (__GNUC__ && POSIX)
+
+#endif // __MES_FCNTL_H
diff --git a/mlibc/include/features.h b/mlibc/include/features.h
new file mode 100644 (file)
index 0000000..d4cbf27
--- /dev/null
@@ -0,0 +1,28 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * Mes --- Maxwell Equations of Software
+ * Copyright © 2017 Jan Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of Mes.
+ *
+ * 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.
+ *
+ * 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 Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef __MES_FEATURES_H
+#define __MES_FEATURES_H 1
+
+#if __GNUC__ && POSIX
+#include_next <features.h>
+#endif // (__GNUC__ && POSIX)
+
+#endif // __MES_FEATURES_H
+
diff --git a/mlibc/include/inttypes.h b/mlibc/include/inttypes.h
new file mode 100644 (file)
index 0000000..39127be
--- /dev/null
@@ -0,0 +1,41 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * Mes --- Maxwell Equations of Software
+ * Copyright © 2017 Jan Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of Mes.
+ *
+ * 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.
+ *
+ * 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 Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef __MES_INTTYPES_H
+#define __MES_INTTYPES_H 1
+
+#if __GNUC__ && POSIX
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
+#endif
+#include_next <inttypes.h>
+#else // ! (__GNUC__ && POSIX)
+
+typedef unsigned char uint8_t;
+typedef char int8_t;
+typedef unsigned short uint16_t;
+typedef unsigned uint32_t;
+typedef int int32_t;
+
+typedef unsigned long long uint64_t;
+typedef long long int64_t;
+
+#endif // ! (__GNUC__ && POSIX)
+
+#endif // __MES_INTTYPES_H
diff --git a/mlibc/include/limits.h b/mlibc/include/limits.h
new file mode 100644 (file)
index 0000000..e4ec62c
--- /dev/null
@@ -0,0 +1,34 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * Mes --- Maxwell Equations of Software
+ * Copyright © 2017 Jan Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of Mes.
+ *
+ * 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.
+ *
+ * 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 Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef __MES_LIMITS_H
+#define __MES_LIMITS_H 1
+
+#if __GNUC__ && POSIX
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
+#endif
+#include_next <limits.h>
+
+#else // ! (__GNUC__ && POSIX)
+#define INT_MIN -2147483648
+#define INT_MAX 2147483647
+#endif // ! (__GNUC__ && POSIX)
+
+#endif // __MES_LIMITS_H
diff --git a/mlibc/include/math.h b/mlibc/include/math.h
new file mode 100644 (file)
index 0000000..15dec7c
--- /dev/null
@@ -0,0 +1,28 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * Mes --- Maxwell Equations of Software
+ * Copyright © 2017 Jan Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of Mes.
+ *
+ * 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.
+ *
+ * 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 Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef __MES_MATH_H
+#define __MES_MATH_H 1
+
+#if __GNUC__ && POSIX
+#include_next <math.h>
+#endif // (__GNUC__ && POSIX)
+
+#endif // __MES_MATH_H
+
diff --git a/mlibc/include/mlibc.h b/mlibc/include/mlibc.h
new file mode 100644 (file)
index 0000000..84573ac
--- /dev/null
@@ -0,0 +1,26 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * Mes --- Maxwell Equations of Software
+ * Copyright © 2016,2017 Jan Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of Mes.
+ *
+ * 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.
+ *
+ * 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 Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef __MES_MLIBC_H
+#define __MES_MLIBC_H
+
+char const* itoa (int);
+
+#endif //__MLIBC_H
diff --git a/mlibc/include/setjmp.h b/mlibc/include/setjmp.h
new file mode 100644 (file)
index 0000000..e28153f
--- /dev/null
@@ -0,0 +1,32 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * Mes --- Maxwell Equations of Software
+ * Copyright © 2017 Jan Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of Mes.
+ *
+ * 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.
+ *
+ * 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 Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef __MES_SETJMP_H
+#define __MES_SETJMP_H 1
+
+#if __GNUC__ && POSIX
+#include_next <setjmp.h>
+#else // ! (__GNUC__ && POSIX)
+
+typedef int jmp_buf;
+
+#endif // ! (__GNUC__ && POSIX)
+
+#endif // __MES_SETJMP_H
+
diff --git a/mlibc/include/signal.h b/mlibc/include/signal.h
new file mode 100644 (file)
index 0000000..50837dc
--- /dev/null
@@ -0,0 +1,28 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * Mes --- Maxwell Equations of Software
+ * Copyright © 2017 Jan Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of Mes.
+ *
+ * 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.
+ *
+ * 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 Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef __MES_SIGNAL_H
+#define __MES_SIGNAL_H 1
+
+#if __GNUC__ && POSIX
+#include_next <signal.h>
+#endif // (__GNUC__ && POSIX)
+
+#endif // __MES_SIGNAL_H
+
diff --git a/mlibc/include/stdarg.h b/mlibc/include/stdarg.h
new file mode 100644 (file)
index 0000000..40436a6
--- /dev/null
@@ -0,0 +1,28 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * Mes --- Maxwell Equations of Software
+ * Copyright © 2017 Jan Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of Mes.
+ *
+ * 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.
+ *
+ * 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 Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef __MES_STDARG_H
+#define __MES_STDARG_H 1
+
+#if __GNUC__ && POSIX
+#include_next <stdarg.h>
+#endif // (__GNUC__ && POSIX)
+
+#endif // __MES_STDARG_H
+
diff --git a/mlibc/include/stdio.h b/mlibc/include/stdio.h
new file mode 100644 (file)
index 0000000..e66bab8
--- /dev/null
@@ -0,0 +1,90 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * Mes --- Maxwell Equations of Software
+ * Copyright © 2016,2017 Jan Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of Mes.
+ *
+ * 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.
+ *
+ * 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 Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef __MES_STDIO_H
+#define __MES_STDIO_H 1
+
+char **g_environment;
+int g_stdin;
+int g_stdout;
+
+#define EOF -1
+#define NULL 0
+#define STDIN 0
+#define STDOUT 1
+#define STDERR 2
+
+int printf (char const* format, ...);
+
+#if __GNUC__ && POSIX
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
+#endif
+#include_next <stdio.h>
+
+int fdputs (char const* s, int fd);
+
+#undef puts
+#define puts(x) fdputs(x, STDOUT)
+#define eputs(x) fdputs(x, STDERR)
+#define fputs fdputs
+
+#ifdef putc
+#undef putc
+#endif
+
+int getchar ();
+
+int fdputc (int c, int fd);
+
+#define fputc fdputc
+#define ungetc fdungetc
+int fdungetc (int c, int fd);
+
+#else // ! (__GNUC__ && POSIX)
+
+// Hmm
+#define stdin 0
+#define stdout 1
+#define stderr 2
+
+// TODO: fseek etc
+#define SEEK_SET 0
+#define SEEK_CUR 1
+#define SEEK_END 2
+
+#if __GNUC__
+#undef fputs
+#undef fdputs
+int fdputs (char const* s, int fd);
+#endif // __MES_GNUC__
+
+int eputs (char const* s);
+int fputs (char const* s, int fd);
+int puts (char const* s);
+int putchar (int c);
+int fputc (int c, int fd);
+int getchar ();
+int ungetc (int c, int fd);
+
+typedef int FILE;
+
+#endif // ! (__GNUC__ && POSIX)
+
+#endif // __MES_STDIO_H
diff --git a/mlibc/include/stdlib.h b/mlibc/include/stdlib.h
new file mode 100644 (file)
index 0000000..ebaba06
--- /dev/null
@@ -0,0 +1,44 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * Mes --- Maxwell Equations of Software
+ * Copyright © 2017 Jan Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of Mes.
+ *
+ * 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.
+ *
+ * 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 Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef __MES_STDLIB_H
+#define __MES_STDLIB_H 1
+
+#if __GNUC__ && POSIX
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
+#endif
+#include_next <stdlib.h>
+#else  // !(__GNUC__ && POSIX)
+
+#ifndef __MES_SIZE_T
+#define __MES_SIZE_T
+typedef long size_t;
+#endif
+
+char* getenv (char const* s);
+int atoi (char const *s);
+void *malloc (size_t);
+void *realloc (void *p, size_t size);
+void exit (int);
+
+#endif // !(__GNUC__ && POSIX)
+
+#endif // __MES_STDLIB_H
+
diff --git a/mlibc/include/string.h b/mlibc/include/string.h
new file mode 100644 (file)
index 0000000..42fe7c6
--- /dev/null
@@ -0,0 +1,42 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * Mes --- Maxwell Equations of Software
+ * Copyright © 2017 Jan Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of Mes.
+ *
+ * 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.
+ *
+ * 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 Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef __MES_STRING_H
+#define __MES_STRING_H 1
+
+#if __GNUC__ && POSIX
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
+#endif
+#include_next <string.h>
+
+#else // ! (__GNUC__ && POSIX)
+
+#ifndef __MES_SIZE_T
+#define __MES_SIZE_T
+typedef long size_t;
+#endif
+
+size_t strlen (char const*);
+int strcmp (char const*, char const*);
+int strncmp (char const*, char const*, size_t);
+char *strcpy (char *dest, char const *src);
+#endif // ! (__GNUC__ && POSIX)
+
+#endif // __MES_STRING_H
diff --git a/mlibc/include/strings.h b/mlibc/include/strings.h
new file mode 100644 (file)
index 0000000..0878530
--- /dev/null
@@ -0,0 +1,28 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * Mes --- Maxwell Equations of Software
+ * Copyright © 2017 Jan Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of Mes.
+ *
+ * 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.
+ *
+ * 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 Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef __MES_STRINGS_H
+#define __MES_STRINGS_H 1
+
+#if __GNUC__ && POSIX
+#include_next <strings.h>
+#endif // (__GNUC__ && POSIX)
+
+#endif // __MES_STRINGS_H
+
diff --git a/mlibc/include/sys/cdefs.h b/mlibc/include/sys/cdefs.h
new file mode 100644 (file)
index 0000000..63c7dfa
--- /dev/null
@@ -0,0 +1,28 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * Mes --- Maxwell Equations of Software
+ * Copyright © 2017 Jan Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of Mes.
+ *
+ * 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.
+ *
+ * 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 Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef __MES_SYS_CDEFS_H
+#define __MES_SYS_CDEFS_H 1
+
+#if __GNUC__ && POSIX
+#include_next <sys/cdefs.h>
+#endif // (__GNUC__ && POSIX)
+
+#endif // __MES_SYS_CDEFS_H
+
diff --git a/mlibc/include/sys/mman.h b/mlibc/include/sys/mman.h
new file mode 100644 (file)
index 0000000..522a710
--- /dev/null
@@ -0,0 +1,28 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * Mes --- Maxwell Equations of Software
+ * Copyright © 2017 Jan Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of Mes.
+ *
+ * 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.
+ *
+ * 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 Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef __MES_SYS_MMAN_H
+#define __MES_SYS_MMAN_H 1
+
+#if __GNUC__ && POSIX
+#include_next <sys/mman.h>
+#endif // (__GNUC__ && POSIX)
+
+#endif // __MES_SYS_MMAN_H
+
diff --git a/mlibc/include/sys/stat.h b/mlibc/include/sys/stat.h
new file mode 100644 (file)
index 0000000..6adae74
--- /dev/null
@@ -0,0 +1,28 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * Mes --- Maxwell Equations of Software
+ * Copyright © 2017 Jan Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of Mes.
+ *
+ * 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.
+ *
+ * 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 Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef __MES_SYS_STAT_H
+#define __MES_SYS_STAT_H 1
+
+#if __GNUC__ && POSIX
+#include_next <sys/stat.h>
+#endif // (__GNUC__ && POSIX)
+
+#endif // __MES_SYS_STAT_H
+
diff --git a/mlibc/include/sys/time.h b/mlibc/include/sys/time.h
new file mode 100644 (file)
index 0000000..de78891
--- /dev/null
@@ -0,0 +1,28 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * Mes --- Maxwell Equations of Software
+ * Copyright © 2017 Jan Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of Mes.
+ *
+ * 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.
+ *
+ * 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 Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef __MES_SYS_TIME_H
+#define __MES_SYS_TIME_H 1
+
+#if __GNUC__ && POSIX
+#include_next <sys/time.h>
+#endif // (__GNUC__ && POSIX)
+
+#endif // __MES_SYS_TIME_H
+
diff --git a/mlibc/include/sys/timeb.h b/mlibc/include/sys/timeb.h
new file mode 100644 (file)
index 0000000..2cd9908
--- /dev/null
@@ -0,0 +1,28 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * Mes --- Maxwell Equations of Software
+ * Copyright © 2017 Jan Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of Mes.
+ *
+ * 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.
+ *
+ * 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 Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef __MES_SYS_TIMEB_H
+#define __MES_SYS_TIMEB_H 1
+
+#if __GNUC__ && POSIX
+#include_next <sys/timeb.h>
+#endif // (__GNUC__ && POSIX)
+
+#endif // __MES_SYS_TIMEB_H
+
diff --git a/mlibc/include/sys/types.h b/mlibc/include/sys/types.h
new file mode 100644 (file)
index 0000000..b7b05c6
--- /dev/null
@@ -0,0 +1,28 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * Mes --- Maxwell Equations of Software
+ * Copyright © 2017 Jan Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of Mes.
+ *
+ * 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.
+ *
+ * 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 Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef __MES_SYS_TYPES_H
+#define __MES_SYS_TYPES_H 1
+
+#if __GNUC__ && POSIX
+#include_next <sys/types.h>
+#endif // (__GNUC__ && POSIX)
+
+#endif // __MES_SYS_TYPES_H
+
diff --git a/mlibc/include/sys/ucontext.h b/mlibc/include/sys/ucontext.h
new file mode 100644 (file)
index 0000000..bdf9274
--- /dev/null
@@ -0,0 +1,28 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * Mes --- Maxwell Equations of Software
+ * Copyright © 2017 Jan Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of Mes.
+ *
+ * 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.
+ *
+ * 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 Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef __MES_SYS_UCONTEXT_H
+#define __MES_SYS_UCONTEXT_H 1
+
+#if __GNUC__ && POSIX
+#include_next <sys/ucontext.h>
+#endif // (__GNUC__ && POSIX)
+
+#endif // __MES_SYS_UCONTEXT_H
+
diff --git a/mlibc/include/time.h b/mlibc/include/time.h
new file mode 100644 (file)
index 0000000..b15cf52
--- /dev/null
@@ -0,0 +1,28 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * Mes --- Maxwell Equations of Software
+ * Copyright © 2017 Jan Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of Mes.
+ *
+ * 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.
+ *
+ * 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 Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef __MES_TIME_H
+#define __MES_TIME_H 1
+
+#if __GNUC__ && POSIX
+#include_next <time.h>
+#endif // (__GNUC__ && POSIX)
+
+#endif // __MES_TIME_H
+
diff --git a/mlibc/include/unistd.h b/mlibc/include/unistd.h
new file mode 100644 (file)
index 0000000..0ba84e5
--- /dev/null
@@ -0,0 +1,41 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * Mes --- Maxwell Equations of Software
+ * Copyright © 2017 Jan Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of Mes.
+ *
+ * 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.
+ *
+ * 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 Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef __MES_UNISTD_H
+#define __MES_UNISTD_H 1
+
+#if __GNUC__ && POSIX
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
+#endif
+#include_next <unistd.h>
+
+#else // ! (__GNUC__ && POSIX)
+
+#ifndef __MES_SIZE_T
+#define __MES_SIZE_T
+typedef long size_t;
+#endif
+
+int access (char const *s, int mode);
+int read (int fd, void* buf, size_t n);
+int write (int fd, char const* s, int n);
+#endif // ! (__GNUC__ && POSIX)
+
+#endif // __MES_UNISTD_H
diff --git a/mlibc/libc-gcc.c b/mlibc/libc-gcc.c
new file mode 100644 (file)
index 0000000..83a58f9
--- /dev/null
@@ -0,0 +1,543 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * Mes --- Maxwell Equations of Software
+ * Copyright © 2016,2017 Jan Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of Mes.
+ *
+ * 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.
+ *
+ * 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 Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+char **g_environment = 0;
+int g_stdin = 0;
+
+#include <stdio.h>
+#include <mlibc.h>
+
+#if __GNUC__
+#include <stdlib.h>
+#endif
+
+#if __GNUC__ && !POSIX
+
+void
+exit (int code)
+{
+  asm (
+       "movl %0,%%ebx\n\t"
+       "movl $1,%%eax\n\t"
+       "int  $0x80"
+       : // no outputs "=" (r)
+       : "" (code)
+       );
+  // not reached
+  exit (0);
+}
+
+int
+read (int fd, void* buf, size_t n)
+{
+  int r;
+  //syscall (SYS_write, fd, s, n));
+  asm (
+       "movl %1,%%ebx\n\t"
+       "movl %2,%%ecx\n\t"
+       "movl %3,%%edx\n\t"
+
+       "movl $0x3,%%eax\n\t"
+       "int  $0x80\n\t"
+
+       "mov %%eax,%0\n\t"
+       : "=r" (r)
+       : "" (fd), "" (buf), "" (n)
+       : "eax", "ebx", "ecx", "edx"
+       );
+  return r;
+}
+
+int
+write (int fd, char const* s, int n)
+{
+  int r;
+  //syscall (SYS_write, fd, s, n));
+  asm (
+       "mov %1,%%ebx\n\t"
+       "mov %2,%%ecx\n\t"
+       "mov %3,%%edx\n\t"
+
+       "mov $0x4, %%eax\n\t"
+       "int $0x80\n\t"
+       "mov %%eax,%0\n\t"
+       : "=r" (r)
+       : "" (fd), "" (s), "" (n)
+       : "eax", "ebx", "ecx", "edx"
+       );
+  return r;
+}
+
+int
+open (char const *s, int flags, ...)
+{
+  int mode;
+  asm (
+       "mov %%ebp,%%eax\n\t"
+       "add $0x10,%%eax\n\t"
+       "mov (%%eax),%%eax\n\t"
+       "mov %%eax,%0\n\t"
+       : "=mode" (mode)
+       : //no inputs ""
+       );
+  int r;
+  //syscall (SYS_open, mode));
+  asm (
+       "mov %1,%%ebx\n\t"
+       "mov %2,%%ecx\n\t"
+       "mov %3,%%edx\n\t"
+       "mov $0x5,%%eax\n\t"
+       "int $0x80\n\t"
+       "mov %%eax,%0\n\t"
+       : "=r" (r)
+       : "" (s), "" (flags), "" (mode)
+       : "eax", "ebx", "ecx", "edx"
+       );
+  return r;
+}
+
+int
+access (char const *s, int mode)
+{
+  int r;
+  //syscall (SYS_access, mode));
+  asm (
+       "mov %1,%%ebx\n\t"
+       "mov %2,%%ecx\n\t"
+       "mov $0x21,%%eax\n\t"
+       "int $0x80\n\t"
+       "mov %%eax,%0\n\t"
+       : "=r" (r)
+       : "" (s), "" (mode)
+       : "eax", "ebx", "ecx"
+       );
+  return r;
+}
+
+void *
+brk (void *p)
+{
+  void *r;
+  asm (
+       "mov %1,%%ebx\n\t"
+
+       "mov $0x2d,%%eax\n\t"
+       "int $0x80\n\t"
+
+       "mov %%eax,%0\n\t"
+       : "=r" (r)
+       : "" (p)
+       : "eax", "ebx"
+       );
+  return r;
+}
+
+int
+fsync (int fd)
+{
+  int r;
+  //syscall (SYS_fsync, fd));
+  asm (
+       "mov %1,%%ebx\n\t"
+
+       "mov $0x76, %%eax\n\t"
+       "int $0x80\n\t"
+       "mov %%eax,%0\n\t"
+       : "=r" (r)
+       : "" (fd)
+       : "eax", "ebx"
+       );
+  return r;
+}
+
+int
+fputc (int c, int fd)
+{
+  write (fd, (char*)&c, 1);
+  return 0;
+}
+
+int
+putchar (int c)
+{
+  write (STDOUT, (char*)&c, 1);
+  return 0;
+}
+
+void *g_malloc_base = 0;
+
+void *
+malloc (size_t size)
+{
+  void *p = brk (0);
+  if (!g_malloc_base) g_malloc_base = p;
+  brk (p+size);
+  return p;
+}
+
+void *
+realloc (void *p, size_t size)
+{
+  (void)p;
+  brk (g_malloc_base + size);
+  return g_malloc_base;
+}
+
+void
+free (void *p)
+{
+  int *n = (int*)p-1;
+  //munmap ((void*)p, *n);
+}
+
+size_t
+strlen (char const* s)
+{
+  int i = 0;
+  while (s[i]) i++;
+  return i;
+}
+
+int
+strcmp (char const* a, char const* b)
+{
+  while (*a && *b && *a == *b) {a++;b++;}
+  return *a - *b;
+}
+
+char *
+strcpy (char *dest, char const *src)
+{
+  char *p = dest;
+  while (*src) *p++ = *src++;
+  *p = 0;
+  return dest;
+}
+
+int
+eputs (char const* s)
+{
+  int i = strlen (s);
+  write (STDERR, s, i);
+  return 0;
+}
+
+int
+fputs (char const* s, int fd)
+{
+  int i = strlen (s);
+  write (fd, s, i);
+  return 0;
+}
+
+int
+puts (char const* s)
+{
+  int i = strlen (s);
+  write (STDOUT, s, i);
+  return 0;
+}
+
+void
+assert_fail (char* s)
+{
+  eputs ("assert fail: ");
+  eputs (s);
+  eputs ("\n");
+  *((int*)0) = 0;
+}
+
+#define assert(x) ((x) ? (void)0 : assert_fail (#x))
+
+int ungetc_char = -1;
+char ungetc_buf[2];
+
+int
+getchar ()
+{
+  char c;
+  int i;
+  if (ungetc_char == -1)
+    {
+      int r = read (g_stdin, &c, 1);
+      if (r < 1) return -1;
+      i = c;
+    }
+  else
+    i = ungetc_buf[ungetc_char--];
+
+  if (i < 0) i += 256;
+
+  return i;
+}
+
+int
+ungetc (int c, int fd)
+{
+  assert (ungetc_char < 2);
+  ungetc_buf[++ungetc_char] = c;
+  return c;
+}
+
+char const* itoa (int);
+
+int
+strncmp (char const* a, char const* b, size_t length)
+{
+  while (*a && *b && *a == *b && --length) {a++;b++;}
+  return *a - *b;
+}
+
+char *
+getenv (char const* s)
+{
+  char **p = g_environment;
+  int length = strlen (s);
+  while (*p)
+    {
+      if (!strncmp (s, *p, length) && *(*p + length) == '=') return (*p + length + 1);
+      p++;
+    }
+  return 0;
+}
+
+int
+isdigit (int c)
+{
+  return (c>='0') && (c<='9');
+}
+
+int
+atoi (char const *s)
+{
+  int i = 0;
+  int sign = 1;
+  if (*s && *s == '-')
+    {
+      sign = -1;
+      s++;
+    }
+  while (isdigit (*s))
+    {
+      i *= 10;
+      i += (*s - '0');
+      s++;
+    }
+  return i * sign;
+}
+
+int
+printf (char const* format, ...)
+{
+  int va_arg = 0;
+  int va;
+  char const *p = format;
+  while (*p)
+    if (*p != '%')
+      putchar (*p++);
+    else
+      {
+        p++;
+        char c = *p;
+        switch (c)
+          {
+          case '%': {putchar (*p); break;}
+          case 'c':
+            {
+            asm (
+                 "mov    -0xc(%%ebp),%%eax\n\t"
+                 "shl     $0x2,%%eax\n\t"
+                 "add     %%ebp,%%eax\n\t"
+                 "add     $0xc,%%eax\n\t"
+                 "mov     (%%eax),%%eax\n\t"
+                 //"mov     %%eax,%0\n\t"
+                 : "=va" (va)
+                 : //no inputs ""
+                 );
+            putchar ((char)va);
+            va_arg++;
+            break;
+            }
+          case 'd': {
+            asm (
+                 "mov    -0xc(%%ebp),%%eax\n\t"
+                 "shl     $0x2,%%eax\n\t"
+                 "add     %%ebp,%%eax\n\t"
+                 "add     $0xc,%%eax\n\t"
+                 "mov     (%%eax),%%eax\n\t"
+                 //"mov     %%eax,%0\n\t"
+                 : "=va" (va)
+                 : //no inputs ""
+                 );
+            puts (itoa ((int)va));
+            va_arg++;
+            break;
+          }
+          case 's': {
+            asm (
+                 "mov    -0xc(%%ebp),%%eax\n\t"
+                 "shl     $0x2,%%eax\n\t"
+                 "add     %%ebp,%%eax\n\t"
+                 "add     $0xc,%%eax\n\t"
+                 "mov     (%%eax),%%eax\n\t"
+                 //"mov     %%eax,%0\n\t"
+                 : "=va" (va)
+                 : //no inputs ""
+                 );
+            puts ((char*)va);
+            va_arg++;
+            break;
+          }
+          default: putchar (*p);
+          }
+        p++;
+      }
+  return 0;
+}
+#endif
+
+char itoa_buf[10];
+
+char const*
+itoa (int x)
+{
+  //static char itoa_buf[10];
+  //char *p = buf+9;
+  char *p = itoa_buf;
+  p += 9;
+  *p-- = 0;
+
+  //int sign = x < 0;
+  int sign;
+  sign = x < 0;
+  if (sign)
+    x = -x;
+
+  do
+    {
+      *p-- = '0' + (x % 10);
+      x = x / 10;
+    } while (x);
+
+  if (sign)
+    *p-- = '-';
+
+  return p+1;
+}
+
+#if POSIX
+#define _GNU_SOURCE
+#include <assert.h>
+#include <fcntl.h>
+#include <string.h>
+#include <unistd.h>
+#endif // POSIX
+
+int
+fdputs (char const* s, int fd)
+{
+  int i = strlen (s);
+  write (fd, s, i);
+  return 0;
+}
+
+#if POSIX
+
+int
+fdputc (int c, int fd)
+{
+  write (fd, (char*)&c, 1);
+  return 0;
+}
+
+int
+putchar (int c)
+{
+  write (STDOUT, (char*)&c, 1);
+  return 0;
+}
+
+int ungetc_char = -1;
+char ungetc_buf[2];
+
+int
+getchar ()
+{
+  char c;
+  int i;
+  if (ungetc_char == -1)
+    {
+      int r = read (g_stdin, &c, 1);
+      if (r < 1) return -1;
+      i = c;
+    }
+  else
+    i = ungetc_buf[ungetc_char--];
+
+  if (i < 0) i += 256;
+
+  return i;
+}
+
+int
+fdungetc (int c, int fd)
+{
+  assert (ungetc_char < 2);
+  ungetc_buf[++ungetc_char] = c;
+  return c;
+}
+
+#endif // POSIX
+
+#if __GNUC__ && !POSIX
+void
+_start ()
+{
+  //  char **;
+  asm (
+       "mov     %%ebp,%%eax\n\t"
+       "addl    $4,%%eax\n\t"
+       "movzbl  (%%eax),%%eax\n\t"
+       "addl    $3,%%eax\n\t"
+       "shl     $2,%%eax\n\t"
+       "add     %%ebp,%%eax\n\t"
+       "movl    %%eax,%0\n\t"
+       : "=g_environment" (g_environment)
+       : //no inputs ""
+       );
+  int r;
+  asm (
+       "mov     %%ebp,%%eax\n\t"
+       "addl    $8,%%eax\n\t"
+       "push    %%eax\n\t"
+
+       "mov     %%ebp,%%eax\n\t"
+       "addl    $4,%%eax\n\t"
+       "movzbl  (%%eax),%%eax\n\t"
+       "push     %%eax\n\t"
+
+       "call    main\n\t"
+       "movl    %%eax,%0\n\t"
+       : "=r" (r)
+       : //no inputs ""
+       );
+  exit (r);
+}
+#endif // __GNUC__ && !POSIX
diff --git a/mlibc/libc-mes.c b/mlibc/libc-mes.c
new file mode 100644 (file)
index 0000000..a5f074f
--- /dev/null
@@ -0,0 +1,387 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * Mes --- Maxwell Equations of Software
+ * Copyright © 2016,2017 Jan Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of Mes.
+ *
+ * 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.
+ *
+ * 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 Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+int g_stdin = 0;
+
+void
+exit ()
+{
+  asm (".byte 0x8b 0x5d 0x08");                    // mov    0x8(%ebp),%ebx
+  asm (".byte 0xb8 0x01 0x00 0x00 0x00");          // mov    $0x1,%eax
+  asm (".byte 0xcd 0x80");                         // int    $0x80
+}
+
+void
+read ()
+{
+  asm (".byte 0x8b 0x5d 0x08");                    // mov    0x8(%ebp),%ebx
+  asm (".byte 0x8b 0x4d 0x0c");                    // mov    0xc(%ebp),%ecx
+  asm (".byte 0x8b 0x55 0x10");                    // mov    0x10(%ebp),%edx
+
+  asm (".byte 0xb8 0x03 0x00 0x00 0x00");          // mov    $0x3,%eax
+  asm (".byte 0xcd 0x80");                         // int    $0x80
+}
+
+void
+write ()
+{
+  asm (".byte 0x8b 0x5d 0x08");                   // mov    0x8(%ebp),%ebx
+  asm (".byte 0x8b 0x4d 0x0c");                   // mov    0xc(%ebp),%ecx
+  asm (".byte 0x8b 0x55 0x10");                   // mov    0x10(%ebp),%edx
+              
+  asm (".byte 0xb8 0x04 0x00 0x00 0x00");         // mov    $0x4,%eax
+  asm (".byte 0xcd 0x80");                        // int    $0x80
+}
+
+void
+open ()
+{
+  asm (".byte 0x8b 0x5d 0x08");                    // mov    0x8(%ebp),%ebx
+  asm (".byte 0x8b 0x4d 0x0c");                    // mov    0xc(%ebp),%ecx
+  asm (".byte 0x8b 0x55 0x10");                    // mov    0x10(%ebp),%edx
+
+  asm (".byte 0xb8 0x05 0x00 0x00 0x00");          // mov    $0x5,%eax
+  asm (".byte 0xcd 0x80");                         // int    $0x80
+}
+
+void
+access ()
+{
+  asm (".byte 0x8b 0x5d 0x08");                    // mov    0x8(%ebp),%ebx
+  asm (".byte 0x8b 0x4d 0x0c");                    // mov    0xc(%ebp),%ecx
+
+  asm (".byte 0xb8 0x21 0x00 0x00 0x00");          // mov    $0x21,%eax
+  asm (".byte 0xcd 0x80");                         // int    $0x80
+}
+
+void
+brk ()
+{
+  asm (".byte 0x8b 0x5d 0x08");                    // mov    0x8(%ebp),%ebx
+  asm (".byte 0xb8 0x2d 0x00 0x00 0x00");          // mov    $0x2d,%eax
+  asm (".byte 0xcd 0x80");                         // int    $0x80
+}
+
+void
+fsync ()
+{
+  asm (".byte 0x8b 0x5d 0x08");                    // mov    0x8(%ebp),%ebx
+  asm (".byte 0xb8 0x76 0x00 0x00 0x00");          // mov    $0x76,%eax
+  asm (".byte 0xcd 0x80");                         // int    $0x80
+}
+
+int
+strlen (char const* s)
+{
+  int i = 0;
+  while (s[i]) i++;
+  return i;
+}
+
+int
+eputs (char const* s)
+{
+  int i = strlen (s);
+  write (2, s, i);
+  return 0;
+}
+
+int
+fputs (char const* s, int fd)
+{
+  int i = strlen (s);
+  write (fd, s, i);
+  return 0;
+}
+
+int
+puts (char const* s)
+{
+  int i = strlen (s);
+  write (1, s, i);
+  return 0;
+}
+
+int
+putchar (int c)
+{
+  write (1, (char*)&c, 1);
+  return 0;
+}
+
+int
+fputc (int c, int fd)
+{
+  write (fd, (char*)&c, 1);
+  return 0;
+}
+
+void
+assert_fail (char* s)
+{
+  eputs ("assert fail: ");
+  eputs (s);
+  eputs ("\n");
+  //*((int*)0) = 0;
+  char *fail = s;
+  fail = 0;
+  *fail = 0;
+}
+
+int ungetc_char = -1;
+char ungetc_buf[2];
+int
+getchar ()
+{
+  char c;
+  int i;
+  if (ungetc_char == -1)
+    {
+      int r = read (g_stdin, &c, 1);
+      if (r < 1) return -1;
+      i = c;
+   }
+  else
+    {
+       //FIXME
+       //i = ungetc_buf[ungetc_char--];
+       i = ungetc_buf[ungetc_char];
+       //ungetc_char--;
+       ungetc_char = ungetc_char - 1;
+     }
+  if (i < 0) i += 256;
+
+  return i;
+}
+
+//#define assert(x) ((x) ? (void)0 : assert_fail (#x))
+int
+ungetc (int c, int fd)
+{
+  //FIXME
+  //assert (ungetc_char < 2);
+  //assert (ungetc_char == -1 || ungetc_char < 2);
+  //FIXME
+  //ungetc_buf[++ungetc_char] = c;
+  ungetc_char++;
+  ungetc_buf[ungetc_char] = c;
+  return c;
+}
+
+int
+strcmp (char const* a, char const* b)
+{
+  while (*a && *b && *a == *b)
+    {
+      a++;b++;
+    }
+  return *a - *b;
+}
+
+char *
+strcpy (char *dest, char const *src)
+{
+  char *p = dest;
+  while (*src) *p++ = *src++;
+  *p = 0;
+  return dest;
+}
+
+char itoa_buf[10];
+
+char const*
+itoa (int x)
+{
+  //static char itoa_buf[10];
+  //char *p = buf+9;
+  char *p = itoa_buf;
+  p += 9;
+  *p-- = 0;
+
+  //int sign = x < 0; // FIXME
+  int sign = 0;
+  if (x < 0) sign = 1;
+  if (sign)
+    x = -x;
+
+  do
+     {
+       *p-- = '0' + (x % 10);
+       x = x / 10;
+     } while (x);
+
+  if (sign && *(p + 1) != '0')
+    *p-- = '-';
+
+  return p+1;
+}
+
+int
+isdigit (char c)
+{
+  //return (c>='0') && (c<='9');
+  if (c>='0' && c<='9') return 1;
+  return 0;
+}
+
+int
+atoi (char const *s)
+{
+  int i = 0;
+  int sign = 1;
+  if (*s && *s == '-')
+    {
+      sign = -1;
+      s++;
+    }
+  while (isdigit (*s))
+    {
+      i *= 10;
+      i += (*s - '0');
+      s++;
+    }
+  return i * sign;
+}
+
+//void *g_malloc_base = 0;
+char *g_malloc_base = 0;
+
+//void *
+int *
+malloc (int size)
+{
+  //void *p = brk (0);
+  char *p = 0;
+  p = brk (0);
+  if (!g_malloc_base) g_malloc_base = p;
+  brk (p+size);
+  return p;
+}
+
+//void *
+int *
+//realloc (void *p, int size)
+realloc (int *p, int size)
+{
+  brk (g_malloc_base + size);
+  return g_malloc_base;
+}
+
+int
+strncmp (char const* a, char const* b, int length)
+{
+  while (*a && *b && *a == *b && --length) {a++;b++;}
+  return *a - *b;
+}
+
+char **g_environment;
+char *
+getenv (char const* s)
+{
+  char **p = g_environment;
+  p = *g_environment;
+  int length = strlen (s);
+  while (*p)
+    {
+      if (!strncmp (s, *p, length) && *(*p + length) == '=') return (*p + length + 1);
+      p++;
+    }
+  return 0;
+}
+
+#if 0
+
+// !__MESC__
+// FIXME: mes+nyacc parser bug here
+// works fine with Guile, but let's keep a single input source
+
+#define pop_va_arg \
+  asm (".byte 0x8b 0x45 0xfc"); /* mov   -<0x4>(%ebp),%eax :va_arg */ \
+  asm (".byte 0xc1 0xe0 0x02"); /* shl   $0x2,%eax */ \
+  asm (".byte 0x01 0xe8");      /* add   %ebp,%eax */ \
+  asm (".byte 0x83 0xc0 0x0c"); /* add   $0xc,%eax */ \
+  asm (".byte 0x8b 0x00");      /* mov   (%eax),%eax */ \
+  asm (".byte 0x89 0x45 0xf8"); /* mov   %eax,-0x8(%ebp) :va */ \
+  asm (".byte 0x50")            /* push   %eax */
+
+#else // __MESC__
+
+#define pop_va_arg asm (".byte 0x8b 0x45 0xfc 0xc1 0xe0 0x02 0x01 0xe8 0x83 0xc0 0x0c 0x8b 0x00 0x89 0x45 0xf8 0x50")
+
+#endif
+
+int
+printf (char const* format, int va_args)
+{
+  int va_arg = 0;
+  int va;
+  char *p = format;
+  while (*p)
+    if (*p != '%')
+      putchar (*p++);
+    else
+      {
+        p++;
+        char c = *p;
+        switch (c)
+          {
+          case '%': {putchar (*p); break;}
+          case 'c': {pop_va_arg; putchar ((char)va); va_arg++; break;}
+          case 'd': {pop_va_arg; puts (itoa (va)); va_arg++; break;}
+          case 's': {pop_va_arg; puts ((char*)va); va_arg++; break;}
+          default: putchar (*p);
+          }
+        p++;
+      }
+  return 0;
+}
+
+char **g_environment;
+char **
+_env (char **e)
+{
+  return e;
+}
+
+int
+_start ()
+{
+  asm (".byte 0x89 0xe8");      // mov    %ebp,%eax
+  asm (".byte 0x83 0xc0 0x08"); // add    $0x8,%eax
+  asm (".byte 0x50");           // push   %eax
+
+  asm (".byte 0x89 0xe8");      // mov    %ebp,%eax
+  asm (".byte 0x83 0xc0 0x04"); // add    $0x4,%eax
+  asm (".byte 0x0f 0xb6 0x00"); // movzbl (%eax),%eax
+  asm (".byte 0x50");           // push   %eax
+
+  asm (".byte 0x89 0xe8");      // mov    %ebp,%eax
+  asm (".byte 0x83 0xc0 0x04"); // add    $0x4,%eax
+  asm (".byte 0x0f 0xb6 0x00"); // movzbl (%eax),%eax
+  asm (".byte 0x83 0xc0 0x03"); // add    $0x3,%eax
+  asm (".byte 0xc1 0xe0 0x02"); // shl    $0x2,%eax
+  asm (".byte 0x01 0xe8");      // add    %ebp,%eax
+  asm (".byte 0x50");           // push   %eax
+
+  g_environment = _env ();
+  asm (".byte 0x58");
+  int r = main ();
+  exit (r);
+}
diff --git a/mlibc/mini-libc-mes.c b/mlibc/mini-libc-mes.c
new file mode 100644 (file)
index 0000000..9cc021b
--- /dev/null
@@ -0,0 +1,87 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * Mes --- Maxwell Equations of Software
+ * Copyright © 2016,2017 Jan Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of Mes.
+ *
+ * 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.
+ *
+ * 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 Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+void
+exit ()
+{
+  asm (".byte 0x8b 0x5d 0x08");                    // mov    0x8(%ebp),%ebx
+  asm (".byte 0xb8 0x01 0x00 0x00 0x00");          // mov    $0x1,%eax
+  asm (".byte 0xcd 0x80");                         // int    $0x80
+}
+
+void
+write ()
+{
+  asm (".byte 0x8b 0x5d 0x08");                   // mov    0x8(%ebp),%ebx
+  asm (".byte 0x8b 0x4d 0x0c");                   // mov    0xc(%ebp),%ecx
+  asm (".byte 0x8b 0x55 0x10");                   // mov    0x10(%ebp),%edx
+
+  asm (".byte 0xb8 0x04 0x00 0x00 0x00");         // mov    $0x4,%eax
+  asm (".byte 0xcd 0x80");                        // int    $0x80
+}
+
+int
+strlen (char const* s)
+{
+  int i = 0;
+  while (s[i]) i++;
+  return i;
+}
+
+int
+eputs (char const* s)
+{
+  int i = strlen (s);
+  write (2, s, i);
+  return 0;
+}
+
+char **g_environment;
+char **
+_env (char **e)
+{
+  return e;
+}
+
+int
+_start ()
+{
+  asm (".byte 0x89 0xe8");      // mov    %ebp,%eax
+  asm (".byte 0x83 0xc0 0x08"); // add    $0x8,%eax
+  asm (".byte 0x50");           // push   %eax
+
+  asm (".byte 0x89 0xe8");      // mov    %ebp,%eax
+  asm (".byte 0x83 0xc0 0x04"); // add    $0x4,%eax
+  asm (".byte 0x0f 0xb6 0x00"); // movzbl (%eax),%eax
+  asm (".byte 0x50");           // push   %eax
+
+  asm (".byte 0x89 0xe8");      // mov    %ebp,%eax
+  asm (".byte 0x83 0xc0 0x04"); // add    $0x4,%eax
+  asm (".byte 0x0f 0xb6 0x00"); // movzbl (%eax),%eax
+  asm (".byte 0x83 0xc0 0x03"); // add    $0x3,%eax
+  asm (".byte 0xc1 0xe0 0x02"); // shl    $0x2,%eax
+  asm (".byte 0x01 0xe8");      // add    %ebp,%eax
+  asm (".byte 0x50");           // push   %eax
+
+  g_environment = _env ();
+  asm (".byte 0x58");
+  int r = main ();
+  exit (r);
+}
index e6353464af6d3d8c3b62bd9ba7385195bfbb0d48..aba55d30635846466eb53ff40e87b8a39c7f7f8a 100644 (file)
@@ -54,9 +54,9 @@
 (define mes? (pair? (current-module)))
 
 (define* (c99-input->full-ast #:key (defines '()) (includes '()))
-  (let ((include (if (equal? %prefix "") "libc/include" (string-append %prefix "/include"))))
+  (let ((include (if (equal? %prefix "") "mlibc/include" (string-append %prefix "/share/mlibc/include"))))
     (parse-c99
-     #:inc-dirs (append includes (cons* "." "libc" "src" "out" "out/src" include (string-split (getenv "C_INCLUDE_PATH") #\:)))
+     #:inc-dirs (append includes (cons* "." "mlibc" "src" "out" "out/src" include (string-split (getenv "C_INCLUDE_PATH") #\:)))
      #:cpp-defs `(
                   "POSIX=0"
                   "_POSIX_SOURCE=0"
index fbf28f9a3edf737580297708c53aa9d0a2d17390..803f424b19f8f33b23a13efb8255c0b906cc45a2 100644 (file)
@@ -1,7 +1,7 @@
 TARGET:=m
 C_FILES:=$(DIR)/m.c
 DEFINES:=POSIX=1
-INCLUDES:=libc
+INCLUDES:=mlibc
 include make/bin.make
 
 TARGET:=m
@@ -11,7 +11,7 @@ include make/check.make
 TARGET:=hello
 C_FILES:=$(DIR)/hello.c
 DEFINES:=POSIX=1
-INCLUDES:=libc
+INCLUDES:=mlibc
 include make/bin.make
 
 TARGET:=hello
@@ -21,7 +21,7 @@ include make/check.make
 TARGET:=t
 C_FILES:=$(DIR)/t.c
 DEFINES:=POSIX=1
-INCLUDES:=libc
+INCLUDES:=mlibc
 include make/bin.make
 
 TARGET:=t
@@ -30,7 +30,7 @@ include make/check.make
 TARGET:=t-tcc
 C_FILES:=$(DIR)/t-tcc.c
 DEFINES:=POSIX=1
-INCLUDES:=libc
+INCLUDES:=mlibc
 include make/bin.make
 
 TARGET:=t-tcc
index 0cf248eaeb1bfc8460c29c63a9872b6e1204fb51..1e49cbd0e521654a5b494b888c785b26aec0b539 100644 (file)
@@ -22,7 +22,7 @@ snarf-gcc: $(SNARF.GCC)
 $(OUT)/$(DIR)/mes.o: $(SNARF.GCC)
 
 DEFINES:=FIXED_PRIMITIVES=1 MES_FULL=1 POSIX=1 VERSION='"$(VERSION)"' MODULEDIR='"$(MODULEDIR)"' PREFIX='"$(PREFIX)"'
-INCLUDES:=libc $(OUT)/$(DIR)
+INCLUDES:=mlibc $(OUT)/$(DIR)
 TARGET:=mes
 C_FILES:=$(DIR)/mes.c
 include make/bin.make