build: mlib/include to include, move mlib to lib.
authorJan Nieuwenhuizen <janneke@gnu.org>
Wed, 22 Nov 2017 15:23:48 +0000 (16:23 +0100)
committerJan Nieuwenhuizen <janneke@gnu.org>
Wed, 22 Nov 2017 15:23:48 +0000 (16:23 +0100)
* include: Move from mlib/include.
* lib: Move from mlib.
* BOOTSTRAP: Update.
* HACKING: Update.
* guile/guix/make.scm: Update.
* make.scm: Update.
* module/language/c99/compiler.mes: Update.

99 files changed:
BOOTSTRAP
HACKING
guile/guix/make.scm
include/00-test.i [new file with mode: 0644]
include/30-test.i [new file with mode: 0644]
include/alloca.h [new file with mode: 0644]
include/assert.h [new file with mode: 0644]
include/ctype.h [new file with mode: 0644]
include/dlfcn.h [new file with mode: 0644]
include/endian.h [new file with mode: 0644]
include/errno.h [new file with mode: 0644]
include/fcntl.h [new file with mode: 0644]
include/features.h [new file with mode: 0644]
include/float.h [new file with mode: 0644]
include/getopt.h [new file with mode: 0644]
include/inttypes.h [new file with mode: 0644]
include/libgen.h [new file with mode: 0644]
include/limits.h [new file with mode: 0644]
include/locale.h [new file with mode: 0644]
include/math.h [new file with mode: 0644]
include/mlibc.h [new file with mode: 0644]
include/setjmp.h [new file with mode: 0644]
include/signal.h [new file with mode: 0644]
include/stdarg.h [new file with mode: 0644]
include/stdbool.h [new file with mode: 0644]
include/stddef.h [new file with mode: 0644]
include/stdint.h [new file with mode: 0644]
include/stdio.h [new file with mode: 0644]
include/stdlib.h [new file with mode: 0644]
include/stdnoreturn.h [new file with mode: 0644]
include/string.h [new file with mode: 0644]
include/strings.h [new file with mode: 0644]
include/sys/cdefs.h [new file with mode: 0644]
include/sys/mman.h [new file with mode: 0644]
include/sys/select.h [new file with mode: 0644]
include/sys/stat.h [new file with mode: 0644]
include/sys/time.h [new file with mode: 0644]
include/sys/timeb.h [new file with mode: 0644]
include/sys/types.h [new file with mode: 0644]
include/sys/ucontext.h [new file with mode: 0644]
include/sys/wait.h [new file with mode: 0644]
include/time.h [new file with mode: 0644]
include/unistd.h [new file with mode: 0644]
lib/crt1.c [new file with mode: 0644]
lib/getopt.c [new file with mode: 0644]
lib/libc-gcc+tcc.c [new file with mode: 0644]
lib/libc-gcc.c [new file with mode: 0644]
lib/libc-mes+tcc.c [new file with mode: 0644]
lib/libc-mes.c [new file with mode: 0644]
lib/mini-libc-mes.c [new file with mode: 0644]
make.scm
mlibc/crt1.c [deleted file]
mlibc/getopt.c [deleted file]
mlibc/include/00-test.i [deleted file]
mlibc/include/30-test.i [deleted file]
mlibc/include/alloca.h [deleted file]
mlibc/include/assert.h [deleted file]
mlibc/include/ctype.h [deleted file]
mlibc/include/dlfcn.h [deleted file]
mlibc/include/endian.h [deleted file]
mlibc/include/errno.h [deleted file]
mlibc/include/fcntl.h [deleted file]
mlibc/include/features.h [deleted file]
mlibc/include/float.h [deleted file]
mlibc/include/getopt.h [deleted file]
mlibc/include/inttypes.h [deleted file]
mlibc/include/libgen.h [deleted file]
mlibc/include/limits.h [deleted file]
mlibc/include/locale.h [deleted file]
mlibc/include/math.h [deleted file]
mlibc/include/mlibc.h [deleted file]
mlibc/include/setjmp.h [deleted file]
mlibc/include/signal.h [deleted file]
mlibc/include/stdarg.h [deleted file]
mlibc/include/stdbool.h [deleted file]
mlibc/include/stddef.h [deleted file]
mlibc/include/stdint.h [deleted file]
mlibc/include/stdio.h [deleted file]
mlibc/include/stdlib.h [deleted file]
mlibc/include/stdnoreturn.h [deleted file]
mlibc/include/string.h [deleted file]
mlibc/include/strings.h [deleted file]
mlibc/include/sys/cdefs.h [deleted file]
mlibc/include/sys/mman.h [deleted file]
mlibc/include/sys/select.h [deleted file]
mlibc/include/sys/stat.h [deleted file]
mlibc/include/sys/time.h [deleted file]
mlibc/include/sys/timeb.h [deleted file]
mlibc/include/sys/types.h [deleted file]
mlibc/include/sys/ucontext.h [deleted file]
mlibc/include/sys/wait.h [deleted file]
mlibc/include/time.h [deleted file]
mlibc/include/unistd.h [deleted file]
mlibc/libc-gcc+tcc.c [deleted file]
mlibc/libc-gcc.c [deleted file]
mlibc/libc-mes+tcc.c [deleted file]
mlibc/libc-mes.c [deleted file]
mlibc/mini-libc-mes.c [deleted file]
module/language/c99/compiler.mes

index 42da81ee2805c3ad43c1495e8b727c42425e6ba1..618aad4b9131d735b42b8bbc98df9878e3c3914b 100644 (file)
--- a/BOOTSTRAP
+++ b/BOOTSTRAP
@@ -68,10 +68,10 @@ Do:
 *** Remember that mes.M1 is compiled by mescc from prototyped src/mes.c in C.
 *** stage0/mescc-tools: TODO
 *** Mes
-   M1 -f stage0/x86.M1 -f mlibc/crt1.M1 --LittleEndian --Architecture=1 > mlibc/crt1.hex2
-   M1 -f stage0/x86.M1 -f mlibc/mini-libc-mes.M1 --LittleEndian --Architecture=1  > mlibc/libc-mes.hex2
+   M1 -f stage0/x86.M1 -f lib/crt1.M1 --LittleEndian --Architecture=1 > lib/crt1.hex2
+   M1 -f stage0/x86.M1 -f lib/mini-libc-mes.M1 --LittleEndian --Architecture=1  > lib/libc-mes.hex2
    M1 -f stage0/x86.M1 -f src/mes.M1 --LittleEndian --Architecture=1 > src/mes.hex2
-   hex2 --LittleEndian --Architecture=1 --BaseAddress=0x1000000 -f stage0/elf32-header.hex2 -f mlibc/crt1.hex2 -f mlibc/libc-mes.hex2 -f src/mes.hex2 -f stage0/elf32-footer-single-main.hex2 > src/mes-mes
+   hex2 --LittleEndian --Architecture=1 --BaseAddress=0x1000000 -f stage0/elf32-header.hex2 -f lib/crt1.hex2 -f lib/libc-mes.hex2 -f src/mes.hex2 -f stage0/elf32-footer-single-main.hex2 > src/mes-mes
    exec_enable src/mes-mes
 *** Tinycc
    ./build.sh
diff --git a/HACKING b/HACKING
index 1c432e18bce632e31b4b860d285f37fd3053e7e4..904c92455d9778c67987bdce1a7e3fdc5f767417 100644 (file)
--- a/HACKING
+++ b/HACKING
@@ -24,7 +24,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: mlibc/libc-gcc.c and steal ideas.
+the gcc variant of mes libc: lib/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.
index 76e5393a173207cb025d41927cf5d93952bb3301..7408321a2de0883393f910f9508cc91fbcd64ed2 100644 (file)
     "-D"
     "POSIX=1"
     "-I" "src"
-    "-I" "mlibc"
-    "-I" "mlibc/include"
-    "--include=mlibc/libc-gcc.c"))
+    "-I" "lib"
+    "-I" "include"
+    "--include=lib/libc-gcc.c"))
 
 (define %C32-FLAGS
   '("--std=gnu99"
     "-g"
     "-m32"
     "-I" "src"
-    "-I" "mlibc"
-    "-I" "mlibc/include"))
+    "-I" "lib"
+    "-I" "include"))
 
 (define* (CC.gcc #:key (libc #t) (cc (if (eq? libc #t) %CC %CC32)) (c-flags (if (eq? libc #t) %C-FLAGS %C32-FLAGS)) (defines '()) (includes '()))
   (method (name "CC.gcc")
   (if (target? o) o
       (find (lambda (t) (equal? (target-file-name t) o)) %targets)))
 
-(define crt1.mlibc-o (compile.gcc "mlibc/crt1.c" #:libc #f))
-(define libc-gcc.mlibc-o (compile.gcc "mlibc/libc-gcc.c" #:libc #f))
-(define libc-gcc+tcc.mlibc-o (compile.gcc "mlibc/libc-gcc+tcc.c" #:libc #f))
+(define crt1.mlibc-o (compile.gcc "lib/crt1.c" #:libc #f))
+(define libc-gcc.mlibc-o (compile.gcc "lib/libc-gcc.c" #:libc #f))
+(define libc-gcc+tcc.mlibc-o (compile.gcc "lib/libc-gcc+tcc.c" #:libc #f))
diff --git a/include/00-test.i b/include/00-test.i
new file mode 100644 (file)
index 0000000..674bb0f
--- /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/>.
+ */
+
+int test ();
+
+int
+main ()
+{
+  int r = test ();
+#if __MESC__
+  asm ("mov____%eax,%ebx");
+  asm ("mov____$i32,%eax SYS_exit");
+  asm ("int____$0x80");
+#elif __GNUC__
+  asm ("mov    %0,%%ebx"
+       : // no outputs
+       : "" (r));
+  asm ("mov    $1,%eax");
+  asm ("int    $0x80");
+#elif __TINYC__
+  asm ("mov    %0,%%ebx"
+       : // no outputs
+       : "Ir" (r));
+  asm ("mov    $1,%eax");
+  asm ("int    $0x80");
+#endif // __GNUC__
+}
diff --git a/include/30-test.i b/include/30-test.i
new file mode 100644 (file)
index 0000000..46ede62
--- /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/>.
+ */
+
+int test ();
+
+int
+main ()
+{
+  int r = test ();
+  return r;
+}
diff --git a/include/alloca.h b/include/alloca.h
new file mode 100644 (file)
index 0000000..61df893
--- /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_ALLOCA_H
+#define __MES_ALLOCA_H 1
+
+#if __GNUC__ && POSIX
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
+#endif
+#undef __MES_ALLOCA_H 1
+#include_next <alloca.h>
+
+#else // ! (__GNUC__ && POSIX)
+void* alloca (size_t);
+#endif // ! (__GNUC__ && POSIX)
+
+#endif // __MES_ALLOCA_H
diff --git a/include/assert.h b/include/assert.h
new file mode 100644 (file)
index 0000000..18ce042
--- /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_ASSERT_H
+#define __MES_ASSERT_H 1
+
+#if __GNUC__ && POSIX
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
+#endif
+#undef __MES_ASSERT_H
+#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/include/ctype.h b/include/ctype.h
new file mode 100644 (file)
index 0000000..69d1210
--- /dev/null
@@ -0,0 +1,36 @@
+/* -*-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
+#undef __MES_CTYPE_H
+#include_next <ctype.h>
+
+#else // ! (__GNUC__ && POSIX)
+#include <endian.h>
+int isdigit (int);
+int isxdigit (int);
+#endif // ! (__GNUC__ && POSIX)
+
+#endif // __MES_CTYPE_H
diff --git a/include/dlfcn.h b/include/dlfcn.h
new file mode 100644 (file)
index 0000000..0158a8e
--- /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_DLFCN_H
+#define __MES_DLFCN_H 1
+
+#if __GNUC__ && POSIX
+#undef __MES_DLFCN_H
+#include_next <dlfcn.h>
+
+#else // !(__GNUC__ && POSIX)
+
+#define RTLD_LAZY      0x00001
+#define RTLD_NOW       0x00002
+#define        RTLD_BINDING_MASK   0x3
+#define RTLD_NOLOAD    0x00004
+#define RTLD_DEEPBIND  0x00008
+#define RTLD_GLOBAL    0x00100
+#define RTLD_LOCAL     0
+#define RTLD_NODELETE  0x01000
+
+void *dlopen (char const *filename, int flags);
+int dlclose (void *handle);
+
+#endif // !(__GNUC__ && POSIX)
+
+#endif // __MES_DLFCN_H
+
diff --git a/include/endian.h b/include/endian.h
new file mode 100644 (file)
index 0000000..87d1011
--- /dev/null
@@ -0,0 +1,36 @@
+/* -*-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_ENDIAN_H
+#define __MES_ENDIAN_H 1
+
+#if __GNUC__ && POSIX
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
+#endif
+#undef __MES_ENDIAN_H
+#include_next <endian.h>
+
+#else // ! (__GNUC__ && POSIX)
+#define        __LITTLE_ENDIAN 1234
+#define        __BIG_ENDIAN 4321
+#define __BYTE_ORDER __LITTLE_ENDIAN
+#endif // ! (__GNUC__ && POSIX)
+
+#endif // __MES_ENDIAN_H
diff --git a/include/errno.h b/include/errno.h
new file mode 100644 (file)
index 0000000..a429d58
--- /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_ERRNO_H
+#define __MES_ERRNO_H 1
+
+#if __GNUC__ && POSIX
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
+#endif
+#undef __MES_ERRNO_H
+#include_next <errno.h>
+#else // ! (__GNUC__ && POSIX)
+int errno;
+#endif // ! (__GNUC__ && POSIX)
+
+#endif // __MES_ERRNO_H
diff --git a/include/fcntl.h b/include/fcntl.h
new file mode 100644 (file)
index 0000000..7d30a7b
--- /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_FCNTL_H
+#define __MES_FCNTL_H 1
+
+#if __GNUC__ && POSIX
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
+#endif
+#undef __MES_FCNTL_H
+#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/include/features.h b/include/features.h
new file mode 100644 (file)
index 0000000..a75a698
--- /dev/null
@@ -0,0 +1,29 @@
+/* -*-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
+#undef __MES_FEATURES_H
+#include_next <features.h>
+#endif // (__GNUC__ && POSIX)
+
+#endif // __MES_FEATURES_H
+
diff --git a/include/float.h b/include/float.h
new file mode 100644 (file)
index 0000000..4b5fd38
--- /dev/null
@@ -0,0 +1,29 @@
+/* -*-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_FLOAT_H
+#define __MES_FLOAT_H 1
+
+#if __GNUC__ && POSIX
+#undef __MES_FLOAT_H
+#include_next <float.h>
+#else // ! (__GNUC__ && POSIX)
+#endif // ! (__GNUC__ && POSIX)
+
+#endif // __MES_FLOAT_H
diff --git a/include/getopt.h b/include/getopt.h
new file mode 100644 (file)
index 0000000..85e4b50
--- /dev/null
@@ -0,0 +1,60 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * Mes --- Maxwell Equations of Software
+ * Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
+ * 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_GETOPT_H
+#define __MES_GETOPT_H 1
+
+#if __GNUC__ && POSIX
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
+#endif
+#undef __MES_GETOPT_H
+#include_next <getopt.h>
+
+#else // ! (__GNUC__ && POSIX)
+#include <endian.h>
+int isdigit (int);
+int isxdigit (int);
+#endif // ! (__GNUC__ && POSIX)
+
+char *optarg;
+int optind;
+int opterr;
+struct option
+{
+  char const *name;
+  int has_arg;
+  int *flag;
+  int val;
+};
+
+enum _argtype
+{
+  no_argument,
+  required_argument,
+  optional_argument
+};
+
+int getopt (int argc, char *const *argv, char const *shortopts);
+int getopt_long (int argc, char *const *argv, char const *shortopts,
+                 struct option const *longopts, int *longind);
+
+#endif // __MES_GETOPT_H
+
diff --git a/include/inttypes.h b/include/inttypes.h
new file mode 100644 (file)
index 0000000..b3f4f7e
--- /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_INTTYPES_H
+#define __MES_INTTYPES_H 1
+
+#if __GNUC__ && POSIX
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
+#endif
+#undef __MES_INTTYPES_H
+#include_next <inttypes.h>
+#else // ! (__GNUC__ && POSIX)
+
+#include <stdint.h>
+#endif // ! (__GNUC__ && POSIX)
+
+#endif // __MES_INTTYPES_H
diff --git a/include/libgen.h b/include/libgen.h
new file mode 100644 (file)
index 0000000..2bad446
--- /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_LIBGEN_H
+#define __MES_LIBGEN_H 1
+
+#if __GNUC__ && POSIX
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
+#endif
+#undef __MES_LIBGEN_H
+#include_next <libgen.h>
+
+#else // ! (__GNUC__ && POSIX)
+char* dirname (char*);
+#endif // ! (__GNUC__ && POSIX)
+
+#endif // __MES_LIBGEN_H
diff --git a/include/limits.h b/include/limits.h
new file mode 100644 (file)
index 0000000..765dd4a
--- /dev/null
@@ -0,0 +1,35 @@
+/* -*-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
+#undef __MES_LIMITS_H
+#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/include/locale.h b/include/locale.h
new file mode 100644 (file)
index 0000000..bbd0797
--- /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_LOCALE_H
+#define __MES_LOCALE_H 1
+
+#if __GNUC__ && POSIX
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
+#endif
+#undef __MES_LOCALE_H
+#include_next <locale.h>
+
+#else // ! (__GNUC__ && POSIX)
+char* dirname (char*);
+#endif // ! (__GNUC__ && POSIX)
+
+#endif // __MES_LOCALE_H
diff --git a/include/math.h b/include/math.h
new file mode 100644 (file)
index 0000000..c74b886
--- /dev/null
@@ -0,0 +1,29 @@
+/* -*-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
+#undef __MES_MATH_H
+#include_next <math.h>
+#endif // (__GNUC__ && POSIX)
+
+#endif // __MES_MATH_H
+
diff --git a/include/mlibc.h b/include/mlibc.h
new file mode 100644 (file)
index 0000000..fb24f0b
--- /dev/null
@@ -0,0 +1,29 @@
+/* -*-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);
+int _atoi (char const**, int base);
+int eputc (int c);
+int eputs (char const* s);
+
+#endif //__MES_MLIBC_H
diff --git a/include/setjmp.h b/include/setjmp.h
new file mode 100644 (file)
index 0000000..c1c5300
--- /dev/null
@@ -0,0 +1,35 @@
+/* -*-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
+#undef __MES_SETJMP_H
+#include_next <setjmp.h>
+#else // ! (__GNUC__ && POSIX)
+
+typedef int jmp_buf;
+void longjmp (jmp_buf env, int val);
+int setjmp (jmp_buf env);
+
+#endif // ! (__GNUC__ && POSIX)
+
+#endif // __MES_SETJMP_H
+
diff --git a/include/signal.h b/include/signal.h
new file mode 100644 (file)
index 0000000..43f958c
--- /dev/null
@@ -0,0 +1,209 @@
+/* -*-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
+#undef __MES_SIGNAL_H
+#include_next <signal.h>
+#else //! (__GNUC__ && POSIX)
+typedef int sigset_t;
+
+typedef int stack_t;
+
+typedef int pid_t;
+typedef int uid_t;
+typedef int clock_t;
+typedef int sigval_t;
+
+#define SIGHUP          1
+#define SIGINT          2
+#define SIGQUIT                 3
+#define SIGILL          4
+#define SIGTRAP                 5
+#define SIGABRT                 6
+#define SIGIOT          6
+#define SIGBUS          7
+#define SIGFPE          8
+#define SIGKILL                 9
+#define SIGUSR1                10
+#define SIGSEGV                11
+#define SIGUSR2                12
+#define SIGPIPE                13
+#define SIGALRM                14
+#define SIGTERM                15
+#define SIGSTKFLT      16
+#define SIGCHLD                17
+#define SIGCONT                18
+#define SIGSTOP                19
+#define SIGTSTP                20
+#define SIGTTIN                21
+#define SIGTTOU                22
+#define SIGURG         23
+#define SIGXCPU                24
+#define SIGXFSZ                25
+#define SIGVTALRM      26
+#define SIGPROF                27
+#define SIGWINCH       28
+#define SIGIO          29
+#define SIGPOLL                SIGIO
+
+#define FPE_INTDIV     1
+#define FPE_INTOVF     2
+#define FPE_FLTDIV     3
+#define FPE_FLTOVF     4
+#define FPE_FLTUND     5
+#define FPE_FLTRES     6
+#define FPE_FLTINV     7
+#define FPE_FLTSUB     8
+
+#define SA_NOCLDSTOP   0x00000001
+#define SA_NOCLDWAIT   0x00000002
+#define SA_SIGINFO     0x00000004
+#define SA_ONSTACK     0x08000000
+#define SA_RESTART     0x10000000
+#define SA_NODEFER     0x40000000
+#define SA_RESETHAND   0x80000000
+
+#define SA_NOMASK      SA_NODEFER
+#define SA_ONESHOT     SA_RESETHAND
+
+
+typedef struct siginfo_t {
+  int si_signo;
+  int si_errno;
+  int si_code;
+  int si_trapno;
+  pid_t si_pid;
+  uid_t si_uid;
+  int si_status;
+  clock_t si_utime;
+  clock_t si_stime;
+  sigval_t si_value;
+  int si_int;
+  void *si_ptr;
+  int si_overrun;
+  int si_timerid;
+  void *si_addr;
+  long si_band;
+  int si_fd;
+  short si_addr_lsb;
+  void *si_lower;
+  void *si_upper;
+  int si_pkey;
+  void *si_call_addr;
+  int si_syscall;
+  unsigned int si_arch;
+} siginfo_t;
+
+
+// typedef void __signalfn_t(int);
+// typedef __signalfn_t *__sighandler_t;
+
+struct sigaction {
+ void (*sa_sigaction) (int, siginfo_t *, void *);
+  //__sighandler_t sa_handler;
+  unsigned long sa_flags;
+  sigset_t sa_mask;
+};
+
+
+#ifdef __i386__
+
+#define EBX 0
+#define ECX 1
+#define EDX 2
+#define ESI 3
+#define EDI 4
+#define EBP 5
+#define EAX 6
+#define DS 7
+#define ES 8
+#define FS 9
+#define GS 10
+#define ORIG_EAX 11
+#define EIP 12
+#define CS  13
+#define EFL 14
+#define UESP 15
+#define SS   16
+#define FRAME_SIZE 17
+
+/* Type for general register.  */
+typedef int greg_t;
+
+/* Number of general registers.  */
+#define NGREG  19
+
+/* Container for all general registers.  */
+typedef greg_t gregset_t[NGREG];
+
+/* Definitions taken from the kernel headers.  */
+struct _libc_fpreg
+{
+  unsigned short int significand[4];
+  unsigned short int exponent;
+};
+
+struct _libc_fpstate
+{
+  unsigned long int cw;
+  unsigned long int sw;
+  unsigned long int tag;
+  unsigned long int ipoff;
+  unsigned long int cssel;
+  unsigned long int dataoff;
+  unsigned long int datasel;
+  struct _libc_fpreg _st[8];
+  unsigned long int status;
+};
+
+/* Structure to describe FPU registers.  */
+typedef struct _libc_fpstate *fpregset_t;
+
+typedef struct
+  {
+    gregset_t gregs;
+    /* Due to Linux's history we have to use a pointer here.  The SysV/i386
+       ABI requires a struct with the values.  */
+    fpregset_t fpregs;
+    unsigned long int oldmask;
+    unsigned long int cr2;
+  } mcontext_t;
+
+/* Userlevel context.  */
+typedef struct ucontext
+  {
+    unsigned long int uc_flags;
+    struct ucontext *uc_link;
+    stack_t uc_stack;
+    mcontext_t uc_mcontext;
+    sigset_t uc_sigmask;
+    struct _libc_fpstate __fpregs_mem;
+  } ucontext_t;
+#endif // !__i386__
+
+int sigaction (int signum, struct sigaction const *act, struct sigaction *oldact);
+int sigemptyset (sigset_t *set);
+
+#endif //! (__GNUC__ && POSIX)
+
+#endif // __MES_SIGNAL_H
+
diff --git a/include/stdarg.h b/include/stdarg.h
new file mode 100644 (file)
index 0000000..211ec36
--- /dev/null
@@ -0,0 +1,51 @@
+/* -*-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
+#undef __MES_STDARG_H
+#include_next <stdarg.h>
+#else // ! (__GNUC__ && POSIX)
+
+#ifndef __MES_SIZE_T
+#define __MES_SIZE_T
+typedef unsigned long size_t;
+#endif
+
+#if __GNUC__
+typedef char* va_list;
+#define va_start(ap, last) (void)((ap) = (char*)(&(last) + 1))
+#else // !__GNUC__
+typedef int va_list;
+#define va_start(ap, last) (void)((ap) = (char*)(&(last) + 1))
+#endif // !__GNUC__
+
+#define va_arg(ap, type) (type)(((int*)((ap) = ((ap) + 4)))[-1])
+#define va_end(ap) (void)((ap) = 0)
+#define va_copy(dest, src) dest = src
+
+int vprintf (char const* format, va_list ap);
+int vsprintf (char *str, char const *format, va_list ap);
+int vsnprintf (char *str, size_t size, char const *format, va_list ap);
+
+#endif // ! (__GNUC__ && POSIX)
+
+#endif // __MES_STDARG_H
diff --git a/include/stdbool.h b/include/stdbool.h
new file mode 100644 (file)
index 0000000..c900fc5
--- /dev/null
@@ -0,0 +1,36 @@
+/* -*-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_STDBOOL_H
+#define __MES_STDBOOL_H 1
+
+#if __GNUC__ && POSIX
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
+#endif
+#undef __MES_STDBOOL_H
+#include_next <stdbool.h>
+
+#else // ! (__GNUC__ && POSIX)
+typedef int bool;
+#define false 0
+#define true 1
+#endif // ! (__GNUC__ && POSIX)
+
+#endif // __MES_STDBOOL_H
diff --git a/include/stddef.h b/include/stddef.h
new file mode 100644 (file)
index 0000000..f4a56be
--- /dev/null
@@ -0,0 +1,31 @@
+/* -*-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_STDDEF_H
+#define __MES_STDDEF_H 1
+
+#if __GNUC__ && POSIX
+#undef __MES_STDDEF_H
+#include_next <stddef.h>
+#else // ! (__GNUC__ && POSIX)
+#include <stdint.h>
+#include <unistd.h>
+#endif // ! (__GNUC__ && POSIX)
+
+#endif // __MES_STDDEF_H
diff --git a/include/stdint.h b/include/stdint.h
new file mode 100644 (file)
index 0000000..28f6b74
--- /dev/null
@@ -0,0 +1,56 @@
+/* -*-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_STDINT_H
+#define __MES_STDINT_H 1
+
+#if __GNUC__ && POSIX
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
+#endif
+#undef __MES_STDINT_H
+#include_next <stdint.h>
+
+#else // ! (__GNUC__ && POSIX)
+
+typedef unsigned char uint8_t;
+typedef char int8_t;
+typedef unsigned short uint16_t;
+typedef short int16_t;
+typedef unsigned uint32_t;
+typedef int int32_t;
+typedef unsigned long long uint64_t;
+typedef long long int64_t;
+
+#ifndef __MES_SIZE_T
+#define __MES_SIZE_T
+typedef unsigned long size_t;
+#endif
+
+// FIXME
+typedef int intmax_t;
+typedef unsigned uintmax_t;
+typedef int* intptr_t;
+typedef unsigned* uintptr_t;
+
+typedef unsigned ptrdiff_t;
+
+#endif // ! (__GNUC__ && POSIX)
+
+#endif // __MES_STDINT_H
diff --git a/include/stdio.h b/include/stdio.h
new file mode 100644 (file)
index 0000000..9dfec03
--- /dev/null
@@ -0,0 +1,124 @@
+/* -*-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;
+
+#ifndef STDIN
+#define STDIN 0
+#endif
+
+#ifndef STDOUT
+#define STDOUT 1
+#endif
+
+#ifndef STDERR
+#define STDERR 2
+#endif
+
+#if __GNUC__ && POSIX
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
+#endif
+#undef __MES_STDIO_H
+#include_next <stdio.h>
+
+int fdputs (char const* s, int fd);
+
+#undef puts
+#define puts(x) fdputs(x, STDOUT)
+#define fputs fdputs
+
+#ifdef putc
+#undef putc
+#endif
+
+int eputc (int c);
+int eputs (char const* s);
+int fdputc (int c, int fd);
+int getchar ();
+
+#define fputc fdputc
+#define ungetc fdungetc
+int fdungetc (int c, int fd);
+
+#else // ! (__GNUC__ && POSIX)
+
+#ifndef EOF
+#define EOF -1
+#endif
+
+#ifndef NULL
+#define NULL 0
+#endif
+
+// 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__
+
+typedef int FILE;
+
+#ifndef __MES_SIZE_T
+#define __MES_SIZE_T
+typedef unsigned long size_t;
+#endif
+
+int eputc (int c);
+int eputs (char const* s);
+int fclose (FILE *stream);
+FILE *fdopen (int fd, char const *mode);
+int fflush (FILE *stream);
+ FILE *fopen (char const *pathname, char const *mode);
+int fprintf (FILE *stream, char const *format, ...);
+int fdputc (int c, int fd);
+int fputc (int c, int fd);
+int fputs (char const* s, int fd);
+size_t fread (void *ptr, size_t size, size_t nmemb, FILE *stream);
+int fseek (FILE *stream, long offset, int whence);
+long ftell (FILE *stream);
+size_t fwrite (void const *ptr, size_t size, size_t nmemb, FILE *stream);
+int getchar ();
+int printf (char const* format, ...);
+int putchar (int c);
+int puts (char const* s);
+int remove (char const *file_name);
+int sscanf (char const *str, const char *format, ...);
+int snprintf(char *str,  size_t size,  char const *format, ...);
+int sprintf (char *str, char const* format, ...);
+int ungetc (int c, int fd);
+
+#endif // ! (__GNUC__ && POSIX)
+
+#endif // __MES_STDIO_H
diff --git a/include/stdlib.h b/include/stdlib.h
new file mode 100644 (file)
index 0000000..cb9f0a8
--- /dev/null
@@ -0,0 +1,57 @@
+/* -*-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
+#undef __MES_STDLIB_H
+#include_next <stdlib.h>
+#else  // !(__GNUC__ && POSIX)
+
+#ifndef __MES_SIZE_T
+#define __MES_SIZE_T
+typedef long size_t;
+#endif
+
+int atoi (char const *s);
+void * calloc (size_t nmemb, size_t size);
+void exit (int);
+void free (void *ptr);
+char* getenv (char const* s);
+void *malloc (size_t);
+void qsort (void *base, size_t nmemb, size_t size, int (*compar)(void const *, void const *));
+void *realloc (void *p, size_t size);
+long strtol (char const *nptr, char **endptr, int base);
+long long strtoll (char const *nptr, char **endptr, int base);
+unsigned long strtoul (char const *nptr, char **endptr, int base);
+unsigned long long strtoull (char const *nptr, char **endptr, int base);
+
+#define EXIT_FAILURE 1
+#define EXIT_SUCCESS 0
+
+#include <endian.h>
+
+#endif // !(__GNUC__ && POSIX)
+
+#endif // __MES_STDLIB_H
+
diff --git a/include/stdnoreturn.h b/include/stdnoreturn.h
new file mode 100644 (file)
index 0000000..e1e94fd
--- /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_STDNORETURN_H
+#define __MES_STDNORETURN_H 1
+
+#if __GNUC__ && POSIX
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
+#endif
+#undef __MES_STDNORETURN_H
+#include_next <stdnoreturn.h>
+
+#else // ! (__GNUC__ && POSIX)
+// whut?
+#endif // ! (__GNUC__ && POSIX)
+
+#endif // __MES_STDNORETURN_H
diff --git a/include/string.h b/include/string.h
new file mode 100644 (file)
index 0000000..9a1e134
--- /dev/null
@@ -0,0 +1,58 @@
+/* -*-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
+#undef __MES_STRING_H
+#include_next <string.h>
+
+#else // ! (__GNUC__ && POSIX)
+
+#ifndef __MES_SIZE_T
+#define __MES_SIZE_T
+typedef unsigned long size_t;
+#endif
+
+#ifndef __MES_SSIZE_T
+#define __MES_SSIZE_T
+typedef long ssize_t;
+#endif
+
+void *memcpy (void *dest, void const *src, size_t n);
+void *memmove (void *dest, void const *src, size_t n);
+void *memset (void *s, int c, size_t n);
+int memcmp (void const *s1, void const *s2, size_t n);
+
+char *strcat (char *dest, char const *src);
+char *strchr (char const *s, int c);
+int strcmp (char const*, char const*);
+char *strcpy (char *dest, char const *src);
+size_t strlen (char const*);
+int strncmp (char const*, char const*, size_t);
+char *strrchr (char const *s, int c);
+char *strstr (char const *haystack, char const *needle);
+
+#endif // ! (__GNUC__ && POSIX)
+
+#endif // __MES_STRING_H
diff --git a/include/strings.h b/include/strings.h
new file mode 100644 (file)
index 0000000..49b8f74
--- /dev/null
@@ -0,0 +1,29 @@
+/* -*-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
+#undef __MES_STRINGS_H
+#include_next <strings.h>
+#endif // (__GNUC__ && POSIX)
+
+#endif // __MES_STRINGS_H
+
diff --git a/include/sys/cdefs.h b/include/sys/cdefs.h
new file mode 100644 (file)
index 0000000..b156e08
--- /dev/null
@@ -0,0 +1,29 @@
+/* -*-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
+#undef __MES_SYS_CDEFS_H
+#include_next <sys/cdefs.h>
+#endif // (__GNUC__ && POSIX)
+
+#endif // __MES_SYS_CDEFS_H
+
diff --git a/include/sys/mman.h b/include/sys/mman.h
new file mode 100644 (file)
index 0000000..6dfc20f
--- /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_SYS_MMAN_H
+#define __MES_SYS_MMAN_H 1
+
+#if __GNUC__ && POSIX
+#undef __MES_SYS_MMAN_H
+#include_next <sys/mman.h>
+#else // !(__GNUC__ && POSIX)
+
+#ifndef __MES_SIZE_T
+#define __MES_SIZE_T
+typedef unsigned long size_t;
+#endif
+
+#define PROT_NONE 0
+#define PROT_READ 1
+#define PROT_WRITE 2
+#define PROT_EXEC 4
+
+int mprotect (void *addr, size_t len, int prot);
+
+#endif // !(__GNUC__ && POSIX)
+
+#endif // __MES_SYS_MMAN_H
+
diff --git a/include/sys/select.h b/include/sys/select.h
new file mode 100644 (file)
index 0000000..a30b89a
--- /dev/null
@@ -0,0 +1,31 @@
+/* -*-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_SELECT_H
+#define __MES_SYS_SELECT_H 1
+
+#if __GNUC__ && POSIX
+#undef __MES_SYS_SELECT_H
+#include_next <sys/select.h>
+#else  //! (__GNUC__ && POSIX)
+typedef int fd_set;
+#endif //! (__GNUC__ && POSIX)
+
+#endif // __MES_SYS_SELECT_H
+
diff --git a/include/sys/stat.h b/include/sys/stat.h
new file mode 100644 (file)
index 0000000..22ae826
--- /dev/null
@@ -0,0 +1,29 @@
+/* -*-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
+#undef __MES_SYS_STAT_H
+#include_next <sys/stat.h>
+#endif // (__GNUC__ && POSIX)
+
+#endif // __MES_SYS_STAT_H
+
diff --git a/include/sys/time.h b/include/sys/time.h
new file mode 100644 (file)
index 0000000..4e5b218
--- /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_SYS_TIME_H
+#define __MES_SYS_TIME_H 1
+
+#if __GNUC__ && POSIX
+#undef __MES_SYS_TIME_H
+#include_next <sys/time.h>
+
+#else // !(__GNUC__ && POSIX)
+
+struct timeval {
+  long tv_sec;
+  long tv_usec;
+};
+
+struct timezone {
+  int tz_minuteswest;
+  int tz_dsttime;
+};
+
+int gettimeofday (struct timeval *tv, struct timezone *tz);
+
+#endif // !(__GNUC__ && POSIX)
+
+#endif // __MES_SYS_TIME_H
+
diff --git a/include/sys/timeb.h b/include/sys/timeb.h
new file mode 100644 (file)
index 0000000..a2bacd3
--- /dev/null
@@ -0,0 +1,29 @@
+/* -*-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
+#undef __MES_SYS_TIMEB_H
+#include_next <sys/timeb.h>
+#endif // (__GNUC__ && POSIX)
+
+#endif // __MES_SYS_TIMEB_H
+
diff --git a/include/sys/types.h b/include/sys/types.h
new file mode 100644 (file)
index 0000000..4e00b73
--- /dev/null
@@ -0,0 +1,31 @@
+/* -*-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
+#undef __MES_SYS_TYPES_H
+#include_next <sys/types.h>
+#else // ! (__GNUC__ && POSIX)
+#include <endian.h>
+#endif // ! (__GNUC__ && POSIX)
+
+#endif // __MES_SYS_TYPES_H
+
diff --git a/include/sys/ucontext.h b/include/sys/ucontext.h
new file mode 100644 (file)
index 0000000..4f68f36
--- /dev/null
@@ -0,0 +1,29 @@
+/* -*-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
+#undef __MES_SYS_UCONTEXT_H
+#include_next <sys/ucontext.h>
+#endif // (__GNUC__ && POSIX)
+
+#endif // __MES_SYS_UCONTEXT_H
+
diff --git a/include/sys/wait.h b/include/sys/wait.h
new file mode 100644 (file)
index 0000000..6d5eb52
--- /dev/null
@@ -0,0 +1,29 @@
+/* -*-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_WAIT_H
+#define __MES_SYS_WAIT_H 1
+
+#if __GNUC__ && POSIX
+#undef __MES_SYS_WAIT_H
+#include_next <sys/wait.h>
+#endif // (__GNUC__ && POSIX)
+
+#endif // __MES_SYS_WAIT_H
+
diff --git a/include/time.h b/include/time.h
new file mode 100644 (file)
index 0000000..6c2fc12
--- /dev/null
@@ -0,0 +1,47 @@
+/* -*-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
+#undef __MES_TIME_H
+#include_next <time.h>
+#else // ! (__GNUC__ && POSIX)
+typedef int time_t;
+
+struct tm {
+  int tm_sec;    /* Seconds (0-60) */
+  int tm_min;    /* Minutes (0-59) */
+  int tm_hour;   /* Hours (0-23) */
+  int tm_mday;   /* Day of the month (1-31) */
+  int tm_mon;    /* Month (0-11) */
+  int tm_year;   /* Year - 1900 */
+  int tm_wday;   /* Day of the week (0-6, Sunday = 0) */
+  int tm_yday;   /* Day in the year (0-365, 1 Jan = 0) */
+  int tm_isdst;  /* Daylight saving time */
+};
+
+struct tm *localtime (time_t const *timep);
+time_t time (time_t *tloc);
+
+#endif // ! (__GNUC__ && POSIX)
+
+#endif // __MES_TIME_H
+
diff --git a/include/unistd.h b/include/unistd.h
new file mode 100644 (file)
index 0000000..89f7ad7
--- /dev/null
@@ -0,0 +1,57 @@
+/* -*-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
+#undef __MES_UNISTD_H
+#include_next <unistd.h>
+
+#else // ! (__GNUC__ && POSIX)
+
+#ifndef __MES_OFF_T
+#define __MES_OFF_T
+typedef unsigned long off_t;
+#endif
+
+#ifndef __MES_SIZE_T
+#define __MES_SIZE_T
+typedef unsigned long size_t;
+#endif
+
+#ifndef __MES_SSIZE_T
+#define __MES_SSIZE_T
+typedef long ssize_t;
+#endif
+
+int access (char const *s, int mode);
+int close (int fd);
+int execvp (char const *file, char *const argv[]);
+char *getcwd (char *buf, size_t size);
+off_t lseek (int fd, off_t offset, int whence);
+int read (int fd, void* buf, size_t n);
+int unlink (char const *file_name);
+int write (int fd, char const* s, int n);
+#endif // ! (__GNUC__ && POSIX)
+
+#endif // __MES_UNISTD_H
diff --git a/lib/crt1.c b/lib/crt1.c
new file mode 100644 (file)
index 0000000..24cdebb
--- /dev/null
@@ -0,0 +1,92 @@
+/* -*-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/>.
+ */
+
+char **g_environment = 0;
+int main (int,char*[]);
+
+#if __GNUC__ && !POSIX
+
+void
+_start ()
+{
+  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 ""
+       );
+  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"
+
+       "mov     %%eax,%%ebx\n\t"
+       "mov     $1,%%eax\n\t"
+       "int     $0x80\n\t"
+       "hlt      \n\t"
+       :
+       );
+}
+
+#elif __MESC__
+
+int
+_start ()
+{
+  asm ("mov____%ebp,%eax");
+  asm ("add____$i8,%eax !4");
+
+  asm ("movzbl_(%eax),%eax");
+  asm ("add____$i8,%eax !3");
+
+  asm ("shl____$i8,%eax !0x02");
+  asm ("add____%ebp,%eax");
+  asm ("mov____%eax,0x32 &g_environment");
+
+  asm ("mov____%ebp,%eax");
+  asm ("add____$i8,%eax !8");
+  asm ("push___%eax");
+
+  asm ("mov____%ebp,%eax");
+  asm ("add____$i8,%eax !4");
+  asm ("movzbl_(%eax),%eax");
+  asm ("push___%eax");
+
+  main ();
+
+  asm ("mov____%eax,%ebx");
+  asm ("mov____$i32,%eax %1");
+  asm ("int____$0x80");
+  asm ("hlt");
+}
+
+#endif
diff --git a/lib/getopt.c b/lib/getopt.c
new file mode 100644 (file)
index 0000000..91555ab
--- /dev/null
@@ -0,0 +1,376 @@
+/* Getopt for GNU.
+   Copyright (C) 1987, 88, 89, 90, 91, 1992 Free Software Foundation, Inc.
+   Copyright (C) 2017 Jan Nieuwenhuizen <janneke@gnu.org>
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
+\f
+
+#include <stdio.h>
+#include <string.h>
+#include <getopt.h>
+
+#if __MESC__
+#define static
+#endif
+
+/* For communication from `getopt' to the caller.
+   When `getopt' finds an option that takes an argument,
+   the argument value is returned here. */
+
+char *optarg = 0;
+
+/* Index in ARGV of the next element to be scanned.
+   This is used for communication to and from the caller
+   and for communication between successive calls to `getopt'.
+
+   On entry to `getopt', zero means this is the first call; initialize.
+
+   When `getopt' returns EOF, this is the index of the first of the
+   non-option elements that the caller should itself scan.
+
+   Otherwise, `optind' communicates from one call to the next
+   how much of ARGV has been scanned so far.  */
+
+int optind = 0;
+
+/* The next char to be scanned in the option-element
+   in which the last option character we returned was found.
+   This allows us to pick up the scan where we left off.
+
+   If this is zero, or a null string, it means resume the scan
+   by advancing to the next ARGV-element.  */
+
+static char *nextchar;
+
+/* Callers store zero here to inhibit the error message
+   for unrecognized options.  */
+
+int opterr = 1;
+
+\f
+/* Handle permutation of arguments.  */
+
+/* Describe the part of ARGV that contains non-options that have
+   been skipped.  `first_nonopt' is the index in ARGV of the first of them;
+   `last_nonopt' is the index after the last of them.  */
+
+static int first_nonopt;
+static int last_nonopt;
+
+\f
+/* Scan elements of ARGV (whose length is ARGC) for option characters
+   given in OPTSTRING.
+
+   If an element of ARGV starts with '-', and is not exactly "-" or "--",
+   then it is an option element.  The characters of this element
+   (aside from the initial '-') are option characters.  If `getopt'
+   is called repeatedly, it returns successively each of the option characters
+   from each of the option elements.
+
+   If `getopt' finds another option character, it returns that character,
+   updating `optind' and `nextchar' so that the next call to `getopt' can
+   resume the scan with the following option character or ARGV-element.
+
+   If there are no more option characters, `getopt' returns `EOF'.
+   Then `optind' is the index in ARGV of the first ARGV-element
+   that is not an option.  (The ARGV-elements have been permuted
+   so that those that are not options now come last.)
+
+   OPTSTRING is a string containing the legitimate option characters.
+   If an option character is seen that is not listed in OPTSTRING,
+   return '?' after printing an error message.  If you set `opterr' to
+   zero, the error message is suppressed but we still return '?'.
+
+   If a char in OPTSTRING is followed by a colon, that means it wants an arg,
+   so the following text in the same ARGV-element, or the text of the following
+   ARGV-element, is returned in `optarg'.  Two colons mean an option that
+   wants an optional arg; if there is text in the current ARGV-element,
+   it is returned in `optarg', otherwise `optarg' is set to zero.
+
+   If OPTSTRING starts with `-' or `+', it requests different methods of
+   handling the non-option ARGV-elements.
+
+   Long-named options begin with `--' instead of `-'.
+   Their names may be abbreviated as long as the abbreviation is unique
+   or is an exact match for some defined option.  If they have an
+   argument, it follows the option name in the same ARGV-element, separated
+   from the option name by a `=', or else the in next ARGV-element.
+   When `getopt' finds a long-named option, it returns 0 if that option's
+   `flag' field is nonzero, the value of the option's `val' field
+   if the `flag' field is zero.
+
+   The elements of ARGV aren't really const, because we permute them.
+   But we pretend they're const in the prototype to be compatible
+   with other systems.
+
+   LONGOPTS is a vector of `struct option' terminated by an
+   element containing a name which is zero.
+
+   LONGIND returns the index in LONGOPT of the long-named option found.
+   It is only valid when a long-named option has been found by the most
+   recent call.
+
+   If LONG_ONLY is nonzero, '-' as well as '--' can introduce
+   long-named options.  */
+
+int
+_getopt_internal (int argc, char *const
+                  *argv, char const *optstring, struct option const *longopts, int *longind, int long_only)
+{
+  int option_index;
+
+  optarg = 0;
+
+  /* Initialize the internal data when the first call is made.
+     Start processing options with ARGV-element 1 (since ARGV-element 0
+     is the program name); the sequence of previously skipped
+     non-option ARGV-elements is empty.  */
+
+  if (optind == 0)
+    {
+      first_nonopt = last_nonopt = optind = 1;
+
+      nextchar = NULL;
+    }
+
+  if (nextchar == NULL || *nextchar == '\0')
+    {
+      /* If we have done all the ARGV-elements, stop the scan
+        and back over any non-options that we skipped and permuted.  */
+
+      if (optind == argc)
+       {
+         /* Set the next-arg-index to point at the non-options
+            that we previously skipped, so the caller will digest them.  */
+         if (first_nonopt != last_nonopt)
+           optind = first_nonopt;
+         return EOF;
+       }
+
+      /* If we have come to a non-option and did not permute it,
+        either stop the scan or describe it to the caller and pass it by.  */
+
+      if ((argv[optind][0] != '-' || argv[optind][1] == '\0'))
+        return EOF;
+
+      /* We have found another option-ARGV-element.
+        Start decoding its characters.  */
+
+      nextchar = (argv[optind] + 1
+                 + (longopts != NULL && argv[optind][1] == '-'));
+    }
+
+  if (longopts != NULL
+      && ((argv[optind][0] == '-'
+          && (argv[optind][1] == '-' || long_only))))
+    {
+      const struct option *p;
+      char *s = nextchar;
+      int exact = 0;
+      int ambig = 0;
+      const struct option *pfound = NULL;
+      int indfound;
+
+      while (*s && *s != '=')
+       s++;
+
+      /* Test all options for either exact match or abbreviated matches.  */
+      for (p = longopts, option_index = 0; p->name;
+          p++, option_index++)
+       if (!strncmp (p->name, nextchar, s - nextchar))
+         {
+           if (s - nextchar == strlen (p->name))
+             {
+               /* Exact match found.  */
+               pfound = p;
+               indfound = option_index;
+               exact = 1;
+               break;
+             }
+           else if (pfound == NULL)
+             {
+               /* First nonexact match found.  */
+               pfound = p;
+               indfound = option_index;
+             }
+           else
+             /* Second nonexact match found.  */
+             ambig = 1;
+         }
+
+      if (ambig && !exact)
+       {
+         if (opterr)
+           fprintf (stderr, "%s: option `%s' is ambiguous\n",
+                    argv[0], argv[optind]);
+         nextchar += strlen (nextchar);
+         optind++;
+         return '?';
+       }
+
+      if (pfound != NULL)
+       {
+         option_index = indfound;
+         optind++;
+         if (*s)
+           {
+             /* Don't test has_arg with >, because some C compilers don't
+                allow it to be used on enums. */
+             if (pfound->has_arg)
+               optarg = s + 1;
+             else
+               {
+                 if (opterr)
+                   {
+                     if (argv[optind - 1][1] == '-')
+                       /* --option */
+                       fprintf (stderr,
+                                "%s: option `--%s' doesn't allow an argument\n",
+                                argv[0], pfound->name);
+                     else
+                       /* +option or -option */
+                       fprintf (stderr,
+                            "%s: option `%c%s' doesn't allow an argument\n",
+                            argv[0], argv[optind - 1][0], pfound->name);
+                   }
+                 nextchar += strlen (nextchar);
+                 return '?';
+               }
+           }
+         else if (pfound->has_arg == 1)
+           {
+             if (optind < argc)
+               optarg = argv[optind++];
+             else
+               {
+                 if (opterr)
+                   fprintf (stderr, "%s: option `%s' requires an argument\n",
+                            argv[0], argv[optind - 1]);
+                 nextchar += strlen (nextchar);
+                 return '?';
+               }
+           }
+         nextchar += strlen (nextchar);
+         if (longind != NULL)
+           *longind = option_index;
+         if (pfound->flag)
+           {
+             *(pfound->flag) = pfound->val;
+             return 0;
+           }
+         return pfound->val;
+       }
+      /* Can't find it as a long option.  If this is not getopt_long_only,
+        or the option starts with '--' or is not a valid short
+        option, then it's an error.
+        Otherwise interpret it as a short option. */
+      if (!long_only || argv[optind][1] == '-'
+         || strchr (optstring, *nextchar) == NULL)
+       {
+         if (opterr)
+           {
+             if (argv[optind][1] == '-')
+               /* --option */
+               fprintf (stderr, "%s: unrecognized option `--%s'\n",
+                        argv[0], nextchar);
+             else
+               /* +option or -option */
+               fprintf (stderr, "%s: unrecognized option `%c%s'\n",
+                        argv[0], argv[optind][0], nextchar);
+           }
+         nextchar += strlen (nextchar);
+         optind++;
+         return '?';
+       }
+    }
+
+  /* Look at and handle the next option-character.  */
+
+  {
+    char c = *nextchar++;
+    char *temp = strchr (optstring, c);
+
+    /* Increment `optind' when we start to process its last character.  */
+    if (*nextchar == '\0')
+      optind++;
+
+    if (temp == NULL || c == ':')
+      {
+       if (opterr)
+         {
+           if (c < 040 || c >= 0177)
+             fprintf (stderr, "%s: unrecognized option, character code 0%o\n",
+                      argv[0], c);
+           else
+             fprintf (stderr, "%s: unrecognized option `-%c'\n", argv[0], c);
+         }
+       return '?';
+      }
+    if (temp[1] == ':')
+      {
+       if (temp[2] == ':')
+         {
+           /* This is an option that accepts an argument optionally.  */
+           if (*nextchar != '\0')
+             {
+               optarg = nextchar;
+               optind++;
+             }
+           else
+             optarg = 0;
+           nextchar = NULL;
+         }
+       else
+         {
+           /* This is an option that requires an argument.  */
+           if (*nextchar != 0)
+             {
+               optarg = nextchar;
+               /* If we end this ARGV-element by taking the rest as an arg,
+                  we must advance to the next element now.  */
+               optind++;
+             }
+           else if (optind == argc)
+             {
+               if (opterr)
+                 fprintf (stderr, "%s: option `-%c' requires an argument\n",
+                          argv[0], c);
+               c = '?';
+             }
+           else
+             /* We already incremented `optind' once;
+                increment it again when taking next ARGV-elt as argument.  */
+             optarg = argv[optind++];
+           nextchar = NULL;
+         }
+      }
+    return c;
+  }
+}
+
+int
+getopt (int argc, char *const *argv, char const *optstring)
+{
+  return _getopt_internal (argc, argv, optstring,
+                          (const struct option *) 0,
+                          (int *) 0,
+                          0);
+}
+
+int
+getopt_long (int argc, char *const *argv, const char *options, struct option const *long_options, int *opt_index)
+{
+  return _getopt_internal (argc, argv, options, long_options, opt_index, 0);
+}
diff --git a/lib/libc-gcc+tcc.c b/lib/libc-gcc+tcc.c
new file mode 100644 (file)
index 0000000..18ac36d
--- /dev/null
@@ -0,0 +1,130 @@
+/* -*-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/>.
+ */
+
+#include <libc-gcc.c>
+#include <libc-mes+tcc.c>
+#include <getopt.c>
+
+int errno;
+
+#include <unistd.h>
+#include <stdarg.h>
+#include <signal.h>
+#include <sys/mman.h>
+#include <sys/time.h>
+
+#define SYS_exit   "0x01"
+#define SYS_read   "0x03"
+#define SYS_write  "0x04"
+#define SYS_open   "0x05"
+#define SYS_close  "0x06"
+#define SYS_unlink "0x0a"
+#define SYS_lseek  "0x13"
+#define SYS_access "0x21"
+#define SYS_brk    "0x2d"
+#define SYS_fsync  "0x76"
+#define SYS_getcwd "0xb7"
+
+int
+close (int fd)
+{
+#if !__TINYC__
+  int r;
+  asm (
+       "mov    %0,%%ebx\n\t"
+       "mov    $"SYS_close",%%eax\n\t"
+       "int    $0x80"
+       : "=r" (r)
+       : "" (fd)
+       );
+  return r;
+#endif
+}
+
+int
+unlink (char const *file_name)
+{
+#if !__TINYC__
+  int r;
+  asm (
+       "mov    %0,%%ebx\n\t"
+       "mov    $"SYS_unlink",%%eax\n\t"
+       "int    $0x80"
+       : "=r" (r)
+       : "" (file_name)
+       );
+  return r;
+#endif
+}
+
+off_t
+lseek (int fd, off_t offset, int whence)
+{
+#if !__TINYC__
+  int r;
+  asm (
+       "mov    %1,%%ebx\n\t"
+       "mov    %2,%%ecx\n\t"
+       "mov    %3,%%edx\n\t"
+
+       "mov    $"SYS_lseek",%%eax\n\t"
+       "int  $0x80\n\t"
+
+       "mov    %%eax,%0\n\t"
+       : "=r" (r)
+       : "" (fd), "" (offset), "" (whence)
+       : "eax", "ebx", "ecx", "edx"
+       );
+  return r;
+#endif
+}
+
+char *
+getcwd (char *buf, size_t size)
+{
+#if !__TINYC__
+  int r;
+  asm (
+       "mov    %1,%%ebx\n\t"
+       "mov    %2,%%ecx\n\t"
+
+       "mov    $"SYS_getcwd",%%eax\n\t"
+       "int  $0x80\n\t"
+
+       "mov    %%eax,%0\n\t"
+       : "=r" (r)
+       : "" (buf), "" (size)
+       : "eax", "ebx", "ecx"
+       );
+  return r;
+#endif
+}
+
+int
+__udivdi3 (int a, int b)
+{
+  return a / b;
+}
+
+int
+__umoddi3 (int a, int b)
+{
+  return a % b;
+}
diff --git a/lib/libc-gcc.c b/lib/libc-gcc.c
new file mode 100644 (file)
index 0000000..303d4e3
--- /dev/null
@@ -0,0 +1,593 @@
+/* -*-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/>.
+ */
+
+#include <stdio.h>
+#include <mlibc.h>
+
+#if __GNUC__
+#include <stdlib.h>
+#endif
+
+#if (__GNUC__ || __TINYC__) && !POSIX
+
+void
+exit (int code)
+{
+#if !__TINYC__
+  asm (
+       "mov    %0,%%ebx\n\t"
+       "mov    $1,%%eax\n\t"
+       "int    $0x80\n\t"
+       : // no outputs "=" (r)
+       : "" (code)
+       );
+#else // __TINYC__
+  asm (
+       "mov    %0,%%ebx\n\t"
+       "mov    $1,%%eax\n\t"
+       "int    $128\n\t"
+       : // no outputs "=" (r)
+       : "Ir" (code)
+       );
+#endif // __TINYC__
+  // not reached
+  exit (0);
+}
+
+int
+read (int fd, void* buf, size_t n)
+{
+#if !__TINYC__
+  int r;
+  //syscall (SYS_write, fd, s, n));
+  asm (
+       "mov    %1,%%ebx\n\t"
+       "mov    %2,%%ecx\n\t"
+       "mov    %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;
+#endif
+}
+
+int
+write (int fd, char const* s, int n)
+{
+  int r;
+#if __GNUC__
+  asm (
+       "mov    %1,%%ebx\n\t"
+       "mov    %2,%%ecx\n\t"
+       "mov    %3,%%edx\n\t"
+
+       "mov    $0x04,%%eax\n\t"
+       "int    $0x80\n\t"
+       "mov    %%eax,%0\n\t"
+       : "=r" (r)
+       : "" (fd), "" (s), "" (n)
+       : "eax", "ebx", "ecx", "edx"
+       );
+
+  //syscall (SYS_write, fd, s, n));
+#elif __TINYC__
+  asm (
+       "mov    %1,%%ebx\n\t"
+       "mov    %2,%%ecx\n\t"
+       "mov    %3,%%edx\n\t"
+
+       "mov    $4, %%eax\n\t"
+       "int    $128\n\t"
+       "mov    %%eax,%0\n\t"
+       : "=r" (r)
+       : "Ir" (fd), "Ir" (s), "Ir" (n)
+       : "eax", "ebx", "ecx"//, "edx"
+       );
+#endif
+  return r;
+}
+
+int
+open (char const *s, int flags, ...)
+{
+#if !__TINYC__
+  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;
+#endif
+}
+
+int
+access (char const *s, int mode)
+{
+#if !__TINYC__
+  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;
+#endif
+}
+
+void *
+brk (void *p)
+{
+#if !__TINYC__
+  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;
+#endif
+}
+
+int
+fsync (int fd)
+{
+#if !__TINYC__
+  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;
+#endif
+}
+
+int
+fputc (int c, int fd)
+{
+  write (fd, (char*)&c, 1);
+  return 0;
+}
+
+void
+free (void *ptr)
+{
+}
+
+char *g_brk = 0;
+
+void *
+malloc (size_t size)
+{
+  if (!g_brk)
+    g_brk = brk (0);
+  if ((int)brk (g_brk + size) == -1)
+    return 0;
+  char *p = g_brk;
+  g_brk += size;
+  return p;
+}
+
+void *
+memcpy (void *dest, void const *src, size_t n)
+{
+  char* p = dest;
+  char const* q = src;
+  while (n--) *p++ = *q++;
+  return dest;
+}
+
+int
+putchar (int c)
+{
+  write (STDOUT, (char*)&c, 1);
+  return 0;
+}
+
+void *
+realloc (void *ptr, size_t size)
+{
+  void *new = malloc (size);
+  if (ptr && new)
+    {
+      memcpy (new, ptr, size);
+      free (ptr);
+    }
+  return new;
+}
+
+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
+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
+isxdigit (int c)
+{
+  return isdigit (c) || (c>='a') && (c<='f');
+}
+
+int
+isnumber (int c, int base)
+{
+  if (base == 2)
+    return (c>='0') && (c<='1');
+  if (base == 8)
+    return (c>='0') && (c<='7');
+  if (base == 10)
+    return isdigit (c);
+  if (base == 16)
+    return isxdigit (c);
+}
+
+int
+_atoi (char const **p, int base)
+{
+  char const *s = *p;
+  int i = 0;
+  int sign = 1;
+  if (!base) base = 10;
+  if (*s && *s == '-')
+    {
+      sign = -1;
+      s++;
+    }
+  while (isnumber (*s, base))
+    {
+      i *= base;
+      int m = *s > '9' ? 'a' - 10 : '0';
+      i += *s - m;
+      s++;
+    }
+  *p = s;
+  return i * sign;
+}
+
+int
+atoi (char const *s)
+{
+  char const *p = s;
+  return _atoi (&p, 0);
+}
+
+// FIXME: copied from libc-mes.c now
+#include <stdarg.h>
+
+int
+vprintf (char const* format, va_list ap)
+{
+  char const *p = format;
+  while (*p)
+    if (*p != '%')
+      putchar (*p++);
+    else
+      {
+        p++;
+        char c = *p;
+        switch (c)
+          {
+          case '%': {putchar (*p); break;}
+          case 'c': {char c; c = va_arg (ap, char); putchar (c); break;}
+          case 'd': {int d; d = va_arg (ap, int); puts (itoa (d)); break;}
+          case 's': {char *s; s = va_arg (ap, char *); puts (s); break;}
+          default: putchar (*p);
+          }
+        p++;
+      }
+  va_end (ap);
+  return 0;
+}
+
+int
+printf (char const* format, ...)
+{
+  va_list ap;
+  va_start (ap, format);
+  int r = vprintf (format, ap);
+  va_end (ap);
+  return r;
+}
+
+int
+vsprintf (char *str, char const* format, va_list ap)
+{
+  char const *p = format;
+  while (*p)
+    if (*p != '%')
+      *str++ = *p++;
+    else
+      {
+        p++;
+        char c = *p;
+        switch (c)
+          {
+          case '%': {*str++ = *p; break;}
+          case 'c': {char c; c = va_arg (ap, char); *str++ = c; break;}
+          case 'd': {int d; d = va_arg (ap, int); char const *s = itoa (d); while (*s) *str++ = *s++; break;}
+          case 's': {char *s; s = va_arg (ap, char *); while (*s) *str++ = *s++; break;}
+          default: *str++ = *p;
+          }
+        p++;
+      }
+
+  *str = 0;
+  return strlen (str);
+}
+
+int
+sprintf (char *str, char const* format, ...)
+{
+  va_list ap;
+  va_start (ap, format);
+  int r = vsprintf (str, format, ap);
+  va_end (ap);
+  return r;
+}
+#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;
+}
+
+int
+eputc (int c)
+{
+  return fdputc (c, STDERR);
+}
+
+int
+eputs (char const* s)
+{
+  return fdputs (s, STDERR);
+}
+
+int
+fdputc (int c, int fd)
+{
+  write (fd, (char*)&c, 1);
+  return 0;
+}
+
+#if POSIX
+
+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
diff --git a/lib/libc-mes+tcc.c b/lib/libc-mes+tcc.c
new file mode 100644 (file)
index 0000000..9af01d9
--- /dev/null
@@ -0,0 +1,385 @@
+/* -*-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/>.
+ */
+
+#include <setjmp.h>
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+#include <signal.h>
+#include <sys/mman.h>
+#include <sys/time.h>
+#include <unistd.h>
+
+#if !__GNUC__ && !__TINYC__
+#include <libc-mes.c>
+#include <getopt.c>
+
+int errno;
+
+int
+close (int fd)
+{
+  asm ("mov____0x8(%ebp),%ebx !8");
+
+  asm ("mov____$i32,%eax SYS_close");
+  asm ("int____$0x80");
+}
+
+int
+unlink (char const *file_name)
+{
+  asm ("mov____0x8(%ebp),%ebx !8");
+
+  asm ("mov____$i32,%eax SYS_unlink");
+  asm ("int____$0x80");
+}
+
+off_t
+lseek (int fd, off_t offset, int whence)
+{
+  asm ("mov____0x8(%ebp),%ebx !8");
+  asm ("mov____0x8(%ebp),%ecx !12");
+  asm ("mov____0x8(%ebp),%edx !16");
+
+  asm ("mov____$i32,%eax SYS_lseek");
+  asm ("int____$0x80");
+}
+
+char *
+getcwd (char *buf, size_t size)
+{
+  asm ("mov____0x8(%ebp),%ebx !8");
+  asm ("mov____0x8(%ebp),%ecx !12");
+
+  asm ("mov____$i32,%eax SYS_getcwd");
+  asm ("int____$0x80");
+}
+#endif // !__GNUC__
+
+
+int
+dlclose (void *handle)
+{
+  return 0;
+}
+
+void *
+dlopen (char const *filename, int flags)
+{
+  return 0;
+}
+
+int
+execvp (char const *file, char *const argv[])
+{
+  eputs ("execvp stub\n");
+  return 0;
+}
+
+int
+fclose (FILE *stream)
+{
+  int fd = (int)stream;
+  return close (fd);
+}
+
+FILE *
+fdopen (int fd, char const *mode)
+{
+  return (FILE*)fd;
+}
+
+int
+fflush (FILE *stream)
+{
+  eputs ("fflush stub\n");
+  return 0;
+}
+
+FILE *
+fopen (char const *pathname, char const *mode)
+{
+  eputs ("fopen stub\n");
+  return 0;
+}
+
+int
+fprintf (FILE *stream, char const *format, ...)
+{
+  va_list ap;
+  va_start (ap, format);
+  int r = vfprintf (stream, format, ap);
+  va_end (ap);
+  return r;
+}
+
+size_t
+fread (void *ptr, size_t size, size_t nmemb, FILE *stream)
+{
+  eputs ("fread stub\n");
+  return 0;
+}
+
+int
+fseek (FILE *stream, long offset, int whence)
+{
+  eputs ("fseek stub\n");
+  return 0;
+}
+
+long
+ftell (FILE *stream)
+{
+  eputs ("ftell stub\n");
+  return 0;
+}
+
+size_t
+fwrite (void const *ptr, size_t size, size_t nmemb, FILE *stream)
+{
+  int fd = (int)stream;
+  return write (fd, ptr, size * nmemb);
+}
+
+int
+gettimeofday (struct timeval *tv, struct timezone *tz)
+{
+  return 0;
+}
+
+struct tm *
+localtime (time_t const *timep)
+{
+  eputs ("localtime stub\n");
+  return 0;
+}
+
+void
+longjmp (jmp_buf env, int val)
+{
+  eputs ("longjmp stub\n");
+}
+
+void *
+memmove (void *dest, void const *src, size_t n)
+{
+  if (dest < src)
+    return memcpy (dest, src, n);
+  char *p = dest + n;
+  char const *q = src +n;
+  while (n--)
+    *--p = *--q;
+  return dest;
+}
+
+void *
+memset (void *s, int c, size_t n)
+{
+  char *p = s;
+  while (n--) *p++ = c;
+  return s;
+}
+
+int
+memcmp (void const *s1, void const *s2, size_t n)
+{
+  char *a = s1;
+  char *b = s2;
+  while (*a == *b && --n) {a++;b++;}
+  return *a - *b;
+}
+
+int
+mprotect (void *addr, size_t len, int prot)
+{
+  return 0;
+}
+
+void
+qsort (void *base, size_t nmemb, size_t size, int (*compar)(void const *, void const *))
+{
+  eputs ("qsort stub\n");
+}
+
+int
+remove (char const *file_name)
+{
+  eputs ("remove stub\n");
+  return 0;
+}
+
+int
+setjmp (jmp_buf env)
+{
+  eputs ("setjmp stub\n");
+  return 0;
+}
+
+int
+sigaction (int signum, struct sigaction const *act, struct sigaction *oldact)
+{
+  return 0;
+}
+
+int
+sigemptyset (sigset_t *set)
+{
+  return 0;
+}
+
+int
+snprintf(char *str,  size_t size,  char const *format, ...)
+{
+  va_list ap;
+  va_start (ap, format);
+  int r = vsprintf (str, format, ap);
+  va_end (ap);
+  return r;
+}
+
+int
+sscanf (char const *str, const char *format, ...)
+{
+  eputs ("sscanf stub\n");
+  return 0;
+}
+
+char *
+strcat (char *dest, char const *src)
+{
+  char *p = strchr (dest, '\0');
+  while (*src++) *p++ = *src++;
+  *p = 0;
+  return dest;
+}
+
+char *
+strchr (char const *s, int c)
+{
+  char const *p = s;
+  while (*p || !c)
+    {
+      if (c == *p) return p;
+      *p++;
+    }
+  return 0;
+}
+
+char *
+strrchr (char const *s, int c)
+{
+  int n = strlen (s);
+  if (!n) return 0;
+  char const *p = s + n - 1;
+  while (*p || !c)
+    {
+      if (c == *p) return p;
+      *p--;
+    }
+  return 0;
+}
+
+char *
+strstr (char const *haystack, char const *needle)
+{
+  eputs ("strstr stub\n");
+  return 0;
+}
+
+long
+strtol (char const *nptr, char **endptr, int base)
+{
+  eputs ("strtol stub\n");
+  if (!strncmp (nptr, "0x", 2))
+    {
+      char const *p = nptr + 2;
+      return _atoi (&p, 16);
+    }
+  return _atoi (&nptr, base);
+}
+
+long long int
+strtoll (char const *nptr, char **endptr, int base)
+{
+  eputs ("strtoll stub\n");
+  return 0;
+}
+
+unsigned long
+strtoul (char const *nptr, char **endptr, int base)
+{
+  eputs ("strtoul stub\n");
+  return 0;
+}
+
+unsigned long long
+strtoull (char const *p, char **end, int base)
+{
+  *end = p;
+  return _atoi (end, base);
+}
+
+time_t time (time_t *tloc)
+{
+  return 0;
+}
+
+int
+vsnprintf (char *str, size_t size, char const *format, va_list ap)
+{
+  return vsprintf (str, format, ap);
+}
+
+void *
+calloc (size_t nmemb, size_t size)
+{
+  size_t count = nmemb * size;
+  void *p = malloc (count);
+  memset (p, 0, count);
+  return p;
+}
+
+int
+vfprintf (FILE* f, char const* format, va_list ap)
+{
+  int fd = (int)f;
+  char const *p = format;
+  while (*p)
+    if (*p != '%')
+      putchar (*p++);
+    else
+      {
+        p++;
+        char c = *p;
+        switch (c)
+          {
+          case '%': {fputc (*p, fd); break;}
+          case 'c': {char c; c = va_arg (ap, char); fputc (c, fd); break;}
+          case 'd': {int d; d = va_arg (ap, int); fputs (itoa (d), fd); break;}
+          case 's': {char *s; s = va_arg (ap, char *); fputs (s, fd); break;}
+          default: {fputc (*p, fd); break;}
+          }
+        p++;
+      }
+  va_end (ap);
+  return 0;
+}
diff --git a/lib/libc-mes.c b/lib/libc-mes.c
new file mode 100644 (file)
index 0000000..3fbd68b
--- /dev/null
@@ -0,0 +1,448 @@
+/* -*-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/>.
+ */
+
+#include <stdarg.h>
+#include <stdlib.h>
+
+char **g_environment = 0; // FIXME: todo extern
+int g_stdin = 0;
+
+void _env ();
+
+void
+exit ()
+{
+  asm ("mov____0x8(%ebp),%ebx !8");               // mov    0x8(%ebp),%ebx
+
+  asm ("mov____$i32,%eax SYS_exit");              // mov    $0x1,%eax
+  asm ("int____$0x80");                           // int    $0x80
+}
+
+void
+read ()
+{
+  asm ("mov____0x8(%ebp),%ebx !8");               // mov    0x8(%ebp),%ebx
+  asm ("mov____0x8(%ebp),%ecx !12");              // mov    0x8(%ebp),%ecx
+  asm ("mov____0x8(%ebp),%edx !16");              // mov    0x8(%ebp),%edx
+
+  asm ("mov____$i32,%eax SYS_read");              // mov    $0x3,%eax
+  asm ("int____$0x80");                           // int    $0x80
+}
+
+void
+write ()
+{
+  asm ("mov____0x8(%ebp),%ebx !8");               // mov    0x8(%ebp),%ebx
+  asm ("mov____0x8(%ebp),%ecx !12");              // mov    0x8(%ebp),%ecx
+  asm ("mov____0x8(%ebp),%edx !16");              // mov    0x8(%ebp),%edx
+
+  asm ("mov____$i32,%eax SYS_write");             // mov    $0x4,%eax
+  asm ("int____$0x80");                           // int    $0x80
+}
+
+void
+open ()
+{
+  asm ("mov____0x8(%ebp),%ebx !8");               // mov    0x8(%ebp),%ebx
+  asm ("mov____0x8(%ebp),%ecx !12");              // mov    0x8(%ebp),%ecx
+  asm ("mov____0x8(%ebp),%edx !16");              // mov    0x8(%ebp),%edx
+
+  asm ("mov____$i32,%eax SYS_open");              // mov    $0x5,%eax
+  asm ("int____$0x80");                           // int    $0x80
+}
+
+void
+access ()
+{
+  asm ("mov____0x8(%ebp),%ebx !8");               // mov    0x8(%ebp),%ebx
+  asm ("mov____0x8(%ebp),%ecx !12");              // mov    0x8(%ebp),%ecx
+
+  asm ("mov____$i32,%eax SYS_access");            // mov    $0x21,%eax
+  asm ("int____$0x80");                           // int    $0x80
+}
+
+void
+brk ()
+{
+  asm ("mov____0x8(%ebp),%ebx !8");               // mov    0x8(%ebp),%ebx
+
+  asm ("mov____$i32,%eax SYS_brk");               // mov    $0x2d,%eax
+  asm ("int____$0x80");                           // int    $0x80
+}
+
+void
+fsync ()
+{
+  asm ("mov____0x8(%ebp),%ebx !8");               // mov    0x8(%ebp),%ebx
+
+  asm ("mov____$i32,%eax SYS_fsync");             // mov    $0x7c,%eax
+  asm ("int____$0x80");                           // int    $0x80
+}
+
+int
+strlen (char const* s)
+{
+  int i = 0;
+  while (s[i]) i++;
+  return i;
+}
+
+int
+eputc (int c)
+{
+  return fputc (c, 2);
+}
+
+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;
+}
+
+int
+fgetc (int fd)
+{
+  char c;
+  int i;
+  int r = read (fd, &c, 1);
+  if (r < 1) return -1;
+  i = c;
+  return i;
+}
+
+void
+free (void *ptr)
+{
+}
+
+//#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 (int c)
+{
+  return (c>='0') && (c<='9');
+}
+
+int
+isxdigit (int c)
+{
+  return isdigit (c) || (c>='a') && (c<='f');
+}
+
+int
+isnumber (int c, int base)
+{
+  if (base == 2)
+    return (c>='0') && (c<='1');
+  if (base == 8)
+    return (c>='0') && (c<='7');
+  if (base == 10)
+    return isdigit (c);
+  if (base == 16)
+    return isxdigit (c);
+}
+
+int
+_atoi (char const **p, int base)
+{
+  char const *s = *p;
+  int i = 0;
+  int sign = 1;
+  if (!base) base = 10;
+  if (*s && *s == '-')
+    {
+      sign = -1;
+      s++;
+    }
+  while (isnumber (*s, base))
+    {
+      i *= base;
+      int m = *s > '9' ? 'a' - 10 : '0';
+      i += *s - m;
+      s++;
+    }
+  *p = s;
+  return i * sign;
+}
+
+int
+atoi (char const *s)
+{
+  char const *p = s;
+  return _atoi (&p, 0);
+}
+
+char *g_brk = 0;
+
+void *
+malloc (size_t size)
+{
+  if (!g_brk)
+    g_brk = brk (0);
+  if (brk (g_brk + size) == -1)
+    return 0;
+  char *p = g_brk;
+  g_brk += size;
+  return p;
+}
+
+void *
+memcpy (void *dest, void const *src, size_t n)
+{
+  char* p = dest;
+  char* q = src;
+  while (n--) *p++ = *q++;
+  return dest;
+}
+
+void *
+realloc (void *ptr, size_t size)
+{
+  void *new = malloc (size);
+  if (ptr && new)
+    {
+      memcpy (new, ptr, size);
+      free (ptr);
+    }
+  return new;
+}
+
+int
+strncmp (char const* a, char const* b, int 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
+vprintf (char const* format, va_list ap)
+{
+  char const *p = format;
+  while (*p)
+    if (*p != '%')
+      putchar (*p++);
+    else
+      {
+        p++;
+        char c = *p;
+        switch (c)
+          {
+          case '%': {putchar (*p); break;}
+          case 'c': {char c; c = va_arg (ap, char); putchar (c); break;}
+          case 'd': {int d; d = va_arg (ap, int); puts (itoa (d)); break;}
+          case 's': {char *s; s = va_arg (ap, char *); puts (s); break;}
+          default: {putchar (*p); break;}
+          }
+        p++;
+      }
+  va_end (ap);
+  return 0;
+}
+
+int
+printf (char const* format, ...)
+{
+  va_list ap;
+  va_start (ap, format);
+  int r = vprintf (format, ap);
+  va_end (ap);
+  return r;
+}
+
+int
+vsprintf (char *str, char const* format, va_list ap)
+{
+  char const *p = format;
+  while (*p)
+    if (*p != '%')
+      *str++ = *p++;
+    else
+      {
+        p++;
+        char c = *p;
+        switch (c)
+          {
+          case '%': {*str++ = *p; break;}
+          case 'c': {char c; c = va_arg (ap, char); *str++ = c; break;}
+          case 'd': {int d; d = va_arg (ap, int); char const *s; s = itoa (d); while (*s) *str++ = *s++; break;}
+          case 's': {char *s; s = va_arg (ap, char *); while (*s) *str++ = *s++; break;}
+          default: {*str++ = *p; break;}
+          }
+        p++;
+      }
+  va_end (ap);
+  *str = 0;
+  return strlen (str);
+}
+
+int
+sprintf (char *str, char const* format, ...)
+{
+  va_list ap;
+  va_start (ap, format);
+  int r = vsprintf (str, format, ap);
+  va_end (ap);
+  return r;
+}
diff --git a/lib/mini-libc-mes.c b/lib/mini-libc-mes.c
new file mode 100644 (file)
index 0000000..317c771
--- /dev/null
@@ -0,0 +1,63 @@
+/* -*-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 ("mov____0x8(%ebp),%ebx !8");
+
+  asm ("mov____$i32,%eax SYS_exit");
+  asm ("int____$0x80");
+}
+
+void
+write ()
+{
+  asm ("mov____0x8(%ebp),%ebx !8");
+  asm ("mov____0x8(%ebp),%ecx !12");
+  asm ("mov____0x8(%ebp),%edx !16");
+
+  asm ("mov____$i32,%eax SYS_write");
+  asm ("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
+puts (char const* s)
+{
+  int i = strlen (s);
+  write (1, s, i);
+  return 0;
+}
index 562270b2e13336b77914c022d2bfa96b328c1a2a..8f3651c8505603ca0368cfa8b262d8b456f3b3ed 100755 (executable)
--- a/make.scm
+++ b/make.scm
@@ -38,7 +38,7 @@ exec ${GUILE-guile} --no-auto-compile -L . -L guile -C . -C guile -s "$0" ${1+"$
              (ice-9 match)
              (guix make))
 
-(define crt1.hex2 (m1.as "mlibc/crt1.c"))
+(define crt1.hex2 (m1.as "lib/crt1.c"))
 (add-target crt1.hex2)
 
 (add-target crt1.mlibc-o)
@@ -95,28 +95,28 @@ exec ${GUILE-guile} --no-auto-compile -L . -L guile -C . -C guile -s "$0" ${1+"$
                       ,@(if libc (list libc) '())))
             (method (LINK.hex2 #:hex2 hex2 #:crt1 crt1 #:libc libc #:debug? (eq? libc libc-mes.hex2))))))
 
-;;(define mini-libc-mes.E (m1.as "mlibc/mini-libc-mes.c"))
+;;(define mini-libc-mes.E (m1.as "lib/mini-libc-mes.c"))
 
-(define libc-mes.hex2 (m1.as "mlibc/libc-mes.c"))
+(define libc-mes.hex2 (m1.as "lib/libc-mes.c"))
 (add-target libc-mes.hex2)
 
-(define mini-libc-mes.hex2 (m1.as "mlibc/mini-libc-mes.c"))
+(define mini-libc-mes.hex2 (m1.as "lib/mini-libc-mes.c"))
 (add-target mini-libc-mes.hex2)
 
-(define libc-mes+tcc.hex2 (m1.as "mlibc/libc-mes+tcc.c"))
+(define libc-mes+tcc.hex2 (m1.as "lib/libc-mes+tcc.c"))
 (add-target libc-mes+tcc.hex2)
 
 (add-target (bin.mescc "stage0/exit-42.c" #:libc #f))
 (add-target (check "stage0/exit-42.0-guile" #:exit 42))
 
-(add-target (cpp.mescc "mlibc/mini-libc-mes.c"))
-(add-target (compile.mescc "mlibc/mini-libc-mes.c"))
+(add-target (cpp.mescc "lib/mini-libc-mes.c"))
+(add-target (compile.mescc "lib/mini-libc-mes.c"))
 
 (add-target (bin.mescc "stage0/exit-42.c" #:libc mini-libc-mes.hex2))
 (add-target (check "stage0/exit-42.mini-guile" #:exit 42))
 
-(add-target (cpp.mescc "mlibc/libc-mes.c"))
-(add-target (compile.mescc "mlibc/libc-mes.c"))
+(add-target (cpp.mescc "lib/libc-mes.c"))
+(add-target (compile.mescc "lib/libc-mes.c"))
 
 (add-target (bin.mescc "stage0/exit-42.c"))
 (add-target (check "stage0/exit-42.guile" #:exit 42))
@@ -130,9 +130,9 @@ exec ${GUILE-guile} --no-auto-compile -L . -L guile -C . -C guile -s "$0" ${1+"$
                                                                      ((eq? libc mini-libc-mes.hex2) "mini-")
                                                                      (else "")) "guile") #:exit exit)))
 
-(add-target (compile.gcc "mlibc/crt1.c" #:libc #f))
-(add-target (compile.gcc "mlibc/libc-gcc.c" #:libc #f))
-(add-target (compile.gcc "mlibc/libc-gcc+tcc.c" #:libc #f))
+(add-target (compile.gcc "lib/crt1.c" #:libc #f))
+(add-target (compile.gcc "lib/libc-gcc.c" #:libc #f))
+(add-target (compile.gcc "lib/libc-gcc+tcc.c" #:libc #f))
 
 ;;(add-scaffold-test "t" #:libc mini-libc-mes.hex2)
 (add-scaffold-test "t")
@@ -253,8 +253,8 @@ exec ${GUILE-guile} --no-auto-compile -L . -L guile -C . -C guile -s "$0" ${1+"$
 
 (add-target (group "check-scaffold-tests" #:dependencies (filter (target-prefix? "check-scaffold/tests") %targets)))
 
-(add-target (cpp.mescc "mlibc/libc-mes+tcc.c"))
-(add-target (compile.mescc "mlibc/libc-mes+tcc.c"))
+(add-target (cpp.mescc "lib/libc-mes+tcc.c"))
+(add-target (compile.mescc "lib/libc-mes+tcc.c"))
 
 (define* (add-tcc-test name)
   (add-target (bin.gcc (string-append "scaffold/tinycc/" name ".c") #:libc libc-gcc.mlibc-o #:includes '("scaffold/tinycc")))
@@ -593,54 +593,54 @@ exec ${GUILE-guile} --no-auto-compile -L . -L guile -C . -C guile -s "$0" ${1+"$
    ((install-guile-dir #:dir (string-append %godir)) f))
  %go-files)
 
-(add-target (install "mlibc/crt1.hex2" #:dir "lib"))
-(add-target (install "mlibc/libc-mes.M1" #:dir "lib"))
-(add-target (install "mlibc/libc-mes.hex2" #:dir "lib"))
-(add-target (install "mlibc/libc-mes+tcc.M1" #:dir "lib"))
-(add-target (install "mlibc/libc-mes+tcc.hex2" #:dir "lib"))
-(add-target (install "mlibc/mini-libc-mes.M1" #:dir "lib"))
-(add-target (install "mlibc/mini-libc-mes.hex2" #:dir "lib"))
+(add-target (install "lib/crt1.hex2" #:dir "lib"))
+(add-target (install "lib/libc-mes.M1" #:dir "lib"))
+(add-target (install "lib/libc-mes.hex2" #:dir "lib"))
+(add-target (install "lib/libc-mes+tcc.M1" #:dir "lib"))
+(add-target (install "lib/libc-mes+tcc.hex2" #:dir "lib"))
+(add-target (install "lib/mini-libc-mes.M1" #:dir "lib"))
+(add-target (install "lib/mini-libc-mes.hex2" #:dir "lib"))
 
-(add-target (install "mlibc/crt1.mlibc-o" #:dir "lib"))
-(add-target (install "mlibc/libc-gcc.mlibc-o" #:dir "lib"))
-(add-target (install "mlibc/libc-gcc+tcc.mlibc-o" #:dir "lib"))
+(add-target (install "lib/crt1.mlibc-o" #:dir "lib"))
+(add-target (install "lib/libc-gcc.mlibc-o" #:dir "lib"))
+(add-target (install "lib/libc-gcc+tcc.mlibc-o" #:dir "lib"))
 
 (for-each
  (lambda (f)
    ((install-dir #:dir "share/") f))
- '("mlibc/include/alloca.h"
-   "mlibc/include/assert.h"
-   "mlibc/include/ctype.h"
-   "mlibc/include/dlfcn.h"
-   "mlibc/include/errno.h"
-   "mlibc/include/fcntl.h"
-   "mlibc/include/features.h"
-   "mlibc/include/inttypes.h"
-   "mlibc/include/libgen.h"
-   "mlibc/include/limits.h"
-   "mlibc/include/locale.h"
-   "mlibc/include/math.h"
-   "mlibc/include/mlibc.h"
-   "mlibc/include/setjmp.h"
-   "mlibc/include/signal.h"
-   "mlibc/include/stdarg.h"
-   "mlibc/include/stdbool.h"
-   "mlibc/include/stdint.h"
-   "mlibc/include/stdio.h"
-   "mlibc/include/stdlib.h"
-   "mlibc/include/stdnoreturn.h"
-   "mlibc/include/string.h"
-   "mlibc/include/strings.h"
-   "mlibc/include/sys/cdefs.h"
-   "mlibc/include/sys/mman.h"
-   "mlibc/include/sys/stat.h"
-   "mlibc/include/sys/time.h"
-   "mlibc/include/sys/timeb.h"
-   "mlibc/include/sys/types.h"
-   "mlibc/include/sys/ucontext.h"
-   "mlibc/include/sys/wait.h"
-   "mlibc/include/time.h"
-   "mlibc/include/unistd.h"))
+ '("include/alloca.h"
+   "include/assert.h"
+   "include/ctype.h"
+   "include/dlfcn.h"
+   "include/errno.h"
+   "include/fcntl.h"
+   "include/features.h"
+   "include/inttypes.h"
+   "include/libgen.h"
+   "include/limits.h"
+   "include/locale.h"
+   "include/math.h"
+   "include/mlibc.h"
+   "include/setjmp.h"
+   "include/signal.h"
+   "include/stdarg.h"
+   "include/stdbool.h"
+   "include/stdint.h"
+   "include/stdio.h"
+   "include/stdlib.h"
+   "include/stdnoreturn.h"
+   "include/string.h"
+   "include/strings.h"
+   "include/sys/cdefs.h"
+   "include/sys/mman.h"
+   "include/sys/stat.h"
+   "include/sys/time.h"
+   "include/sys/timeb.h"
+   "include/sys/types.h"
+   "include/sys/ucontext.h"
+   "include/sys/wait.h"
+   "include/time.h"
+   "include/unistd.h"))
 
 (for-each
  (compose add-target (cut install <> #:dir "share/doc/mes"))
diff --git a/mlibc/crt1.c b/mlibc/crt1.c
deleted file mode 100644 (file)
index 24cdebb..0000000
+++ /dev/null
@@ -1,92 +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/>.
- */
-
-char **g_environment = 0;
-int main (int,char*[]);
-
-#if __GNUC__ && !POSIX
-
-void
-_start ()
-{
-  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 ""
-       );
-  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"
-
-       "mov     %%eax,%%ebx\n\t"
-       "mov     $1,%%eax\n\t"
-       "int     $0x80\n\t"
-       "hlt      \n\t"
-       :
-       );
-}
-
-#elif __MESC__
-
-int
-_start ()
-{
-  asm ("mov____%ebp,%eax");
-  asm ("add____$i8,%eax !4");
-
-  asm ("movzbl_(%eax),%eax");
-  asm ("add____$i8,%eax !3");
-
-  asm ("shl____$i8,%eax !0x02");
-  asm ("add____%ebp,%eax");
-  asm ("mov____%eax,0x32 &g_environment");
-
-  asm ("mov____%ebp,%eax");
-  asm ("add____$i8,%eax !8");
-  asm ("push___%eax");
-
-  asm ("mov____%ebp,%eax");
-  asm ("add____$i8,%eax !4");
-  asm ("movzbl_(%eax),%eax");
-  asm ("push___%eax");
-
-  main ();
-
-  asm ("mov____%eax,%ebx");
-  asm ("mov____$i32,%eax %1");
-  asm ("int____$0x80");
-  asm ("hlt");
-}
-
-#endif
diff --git a/mlibc/getopt.c b/mlibc/getopt.c
deleted file mode 100644 (file)
index 91555ab..0000000
+++ /dev/null
@@ -1,376 +0,0 @@
-/* Getopt for GNU.
-   Copyright (C) 1987, 88, 89, 90, 91, 1992 Free Software Foundation, Inc.
-   Copyright (C) 2017 Jan Nieuwenhuizen <janneke@gnu.org>
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2, or (at your option)
-   any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
-\f
-
-#include <stdio.h>
-#include <string.h>
-#include <getopt.h>
-
-#if __MESC__
-#define static
-#endif
-
-/* For communication from `getopt' to the caller.
-   When `getopt' finds an option that takes an argument,
-   the argument value is returned here. */
-
-char *optarg = 0;
-
-/* Index in ARGV of the next element to be scanned.
-   This is used for communication to and from the caller
-   and for communication between successive calls to `getopt'.
-
-   On entry to `getopt', zero means this is the first call; initialize.
-
-   When `getopt' returns EOF, this is the index of the first of the
-   non-option elements that the caller should itself scan.
-
-   Otherwise, `optind' communicates from one call to the next
-   how much of ARGV has been scanned so far.  */
-
-int optind = 0;
-
-/* The next char to be scanned in the option-element
-   in which the last option character we returned was found.
-   This allows us to pick up the scan where we left off.
-
-   If this is zero, or a null string, it means resume the scan
-   by advancing to the next ARGV-element.  */
-
-static char *nextchar;
-
-/* Callers store zero here to inhibit the error message
-   for unrecognized options.  */
-
-int opterr = 1;
-
-\f
-/* Handle permutation of arguments.  */
-
-/* Describe the part of ARGV that contains non-options that have
-   been skipped.  `first_nonopt' is the index in ARGV of the first of them;
-   `last_nonopt' is the index after the last of them.  */
-
-static int first_nonopt;
-static int last_nonopt;
-
-\f
-/* Scan elements of ARGV (whose length is ARGC) for option characters
-   given in OPTSTRING.
-
-   If an element of ARGV starts with '-', and is not exactly "-" or "--",
-   then it is an option element.  The characters of this element
-   (aside from the initial '-') are option characters.  If `getopt'
-   is called repeatedly, it returns successively each of the option characters
-   from each of the option elements.
-
-   If `getopt' finds another option character, it returns that character,
-   updating `optind' and `nextchar' so that the next call to `getopt' can
-   resume the scan with the following option character or ARGV-element.
-
-   If there are no more option characters, `getopt' returns `EOF'.
-   Then `optind' is the index in ARGV of the first ARGV-element
-   that is not an option.  (The ARGV-elements have been permuted
-   so that those that are not options now come last.)
-
-   OPTSTRING is a string containing the legitimate option characters.
-   If an option character is seen that is not listed in OPTSTRING,
-   return '?' after printing an error message.  If you set `opterr' to
-   zero, the error message is suppressed but we still return '?'.
-
-   If a char in OPTSTRING is followed by a colon, that means it wants an arg,
-   so the following text in the same ARGV-element, or the text of the following
-   ARGV-element, is returned in `optarg'.  Two colons mean an option that
-   wants an optional arg; if there is text in the current ARGV-element,
-   it is returned in `optarg', otherwise `optarg' is set to zero.
-
-   If OPTSTRING starts with `-' or `+', it requests different methods of
-   handling the non-option ARGV-elements.
-
-   Long-named options begin with `--' instead of `-'.
-   Their names may be abbreviated as long as the abbreviation is unique
-   or is an exact match for some defined option.  If they have an
-   argument, it follows the option name in the same ARGV-element, separated
-   from the option name by a `=', or else the in next ARGV-element.
-   When `getopt' finds a long-named option, it returns 0 if that option's
-   `flag' field is nonzero, the value of the option's `val' field
-   if the `flag' field is zero.
-
-   The elements of ARGV aren't really const, because we permute them.
-   But we pretend they're const in the prototype to be compatible
-   with other systems.
-
-   LONGOPTS is a vector of `struct option' terminated by an
-   element containing a name which is zero.
-
-   LONGIND returns the index in LONGOPT of the long-named option found.
-   It is only valid when a long-named option has been found by the most
-   recent call.
-
-   If LONG_ONLY is nonzero, '-' as well as '--' can introduce
-   long-named options.  */
-
-int
-_getopt_internal (int argc, char *const
-                  *argv, char const *optstring, struct option const *longopts, int *longind, int long_only)
-{
-  int option_index;
-
-  optarg = 0;
-
-  /* Initialize the internal data when the first call is made.
-     Start processing options with ARGV-element 1 (since ARGV-element 0
-     is the program name); the sequence of previously skipped
-     non-option ARGV-elements is empty.  */
-
-  if (optind == 0)
-    {
-      first_nonopt = last_nonopt = optind = 1;
-
-      nextchar = NULL;
-    }
-
-  if (nextchar == NULL || *nextchar == '\0')
-    {
-      /* If we have done all the ARGV-elements, stop the scan
-        and back over any non-options that we skipped and permuted.  */
-
-      if (optind == argc)
-       {
-         /* Set the next-arg-index to point at the non-options
-            that we previously skipped, so the caller will digest them.  */
-         if (first_nonopt != last_nonopt)
-           optind = first_nonopt;
-         return EOF;
-       }
-
-      /* If we have come to a non-option and did not permute it,
-        either stop the scan or describe it to the caller and pass it by.  */
-
-      if ((argv[optind][0] != '-' || argv[optind][1] == '\0'))
-        return EOF;
-
-      /* We have found another option-ARGV-element.
-        Start decoding its characters.  */
-
-      nextchar = (argv[optind] + 1
-                 + (longopts != NULL && argv[optind][1] == '-'));
-    }
-
-  if (longopts != NULL
-      && ((argv[optind][0] == '-'
-          && (argv[optind][1] == '-' || long_only))))
-    {
-      const struct option *p;
-      char *s = nextchar;
-      int exact = 0;
-      int ambig = 0;
-      const struct option *pfound = NULL;
-      int indfound;
-
-      while (*s && *s != '=')
-       s++;
-
-      /* Test all options for either exact match or abbreviated matches.  */
-      for (p = longopts, option_index = 0; p->name;
-          p++, option_index++)
-       if (!strncmp (p->name, nextchar, s - nextchar))
-         {
-           if (s - nextchar == strlen (p->name))
-             {
-               /* Exact match found.  */
-               pfound = p;
-               indfound = option_index;
-               exact = 1;
-               break;
-             }
-           else if (pfound == NULL)
-             {
-               /* First nonexact match found.  */
-               pfound = p;
-               indfound = option_index;
-             }
-           else
-             /* Second nonexact match found.  */
-             ambig = 1;
-         }
-
-      if (ambig && !exact)
-       {
-         if (opterr)
-           fprintf (stderr, "%s: option `%s' is ambiguous\n",
-                    argv[0], argv[optind]);
-         nextchar += strlen (nextchar);
-         optind++;
-         return '?';
-       }
-
-      if (pfound != NULL)
-       {
-         option_index = indfound;
-         optind++;
-         if (*s)
-           {
-             /* Don't test has_arg with >, because some C compilers don't
-                allow it to be used on enums. */
-             if (pfound->has_arg)
-               optarg = s + 1;
-             else
-               {
-                 if (opterr)
-                   {
-                     if (argv[optind - 1][1] == '-')
-                       /* --option */
-                       fprintf (stderr,
-                                "%s: option `--%s' doesn't allow an argument\n",
-                                argv[0], pfound->name);
-                     else
-                       /* +option or -option */
-                       fprintf (stderr,
-                            "%s: option `%c%s' doesn't allow an argument\n",
-                            argv[0], argv[optind - 1][0], pfound->name);
-                   }
-                 nextchar += strlen (nextchar);
-                 return '?';
-               }
-           }
-         else if (pfound->has_arg == 1)
-           {
-             if (optind < argc)
-               optarg = argv[optind++];
-             else
-               {
-                 if (opterr)
-                   fprintf (stderr, "%s: option `%s' requires an argument\n",
-                            argv[0], argv[optind - 1]);
-                 nextchar += strlen (nextchar);
-                 return '?';
-               }
-           }
-         nextchar += strlen (nextchar);
-         if (longind != NULL)
-           *longind = option_index;
-         if (pfound->flag)
-           {
-             *(pfound->flag) = pfound->val;
-             return 0;
-           }
-         return pfound->val;
-       }
-      /* Can't find it as a long option.  If this is not getopt_long_only,
-        or the option starts with '--' or is not a valid short
-        option, then it's an error.
-        Otherwise interpret it as a short option. */
-      if (!long_only || argv[optind][1] == '-'
-         || strchr (optstring, *nextchar) == NULL)
-       {
-         if (opterr)
-           {
-             if (argv[optind][1] == '-')
-               /* --option */
-               fprintf (stderr, "%s: unrecognized option `--%s'\n",
-                        argv[0], nextchar);
-             else
-               /* +option or -option */
-               fprintf (stderr, "%s: unrecognized option `%c%s'\n",
-                        argv[0], argv[optind][0], nextchar);
-           }
-         nextchar += strlen (nextchar);
-         optind++;
-         return '?';
-       }
-    }
-
-  /* Look at and handle the next option-character.  */
-
-  {
-    char c = *nextchar++;
-    char *temp = strchr (optstring, c);
-
-    /* Increment `optind' when we start to process its last character.  */
-    if (*nextchar == '\0')
-      optind++;
-
-    if (temp == NULL || c == ':')
-      {
-       if (opterr)
-         {
-           if (c < 040 || c >= 0177)
-             fprintf (stderr, "%s: unrecognized option, character code 0%o\n",
-                      argv[0], c);
-           else
-             fprintf (stderr, "%s: unrecognized option `-%c'\n", argv[0], c);
-         }
-       return '?';
-      }
-    if (temp[1] == ':')
-      {
-       if (temp[2] == ':')
-         {
-           /* This is an option that accepts an argument optionally.  */
-           if (*nextchar != '\0')
-             {
-               optarg = nextchar;
-               optind++;
-             }
-           else
-             optarg = 0;
-           nextchar = NULL;
-         }
-       else
-         {
-           /* This is an option that requires an argument.  */
-           if (*nextchar != 0)
-             {
-               optarg = nextchar;
-               /* If we end this ARGV-element by taking the rest as an arg,
-                  we must advance to the next element now.  */
-               optind++;
-             }
-           else if (optind == argc)
-             {
-               if (opterr)
-                 fprintf (stderr, "%s: option `-%c' requires an argument\n",
-                          argv[0], c);
-               c = '?';
-             }
-           else
-             /* We already incremented `optind' once;
-                increment it again when taking next ARGV-elt as argument.  */
-             optarg = argv[optind++];
-           nextchar = NULL;
-         }
-      }
-    return c;
-  }
-}
-
-int
-getopt (int argc, char *const *argv, char const *optstring)
-{
-  return _getopt_internal (argc, argv, optstring,
-                          (const struct option *) 0,
-                          (int *) 0,
-                          0);
-}
-
-int
-getopt_long (int argc, char *const *argv, const char *options, struct option const *long_options, int *opt_index)
-{
-  return _getopt_internal (argc, argv, options, long_options, opt_index, 0);
-}
diff --git a/mlibc/include/00-test.i b/mlibc/include/00-test.i
deleted file mode 100644 (file)
index 674bb0f..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/>.
- */
-
-int test ();
-
-int
-main ()
-{
-  int r = test ();
-#if __MESC__
-  asm ("mov____%eax,%ebx");
-  asm ("mov____$i32,%eax SYS_exit");
-  asm ("int____$0x80");
-#elif __GNUC__
-  asm ("mov    %0,%%ebx"
-       : // no outputs
-       : "" (r));
-  asm ("mov    $1,%eax");
-  asm ("int    $0x80");
-#elif __TINYC__
-  asm ("mov    %0,%%ebx"
-       : // no outputs
-       : "Ir" (r));
-  asm ("mov    $1,%eax");
-  asm ("int    $0x80");
-#endif // __GNUC__
-}
diff --git a/mlibc/include/30-test.i b/mlibc/include/30-test.i
deleted file mode 100644 (file)
index 46ede62..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/>.
- */
-
-int test ();
-
-int
-main ()
-{
-  int r = test ();
-  return r;
-}
diff --git a/mlibc/include/alloca.h b/mlibc/include/alloca.h
deleted file mode 100644 (file)
index 61df893..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_ALLOCA_H
-#define __MES_ALLOCA_H 1
-
-#if __GNUC__ && POSIX
-#ifndef _GNU_SOURCE
-#define _GNU_SOURCE
-#endif
-#undef __MES_ALLOCA_H 1
-#include_next <alloca.h>
-
-#else // ! (__GNUC__ && POSIX)
-void* alloca (size_t);
-#endif // ! (__GNUC__ && POSIX)
-
-#endif // __MES_ALLOCA_H
diff --git a/mlibc/include/assert.h b/mlibc/include/assert.h
deleted file mode 100644 (file)
index 18ce042..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_ASSERT_H
-#define __MES_ASSERT_H 1
-
-#if __GNUC__ && POSIX
-#ifndef _GNU_SOURCE
-#define _GNU_SOURCE
-#endif
-#undef __MES_ASSERT_H
-#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
deleted file mode 100644 (file)
index 69d1210..0000000
+++ /dev/null
@@ -1,36 +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
-#undef __MES_CTYPE_H
-#include_next <ctype.h>
-
-#else // ! (__GNUC__ && POSIX)
-#include <endian.h>
-int isdigit (int);
-int isxdigit (int);
-#endif // ! (__GNUC__ && POSIX)
-
-#endif // __MES_CTYPE_H
diff --git a/mlibc/include/dlfcn.h b/mlibc/include/dlfcn.h
deleted file mode 100644 (file)
index 0158a8e..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_DLFCN_H
-#define __MES_DLFCN_H 1
-
-#if __GNUC__ && POSIX
-#undef __MES_DLFCN_H
-#include_next <dlfcn.h>
-
-#else // !(__GNUC__ && POSIX)
-
-#define RTLD_LAZY      0x00001
-#define RTLD_NOW       0x00002
-#define        RTLD_BINDING_MASK   0x3
-#define RTLD_NOLOAD    0x00004
-#define RTLD_DEEPBIND  0x00008
-#define RTLD_GLOBAL    0x00100
-#define RTLD_LOCAL     0
-#define RTLD_NODELETE  0x01000
-
-void *dlopen (char const *filename, int flags);
-int dlclose (void *handle);
-
-#endif // !(__GNUC__ && POSIX)
-
-#endif // __MES_DLFCN_H
-
diff --git a/mlibc/include/endian.h b/mlibc/include/endian.h
deleted file mode 100644 (file)
index 87d1011..0000000
+++ /dev/null
@@ -1,36 +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_ENDIAN_H
-#define __MES_ENDIAN_H 1
-
-#if __GNUC__ && POSIX
-#ifndef _GNU_SOURCE
-#define _GNU_SOURCE
-#endif
-#undef __MES_ENDIAN_H
-#include_next <endian.h>
-
-#else // ! (__GNUC__ && POSIX)
-#define        __LITTLE_ENDIAN 1234
-#define        __BIG_ENDIAN 4321
-#define __BYTE_ORDER __LITTLE_ENDIAN
-#endif // ! (__GNUC__ && POSIX)
-
-#endif // __MES_ENDIAN_H
diff --git a/mlibc/include/errno.h b/mlibc/include/errno.h
deleted file mode 100644 (file)
index a429d58..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_ERRNO_H
-#define __MES_ERRNO_H 1
-
-#if __GNUC__ && POSIX
-#ifndef _GNU_SOURCE
-#define _GNU_SOURCE
-#endif
-#undef __MES_ERRNO_H
-#include_next <errno.h>
-#else // ! (__GNUC__ && POSIX)
-int errno;
-#endif // ! (__GNUC__ && POSIX)
-
-#endif // __MES_ERRNO_H
diff --git a/mlibc/include/fcntl.h b/mlibc/include/fcntl.h
deleted file mode 100644 (file)
index 7d30a7b..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_FCNTL_H
-#define __MES_FCNTL_H 1
-
-#if __GNUC__ && POSIX
-#ifndef _GNU_SOURCE
-#define _GNU_SOURCE
-#endif
-#undef __MES_FCNTL_H
-#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
deleted file mode 100644 (file)
index a75a698..0000000
+++ /dev/null
@@ -1,29 +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
-#undef __MES_FEATURES_H
-#include_next <features.h>
-#endif // (__GNUC__ && POSIX)
-
-#endif // __MES_FEATURES_H
-
diff --git a/mlibc/include/float.h b/mlibc/include/float.h
deleted file mode 100644 (file)
index 4b5fd38..0000000
+++ /dev/null
@@ -1,29 +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_FLOAT_H
-#define __MES_FLOAT_H 1
-
-#if __GNUC__ && POSIX
-#undef __MES_FLOAT_H
-#include_next <float.h>
-#else // ! (__GNUC__ && POSIX)
-#endif // ! (__GNUC__ && POSIX)
-
-#endif // __MES_FLOAT_H
diff --git a/mlibc/include/getopt.h b/mlibc/include/getopt.h
deleted file mode 100644 (file)
index 85e4b50..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-/* -*-comment-start: "//";comment-end:""-*-
- * Mes --- Maxwell Equations of Software
- * Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
- * 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_GETOPT_H
-#define __MES_GETOPT_H 1
-
-#if __GNUC__ && POSIX
-#ifndef _GNU_SOURCE
-#define _GNU_SOURCE
-#endif
-#undef __MES_GETOPT_H
-#include_next <getopt.h>
-
-#else // ! (__GNUC__ && POSIX)
-#include <endian.h>
-int isdigit (int);
-int isxdigit (int);
-#endif // ! (__GNUC__ && POSIX)
-
-char *optarg;
-int optind;
-int opterr;
-struct option
-{
-  char const *name;
-  int has_arg;
-  int *flag;
-  int val;
-};
-
-enum _argtype
-{
-  no_argument,
-  required_argument,
-  optional_argument
-};
-
-int getopt (int argc, char *const *argv, char const *shortopts);
-int getopt_long (int argc, char *const *argv, char const *shortopts,
-                 struct option const *longopts, int *longind);
-
-#endif // __MES_GETOPT_H
-
diff --git a/mlibc/include/inttypes.h b/mlibc/include/inttypes.h
deleted file mode 100644 (file)
index b3f4f7e..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_INTTYPES_H
-#define __MES_INTTYPES_H 1
-
-#if __GNUC__ && POSIX
-#ifndef _GNU_SOURCE
-#define _GNU_SOURCE
-#endif
-#undef __MES_INTTYPES_H
-#include_next <inttypes.h>
-#else // ! (__GNUC__ && POSIX)
-
-#include <stdint.h>
-#endif // ! (__GNUC__ && POSIX)
-
-#endif // __MES_INTTYPES_H
diff --git a/mlibc/include/libgen.h b/mlibc/include/libgen.h
deleted file mode 100644 (file)
index 2bad446..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_LIBGEN_H
-#define __MES_LIBGEN_H 1
-
-#if __GNUC__ && POSIX
-#ifndef _GNU_SOURCE
-#define _GNU_SOURCE
-#endif
-#undef __MES_LIBGEN_H
-#include_next <libgen.h>
-
-#else // ! (__GNUC__ && POSIX)
-char* dirname (char*);
-#endif // ! (__GNUC__ && POSIX)
-
-#endif // __MES_LIBGEN_H
diff --git a/mlibc/include/limits.h b/mlibc/include/limits.h
deleted file mode 100644 (file)
index 765dd4a..0000000
+++ /dev/null
@@ -1,35 +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
-#undef __MES_LIMITS_H
-#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/locale.h b/mlibc/include/locale.h
deleted file mode 100644 (file)
index bbd0797..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_LOCALE_H
-#define __MES_LOCALE_H 1
-
-#if __GNUC__ && POSIX
-#ifndef _GNU_SOURCE
-#define _GNU_SOURCE
-#endif
-#undef __MES_LOCALE_H
-#include_next <locale.h>
-
-#else // ! (__GNUC__ && POSIX)
-char* dirname (char*);
-#endif // ! (__GNUC__ && POSIX)
-
-#endif // __MES_LOCALE_H
diff --git a/mlibc/include/math.h b/mlibc/include/math.h
deleted file mode 100644 (file)
index c74b886..0000000
+++ /dev/null
@@ -1,29 +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
-#undef __MES_MATH_H
-#include_next <math.h>
-#endif // (__GNUC__ && POSIX)
-
-#endif // __MES_MATH_H
-
diff --git a/mlibc/include/mlibc.h b/mlibc/include/mlibc.h
deleted file mode 100644 (file)
index fb24f0b..0000000
+++ /dev/null
@@ -1,29 +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);
-int _atoi (char const**, int base);
-int eputc (int c);
-int eputs (char const* s);
-
-#endif //__MES_MLIBC_H
diff --git a/mlibc/include/setjmp.h b/mlibc/include/setjmp.h
deleted file mode 100644 (file)
index c1c5300..0000000
+++ /dev/null
@@ -1,35 +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
-#undef __MES_SETJMP_H
-#include_next <setjmp.h>
-#else // ! (__GNUC__ && POSIX)
-
-typedef int jmp_buf;
-void longjmp (jmp_buf env, int val);
-int setjmp (jmp_buf env);
-
-#endif // ! (__GNUC__ && POSIX)
-
-#endif // __MES_SETJMP_H
-
diff --git a/mlibc/include/signal.h b/mlibc/include/signal.h
deleted file mode 100644 (file)
index 43f958c..0000000
+++ /dev/null
@@ -1,209 +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
-#undef __MES_SIGNAL_H
-#include_next <signal.h>
-#else //! (__GNUC__ && POSIX)
-typedef int sigset_t;
-
-typedef int stack_t;
-
-typedef int pid_t;
-typedef int uid_t;
-typedef int clock_t;
-typedef int sigval_t;
-
-#define SIGHUP          1
-#define SIGINT          2
-#define SIGQUIT                 3
-#define SIGILL          4
-#define SIGTRAP                 5
-#define SIGABRT                 6
-#define SIGIOT          6
-#define SIGBUS          7
-#define SIGFPE          8
-#define SIGKILL                 9
-#define SIGUSR1                10
-#define SIGSEGV                11
-#define SIGUSR2                12
-#define SIGPIPE                13
-#define SIGALRM                14
-#define SIGTERM                15
-#define SIGSTKFLT      16
-#define SIGCHLD                17
-#define SIGCONT                18
-#define SIGSTOP                19
-#define SIGTSTP                20
-#define SIGTTIN                21
-#define SIGTTOU                22
-#define SIGURG         23
-#define SIGXCPU                24
-#define SIGXFSZ                25
-#define SIGVTALRM      26
-#define SIGPROF                27
-#define SIGWINCH       28
-#define SIGIO          29
-#define SIGPOLL                SIGIO
-
-#define FPE_INTDIV     1
-#define FPE_INTOVF     2
-#define FPE_FLTDIV     3
-#define FPE_FLTOVF     4
-#define FPE_FLTUND     5
-#define FPE_FLTRES     6
-#define FPE_FLTINV     7
-#define FPE_FLTSUB     8
-
-#define SA_NOCLDSTOP   0x00000001
-#define SA_NOCLDWAIT   0x00000002
-#define SA_SIGINFO     0x00000004
-#define SA_ONSTACK     0x08000000
-#define SA_RESTART     0x10000000
-#define SA_NODEFER     0x40000000
-#define SA_RESETHAND   0x80000000
-
-#define SA_NOMASK      SA_NODEFER
-#define SA_ONESHOT     SA_RESETHAND
-
-
-typedef struct siginfo_t {
-  int si_signo;
-  int si_errno;
-  int si_code;
-  int si_trapno;
-  pid_t si_pid;
-  uid_t si_uid;
-  int si_status;
-  clock_t si_utime;
-  clock_t si_stime;
-  sigval_t si_value;
-  int si_int;
-  void *si_ptr;
-  int si_overrun;
-  int si_timerid;
-  void *si_addr;
-  long si_band;
-  int si_fd;
-  short si_addr_lsb;
-  void *si_lower;
-  void *si_upper;
-  int si_pkey;
-  void *si_call_addr;
-  int si_syscall;
-  unsigned int si_arch;
-} siginfo_t;
-
-
-// typedef void __signalfn_t(int);
-// typedef __signalfn_t *__sighandler_t;
-
-struct sigaction {
- void (*sa_sigaction) (int, siginfo_t *, void *);
-  //__sighandler_t sa_handler;
-  unsigned long sa_flags;
-  sigset_t sa_mask;
-};
-
-
-#ifdef __i386__
-
-#define EBX 0
-#define ECX 1
-#define EDX 2
-#define ESI 3
-#define EDI 4
-#define EBP 5
-#define EAX 6
-#define DS 7
-#define ES 8
-#define FS 9
-#define GS 10
-#define ORIG_EAX 11
-#define EIP 12
-#define CS  13
-#define EFL 14
-#define UESP 15
-#define SS   16
-#define FRAME_SIZE 17
-
-/* Type for general register.  */
-typedef int greg_t;
-
-/* Number of general registers.  */
-#define NGREG  19
-
-/* Container for all general registers.  */
-typedef greg_t gregset_t[NGREG];
-
-/* Definitions taken from the kernel headers.  */
-struct _libc_fpreg
-{
-  unsigned short int significand[4];
-  unsigned short int exponent;
-};
-
-struct _libc_fpstate
-{
-  unsigned long int cw;
-  unsigned long int sw;
-  unsigned long int tag;
-  unsigned long int ipoff;
-  unsigned long int cssel;
-  unsigned long int dataoff;
-  unsigned long int datasel;
-  struct _libc_fpreg _st[8];
-  unsigned long int status;
-};
-
-/* Structure to describe FPU registers.  */
-typedef struct _libc_fpstate *fpregset_t;
-
-typedef struct
-  {
-    gregset_t gregs;
-    /* Due to Linux's history we have to use a pointer here.  The SysV/i386
-       ABI requires a struct with the values.  */
-    fpregset_t fpregs;
-    unsigned long int oldmask;
-    unsigned long int cr2;
-  } mcontext_t;
-
-/* Userlevel context.  */
-typedef struct ucontext
-  {
-    unsigned long int uc_flags;
-    struct ucontext *uc_link;
-    stack_t uc_stack;
-    mcontext_t uc_mcontext;
-    sigset_t uc_sigmask;
-    struct _libc_fpstate __fpregs_mem;
-  } ucontext_t;
-#endif // !__i386__
-
-int sigaction (int signum, struct sigaction const *act, struct sigaction *oldact);
-int sigemptyset (sigset_t *set);
-
-#endif //! (__GNUC__ && POSIX)
-
-#endif // __MES_SIGNAL_H
-
diff --git a/mlibc/include/stdarg.h b/mlibc/include/stdarg.h
deleted file mode 100644 (file)
index 211ec36..0000000
+++ /dev/null
@@ -1,51 +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
-#undef __MES_STDARG_H
-#include_next <stdarg.h>
-#else // ! (__GNUC__ && POSIX)
-
-#ifndef __MES_SIZE_T
-#define __MES_SIZE_T
-typedef unsigned long size_t;
-#endif
-
-#if __GNUC__
-typedef char* va_list;
-#define va_start(ap, last) (void)((ap) = (char*)(&(last) + 1))
-#else // !__GNUC__
-typedef int va_list;
-#define va_start(ap, last) (void)((ap) = (char*)(&(last) + 1))
-#endif // !__GNUC__
-
-#define va_arg(ap, type) (type)(((int*)((ap) = ((ap) + 4)))[-1])
-#define va_end(ap) (void)((ap) = 0)
-#define va_copy(dest, src) dest = src
-
-int vprintf (char const* format, va_list ap);
-int vsprintf (char *str, char const *format, va_list ap);
-int vsnprintf (char *str, size_t size, char const *format, va_list ap);
-
-#endif // ! (__GNUC__ && POSIX)
-
-#endif // __MES_STDARG_H
diff --git a/mlibc/include/stdbool.h b/mlibc/include/stdbool.h
deleted file mode 100644 (file)
index c900fc5..0000000
+++ /dev/null
@@ -1,36 +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_STDBOOL_H
-#define __MES_STDBOOL_H 1
-
-#if __GNUC__ && POSIX
-#ifndef _GNU_SOURCE
-#define _GNU_SOURCE
-#endif
-#undef __MES_STDBOOL_H
-#include_next <stdbool.h>
-
-#else // ! (__GNUC__ && POSIX)
-typedef int bool;
-#define false 0
-#define true 1
-#endif // ! (__GNUC__ && POSIX)
-
-#endif // __MES_STDBOOL_H
diff --git a/mlibc/include/stddef.h b/mlibc/include/stddef.h
deleted file mode 100644 (file)
index f4a56be..0000000
+++ /dev/null
@@ -1,31 +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_STDDEF_H
-#define __MES_STDDEF_H 1
-
-#if __GNUC__ && POSIX
-#undef __MES_STDDEF_H
-#include_next <stddef.h>
-#else // ! (__GNUC__ && POSIX)
-#include <stdint.h>
-#include <unistd.h>
-#endif // ! (__GNUC__ && POSIX)
-
-#endif // __MES_STDDEF_H
diff --git a/mlibc/include/stdint.h b/mlibc/include/stdint.h
deleted file mode 100644 (file)
index 28f6b74..0000000
+++ /dev/null
@@ -1,56 +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_STDINT_H
-#define __MES_STDINT_H 1
-
-#if __GNUC__ && POSIX
-#ifndef _GNU_SOURCE
-#define _GNU_SOURCE
-#endif
-#undef __MES_STDINT_H
-#include_next <stdint.h>
-
-#else // ! (__GNUC__ && POSIX)
-
-typedef unsigned char uint8_t;
-typedef char int8_t;
-typedef unsigned short uint16_t;
-typedef short int16_t;
-typedef unsigned uint32_t;
-typedef int int32_t;
-typedef unsigned long long uint64_t;
-typedef long long int64_t;
-
-#ifndef __MES_SIZE_T
-#define __MES_SIZE_T
-typedef unsigned long size_t;
-#endif
-
-// FIXME
-typedef int intmax_t;
-typedef unsigned uintmax_t;
-typedef int* intptr_t;
-typedef unsigned* uintptr_t;
-
-typedef unsigned ptrdiff_t;
-
-#endif // ! (__GNUC__ && POSIX)
-
-#endif // __MES_STDINT_H
diff --git a/mlibc/include/stdio.h b/mlibc/include/stdio.h
deleted file mode 100644 (file)
index 9dfec03..0000000
+++ /dev/null
@@ -1,124 +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;
-
-#ifndef STDIN
-#define STDIN 0
-#endif
-
-#ifndef STDOUT
-#define STDOUT 1
-#endif
-
-#ifndef STDERR
-#define STDERR 2
-#endif
-
-#if __GNUC__ && POSIX
-#ifndef _GNU_SOURCE
-#define _GNU_SOURCE
-#endif
-#undef __MES_STDIO_H
-#include_next <stdio.h>
-
-int fdputs (char const* s, int fd);
-
-#undef puts
-#define puts(x) fdputs(x, STDOUT)
-#define fputs fdputs
-
-#ifdef putc
-#undef putc
-#endif
-
-int eputc (int c);
-int eputs (char const* s);
-int fdputc (int c, int fd);
-int getchar ();
-
-#define fputc fdputc
-#define ungetc fdungetc
-int fdungetc (int c, int fd);
-
-#else // ! (__GNUC__ && POSIX)
-
-#ifndef EOF
-#define EOF -1
-#endif
-
-#ifndef NULL
-#define NULL 0
-#endif
-
-// 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__
-
-typedef int FILE;
-
-#ifndef __MES_SIZE_T
-#define __MES_SIZE_T
-typedef unsigned long size_t;
-#endif
-
-int eputc (int c);
-int eputs (char const* s);
-int fclose (FILE *stream);
-FILE *fdopen (int fd, char const *mode);
-int fflush (FILE *stream);
- FILE *fopen (char const *pathname, char const *mode);
-int fprintf (FILE *stream, char const *format, ...);
-int fdputc (int c, int fd);
-int fputc (int c, int fd);
-int fputs (char const* s, int fd);
-size_t fread (void *ptr, size_t size, size_t nmemb, FILE *stream);
-int fseek (FILE *stream, long offset, int whence);
-long ftell (FILE *stream);
-size_t fwrite (void const *ptr, size_t size, size_t nmemb, FILE *stream);
-int getchar ();
-int printf (char const* format, ...);
-int putchar (int c);
-int puts (char const* s);
-int remove (char const *file_name);
-int sscanf (char const *str, const char *format, ...);
-int snprintf(char *str,  size_t size,  char const *format, ...);
-int sprintf (char *str, char const* format, ...);
-int ungetc (int c, int fd);
-
-#endif // ! (__GNUC__ && POSIX)
-
-#endif // __MES_STDIO_H
diff --git a/mlibc/include/stdlib.h b/mlibc/include/stdlib.h
deleted file mode 100644 (file)
index cb9f0a8..0000000
+++ /dev/null
@@ -1,57 +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
-#undef __MES_STDLIB_H
-#include_next <stdlib.h>
-#else  // !(__GNUC__ && POSIX)
-
-#ifndef __MES_SIZE_T
-#define __MES_SIZE_T
-typedef long size_t;
-#endif
-
-int atoi (char const *s);
-void * calloc (size_t nmemb, size_t size);
-void exit (int);
-void free (void *ptr);
-char* getenv (char const* s);
-void *malloc (size_t);
-void qsort (void *base, size_t nmemb, size_t size, int (*compar)(void const *, void const *));
-void *realloc (void *p, size_t size);
-long strtol (char const *nptr, char **endptr, int base);
-long long strtoll (char const *nptr, char **endptr, int base);
-unsigned long strtoul (char const *nptr, char **endptr, int base);
-unsigned long long strtoull (char const *nptr, char **endptr, int base);
-
-#define EXIT_FAILURE 1
-#define EXIT_SUCCESS 0
-
-#include <endian.h>
-
-#endif // !(__GNUC__ && POSIX)
-
-#endif // __MES_STDLIB_H
-
diff --git a/mlibc/include/stdnoreturn.h b/mlibc/include/stdnoreturn.h
deleted file mode 100644 (file)
index e1e94fd..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_STDNORETURN_H
-#define __MES_STDNORETURN_H 1
-
-#if __GNUC__ && POSIX
-#ifndef _GNU_SOURCE
-#define _GNU_SOURCE
-#endif
-#undef __MES_STDNORETURN_H
-#include_next <stdnoreturn.h>
-
-#else // ! (__GNUC__ && POSIX)
-// whut?
-#endif // ! (__GNUC__ && POSIX)
-
-#endif // __MES_STDNORETURN_H
diff --git a/mlibc/include/string.h b/mlibc/include/string.h
deleted file mode 100644 (file)
index 9a1e134..0000000
+++ /dev/null
@@ -1,58 +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
-#undef __MES_STRING_H
-#include_next <string.h>
-
-#else // ! (__GNUC__ && POSIX)
-
-#ifndef __MES_SIZE_T
-#define __MES_SIZE_T
-typedef unsigned long size_t;
-#endif
-
-#ifndef __MES_SSIZE_T
-#define __MES_SSIZE_T
-typedef long ssize_t;
-#endif
-
-void *memcpy (void *dest, void const *src, size_t n);
-void *memmove (void *dest, void const *src, size_t n);
-void *memset (void *s, int c, size_t n);
-int memcmp (void const *s1, void const *s2, size_t n);
-
-char *strcat (char *dest, char const *src);
-char *strchr (char const *s, int c);
-int strcmp (char const*, char const*);
-char *strcpy (char *dest, char const *src);
-size_t strlen (char const*);
-int strncmp (char const*, char const*, size_t);
-char *strrchr (char const *s, int c);
-char *strstr (char const *haystack, char const *needle);
-
-#endif // ! (__GNUC__ && POSIX)
-
-#endif // __MES_STRING_H
diff --git a/mlibc/include/strings.h b/mlibc/include/strings.h
deleted file mode 100644 (file)
index 49b8f74..0000000
+++ /dev/null
@@ -1,29 +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
-#undef __MES_STRINGS_H
-#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
deleted file mode 100644 (file)
index b156e08..0000000
+++ /dev/null
@@ -1,29 +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
-#undef __MES_SYS_CDEFS_H
-#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
deleted file mode 100644 (file)
index 6dfc20f..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_SYS_MMAN_H
-#define __MES_SYS_MMAN_H 1
-
-#if __GNUC__ && POSIX
-#undef __MES_SYS_MMAN_H
-#include_next <sys/mman.h>
-#else // !(__GNUC__ && POSIX)
-
-#ifndef __MES_SIZE_T
-#define __MES_SIZE_T
-typedef unsigned long size_t;
-#endif
-
-#define PROT_NONE 0
-#define PROT_READ 1
-#define PROT_WRITE 2
-#define PROT_EXEC 4
-
-int mprotect (void *addr, size_t len, int prot);
-
-#endif // !(__GNUC__ && POSIX)
-
-#endif // __MES_SYS_MMAN_H
-
diff --git a/mlibc/include/sys/select.h b/mlibc/include/sys/select.h
deleted file mode 100644 (file)
index a30b89a..0000000
+++ /dev/null
@@ -1,31 +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_SELECT_H
-#define __MES_SYS_SELECT_H 1
-
-#if __GNUC__ && POSIX
-#undef __MES_SYS_SELECT_H
-#include_next <sys/select.h>
-#else  //! (__GNUC__ && POSIX)
-typedef int fd_set;
-#endif //! (__GNUC__ && POSIX)
-
-#endif // __MES_SYS_SELECT_H
-
diff --git a/mlibc/include/sys/stat.h b/mlibc/include/sys/stat.h
deleted file mode 100644 (file)
index 22ae826..0000000
+++ /dev/null
@@ -1,29 +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
-#undef __MES_SYS_STAT_H
-#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
deleted file mode 100644 (file)
index 4e5b218..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_SYS_TIME_H
-#define __MES_SYS_TIME_H 1
-
-#if __GNUC__ && POSIX
-#undef __MES_SYS_TIME_H
-#include_next <sys/time.h>
-
-#else // !(__GNUC__ && POSIX)
-
-struct timeval {
-  long tv_sec;
-  long tv_usec;
-};
-
-struct timezone {
-  int tz_minuteswest;
-  int tz_dsttime;
-};
-
-int gettimeofday (struct timeval *tv, struct timezone *tz);
-
-#endif // !(__GNUC__ && POSIX)
-
-#endif // __MES_SYS_TIME_H
-
diff --git a/mlibc/include/sys/timeb.h b/mlibc/include/sys/timeb.h
deleted file mode 100644 (file)
index a2bacd3..0000000
+++ /dev/null
@@ -1,29 +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
-#undef __MES_SYS_TIMEB_H
-#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
deleted file mode 100644 (file)
index 4e00b73..0000000
+++ /dev/null
@@ -1,31 +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
-#undef __MES_SYS_TYPES_H
-#include_next <sys/types.h>
-#else // ! (__GNUC__ && POSIX)
-#include <endian.h>
-#endif // ! (__GNUC__ && POSIX)
-
-#endif // __MES_SYS_TYPES_H
-
diff --git a/mlibc/include/sys/ucontext.h b/mlibc/include/sys/ucontext.h
deleted file mode 100644 (file)
index 4f68f36..0000000
+++ /dev/null
@@ -1,29 +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
-#undef __MES_SYS_UCONTEXT_H
-#include_next <sys/ucontext.h>
-#endif // (__GNUC__ && POSIX)
-
-#endif // __MES_SYS_UCONTEXT_H
-
diff --git a/mlibc/include/sys/wait.h b/mlibc/include/sys/wait.h
deleted file mode 100644 (file)
index 6d5eb52..0000000
+++ /dev/null
@@ -1,29 +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_WAIT_H
-#define __MES_SYS_WAIT_H 1
-
-#if __GNUC__ && POSIX
-#undef __MES_SYS_WAIT_H
-#include_next <sys/wait.h>
-#endif // (__GNUC__ && POSIX)
-
-#endif // __MES_SYS_WAIT_H
-
diff --git a/mlibc/include/time.h b/mlibc/include/time.h
deleted file mode 100644 (file)
index 6c2fc12..0000000
+++ /dev/null
@@ -1,47 +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
-#undef __MES_TIME_H
-#include_next <time.h>
-#else // ! (__GNUC__ && POSIX)
-typedef int time_t;
-
-struct tm {
-  int tm_sec;    /* Seconds (0-60) */
-  int tm_min;    /* Minutes (0-59) */
-  int tm_hour;   /* Hours (0-23) */
-  int tm_mday;   /* Day of the month (1-31) */
-  int tm_mon;    /* Month (0-11) */
-  int tm_year;   /* Year - 1900 */
-  int tm_wday;   /* Day of the week (0-6, Sunday = 0) */
-  int tm_yday;   /* Day in the year (0-365, 1 Jan = 0) */
-  int tm_isdst;  /* Daylight saving time */
-};
-
-struct tm *localtime (time_t const *timep);
-time_t time (time_t *tloc);
-
-#endif // ! (__GNUC__ && POSIX)
-
-#endif // __MES_TIME_H
-
diff --git a/mlibc/include/unistd.h b/mlibc/include/unistd.h
deleted file mode 100644 (file)
index 89f7ad7..0000000
+++ /dev/null
@@ -1,57 +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
-#undef __MES_UNISTD_H
-#include_next <unistd.h>
-
-#else // ! (__GNUC__ && POSIX)
-
-#ifndef __MES_OFF_T
-#define __MES_OFF_T
-typedef unsigned long off_t;
-#endif
-
-#ifndef __MES_SIZE_T
-#define __MES_SIZE_T
-typedef unsigned long size_t;
-#endif
-
-#ifndef __MES_SSIZE_T
-#define __MES_SSIZE_T
-typedef long ssize_t;
-#endif
-
-int access (char const *s, int mode);
-int close (int fd);
-int execvp (char const *file, char *const argv[]);
-char *getcwd (char *buf, size_t size);
-off_t lseek (int fd, off_t offset, int whence);
-int read (int fd, void* buf, size_t n);
-int unlink (char const *file_name);
-int write (int fd, char const* s, int n);
-#endif // ! (__GNUC__ && POSIX)
-
-#endif // __MES_UNISTD_H
diff --git a/mlibc/libc-gcc+tcc.c b/mlibc/libc-gcc+tcc.c
deleted file mode 100644 (file)
index 18ac36d..0000000
+++ /dev/null
@@ -1,130 +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/>.
- */
-
-#include <libc-gcc.c>
-#include <libc-mes+tcc.c>
-#include <getopt.c>
-
-int errno;
-
-#include <unistd.h>
-#include <stdarg.h>
-#include <signal.h>
-#include <sys/mman.h>
-#include <sys/time.h>
-
-#define SYS_exit   "0x01"
-#define SYS_read   "0x03"
-#define SYS_write  "0x04"
-#define SYS_open   "0x05"
-#define SYS_close  "0x06"
-#define SYS_unlink "0x0a"
-#define SYS_lseek  "0x13"
-#define SYS_access "0x21"
-#define SYS_brk    "0x2d"
-#define SYS_fsync  "0x76"
-#define SYS_getcwd "0xb7"
-
-int
-close (int fd)
-{
-#if !__TINYC__
-  int r;
-  asm (
-       "mov    %0,%%ebx\n\t"
-       "mov    $"SYS_close",%%eax\n\t"
-       "int    $0x80"
-       : "=r" (r)
-       : "" (fd)
-       );
-  return r;
-#endif
-}
-
-int
-unlink (char const *file_name)
-{
-#if !__TINYC__
-  int r;
-  asm (
-       "mov    %0,%%ebx\n\t"
-       "mov    $"SYS_unlink",%%eax\n\t"
-       "int    $0x80"
-       : "=r" (r)
-       : "" (file_name)
-       );
-  return r;
-#endif
-}
-
-off_t
-lseek (int fd, off_t offset, int whence)
-{
-#if !__TINYC__
-  int r;
-  asm (
-       "mov    %1,%%ebx\n\t"
-       "mov    %2,%%ecx\n\t"
-       "mov    %3,%%edx\n\t"
-
-       "mov    $"SYS_lseek",%%eax\n\t"
-       "int  $0x80\n\t"
-
-       "mov    %%eax,%0\n\t"
-       : "=r" (r)
-       : "" (fd), "" (offset), "" (whence)
-       : "eax", "ebx", "ecx", "edx"
-       );
-  return r;
-#endif
-}
-
-char *
-getcwd (char *buf, size_t size)
-{
-#if !__TINYC__
-  int r;
-  asm (
-       "mov    %1,%%ebx\n\t"
-       "mov    %2,%%ecx\n\t"
-
-       "mov    $"SYS_getcwd",%%eax\n\t"
-       "int  $0x80\n\t"
-
-       "mov    %%eax,%0\n\t"
-       : "=r" (r)
-       : "" (buf), "" (size)
-       : "eax", "ebx", "ecx"
-       );
-  return r;
-#endif
-}
-
-int
-__udivdi3 (int a, int b)
-{
-  return a / b;
-}
-
-int
-__umoddi3 (int a, int b)
-{
-  return a % b;
-}
diff --git a/mlibc/libc-gcc.c b/mlibc/libc-gcc.c
deleted file mode 100644 (file)
index 303d4e3..0000000
+++ /dev/null
@@ -1,593 +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/>.
- */
-
-#include <stdio.h>
-#include <mlibc.h>
-
-#if __GNUC__
-#include <stdlib.h>
-#endif
-
-#if (__GNUC__ || __TINYC__) && !POSIX
-
-void
-exit (int code)
-{
-#if !__TINYC__
-  asm (
-       "mov    %0,%%ebx\n\t"
-       "mov    $1,%%eax\n\t"
-       "int    $0x80\n\t"
-       : // no outputs "=" (r)
-       : "" (code)
-       );
-#else // __TINYC__
-  asm (
-       "mov    %0,%%ebx\n\t"
-       "mov    $1,%%eax\n\t"
-       "int    $128\n\t"
-       : // no outputs "=" (r)
-       : "Ir" (code)
-       );
-#endif // __TINYC__
-  // not reached
-  exit (0);
-}
-
-int
-read (int fd, void* buf, size_t n)
-{
-#if !__TINYC__
-  int r;
-  //syscall (SYS_write, fd, s, n));
-  asm (
-       "mov    %1,%%ebx\n\t"
-       "mov    %2,%%ecx\n\t"
-       "mov    %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;
-#endif
-}
-
-int
-write (int fd, char const* s, int n)
-{
-  int r;
-#if __GNUC__
-  asm (
-       "mov    %1,%%ebx\n\t"
-       "mov    %2,%%ecx\n\t"
-       "mov    %3,%%edx\n\t"
-
-       "mov    $0x04,%%eax\n\t"
-       "int    $0x80\n\t"
-       "mov    %%eax,%0\n\t"
-       : "=r" (r)
-       : "" (fd), "" (s), "" (n)
-       : "eax", "ebx", "ecx", "edx"
-       );
-
-  //syscall (SYS_write, fd, s, n));
-#elif __TINYC__
-  asm (
-       "mov    %1,%%ebx\n\t"
-       "mov    %2,%%ecx\n\t"
-       "mov    %3,%%edx\n\t"
-
-       "mov    $4, %%eax\n\t"
-       "int    $128\n\t"
-       "mov    %%eax,%0\n\t"
-       : "=r" (r)
-       : "Ir" (fd), "Ir" (s), "Ir" (n)
-       : "eax", "ebx", "ecx"//, "edx"
-       );
-#endif
-  return r;
-}
-
-int
-open (char const *s, int flags, ...)
-{
-#if !__TINYC__
-  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;
-#endif
-}
-
-int
-access (char const *s, int mode)
-{
-#if !__TINYC__
-  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;
-#endif
-}
-
-void *
-brk (void *p)
-{
-#if !__TINYC__
-  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;
-#endif
-}
-
-int
-fsync (int fd)
-{
-#if !__TINYC__
-  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;
-#endif
-}
-
-int
-fputc (int c, int fd)
-{
-  write (fd, (char*)&c, 1);
-  return 0;
-}
-
-void
-free (void *ptr)
-{
-}
-
-char *g_brk = 0;
-
-void *
-malloc (size_t size)
-{
-  if (!g_brk)
-    g_brk = brk (0);
-  if ((int)brk (g_brk + size) == -1)
-    return 0;
-  char *p = g_brk;
-  g_brk += size;
-  return p;
-}
-
-void *
-memcpy (void *dest, void const *src, size_t n)
-{
-  char* p = dest;
-  char const* q = src;
-  while (n--) *p++ = *q++;
-  return dest;
-}
-
-int
-putchar (int c)
-{
-  write (STDOUT, (char*)&c, 1);
-  return 0;
-}
-
-void *
-realloc (void *ptr, size_t size)
-{
-  void *new = malloc (size);
-  if (ptr && new)
-    {
-      memcpy (new, ptr, size);
-      free (ptr);
-    }
-  return new;
-}
-
-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
-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
-isxdigit (int c)
-{
-  return isdigit (c) || (c>='a') && (c<='f');
-}
-
-int
-isnumber (int c, int base)
-{
-  if (base == 2)
-    return (c>='0') && (c<='1');
-  if (base == 8)
-    return (c>='0') && (c<='7');
-  if (base == 10)
-    return isdigit (c);
-  if (base == 16)
-    return isxdigit (c);
-}
-
-int
-_atoi (char const **p, int base)
-{
-  char const *s = *p;
-  int i = 0;
-  int sign = 1;
-  if (!base) base = 10;
-  if (*s && *s == '-')
-    {
-      sign = -1;
-      s++;
-    }
-  while (isnumber (*s, base))
-    {
-      i *= base;
-      int m = *s > '9' ? 'a' - 10 : '0';
-      i += *s - m;
-      s++;
-    }
-  *p = s;
-  return i * sign;
-}
-
-int
-atoi (char const *s)
-{
-  char const *p = s;
-  return _atoi (&p, 0);
-}
-
-// FIXME: copied from libc-mes.c now
-#include <stdarg.h>
-
-int
-vprintf (char const* format, va_list ap)
-{
-  char const *p = format;
-  while (*p)
-    if (*p != '%')
-      putchar (*p++);
-    else
-      {
-        p++;
-        char c = *p;
-        switch (c)
-          {
-          case '%': {putchar (*p); break;}
-          case 'c': {char c; c = va_arg (ap, char); putchar (c); break;}
-          case 'd': {int d; d = va_arg (ap, int); puts (itoa (d)); break;}
-          case 's': {char *s; s = va_arg (ap, char *); puts (s); break;}
-          default: putchar (*p);
-          }
-        p++;
-      }
-  va_end (ap);
-  return 0;
-}
-
-int
-printf (char const* format, ...)
-{
-  va_list ap;
-  va_start (ap, format);
-  int r = vprintf (format, ap);
-  va_end (ap);
-  return r;
-}
-
-int
-vsprintf (char *str, char const* format, va_list ap)
-{
-  char const *p = format;
-  while (*p)
-    if (*p != '%')
-      *str++ = *p++;
-    else
-      {
-        p++;
-        char c = *p;
-        switch (c)
-          {
-          case '%': {*str++ = *p; break;}
-          case 'c': {char c; c = va_arg (ap, char); *str++ = c; break;}
-          case 'd': {int d; d = va_arg (ap, int); char const *s = itoa (d); while (*s) *str++ = *s++; break;}
-          case 's': {char *s; s = va_arg (ap, char *); while (*s) *str++ = *s++; break;}
-          default: *str++ = *p;
-          }
-        p++;
-      }
-
-  *str = 0;
-  return strlen (str);
-}
-
-int
-sprintf (char *str, char const* format, ...)
-{
-  va_list ap;
-  va_start (ap, format);
-  int r = vsprintf (str, format, ap);
-  va_end (ap);
-  return r;
-}
-#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;
-}
-
-int
-eputc (int c)
-{
-  return fdputc (c, STDERR);
-}
-
-int
-eputs (char const* s)
-{
-  return fdputs (s, STDERR);
-}
-
-int
-fdputc (int c, int fd)
-{
-  write (fd, (char*)&c, 1);
-  return 0;
-}
-
-#if POSIX
-
-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
diff --git a/mlibc/libc-mes+tcc.c b/mlibc/libc-mes+tcc.c
deleted file mode 100644 (file)
index 9af01d9..0000000
+++ /dev/null
@@ -1,385 +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/>.
- */
-
-#include <setjmp.h>
-#include <stdarg.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-#include <signal.h>
-#include <sys/mman.h>
-#include <sys/time.h>
-#include <unistd.h>
-
-#if !__GNUC__ && !__TINYC__
-#include <libc-mes.c>
-#include <getopt.c>
-
-int errno;
-
-int
-close (int fd)
-{
-  asm ("mov____0x8(%ebp),%ebx !8");
-
-  asm ("mov____$i32,%eax SYS_close");
-  asm ("int____$0x80");
-}
-
-int
-unlink (char const *file_name)
-{
-  asm ("mov____0x8(%ebp),%ebx !8");
-
-  asm ("mov____$i32,%eax SYS_unlink");
-  asm ("int____$0x80");
-}
-
-off_t
-lseek (int fd, off_t offset, int whence)
-{
-  asm ("mov____0x8(%ebp),%ebx !8");
-  asm ("mov____0x8(%ebp),%ecx !12");
-  asm ("mov____0x8(%ebp),%edx !16");
-
-  asm ("mov____$i32,%eax SYS_lseek");
-  asm ("int____$0x80");
-}
-
-char *
-getcwd (char *buf, size_t size)
-{
-  asm ("mov____0x8(%ebp),%ebx !8");
-  asm ("mov____0x8(%ebp),%ecx !12");
-
-  asm ("mov____$i32,%eax SYS_getcwd");
-  asm ("int____$0x80");
-}
-#endif // !__GNUC__
-
-
-int
-dlclose (void *handle)
-{
-  return 0;
-}
-
-void *
-dlopen (char const *filename, int flags)
-{
-  return 0;
-}
-
-int
-execvp (char const *file, char *const argv[])
-{
-  eputs ("execvp stub\n");
-  return 0;
-}
-
-int
-fclose (FILE *stream)
-{
-  int fd = (int)stream;
-  return close (fd);
-}
-
-FILE *
-fdopen (int fd, char const *mode)
-{
-  return (FILE*)fd;
-}
-
-int
-fflush (FILE *stream)
-{
-  eputs ("fflush stub\n");
-  return 0;
-}
-
-FILE *
-fopen (char const *pathname, char const *mode)
-{
-  eputs ("fopen stub\n");
-  return 0;
-}
-
-int
-fprintf (FILE *stream, char const *format, ...)
-{
-  va_list ap;
-  va_start (ap, format);
-  int r = vfprintf (stream, format, ap);
-  va_end (ap);
-  return r;
-}
-
-size_t
-fread (void *ptr, size_t size, size_t nmemb, FILE *stream)
-{
-  eputs ("fread stub\n");
-  return 0;
-}
-
-int
-fseek (FILE *stream, long offset, int whence)
-{
-  eputs ("fseek stub\n");
-  return 0;
-}
-
-long
-ftell (FILE *stream)
-{
-  eputs ("ftell stub\n");
-  return 0;
-}
-
-size_t
-fwrite (void const *ptr, size_t size, size_t nmemb, FILE *stream)
-{
-  int fd = (int)stream;
-  return write (fd, ptr, size * nmemb);
-}
-
-int
-gettimeofday (struct timeval *tv, struct timezone *tz)
-{
-  return 0;
-}
-
-struct tm *
-localtime (time_t const *timep)
-{
-  eputs ("localtime stub\n");
-  return 0;
-}
-
-void
-longjmp (jmp_buf env, int val)
-{
-  eputs ("longjmp stub\n");
-}
-
-void *
-memmove (void *dest, void const *src, size_t n)
-{
-  if (dest < src)
-    return memcpy (dest, src, n);
-  char *p = dest + n;
-  char const *q = src +n;
-  while (n--)
-    *--p = *--q;
-  return dest;
-}
-
-void *
-memset (void *s, int c, size_t n)
-{
-  char *p = s;
-  while (n--) *p++ = c;
-  return s;
-}
-
-int
-memcmp (void const *s1, void const *s2, size_t n)
-{
-  char *a = s1;
-  char *b = s2;
-  while (*a == *b && --n) {a++;b++;}
-  return *a - *b;
-}
-
-int
-mprotect (void *addr, size_t len, int prot)
-{
-  return 0;
-}
-
-void
-qsort (void *base, size_t nmemb, size_t size, int (*compar)(void const *, void const *))
-{
-  eputs ("qsort stub\n");
-}
-
-int
-remove (char const *file_name)
-{
-  eputs ("remove stub\n");
-  return 0;
-}
-
-int
-setjmp (jmp_buf env)
-{
-  eputs ("setjmp stub\n");
-  return 0;
-}
-
-int
-sigaction (int signum, struct sigaction const *act, struct sigaction *oldact)
-{
-  return 0;
-}
-
-int
-sigemptyset (sigset_t *set)
-{
-  return 0;
-}
-
-int
-snprintf(char *str,  size_t size,  char const *format, ...)
-{
-  va_list ap;
-  va_start (ap, format);
-  int r = vsprintf (str, format, ap);
-  va_end (ap);
-  return r;
-}
-
-int
-sscanf (char const *str, const char *format, ...)
-{
-  eputs ("sscanf stub\n");
-  return 0;
-}
-
-char *
-strcat (char *dest, char const *src)
-{
-  char *p = strchr (dest, '\0');
-  while (*src++) *p++ = *src++;
-  *p = 0;
-  return dest;
-}
-
-char *
-strchr (char const *s, int c)
-{
-  char const *p = s;
-  while (*p || !c)
-    {
-      if (c == *p) return p;
-      *p++;
-    }
-  return 0;
-}
-
-char *
-strrchr (char const *s, int c)
-{
-  int n = strlen (s);
-  if (!n) return 0;
-  char const *p = s + n - 1;
-  while (*p || !c)
-    {
-      if (c == *p) return p;
-      *p--;
-    }
-  return 0;
-}
-
-char *
-strstr (char const *haystack, char const *needle)
-{
-  eputs ("strstr stub\n");
-  return 0;
-}
-
-long
-strtol (char const *nptr, char **endptr, int base)
-{
-  eputs ("strtol stub\n");
-  if (!strncmp (nptr, "0x", 2))
-    {
-      char const *p = nptr + 2;
-      return _atoi (&p, 16);
-    }
-  return _atoi (&nptr, base);
-}
-
-long long int
-strtoll (char const *nptr, char **endptr, int base)
-{
-  eputs ("strtoll stub\n");
-  return 0;
-}
-
-unsigned long
-strtoul (char const *nptr, char **endptr, int base)
-{
-  eputs ("strtoul stub\n");
-  return 0;
-}
-
-unsigned long long
-strtoull (char const *p, char **end, int base)
-{
-  *end = p;
-  return _atoi (end, base);
-}
-
-time_t time (time_t *tloc)
-{
-  return 0;
-}
-
-int
-vsnprintf (char *str, size_t size, char const *format, va_list ap)
-{
-  return vsprintf (str, format, ap);
-}
-
-void *
-calloc (size_t nmemb, size_t size)
-{
-  size_t count = nmemb * size;
-  void *p = malloc (count);
-  memset (p, 0, count);
-  return p;
-}
-
-int
-vfprintf (FILE* f, char const* format, va_list ap)
-{
-  int fd = (int)f;
-  char const *p = format;
-  while (*p)
-    if (*p != '%')
-      putchar (*p++);
-    else
-      {
-        p++;
-        char c = *p;
-        switch (c)
-          {
-          case '%': {fputc (*p, fd); break;}
-          case 'c': {char c; c = va_arg (ap, char); fputc (c, fd); break;}
-          case 'd': {int d; d = va_arg (ap, int); fputs (itoa (d), fd); break;}
-          case 's': {char *s; s = va_arg (ap, char *); fputs (s, fd); break;}
-          default: {fputc (*p, fd); break;}
-          }
-        p++;
-      }
-  va_end (ap);
-  return 0;
-}
diff --git a/mlibc/libc-mes.c b/mlibc/libc-mes.c
deleted file mode 100644 (file)
index 3fbd68b..0000000
+++ /dev/null
@@ -1,448 +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/>.
- */
-
-#include <stdarg.h>
-#include <stdlib.h>
-
-char **g_environment = 0; // FIXME: todo extern
-int g_stdin = 0;
-
-void _env ();
-
-void
-exit ()
-{
-  asm ("mov____0x8(%ebp),%ebx !8");               // mov    0x8(%ebp),%ebx
-
-  asm ("mov____$i32,%eax SYS_exit");              // mov    $0x1,%eax
-  asm ("int____$0x80");                           // int    $0x80
-}
-
-void
-read ()
-{
-  asm ("mov____0x8(%ebp),%ebx !8");               // mov    0x8(%ebp),%ebx
-  asm ("mov____0x8(%ebp),%ecx !12");              // mov    0x8(%ebp),%ecx
-  asm ("mov____0x8(%ebp),%edx !16");              // mov    0x8(%ebp),%edx
-
-  asm ("mov____$i32,%eax SYS_read");              // mov    $0x3,%eax
-  asm ("int____$0x80");                           // int    $0x80
-}
-
-void
-write ()
-{
-  asm ("mov____0x8(%ebp),%ebx !8");               // mov    0x8(%ebp),%ebx
-  asm ("mov____0x8(%ebp),%ecx !12");              // mov    0x8(%ebp),%ecx
-  asm ("mov____0x8(%ebp),%edx !16");              // mov    0x8(%ebp),%edx
-
-  asm ("mov____$i32,%eax SYS_write");             // mov    $0x4,%eax
-  asm ("int____$0x80");                           // int    $0x80
-}
-
-void
-open ()
-{
-  asm ("mov____0x8(%ebp),%ebx !8");               // mov    0x8(%ebp),%ebx
-  asm ("mov____0x8(%ebp),%ecx !12");              // mov    0x8(%ebp),%ecx
-  asm ("mov____0x8(%ebp),%edx !16");              // mov    0x8(%ebp),%edx
-
-  asm ("mov____$i32,%eax SYS_open");              // mov    $0x5,%eax
-  asm ("int____$0x80");                           // int    $0x80
-}
-
-void
-access ()
-{
-  asm ("mov____0x8(%ebp),%ebx !8");               // mov    0x8(%ebp),%ebx
-  asm ("mov____0x8(%ebp),%ecx !12");              // mov    0x8(%ebp),%ecx
-
-  asm ("mov____$i32,%eax SYS_access");            // mov    $0x21,%eax
-  asm ("int____$0x80");                           // int    $0x80
-}
-
-void
-brk ()
-{
-  asm ("mov____0x8(%ebp),%ebx !8");               // mov    0x8(%ebp),%ebx
-
-  asm ("mov____$i32,%eax SYS_brk");               // mov    $0x2d,%eax
-  asm ("int____$0x80");                           // int    $0x80
-}
-
-void
-fsync ()
-{
-  asm ("mov____0x8(%ebp),%ebx !8");               // mov    0x8(%ebp),%ebx
-
-  asm ("mov____$i32,%eax SYS_fsync");             // mov    $0x7c,%eax
-  asm ("int____$0x80");                           // int    $0x80
-}
-
-int
-strlen (char const* s)
-{
-  int i = 0;
-  while (s[i]) i++;
-  return i;
-}
-
-int
-eputc (int c)
-{
-  return fputc (c, 2);
-}
-
-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;
-}
-
-int
-fgetc (int fd)
-{
-  char c;
-  int i;
-  int r = read (fd, &c, 1);
-  if (r < 1) return -1;
-  i = c;
-  return i;
-}
-
-void
-free (void *ptr)
-{
-}
-
-//#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 (int c)
-{
-  return (c>='0') && (c<='9');
-}
-
-int
-isxdigit (int c)
-{
-  return isdigit (c) || (c>='a') && (c<='f');
-}
-
-int
-isnumber (int c, int base)
-{
-  if (base == 2)
-    return (c>='0') && (c<='1');
-  if (base == 8)
-    return (c>='0') && (c<='7');
-  if (base == 10)
-    return isdigit (c);
-  if (base == 16)
-    return isxdigit (c);
-}
-
-int
-_atoi (char const **p, int base)
-{
-  char const *s = *p;
-  int i = 0;
-  int sign = 1;
-  if (!base) base = 10;
-  if (*s && *s == '-')
-    {
-      sign = -1;
-      s++;
-    }
-  while (isnumber (*s, base))
-    {
-      i *= base;
-      int m = *s > '9' ? 'a' - 10 : '0';
-      i += *s - m;
-      s++;
-    }
-  *p = s;
-  return i * sign;
-}
-
-int
-atoi (char const *s)
-{
-  char const *p = s;
-  return _atoi (&p, 0);
-}
-
-char *g_brk = 0;
-
-void *
-malloc (size_t size)
-{
-  if (!g_brk)
-    g_brk = brk (0);
-  if (brk (g_brk + size) == -1)
-    return 0;
-  char *p = g_brk;
-  g_brk += size;
-  return p;
-}
-
-void *
-memcpy (void *dest, void const *src, size_t n)
-{
-  char* p = dest;
-  char* q = src;
-  while (n--) *p++ = *q++;
-  return dest;
-}
-
-void *
-realloc (void *ptr, size_t size)
-{
-  void *new = malloc (size);
-  if (ptr && new)
-    {
-      memcpy (new, ptr, size);
-      free (ptr);
-    }
-  return new;
-}
-
-int
-strncmp (char const* a, char const* b, int 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
-vprintf (char const* format, va_list ap)
-{
-  char const *p = format;
-  while (*p)
-    if (*p != '%')
-      putchar (*p++);
-    else
-      {
-        p++;
-        char c = *p;
-        switch (c)
-          {
-          case '%': {putchar (*p); break;}
-          case 'c': {char c; c = va_arg (ap, char); putchar (c); break;}
-          case 'd': {int d; d = va_arg (ap, int); puts (itoa (d)); break;}
-          case 's': {char *s; s = va_arg (ap, char *); puts (s); break;}
-          default: {putchar (*p); break;}
-          }
-        p++;
-      }
-  va_end (ap);
-  return 0;
-}
-
-int
-printf (char const* format, ...)
-{
-  va_list ap;
-  va_start (ap, format);
-  int r = vprintf (format, ap);
-  va_end (ap);
-  return r;
-}
-
-int
-vsprintf (char *str, char const* format, va_list ap)
-{
-  char const *p = format;
-  while (*p)
-    if (*p != '%')
-      *str++ = *p++;
-    else
-      {
-        p++;
-        char c = *p;
-        switch (c)
-          {
-          case '%': {*str++ = *p; break;}
-          case 'c': {char c; c = va_arg (ap, char); *str++ = c; break;}
-          case 'd': {int d; d = va_arg (ap, int); char const *s; s = itoa (d); while (*s) *str++ = *s++; break;}
-          case 's': {char *s; s = va_arg (ap, char *); while (*s) *str++ = *s++; break;}
-          default: {*str++ = *p; break;}
-          }
-        p++;
-      }
-  va_end (ap);
-  *str = 0;
-  return strlen (str);
-}
-
-int
-sprintf (char *str, char const* format, ...)
-{
-  va_list ap;
-  va_start (ap, format);
-  int r = vsprintf (str, format, ap);
-  va_end (ap);
-  return r;
-}
diff --git a/mlibc/mini-libc-mes.c b/mlibc/mini-libc-mes.c
deleted file mode 100644 (file)
index 317c771..0000000
+++ /dev/null
@@ -1,63 +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 ("mov____0x8(%ebp),%ebx !8");
-
-  asm ("mov____$i32,%eax SYS_exit");
-  asm ("int____$0x80");
-}
-
-void
-write ()
-{
-  asm ("mov____0x8(%ebp),%ebx !8");
-  asm ("mov____0x8(%ebp),%ecx !12");
-  asm ("mov____0x8(%ebp),%edx !16");
-
-  asm ("mov____$i32,%eax SYS_write");
-  asm ("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
-puts (char const* s)
-{
-  int i = strlen (s);
-  write (1, s, i);
-  return 0;
-}
index ab4cff552066fa927d40c1be87488ff5b54a0e70..e11e99ad4380c72a21f450a07aef201c5b8ef00b 100644 (file)
@@ -63,9 +63,9 @@
 (define mes? (pair? (current-module)))
 
 (define* (c99-input->full-ast #:key (defines '()) (includes '()))
-  (let ((include (if (equal? %prefix "") "mlibc/include" (string-append %prefix "/share/mlibc/include"))))
+  (let ((include (if (equal? %prefix "") "include" (string-append %prefix "/share/include"))))
     (parse-c99
-     #:inc-dirs (append includes (cons* include "mlibc/include" "mlibc" (or (and=> (getenv "C_INCLUDE_PATH") (cut string-split <> #\:)) '())))
+     #:inc-dirs (append includes (cons* include "include" "lib" (or (and=> (getenv "C_INCLUDE_PATH") (cut string-split <> #\:)) '())))
      #:cpp-defs `(
                   "NULL=0"
                   "__linux__=1"