From 649d7b68dc2ae32707e1b07ed82dad8ae4fef31d Mon Sep 17 00:00:00 2001 From: fosslinux Date: Fri, 25 Dec 2020 18:40:14 +1100 Subject: [PATCH] Add mes and mescc-tools-extra mescc-tools-extra contains two important tools: - cp - chmod mes first builds itself from a mes 0.21 seed as used by guix, and then builds a mes 0.22 and then mes 0.22 using that created mes 0.22. It does /not/ use bootstrap.sh as we don't have a proper shell at this point, it has been manually adapted for kaem. --- rootfs.sh | 21 +- sysa/after.kaem | 10 - sysa/after.kaem.run | 26 +- sysa/busybox.static | Bin 2135328 -> 0 bytes sysa/mes-0.22/.dir-locals.el | 112 + sysa/mes-0.22/.gitignore | 117 + sysa/mes-0.22/AUTHORS | 88 + sysa/mes-0.22/BLURB | 23 + sysa/mes-0.22/BOOTSTRAP | 164 + sysa/mes-0.22/COPYING | 674 + sysa/mes-0.22/ChangeLog | 12616 ++++++++++++++++ sysa/mes-0.22/HACKING | 190 + sysa/mes-0.22/INSTALL | 111 + sysa/mes-0.22/NEWS | 599 + sysa/mes-0.22/PORTING | 84 + sysa/mes-0.22/README | 84 + sysa/mes-0.22/ROADMAP | 100 + sysa/mes-0.22/build-aux/GNUmakefile.in | 402 + sysa/mes-0.22/build-aux/bootstrap.sh.in | 114 + sysa/mes-0.22/build-aux/build-guile.sh | 65 + sysa/mes-0.22/build-aux/build-lib.sh | 81 + sysa/mes-0.22/build-aux/build-mes.sh | 57 + sysa/mes-0.22/build-aux/build-scaffold.sh | 149 + sysa/mes-0.22/build-aux/build-source-lib.sh | 53 + sysa/mes-0.22/build-aux/build.sh.in | 141 + sysa/mes-0.22/build-aux/cc.sh | 56 + sysa/mes-0.22/build-aux/cflags.sh | 56 + sysa/mes-0.22/build-aux/check-boot.sh | 121 + sysa/mes-0.22/build-aux/check-mes.sh | 62 + sysa/mes-0.22/build-aux/check-mescc.sh | 290 + sysa/mes-0.22/build-aux/check.sh.in | 101 + sysa/mes-0.22/build-aux/config.make.in | 82 + sysa/mes-0.22/build-aux/config.sh.in | 104 + sysa/mes-0.22/build-aux/configure-lib.sh | 422 + sysa/mes-0.22/build-aux/export.make | 160 + sysa/mes-0.22/build-aux/gendocs.sh | 510 + sysa/mes-0.22/build-aux/gitlog-to-changelog | 499 + sysa/mes-0.22/build-aux/indent.sh | 21 + sysa/mes-0.22/build-aux/install.sh.in | 133 + sysa/mes-0.22/build-aux/manifest.scm | 23 + sysa/mes-0.22/build-aux/mes-snarf.scm | 205 + sysa/mes-0.22/build-aux/pre-inst-env.in | 54 + sysa/mes-0.22/build-aux/setup-mes.sh | 90 + sysa/mes-0.22/build-aux/snarf.sh | 36 + sysa/mes-0.22/build-aux/test-boot.sh | 38 + sysa/mes-0.22/build-aux/test-c.sh | 85 + sysa/mes-0.22/build-aux/test-driver | 148 + sysa/mes-0.22/build-aux/test-suite.sh | 143 + sysa/mes-0.22/build-aux/trace.sh | 49 + sysa/mes-0.22/build-aux/uninstall.sh.in | 96 + sysa/mes-0.22/configure | 715 + sysa/mes-0.22/configure.sh | 280 + sysa/mes-0.22/doc/announce/ANNOUNCE | 45 + sysa/mes-0.22/doc/announce/ANNOUNCE-0.10 | 96 + sysa/mes-0.22/doc/announce/ANNOUNCE-0.11 | 70 + sysa/mes-0.22/doc/announce/ANNOUNCE-0.12 | 97 + sysa/mes-0.22/doc/announce/ANNOUNCE-0.13 | 81 + sysa/mes-0.22/doc/announce/ANNOUNCE-0.14 | 101 + sysa/mes-0.22/doc/announce/ANNOUNCE-0.15 | 106 + sysa/mes-0.22/doc/announce/ANNOUNCE-0.16 | 100 + sysa/mes-0.22/doc/announce/ANNOUNCE-0.17 | 113 + sysa/mes-0.22/doc/announce/ANNOUNCE-0.18 | 133 + sysa/mes-0.22/doc/announce/ANNOUNCE-0.19 | 155 + sysa/mes-0.22/doc/announce/ANNOUNCE-0.20 | 133 + sysa/mes-0.22/doc/announce/ANNOUNCE-0.21 | 132 + sysa/mes-0.22/doc/announce/ANNOUNCE-0.22 | 162 + sysa/mes-0.22/doc/announce/ANNOUNCE-0.3 | 99 + sysa/mes-0.22/doc/announce/ANNOUNCE-0.4 | 103 + sysa/mes-0.22/doc/announce/ANNOUNCE-0.5 | 79 + sysa/mes-0.22/doc/announce/ANNOUNCE-0.6 | 82 + sysa/mes-0.22/doc/announce/ANNOUNCE-0.7 | 83 + sysa/mes-0.22/doc/announce/ANNOUNCE-0.8 | 70 + sysa/mes-0.22/doc/announce/ANNOUNCE-0.9 | 93 + sysa/mes-0.22/doc/announce/ANNOUNCE-2 | 87 + sysa/mes-0.22/doc/announce/README | 11 + sysa/mes-0.22/doc/announce/UPDATE-0.13 | 87 + sysa/mes-0.22/doc/fdl-1.3.texi | 505 + sysa/mes-0.22/doc/gendocs_template | 91 + sysa/mes-0.22/doc/images/README | 13 + .../mes-0.22/doc/images/gcc-mesboot-graph.dot | 123 + sysa/mes-0.22/doc/mes.texi | 1252 ++ sysa/mes-0.22/guix.scm | 43 + sysa/mes-0.22/guix/git/mes.scm | 175 + sysa/mes-0.22/include/alloca.h | 44 + sysa/mes-0.22/include/ar.h | 56 + sysa/mes-0.22/include/argz.h | 40 + sysa/mes-0.22/include/assert.h | 34 + sysa/mes-0.22/include/ctype.h | 51 + sysa/mes-0.22/include/dirent.h | 76 + sysa/mes-0.22/include/dirstream.h | 55 + sysa/mes-0.22/include/dlfcn.h | 44 + sysa/mes-0.22/include/endian.h | 36 + sysa/mes-0.22/include/errno.h | 72 + sysa/mes-0.22/include/fcntl.h | 70 + sysa/mes-0.22/include/features.h | 28 + sysa/mes-0.22/include/float.h | 34 + sysa/mes-0.22/include/getopt.h | 62 + sysa/mes-0.22/include/gnu/hurd-types.h | 393 + sysa/mes-0.22/include/gnu/hurd.h | 84 + sysa/mes-0.22/include/gnu/syscall.h | 144 + sysa/mes-0.22/include/grp.h | 45 + sysa/mes-0.22/include/inttypes.h | 34 + sysa/mes-0.22/include/libgen.h | 34 + sysa/mes-0.22/include/limits.h | 41 + sysa/mes-0.22/include/linux/syscall.h | 31 + sysa/mes-0.22/include/linux/x86/syscall.h | 91 + sysa/mes-0.22/include/linux/x86_64/syscall.h | 88 + sysa/mes-0.22/include/locale.h | 45 + sysa/mes-0.22/include/mach/mach-init.h | 50 + sysa/mes-0.22/include/math.h | 43 + sysa/mes-0.22/include/memory.h | 36 + sysa/mes-0.22/include/mes/builtins.h | 416 + sysa/mes-0.22/include/mes/constants.h | 324 + sysa/mes-0.22/include/mes/lib-mini.h | 98 + sysa/mes-0.22/include/mes/lib.h | 69 + sysa/mes-0.22/include/mes/macros.h | 80 + sysa/mes-0.22/include/mes/mes.h | 106 + sysa/mes-0.22/include/pwd.h | 46 + sysa/mes-0.22/include/setjmp.h | 47 + sysa/mes-0.22/include/signal.h | 246 + sysa/mes-0.22/include/stdarg.h | 55 + sysa/mes-0.22/include/stdbool.h | 36 + sysa/mes-0.22/include/stddef.h | 42 + sysa/mes-0.22/include/stdint.h | 108 + sysa/mes-0.22/include/stdio.h | 94 + sysa/mes-0.22/include/stdlib.h | 69 + sysa/mes-0.22/include/stdnoreturn.h | 34 + sysa/mes-0.22/include/string.h | 60 + sysa/mes-0.22/include/strings.h | 28 + sysa/mes-0.22/include/sys/cdefs.h | 28 + sysa/mes-0.22/include/sys/dir.h | 32 + sysa/mes-0.22/include/sys/file.h | 32 + sysa/mes-0.22/include/sys/ioctl.h | 36 + sysa/mes-0.22/include/sys/mman.h | 43 + sysa/mes-0.22/include/sys/param.h | 31 + sysa/mes-0.22/include/sys/resource.h | 60 + sysa/mes-0.22/include/sys/select.h | 30 + sysa/mes-0.22/include/sys/stat.h | 123 + sysa/mes-0.22/include/sys/time.h | 56 + sysa/mes-0.22/include/sys/timeb.h | 28 + sysa/mes-0.22/include/sys/times.h | 53 + sysa/mes-0.22/include/sys/types.h | 152 + sysa/mes-0.22/include/sys/ucontext.h | 28 + sysa/mes-0.22/include/sys/user.h | 111 + sysa/mes-0.22/include/sys/wait.h | 41 + sysa/mes-0.22/include/termio.h | 72 + sysa/mes-0.22/include/time.h | 68 + sysa/mes-0.22/include/unistd.h | 98 + sysa/mes-0.22/lib/ctype/isalnum.c | 27 + sysa/mes-0.22/lib/ctype/isalpha.c | 27 + sysa/mes-0.22/lib/ctype/isascii.c | 27 + sysa/mes-0.22/lib/ctype/iscntrl.c | 27 + sysa/mes-0.22/lib/ctype/isdigit.c | 27 + sysa/mes-0.22/lib/ctype/isgraph.c | 27 + sysa/mes-0.22/lib/ctype/islower.c | 27 + sysa/mes-0.22/lib/ctype/isnumber.c | 34 + sysa/mes-0.22/lib/ctype/isprint.c | 27 + sysa/mes-0.22/lib/ctype/ispunct.c | 27 + sysa/mes-0.22/lib/ctype/isspace.c | 27 + sysa/mes-0.22/lib/ctype/isupper.c | 27 + sysa/mes-0.22/lib/ctype/isxdigit.c | 28 + sysa/mes-0.22/lib/ctype/tolower.c | 29 + sysa/mes-0.22/lib/ctype/toupper.c | 29 + sysa/mes-0.22/lib/dirent/__getdirentries.c | 36 + sysa/mes-0.22/lib/dirent/closedir.c | 54 + sysa/mes-0.22/lib/dirent/opendir.c | 82 + sysa/mes-0.22/lib/dirent/readdir.c | 88 + sysa/mes-0.22/lib/freebsd/x86-mes-gcc/crt1.c | 76 + .../lib/freebsd/x86-mes-gcc/exit-42.S | 47 + .../lib/freebsd/x86-mes-gcc/hello-mes.S | 60 + sysa/mes-0.22/lib/freebsd/x86-mes-gcc/mini.c | 64 + .../mes-0.22/lib/freebsd/x86-mes-mescc/crt1.c | 65 + .../mes-0.22/lib/freebsd/x86-mes-mescc/mini.c | 43 + .../lib/freebsd/x86-mes/elf32-0exit-42.hex2 | 39 + .../lib/freebsd/x86-mes/elf32-0header.hex2 | 85 + .../lib/freebsd/x86-mes/elf32-0hello-mes.hex2 | 58 + .../freebsd/x86-mes/elf32-body-exit-42.hex2 | 54 + .../freebsd/x86-mes/elf32-body-hello-mes.hex2 | 69 + .../x86-mes/elf32-footer-single-main.hex2 | 64 + .../lib/freebsd/x86-mes/elf32-header.hex2 | 225 + sysa/mes-0.22/lib/gnu/_exit.c | 42 + sysa/mes-0.22/lib/gnu/_open3.c | 48 + sysa/mes-0.22/lib/gnu/_read.c | 34 + sysa/mes-0.22/lib/gnu/_write.c | 34 + sysa/mes-0.22/lib/gnu/dir-lookup.c | 76 + sysa/mes-0.22/lib/gnu/exec-startup-get-data.c | 68 + sysa/mes-0.22/lib/gnu/fd-get.c | 37 + sysa/mes-0.22/lib/gnu/fd-read.c | 40 + sysa/mes-0.22/lib/gnu/fd-write.c | 41 + sysa/mes-0.22/lib/gnu/hurd-start.c | 60 + sysa/mes-0.22/lib/gnu/io-read.c | 60 + sysa/mes-0.22/lib/gnu/io-write.c | 50 + sysa/mes-0.22/lib/gnu/malloc.c | 34 + sysa/mes-0.22/lib/gnu/proc-mark-exit.c | 28 + sysa/mes-0.22/lib/gnu/syscall.c | 143 + sysa/mes-0.22/lib/gnu/task-get-special-port.c | 37 + sysa/mes-0.22/lib/gnu/task-terminate.c | 27 + sysa/mes-0.22/lib/gnu/vm-allocate.c | 76 + sysa/mes-0.22/lib/gnu/vm-statistics.c | 41 + sysa/mes-0.22/lib/gnu/x86-mes-gcc/crt1.c | 43 + sysa/mes-0.22/lib/gnu/x86-mes-gcc/mini.c | 23 + sysa/mes-0.22/lib/libtcc1.c | 214 + sysa/mes-0.22/lib/linux/_getcwd.c | 32 + sysa/mes-0.22/lib/linux/_open3.c | 37 + sysa/mes-0.22/lib/linux/_read.c | 30 + sysa/mes-0.22/lib/linux/access.c | 28 + sysa/mes-0.22/lib/linux/brk.c | 28 + sysa/mes-0.22/lib/linux/chdir.c | 28 + sysa/mes-0.22/lib/linux/chmod.c | 29 + sysa/mes-0.22/lib/linux/clock_gettime.c | 29 + sysa/mes-0.22/lib/linux/close.c | 31 + sysa/mes-0.22/lib/linux/dup.c | 28 + sysa/mes-0.22/lib/linux/dup2.c | 28 + sysa/mes-0.22/lib/linux/execve.c | 28 + sysa/mes-0.22/lib/linux/fcntl.c | 34 + sysa/mes-0.22/lib/linux/fork.c | 28 + sysa/mes-0.22/lib/linux/fstat.c | 29 + sysa/mes-0.22/lib/linux/fsync.c | 28 + sysa/mes-0.22/lib/linux/getdents.c | 29 + sysa/mes-0.22/lib/linux/getegid.c | 29 + sysa/mes-0.22/lib/linux/geteuid.c | 29 + sysa/mes-0.22/lib/linux/getgid.c | 29 + sysa/mes-0.22/lib/linux/getpid.c | 29 + sysa/mes-0.22/lib/linux/getppid.c | 29 + sysa/mes-0.22/lib/linux/getrusage.c | 29 + sysa/mes-0.22/lib/linux/gettimeofday.c | 29 + sysa/mes-0.22/lib/linux/getuid.c | 29 + sysa/mes-0.22/lib/linux/ioctl.c | 42 + sysa/mes-0.22/lib/linux/kill.c | 29 + sysa/mes-0.22/lib/linux/link.c | 28 + sysa/mes-0.22/lib/linux/lseek.c | 46 + sysa/mes-0.22/lib/linux/lstat.c | 29 + sysa/mes-0.22/lib/linux/mkdir.c | 29 + sysa/mes-0.22/lib/linux/mknod.c | 29 + sysa/mes-0.22/lib/linux/nanosleep.c | 30 + sysa/mes-0.22/lib/linux/pipe.c | 29 + sysa/mes-0.22/lib/linux/read.c | 50 + sysa/mes-0.22/lib/linux/readlink.c | 29 + sysa/mes-0.22/lib/linux/rename.c | 29 + sysa/mes-0.22/lib/linux/rmdir.c | 28 + sysa/mes-0.22/lib/linux/setgid.c | 29 + sysa/mes-0.22/lib/linux/settimer.c | 30 + sysa/mes-0.22/lib/linux/setuid.c | 29 + sysa/mes-0.22/lib/linux/signal.c | 72 + sysa/mes-0.22/lib/linux/sigprogmask.c | 34 + sysa/mes-0.22/lib/linux/stat.c | 29 + sysa/mes-0.22/lib/linux/symlink.c | 29 + sysa/mes-0.22/lib/linux/time.c | 29 + sysa/mes-0.22/lib/linux/unlink.c | 28 + sysa/mes-0.22/lib/linux/waitpid.c | 35 + sysa/mes-0.22/lib/linux/x86-mes-gcc/crt0.c | 61 + sysa/mes-0.22/lib/linux/x86-mes-gcc/crt1.c | 77 + sysa/mes-0.22/lib/linux/x86-mes-gcc/crti.c | 19 + sysa/mes-0.22/lib/linux/x86-mes-gcc/crtn.c | 19 + sysa/mes-0.22/lib/linux/x86-mes-gcc/exit-42.S | 46 + .../lib/linux/x86-mes-gcc/hello-mes.S | 58 + sysa/mes-0.22/lib/linux/x86-mes-gcc/mini.c | 58 + sysa/mes-0.22/lib/linux/x86-mes-gcc/syscall.c | 143 + sysa/mes-0.22/lib/linux/x86-mes-mescc/crt1.c | 63 + .../lib/linux/x86-mes-mescc/exit-42.S | 28 + .../lib/linux/x86-mes-mescc/hello-mes.S | 40 + sysa/mes-0.22/lib/linux/x86-mes-mescc/mini.c | 37 + .../lib/linux/x86-mes-mescc/syscall.c | 137 + .../lib/linux/x86-mes/elf32-0exit-42.hex2 | 34 + .../lib/linux/x86-mes/elf32-0header.hex2 | 85 + .../lib/linux/x86-mes/elf32-0hello-mes.hex2 | 53 + .../lib/linux/x86-mes/elf32-body-exit-42.hex2 | 50 + .../linux/x86-mes/elf32-body-hello-mes.hex2 | 63 + .../x86-mes/elf32-footer-single-main.hex2 | 64 + .../lib/linux/x86-mes/elf32-header.hex2 | 225 + sysa/mes-0.22/lib/linux/x86_64-mes-gcc/crt0.c | 63 + sysa/mes-0.22/lib/linux/x86_64-mes-gcc/crt1.c | 79 + sysa/mes-0.22/lib/linux/x86_64-mes-gcc/crti.c | 19 + sysa/mes-0.22/lib/linux/x86_64-mes-gcc/crtn.c | 19 + .../lib/linux/x86_64-mes-gcc/exit-42.S | 46 + .../lib/linux/x86_64-mes-gcc/hello-mes.S | 58 + sysa/mes-0.22/lib/linux/x86_64-mes-gcc/mini.c | 57 + .../lib/linux/x86_64-mes-gcc/syscall.c | 152 + .../lib/linux/x86_64-mes-mescc/crt1.c | 79 + .../lib/linux/x86_64-mes-mescc/exit-42.S | 28 + .../lib/linux/x86_64-mes-mescc/hello-mes.S | 40 + .../lib/linux/x86_64-mes-mescc/mini.c | 45 + .../lib/linux/x86_64-mes-mescc/syscall.c | 123 + .../lib/linux/x86_64-mes/elf64-0exit-42.hex2 | 36 + .../lib/linux/x86_64-mes/elf64-0header.hex2 | 83 + .../linux/x86_64-mes/elf64-0hello-mes.hex2 | 52 + .../linux/x86_64-mes/elf64-body-exit-42.hex2 | 51 + .../x86_64-mes/elf64-body-hello-mes.hex2 | 63 + .../x86_64-mes/elf64-footer-single-main.hex2 | 62 + .../lib/linux/x86_64-mes/elf64-header.hex2 | 240 + sysa/mes-0.22/lib/mach/mach-init.c | 75 + sysa/mes-0.22/lib/mach/mach_host_self.S | 3 + sysa/mes-0.22/lib/mach/mach_msg_trap.S | 3 + sysa/mes-0.22/lib/mach/mach_reply_port.S | 3 + sysa/mes-0.22/lib/mach/mach_task_self.S | 3 + sysa/mes-0.22/lib/mach/mach_thread_self.S | 19 + sysa/mes-0.22/lib/mach/msg.c | 145 + sysa/mes-0.22/lib/math/ceil.c | 29 + sysa/mes-0.22/lib/math/fabs.c | 29 + sysa/mes-0.22/lib/math/floor.c | 29 + sysa/mes-0.22/lib/mes/__assert_fail.c | 32 + sysa/mes-0.22/lib/mes/__buffered_read.c | 109 + sysa/mes-0.22/lib/mes/__mes_debug.c | 36 + sysa/mes-0.22/lib/mes/abtod.c | 53 + sysa/mes-0.22/lib/mes/abtol.c | 50 + sysa/mes-0.22/lib/mes/div.c | 110 + sysa/mes-0.22/lib/mes/dtoab.c | 46 + sysa/mes-0.22/lib/mes/eputc.c | 27 + sysa/mes-0.22/lib/mes/eputs.c | 30 + sysa/mes-0.22/lib/mes/fdgetc.c | 74 + sysa/mes-0.22/lib/mes/fdgets.c | 40 + sysa/mes-0.22/lib/mes/fdputc.c | 28 + sysa/mes-0.22/lib/mes/fdputs.c | 30 + sysa/mes-0.22/lib/mes/fdungetc.c | 39 + sysa/mes-0.22/lib/mes/itoa.c | 27 + sysa/mes-0.22/lib/mes/ltoa.c | 27 + sysa/mes-0.22/lib/mes/ltoab.c | 27 + sysa/mes-0.22/lib/mes/mes_open.c | 50 + sysa/mes-0.22/lib/mes/mini-write.c | 36 + sysa/mes-0.22/lib/mes/ntoab.c | 59 + sysa/mes-0.22/lib/mes/oputc.c | 27 + sysa/mes-0.22/lib/mes/oputs.c | 30 + sysa/mes-0.22/lib/mes/search-path.c | 66 + sysa/mes-0.22/lib/mes/ultoa.c | 27 + sysa/mes-0.22/lib/mes/utoa.c | 27 + sysa/mes-0.22/lib/posix/alarm.c | 38 + sysa/mes-0.22/lib/posix/buffered-read.c | 48 + sysa/mes-0.22/lib/posix/execl.c | 67 + sysa/mes-0.22/lib/posix/execlp.c | 48 + sysa/mes-0.22/lib/posix/execv.c | 28 + sysa/mes-0.22/lib/posix/execvp.c | 53 + sysa/mes-0.22/lib/posix/getcwd.c | 33 + sysa/mes-0.22/lib/posix/getenv.c | 37 + sysa/mes-0.22/lib/posix/getopt.c | 368 + sysa/mes-0.22/lib/posix/isatty.c | 81 + sysa/mes-0.22/lib/posix/mktemp.c | 36 + sysa/mes-0.22/lib/posix/open.c | 46 + sysa/mes-0.22/lib/posix/raise.c | 28 + sysa/mes-0.22/lib/posix/sbrk.c | 36 + sysa/mes-0.22/lib/posix/setenv.c | 46 + sysa/mes-0.22/lib/posix/sleep.c | 33 + sysa/mes-0.22/lib/posix/unsetenv.c | 41 + sysa/mes-0.22/lib/posix/wait.c | 27 + sysa/mes-0.22/lib/posix/write.c | 41 + sysa/mes-0.22/lib/stdio/clearerr.c | 29 + sysa/mes-0.22/lib/stdio/fclose.c | 29 + sysa/mes-0.22/lib/stdio/fdopen.c | 27 + sysa/mes-0.22/lib/stdio/feof.c | 30 + sysa/mes-0.22/lib/stdio/ferror.c | 30 + sysa/mes-0.22/lib/stdio/fflush.c | 32 + sysa/mes-0.22/lib/stdio/fgetc.c | 27 + sysa/mes-0.22/lib/stdio/fgets.c | 28 + sysa/mes-0.22/lib/stdio/fileno.c | 27 + sysa/mes-0.22/lib/stdio/fopen.c | 74 + sysa/mes-0.22/lib/stdio/fprintf.c | 33 + sysa/mes-0.22/lib/stdio/fputc.c | 27 + sysa/mes-0.22/lib/stdio/fputs.c | 27 + sysa/mes-0.22/lib/stdio/fread.c | 76 + sysa/mes-0.22/lib/stdio/freopen.c | 28 + sysa/mes-0.22/lib/stdio/fscanf.c | 33 + sysa/mes-0.22/lib/stdio/fseek.c | 41 + sysa/mes-0.22/lib/stdio/ftell.c | 29 + sysa/mes-0.22/lib/stdio/fwrite.c | 52 + sysa/mes-0.22/lib/stdio/getc.c | 27 + sysa/mes-0.22/lib/stdio/getchar.c | 27 + sysa/mes-0.22/lib/stdio/perror.c | 30 + sysa/mes-0.22/lib/stdio/printf.c | 39 + sysa/mes-0.22/lib/stdio/putc.c | 27 + sysa/mes-0.22/lib/stdio/putchar.c | 28 + sysa/mes-0.22/lib/stdio/remove.c | 34 + sysa/mes-0.22/lib/stdio/snprintf.c | 39 + sysa/mes-0.22/lib/stdio/sprintf.c | 39 + sysa/mes-0.22/lib/stdio/sscanf.c | 33 + sysa/mes-0.22/lib/stdio/ungetc.c | 27 + sysa/mes-0.22/lib/stdio/vfprintf.c | 252 + sysa/mes-0.22/lib/stdio/vfscanf.c | 122 + sysa/mes-0.22/lib/stdio/vprintf.c | 29 + sysa/mes-0.22/lib/stdio/vsnprintf.c | 275 + sysa/mes-0.22/lib/stdio/vsprintf.c | 28 + sysa/mes-0.22/lib/stdio/vsscanf.c | 93 + sysa/mes-0.22/lib/stdlib/__exit.c | 27 + sysa/mes-0.22/lib/stdlib/abort.c | 27 + sysa/mes-0.22/lib/stdlib/abs.c | 29 + sysa/mes-0.22/lib/stdlib/alloca.c | 102 + sysa/mes-0.22/lib/stdlib/atexit.c | 28 + sysa/mes-0.22/lib/stdlib/atof.c | 28 + sysa/mes-0.22/lib/stdlib/atoi.c | 28 + sysa/mes-0.22/lib/stdlib/atol.c | 27 + sysa/mes-0.22/lib/stdlib/calloc.c | 31 + sysa/mes-0.22/lib/stdlib/exit.c | 31 + sysa/mes-0.22/lib/stdlib/free.c | 26 + sysa/mes-0.22/lib/stdlib/malloc.c | 46 + sysa/mes-0.22/lib/stdlib/mbstowcs.c | 35 + sysa/mes-0.22/lib/stdlib/puts.c | 28 + sysa/mes-0.22/lib/stdlib/qsort.c | 75 + sysa/mes-0.22/lib/stdlib/realloc.c | 34 + sysa/mes-0.22/lib/stdlib/strtod.c | 41 + sysa/mes-0.22/lib/stdlib/strtof.c | 27 + sysa/mes-0.22/lib/stdlib/strtol.c | 40 + sysa/mes-0.22/lib/stdlib/strtold.c | 27 + sysa/mes-0.22/lib/stdlib/strtoll.c | 27 + sysa/mes-0.22/lib/stdlib/strtoul.c | 27 + sysa/mes-0.22/lib/stdlib/strtoull.c | 27 + sysa/mes-0.22/lib/string/argz-count.c | 43 + sysa/mes-0.22/lib/string/argz-extract.c | 52 + sysa/mes-0.22/lib/string/bcmp.c | 27 + sysa/mes-0.22/lib/string/bcopy.c | 27 + sysa/mes-0.22/lib/string/bzero.c | 35 + sysa/mes-0.22/lib/string/index.c | 31 + sysa/mes-0.22/lib/string/memchr.c | 34 + sysa/mes-0.22/lib/string/memcmp.c | 36 + sysa/mes-0.22/lib/string/memcpy.c | 32 + sysa/mes-0.22/lib/string/memmem.c | 60 + sysa/mes-0.22/lib/string/memmove.c | 33 + sysa/mes-0.22/lib/string/memset.c | 30 + sysa/mes-0.22/lib/string/rindex.c | 31 + sysa/mes-0.22/lib/string/strcat.c | 31 + sysa/mes-0.22/lib/string/strchr.c | 34 + sysa/mes-0.22/lib/string/strcmp.c | 32 + sysa/mes-0.22/lib/string/strcpy.c | 31 + sysa/mes-0.22/lib/string/strcspn.c | 33 + sysa/mes-0.22/lib/string/strdup.c | 32 + sysa/mes-0.22/lib/string/strerror.c | 81 + sysa/mes-0.22/lib/string/strlen.c | 30 + sysa/mes-0.22/lib/string/strlwr.c | 33 + sysa/mes-0.22/lib/string/strncat.c | 33 + sysa/mes-0.22/lib/string/strncmp.c | 34 + sysa/mes-0.22/lib/string/strncpy.c | 36 + sysa/mes-0.22/lib/string/strpbrk.c | 33 + sysa/mes-0.22/lib/string/strrchr.c | 40 + sysa/mes-0.22/lib/string/strspn.c | 33 + sysa/mes-0.22/lib/string/strstr.c | 29 + sysa/mes-0.22/lib/string/strupr.c | 34 + sysa/mes-0.22/lib/stub/__cleanup.c | 31 + sysa/mes-0.22/lib/stub/_getcwd.c | 34 + sysa/mes-0.22/lib/stub/_open3.c | 34 + sysa/mes-0.22/lib/stub/access.c | 45 + sysa/mes-0.22/lib/stub/atan2.c | 32 + sysa/mes-0.22/lib/stub/brk.c | 33 + sysa/mes-0.22/lib/stub/bsearch.c | 36 + sysa/mes-0.22/lib/stub/chmod.c | 34 + sysa/mes-0.22/lib/stub/chown.c | 34 + sysa/mes-0.22/lib/stub/clock_gettime.c | 34 + sysa/mes-0.22/lib/stub/close.c | 34 + sysa/mes-0.22/lib/stub/cos.c | 32 + sysa/mes-0.22/lib/stub/ctime.c | 34 + sysa/mes-0.22/lib/stub/dup.c | 33 + sysa/mes-0.22/lib/stub/dup2.c | 33 + sysa/mes-0.22/lib/stub/execve.c | 33 + sysa/mes-0.22/lib/stub/exp.c | 32 + sysa/mes-0.22/lib/stub/fork.c | 33 + sysa/mes-0.22/lib/stub/fpurge.c | 34 + sysa/mes-0.22/lib/stub/freadahead.c | 34 + sysa/mes-0.22/lib/stub/frexp.c | 31 + sysa/mes-0.22/lib/stub/getgrgid.c | 41 + sysa/mes-0.22/lib/stub/getgrnam.c | 41 + sysa/mes-0.22/lib/stub/getlogin.c | 34 + sysa/mes-0.22/lib/stub/getpgid.c | 34 + sysa/mes-0.22/lib/stub/getpgrp.c | 34 + sysa/mes-0.22/lib/stub/getpwnam.c | 35 + sysa/mes-0.22/lib/stub/getpwuid.c | 35 + sysa/mes-0.22/lib/stub/gettimeofday.c | 34 + sysa/mes-0.22/lib/stub/gmtime.c | 35 + sysa/mes-0.22/lib/stub/ioctl.c | 45 + sysa/mes-0.22/lib/stub/ldexp.c | 32 + sysa/mes-0.22/lib/stub/localtime.c | 36 + sysa/mes-0.22/lib/stub/log.c | 32 + sysa/mes-0.22/lib/stub/lseek.c | 35 + sysa/mes-0.22/lib/stub/mktime.c | 34 + sysa/mes-0.22/lib/stub/modf.c | 32 + sysa/mes-0.22/lib/stub/mprotect.c | 28 + sysa/mes-0.22/lib/stub/pclose.c | 33 + sysa/mes-0.22/lib/stub/popen.c | 33 + sysa/mes-0.22/lib/stub/pow.c | 32 + sysa/mes-0.22/lib/stub/rand.c | 33 + sysa/mes-0.22/lib/stub/rewind.c | 33 + sysa/mes-0.22/lib/stub/rmdir.c | 34 + sysa/mes-0.22/lib/stub/setbuf.c | 33 + sysa/mes-0.22/lib/stub/setgrent.c | 32 + sysa/mes-0.22/lib/stub/setlocale.c | 28 + sysa/mes-0.22/lib/stub/setvbuf.c | 32 + sysa/mes-0.22/lib/stub/sigaction.c | 28 + sysa/mes-0.22/lib/stub/sigaddset.c | 28 + sysa/mes-0.22/lib/stub/sigblock.c | 28 + sysa/mes-0.22/lib/stub/sigdelset.c | 28 + sysa/mes-0.22/lib/stub/sigemptyset.c | 28 + sysa/mes-0.22/lib/stub/sigsetmask.c | 33 + sysa/mes-0.22/lib/stub/sin.c | 32 + sysa/mes-0.22/lib/stub/sqrt.c | 32 + sysa/mes-0.22/lib/stub/stat.c | 35 + sysa/mes-0.22/lib/stub/strftime.c | 32 + sysa/mes-0.22/lib/stub/sys_siglist.c | 33 + sysa/mes-0.22/lib/stub/system.c | 33 + sysa/mes-0.22/lib/stub/time.c | 34 + sysa/mes-0.22/lib/stub/times.c | 33 + sysa/mes-0.22/lib/stub/ttyname.c | 36 + sysa/mes-0.22/lib/stub/umask.c | 33 + sysa/mes-0.22/lib/stub/unlink.c | 33 + sysa/mes-0.22/lib/stub/utime.c | 32 + sysa/mes-0.22/lib/stub/waitpid.c | 34 + sysa/mes-0.22/lib/tests/assert/50-assert.c | 38 + sysa/mes-0.22/lib/tests/dirent/90-readdir.c | 129 + .../lib/tests/dirent/readdir.dir/dir/.keep | 0 .../lib/tests/dirent/readdir.dir/file | 1 + .../lib/tests/dirent/readdir.dir/link | 1 + sysa/mes-0.22/lib/tests/io/90-stat.c | 133 + sysa/mes-0.22/lib/tests/mes/30-eputs.c | 29 + sysa/mes-0.22/lib/tests/mes/30-oputs.c | 29 + sysa/mes-0.22/lib/tests/mes/30-oputs.stdout | 2 + sysa/mes-0.22/lib/tests/mes/50-itoa.c | 52 + sysa/mes-0.22/lib/tests/mes/90-abtod.c | 35 + sysa/mes-0.22/lib/tests/mes/90-dtoab.c | 36 + sysa/mes-0.22/lib/tests/mes/90-dtoab.stdout | 2 + sysa/mes-0.22/lib/tests/posix/50-getenv.c | 31 + sysa/mes-0.22/lib/tests/posix/50-open-read.c | 57 + sysa/mes-0.22/lib/tests/posix/90-execlp.c | 28 + .../mes-0.22/lib/tests/posix/90-execlp.stdout | 1 + sysa/mes-0.22/lib/tests/posix/90-unsetenv.c | 41 + sysa/mes-0.22/lib/tests/posix/data/open-read | 1 + .../mes-0.22/lib/tests/scaffold/01-return-0.c | 25 + .../mes-0.22/lib/tests/scaffold/02-return-1.c | 25 + .../lib/tests/scaffold/02-return-1.exit | 1 + sysa/mes-0.22/lib/tests/scaffold/03-call.c | 31 + sysa/mes-0.22/lib/tests/scaffold/04-call-0.c | 31 + sysa/mes-0.22/lib/tests/scaffold/05-call-1.c | 31 + .../lib/tests/scaffold/05-call-1.exit | 1 + sysa/mes-0.22/lib/tests/scaffold/06-call-2.c | 32 + .../lib/tests/scaffold/06-call-not-1.c | 31 + .../lib/tests/scaffold/06-call-string.c | 31 + .../lib/tests/scaffold/06-call-variable.c | 34 + .../lib/tests/scaffold/06-not-call-1.c | 31 + .../lib/tests/scaffold/06-return-void.c | 33 + sysa/mes-0.22/lib/tests/scaffold/07-include.c | 27 + .../lib/tests/scaffold/07-include.exit | 1 + .../lib/tests/scaffold/08-assign-global.c | 32 + .../lib/tests/scaffold/08-assign-negative.c | 29 + sysa/mes-0.22/lib/tests/scaffold/08-assign.c | 32 + sysa/mes-0.22/lib/tests/scaffold/10-if-0.c | 27 + sysa/mes-0.22/lib/tests/scaffold/11-if-1.c | 27 + sysa/mes-0.22/lib/tests/scaffold/12-if-eq.c | 27 + sysa/mes-0.22/lib/tests/scaffold/13-if-neq.c | 27 + sysa/mes-0.22/lib/tests/scaffold/14-if-goto.c | 33 + .../mes-0.22/lib/tests/scaffold/15-if-not-f.c | 28 + sysa/mes-0.22/lib/tests/scaffold/16-if-t.c | 28 + .../lib/tests/scaffold/17-compare-and-or.c | 30 + .../lib/tests/scaffold/17-compare-and.c | 30 + .../lib/tests/scaffold/17-compare-assign.c | 38 + .../lib/tests/scaffold/17-compare-call.c | 38 + .../lib/tests/scaffold/17-compare-char.c | 31 + .../lib/tests/scaffold/17-compare-ge.c | 30 + .../lib/tests/scaffold/17-compare-gt.c | 30 + .../lib/tests/scaffold/17-compare-le.c | 30 + .../lib/tests/scaffold/17-compare-lt.c | 30 + .../lib/tests/scaffold/17-compare-or.c | 30 + .../scaffold/17-compare-unsigned-char-le.c | 30 + .../tests/scaffold/17-compare-unsigned-ge.c | 30 + .../tests/scaffold/17-compare-unsigned-gt.c | 30 + .../tests/scaffold/17-compare-unsigned-le.c | 30 + .../scaffold/17-compare-unsigned-long-le.c | 30 + .../tests/scaffold/17-compare-unsigned-lt.c | 30 + .../scaffold/17-compare-unsigned-short-le.c | 30 + .../lib/tests/scaffold/18-assign-shadow.c | 34 + sysa/mes-0.22/lib/tests/scaffold/20-while.c | 28 + .../lib/tests/scaffold/21-char-array-simple.c | 30 + .../lib/tests/scaffold/21-char-array.c | 36 + .../lib/tests/scaffold/22-while-char-array.c | 31 + .../scaffold/23-global-pointer-init-null.c | 30 + .../tests/scaffold/23-global-pointer-init.c | 33 + .../scaffold/23-global-pointer-pointer-ref.c | 33 + .../tests/scaffold/23-global-pointer-ref.c | 31 + .../lib/tests/scaffold/23-pointer-sub.c | 32 + sysa/mes-0.22/lib/tests/scaffold/23-pointer.c | 69 + sysa/mes-0.22/lib/tests/scaffold/30-exit-0.c | 26 + sysa/mes-0.22/lib/tests/scaffold/30-exit-42.c | 26 + .../lib/tests/scaffold/30-exit-42.exit | 1 + .../lib/tests/scaffold/32-call-wrap.c | 47 + sysa/mes-0.22/lib/tests/scaffold/32-compare.c | 267 + sysa/mes-0.22/lib/tests/scaffold/33-and-or.c | 60 + .../mes-0.22/lib/tests/scaffold/34-pre-post.c | 63 + .../lib/tests/scaffold/35-compare-char.c | 103 + .../tests/scaffold/36-compare-arithmetic.c | 48 + .../lib/tests/scaffold/37-compare-assign.c | 48 + .../lib/tests/scaffold/38-compare-call-2.c | 42 + .../lib/tests/scaffold/38-compare-call-3.c | 42 + .../lib/tests/scaffold/38-compare-call.c | 116 + sysa/mes-0.22/lib/tests/scaffold/40-if-else.c | 42 + sysa/mes-0.22/lib/tests/scaffold/41-ternary.c | 47 + .../lib/tests/scaffold/42-goto-label.c | 47 + .../lib/tests/scaffold/43-for-do-while.c | 90 + .../scaffold/44-switch-body-fallthrough.c | 47 + .../tests/scaffold/44-switch-fallthrough.c | 46 + sysa/mes-0.22/lib/tests/scaffold/44-switch.c | 174 + .../lib/tests/scaffold/45-void-call.c | 36 + .../lib/tests/scaffold/46-function-static.c | 39 + .../tests/scaffold/47-function-expression.c | 37 + .../lib/tests/scaffold/48-global-static.c | 43 + .../lib/tests/scaffold/51-pointer-sub.c | 33 + sysa/mes-0.22/lib/tests/scaffold/54-argc.c | 36 + sysa/mes-0.22/lib/tests/scaffold/54-argv.c | 51 + .../lib/tests/scaffold/55-char-array.c | 90 + sysa/mes-0.22/lib/tests/scaffold/60-math.c | 206 + sysa/mes-0.22/lib/tests/scaffold/61-array.c | 150 + sysa/mes-0.22/lib/tests/scaffold/62-array.c | 59 + .../tests/scaffold/63-struct-array-assign.c | 75 + .../tests/scaffold/63-struct-array-compare.c | 51 + .../lib/tests/scaffold/63-struct-array.c | 51 + .../lib/tests/scaffold/63-struct-assign.c | 49 + .../lib/tests/scaffold/63-struct-cell.c | 313 + .../lib/tests/scaffold/63-struct-function.c | 45 + .../lib/tests/scaffold/63-struct-local.c | 45 + .../lib/tests/scaffold/63-struct-pointer.c | 47 + sysa/mes-0.22/lib/tests/scaffold/63-struct.c | 45 + .../lib/tests/scaffold/64-make-cell.c | 162 + sysa/mes-0.22/lib/tests/scaffold/65-read.c | 87 + .../lib/tests/scaffold/66-local-char-array.c | 113 + .../tests/scaffold/70-array-in-struct-init.c | 56 + .../scaffold/70-array-in-struct-init.stdout | 6 + sysa/mes-0.22/lib/tests/scaffold/70-extern.c | 33 + .../lib/tests/scaffold/70-extern.stdout | 1 + .../scaffold/70-function-destruct-declare.c | 41 + sysa/mes-0.22/lib/tests/scaffold/70-stdarg.c | 114 + .../lib/tests/scaffold/70-struct-post.c | 40 + .../scaffold/70-struct-short-enum-init.c | 46 + .../scaffold/70-struct-short-enum-init.stdout | 1 + .../lib/tests/scaffold/71-struct-array.c | 94 + .../scaffold/72-typedef-struct-def-local.c | 67 + .../tests/scaffold/72-typedef-struct-def.c | 122 + .../lib/tests/scaffold/73-union-hello.c | 38 + sysa/mes-0.22/lib/tests/scaffold/73-union.c | 52 + .../lib/tests/scaffold/74-multi-line-string.c | 47 + .../lib/tests/scaffold/75-struct-union.c | 65 + .../tests/scaffold/76-pointer-arithmetic-pp.c | 33 + .../tests/scaffold/76-pointer-arithmetic.c | 213 + .../lib/tests/scaffold/77-pointer-assign.c | 109 + .../lib/tests/scaffold/78-union-struct.c | 49 + .../lib/tests/scaffold/79-int-array-simple.c | 34 + .../lib/tests/scaffold/79-int-array.c | 94 + .../lib/tests/scaffold/7a-struct-char-array.c | 180 + .../scaffold/7b-struct-int-array-hello.c | 44 + .../scaffold/7b-struct-int-array-pointer.c | 40 + .../lib/tests/scaffold/7b-struct-int-array.c | 103 + .../mes-0.22/lib/tests/scaffold/7c-dynarray.c | 195 + .../lib/tests/scaffold/7d-cast-char.c | 42 + .../tests/scaffold/7e-struct-array-access.c | 102 + .../scaffold/7f-struct-pointer-arithmetic.c | 89 + .../scaffold/7g-struct-byte-word-field.c | 65 + .../lib/tests/scaffold/7h-struct-assign.c | 179 + .../tests/scaffold/7i-struct-struct-simple.c | 42 + .../lib/tests/scaffold/7i-struct-struct.c | 78 + .../lib/tests/scaffold/7k-empty-for.c | 30 + .../tests/scaffold/7k-for-each-elem-simple.c | 40 + .../lib/tests/scaffold/7k-for-each-elem.c | 99 + .../7l-struct-any-size-array-simple.c | 51 + .../tests/scaffold/7l-struct-any-size-array.c | 102 + .../scaffold/7m-struct-char-array-assign.c | 44 + .../tests/scaffold/7n-struct-struct-array.c | 120 + .../scaffold/7o-struct-pre-post-simple.c | 42 + .../lib/tests/scaffold/7o-struct-pre-post.c | 60 + .../lib/tests/scaffold/7p-struct-cast.c | 39 + .../lib/tests/scaffold/7q-bit-field-simple.c | 51 + .../lib/tests/scaffold/7q-bit-field.c | 64 + .../lib/tests/scaffold/7r-sign-extend.c | 107 + .../lib/tests/scaffold/7s-struct-short.c | 74 + .../lib/tests/scaffold/7s-unsigned-compare.c | 124 + .../lib/tests/scaffold/7t-function-destruct.c | 39 + .../lib/tests/scaffold/7u-call-ternary.c | 36 + sysa/mes-0.22/lib/tests/scaffold/7u-double.c | 28 + .../lib/tests/scaffold/7u-inc-byte-word.c | 37 + .../lib/tests/scaffold/7u-long-long.c | 28 + .../lib/tests/scaffold/7u-struct-func.c | 41 + .../lib/tests/scaffold/7u-struct-size10.c | 50 + .../tests/scaffold/7u-ternary-expression.c | 32 + sysa/mes-0.22/lib/tests/scaffold/7u-vstack.c | 43 + sysa/mes-0.22/lib/tests/scaffold/82-define.c | 26 + .../tests/scaffold/83-heterogenoous-init.c | 30 + .../lib/tests/scaffold/84-struct-field-list.c | 58 + sysa/mes-0.22/lib/tests/scaffold/85-sizeof.c | 67 + .../mes-0.22/lib/tests/scaffold/90-goto-var.c | 31 + .../lib/tests/scaffold/91-goto-array.c | 54 + .../lib/tests/scaffold/a0-call-trunc-char.c | 40 + .../lib/tests/scaffold/a0-call-trunc-int.c | 43 + .../lib/tests/scaffold/a0-call-trunc-short.c | 40 + .../scaffold/a0-math-divide-signed-negative.c | 28 + .../lib/tests/scaffold/a1-global-no-align.c | 34 + .../lib/tests/scaffold/a1-global-no-clobber.c | 42 + sysa/mes-0.22/lib/tests/scaffold/exit-42.i | 27 + sysa/mes-0.22/lib/tests/scaffold/t.c | 229 + sysa/mes-0.22/lib/tests/setjmp/80-setjmp.c | 60 + sysa/mes-0.22/lib/tests/signal/90-signal.c | 57 + .../lib/tests/stdio/70-printf-hello.c | 45 + .../lib/tests/stdio/70-printf-simple.c | 85 + sysa/mes-0.22/lib/tests/stdio/70-printf.c | 191 + sysa/mes-0.22/lib/tests/stdio/80-sscanf.c | 44 + .../lib/tests/stdio/90-fopen-append.c | 53 + sysa/mes-0.22/lib/tests/stdio/90-fopen.c | 124 + .../lib/tests/stdio/90-fread-fwrite.c | 79 + sysa/mes-0.22/lib/tests/stdio/90-fseek.c | 61 + sysa/mes-0.22/lib/tests/stdio/90-sprintf.c | 44 + .../lib/tests/stdio/90-sprintf.stdout | 6 + sysa/mes-0.22/lib/tests/stdlib/50-malloc.c | 57 + sysa/mes-0.22/lib/tests/stdlib/70-strtoull.c | 47 + .../lib/tests/stdlib/80-qsort-dupes.c | 43 + sysa/mes-0.22/lib/tests/stdlib/80-qsort.c | 55 + sysa/mes-0.22/lib/tests/stdlib/90-strtol.c | 61 + sysa/mes-0.22/lib/tests/string/30-strlen.c | 33 + sysa/mes-0.22/lib/tests/string/50-strcmp.c | 68 + sysa/mes-0.22/lib/tests/string/50-strcpy.c | 35 + sysa/mes-0.22/lib/tests/string/50-strncmp.c | 37 + sysa/mes-0.22/lib/tests/string/70-strchr.c | 51 + sysa/mes-0.22/lib/tests/string/80-strncpy.c | 42 + sysa/mes-0.22/lib/tests/string/80-strrchr.c | 37 + sysa/mes-0.22/lib/tests/string/90-snprintf.c | 39 + sysa/mes-0.22/lib/tests/string/90-strpbrk.c | 54 + sysa/mes-0.22/lib/tests/string/90-strspn.c | 47 + sysa/mes-0.22/lib/x86-mes-gcc/setjmp.c | 50 + sysa/mes-0.22/lib/x86-mes-mescc/exit-42.c | 25 + sysa/mes-0.22/lib/x86-mes-mescc/setjmp.c | 47 + sysa/mes-0.22/lib/x86-mes/x86.M1 | 342 + sysa/mes-0.22/lib/x86_64-mes-gcc/setjmp.c | 54 + sysa/mes-0.22/lib/x86_64-mes-mescc/exit-42.c | 30 + sysa/mes-0.22/lib/x86_64-mes-mescc/setjmp.c | 72 + sysa/mes-0.22/lib/x86_64-mes/x86_64.M1 | 339 + sysa/mes-0.22/mes/module/mes/base.mes | 139 + sysa/mes-0.22/mes/module/mes/boot-00.scm | 34 + sysa/mes-0.22/mes/module/mes/boot-01.scm | 70 + sysa/mes-0.22/mes/module/mes/boot-02.scm | 105 + sysa/mes-0.22/mes/module/mes/boot-03.scm | 175 + sysa/mes-0.22/mes/module/mes/catch.mes | 71 + sysa/mes-0.22/mes/module/mes/display.mes | 201 + sysa/mes-0.22/mes/module/mes/fluids.mes | 82 + sysa/mes-0.22/mes/module/mes/getopt-long.mes | 29 + sysa/mes-0.22/mes/module/mes/guile.mes | 124 + sysa/mes-0.22/mes/module/mes/lalr.mes | 28 + sysa/mes-0.22/mes/module/mes/lalr.scm | 2120 +++ sysa/mes-0.22/mes/module/mes/let.mes | 74 + sysa/mes-0.22/mes/module/mes/match.mes | 26 + sysa/mes-0.22/mes/module/mes/match.scm | 934 ++ sysa/mes-0.22/mes/module/mes/mescc.mes | 25 + sysa/mes-0.22/mes/module/mes/misc.mes | 21 + sysa/mes-0.22/mes/module/mes/module.mes | 64 + sysa/mes-0.22/mes/module/mes/optargs.mes | 38 + sysa/mes-0.22/mes/module/mes/peg.mes | 41 + sysa/mes-0.22/mes/module/mes/peg/cache.scm | 47 + sysa/mes-0.22/mes/module/mes/peg/codegen.scm | 361 + .../mes/module/mes/peg/simplify-tree.scm | 100 + .../mes/module/mes/peg/string-peg.scm | 275 + .../mes/module/mes/peg/using-parsers.scm | 118 + sysa/mes-0.22/mes/module/mes/pmatch.mes | 28 + sysa/mes-0.22/mes/module/mes/pmatch.scm | 84 + sysa/mes-0.22/mes/module/mes/posix.mes | 73 + sysa/mes-0.22/mes/module/mes/pretty-print.mes | 27 + sysa/mes-0.22/mes/module/mes/pretty-print.scm | 282 + sysa/mes-0.22/mes/module/mes/psyntax-0.mes | 114 + sysa/mes-0.22/mes/module/mes/psyntax-1.mes | 32 + sysa/mes-0.22/mes/module/mes/psyntax.mes | 29 + sysa/mes-0.22/mes/module/mes/psyntax.pp | 9652 ++++++++++++ .../mes-0.22/mes/module/mes/psyntax.pp.header | 24 + sysa/mes-0.22/mes/module/mes/psyntax.ss | 2289 +++ sysa/mes-0.22/mes/module/mes/quasiquote.mes | 59 + sysa/mes-0.22/mes/module/mes/quasisyntax.mes | 27 + sysa/mes-0.22/mes/module/mes/quasisyntax.scm | 136 + sysa/mes-0.22/mes/module/mes/repl.mes | 187 + sysa/mes-0.22/mes/module/mes/scm.mes | 385 + .../mes-0.22/mes/module/mes/simple-format.mes | 63 + sysa/mes-0.22/mes/module/mes/syntax.mes | 54 + sysa/mes-0.22/mes/module/mes/syntax.scm | 251 + sysa/mes-0.22/mes/module/mes/test.mes | 21 + sysa/mes-0.22/mes/module/mes/tiny-0.mes | 1 + sysa/mes-0.22/mes/module/mes/type-0.mes | 127 + sysa/mes-0.22/mes/module/mescc.mes | 25 + sysa/mes-0.22/mes/module/mescc/M1.mes | 28 + sysa/mes-0.22/mes/module/mescc/as.mes | 23 + .../mes-0.22/mes/module/mescc/bytevectors.mes | 21 + sysa/mes-0.22/mes/module/mescc/compile.mes | 33 + sysa/mes-0.22/mes/module/mescc/i386/as.mes | 23 + sysa/mes-0.22/mes/module/mescc/i386/info.mes | 23 + sysa/mes-0.22/mes/module/mescc/info.mes | 28 + sysa/mes-0.22/mes/module/mescc/mescc.mes | 33 + sysa/mes-0.22/mes/module/mescc/preprocess.mes | 28 + sysa/mes-0.22/mes/module/mescc/x86_64/as.mes | 24 + .../mes-0.22/mes/module/mescc/x86_64/info.mes | 23 + sysa/mes-0.22/mes/module/nyacc/lalr.mes | 29 + .../mes/module/nyacc/lang/c99/cpp.mes | 33 + .../mes/module/nyacc/lang/c99/parser.mes | 40 + .../mes/module/nyacc/lang/c99/pprint.mes | 38 + .../mes/module/nyacc/lang/c99/util.mes | 45 + .../mes/module/nyacc/lang/calc/parser.mes | 30 + .../mes/module/nyacc/lang/sx-util.mes | 27 + sysa/mes-0.22/mes/module/nyacc/lang/util.mes | 29 + sysa/mes-0.22/mes/module/nyacc/lex.mes | 31 + sysa/mes-0.22/mes/module/nyacc/parse.mes | 29 + sysa/mes-0.22/mes/module/nyacc/util.mes | 28 + sysa/mes-0.22/mes/module/nyacc/version.mes | 25 + .../mes/module/rnrs/arithmetic/bitwise.mes | 30 + sysa/mes-0.22/mes/module/srfi/srfi-0.mes | 35 + sysa/mes-0.22/mes/module/srfi/srfi-1.mes | 148 + sysa/mes-0.22/mes/module/srfi/srfi-1.scm | 115 + sysa/mes-0.22/mes/module/srfi/srfi-13.mes | 198 + sysa/mes-0.22/mes/module/srfi/srfi-14.mes | 90 + sysa/mes-0.22/mes/module/srfi/srfi-16.mes | 26 + sysa/mes-0.22/mes/module/srfi/srfi-16.scm | 129 + sysa/mes-0.22/mes/module/srfi/srfi-26.mes | 28 + sysa/mes-0.22/mes/module/srfi/srfi-26.scm | 52 + sysa/mes-0.22/mes/module/srfi/srfi-43.mes | 42 + sysa/mes-0.22/mes/module/srfi/srfi-8.mes | 29 + .../mes/module/srfi/srfi-9-struct.mes | 145 + .../mes/module/srfi/srfi-9-vector.mes | 116 + sysa/mes-0.22/mes/module/srfi/srfi-9.mes | 1 + .../mes/module/srfi/srfi-9/gnu-struct.mes | 38 + .../mes/module/srfi/srfi-9/gnu-vector.mes | 37 + sysa/mes-0.22/mes/module/srfi/srfi-9/gnu.mes | 1 + sysa/mes-0.22/mes/module/sxml/xpath.mes | 26 + sysa/mes-0.22/mes/module/sxml/xpath.scm | 496 + sysa/mes-0.22/module/mes/getopt-long.scm | 433 + sysa/mes-0.22/module/mes/guile.scm | 123 + sysa/mes-0.22/module/mes/mes-0.scm | 56 + sysa/mes-0.22/module/mes/misc.scm | 77 + sysa/mes-0.22/module/mes/optargs.scm | 499 + sysa/mes-0.22/module/mes/test.scm | 158 + sysa/mes-0.22/module/mescc.scm | 191 + sysa/mes-0.22/module/mescc/M1.scm | 256 + sysa/mes-0.22/module/mescc/as.scm | 77 + sysa/mes-0.22/module/mescc/bytevectors.scm | 74 + sysa/mes-0.22/module/mescc/compile.scm | 2663 ++++ sysa/mes-0.22/module/mescc/i386/as.scm | 648 + sysa/mes-0.22/module/mescc/i386/info.scm | 61 + sysa/mes-0.22/module/mescc/info.scm | 305 + sysa/mes-0.22/module/mescc/mescc.scm | 368 + sysa/mes-0.22/module/mescc/preprocess.scm | 144 + sysa/mes-0.22/module/mescc/x86_64/as.scm | 782 + sysa/mes-0.22/module/mescc/x86_64/info.scm | 61 + sysa/mes-0.22/module/nyacc/ChangeLog | 248 + sysa/mes-0.22/module/nyacc/bison.scm | 214 + sysa/mes-0.22/module/nyacc/compat18.scm | 141 + sysa/mes-0.22/module/nyacc/export.scm | 199 + sysa/mes-0.22/module/nyacc/import.scm | 105 + sysa/mes-0.22/module/nyacc/lalr.scm | 2106 +++ sysa/mes-0.22/module/nyacc/lang/c99/ChangeLog | 330 + sysa/mes-0.22/module/nyacc/lang/c99/README | 50 + sysa/mes-0.22/module/nyacc/lang/c99/body.scm | 653 + sysa/mes-0.22/module/nyacc/lang/c99/cpp.scm | 623 + .../module/nyacc/lang/c99/cppmach.scm | 134 + .../mes-0.22/module/nyacc/lang/c99/cxeval.scm | 219 + .../mes-0.22/module/nyacc/lang/c99/cxmach.scm | 146 + .../module/nyacc/lang/c99/ffi-help.scm | 2316 +++ .../module/nyacc/lang/c99/mach.d/c99-act.scm | 1081 ++ .../module/nyacc/lang/c99/mach.d/c99-tab.scm | 1211 ++ .../nyacc/lang/c99/mach.d/c99cx-act.scm | 148 + .../nyacc/lang/c99/mach.d/c99cx-tab.scm | 181 + .../module/nyacc/lang/c99/mach.d/c99x-act.scm | 1081 ++ .../module/nyacc/lang/c99/mach.d/c99x-tab.scm | 1156 ++ .../module/nyacc/lang/c99/mach.d/cpp-act.scm | 130 + .../module/nyacc/lang/c99/mach.d/cpp-tab.scm | 159 + sysa/mes-0.22/module/nyacc/lang/c99/mach.scm | 891 ++ sysa/mes-0.22/module/nyacc/lang/c99/munge.scm | 1516 ++ .../mes-0.22/module/nyacc/lang/c99/parser.scm | 167 + .../mes-0.22/module/nyacc/lang/c99/pprint.scm | 692 + sysa/mes-0.22/module/nyacc/lang/c99/util.scm | 368 + sysa/mes-0.22/module/nyacc/lang/sx-util.scm | 469 + sysa/mes-0.22/module/nyacc/lang/util.scm | 506 + sysa/mes-0.22/module/nyacc/lex.scm | 696 + sysa/mes-0.22/module/nyacc/parse.scm | 229 + sysa/mes-0.22/module/nyacc/util.scm | 326 + sysa/mes-0.22/module/nyacc/version.scm | 25 + sysa/mes-0.22/scaffold/argv.c | 50 + sysa/mes-0.22/scaffold/boot/00-zero.scm | 19 + sysa/mes-0.22/scaffold/boot/01-true.scm | 19 + sysa/mes-0.22/scaffold/boot/02-identifier.scm | 25 + sysa/mes-0.22/scaffold/boot/02-symbol.scm | 19 + sysa/mes-0.22/scaffold/boot/03-big-string.scm | 56 + sysa/mes-0.22/scaffold/boot/03-string.scm | 19 + sysa/mes-0.22/scaffold/boot/04-cons.scm | 19 + sysa/mes-0.22/scaffold/boot/04-quote.scm | 19 + sysa/mes-0.22/scaffold/boot/05-big-list.scm | 28 + sysa/mes-0.22/scaffold/boot/05-list-list.scm | 19 + sysa/mes-0.22/scaffold/boot/05-list.scm | 19 + sysa/mes-0.22/scaffold/boot/06-tick.scm | 19 + sysa/mes-0.22/scaffold/boot/07-if.scm | 19 + sysa/mes-0.22/scaffold/boot/08-if-if.scm | 19 + sysa/mes-0.22/scaffold/boot/10-cons.scm | 19 + sysa/mes-0.22/scaffold/boot/11-list.scm | 19 + sysa/mes-0.22/scaffold/boot/11-vector.scm | 19 + sysa/mes-0.22/scaffold/boot/12-car.scm | 19 + sysa/mes-0.22/scaffold/boot/13-cdr.scm | 19 + sysa/mes-0.22/scaffold/boot/14-exit.scm | 19 + sysa/mes-0.22/scaffold/boot/15-display.scm | 20 + .../mes-0.22/scaffold/boot/16-if-eq-quote.scm | 20 + sysa/mes-0.22/scaffold/boot/17-equal2.scm | 25 + .../scaffold/boot/17-memq-keyword.scm | 21 + sysa/mes-0.22/scaffold/boot/17-memq.scm | 21 + .../scaffold/boot/17-open-input-string.scm | 36 + .../scaffold/boot/17-string-append.scm | 21 + .../scaffold/boot/17-string-equal.scm | 23 + .../scaffold/boot/20-define-quote.scm | 21 + .../scaffold/boot/20-define-quoted.scm | 20 + sysa/mes-0.22/scaffold/boot/20-define.scm | 19 + .../scaffold/boot/21-define-procedure.scm | 20 + .../scaffold/boot/22-define-procedure-2.scm | 22 + sysa/mes-0.22/scaffold/boot/23-begin.scm | 20 + .../scaffold/boot/24-begin-define.scm | 21 + .../scaffold/boot/25-begin-define-2.scm | 23 + .../scaffold/boot/26-begin-define-later.scm | 22 + .../scaffold/boot/26-define-define.scm | 33 + .../scaffold/boot/27-lambda-define.scm | 25 + .../scaffold/boot/28-define-define.scm | 25 + .../scaffold/boot/29-lambda-define.scm | 27 + .../scaffold/boot/2a-lambda-lambda.scm | 27 + .../scaffold/boot/2b-define-lambda.scm | 24 + .../boot/2c-define-lambda-recurse.scm | 33 + sysa/mes-0.22/scaffold/boot/2d-compose.scm | 23 + .../scaffold/boot/2d-define-lambda-set.scm | 23 + .../scaffold/boot/2e-define-first.scm | 34 + .../scaffold/boot/2f-define-second-lambda.scm | 48 + .../scaffold/boot/2f-define-second.scm | 47 + sysa/mes-0.22/scaffold/boot/2g-vector.scm | 23 + sysa/mes-0.22/scaffold/boot/30-capture.scm | 20 + .../scaffold/boot/31-capture-define.scm | 21 + .../scaffold/boot/32-capture-modify-close.scm | 21 + .../boot/33-procedure-override-close.scm | 23 + .../scaffold/boot/34-cdr-override-close.scm | 21 + .../scaffold/boot/35-closure-modify.scm | 23 + .../scaffold/boot/36-closure-override.scm | 22 + .../scaffold/boot/37-closure-lambda.scm | 62 + .../scaffold/boot/38-simple-format.scm | 70 + .../boot/39-global-define-override.scm | 21 + .../boot/3a-global-define-lambda-override.scm | 23 + .../scaffold/boot/40-define-macro.scm | 20 + sysa/mes-0.22/scaffold/boot/41-when.scm | 24 + sysa/mes-0.22/scaffold/boot/42-if-when.scm | 22 + sysa/mes-0.22/scaffold/boot/43-or.scm | 35 + sysa/mes-0.22/scaffold/boot/44-or-if.scm | 27 + sysa/mes-0.22/scaffold/boot/45-pass-if.scm | 31 + sysa/mes-0.22/scaffold/boot/46-report.scm | 61 + sysa/mes-0.22/scaffold/boot/47-pass-if-eq.scm | 36 + sysa/mes-0.22/scaffold/boot/48-let.scm | 32 + .../scaffold/boot/49-macro-override.scm | 22 + .../boot/4a-define-macro-define-macro.scm | 27 + .../scaffold/boot/4b-define-macro-define.scm | 25 + sysa/mes-0.22/scaffold/boot/4c-quasiquote.scm | 161 + sysa/mes-0.22/scaffold/boot/4d-let-map.scm | 39 + sysa/mes-0.22/scaffold/boot/4e-let-global.scm | 33 + .../scaffold/boot/4f-string-split.scm | 106 + sysa/mes-0.22/scaffold/boot/50-keyword.scm | 23 + .../mes-0.22/scaffold/boot/50-make-string.scm | 50 + .../scaffold/boot/50-primitive-load.scm | 35 + .../mes-0.22/scaffold/boot/50-string-join.scm | 50 + sysa/mes-0.22/scaffold/boot/51-module.scm | 87 + .../scaffold/boot/52-define-module.scm | 77 + .../scaffold/boot/53-closure-display.scm | 58 + .../scaffold/boot/60-let-syntax-expanded.scm | 547 + sysa/mes-0.22/scaffold/boot/60-let-syntax.scm | 452 + sysa/mes-0.22/scaffold/boot/call-cc.scm | 60 + sysa/mes-0.22/scaffold/boot/data/bar.mes | 24 + sysa/mes-0.22/scaffold/boot/data/i.scm | 21 + sysa/mes-0.22/scaffold/boot/data/module.mes | 21 + sysa/mes-0.22/scaffold/boot/memory.scm | 41 + sysa/mes-0.22/scaffold/boot/numbers.scm | 19 + sysa/mes-0.22/scaffold/cons-mes.c | 995 ++ sysa/mes-0.22/scaffold/gc-test.scm | 27 + sysa/mes-0.22/scaffold/gc.scm | 309 + sysa/mes-0.22/scaffold/hello.c | 28 + sysa/mes-0.22/scaffold/lib/stdlib/malloc.c | 56 + sysa/mes-0.22/scaffold/main.c | 29 + sysa/mes-0.22/scaffold/micro-mes.c | 74 + sysa/mes-0.22/scaffold/read.c | 37 + sysa/mes-0.22/scaffold/read.data | 1 + sysa/mes-0.22/scaffold/tiny-mes.c | 426 + sysa/mes-0.22/scripts/diff.scm | 140 + sysa/mes-0.22/scripts/mesar.in | 82 + sysa/mes-0.22/scripts/mescc.in | 65 + sysa/mes-0.22/scripts/mescc.scm.in | 72 + sysa/mes-0.22/simple.sh | 266 + sysa/mes-0.22/src/gc.c | 346 + sysa/mes-0.22/src/hash.c | 243 + sysa/mes-0.22/src/lib.c | 454 + sysa/mes-0.22/src/math.c | 232 + sysa/mes-0.22/src/mes.c | 1903 +++ sysa/mes-0.22/src/module.c | 120 + sysa/mes-0.22/src/posix.c | 379 + sysa/mes-0.22/src/reader.c | 484 + sysa/mes-0.22/src/string.c | 254 + sysa/mes-0.22/src/struct.c | 88 + sysa/mes-0.22/src/vector.c | 119 + sysa/mes-0.22/tests/base.test | 145 + sysa/mes-0.22/tests/boot.test | 61 + sysa/mes-0.22/tests/catch.test | 70 + sysa/mes-0.22/tests/closure.test | 120 + sysa/mes-0.22/tests/cwv.test | 80 + sysa/mes-0.22/tests/data/load.scm | 21 + sysa/mes-0.22/tests/display.test | 93 + sysa/mes-0.22/tests/fluids.test | 69 + sysa/mes-0.22/tests/getopt-long.test | 61 + sysa/mes-0.22/tests/guile.test | 117 + sysa/mes-0.22/tests/let-syntax.test | 63 + sysa/mes-0.22/tests/let.test | 67 + sysa/mes-0.22/tests/macro.test | 105 + sysa/mes-0.22/tests/match.test | 119 + sysa/mes-0.22/tests/math.test | 96 + sysa/mes-0.22/tests/module.test | 35 + sysa/mes-0.22/tests/optargs.test | 107 + sysa/mes-0.22/tests/peg.test | 71 + sysa/mes-0.22/tests/perform.test | 56 + sysa/mes-0.22/tests/pmatch.test | 74 + sysa/mes-0.22/tests/posix.test | 40 + sysa/mes-0.22/tests/psyntax.test | 234 + sysa/mes-0.22/tests/quasiquote.test | 98 + sysa/mes-0.22/tests/read.test | 84 + sysa/mes-0.22/tests/scm.test | 159 + sysa/mes-0.22/tests/srfi-0.test | 48 + sysa/mes-0.22/tests/srfi-1.test | 90 + sysa/mes-0.22/tests/srfi-13.test | 144 + sysa/mes-0.22/tests/srfi-14.test | 52 + sysa/mes-0.22/tests/srfi-16.test | 46 + sysa/mes-0.22/tests/srfi-43.test | 47 + sysa/mes-0.22/tests/srfi-9.test | 56 + sysa/mes-0.22/tests/syntax.test | 87 + sysa/mes-0.22/tests/vector.test | 61 + sysa/mes-bins/mes | Bin 0 -> 97008 bytes sysa/mes-bins/mescc.scm | 46 + sysa/mes.kaem | 417 + sysa/mescc-tools-extra/chmod.c | 172 + sysa/mescc-tools-extra/cp.c | 334 + sysa/mescc-tools-extra/functions/file_print.c | 27 + sysa/mescc-tools-extra/functions/in_set.c | 32 + sysa/mescc-tools-extra/functions/match.c | 35 + .../functions/numerate_number.c | 170 + sysa/mescc-tools-extra/functions/require.c | 31 + sysa/mescc-tools-extra/functions/string.c | 70 + sysa/mescc-tools-extra/go.kaem | 81 + 1029 files changed, 120985 insertions(+), 18 deletions(-) delete mode 100755 sysa/busybox.static create mode 100644 sysa/mes-0.22/.dir-locals.el create mode 100644 sysa/mes-0.22/.gitignore create mode 100644 sysa/mes-0.22/AUTHORS create mode 100644 sysa/mes-0.22/BLURB create mode 100644 sysa/mes-0.22/BOOTSTRAP create mode 100644 sysa/mes-0.22/COPYING create mode 100644 sysa/mes-0.22/ChangeLog create mode 100644 sysa/mes-0.22/HACKING create mode 100644 sysa/mes-0.22/INSTALL create mode 100644 sysa/mes-0.22/NEWS create mode 100644 sysa/mes-0.22/PORTING create mode 100644 sysa/mes-0.22/README create mode 100644 sysa/mes-0.22/ROADMAP create mode 100644 sysa/mes-0.22/build-aux/GNUmakefile.in create mode 100644 sysa/mes-0.22/build-aux/bootstrap.sh.in create mode 100755 sysa/mes-0.22/build-aux/build-guile.sh create mode 100755 sysa/mes-0.22/build-aux/build-lib.sh create mode 100755 sysa/mes-0.22/build-aux/build-mes.sh create mode 100755 sysa/mes-0.22/build-aux/build-scaffold.sh create mode 100644 sysa/mes-0.22/build-aux/build-source-lib.sh create mode 100644 sysa/mes-0.22/build-aux/build.sh.in create mode 100755 sysa/mes-0.22/build-aux/cc.sh create mode 100644 sysa/mes-0.22/build-aux/cflags.sh create mode 100755 sysa/mes-0.22/build-aux/check-boot.sh create mode 100755 sysa/mes-0.22/build-aux/check-mes.sh create mode 100755 sysa/mes-0.22/build-aux/check-mescc.sh create mode 100644 sysa/mes-0.22/build-aux/check.sh.in create mode 100644 sysa/mes-0.22/build-aux/config.make.in create mode 100644 sysa/mes-0.22/build-aux/config.sh.in create mode 100644 sysa/mes-0.22/build-aux/configure-lib.sh create mode 100644 sysa/mes-0.22/build-aux/export.make create mode 100755 sysa/mes-0.22/build-aux/gendocs.sh create mode 100755 sysa/mes-0.22/build-aux/gitlog-to-changelog create mode 100755 sysa/mes-0.22/build-aux/indent.sh create mode 100644 sysa/mes-0.22/build-aux/install.sh.in create mode 100644 sysa/mes-0.22/build-aux/manifest.scm create mode 100755 sysa/mes-0.22/build-aux/mes-snarf.scm create mode 100644 sysa/mes-0.22/build-aux/pre-inst-env.in create mode 100644 sysa/mes-0.22/build-aux/setup-mes.sh create mode 100755 sysa/mes-0.22/build-aux/snarf.sh create mode 100755 sysa/mes-0.22/build-aux/test-boot.sh create mode 100755 sysa/mes-0.22/build-aux/test-c.sh create mode 100755 sysa/mes-0.22/build-aux/test-driver create mode 100644 sysa/mes-0.22/build-aux/test-suite.sh create mode 100644 sysa/mes-0.22/build-aux/trace.sh create mode 100644 sysa/mes-0.22/build-aux/uninstall.sh.in create mode 100755 sysa/mes-0.22/configure create mode 100755 sysa/mes-0.22/configure.sh create mode 100644 sysa/mes-0.22/doc/announce/ANNOUNCE create mode 100644 sysa/mes-0.22/doc/announce/ANNOUNCE-0.10 create mode 100644 sysa/mes-0.22/doc/announce/ANNOUNCE-0.11 create mode 100644 sysa/mes-0.22/doc/announce/ANNOUNCE-0.12 create mode 100644 sysa/mes-0.22/doc/announce/ANNOUNCE-0.13 create mode 100644 sysa/mes-0.22/doc/announce/ANNOUNCE-0.14 create mode 100644 sysa/mes-0.22/doc/announce/ANNOUNCE-0.15 create mode 100644 sysa/mes-0.22/doc/announce/ANNOUNCE-0.16 create mode 100644 sysa/mes-0.22/doc/announce/ANNOUNCE-0.17 create mode 100644 sysa/mes-0.22/doc/announce/ANNOUNCE-0.18 create mode 100644 sysa/mes-0.22/doc/announce/ANNOUNCE-0.19 create mode 100644 sysa/mes-0.22/doc/announce/ANNOUNCE-0.20 create mode 100644 sysa/mes-0.22/doc/announce/ANNOUNCE-0.21 create mode 100644 sysa/mes-0.22/doc/announce/ANNOUNCE-0.22 create mode 100644 sysa/mes-0.22/doc/announce/ANNOUNCE-0.3 create mode 100644 sysa/mes-0.22/doc/announce/ANNOUNCE-0.4 create mode 100644 sysa/mes-0.22/doc/announce/ANNOUNCE-0.5 create mode 100644 sysa/mes-0.22/doc/announce/ANNOUNCE-0.6 create mode 100644 sysa/mes-0.22/doc/announce/ANNOUNCE-0.7 create mode 100644 sysa/mes-0.22/doc/announce/ANNOUNCE-0.8 create mode 100644 sysa/mes-0.22/doc/announce/ANNOUNCE-0.9 create mode 100644 sysa/mes-0.22/doc/announce/ANNOUNCE-2 create mode 100644 sysa/mes-0.22/doc/announce/README create mode 100644 sysa/mes-0.22/doc/announce/UPDATE-0.13 create mode 100644 sysa/mes-0.22/doc/fdl-1.3.texi create mode 100644 sysa/mes-0.22/doc/gendocs_template create mode 100644 sysa/mes-0.22/doc/images/README create mode 100644 sysa/mes-0.22/doc/images/gcc-mesboot-graph.dot create mode 100644 sysa/mes-0.22/doc/mes.texi create mode 100644 sysa/mes-0.22/guix.scm create mode 100644 sysa/mes-0.22/guix/git/mes.scm create mode 100644 sysa/mes-0.22/include/alloca.h create mode 100644 sysa/mes-0.22/include/ar.h create mode 100644 sysa/mes-0.22/include/argz.h create mode 100644 sysa/mes-0.22/include/assert.h create mode 100644 sysa/mes-0.22/include/ctype.h create mode 100644 sysa/mes-0.22/include/dirent.h create mode 100644 sysa/mes-0.22/include/dirstream.h create mode 100644 sysa/mes-0.22/include/dlfcn.h create mode 100644 sysa/mes-0.22/include/endian.h create mode 100644 sysa/mes-0.22/include/errno.h create mode 100644 sysa/mes-0.22/include/fcntl.h create mode 100644 sysa/mes-0.22/include/features.h create mode 100644 sysa/mes-0.22/include/float.h create mode 100644 sysa/mes-0.22/include/getopt.h create mode 100644 sysa/mes-0.22/include/gnu/hurd-types.h create mode 100644 sysa/mes-0.22/include/gnu/hurd.h create mode 100644 sysa/mes-0.22/include/gnu/syscall.h create mode 100644 sysa/mes-0.22/include/grp.h create mode 100644 sysa/mes-0.22/include/inttypes.h create mode 100644 sysa/mes-0.22/include/libgen.h create mode 100644 sysa/mes-0.22/include/limits.h create mode 100644 sysa/mes-0.22/include/linux/syscall.h create mode 100644 sysa/mes-0.22/include/linux/x86/syscall.h create mode 100644 sysa/mes-0.22/include/linux/x86_64/syscall.h create mode 100644 sysa/mes-0.22/include/locale.h create mode 100644 sysa/mes-0.22/include/mach/mach-init.h create mode 100644 sysa/mes-0.22/include/math.h create mode 100644 sysa/mes-0.22/include/memory.h create mode 100644 sysa/mes-0.22/include/mes/builtins.h create mode 100644 sysa/mes-0.22/include/mes/constants.h create mode 100644 sysa/mes-0.22/include/mes/lib-mini.h create mode 100644 sysa/mes-0.22/include/mes/lib.h create mode 100644 sysa/mes-0.22/include/mes/macros.h create mode 100644 sysa/mes-0.22/include/mes/mes.h create mode 100644 sysa/mes-0.22/include/pwd.h create mode 100644 sysa/mes-0.22/include/setjmp.h create mode 100644 sysa/mes-0.22/include/signal.h create mode 100644 sysa/mes-0.22/include/stdarg.h create mode 100644 sysa/mes-0.22/include/stdbool.h create mode 100644 sysa/mes-0.22/include/stddef.h create mode 100644 sysa/mes-0.22/include/stdint.h create mode 100644 sysa/mes-0.22/include/stdio.h create mode 100644 sysa/mes-0.22/include/stdlib.h create mode 100644 sysa/mes-0.22/include/stdnoreturn.h create mode 100644 sysa/mes-0.22/include/string.h create mode 100644 sysa/mes-0.22/include/strings.h create mode 100644 sysa/mes-0.22/include/sys/cdefs.h create mode 100644 sysa/mes-0.22/include/sys/dir.h create mode 100644 sysa/mes-0.22/include/sys/file.h create mode 100644 sysa/mes-0.22/include/sys/ioctl.h create mode 100644 sysa/mes-0.22/include/sys/mman.h create mode 100644 sysa/mes-0.22/include/sys/param.h create mode 100644 sysa/mes-0.22/include/sys/resource.h create mode 100644 sysa/mes-0.22/include/sys/select.h create mode 100644 sysa/mes-0.22/include/sys/stat.h create mode 100644 sysa/mes-0.22/include/sys/time.h create mode 100644 sysa/mes-0.22/include/sys/timeb.h create mode 100644 sysa/mes-0.22/include/sys/times.h create mode 100644 sysa/mes-0.22/include/sys/types.h create mode 100644 sysa/mes-0.22/include/sys/ucontext.h create mode 100644 sysa/mes-0.22/include/sys/user.h create mode 100644 sysa/mes-0.22/include/sys/wait.h create mode 100644 sysa/mes-0.22/include/termio.h create mode 100644 sysa/mes-0.22/include/time.h create mode 100644 sysa/mes-0.22/include/unistd.h create mode 100644 sysa/mes-0.22/lib/ctype/isalnum.c create mode 100644 sysa/mes-0.22/lib/ctype/isalpha.c create mode 100644 sysa/mes-0.22/lib/ctype/isascii.c create mode 100644 sysa/mes-0.22/lib/ctype/iscntrl.c create mode 100644 sysa/mes-0.22/lib/ctype/isdigit.c create mode 100644 sysa/mes-0.22/lib/ctype/isgraph.c create mode 100644 sysa/mes-0.22/lib/ctype/islower.c create mode 100644 sysa/mes-0.22/lib/ctype/isnumber.c create mode 100644 sysa/mes-0.22/lib/ctype/isprint.c create mode 100644 sysa/mes-0.22/lib/ctype/ispunct.c create mode 100644 sysa/mes-0.22/lib/ctype/isspace.c create mode 100644 sysa/mes-0.22/lib/ctype/isupper.c create mode 100644 sysa/mes-0.22/lib/ctype/isxdigit.c create mode 100644 sysa/mes-0.22/lib/ctype/tolower.c create mode 100644 sysa/mes-0.22/lib/ctype/toupper.c create mode 100644 sysa/mes-0.22/lib/dirent/__getdirentries.c create mode 100644 sysa/mes-0.22/lib/dirent/closedir.c create mode 100644 sysa/mes-0.22/lib/dirent/opendir.c create mode 100644 sysa/mes-0.22/lib/dirent/readdir.c create mode 100644 sysa/mes-0.22/lib/freebsd/x86-mes-gcc/crt1.c create mode 100644 sysa/mes-0.22/lib/freebsd/x86-mes-gcc/exit-42.S create mode 100644 sysa/mes-0.22/lib/freebsd/x86-mes-gcc/hello-mes.S create mode 100644 sysa/mes-0.22/lib/freebsd/x86-mes-gcc/mini.c create mode 100644 sysa/mes-0.22/lib/freebsd/x86-mes-mescc/crt1.c create mode 100644 sysa/mes-0.22/lib/freebsd/x86-mes-mescc/mini.c create mode 100644 sysa/mes-0.22/lib/freebsd/x86-mes/elf32-0exit-42.hex2 create mode 100644 sysa/mes-0.22/lib/freebsd/x86-mes/elf32-0header.hex2 create mode 100644 sysa/mes-0.22/lib/freebsd/x86-mes/elf32-0hello-mes.hex2 create mode 100644 sysa/mes-0.22/lib/freebsd/x86-mes/elf32-body-exit-42.hex2 create mode 100644 sysa/mes-0.22/lib/freebsd/x86-mes/elf32-body-hello-mes.hex2 create mode 100644 sysa/mes-0.22/lib/freebsd/x86-mes/elf32-footer-single-main.hex2 create mode 100644 sysa/mes-0.22/lib/freebsd/x86-mes/elf32-header.hex2 create mode 100644 sysa/mes-0.22/lib/gnu/_exit.c create mode 100644 sysa/mes-0.22/lib/gnu/_open3.c create mode 100644 sysa/mes-0.22/lib/gnu/_read.c create mode 100644 sysa/mes-0.22/lib/gnu/_write.c create mode 100644 sysa/mes-0.22/lib/gnu/dir-lookup.c create mode 100644 sysa/mes-0.22/lib/gnu/exec-startup-get-data.c create mode 100644 sysa/mes-0.22/lib/gnu/fd-get.c create mode 100644 sysa/mes-0.22/lib/gnu/fd-read.c create mode 100644 sysa/mes-0.22/lib/gnu/fd-write.c create mode 100644 sysa/mes-0.22/lib/gnu/hurd-start.c create mode 100644 sysa/mes-0.22/lib/gnu/io-read.c create mode 100644 sysa/mes-0.22/lib/gnu/io-write.c create mode 100644 sysa/mes-0.22/lib/gnu/malloc.c create mode 100644 sysa/mes-0.22/lib/gnu/proc-mark-exit.c create mode 100644 sysa/mes-0.22/lib/gnu/syscall.c create mode 100644 sysa/mes-0.22/lib/gnu/task-get-special-port.c create mode 100644 sysa/mes-0.22/lib/gnu/task-terminate.c create mode 100644 sysa/mes-0.22/lib/gnu/vm-allocate.c create mode 100644 sysa/mes-0.22/lib/gnu/vm-statistics.c create mode 100644 sysa/mes-0.22/lib/gnu/x86-mes-gcc/crt1.c create mode 100644 sysa/mes-0.22/lib/gnu/x86-mes-gcc/mini.c create mode 100644 sysa/mes-0.22/lib/libtcc1.c create mode 100644 sysa/mes-0.22/lib/linux/_getcwd.c create mode 100644 sysa/mes-0.22/lib/linux/_open3.c create mode 100644 sysa/mes-0.22/lib/linux/_read.c create mode 100644 sysa/mes-0.22/lib/linux/access.c create mode 100644 sysa/mes-0.22/lib/linux/brk.c create mode 100644 sysa/mes-0.22/lib/linux/chdir.c create mode 100644 sysa/mes-0.22/lib/linux/chmod.c create mode 100644 sysa/mes-0.22/lib/linux/clock_gettime.c create mode 100644 sysa/mes-0.22/lib/linux/close.c create mode 100644 sysa/mes-0.22/lib/linux/dup.c create mode 100644 sysa/mes-0.22/lib/linux/dup2.c create mode 100644 sysa/mes-0.22/lib/linux/execve.c create mode 100644 sysa/mes-0.22/lib/linux/fcntl.c create mode 100644 sysa/mes-0.22/lib/linux/fork.c create mode 100644 sysa/mes-0.22/lib/linux/fstat.c create mode 100644 sysa/mes-0.22/lib/linux/fsync.c create mode 100644 sysa/mes-0.22/lib/linux/getdents.c create mode 100644 sysa/mes-0.22/lib/linux/getegid.c create mode 100644 sysa/mes-0.22/lib/linux/geteuid.c create mode 100644 sysa/mes-0.22/lib/linux/getgid.c create mode 100644 sysa/mes-0.22/lib/linux/getpid.c create mode 100644 sysa/mes-0.22/lib/linux/getppid.c create mode 100644 sysa/mes-0.22/lib/linux/getrusage.c create mode 100644 sysa/mes-0.22/lib/linux/gettimeofday.c create mode 100644 sysa/mes-0.22/lib/linux/getuid.c create mode 100644 sysa/mes-0.22/lib/linux/ioctl.c create mode 100644 sysa/mes-0.22/lib/linux/kill.c create mode 100644 sysa/mes-0.22/lib/linux/link.c create mode 100644 sysa/mes-0.22/lib/linux/lseek.c create mode 100644 sysa/mes-0.22/lib/linux/lstat.c create mode 100644 sysa/mes-0.22/lib/linux/mkdir.c create mode 100644 sysa/mes-0.22/lib/linux/mknod.c create mode 100644 sysa/mes-0.22/lib/linux/nanosleep.c create mode 100644 sysa/mes-0.22/lib/linux/pipe.c create mode 100644 sysa/mes-0.22/lib/linux/read.c create mode 100644 sysa/mes-0.22/lib/linux/readlink.c create mode 100644 sysa/mes-0.22/lib/linux/rename.c create mode 100644 sysa/mes-0.22/lib/linux/rmdir.c create mode 100644 sysa/mes-0.22/lib/linux/setgid.c create mode 100644 sysa/mes-0.22/lib/linux/settimer.c create mode 100644 sysa/mes-0.22/lib/linux/setuid.c create mode 100644 sysa/mes-0.22/lib/linux/signal.c create mode 100644 sysa/mes-0.22/lib/linux/sigprogmask.c create mode 100644 sysa/mes-0.22/lib/linux/stat.c create mode 100644 sysa/mes-0.22/lib/linux/symlink.c create mode 100644 sysa/mes-0.22/lib/linux/time.c create mode 100644 sysa/mes-0.22/lib/linux/unlink.c create mode 100644 sysa/mes-0.22/lib/linux/waitpid.c create mode 100644 sysa/mes-0.22/lib/linux/x86-mes-gcc/crt0.c create mode 100644 sysa/mes-0.22/lib/linux/x86-mes-gcc/crt1.c create mode 100644 sysa/mes-0.22/lib/linux/x86-mes-gcc/crti.c create mode 100644 sysa/mes-0.22/lib/linux/x86-mes-gcc/crtn.c create mode 100644 sysa/mes-0.22/lib/linux/x86-mes-gcc/exit-42.S create mode 100644 sysa/mes-0.22/lib/linux/x86-mes-gcc/hello-mes.S create mode 100644 sysa/mes-0.22/lib/linux/x86-mes-gcc/mini.c create mode 100644 sysa/mes-0.22/lib/linux/x86-mes-gcc/syscall.c create mode 100644 sysa/mes-0.22/lib/linux/x86-mes-mescc/crt1.c create mode 100644 sysa/mes-0.22/lib/linux/x86-mes-mescc/exit-42.S create mode 100644 sysa/mes-0.22/lib/linux/x86-mes-mescc/hello-mes.S create mode 100644 sysa/mes-0.22/lib/linux/x86-mes-mescc/mini.c create mode 100644 sysa/mes-0.22/lib/linux/x86-mes-mescc/syscall.c create mode 100644 sysa/mes-0.22/lib/linux/x86-mes/elf32-0exit-42.hex2 create mode 100644 sysa/mes-0.22/lib/linux/x86-mes/elf32-0header.hex2 create mode 100644 sysa/mes-0.22/lib/linux/x86-mes/elf32-0hello-mes.hex2 create mode 100644 sysa/mes-0.22/lib/linux/x86-mes/elf32-body-exit-42.hex2 create mode 100644 sysa/mes-0.22/lib/linux/x86-mes/elf32-body-hello-mes.hex2 create mode 100644 sysa/mes-0.22/lib/linux/x86-mes/elf32-footer-single-main.hex2 create mode 100644 sysa/mes-0.22/lib/linux/x86-mes/elf32-header.hex2 create mode 100644 sysa/mes-0.22/lib/linux/x86_64-mes-gcc/crt0.c create mode 100644 sysa/mes-0.22/lib/linux/x86_64-mes-gcc/crt1.c create mode 100644 sysa/mes-0.22/lib/linux/x86_64-mes-gcc/crti.c create mode 100644 sysa/mes-0.22/lib/linux/x86_64-mes-gcc/crtn.c create mode 100644 sysa/mes-0.22/lib/linux/x86_64-mes-gcc/exit-42.S create mode 100644 sysa/mes-0.22/lib/linux/x86_64-mes-gcc/hello-mes.S create mode 100644 sysa/mes-0.22/lib/linux/x86_64-mes-gcc/mini.c create mode 100644 sysa/mes-0.22/lib/linux/x86_64-mes-gcc/syscall.c create mode 100644 sysa/mes-0.22/lib/linux/x86_64-mes-mescc/crt1.c create mode 100644 sysa/mes-0.22/lib/linux/x86_64-mes-mescc/exit-42.S create mode 100644 sysa/mes-0.22/lib/linux/x86_64-mes-mescc/hello-mes.S create mode 100644 sysa/mes-0.22/lib/linux/x86_64-mes-mescc/mini.c create mode 100644 sysa/mes-0.22/lib/linux/x86_64-mes-mescc/syscall.c create mode 100644 sysa/mes-0.22/lib/linux/x86_64-mes/elf64-0exit-42.hex2 create mode 100644 sysa/mes-0.22/lib/linux/x86_64-mes/elf64-0header.hex2 create mode 100644 sysa/mes-0.22/lib/linux/x86_64-mes/elf64-0hello-mes.hex2 create mode 100644 sysa/mes-0.22/lib/linux/x86_64-mes/elf64-body-exit-42.hex2 create mode 100644 sysa/mes-0.22/lib/linux/x86_64-mes/elf64-body-hello-mes.hex2 create mode 100644 sysa/mes-0.22/lib/linux/x86_64-mes/elf64-footer-single-main.hex2 create mode 100644 sysa/mes-0.22/lib/linux/x86_64-mes/elf64-header.hex2 create mode 100644 sysa/mes-0.22/lib/mach/mach-init.c create mode 100644 sysa/mes-0.22/lib/mach/mach_host_self.S create mode 100644 sysa/mes-0.22/lib/mach/mach_msg_trap.S create mode 100644 sysa/mes-0.22/lib/mach/mach_reply_port.S create mode 100644 sysa/mes-0.22/lib/mach/mach_task_self.S create mode 100644 sysa/mes-0.22/lib/mach/mach_thread_self.S create mode 100644 sysa/mes-0.22/lib/mach/msg.c create mode 100644 sysa/mes-0.22/lib/math/ceil.c create mode 100644 sysa/mes-0.22/lib/math/fabs.c create mode 100644 sysa/mes-0.22/lib/math/floor.c create mode 100644 sysa/mes-0.22/lib/mes/__assert_fail.c create mode 100644 sysa/mes-0.22/lib/mes/__buffered_read.c create mode 100644 sysa/mes-0.22/lib/mes/__mes_debug.c create mode 100644 sysa/mes-0.22/lib/mes/abtod.c create mode 100644 sysa/mes-0.22/lib/mes/abtol.c create mode 100644 sysa/mes-0.22/lib/mes/div.c create mode 100644 sysa/mes-0.22/lib/mes/dtoab.c create mode 100644 sysa/mes-0.22/lib/mes/eputc.c create mode 100644 sysa/mes-0.22/lib/mes/eputs.c create mode 100644 sysa/mes-0.22/lib/mes/fdgetc.c create mode 100644 sysa/mes-0.22/lib/mes/fdgets.c create mode 100644 sysa/mes-0.22/lib/mes/fdputc.c create mode 100644 sysa/mes-0.22/lib/mes/fdputs.c create mode 100644 sysa/mes-0.22/lib/mes/fdungetc.c create mode 100644 sysa/mes-0.22/lib/mes/itoa.c create mode 100644 sysa/mes-0.22/lib/mes/ltoa.c create mode 100644 sysa/mes-0.22/lib/mes/ltoab.c create mode 100644 sysa/mes-0.22/lib/mes/mes_open.c create mode 100644 sysa/mes-0.22/lib/mes/mini-write.c create mode 100644 sysa/mes-0.22/lib/mes/ntoab.c create mode 100644 sysa/mes-0.22/lib/mes/oputc.c create mode 100644 sysa/mes-0.22/lib/mes/oputs.c create mode 100644 sysa/mes-0.22/lib/mes/search-path.c create mode 100644 sysa/mes-0.22/lib/mes/ultoa.c create mode 100644 sysa/mes-0.22/lib/mes/utoa.c create mode 100644 sysa/mes-0.22/lib/posix/alarm.c create mode 100644 sysa/mes-0.22/lib/posix/buffered-read.c create mode 100644 sysa/mes-0.22/lib/posix/execl.c create mode 100644 sysa/mes-0.22/lib/posix/execlp.c create mode 100644 sysa/mes-0.22/lib/posix/execv.c create mode 100644 sysa/mes-0.22/lib/posix/execvp.c create mode 100644 sysa/mes-0.22/lib/posix/getcwd.c create mode 100644 sysa/mes-0.22/lib/posix/getenv.c create mode 100644 sysa/mes-0.22/lib/posix/getopt.c create mode 100644 sysa/mes-0.22/lib/posix/isatty.c create mode 100644 sysa/mes-0.22/lib/posix/mktemp.c create mode 100644 sysa/mes-0.22/lib/posix/open.c create mode 100644 sysa/mes-0.22/lib/posix/raise.c create mode 100644 sysa/mes-0.22/lib/posix/sbrk.c create mode 100644 sysa/mes-0.22/lib/posix/setenv.c create mode 100644 sysa/mes-0.22/lib/posix/sleep.c create mode 100644 sysa/mes-0.22/lib/posix/unsetenv.c create mode 100644 sysa/mes-0.22/lib/posix/wait.c create mode 100644 sysa/mes-0.22/lib/posix/write.c create mode 100644 sysa/mes-0.22/lib/stdio/clearerr.c create mode 100644 sysa/mes-0.22/lib/stdio/fclose.c create mode 100644 sysa/mes-0.22/lib/stdio/fdopen.c create mode 100644 sysa/mes-0.22/lib/stdio/feof.c create mode 100644 sysa/mes-0.22/lib/stdio/ferror.c create mode 100644 sysa/mes-0.22/lib/stdio/fflush.c create mode 100644 sysa/mes-0.22/lib/stdio/fgetc.c create mode 100644 sysa/mes-0.22/lib/stdio/fgets.c create mode 100644 sysa/mes-0.22/lib/stdio/fileno.c create mode 100644 sysa/mes-0.22/lib/stdio/fopen.c create mode 100644 sysa/mes-0.22/lib/stdio/fprintf.c create mode 100644 sysa/mes-0.22/lib/stdio/fputc.c create mode 100644 sysa/mes-0.22/lib/stdio/fputs.c create mode 100644 sysa/mes-0.22/lib/stdio/fread.c create mode 100644 sysa/mes-0.22/lib/stdio/freopen.c create mode 100644 sysa/mes-0.22/lib/stdio/fscanf.c create mode 100644 sysa/mes-0.22/lib/stdio/fseek.c create mode 100644 sysa/mes-0.22/lib/stdio/ftell.c create mode 100644 sysa/mes-0.22/lib/stdio/fwrite.c create mode 100644 sysa/mes-0.22/lib/stdio/getc.c create mode 100644 sysa/mes-0.22/lib/stdio/getchar.c create mode 100644 sysa/mes-0.22/lib/stdio/perror.c create mode 100644 sysa/mes-0.22/lib/stdio/printf.c create mode 100644 sysa/mes-0.22/lib/stdio/putc.c create mode 100644 sysa/mes-0.22/lib/stdio/putchar.c create mode 100644 sysa/mes-0.22/lib/stdio/remove.c create mode 100644 sysa/mes-0.22/lib/stdio/snprintf.c create mode 100644 sysa/mes-0.22/lib/stdio/sprintf.c create mode 100644 sysa/mes-0.22/lib/stdio/sscanf.c create mode 100644 sysa/mes-0.22/lib/stdio/ungetc.c create mode 100644 sysa/mes-0.22/lib/stdio/vfprintf.c create mode 100644 sysa/mes-0.22/lib/stdio/vfscanf.c create mode 100644 sysa/mes-0.22/lib/stdio/vprintf.c create mode 100644 sysa/mes-0.22/lib/stdio/vsnprintf.c create mode 100644 sysa/mes-0.22/lib/stdio/vsprintf.c create mode 100644 sysa/mes-0.22/lib/stdio/vsscanf.c create mode 100644 sysa/mes-0.22/lib/stdlib/__exit.c create mode 100644 sysa/mes-0.22/lib/stdlib/abort.c create mode 100644 sysa/mes-0.22/lib/stdlib/abs.c create mode 100644 sysa/mes-0.22/lib/stdlib/alloca.c create mode 100644 sysa/mes-0.22/lib/stdlib/atexit.c create mode 100644 sysa/mes-0.22/lib/stdlib/atof.c create mode 100644 sysa/mes-0.22/lib/stdlib/atoi.c create mode 100644 sysa/mes-0.22/lib/stdlib/atol.c create mode 100644 sysa/mes-0.22/lib/stdlib/calloc.c create mode 100644 sysa/mes-0.22/lib/stdlib/exit.c create mode 100644 sysa/mes-0.22/lib/stdlib/free.c create mode 100644 sysa/mes-0.22/lib/stdlib/malloc.c create mode 100644 sysa/mes-0.22/lib/stdlib/mbstowcs.c create mode 100644 sysa/mes-0.22/lib/stdlib/puts.c create mode 100644 sysa/mes-0.22/lib/stdlib/qsort.c create mode 100644 sysa/mes-0.22/lib/stdlib/realloc.c create mode 100644 sysa/mes-0.22/lib/stdlib/strtod.c create mode 100644 sysa/mes-0.22/lib/stdlib/strtof.c create mode 100644 sysa/mes-0.22/lib/stdlib/strtol.c create mode 100644 sysa/mes-0.22/lib/stdlib/strtold.c create mode 100644 sysa/mes-0.22/lib/stdlib/strtoll.c create mode 100644 sysa/mes-0.22/lib/stdlib/strtoul.c create mode 100644 sysa/mes-0.22/lib/stdlib/strtoull.c create mode 100644 sysa/mes-0.22/lib/string/argz-count.c create mode 100644 sysa/mes-0.22/lib/string/argz-extract.c create mode 100644 sysa/mes-0.22/lib/string/bcmp.c create mode 100644 sysa/mes-0.22/lib/string/bcopy.c create mode 100644 sysa/mes-0.22/lib/string/bzero.c create mode 100644 sysa/mes-0.22/lib/string/index.c create mode 100644 sysa/mes-0.22/lib/string/memchr.c create mode 100644 sysa/mes-0.22/lib/string/memcmp.c create mode 100644 sysa/mes-0.22/lib/string/memcpy.c create mode 100644 sysa/mes-0.22/lib/string/memmem.c create mode 100644 sysa/mes-0.22/lib/string/memmove.c create mode 100644 sysa/mes-0.22/lib/string/memset.c create mode 100644 sysa/mes-0.22/lib/string/rindex.c create mode 100644 sysa/mes-0.22/lib/string/strcat.c create mode 100644 sysa/mes-0.22/lib/string/strchr.c create mode 100644 sysa/mes-0.22/lib/string/strcmp.c create mode 100644 sysa/mes-0.22/lib/string/strcpy.c create mode 100644 sysa/mes-0.22/lib/string/strcspn.c create mode 100644 sysa/mes-0.22/lib/string/strdup.c create mode 100644 sysa/mes-0.22/lib/string/strerror.c create mode 100644 sysa/mes-0.22/lib/string/strlen.c create mode 100644 sysa/mes-0.22/lib/string/strlwr.c create mode 100644 sysa/mes-0.22/lib/string/strncat.c create mode 100644 sysa/mes-0.22/lib/string/strncmp.c create mode 100644 sysa/mes-0.22/lib/string/strncpy.c create mode 100644 sysa/mes-0.22/lib/string/strpbrk.c create mode 100644 sysa/mes-0.22/lib/string/strrchr.c create mode 100644 sysa/mes-0.22/lib/string/strspn.c create mode 100644 sysa/mes-0.22/lib/string/strstr.c create mode 100644 sysa/mes-0.22/lib/string/strupr.c create mode 100644 sysa/mes-0.22/lib/stub/__cleanup.c create mode 100644 sysa/mes-0.22/lib/stub/_getcwd.c create mode 100644 sysa/mes-0.22/lib/stub/_open3.c create mode 100644 sysa/mes-0.22/lib/stub/access.c create mode 100644 sysa/mes-0.22/lib/stub/atan2.c create mode 100644 sysa/mes-0.22/lib/stub/brk.c create mode 100644 sysa/mes-0.22/lib/stub/bsearch.c create mode 100644 sysa/mes-0.22/lib/stub/chmod.c create mode 100644 sysa/mes-0.22/lib/stub/chown.c create mode 100644 sysa/mes-0.22/lib/stub/clock_gettime.c create mode 100644 sysa/mes-0.22/lib/stub/close.c create mode 100644 sysa/mes-0.22/lib/stub/cos.c create mode 100644 sysa/mes-0.22/lib/stub/ctime.c create mode 100644 sysa/mes-0.22/lib/stub/dup.c create mode 100644 sysa/mes-0.22/lib/stub/dup2.c create mode 100644 sysa/mes-0.22/lib/stub/execve.c create mode 100644 sysa/mes-0.22/lib/stub/exp.c create mode 100644 sysa/mes-0.22/lib/stub/fork.c create mode 100644 sysa/mes-0.22/lib/stub/fpurge.c create mode 100644 sysa/mes-0.22/lib/stub/freadahead.c create mode 100644 sysa/mes-0.22/lib/stub/frexp.c create mode 100644 sysa/mes-0.22/lib/stub/getgrgid.c create mode 100644 sysa/mes-0.22/lib/stub/getgrnam.c create mode 100644 sysa/mes-0.22/lib/stub/getlogin.c create mode 100644 sysa/mes-0.22/lib/stub/getpgid.c create mode 100644 sysa/mes-0.22/lib/stub/getpgrp.c create mode 100644 sysa/mes-0.22/lib/stub/getpwnam.c create mode 100644 sysa/mes-0.22/lib/stub/getpwuid.c create mode 100644 sysa/mes-0.22/lib/stub/gettimeofday.c create mode 100644 sysa/mes-0.22/lib/stub/gmtime.c create mode 100644 sysa/mes-0.22/lib/stub/ioctl.c create mode 100644 sysa/mes-0.22/lib/stub/ldexp.c create mode 100644 sysa/mes-0.22/lib/stub/localtime.c create mode 100644 sysa/mes-0.22/lib/stub/log.c create mode 100644 sysa/mes-0.22/lib/stub/lseek.c create mode 100644 sysa/mes-0.22/lib/stub/mktime.c create mode 100644 sysa/mes-0.22/lib/stub/modf.c create mode 100644 sysa/mes-0.22/lib/stub/mprotect.c create mode 100644 sysa/mes-0.22/lib/stub/pclose.c create mode 100644 sysa/mes-0.22/lib/stub/popen.c create mode 100644 sysa/mes-0.22/lib/stub/pow.c create mode 100644 sysa/mes-0.22/lib/stub/rand.c create mode 100644 sysa/mes-0.22/lib/stub/rewind.c create mode 100644 sysa/mes-0.22/lib/stub/rmdir.c create mode 100644 sysa/mes-0.22/lib/stub/setbuf.c create mode 100644 sysa/mes-0.22/lib/stub/setgrent.c create mode 100644 sysa/mes-0.22/lib/stub/setlocale.c create mode 100644 sysa/mes-0.22/lib/stub/setvbuf.c create mode 100644 sysa/mes-0.22/lib/stub/sigaction.c create mode 100644 sysa/mes-0.22/lib/stub/sigaddset.c create mode 100644 sysa/mes-0.22/lib/stub/sigblock.c create mode 100644 sysa/mes-0.22/lib/stub/sigdelset.c create mode 100644 sysa/mes-0.22/lib/stub/sigemptyset.c create mode 100644 sysa/mes-0.22/lib/stub/sigsetmask.c create mode 100644 sysa/mes-0.22/lib/stub/sin.c create mode 100644 sysa/mes-0.22/lib/stub/sqrt.c create mode 100644 sysa/mes-0.22/lib/stub/stat.c create mode 100644 sysa/mes-0.22/lib/stub/strftime.c create mode 100644 sysa/mes-0.22/lib/stub/sys_siglist.c create mode 100644 sysa/mes-0.22/lib/stub/system.c create mode 100644 sysa/mes-0.22/lib/stub/time.c create mode 100644 sysa/mes-0.22/lib/stub/times.c create mode 100644 sysa/mes-0.22/lib/stub/ttyname.c create mode 100644 sysa/mes-0.22/lib/stub/umask.c create mode 100644 sysa/mes-0.22/lib/stub/unlink.c create mode 100644 sysa/mes-0.22/lib/stub/utime.c create mode 100644 sysa/mes-0.22/lib/stub/waitpid.c create mode 100644 sysa/mes-0.22/lib/tests/assert/50-assert.c create mode 100644 sysa/mes-0.22/lib/tests/dirent/90-readdir.c create mode 100644 sysa/mes-0.22/lib/tests/dirent/readdir.dir/dir/.keep create mode 100644 sysa/mes-0.22/lib/tests/dirent/readdir.dir/file create mode 120000 sysa/mes-0.22/lib/tests/dirent/readdir.dir/link create mode 100644 sysa/mes-0.22/lib/tests/io/90-stat.c create mode 100644 sysa/mes-0.22/lib/tests/mes/30-eputs.c create mode 100644 sysa/mes-0.22/lib/tests/mes/30-oputs.c create mode 100644 sysa/mes-0.22/lib/tests/mes/30-oputs.stdout create mode 100644 sysa/mes-0.22/lib/tests/mes/50-itoa.c create mode 100644 sysa/mes-0.22/lib/tests/mes/90-abtod.c create mode 100644 sysa/mes-0.22/lib/tests/mes/90-dtoab.c create mode 100644 sysa/mes-0.22/lib/tests/mes/90-dtoab.stdout create mode 100644 sysa/mes-0.22/lib/tests/posix/50-getenv.c create mode 100644 sysa/mes-0.22/lib/tests/posix/50-open-read.c create mode 100644 sysa/mes-0.22/lib/tests/posix/90-execlp.c create mode 100644 sysa/mes-0.22/lib/tests/posix/90-execlp.stdout create mode 100644 sysa/mes-0.22/lib/tests/posix/90-unsetenv.c create mode 100644 sysa/mes-0.22/lib/tests/posix/data/open-read create mode 100644 sysa/mes-0.22/lib/tests/scaffold/01-return-0.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/02-return-1.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/02-return-1.exit create mode 100644 sysa/mes-0.22/lib/tests/scaffold/03-call.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/04-call-0.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/05-call-1.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/05-call-1.exit create mode 100644 sysa/mes-0.22/lib/tests/scaffold/06-call-2.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/06-call-not-1.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/06-call-string.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/06-call-variable.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/06-not-call-1.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/06-return-void.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/07-include.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/07-include.exit create mode 100644 sysa/mes-0.22/lib/tests/scaffold/08-assign-global.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/08-assign-negative.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/08-assign.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/10-if-0.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/11-if-1.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/12-if-eq.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/13-if-neq.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/14-if-goto.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/15-if-not-f.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/16-if-t.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/17-compare-and-or.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/17-compare-and.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/17-compare-assign.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/17-compare-call.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/17-compare-char.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/17-compare-ge.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/17-compare-gt.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/17-compare-le.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/17-compare-lt.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/17-compare-or.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/17-compare-unsigned-char-le.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/17-compare-unsigned-ge.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/17-compare-unsigned-gt.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/17-compare-unsigned-le.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/17-compare-unsigned-long-le.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/17-compare-unsigned-lt.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/17-compare-unsigned-short-le.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/18-assign-shadow.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/20-while.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/21-char-array-simple.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/21-char-array.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/22-while-char-array.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/23-global-pointer-init-null.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/23-global-pointer-init.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/23-global-pointer-pointer-ref.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/23-global-pointer-ref.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/23-pointer-sub.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/23-pointer.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/30-exit-0.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/30-exit-42.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/30-exit-42.exit create mode 100644 sysa/mes-0.22/lib/tests/scaffold/32-call-wrap.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/32-compare.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/33-and-or.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/34-pre-post.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/35-compare-char.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/36-compare-arithmetic.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/37-compare-assign.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/38-compare-call-2.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/38-compare-call-3.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/38-compare-call.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/40-if-else.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/41-ternary.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/42-goto-label.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/43-for-do-while.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/44-switch-body-fallthrough.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/44-switch-fallthrough.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/44-switch.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/45-void-call.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/46-function-static.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/47-function-expression.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/48-global-static.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/51-pointer-sub.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/54-argc.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/54-argv.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/55-char-array.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/60-math.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/61-array.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/62-array.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/63-struct-array-assign.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/63-struct-array-compare.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/63-struct-array.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/63-struct-assign.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/63-struct-cell.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/63-struct-function.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/63-struct-local.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/63-struct-pointer.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/63-struct.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/64-make-cell.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/65-read.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/66-local-char-array.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/70-array-in-struct-init.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/70-array-in-struct-init.stdout create mode 100644 sysa/mes-0.22/lib/tests/scaffold/70-extern.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/70-extern.stdout create mode 100644 sysa/mes-0.22/lib/tests/scaffold/70-function-destruct-declare.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/70-stdarg.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/70-struct-post.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/70-struct-short-enum-init.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/70-struct-short-enum-init.stdout create mode 100644 sysa/mes-0.22/lib/tests/scaffold/71-struct-array.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/72-typedef-struct-def-local.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/72-typedef-struct-def.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/73-union-hello.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/73-union.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/74-multi-line-string.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/75-struct-union.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/76-pointer-arithmetic-pp.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/76-pointer-arithmetic.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/77-pointer-assign.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/78-union-struct.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/79-int-array-simple.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/79-int-array.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/7a-struct-char-array.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/7b-struct-int-array-hello.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/7b-struct-int-array-pointer.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/7b-struct-int-array.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/7c-dynarray.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/7d-cast-char.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/7e-struct-array-access.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/7f-struct-pointer-arithmetic.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/7g-struct-byte-word-field.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/7h-struct-assign.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/7i-struct-struct-simple.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/7i-struct-struct.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/7k-empty-for.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/7k-for-each-elem-simple.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/7k-for-each-elem.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/7l-struct-any-size-array-simple.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/7l-struct-any-size-array.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/7m-struct-char-array-assign.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/7n-struct-struct-array.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/7o-struct-pre-post-simple.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/7o-struct-pre-post.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/7p-struct-cast.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/7q-bit-field-simple.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/7q-bit-field.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/7r-sign-extend.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/7s-struct-short.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/7s-unsigned-compare.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/7t-function-destruct.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/7u-call-ternary.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/7u-double.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/7u-inc-byte-word.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/7u-long-long.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/7u-struct-func.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/7u-struct-size10.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/7u-ternary-expression.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/7u-vstack.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/82-define.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/83-heterogenoous-init.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/84-struct-field-list.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/85-sizeof.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/90-goto-var.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/91-goto-array.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/a0-call-trunc-char.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/a0-call-trunc-int.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/a0-call-trunc-short.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/a0-math-divide-signed-negative.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/a1-global-no-align.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/a1-global-no-clobber.c create mode 100644 sysa/mes-0.22/lib/tests/scaffold/exit-42.i create mode 100644 sysa/mes-0.22/lib/tests/scaffold/t.c create mode 100644 sysa/mes-0.22/lib/tests/setjmp/80-setjmp.c create mode 100644 sysa/mes-0.22/lib/tests/signal/90-signal.c create mode 100644 sysa/mes-0.22/lib/tests/stdio/70-printf-hello.c create mode 100644 sysa/mes-0.22/lib/tests/stdio/70-printf-simple.c create mode 100644 sysa/mes-0.22/lib/tests/stdio/70-printf.c create mode 100644 sysa/mes-0.22/lib/tests/stdio/80-sscanf.c create mode 100644 sysa/mes-0.22/lib/tests/stdio/90-fopen-append.c create mode 100644 sysa/mes-0.22/lib/tests/stdio/90-fopen.c create mode 100644 sysa/mes-0.22/lib/tests/stdio/90-fread-fwrite.c create mode 100644 sysa/mes-0.22/lib/tests/stdio/90-fseek.c create mode 100644 sysa/mes-0.22/lib/tests/stdio/90-sprintf.c create mode 100644 sysa/mes-0.22/lib/tests/stdio/90-sprintf.stdout create mode 100644 sysa/mes-0.22/lib/tests/stdlib/50-malloc.c create mode 100644 sysa/mes-0.22/lib/tests/stdlib/70-strtoull.c create mode 100644 sysa/mes-0.22/lib/tests/stdlib/80-qsort-dupes.c create mode 100644 sysa/mes-0.22/lib/tests/stdlib/80-qsort.c create mode 100644 sysa/mes-0.22/lib/tests/stdlib/90-strtol.c create mode 100644 sysa/mes-0.22/lib/tests/string/30-strlen.c create mode 100644 sysa/mes-0.22/lib/tests/string/50-strcmp.c create mode 100644 sysa/mes-0.22/lib/tests/string/50-strcpy.c create mode 100644 sysa/mes-0.22/lib/tests/string/50-strncmp.c create mode 100644 sysa/mes-0.22/lib/tests/string/70-strchr.c create mode 100644 sysa/mes-0.22/lib/tests/string/80-strncpy.c create mode 100644 sysa/mes-0.22/lib/tests/string/80-strrchr.c create mode 100644 sysa/mes-0.22/lib/tests/string/90-snprintf.c create mode 100644 sysa/mes-0.22/lib/tests/string/90-strpbrk.c create mode 100644 sysa/mes-0.22/lib/tests/string/90-strspn.c create mode 100644 sysa/mes-0.22/lib/x86-mes-gcc/setjmp.c create mode 100644 sysa/mes-0.22/lib/x86-mes-mescc/exit-42.c create mode 100644 sysa/mes-0.22/lib/x86-mes-mescc/setjmp.c create mode 100644 sysa/mes-0.22/lib/x86-mes/x86.M1 create mode 100644 sysa/mes-0.22/lib/x86_64-mes-gcc/setjmp.c create mode 100644 sysa/mes-0.22/lib/x86_64-mes-mescc/exit-42.c create mode 100644 sysa/mes-0.22/lib/x86_64-mes-mescc/setjmp.c create mode 100644 sysa/mes-0.22/lib/x86_64-mes/x86_64.M1 create mode 100644 sysa/mes-0.22/mes/module/mes/base.mes create mode 100644 sysa/mes-0.22/mes/module/mes/boot-00.scm create mode 100644 sysa/mes-0.22/mes/module/mes/boot-01.scm create mode 100644 sysa/mes-0.22/mes/module/mes/boot-02.scm create mode 100644 sysa/mes-0.22/mes/module/mes/boot-03.scm create mode 100644 sysa/mes-0.22/mes/module/mes/catch.mes create mode 100644 sysa/mes-0.22/mes/module/mes/display.mes create mode 100644 sysa/mes-0.22/mes/module/mes/fluids.mes create mode 100644 sysa/mes-0.22/mes/module/mes/getopt-long.mes create mode 100644 sysa/mes-0.22/mes/module/mes/guile.mes create mode 100644 sysa/mes-0.22/mes/module/mes/lalr.mes create mode 100644 sysa/mes-0.22/mes/module/mes/lalr.scm create mode 100644 sysa/mes-0.22/mes/module/mes/let.mes create mode 100644 sysa/mes-0.22/mes/module/mes/match.mes create mode 100644 sysa/mes-0.22/mes/module/mes/match.scm create mode 100644 sysa/mes-0.22/mes/module/mes/mescc.mes create mode 100644 sysa/mes-0.22/mes/module/mes/misc.mes create mode 100644 sysa/mes-0.22/mes/module/mes/module.mes create mode 100644 sysa/mes-0.22/mes/module/mes/optargs.mes create mode 100644 sysa/mes-0.22/mes/module/mes/peg.mes create mode 100644 sysa/mes-0.22/mes/module/mes/peg/cache.scm create mode 100644 sysa/mes-0.22/mes/module/mes/peg/codegen.scm create mode 100644 sysa/mes-0.22/mes/module/mes/peg/simplify-tree.scm create mode 100644 sysa/mes-0.22/mes/module/mes/peg/string-peg.scm create mode 100644 sysa/mes-0.22/mes/module/mes/peg/using-parsers.scm create mode 100644 sysa/mes-0.22/mes/module/mes/pmatch.mes create mode 100644 sysa/mes-0.22/mes/module/mes/pmatch.scm create mode 100644 sysa/mes-0.22/mes/module/mes/posix.mes create mode 100644 sysa/mes-0.22/mes/module/mes/pretty-print.mes create mode 100644 sysa/mes-0.22/mes/module/mes/pretty-print.scm create mode 100644 sysa/mes-0.22/mes/module/mes/psyntax-0.mes create mode 100644 sysa/mes-0.22/mes/module/mes/psyntax-1.mes create mode 100644 sysa/mes-0.22/mes/module/mes/psyntax.mes create mode 100644 sysa/mes-0.22/mes/module/mes/psyntax.pp create mode 100644 sysa/mes-0.22/mes/module/mes/psyntax.pp.header create mode 100644 sysa/mes-0.22/mes/module/mes/psyntax.ss create mode 100644 sysa/mes-0.22/mes/module/mes/quasiquote.mes create mode 100644 sysa/mes-0.22/mes/module/mes/quasisyntax.mes create mode 100644 sysa/mes-0.22/mes/module/mes/quasisyntax.scm create mode 100644 sysa/mes-0.22/mes/module/mes/repl.mes create mode 100644 sysa/mes-0.22/mes/module/mes/scm.mes create mode 100644 sysa/mes-0.22/mes/module/mes/simple-format.mes create mode 100644 sysa/mes-0.22/mes/module/mes/syntax.mes create mode 100644 sysa/mes-0.22/mes/module/mes/syntax.scm create mode 100644 sysa/mes-0.22/mes/module/mes/test.mes create mode 100644 sysa/mes-0.22/mes/module/mes/tiny-0.mes create mode 100644 sysa/mes-0.22/mes/module/mes/type-0.mes create mode 100644 sysa/mes-0.22/mes/module/mescc.mes create mode 100644 sysa/mes-0.22/mes/module/mescc/M1.mes create mode 100644 sysa/mes-0.22/mes/module/mescc/as.mes create mode 100644 sysa/mes-0.22/mes/module/mescc/bytevectors.mes create mode 100644 sysa/mes-0.22/mes/module/mescc/compile.mes create mode 100644 sysa/mes-0.22/mes/module/mescc/i386/as.mes create mode 100644 sysa/mes-0.22/mes/module/mescc/i386/info.mes create mode 100644 sysa/mes-0.22/mes/module/mescc/info.mes create mode 100644 sysa/mes-0.22/mes/module/mescc/mescc.mes create mode 100644 sysa/mes-0.22/mes/module/mescc/preprocess.mes create mode 100644 sysa/mes-0.22/mes/module/mescc/x86_64/as.mes create mode 100644 sysa/mes-0.22/mes/module/mescc/x86_64/info.mes create mode 100644 sysa/mes-0.22/mes/module/nyacc/lalr.mes create mode 100644 sysa/mes-0.22/mes/module/nyacc/lang/c99/cpp.mes create mode 100644 sysa/mes-0.22/mes/module/nyacc/lang/c99/parser.mes create mode 100644 sysa/mes-0.22/mes/module/nyacc/lang/c99/pprint.mes create mode 100644 sysa/mes-0.22/mes/module/nyacc/lang/c99/util.mes create mode 100644 sysa/mes-0.22/mes/module/nyacc/lang/calc/parser.mes create mode 100644 sysa/mes-0.22/mes/module/nyacc/lang/sx-util.mes create mode 100644 sysa/mes-0.22/mes/module/nyacc/lang/util.mes create mode 100644 sysa/mes-0.22/mes/module/nyacc/lex.mes create mode 100644 sysa/mes-0.22/mes/module/nyacc/parse.mes create mode 100644 sysa/mes-0.22/mes/module/nyacc/util.mes create mode 100644 sysa/mes-0.22/mes/module/nyacc/version.mes create mode 100644 sysa/mes-0.22/mes/module/rnrs/arithmetic/bitwise.mes create mode 100644 sysa/mes-0.22/mes/module/srfi/srfi-0.mes create mode 100644 sysa/mes-0.22/mes/module/srfi/srfi-1.mes create mode 100644 sysa/mes-0.22/mes/module/srfi/srfi-1.scm create mode 100644 sysa/mes-0.22/mes/module/srfi/srfi-13.mes create mode 100644 sysa/mes-0.22/mes/module/srfi/srfi-14.mes create mode 100644 sysa/mes-0.22/mes/module/srfi/srfi-16.mes create mode 100644 sysa/mes-0.22/mes/module/srfi/srfi-16.scm create mode 100644 sysa/mes-0.22/mes/module/srfi/srfi-26.mes create mode 100644 sysa/mes-0.22/mes/module/srfi/srfi-26.scm create mode 100644 sysa/mes-0.22/mes/module/srfi/srfi-43.mes create mode 100644 sysa/mes-0.22/mes/module/srfi/srfi-8.mes create mode 100644 sysa/mes-0.22/mes/module/srfi/srfi-9-struct.mes create mode 100644 sysa/mes-0.22/mes/module/srfi/srfi-9-vector.mes create mode 120000 sysa/mes-0.22/mes/module/srfi/srfi-9.mes create mode 100644 sysa/mes-0.22/mes/module/srfi/srfi-9/gnu-struct.mes create mode 100644 sysa/mes-0.22/mes/module/srfi/srfi-9/gnu-vector.mes create mode 120000 sysa/mes-0.22/mes/module/srfi/srfi-9/gnu.mes create mode 100644 sysa/mes-0.22/mes/module/sxml/xpath.mes create mode 100644 sysa/mes-0.22/mes/module/sxml/xpath.scm create mode 100644 sysa/mes-0.22/module/mes/getopt-long.scm create mode 100644 sysa/mes-0.22/module/mes/guile.scm create mode 100644 sysa/mes-0.22/module/mes/mes-0.scm create mode 100644 sysa/mes-0.22/module/mes/misc.scm create mode 100644 sysa/mes-0.22/module/mes/optargs.scm create mode 100644 sysa/mes-0.22/module/mes/test.scm create mode 100644 sysa/mes-0.22/module/mescc.scm create mode 100644 sysa/mes-0.22/module/mescc/M1.scm create mode 100644 sysa/mes-0.22/module/mescc/as.scm create mode 100644 sysa/mes-0.22/module/mescc/bytevectors.scm create mode 100644 sysa/mes-0.22/module/mescc/compile.scm create mode 100644 sysa/mes-0.22/module/mescc/i386/as.scm create mode 100644 sysa/mes-0.22/module/mescc/i386/info.scm create mode 100644 sysa/mes-0.22/module/mescc/info.scm create mode 100644 sysa/mes-0.22/module/mescc/mescc.scm create mode 100644 sysa/mes-0.22/module/mescc/preprocess.scm create mode 100644 sysa/mes-0.22/module/mescc/x86_64/as.scm create mode 100644 sysa/mes-0.22/module/mescc/x86_64/info.scm create mode 100644 sysa/mes-0.22/module/nyacc/ChangeLog create mode 100644 sysa/mes-0.22/module/nyacc/bison.scm create mode 100644 sysa/mes-0.22/module/nyacc/compat18.scm create mode 100644 sysa/mes-0.22/module/nyacc/export.scm create mode 100644 sysa/mes-0.22/module/nyacc/import.scm create mode 100644 sysa/mes-0.22/module/nyacc/lalr.scm create mode 100644 sysa/mes-0.22/module/nyacc/lang/c99/ChangeLog create mode 100644 sysa/mes-0.22/module/nyacc/lang/c99/README create mode 100644 sysa/mes-0.22/module/nyacc/lang/c99/body.scm create mode 100644 sysa/mes-0.22/module/nyacc/lang/c99/cpp.scm create mode 100644 sysa/mes-0.22/module/nyacc/lang/c99/cppmach.scm create mode 100644 sysa/mes-0.22/module/nyacc/lang/c99/cxeval.scm create mode 100644 sysa/mes-0.22/module/nyacc/lang/c99/cxmach.scm create mode 100644 sysa/mes-0.22/module/nyacc/lang/c99/ffi-help.scm create mode 100644 sysa/mes-0.22/module/nyacc/lang/c99/mach.d/c99-act.scm create mode 100644 sysa/mes-0.22/module/nyacc/lang/c99/mach.d/c99-tab.scm create mode 100644 sysa/mes-0.22/module/nyacc/lang/c99/mach.d/c99cx-act.scm create mode 100644 sysa/mes-0.22/module/nyacc/lang/c99/mach.d/c99cx-tab.scm create mode 100644 sysa/mes-0.22/module/nyacc/lang/c99/mach.d/c99x-act.scm create mode 100644 sysa/mes-0.22/module/nyacc/lang/c99/mach.d/c99x-tab.scm create mode 100644 sysa/mes-0.22/module/nyacc/lang/c99/mach.d/cpp-act.scm create mode 100644 sysa/mes-0.22/module/nyacc/lang/c99/mach.d/cpp-tab.scm create mode 100644 sysa/mes-0.22/module/nyacc/lang/c99/mach.scm create mode 100644 sysa/mes-0.22/module/nyacc/lang/c99/munge.scm create mode 100644 sysa/mes-0.22/module/nyacc/lang/c99/parser.scm create mode 100644 sysa/mes-0.22/module/nyacc/lang/c99/pprint.scm create mode 100644 sysa/mes-0.22/module/nyacc/lang/c99/util.scm create mode 100644 sysa/mes-0.22/module/nyacc/lang/sx-util.scm create mode 100644 sysa/mes-0.22/module/nyacc/lang/util.scm create mode 100644 sysa/mes-0.22/module/nyacc/lex.scm create mode 100644 sysa/mes-0.22/module/nyacc/parse.scm create mode 100644 sysa/mes-0.22/module/nyacc/util.scm create mode 100644 sysa/mes-0.22/module/nyacc/version.scm create mode 100644 sysa/mes-0.22/scaffold/argv.c create mode 100644 sysa/mes-0.22/scaffold/boot/00-zero.scm create mode 100644 sysa/mes-0.22/scaffold/boot/01-true.scm create mode 100644 sysa/mes-0.22/scaffold/boot/02-identifier.scm create mode 100644 sysa/mes-0.22/scaffold/boot/02-symbol.scm create mode 100644 sysa/mes-0.22/scaffold/boot/03-big-string.scm create mode 100644 sysa/mes-0.22/scaffold/boot/03-string.scm create mode 100644 sysa/mes-0.22/scaffold/boot/04-cons.scm create mode 100644 sysa/mes-0.22/scaffold/boot/04-quote.scm create mode 100644 sysa/mes-0.22/scaffold/boot/05-big-list.scm create mode 100644 sysa/mes-0.22/scaffold/boot/05-list-list.scm create mode 100644 sysa/mes-0.22/scaffold/boot/05-list.scm create mode 100644 sysa/mes-0.22/scaffold/boot/06-tick.scm create mode 100644 sysa/mes-0.22/scaffold/boot/07-if.scm create mode 100644 sysa/mes-0.22/scaffold/boot/08-if-if.scm create mode 100644 sysa/mes-0.22/scaffold/boot/10-cons.scm create mode 100644 sysa/mes-0.22/scaffold/boot/11-list.scm create mode 100644 sysa/mes-0.22/scaffold/boot/11-vector.scm create mode 100644 sysa/mes-0.22/scaffold/boot/12-car.scm create mode 100644 sysa/mes-0.22/scaffold/boot/13-cdr.scm create mode 100644 sysa/mes-0.22/scaffold/boot/14-exit.scm create mode 100644 sysa/mes-0.22/scaffold/boot/15-display.scm create mode 100644 sysa/mes-0.22/scaffold/boot/16-if-eq-quote.scm create mode 100644 sysa/mes-0.22/scaffold/boot/17-equal2.scm create mode 100644 sysa/mes-0.22/scaffold/boot/17-memq-keyword.scm create mode 100644 sysa/mes-0.22/scaffold/boot/17-memq.scm create mode 100644 sysa/mes-0.22/scaffold/boot/17-open-input-string.scm create mode 100644 sysa/mes-0.22/scaffold/boot/17-string-append.scm create mode 100644 sysa/mes-0.22/scaffold/boot/17-string-equal.scm create mode 100644 sysa/mes-0.22/scaffold/boot/20-define-quote.scm create mode 100644 sysa/mes-0.22/scaffold/boot/20-define-quoted.scm create mode 100644 sysa/mes-0.22/scaffold/boot/20-define.scm create mode 100644 sysa/mes-0.22/scaffold/boot/21-define-procedure.scm create mode 100644 sysa/mes-0.22/scaffold/boot/22-define-procedure-2.scm create mode 100644 sysa/mes-0.22/scaffold/boot/23-begin.scm create mode 100644 sysa/mes-0.22/scaffold/boot/24-begin-define.scm create mode 100644 sysa/mes-0.22/scaffold/boot/25-begin-define-2.scm create mode 100644 sysa/mes-0.22/scaffold/boot/26-begin-define-later.scm create mode 100644 sysa/mes-0.22/scaffold/boot/26-define-define.scm create mode 100644 sysa/mes-0.22/scaffold/boot/27-lambda-define.scm create mode 100644 sysa/mes-0.22/scaffold/boot/28-define-define.scm create mode 100644 sysa/mes-0.22/scaffold/boot/29-lambda-define.scm create mode 100644 sysa/mes-0.22/scaffold/boot/2a-lambda-lambda.scm create mode 100644 sysa/mes-0.22/scaffold/boot/2b-define-lambda.scm create mode 100644 sysa/mes-0.22/scaffold/boot/2c-define-lambda-recurse.scm create mode 100644 sysa/mes-0.22/scaffold/boot/2d-compose.scm create mode 100644 sysa/mes-0.22/scaffold/boot/2d-define-lambda-set.scm create mode 100644 sysa/mes-0.22/scaffold/boot/2e-define-first.scm create mode 100644 sysa/mes-0.22/scaffold/boot/2f-define-second-lambda.scm create mode 100644 sysa/mes-0.22/scaffold/boot/2f-define-second.scm create mode 100644 sysa/mes-0.22/scaffold/boot/2g-vector.scm create mode 100644 sysa/mes-0.22/scaffold/boot/30-capture.scm create mode 100644 sysa/mes-0.22/scaffold/boot/31-capture-define.scm create mode 100644 sysa/mes-0.22/scaffold/boot/32-capture-modify-close.scm create mode 100644 sysa/mes-0.22/scaffold/boot/33-procedure-override-close.scm create mode 100644 sysa/mes-0.22/scaffold/boot/34-cdr-override-close.scm create mode 100644 sysa/mes-0.22/scaffold/boot/35-closure-modify.scm create mode 100644 sysa/mes-0.22/scaffold/boot/36-closure-override.scm create mode 100644 sysa/mes-0.22/scaffold/boot/37-closure-lambda.scm create mode 100644 sysa/mes-0.22/scaffold/boot/38-simple-format.scm create mode 100644 sysa/mes-0.22/scaffold/boot/39-global-define-override.scm create mode 100644 sysa/mes-0.22/scaffold/boot/3a-global-define-lambda-override.scm create mode 100644 sysa/mes-0.22/scaffold/boot/40-define-macro.scm create mode 100644 sysa/mes-0.22/scaffold/boot/41-when.scm create mode 100644 sysa/mes-0.22/scaffold/boot/42-if-when.scm create mode 100644 sysa/mes-0.22/scaffold/boot/43-or.scm create mode 100644 sysa/mes-0.22/scaffold/boot/44-or-if.scm create mode 100644 sysa/mes-0.22/scaffold/boot/45-pass-if.scm create mode 100644 sysa/mes-0.22/scaffold/boot/46-report.scm create mode 100644 sysa/mes-0.22/scaffold/boot/47-pass-if-eq.scm create mode 100644 sysa/mes-0.22/scaffold/boot/48-let.scm create mode 100644 sysa/mes-0.22/scaffold/boot/49-macro-override.scm create mode 100644 sysa/mes-0.22/scaffold/boot/4a-define-macro-define-macro.scm create mode 100644 sysa/mes-0.22/scaffold/boot/4b-define-macro-define.scm create mode 100644 sysa/mes-0.22/scaffold/boot/4c-quasiquote.scm create mode 100644 sysa/mes-0.22/scaffold/boot/4d-let-map.scm create mode 100644 sysa/mes-0.22/scaffold/boot/4e-let-global.scm create mode 100644 sysa/mes-0.22/scaffold/boot/4f-string-split.scm create mode 100644 sysa/mes-0.22/scaffold/boot/50-keyword.scm create mode 100644 sysa/mes-0.22/scaffold/boot/50-make-string.scm create mode 100644 sysa/mes-0.22/scaffold/boot/50-primitive-load.scm create mode 100644 sysa/mes-0.22/scaffold/boot/50-string-join.scm create mode 100644 sysa/mes-0.22/scaffold/boot/51-module.scm create mode 100644 sysa/mes-0.22/scaffold/boot/52-define-module.scm create mode 100644 sysa/mes-0.22/scaffold/boot/53-closure-display.scm create mode 100644 sysa/mes-0.22/scaffold/boot/60-let-syntax-expanded.scm create mode 100644 sysa/mes-0.22/scaffold/boot/60-let-syntax.scm create mode 100644 sysa/mes-0.22/scaffold/boot/call-cc.scm create mode 100644 sysa/mes-0.22/scaffold/boot/data/bar.mes create mode 100644 sysa/mes-0.22/scaffold/boot/data/i.scm create mode 100644 sysa/mes-0.22/scaffold/boot/data/module.mes create mode 100644 sysa/mes-0.22/scaffold/boot/memory.scm create mode 100644 sysa/mes-0.22/scaffold/boot/numbers.scm create mode 100644 sysa/mes-0.22/scaffold/cons-mes.c create mode 100644 sysa/mes-0.22/scaffold/gc-test.scm create mode 100644 sysa/mes-0.22/scaffold/gc.scm create mode 100644 sysa/mes-0.22/scaffold/hello.c create mode 100644 sysa/mes-0.22/scaffold/lib/stdlib/malloc.c create mode 100644 sysa/mes-0.22/scaffold/main.c create mode 100644 sysa/mes-0.22/scaffold/micro-mes.c create mode 100644 sysa/mes-0.22/scaffold/read.c create mode 100644 sysa/mes-0.22/scaffold/read.data create mode 100644 sysa/mes-0.22/scaffold/tiny-mes.c create mode 100755 sysa/mes-0.22/scripts/diff.scm create mode 100644 sysa/mes-0.22/scripts/mesar.in create mode 100644 sysa/mes-0.22/scripts/mescc.in create mode 100644 sysa/mes-0.22/scripts/mescc.scm.in create mode 100755 sysa/mes-0.22/simple.sh create mode 100644 sysa/mes-0.22/src/gc.c create mode 100644 sysa/mes-0.22/src/hash.c create mode 100644 sysa/mes-0.22/src/lib.c create mode 100644 sysa/mes-0.22/src/math.c create mode 100644 sysa/mes-0.22/src/mes.c create mode 100644 sysa/mes-0.22/src/module.c create mode 100644 sysa/mes-0.22/src/posix.c create mode 100644 sysa/mes-0.22/src/reader.c create mode 100644 sysa/mes-0.22/src/string.c create mode 100644 sysa/mes-0.22/src/struct.c create mode 100644 sysa/mes-0.22/src/vector.c create mode 100755 sysa/mes-0.22/tests/base.test create mode 100755 sysa/mes-0.22/tests/boot.test create mode 100755 sysa/mes-0.22/tests/catch.test create mode 100755 sysa/mes-0.22/tests/closure.test create mode 100755 sysa/mes-0.22/tests/cwv.test create mode 100644 sysa/mes-0.22/tests/data/load.scm create mode 100755 sysa/mes-0.22/tests/display.test create mode 100755 sysa/mes-0.22/tests/fluids.test create mode 100755 sysa/mes-0.22/tests/getopt-long.test create mode 100755 sysa/mes-0.22/tests/guile.test create mode 100755 sysa/mes-0.22/tests/let-syntax.test create mode 100755 sysa/mes-0.22/tests/let.test create mode 100755 sysa/mes-0.22/tests/macro.test create mode 100755 sysa/mes-0.22/tests/match.test create mode 100755 sysa/mes-0.22/tests/math.test create mode 100755 sysa/mes-0.22/tests/module.test create mode 100755 sysa/mes-0.22/tests/optargs.test create mode 100755 sysa/mes-0.22/tests/peg.test create mode 100755 sysa/mes-0.22/tests/perform.test create mode 100755 sysa/mes-0.22/tests/pmatch.test create mode 100755 sysa/mes-0.22/tests/posix.test create mode 100755 sysa/mes-0.22/tests/psyntax.test create mode 100755 sysa/mes-0.22/tests/quasiquote.test create mode 100755 sysa/mes-0.22/tests/read.test create mode 100755 sysa/mes-0.22/tests/scm.test create mode 100755 sysa/mes-0.22/tests/srfi-0.test create mode 100755 sysa/mes-0.22/tests/srfi-1.test create mode 100755 sysa/mes-0.22/tests/srfi-13.test create mode 100755 sysa/mes-0.22/tests/srfi-14.test create mode 100755 sysa/mes-0.22/tests/srfi-16.test create mode 100755 sysa/mes-0.22/tests/srfi-43.test create mode 100755 sysa/mes-0.22/tests/srfi-9.test create mode 100755 sysa/mes-0.22/tests/syntax.test create mode 100755 sysa/mes-0.22/tests/vector.test create mode 100755 sysa/mes-bins/mes create mode 100755 sysa/mes-bins/mescc.scm create mode 100755 sysa/mes.kaem create mode 100644 sysa/mescc-tools-extra/chmod.c create mode 100644 sysa/mescc-tools-extra/cp.c create mode 100644 sysa/mescc-tools-extra/functions/file_print.c create mode 100644 sysa/mescc-tools-extra/functions/in_set.c create mode 100644 sysa/mescc-tools-extra/functions/match.c create mode 100644 sysa/mescc-tools-extra/functions/numerate_number.c create mode 100644 sysa/mescc-tools-extra/functions/require.c create mode 100644 sysa/mescc-tools-extra/functions/string.c create mode 100644 sysa/mescc-tools-extra/go.kaem diff --git a/rootfs.sh b/rootfs.sh index 90d9b8f..a02fffe 100755 --- a/rootfs.sh +++ b/rootfs.sh @@ -11,9 +11,6 @@ sudo mount -t tmpfs -o size=8G tmpfs tmp # base: mescc-tools-seed -#debugging -cp busybox.static tmp/ - # copy in all the mescc-tools-seed stuff cp -r mescc-tools-seed/x86/* tmp cp -r mescc-tools-seed/{M2-Planet,mes-m2,mescc-tools} tmp/ @@ -30,10 +27,15 @@ mkdir tmp/bin # after mescc-tools-seed we get into our own little directory because # the mescc-tools-seed one is hella messy mkdir tmp/after/bin -p +mkdir tmp/after/{lib,include} +mkdir tmp/after/include/{mes,gnu,linux,sys,mach} # put all the kaems for after in cp after.kaem tmp/ cp after.kaem.run tmp/after/kaem.run +# mescc-tools-extra +cp -r mescc-tools-extra tmp/after/ + # blynn-compiler pushd tmp/after git clone ../../blynn-compiler-oriansj blynn-compiler @@ -41,6 +43,13 @@ cp ../../blynn-compiler.kaem blynn-compiler/go.kaem mkdir blynn-compiler/{bin,generated} popd +# mes +cp -r mes-0.22 tmp/after/ +ln -s . tmp/after/mes-0.22/x86-mes +#cp -r nyacc-0.99.3 tmp/after/ +cp -r mes-bins tmp/after/ +cp mes.kaem tmp/after/ + # General cleanup find tmp -name .git -exec rm -rf \; @@ -55,7 +64,7 @@ qemu-system-x86_64 -enable-kvm \ -no-reboot \ -kernel ../../kernel -initrd initramfs.igz -append console=ttyS0,kernel.panic=2 -# Cleanup -sudo umount tmp +cd ../.. -popd +# Cleanup +sudo umount sysa/tmp diff --git a/sysa/after.kaem b/sysa/after.kaem index e386efc..dbcf722 100755 --- a/sysa/after.kaem +++ b/sysa/after.kaem @@ -18,15 +18,5 @@ cd after -# Prepare the directory -../catm bin/hex2 ../bin/hex2 -../catm bin/M1 ../bin/M1 -../catm bin/M2-Planet ../bin/M2-Planet -../catm bin/blood-elf ../bin/blood-elf -../catm bin/get_machine ../bin/get_machine -../catm bin/mes-m2 ../bin/mes-m2 -../catm bin/kaem ../bin/kaem -../catm bin/catm ../catm - # Finally, reinvoke kaem in this directory ../bin/kaem --file kaem.run diff --git a/sysa/after.kaem.run b/sysa/after.kaem.run index b491126..238c762 100755 --- a/sysa/after.kaem.run +++ b/sysa/after.kaem.run @@ -16,10 +16,32 @@ # You should have received a copy of the GNU General Public License # along with live-bootstrap. If not, see . -PATH=/bin +set -ex -# Part 2: blynn-compiler +PATH=/after/bin:/bin + +# Part 2: cp and chown (mescc-tools-extra) +cd mescc-tools-extra +kaem --file go.kaem +cd .. + +# Part 3: Remove remaining dependencies on / (root of /after) +/after/bin/cp ../bin/hex2 bin/hex2 +/after/bin/cp ../bin/M1 bin/M1 +/after/bin/cp ../bin/M2-Planet bin/M2-Planet +/after/bin/cp ../bin/blood-elf bin/blood-elf +/after/bin/cp ../bin/get_machine bin/get_machine +/after/bin/cp ../bin/mes-m2 bin/mes-m2 +/after/bin/cp ../bin/kaem bin/kaem +/after/bin/cp ../catm bin/catm +/after/bin/chmod 755 bin/hex2 bin/M1 bin/M2-Planet bin/blood-elf \ + bin/get_machine bin/mes-m2 bin/kaem bin/catm + +# Part 4: blynn-compiler cd blynn-compiler kaem --file go.kaem cd .. + +# Part 5: mes +kaem --file mes.kaem diff --git a/sysa/busybox.static b/sysa/busybox.static deleted file mode 100755 index 336b30225fbee0b56f2f7f335587a4792dc905f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2135328 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%0A}thrPO`TOYHOzS<#wD2-j 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඲tP1Cy{Wu-E?)AxYsXzI=~gv{wY7Rt86sXX?>dsd8Tzc%zt1I(zdbM=+{ zxCe3*G)t0Ge%5;h3B(=Rg{y^O`-!mh=9J;EJ?_nXXV+USa7JnjJnPrA608|Tn91{f z+=304l_SRwQI);5$nAwOHDkz_R*o=}wZka0=FuM|ZR3=@?tZU@ATf@~%vx)#O1pib z5jR*YAI3ryn?A03vm58ol8~|sW%yqls9j_xq8qN4>B#8hMz+!wpY-b9kC}^c#}tv5 zUGLfey)B}ixXl^g_aLd`@xV6d?fGhv7ZRY&gq8-x?X=32qkwPofSAcUrn zai5E_YlEJFt&Ik2B?Q22SY%Rj4_anj*WwmC_K;XX zo{QJN9?5)*uV~RhDdOcA7S2VM9Z~Hzh3pHfI-*8O_jJI;GR_o!RReYRQOGjtqhUAN z2hm=S_bh)bXA}V-hsW$UEc-iMYy?;jrhaT#pP6RS)k-y!Efd!iI*%;aGa4Nu7+^Y23}mVNq8ODi`RgsMvyjod8!wq z<$&>%wO0}I4j~`DNPWrWx2{hvrN9mXMJ^y+Jz=FWlxFvnM_jp%0gg5;8cEqV$VHlr zj$)g?Mj7IZn4Q1ycpD%K_nIcd=rm};@Kt!B?Q?=IFW zMlsCFWQ67#a$2_8T0zR;tBRVviQhmXE$5sNv%4edhj^CR>_8pAJ%KyCVWY;Dc{Jj% zWaIw|u`oq4idAf{-Ta5bJ{ zeFG4AHcFy*Z-NjQW~E{U<8QoPfjsW6(QJNLA4pXpv*`8E&yLJ+UWFg_p>%5Y2f*7q z|14)g4VFFe=#OlZHML5BBZmK&2A%S6zsZ@H%r+>)aBs6H9)>v4Hu8UBq18{WzBc4O zbkuTO?M&f#wt9mZ3-nEDiPf$rXiGn7W*a@NpNScYpOqnA|}%e;yht^7uzW>vS3gQsSv?*cv#E-1(dF)i*y45HrpE5#HPVS;T5RP&(bkSh;NHPkduiT3! zR`c`mqKPB;>0C4sU#^L}7fn3gnb>7dtnofI7;0pgv$s;~1L}%E8SyPcJ(;zn`yJdk zaYPA~(cLNJ3BbQUb38ARlgqHa!HMFc!dMJ{VlH42N>&tCIS>oF6P&a(HKb9#;;Yh>9PQ;j{j$}!A= zZ85Ckt11B4{rR!n*5j`ed{V#NKRl;4%^IMNrvC^qq=nUSt%!X#{(i=&up}yt?Z2YE zzg~W5=6e{grpyoE<5=s?<9tO{{1+KPT&2-|Y8XE#*zD5ng4Ef7>f#6G8e(*LYPSE- zTVK3>=bVOfvt?WnpVeptoMV-0G~VCax?`LF9xvGy&z`g{D6**|*hlNU}0(;QFqQ?y5C15ttA}zMZgGa;I!}doT~X1-iU2o-WLAyj1M97dxXX$3ndh3= zjrrs}rDaoYLBXlx9bCIFGpugU zY8c=zq`d#Xa=k__$vB#R6);8VnuxPFOqk$M{;+GnUnv5m5>UJ<=r@4VpO(G^;(b@} zFMn8MqjLXFx!gv7f5w?O=$QrnmXM~9NUkH(Zl1U$bpc+$c1E!_JRNFwhT4PSKcB#U zKJn($SRN5S+Nfex}(6nH8TB9>(LTE(qlOYM3n4_FzIbFe$1+R0y=`b1MIwmzRg!%OwP1Op zfKXD@ox_YqEDAO3&Ncm)5XD2t+bj%cA6Q0mn@(^VTZJ1Qq;4fS!&d(5KQT}0GhvXE znCC_|QuUeCzha)e_7)?N`964$%96T$&u$!{?kT^XGP29w`#Po2B@AZT7Si78Wr%nyw}#}2an$NcwnSRpDd^z@*`Ui&dwsZ=*I+UFL!@&w6u=)M8rOkjXHw9 z1=@!RES$@q`;&Bs6aL`-k-?MU{FAHrKa&3qLHs`Bx-ZoRf>#5axI4e@joh*M^)I!z zU-BU2gs}VJaN2XYs7T>UuPU2=JVt%w*K(_*%c;OmK8c*ht&60(9YI#IEqKjcp*J)m z6P9k8{jroO;=$3Tt9aAwytINGUCEO;)|py1_Rz!$9K_KfW7XboVwkDLKYJE6*i&&H z4V0`FeU1RzBZKG8 z;$i;m$lwL@0{Uo`TZB&i_9V+^+Gp<59Q>B^`kd4+m&%gju)hfjsDswc_69kla>kkK zw~VdmQ&o^a({r877a*svKi~)1$Jh41OS;|yz3qP8I_BkUWyYY;{(EXi zS?ald?xT~XS`ef|2kow)?r57b$jlIt)Al%@)nqG{_Ym<~+Km3`oDFcNt2HKisnUxT zys#{$t2H>rNA0)4*I`k!Lf66XR#soe$GH7Cml{!?W*T%-{Wk;U`105WN{MTKsslI{b=w3D0=&UqYCB#PL zzF+deg#3KhT{%f}xJNvv(VPoRaOqb~fWj?CV)v1eebV49Vk|=kqTG!mV%3`mqq&1Z zkx!9>oTK`=c7?CWh!^g=hs+n;@;l=KIxD-fx&@@KKp+cojafW+_fCNl z>pJVUVBWm$#%=^ejRF`^HX$EU6*G#YW|X$?@HnKFj_+?kbqw0a3i@+_$xT)UVo&VMPTZ!Y^X^h;w2ouaJ1F>?B3GqWnhHyjkLI2cKeJyGbQV-mr)zw4gWL9(G^#1%h*AKWM7IxoiQtOgG!MgvG0;1>#QfH{>=DP%Y*> zD4LBqPpkhiXLSod(VhoIlfgI{m3)RH$*FN|)V^mWNvo03Lhc7QV@>eK4b!$e@@UF9 zw^uk*hu5{^^yZ#g#fLIkyg~-yKOK%7xsgO!h&MbS*iIuW3=ctwHI7NNY;tDpmvbtm(cNs>C0QQ!WIr zmaWA1e+h1gg1!a!R<^9@T>6jDvk5BZ{wUGilX|Wv^+J!mu{8+*ks$m@DJA^?NvUn!LWJ3?w_T7XrTOX7Y{<%0T-?euCa+Ck8<@<@P{m;p8JRg z4O*{jRv*CkA|}#UJq$qu|Md&1jbMF*#UTuHY5^Wv=^vp)up?wF_V12%sH!Ko&Asau z1cSxYH_ZN!2(N6gP|Rf3a*pWI@;nRTb}P6z!qvGy9Y_lo4y3V_CQP_vsHwo8Ol4;A z^{N1qTQ2Nw|Mly42#5=cC@>CFyhha0aLLk@V zd2&Zc0*;@ec}RV|)t%6afu*;)ey0EXU0)ygg!=yte8RT`C)9CJ8DQR3tp=B@XTpd5 zisaz2mNS_9l(?Y2u2tesq1}N(La-j}Cw^M(prS7sU&+6Q)snCG`->>rhe+o6WVaN8 zLMR@+LX?F+rW{MyR{8o@n9c2?!+E`QIFxl<^+*CYa>ZW z6|uu~{7b@%EBgNBpSpkfrH_0VrY~G zuRfprR-?_~l)tb38C`EJVOr$}Hgb=z#S>AXFv%jB{{}*cW0uihtZcfvg%6036&3u7 zK{aT?n#dm`^;AV{)x!BE9b6pbp3%MsyDCq9%P3o)ZG7%&joc8ZwQd%h2fN}>IR&W#PpA$?HMpVLfF!L_HXUM5xg@;>>C&{Ua6%iPP0 z=pFtioHL172UwWG?$=f;a;H9F6W7sYRwme2p)}_=iBu0ubMG@br2>c<`ux7A2LW#+ z=2$O}$n#6?tQ6XDzss9tl9j%jKt9meG(*qg&-=i)qV03w>s$8Z0*LRM%y|&SuRjCJ z=fc+(z-Qcr3tdx3i2)j2Z6=-t!}l7V4H&jS#MViX!u?%h6)CW3M{*_+Pz?vFkM*< z9S~)}&_SO%<{l~%FROO%CZkhUZ3z6c)xPe|WP8Jx2U=qR3}2G}^q~)g>|We9<>_OX z5vTrRB_JR|$?(x9->La&xLrAzhGt>N^TW?T+h>G*w6ygO@Z#30{e!>tnElMp#+d2j zm&A{;M~L3OY<}$&?MMDT_@DL#_=h|!dt9}9^zXp1UYv2&8izjli5y~R<#J_0o|353 zcRu>_<1-_IX}BPkdgufB9vv=_v%pGlxMX2p6qL{(WC8#P~i%wd0q=RM0{m)X_3T5Nb6*(J-EjO4lX8yCGy;W-;_Z(bMgx<(K zA0oOT?%ykWt8RuK@H&w?x&G+4e2;Z(*v4`pyUP8I)n}Q_;ji-D92za5YU3Jgal;qa zD1QL29w+kwOWMWN*S7uT*uZeiRng@kE)c2i3Ar<{wMw~Yq!vXpyH*8e`33I&R=$95 zredjdM+f;U1r4H?Suti=^@#Thf7BqJbgdZol*j{XWA)GLqeYO8@Y+QeSC7R*5lPY_ z>`s-m+cvG-ai%fr?UmIWjNZ**rEsY2&p?VU^bqIyhyyF|Zcr!H3wxt)kh&5dLnWZ6 zpfJCkz<~CyyZbbwDVe|%rXSR((9Zxwd_i|9;R*AHzIMSY@c+A`daTc%X5eheFbL)E zx^GdBQQ>3@>ufmWU&(DP^A0`5zi-$Ydu4T4K8#g+Bk2ufP?rfeAC9D-<}GT!n)@yB z#{7|rqz|Q`z+t;Ok}l^>e%$HD87yNSJAyCxD#%(RH3fEF7DTDISbbi&USxa+Xs{_QKM_;kyOeZ)IioD(l`;m*$LuWb zlrxtKbs7vuTSH_d?4tXRZ&3`WxIAS=g~wc6_L9#z^j15x{>n^@Sz%p#p*j^k%=7~ z$%~b=bHiVpF$}v;_7ARv10O#*S#`nv8`>t;0_YtL}$x#ySMUgjP{&r)n8d{ zY1<`U&1HRYNIiWd*cH^5iI7dL72e5c#s&SNWnN_{lKzoCrRG(h0;YI0;WvExQ~0AQ zh5H+6qTYyVYs^?uF}-^iM1|eM@O`6~VM90{k}xBxgY)uy*UedYS117YZ+OI)PXj!u zj59`$@V;1sForinimOXtRrF?@Ti(q|Z~Gy#=8#V&)nQ7dw5RR2{CXK5K$ML0$g!f~ z61J4SOXF=WV(01#Ufp}&+8yZq)Q^QiX276d_<&Cb-gu<(Q|~a!2lAEA*}T(C6VPoi zUx-f|CGMy9f;Nyu&w{(9AH8_Pe9^l>#f^LuD!e^V81jxaeV6-Cxj6)uTdem2J`F0p z6^1bLI1bPYsBj3sK1^q(z9nCf(fAj!Nli=){w&_7e$#F7p(pZV^)0NVsxbGk=?9

%!TZQ}yO`Z!ww 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 duL<$NP8D!xy#-aD`wy@*vIUvc?EPU$etCt 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�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�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

SGg3_>)#_xPEJ6^+oImZQI7>y}aR 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Πv2{ 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

    1N4|64U4wq{>-f2N`Mt;wR*u;t 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/_Y1-$E3j@pm8;B^77wbmE= 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 W$r2U!uoT{ds^LG)2&$WdwEi1C5mrtB diff --git a/sysa/mes-0.22/.dir-locals.el b/sysa/mes-0.22/.dir-locals.el new file mode 100644 index 0000000..3196ef8 --- /dev/null +++ b/sysa/mes-0.22/.dir-locals.el @@ -0,0 +1,112 @@ +;;; GNU Mes --- Maxwell Equations of Software +;;; Copyright © 2018,2019 Jan (janneke) Nieuwenhuizen +;;; +;;; This file is part of GNU Mes. +;;; +;;; GNU Mes is free software; you can redistribute it and/or modify it +;;; under the terms of the GNU General Public License as published by +;;; the Free Software Foundation; either version 3 of the License, or (at +;;; your option) any later version. +;;; +;;; GNU Mes is distributed in the hope that it will be useful, but +;;; WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;;; GNU General Public License for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with GNU Mes. If not, see . + +;; The GNU project defaults. These are also the GNU Emacs defaults. +;; Re-asserting theme here, however, as a courtesy for setups that use +;; a global override. +( + ;; For writing GNU C code, see + ;; https://www.gnu.org/prep/standards/html_node/Writing-C.html + (c-mode . ((c-file-style . "gnu") + (indent-tabs-mode . nil))) + + (makefile-mode . ((indent-tabs-mode . t))) + (asm-mode . ((indent-tabs-mode . t))) + + (nil . ((indent-tabs-mode . nil) + (fill-column . 72))) + + (scheme-mode + . + ((geiser-active-implementations . (guile)) + (eval + . + (progn + (defun prefix-dir-locals-dir (elt) + (concat (locate-dominating-file buffer-file-name ".dir-locals.el") elt)) + (mapcar + (lambda (dir) (add-to-list 'geiser-guile-load-path dir)) + (mapcar + #'prefix-dir-locals-dir + '("scripts" "module"))))))) + + (texinfo-mode . ((indent-tabs-mode . nil) + (fill-column . 72))) + (nil . + ((eval + . + (progn + (let ((top (locate-dominating-file default-directory ".dir-locals.el")))) + + (defun guile--manual-look-up (id mod) + (message "guile--manual-look-up id=%s => %s mod=%s" id (symbol-name id) mod) + (let ((info-lookup-other-window-flag + geiser-guile-manual-lookup-other-window-p)) + (info-lookup-symbol (symbol-name id) 'scheme-mode)) + (when geiser-guile-manual-lookup-other-window-p + (switch-to-buffer-other-window "*info*")) + (search-forward (format "%s" id) nil t)) + + (add-hook 'before-save-hook 'delete-trailing-whitespace nil t) + + (defun guix-switch-profile (&optional profile) + "reset Emacs' environment by snarfing PROFILE/etc/profile" + + (defun matches-in-string (regexp string) + "return a list of matches of REGEXP in STRING." + (let ((matches)) + (save-match-data + (string-match "^" "") + (while (string-match regexp string (match-end 0)) + (push (or (match-string 1 string) (match-string 0 string)) matches))) + matches)) + + (interactive "fprofile: ") + (let* ((output (shell-command-to-string (concat "GUIX_PROFILE= /bin/sh -x " profile "/etc/profile"))) + (exports (matches-in-string "^[+] export \\(.*\\)" output))) + (mapcar (lambda (line) (apply #'setenv (split-string line "="))) exports ))) + + (defun shell-args-to-string (&rest args) + (shell-command-to-string (mapconcat 'identity args " "))) + + (defun as (string &optional arch) + (let* ((arch (or arch "--64")) + (asm (subst-char-in-string ?_ ?\s string)) + (foo (message "asm:%S" asm)) + (result (shell-args-to-string "as" arch (concat "<(echo '" asm "')"))) + (disassembly (shell-args-to-string "objdump" "-d" "a.out")) + (foo (message "disassembly: %S" disassembly)) + (match (string-match "^ 0:[\t]\\([^\t]*\\)" disassembly)) + (code (match-string 1 disassembly)) + (code (apply 'concat (split-string code " " t)))) + (insert " ") + (insert code))) + + (defun as-32 (point mark) + (interactive "r") + (let* ((string (buffer-substring point mark)) + (code (as string "--32"))) + (insert " ") + (insert code))) + + (defun as-64 (point mark) + (interactive "r") + (let* ((string (buffer-substring point mark)) + (code (as string "--64"))) + (insert " ") + (insert code)))))))) diff --git a/sysa/mes-0.22/.gitignore b/sysa/mes-0.22/.gitignore new file mode 100644 index 0000000..7c534a1 --- /dev/null +++ b/sysa/mes-0.22/.gitignore @@ -0,0 +1,117 @@ +*- +*~ +.#* +*.E +*.s +*.blood-elf +*.blood-elf-M1 +*.blood-elf-hex2 +*.gcc +*.gcc-o +*.gcc-out +*.gcc-stdout +*.go +*.guile +*.guile-log +*.log +*.trs +*.mes-gcc +*.mes-gcc-o +*.mes-gcc-out +*.mes-gcc-out +*.mes-gcc-stdout +*.mes-o +*.mes-out +*.mes-stdout +*.mes-tcc +*.mes-tcc-o +*.mes-tcc-out +*.mes-tcc-out +*.mes-tcc-stdout +*.mini-M1 +*.mini-guile +*.mini-hex2 +*.a +*.o +*.seed-out + +/lib/tests/*/[0-9a][0-9a-z]-* +!/lib/tests/*/*.c +!/lib/tests/*/*.exit +!/lib/tests/*/*.stdout + +/scaffold/argv +/scaffold/hello +/scaffold/main +/scaffold/micro-mes +/scaffold/tiny-mes + +/scaffold/tests/[0-9a][0-9a-z]-* +/scaffold/tests/t.* +!/scaffold/tests/*.c +!/scaffold/tests/*.exit +!/scaffold/tests/*.stdout + +/.config.make +/.store +/.tarball-version + +/out +? +?.mes +\#*# +/doc/fosdem/fosdem.aux +/doc/fosdem/fosdem.log +/doc/fosdem/fosdem.nav +/doc/fosdem/fosdem.out +/doc/fosdem/fosdem.snm +/doc/fosdem/fosdem.tex +/doc/fosdem/fosdem.toc +/doc/fosdem/fosdem.*vrb +/doc/mes.1 +/doc/mes.info +/doc/mes.pdf +/doc/mesar.1 +/doc/mescc.1 +/doc/version.texi +/mes.aux +/mes.cp +/mes.cps +/mes.fn +/mes.info +/mes.tmp +/mes.toc +/mes.vr +/mes.vrs + +/config.status +/pre-inst-env +/bootstrap.sh +/build.sh +/check.sh +/install.sh +/uninstall.sh +/mes/module/mes/boot-0.scm +/scripts/mesar +/scripts/mescc.scm +/scripts/mescc +/doc/images/gcc-mesboot-graph.png +/GNUmakefile +/pre-inst-env +/doc/images/gcc-mesboot-graph.eps +/doc/images/gcc-mesboot-graph.pdf +/doc/web/ +/config.sh +/include/mes/config.h +/gcc-lib +/mescc-lib +/bin +/0exit-42 +/0hello-mes +/body-exit-42 +/body-hello-mes +/exit-42 +/hello-mes +core +/.config +a.out diff --git a/sysa/mes-0.22/AUTHORS b/sysa/mes-0.22/AUTHORS new file mode 100644 index 0000000..858c53a --- /dev/null +++ b/sysa/mes-0.22/AUTHORS @@ -0,0 +1,88 @@ + -*- org -*- +#+TITLE: GNU Mes Authors + +Jan (janneke) Nieuwenhuizen +Main author +All files except the imported files listed below + +Danny Milosavljevic +ARM port +lib/mes/div.c +Additions and fixes throughout + +Jeremiah Orians +lib/stdio/fopen.c (first simple version of fopen) +scaffold/tests/98-fopen.c + +Han-Wen Nienhuys +lib/string/memmem.c (_memmem, memmem) + +Peter de Wachter +Small fixes and additions to +lib/x86-mes/x86.M1 +lib/x86_64-mes/x86_64.M1 +include/stdint.h +module/mescc/compile.mes + +rain1 +scaffold/tests/90-goto-var.c +scaffold/tests/91-goto-array.c + +List of imported files + +D A Gwyn +lib/alloca.c + +Included verbatim from gnulib +build-aux/gitlog-to-changelog + +Portable hygienic pattern matcher +mes/module/mes/match.scm + +Portable LALR(1) parser generator +mes/module/mes/lalr.scm + +Portable syntax-case from Chez Scheme; patches from Guile +mes/module/mes/psyntax.ss +mes/module/mes/psyntax.pp [generated] + +Getopt-long from Guile +module/mes/getopt-long.scm + +Optargs from Guile +mes/module/mes/optargs.scm + +PEG from Guile +mes/module/mes/peg/ + +Pmatch from Guile +mes/module/mes/pmatch.scm + +Pretty-print from Guile +mes/module/mes/pretty-print.scm + +Srfi-1 bits from Guile +mes/module/srfi/srfi-1.scm + +Srfi-16 from Guile +mes/module/srfi/srfi-16.scm + +Srfi-26 from Guile +mes/module/srfi/srfi-26.scm + +GNU FDL in texinfo from GNU +doc/fdl-1.3.texi + +Hurd and Mach support from GNU C Library +include/gnu/hurd-types.h +include/mach/mach-init.h +lib/mach/msg.c +lib/mach/mach-init.c +lib/mach/*.S + +* legalese +Copyright © 2016,2017,2018,2019 Jan (janneke) Nieuwenhuizen + + Copying and distribution of this file, with or without modification, + are permitted in any medium without royalty provided the copyright + notice and this notice are preserved. diff --git a/sysa/mes-0.22/BLURB b/sysa/mes-0.22/BLURB new file mode 100644 index 0000000..7c394f2 --- /dev/null +++ b/sysa/mes-0.22/BLURB @@ -0,0 +1,23 @@ + +GNU Mes is a Scheme interpreter and C compiler for bootstrapping the GNU +system. + +GNU Mes was created to address the security concerns that arise from +bootstrapping an operating system using binary blobs, which is common +practice for all software distributions. Mes is a Scheme interpreter +written in a simple subset of C and a C compiler written in Scheme and +comes with a small, bootstrappable C library. The Mes bootstrap has +halved the size of opaque, uninspectable binaries that were needed to +bootstrap GNU Guix, a functional GNU/Linux distribution that focusses on +user freedom, reproducibility and security. That reduction was achieved +by replacing GNU Binutils, GNU GCC and the GNU C Library with Mes. The +final goal is to help create a full source bootstrap for UNIX-like +operating systems. After three years of volunteer work funding will +enable us to make another big step forward and reach an important new +milestone. + +GNU Mes - https://gnu.org/software/mes +GNU Guix - https://gnu.org/software/guix +Bootstrappable Builds - https://bootstrappable.org +Reproducible Builds - https://reproducible-builds.org +Reduced Binary Seed bootstrap - https://guix.gnu.org/blog/2019/guix-reduces-bootstrap-seed-by-50/ diff --git a/sysa/mes-0.22/BOOTSTRAP b/sysa/mes-0.22/BOOTSTRAP new file mode 100644 index 0000000..c2d97dc --- /dev/null +++ b/sysa/mes-0.22/BOOTSTRAP @@ -0,0 +1,164 @@ + -*- org -*- +#+TITLE: bootstrappable.org project + +Copyright © 2016,2017,2018,2019 Jan (janneke) Nieuwenhuizen + + Copying and distribution of this file, with or without modification, + are permitted in any medium without royalty provided the copyright + notice and this notice are preserved. + +* What? +** Full source bootstrapping for the GNU System + +A package in GNU Guix is uniquely identified by the hash of its source +code, its dependencies, and its build recipe. + +Every package can be built from source, except for the bootstrap +binaries. + +*** From the GNU Guix manual + +The distribution is fully “bootstrapped” and “self-contained”: each +package is built based solely on other packages in the distribution. + +The root of this dependency graph is a small set of “bootstrap +binaries”, provided by the ‘(gnu packages bootstrap)’ module. For more +information on bootstrapping, *note Bootstrapping::. + +**** Guix v1.0 bootstrap binary seed + +$ du -schx $(readlink $(guix build bootstrap-tarballs)/*) +2.1M /gnu/store/9623n4bq6iq5c8cwwdq99qb7d0xj93ym-binutils-static-stripped-tarball-2.28.1/binutils-static-stripped-2.28.1-x86_64-linux.tar.xz +18M /gnu/store/437xwygmmwwpkddcyy1qvjcv4hak89pb-gcc-stripped-tarball-5.5.0/gcc-stripped-5.5.0-x86_64-linux.tar.xz +1.8M /gnu/store/55ccx18a0d1x5y6a575jf1yr0ywizvdg-glibc-stripped-tarball-2.26.105-g0890d5379c/glibc-stripped-2.26.105-g0890d5379c-x86_64-linux.tar.xz +5.7M /gnu/store/bqf0ajclbvnbm0a46819f30804y3ilx0-guile-static-stripped-tarball-2.2.3/guile-static-stripped-2.2.3-x86_64-linux.tar.xz +5.8M /gnu/store/j8yzjmh9sy4gbdfwjrhw46zca43aah6x-static-binaries-tarball-0/static-binaries-0-x86_64-linux.tar.xz +33M total +$ for i in $(readlink $(guix build bootstrap-tarballs)/*);\ + do sudo tar xf $i; done +$ du -schx * +130M bin +13M include +54M lib +51M libexec +5.2M share +252M total + +**** Guix Reduced Binary Seed bootstrap binary seed + +$ du -schx $(readlink $(guix build bootstrap-tarballs)/*) +5.7M /gnu/store/9f8gi8raqfx9j3l9d00qrrc0jg3r1kyj-guile-static-stripped-tarball-2.2.6/guile-static-stripped-2.2.6-x86_64-linux.tar.xz +80K /gnu/store/b6rjl52hibhmvyw4dg8678pwryhla0h2-linux-libre-headers-stripped-tarball-4.19.56/linux-libre-headers-stripped-4.19.56-x86_64-linux.tar.xz +12K /gnu/store/d7zlxsjcnqilmvqwx7scija9x9bjw8cw-mescc-tools-static-stripped-tarball-0.5.2-0.bb062b0/mescc-tools-static-stripped-0.5.2-0.bb062b0-x86_64-linux.tar.xz +428K /gnu/store/n7zc4kpi8ny6jlfaikkzxlwhc5fvr1vr-mes-minimal-stripped-tarball-0.19/mes-minimal-stripped-0.19-x86_64-linux.tar.xz +6.0M /gnu/store/nv4djwlrljfqmynqr2cqvfwz0ydx7kxb-static-binaries-tarball-0/static-binaries-0-x86_64-linux.tar.xz +13M total +$ for i in $(readlink $(guix build bootstrap-tarballs)/*);\ + do sudo tar xf $i; done +Password: +$ du -schx * +93M bin +700K include +38M lib +14M share +145M total + +**** Guix Scheme-only bootstrap binary seed + +$ du -schx $(readlink $(~/src/guix/wip-bootstrap/pre-inst-env guix build bootstrap-tarballs)/*) +5.7M /gnu/store/1mq2pcd2h7g54xpi2jrgj6ibbi4lgi3c-guile-static-stripped-tarball-2.2.6/guile-static-stripped-2.2.6-x86_64-linux.tar.xz +80K /gnu/store/bl1r2bpk6fam8r2gjvr5mvr48i3dm2hn-linux-libre-headers-stripped-tarball-4.19.56/linux-libre-headers-stripped-4.19.56-x86_64-linux.tar.xz +12K /gnu/store/w0dlz486dhb8aiq8pxm5akllz628fqin-mescc-tools-static-stripped-tarball-0.5.2-0.bb062b0/mescc-tools-static-stripped-0.5.2-0.bb062b0-x86_64-linux.tar.xz +428K /gnu/store/15j6l18q44ymlrh1cfp4s4hc9835xic5-mes-minimal-stripped-tarball-0.19/mes-minimal-stripped-0.19-x86_64-linux.tar.xz +6.2M total +$ for i in $(readlink $(~/src/guix/wip-bootstrap/pre-inst-env guix build bootstrap-tarballs)/*);\ + do sudo tar xf $i; done +$ du -schx * +4.9M bin +700K include +38M lib +14M share +57M total + +* Why? +** Reproducibility is essential to Software Freedom + +Reproducible builds are a set of software development practices that +create a verifiable path from human readable source code to the binary +code used by computers. + +*** What about the bootstrap binaries and the compilers? + +We have the sources: they always lead to bitwise-same binary, but what +about the bootstrap binaries and compilers? + +*** The current way out: Ignore the problem + + ``recipe for yogurt: add yogurt to milk'' + +*** New solution: Full source bootstrapping path + +* How? +** Software: MesCC-tools, M2-Planet, GNU Mes and MesCC +** MesCC-tools + + https://savannah.gnu.org/projects/mescc-tools + +*** hex.0: ~500 byte well-documented, self-hosting hex assembler + +This 500 byte program is written in ASCII hex. When converted +byte-for-byte from ASCCI to binary we have the only binary seed that +our full source bootstrap path needs. + +We bless this simple and easily verifyable binary and consider it to +be source. + +*** hex1: next level hex assembler written in hex.0 +*** M0: a macro assembler written in hex.1 +*** M1: a macro assembler written in M0 +*** hex2: a hex2 linker written in M0 +*** M2-Planet: a self-hosting M2 (C-with-structs) transpiler written in M1 +*** GNU Mes: A Scheme interpreter written in C, with cpp transformed into M2 +*** MesCC: A C compiler written in Scheme +*** tcc-boot: a patched version of TinyCC + +** GNU Mes and MesCC + + https://www.gnu.org/software/mes + +*** mes.c: a Scheme interpreter in ~5,000LOC of simple C +*** mescc: a C compiler written in Scheme (uses Nyacc C99 parser in Scheme) +*** mes.M2: this Scheme interpreter in bootstrappable M2 + +** TinyCC + + https://gitlab.com/janneke/tinycc + +* TODO +** merge scheme-only bootstrap into Guix. +** reduced binary seed bootstrap into NixOS, Debian. +** remove or upstream patches from tcc-boot +** prepare src/mes.c for M2-Planet transpiler. +** ARM, the Hurd +** fix bootstrap-loops: (Nyacc?, mes.M2, psyntax.pp?) +** make GNU gcc (8.0?) bootstrappable again, remove [need for] tcc stage +* DONE +** reduced binary seed bootstrap into Guix. +** replace Guix bootstrap for x86_64. +** replace Guix bootstrap for x86. +** add full source gcc-4.7 package build. +** bootstrap gcc+glibc-built binutils-20.1, gcc-4.1.0. +** have tcc-boot compile gnutools triplet: binutils-2.14, gcc-2.95.3, glibc-2.2.5. +** have tcc-boot's mes-tcc compile a fully functional tcc +** hex.0, hex.1, M0 +** M1, hex2_linker in simple C +** M2-Planet is now self-hosting, written in M2 +** mes+mescc are mutual self-hosting +** patched tcc compiled with mes+mescc +** during development we run mescc on Guile (mes is ~30 times slower) +** tcc compiled with gcc is known to compile gcc + +* Contact +** bug-mes@gnu.org +** #bootstrappable, #guix on freenode +** bootstrappable.org diff --git a/sysa/mes-0.22/COPYING b/sysa/mes-0.22/COPYING new file mode 100644 index 0000000..94a9ed0 --- /dev/null +++ b/sysa/mes-0.22/COPYING @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + 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 3 of the License, 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, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/sysa/mes-0.22/ChangeLog b/sysa/mes-0.22/ChangeLog new file mode 100644 index 0000000..c912529 --- /dev/null +++ b/sysa/mes-0.22/ChangeLog @@ -0,0 +1,12616 @@ +2020-01-20 Jan Nieuwenhuizen + + Release 0.22. + * configure (VERSION): Update to 0.22. + (main): Likewise. + * build-aux/GNUmakefile.in: Likewise. + * configure.sh (VERSION): Likewise. + * guix/git/mes.scm (mes, mes.git): Likewise. + + build: Update release process. + * build-aux/GNUmakefile.in: Update documentation. + (sign-dist): Rename from `sign'. + * configure: Remove version check for Guix; support GUIX=guix ./configure. + + doc: Release update. + * BOOTSTRAP: Release update. + * HACKING: Likewise. + * INSTALL: Likewise. + * NEWS: Likewise. + * PORTING: Likewise. + * README: Likewise. + * ROADMAP: Likewise. + * doc/mes.texi: Likewise. + * doc/announce/ANNOUNCE-0.22: New file. + +2020-01-20 Jan Nieuwenhuizen + + mescc: Mes C Library: Fix execlp, execvp for file names with slash. + Reported by mid-kid. + + * lib/posix/execlp.c (execlp): Do not use search_path when file name + contains a slash (WAS: when file name starts with slash). + * lib/posix/execvp.c (execvp): Likewise. + +2020-01-20 Jan Nieuwenhuizen + + build: Support bootstrapping using build.sh. + * build-aux/build.sh.in: Oops, use $compiler = bootstrap concept does + not exist yet. Gash cp does not support -p; drop it. + * configure.sh: Oops, set bootstrap to `true' instead of yes. + + mescc: Mes C Library: lseek: Be careful clearing read buffer. + * lib/linux/lseek.c (_lseek): New function. + * lib/linux/lseek.c (lseek): Use it to check if we should reset read + buffer. + * lib/mes/__buffered_read.c (__read_buffer_max): New variable. + (__buffered_read_init): Add environment override: MES_READ_BUFFER. + (__buffered_read): Use it. + + build: Have configure respect GUILE_LOAD_PATH for mes to find Nyacc. + * configure: Substitute GUILE_LOAD_PATH from %load-path. + * configure.sh: Likewise. + * build-aux/config.make.in: Add GUILE_LOAD_PATH as subtitution variable. + * build-aux/config.sh.in: Likewise. + * mes/module/mes/guile.mes (%load-path): New variable. + +2020-01-20 Jan Nieuwenhuizen + + build: Have configure prefer $CC over gcc; tcc over gcc, gcc over cc. + Reported by Vagrant Cascadian. + + * configure (string->version): Prefer for most-dotted string. Fixes + makeinfo version. + (check-program-version): Prefer displaying of command, if single word. + (main): Check for $CC --version, $CC -v. Prefer $CC over gcc; tcc over + gcc, gcc over cc. + +2020-01-20 Jan Nieuwenhuizen + + mescc: Opt for reproducible builds with Guile and Mes. + * module/mescc/compile.scm (mes-or-reproducible?): New variable. + (ast->comment): Use it. + * module/mescc/preprocess.scm (mes-or-reproducible?): New variable. + (c99-input->full-ast): Use it. + +2020-01-20 Jan Nieuwenhuizen + + build: Resurrect compiling with TinyCC. + ./configure CC=tcc --host=i686-unknown-linux-gnu --with-courage + + * configure: Cater for tcc. + +2019-12-17 Jan Nieuwenhuizen + + build: Cater for FreeBSD. + * build-aux/bootstrap.sh.in: Add test ! -e -o to satisfy FreeBSD test. + Fixes skipping over all compilations. + * build-aux/cc.sh (compile): Likewise. + + freebsd: Initial x86 scaffold. + * lib/freebsd/x86-mes-gcc/crt1.c: New file. + * lib/freebsd/x86-mes-gcc/exit-42.S: New file. + * lib/freebsd/x86-mes-gcc/hello-mes.S: New file. + * lib/freebsd/x86-mes-gcc/mini.c: New file. + * lib/freebsd/x86-mes-mescc/crt1.c: New file. + * lib/freebsd/x86-mes-mescc/mini.c: New file. + * lib/freebsd/x86-mes/elf32-0exit-42.hex2: New file. + * lib/freebsd/x86-mes/elf32-0header.hex2: New file. + * lib/freebsd/x86-mes/elf32-0hello-mes.hex2: New file. + * lib/freebsd/x86-mes/elf32-body-exit-42.hex2: New file. + * lib/freebsd/x86-mes/elf32-body-hello-mes.hex2: New file. + * lib/freebsd/x86-mes/elf32-footer-single-main.hex2: New file. + * lib/freebsd/x86-mes/elf32-header.hex2: New file. + + freebsd: Initial configure support. + * configure: Initial FreeBSD configure support. + * configure.sh: Likewise. Run without bash. + + build: Prepare for kernel variants. + * configure: Fix detection of Arch, FreeBSD. + * lib/linux/x86-mes-gcc/exit-42.S: Move from ... + * lib/x86-mes-gcc/exit-42.S: ... here. + * lib/linux/x86-mes-gcc/hello-mes.S: Move from ... + * lib/x86-mes-gcc/hello-mes.S: ... here. + * lib/linux/x86-mes-mescc/exit-42.S: Move from ... + * lib/x86-mes-mescc/exit-42.S: ... here. + * lib/linux/x86-mes-mescc/hello-mes.S: Move from ... + * lib/x86-mes-mescc/hello-mes.S: ... here. + * lib/linux/x86-mes/elf32-0exit-42.hex2: Move from ... + * lib/x86-mes/elf32-0exit-42.hex2: ... here. + * lib/linux/x86-mes/elf32-0header.hex2: Move from ... + * lib/x86-mes/elf32-0header.hex2: ... here. + * lib/linux/x86-mes/elf32-0hello-mes.hex2: Move from ... + * lib/x86-mes/elf32-0hello-mes.hex2: ... here. + * lib/linux/x86-mes/elf32-body-exit-42.hex2: Move from ... + * lib/x86-mes/elf32-body-exit-42.hex2: ... here. + * lib/linux/x86-mes/elf32-body-hello-mes.hex2: Move from ... + * lib/x86-mes/elf32-body-hello-mes.hex2: ... here. + * lib/linux/x86-mes/elf32-footer-single-main.hex2: Move from ... + * lib/x86-mes/elf32-footer-single-main.hex2: ... here. + * lib/linux/x86-mes/elf32-header.hex2: Move from ... + * lib/x86-mes/elf32-header.hex2: ... here. + * lib/linux/x86_64-mes-gcc/exit-42.S: Move from ... + * lib/x86_64-mes-gcc/exit-42.S: ... here. + * lib/linux/x86_64-mes-gcc/hello-mes.S: Move from ... + * lib/x86_64-mes-gcc/hello-mes.S: ... here. + * lib/linux/x86_64-mes-mescc/exit-42.S: Move from ... + * lib/x86_64-mes-mescc/exit-42.S: ... here. + * lib/linux/x86_64-mes-mescc/hello-mes.S: Move from ... + * lib/x86_64-mes-mescc/hello-mes.S: ... here. + * lib/linux/x86_64-mes/elf64-0exit-42.hex2: Move from ... + * lib/x86_64-mes/elf64-0exit-42.hex2: ... here. + * lib/linux/x86_64-mes/elf64-0header.hex2: Move from ... + * lib/x86_64-mes/elf64-0header.hex2: ... here. + * lib/linux/x86_64-mes/elf64-0hello-mes.hex2: Move from ... + * lib/x86_64-mes/elf64-0hello-mes.hex2: ... here. + * lib/linux/x86_64-mes/elf64-body-exit-42.hex2: Move from ... + * lib/x86_64-mes/elf64-body-exit-42.hex2: ... here. + * lib/linux/x86_64-mes/elf64-body-hello-mes.hex2: Move from ... + * lib/x86_64-mes/elf64-body-hello-mes.hex2: ... here. + * lib/linux/x86_64-mes/elf64-footer-single-main.hex2: Move from ... + * lib/x86_64-mes/elf64-footer-single-main.hex2: ... here. + * lib/linux/x86_64-mes/elf64-header.hex2: Move from ... + * lib/x86_64-mes/elf64-header.hex2: ... here. + * module/mescc.scm (parse-opts): Support --kernel. + * module/mescc/mescc.scm (kernel-find): New function. + * module/mescc/mescc.scm (hex2->elf): Use it to find kernel-specific ELF + snippets. + * build-aux/install.sh.in: Install it. + +2019-12-13 Jan Nieuwenhuizen + + mescc: Mes C Library: Add ioctl3 stub. + + mescc: Mes C Library: Fix access stub. + * lib/stub/access.c (access): Use _open3 to give more meaningful + behaviour. Fixes hanging of mes. + + hurd: Fixes for upgrade to debian-hurd-20190220.img. + * include/mach/mach-init.h (__mach_host_self, __mach_task_self): + Remove macro magic. + (mach_host_self, mach_task_self): Remove macro magic; declare as function. + * lib/mach/mach-init.c (mach_host_self, mach_task_self): New function. + (mach_init): Use them. + * lib/gnu/hurd-start.c (_hurd_start): Use mach_task_self (). + * lib/gnu/_exit.c (_exit): Likewise. + + hurd: Add malloc. + * include/gnu/syscall.h (__vm_allocate): New value. + (__vm_allocate): Declare. + * lib/gnu/malloc.c: New file. + * lib/stdlib/malloc.c[__GNU__]: Disable. See FIXME. + * lib/gnu/vm-allocate.c: New file. + * build-aux/configure-lib.sh (libc_SOURCES): Add it. + + hurd: Add open. + * include/fcntl.h (O_RDONLY, O_WRONLY, O_RDWR, O_CREAT, O_APPEND, + O_TRUNC)[__GNU__]: Specialize for GNU. + * lib/gnu/dir-lookup.c: New file. + * lib/stdio/fopen.c (fopen): Use O_RDONLY. + * lib/tests/posix/50-open-read.c (main): Likewise. + * lib/tests/stdio/90-fseek.c (main): Likewise. + * include/gnu/syscall.h (SYS__dir_lookup): New value. + * lib/gnu/_open3.c: New file. + * build-aux/configure-lib.sh (libc_SOURCES): Build them. + + hurd: Add argv and environ. + * include/gnu/hurd.h (struct hurd_startup_data): Add argp, envp. + * lib/gnu/hurd-start.c (__argv, __env): Define them. + * lib/gnu/exec-startup-get-data.c (mach_startup_info2hurd_startup_data): + Set them. + * lib/gnu/x86-mes-gcc/crt1.c (_start): Use them. + * build-aux/configure-lib.sh (libc_mini_SOURCES): Add argz-extract.c. + * include/argz.h: Build fix. + * lib/string/argz-count.c: Likewise. + * lib/string/argz-extract.c: Likewise. + + hurd: Add stubs for missing libc+tcc functions. + * lib/stub/close.c: New file. + * lib/stub/rmdir.c: New file. + * lib/stub/stat.c: New file. + * build-aux/configure-lib.sh (libc_tcc_SOURCES)[gnu]: Add them. + + hurd: Add stubs for missing libc functions. + * lib/stub/_getcwd.c: New file. + * lib/stub/_getcwd.c: New file. + * lib/stub/_open3.c: New file. + * lib/stub/access.c: New file. + * lib/stub/brk.c: New file. + * lib/stub/chmod.c: New file. + * lib/stub/clock_gettime.c: New file. + * lib/stub/dup.c: New file. + * lib/stub/dup2.c: New file. + * lib/stub/execve.c: New file. + * lib/stub/fork.c: New file. + * lib/stub/gettimeofday.c: New file. + * lib/stub/ioctl.c: New file. + * lib/stub/time.c: New file. + * lib/stub/unlink.c: New file. + * lib/stub/waitpid.c: New file. + * build-aux/configure-lib.sh (libc_SOURCES)[gnu]: Add them. + + hurd: Add stubs for missing libmes functions. + * lib/stub/lseek.c: New file. + * build-aux/configure-lib.sh (libmes_SOURCES)[gnu]: Add it. + + hurd: Add _read. + * include/gnu/hurd.h (fd_read): Declare. + * include/gnu/syscall.h (SYS__io_read): New value. + * lib/gnu/_read.c: New file. + * lib/gnu/fd-read.c: New file. + * lib/gnu/io-read.c: New file. + * build-aux/configure-lib.sh (libc_SOURCES): Add _read sources. + + hurd: Add _write. + * include/gnu/syscall.h (SYS__io_write): Add enum field. + (_hurd_dtable, _hurd_dtable_size): Declare variable. + (fd_get, fd_write, __io_write, __syscall_put): Declare. + * lib/gnu/hurd-start.c (_hurd_dtable, _hurd_dtable_size): Define + variable. + * lib/gnu/_write.c: New file. + * lib/gnu/fd-get.c (fd_get): New file. + * lib/gnu/fd-write.c (fd_write): New file. + * lib/gnu/io-write.c: New file. + * lib/gnu/syscall.c (__syscall_put): New function. + * build-aux/cofnigure-lib.sh (libc_mini_SOURCES): Add write sources. + * lib/tests/mes/30-oputs.c (main): Update. + * lib/tests/mes/30-oputs.stdout: New file. + * lib/tests/mes/30-eputs.c: New test. + * lib/tests/mes/30-eputs.stderr: New file. + * build-aux/check-mescc.sh (TESTS): Add it. + +2019-12-13 Jan Nieuwenhuizen + + hurd: Initial support. + This adds minimal Hurd support by implementing the _exit function. + + * AUTHORS: Update. + * .gitignore: Ignore a.out, core, .config. + * include/sys/wait.h (W_EXITCODE): New define. + * lib/gnu/x86-mes-gcc/crt1.c: New file. + * lib/gnu/x86-mes-gcc/mini.c: New file. + * lib/gnu/hurd-start.c: New file. + * lib/gnu/_exit.c: New file. + * include/gnu/syscall.h: New file. + * include/gnu/hurd.h: New file. + * lib/gnu/_exit.c: New file. + * lib/gnu/exec-startup-get-data.c: New file. + * lib/gnu/hurd-start.c: New file. + * lib/gnu/proc-mark-exit.c: New file. + * lib/gnu/syscall.c: New file. + * lib/gnu/task-get-special-port.c: New file. + * lib/gnu/task-terminate.c: New file. + * lib/gnu/vm-statistics.c: New file. + * build-aux/configure-lib.sh (libc_mini_SOURCES): Add Hurd sources. + * build-aux/build.sh.in (CPPFLAGS): Add lib to includes, to find linux + crt1.c. + * build-aux/test-c.sh: Always use at least -l c+mini for GNU. + * lib/tests/scaffold/30-exit-42.exit: New file. + * lib/tests/scaffold/30-exit-42.c: New test. + * build-aux/check-mescc.sh (TESTS): Add it. + * lib/tests/scaffold/30-exit-0.c (main): Move from 00-exit-0.c; Rewrite, + use _exit. + * include/gnu/hurd-types.h: Import from GNU C Library. + * include/mach/mach-init.h: Likewise. + * lib/mach/mach-init.c: Likewise. + * lib/mach/mach_host_self.S: Likewise. + * lib/mach/mach_msg_trap.S: Likewise. + * lib/mach/mach_reply_port.S: Likewise. + * lib/mach/mach_task_self.S: Likewise. + * lib/mach/mach_thread_self.S: Likewise. + * lib/mach/msg.c: Likewise. + +2019-12-13 Jan Nieuwenhuizen + + build: Generate ChangeLog reproducibly. Thanks, Timothy! + * build-aux/gitlog-to-changelog (git_dir_option): Avoid non-reproducible + localtime. + + build: Make guild optional for bootstrap builds. + * configure: Use `true' for guild when it is not available. + + build: Clean-out .gitignore. + .gitignore: Remove obsolete cross build patterns. + + build: Cater for bootstrap build. + * build-aux/build.sh.in: Build bin/mes. Update scripts and users. + * build-aux/bootstrap.sh.in: Update. + * build-aux/install.sh.in: Install all built bin/mes-* flavours. + * configure: Drop SEED, support --bootstrap. + * configure.sh: Likewise. + +2019-12-08 Jan Nieuwenhuizen + + build: Oops, have configure honor --host. + This allows + + ./configure --host=i686-unknown-linux-gnu + + instead of + + CC=i686-unknown-linux-gnu-gcc ./configure + + * configure (main): Honor --host. + +2019-12-08 Jan Nieuwenhuizen + + bootstrap: Default to mesar for mescc build. + * configure.sh: Default to mesar for mescc build. + + bootstrap: Fix configure.sh's host detection. + * configure.sh: Avoid setting host="" and not running $CC. + + mescc: Add mes 0.19 compatibility. + * mes/module/mes/boot-0.scm (%datadir): Cater for %datadir not being + set. + +2019-12-07 Jan Nieuwenhuizen + + bootstrap: Build files only once. + * build-aux/bootstrap.sh.in: Build files only once. + + build: Support mescc-tools 0.5.2. + * configure: Remove version check for mescc-tools. + Check for stage0 architecture flag type. + * configure.sh: Likewise. + * build-aux/build-scaffold.sh: Add stage0 flag type indirection. + * module/mescc/mescc.scm (arch-get-architecture): Likewise. + +2019-12-06 Jan Nieuwenhuizen + + mescc: Fix for compiling handwritten .S assembly. + * module/mescc/mescc.scm (mescc:compile): Handle .S. + (mescc:link): Likewise. + + build: Add mescc scaffold for regular build. + * lib/x86-mes-mescc/exit-42.S: New file. + * lib/x86-mes-mescc/hello-mes.S: New file. + * lib/x86_64-mes-mescc/exit-42.S: New file. + * lib/x86_64-mes-mescc/hello-mes.S: New file. + +2019-12-08 Jan Nieuwenhuizen + + build: Add --with-bootstrap option. + * configure (main): Add --with-bootstrap option. + * build-aux/build.sh.in [--with-bootstrap]: After building mes with CC, + build mes with MesCC. + +2019-12-05 Jan Nieuwenhuizen + + build: Support toplevel lib and mes builds. + * build-aux/build.sh.in: Add missing libdir for gcc build. + * build-aux/config.sh.in: ...here. + * build-aux/build-mes.sh: Do not overwrite srcdest, V. + + bootstrap: Support srcdir builds. + * build-aux/bootstrap.sh.in (srcdest): Initialize. + * build-aux/build-lib.sh: Source config.sh. + * configure.sh: Support srcdir builds. + * build-aux/build.sh.in: Move setting of cflags to ... + * build-aux/cflags.sh: ... New file. + + configure: Honor CFLAGS, LDFLAGS. + * configure (cflags-list, ldflags-list): New function. + check-preprocess-header-c, check-compile-string-c, + check-link-string-c): Use them. Be verbose when %verbose?. + (CFLAGS, LDFLAGS): Initialize to "-static -g". + +2019-12-08 Jan Nieuwenhuizen + + build! Fixup clean without git: Clean cleaner. + * build-aux/GNUmakefile.in (clean): Clean cleaner. + +2019-12-07 Vagrant Cascadian + + Fix build without git on "wip" branch. + --=-=-= + Content-Type: text/plain + + In the "wip" branch, the attempt to build without git was a bit overly + aggressive in the purging of GIT. + + live well, + vagrant + + From 73bb68e86318a6bc0fe191db663be97f94556956 Mon Sep 17 00:00:00 2001 + From: Vagrant Cascadian + Date: Sat, 7 Dec 2019 19:59:00 +0100 + Subject: [PATCH] Fix build without git + + Commit "1863c0d843a5fe4e94e8cb923cc0896f30fceeeb" removed the + substitution of @GIT@ when, resulting in the GIT variable being set to + "@GIT@" rather than "" when git is not installed. + +2019-12-04 Jan Nieuwenhuizen + + build: Fix configure host detection for Arch. Thanks, Jelle! + * configure (main): Grok `CPU-pc-linux-gnu'. + + build: Successfully check for Nyacc 0.99.0. + * configure (gulp-pipe): New function. + (check-program-version): Use it to correctly detect Nyacc. + (gulp-pipe*): Rewrite to use it. + + build: Remove git dependency. + * configure: Remove git dependency. + * build-aux/GNUmakefile.in (clean,distclean, maintainer-clean): + Implement without git. + * INSTALL: Update dependencies. + +2019-12-03 Jan Nieuwenhuizen + + core: Remove MES_PKGDATADIR. + * configure: Do not add MES_PKGDATADIR to config.h. + * configure.sh: Likewise. + * simple.sh: Likewise. + * src/mes.c (open_boot): Do not use MES_PKGDATADIR; rely on + MES_PREFIX or cwd. + +2019-12-02 Jan Nieuwenhuizen + + mescc: Ignore -fno-stack-protector. + * module/mescc.scm (parse-opts): Ignore it. + + build: Use debug build (-g) by default. + * build-aux/build.sh.in (debug): Enable. + + build: Honor user's CFLAGS, CPPFLAGS, LDFLAGS. + * build-aux/build.sh.in (AM_CFLAGS, AM_CPPFLAGS, AM_LDFLAGS): Rename + from CFLAGS, CPPFLAGS, LDFLAGS. Export them. + * configure: Substitute them. + * configure.sh: Likewise. + * build-aux/cc.sh (compile, link): Use them. + * build-aux/config.make.in (CFLAGS, CPPFLAGS, LDFLAGS): Add + substitutable variables. + * build-aux/config.sh.in: Likewise. + * build-aux/export.make: Export them. + + test: 90-abtod: Remove printf dependency. Fixes gcc. + * lib/tests/mes/90-abtod.stdout: Remove. + * lib/tests/mes/90-abtod.c (main): Remove printf. + +2019-12-01 Jan Nieuwenhuizen + + test: 90-readdir: Remove qsort dependency. Fixes tmpfs failures. + * lib/tests/dirent/90-readdir.c (check_seen): New function. + (main): Use it instead of qsort. + (qsort_strcmp): Remove. + +2019-11-24 Jan Nieuwenhuizen + + core: Throw instead of segfault on non-existing input file. + Reported by theruran. + + * src/posix.c (open_input_file): Call error instead of failing silently. + +2019-06-11 Vagrant Cascadian + + boot-0: Fix spelling of "evaluate" + +2019-11-24 Jan Nieuwenhuizen + + mescc: Honor --includedir, --libdir. + * guix/git/mes.scm (mes): + * module/mescc.scm (%includedir, %libdir): New variable. + (mescc:main): Add them to options. + * module/mescc/mescc.scm (mescc:preprocess, c->info): Add %includedir. + (arch-find): Use %libdir instead of + prefix-file. + (prefix-file): Remove. + * scripts/mescc.scm.in (%includedir, %libdir): Initialize from and set + in environment. + + xx + + * module/mescc/mescc.scm : + +2019-11-24 Jan Nieuwenhuizen + + doc: Post-release update. + * NEWS: Typo. + * doc/announce/ANNOUNCE-0.21: Add checksums. + +2019-11-10 Jan Nieuwenhuizen + + Release 0.21. + * configure (VERSION): Update to 0.21. + (main): Likewise. + * build-aux/GNUmakefile.in: Likewise. + * configure.sh (VERSION): Likewise. + * guix/git/mes.scm (mes, mes.git): Likewise. + +2019-11-04 Jan Nieuwenhuizen + + doc: Release update. + * BLURB: Release update. + * HACKING: Remove roadmap. + * INSTALL: Release update. + * NEWS: Add 0.21 section. + * README: Release update. + * ROADMAP: New file. + * configure.sh: Release update. + * doc/announce/ANNOUNCE-0.21: New file. + * doc/mes.texi: Release update. + +2019-11-23 Jan Nieuwenhuizen + + mescc: Mes C Library: vfprintf: Support --with-system-libc. + * include/stdarg.h (va_arg8)[SYSTEM_LIBC]: Define. + + mescc: Mes C Library: Support gcc-4.6.4: Fix ctime stub. + * lib/stub/ctime.c (ctime): Fix stub to avoid segfault upon use. + + mescc: Mes C Library: Fix isatty for x86_64. + * lib/linux/ioctl.c (ioctl3): New function. + * include/sys/ioctl.h: Declare it. + * lib/posix/isatty.c (__tcgetattr): Use it. + +2019-11-09 Jan Nieuwenhuizen + + build: Prefer /bin/bash if available. Thanks, Vagrant! + Ensure the configure script uses /bin/bash, otherwise on systems with + /bin -> /usr/bin it results in /bin/bash being embedded in various + scripts. + + Inspired by + + https://salsa.debian.org/debian/mes/blob/debian/master/debian/patches/force-use-of-bin-bash + + * configure: Prefer /bin/bash, /bin/sh if available. Helps + reproducibility on Debian. + +2019-11-04 Jan Nieuwenhuizen + + build: Update script help and usage. + * doc/mes.texi (Invoking mesar): New section. + * mes/module/mes/boot-0.scm: Add one line help description. + * module/mescc.scm (parse-opts): Likewise. + * scripts/diff.scm (main): Add -h,--help, -v,--version. + * scripts/mesar.in: Likewise. + + build: Use unversioned doc directory. Thanks, Vagrant! + * configure (docdir): Drop version. Fixes Debian lint error. + * configure.sh (docdir): Likewise. + + build: Add sensible NAME section for man pages. Thanks, Vagrant! + * build-aux/GNUmakefile.in (mes.1, mescc.1, mesar.1): Add sensible + --name section. Fixes Debian lint error. Reported by Vagrant + Cascadian. + +2019-11-09 Jan Nieuwenhuizen + + Revert "build: Mark lib/tests/dirent/90-readdir.c as XFAIL on x86_64-gcc." + This reverts commit dc0b41f83efa973b7a92c0c7a0ad1eb21a7c4c7a. + +2019-10-30 Jan Nieuwenhuizen + + build: Mark lib/tests/dirent/90-readdir.c as XFAIL on x86_64-gcc. + * build-aux/check-mescc.sh (XFAIL_TESTS)[x86_64-gcc]: Add + lib/tests/dirent/90-readdir.c. + +2019-11-09 Jan Nieuwenhuizen + + Revert "build: Mark lib/tests/dirent/90-readdir.c as XFAIL on x86_64-mescc." + This reverts commit 17986224095ed72649fb2383f72c21f525977310. + +2019-10-30 Jan Nieuwenhuizen + + build: Mark lib/tests/dirent/90-readdir.c as XFAIL on x86_64-mescc. + * build-aux/check-mescc.sh (XFAIL_TESTS)[x86_64-mescc]: Add + lib/tests/dirent/90-readdir.c. + +2019-10-24 Jan Nieuwenhuizen + + build: Better and friendlier tarball. + * build-aux/GNUmakefile.in (dist): Be friendly to Debian; avoid using + EPOCH. Cater for file permission differences. + +2019-10-15 Jan Nieuwenhuizen + + build: bootstrap fixes. + * build-aux/config.sh.in (bootstrap): Set up for substitution. + * configure.sh (bootstrap): Substitute. + * build-aux/install.sh.in (_v): Robustify check for V. + (__exclude_go, __exclude_scm): Initialize. + +2019-10-10 Jan Nieuwenhuizen + + mes: Fix -c, --command. + * mes/module/mes/boot-0.scm: Prepend 'begin to expr list. + +2019-10-03 Jan Nieuwenhuizen + + check: Remove duplicate test. + * build-aux/check-boot.sh (TESTS): Remove duplicate test. + +2019-09-20 Jan Nieuwenhuizen + + mescc: Mes C Library: Support gcc-4.6.4: vfprintf, vsnprintf: pad with space. + * lib/stdio/vfprintf.c (vfprintf): pad with space. + * lib/stdio/vsnprintf.c (vsnprintf): pad with space. + +2019-09-13 Jan Nieuwenhuizen + + mescc: Mes C Library: Support gcc-4.6.4: Add math stubs. + * lib/math/ceil.c: New file. + * lib/math/floor.c: New file. + * lib/stub/atan2.c: New file. + * lib/stub/cos.c: New file. + * lib/stub/exp.c: New file. + * lib/stub/log.c: New file. + * lib/stub/modf.c: New file. + * lib/stub/pow.c: New file. + * lib/stub/sin.c: New file. + * lib/stub/sqrt.c: New file. + * lib/libc+gnu.c: Include them. + * include/math.h (atan2, ceil, cos, exp, fabs, floor, log, modf, pow, + sin, sqrt): Declare. + * lib/math/fabs.c: Update. + * lib/stub/ldexp.c: Update. + +2019-09-06 Jan Nieuwenhuizen + + mescc: Mes C Library: Support gcc-4.6.4: Add fscanf, vfscanf. + * lib/stdio/vfscanf.c: New file. + * lib/stdio/fscanf.c: New file. + * build-aux/configure-lib.sh (libc_gnu_SOURCES): Add them. + * include/stdio.h (fscanf): Declare. + * include/stdarg.h (vfscanf): Declare. + * lib/stub/fscanf.c: Remove. + +2019-09-04 Jan Nieuwenhuizen + + mescc: Mes C Libray: Fix off_t. + * include/sys/types.h (off_t): Drop unsigned. + +2019-09-06 Jan Nieuwenhuizen + + mescc: Environment setup. + * scripts/mescc.in (MES_ARENA, MES_MAX_ARENA, MES_STACK): Reduce defaults. + * build-aux/check.sh.in (MES_ARENA): Likewise. Export them. + * build-aux/bootstrap.sh.in (MES_STACK): Likewise. + (MES_PREFIX): Set default. + +2019-08-26 Danny Milosavljevic + + Add missing #include. + * lib/stdlib/mbstowcs.c: Add missing #include. + + Fix dtoab. + * lib/mes/dtoab.c (dtoab): Fix it. + * lib/tests/mes/90-dtoab.c (main): Fix test. + * build-aux/check-mescc.sh (XFAIL_TESTS: Remove it. + +2019-08-27 Danny Milosavljevic + + va_align: Fix compiler warning. + Follow-up to 49b0cd7d2e6952044d7436260d6ba950e40ee05f. + + * include/stdarg.h: Fix compiler warning. + +2019-08-27 Danny Milosavljevic + + Add missing #include. + * lib/tests/mes/90-abtod.c (main): Add missing #include. + + Fix variable argument list traversal for doubles. + * include/stdarg.h (va_align): New macro. + (va_arg8): New macro. + * lib/stdio/vfprintf.c (vfprintf): Use it. + * lib/stdio/vsnprintf.c (vsnprintf): Use it. + +2019-08-24 Jan Nieuwenhuizen + + build: Improve --with-system-libc support. + * build-aux/build-lib.sh: Avoid building libc for --with-system-libc. + Make libmes richer. + build-aux/check-mescc.sh: Enable 50-malloc test. + * include/dirstream.h: Use HAVE_DIRSTREAM_H to cater for non-existing + dirstream.h. + * include/grp.h[SYSTEM_LIBC]: Typo. + * include/mes/lib.h (__brk, __call_at_exit)[SYSTEM_LIBC]: Declare. + * include/stdlib.h (comparison_fn_t)[SYSTEM_LIBC]: Declare. + * include/time.h (mktime): Return time_t. + * lib/posix/isatty.c [SYSTEM_LIBC]: Do not (re)declare termios. + * lib/stub/mktime.c (mktime): Return time_t. + * lib/tests/scaffold/41-ternary.c (main): Remove assumption that + locals are initialized. + * lib/tests/scaffold/70-stdarg.c: Cater for SYSTEM_LIBC. + * lib/tests/setjmp/80-setjmp.c: Declare jmp buf. + * lib/*/*.c: Add missing mes/lib.h, errno.h includes. + +2019-09-01 Jan Nieuwenhuizen + + mescc: Mes C Library: vfprintf, vsnprintf: Pad floats with space. + * lib/stdio/vfprintf.c (vfprintf): Pad floats with space. + * lib/stdio/vsnprintf.c (vsnprintf): Pad floats with space. + * lib/tests/stdio/90-sprintf.c: Test it. + +2019-08-01 Jan Nieuwenhuizen + + mescc: Mes C Library: vsscanf: Increase count for scanned float. + * lib/stdio/vsscanf.c (vsscanf): Increase count for scanned float. + +2019-07-31 Jan Nieuwenhuizen + + mescc: Mes C Library: Support GNU Tar: Fix getpwnam, getpwuid stubs. + * lib/stub/getpwnam.c (getpwnam): Return pointer to static struct + passwd. + * lib/stub/getpwuid.c (getpwuid): Likewise. + +2019-07-24 Jan Nieuwenhuizen + + mescc: Mes C Library: Support GNU Tar: Add getgrgid, getgrnam, setgrent stub. + * include/grp.h: New file. + * lib/stub/getgrgid.c: New file. + * lib/stub/getgrnam.c: New file. + * lib/stub/setgrent.c: New file. + * lib/libc+gnu.c: Include them. + +2019-07-21 Jan Nieuwenhuizen + + mescc: Mes C Library: Support GNU Awk: Add wchar_t. + * include/sys/types.h (wchar_t): New typedef. + +2019-07-18 Jan Nieuwenhuizen + + mescc: Mes C Library: Support GNU Awk: Add getpgid, getpgrp stubs. + * include/unistd.h (getpgid, getpgrp): Declare. + * lib/stub/getpgid.c: New file. + * lib/stub/getpgrp.c: New file. + * lib/libc+gnu.c: Include them. + +2019-07-15 Jan Nieuwenhuizen + + mescc: Mes C Library: Support GNU Tar: Add mktime stub, fix localtime stub. + * include/time.h (mktime): Declare. + * lib/stub/mktime.c: New stub. + * lib/libc+gnu.c: Include it. + * lib/stub/localtime.c (localtime): Return pointer to static struct + tm. Avoids segfaults. + +2019-07-12 Jan Nieuwenhuizen + + mescc: Mes C Library: Support GNU Tar: Add creat, mknod. + * include/linux/x86_64/syscall.h (SYS_mknod): New macro. + * include/linux/x86/syscall.h (SYS_mknod): New macro. + * lib/linux/mknod.c: New file. + * build-aux/configure-lib.sh (libc_gnu_SOURCES): Add it. + * include/sys/stat.h (mknod): Declare it. + * include/fcntl.h (creat): New macro. + +2019-07-09 Jan Nieuwenhuizen + + mescc: Mes C Library: Support GNU Tar: Add missing defines. + * include/errno.h (ENXIO): New macro. + * include/sys/stat.h (S_IFIFO, S_ISFIFO): New macro. + +2019-07-06 Jan Nieuwenhuizen + + mescc: Mes C Library: Support GNU Bash: Add struct winsize. + * include/termio.h (struct winsize): New type. + +2019-07-03 Jan Nieuwenhuizen + + mescc: Mes C Library: Support GNU Awk: Implement atof. + * lib/stdlib/atoi.c: Update. + * lib/stdlib/atof.c: Rename from stub/atof.c; Implement. + * lib/libc+gnu.c: Update include. + * lib/libg.c: Update include. + +2020-01-12 Jan Nieuwenhuizen + + mescc: Mes C Library: Support GNU Awk: Add dtoab, %f in vfprintf, vsnprintf. + * include/libmes.h (dtoab): Declare. + * lib/mes/ntoab.c (ntoab): Update. + * lib/mes/dtoab.c: New file. + * build-aux/configure-lib.sh (libmes_SOURCES, libc_tcc_SOURCES): Add + it. + * lib/tests/mes/90-dtoab.c: Test it. + * lib/tests/stdio/90-sprintf.c: Test it. + * build-aux/check-mescc.sh (tests): Run it, against... + * lib/tests/mes/90-dtoab.stdout: ...baseline. + * lib/stdio/vfprintf.c (vfprintf): Support %f, even more naive support + for %e, %E, %g, %G. + * lib/stdio/vsnprintf.c (vsnprintf): Likewise. + +2019-06-25 Jan Nieuwenhuizen + + mescc: Mes C Library: Support GNU Awk: Add abtod, implementing strtod. + * include/libmes.h (abtod): Declare. + * lib/mes/abtod.c: New file. + * build-aux/configure-lib.sh (libmes_SOURCES, libc_tcc_SOURCES): Add + it. + * lib/mes/abtol.c: Update. + * lib/stdlib/strtod.c: Use it to implement; move from stub/strtod. + * lib/tests/mes/90-abtod.c: Test it. + * lib/tests/mes/90-abtod.stdout: Baseline. + * build-aux/check-mescc.sh (tests): Run it. + +2019-06-22 Jan Nieuwenhuizen + + mescc: Mes C Library: Support GNU Awk: vsscanf: Support %f. + * lib/stdio/vsscanf.c (vsscanf): Support %f. + +2019-06-19 Jan Nieuwenhuizen + + mescc: Mes C Library: Support GNU Awk: Do not flush std files. + * lib/stdio/fflush.c (fflush): Do not flush std files. + +2019-06-16 Jan Nieuwenhuizen + + mescc: Mes C Library: Support GNU Awk: Add isgraph. + * lib/ctype/isgraph.c: New file. + * lib/libc+gnu.c: Include it. + * include/ctype.h: Add missing prototypes. + +2019-06-12 Jan Nieuwenhuizen + + mescc: Mes C Library: Support GNU Tar: Add readlink, symlink. + * lib/linux/gnu.c (readlink, symlink): New function. + * include/unistd.h (readlink, symlink): Declare. + * include/linux/x86/syscall.h (SYS_readlink, SYS_symlink): New macro. + * include/linux/x86_64/syscall.h (SYS_symlink, SYS_readlink): New + macro. + +2019-06-09 Jan Nieuwenhuizen + + mescc: Mes C Library: Support GNU Tar: Add execlp. + * lib/posix/execl.c (vexec): New function. + (execl): Use it. + * lib/posix/execlp.c: New file. + * build-aux/configure-lib.sh (libc_tcc_SOURCES): Add it. + * lib/libc+gnu.c: Include it. + * include/unistd.h (execlp): Declare. + * lib/tests/posix/90-execlp.c: New file. + * lib/tests/posix/90-execlp.stdout: New file. + * build-aux/check-mescc.sh: Test it. + +2019-06-12 Jan Nieuwenhuizen + + mescc: Mes C Library: Fix compile warnings. + * include/stdlib.h (abort): Add prototype. + +2019-11-10 Jan Nieuwenhuizen + + mescc: Mes C Library: Add missing stubs. + * build-aux/configure-lib.sh (libc_gnu_SOURCES): Add fscanf, rewind stubs. + * lib/stdio/freeopen.c: Remove. + +2019-09-20 Jan Nieuwenhuizen + + build: Avoid tar --exclude=. + * build-aux/install.sh.in: Only use `tar --exclude=' if we also have .go + files compiled by Guile. + +2019-09-16 Jan Nieuwenhuizen + + build: mesar: Remove bashisms. + * scripts/mesar.in: Remove bashisms. + +2019-10-01 Jan Nieuwenhuizen + + configure.sh: Cleanup argument parsing. Thanks, Timothy! + * configure.sh: Cleanup argument parsing. + +2019-09-16 Jan Nieuwenhuizen + + configure.sh: Remove bashisms. + * configure.sh: Remove bashisms. Fixes running with Gash 0.1. + +2019-09-16 Jan Nieuwenhuizen + + Revert "nyacc: 0.86.0 compatibility stub. WIP" + This reverts commit 0183cc1c42437fda27196e27b490285a61d47f59. + + While it works to run Nyacc 0.86.0, it breaks running Nyacc 0.93 and + up. This would need more thought and work, adding a nyacc-compat + directory or so. Seems not worth the effort right now. + +2019-09-16 Jan Nieuwenhuizen + + nyacc: 0.86.0 compatibility stub. WIP + * mes/module/nyacc/lang/c99/util.scm: 0.86.0 compatibility stub. + +2019-09-20 Jan Nieuwenhuizen + + build: Split-out build-source-lib.sh from build-lib.sh. + * build-aux/build-lib.sh: Remove building of source lib. + * build-aux/build-source-lib.sh: New file. + * build-aux/build.sh.in: Invoke it. + * build-aux/bootstrap.sh.in: Likewise. + +2019-11-13 Jan Nieuwenhuizen + + build: Honor configure's --includedir. Thanks, Vagrant! + Suggested by Vagrant Cascadian + + https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=902174#84 + + * build-aux/install.sh.in: Install headers in $includedir. + * configure (includedir): Typo. + * configure.sh (includedir): Likewise. + +2019-11-23 Jan Nieuwenhuizen + + build: Create ascii signature. + * build-aux/GNUmakefile.in (sign): Create ascii signature. + +2019-09-09 Jan Nieuwenhuizen + + doc: Post-release update. + * doc/announce/ANNOUNCE-0.20: Update. + * guix/git/mes.scm (mes): Update. + + Release 0.20. + * configure (VERSION): Update to 0.20. + (main): Likewise. + * configure.sh (VERSION): Likewise. + * guix/git/mes.scm (mes, mes.git): Likewise. + + doc: Release update. + * BLURB: New file. + * AUTHORS: Update. + * HACKING: Update. + * INSTALL: Update. + * NEWS: Update. + * README: Update. + * doc/images/gcc-mesboot-graph.dot: Update. + * doc/mes.texi: Update. + * simple.sh: Update. + * doc/announce/ANNOUNCE-0.20: New file. + + guix: Update mescc-tools to 0.6.1. + * guix/git/mes.scm (mescc-tools): Update to 0.6.1. + * configure: Check for mescc-tools versions 0.6 or higher. + + build: Create ascii signature. + * build-aux/GNUmakefile.in (sign): Create ascii signature. + + guix: Update Nyacc to 0.99. + * guix/git/mes.scm (nyacc): Update to 0.99. + + doc: Add PORTING. + * PORTING: New file. + + doc: Typos. Thanks, dddddd. + * doc/announce/ANNOUNCE-0.11: Typo. + * doc/announce/ANNOUNCE-0.12: Typo. + * doc/announce/ANNOUNCE-0.13: Typo. + * doc/announce/ANNOUNCE-0.14: Typo. + + mescc: Remove dead code. Thanks Mark Weaver. + * module/mescc/compile.scm (field-size): Remove dead function. + + guix: Update packaging. + * build-aux/manifest.scm (string-append): + * guix/git/mes.scm (nyacc, git-file?): Remove. + (mescc-tools): Bump to 0.6.0. + (%source-dir): New variable. + (mes.git): Ues it. + * guix.scm: Rename from .guix.scm. + + build: Do not generate ChangeLog from tarball. + * configure (main): Set .git-for-build. + * build-aux/install.sh.in (DESTDIR): Use it as canary to skip + ChangeLog rebuild. + + build: Use mesar instead of ar. + * scripts/mesar.in: Rename from ar.in. Update users. + * build-aux/build.sh.in (LIBS): Update. + * build-aux/check.sh.in (recheck): Likwise. + * build-aux/install.sh.in (DESTDIR): Likwise. + * configure (main): Likwise. + * configure.sh (mes_system): Likwise. + * .gitignore: Update. + + getopt: Remove old FSF address, thanks Vagrant. + * lib/posix/getopt.c: Remove old FSF address. + +2019-09-09 Danny Milosavljevic + + Add missing #include. + * lib/tests/scaffold/55-char-array.c: Add missing #include. + + Add missing #include. + * lib/tests/io/90-stat.c: Add missing #include. + + Add missing #include. + * lib/posix/getcwd.c: Add missing #include. + +2019-09-09 Jan Nieuwenhuizen + + signal: Use SA_RESTORER on x86-64. + * lib/linux/signal.c (signal)[x86_64]: Avoid segfault by setting + SA_RESTORER flag. + +2019-09-09 Danny Milosavljevic + + signal: Add comment on why we don't use the restorer. + * lib/linux/signal.c: Add comment on why we don't use the restorer. + + signal: Remove SA_SIGINFO. + * lib/linux/signal.c (signal): Remove SA_SIGINFO. + + signal: Don't use custom restorer. + * lib/linux/signal.c (signal): Don't use custom restorer. + + signal: Use SA_SIGINFO (like glibc). + * lib/linux/signal.c (_restorer): Rename to... + (_restorer_for_siginfo): ...this. + (signal): Use it. Use SA_SIGINFO. + + signal: Make sure that the signal mask is actually unsigned long. + * lib/linux/signal.c (signal): Make sure that the signal mask is actually + unsigned long. + +2019-09-09 Danny Milosavljevic + + Delete "__sigmask". + Follow-up to 6d95b89759d3c598fc84194429ae8c57249daa1a + + * lib/linux/signal.c (__sigmask): Delete definition. + +2019-09-09 Danny Milosavljevic + + Fix "struct sigaction" structure for rt_sigaction. + * include/signal.h (sigset_t): Increase size. + * lib/linux/signal.c (signal): Use new sigset_t. + + Inherit CFLAGS for mes. + * build-aux/check.sh.in: Inherit CFLAGS for mes. + + Fix typo. + * build-aux/build.sh.in: Fix typo in "CFLAGS". + + tests: Fail early on nonexistent file. + * lib/tests/io/90-stat.c (main): Fail early on nonexistent file. + + open: Check flags, and use _open2 if applicable. + * lib/linux/open.c (open): Check flags; use _open2. + + ldiv: Make rem < 0 if a < 0. + * lib/mes/div.c (ldiv): Make rem < 0 if a < 0. + + ldiv: Handle a == LONG_MIN. + * lib/mes/div.c (ldiv): Handle a == LONG_MIN. + +2019-09-09 Jan Nieuwenhuizen + + ntoab: Use __mesabi_uldiv only for arm. + * lib/mes/ntoab.c (ntoab)[__MESC__ && __arm__]: Use __mesabi_uldiv. + * build-aux/check-mescc.sh (XFAIL_TESTS): 70-printf-simple.c and + 70-printf.c now pass for x86_64 mescc. + +2019-07-01 Danny Milosavljevic + + Fix ntoab. + Follow-up to b5b19304b59fefbed923b146ec8c8d495556fa76. + + * lib/mes/ntoab.c (ntoab): Fix non-MESC case. + +2019-06-18 Danny Milosavljevic + + signal: Define "_restorer" everywhere except on i386. + * lib/linux/signal.c: Define "_restorer" everywhere except on i386. + + Clarify our data type choices in "struct stat". + * include/sys/stat.h: Clarify our data type choices in "struct stat". + +2019-09-07 Jan Nieuwenhuizen + + test: Bump timeout. + * build-aux/test-c.sh: Bump timeout to 10s, __mesabi_uldiv can be slow. + +2019-06-14 Danny Milosavljevic + + ntoab: Use __mesabi_uldiv only on __MESC__. + * lib/mes/ntoab.c (ntoab): Use __mesabi_uldiv only on __MESC__. + +2019-06-14 Jan Nieuwenhuizen + + mescc: Mes C Library: Include mes/div.c for mescc builds. + * build-aux/configure-lib.sh (libmes_SOURCES): Add mes/div.c. + * simple.sh: Likewise. + +2019-06-13 Danny Milosavljevic + + ntoab: Include "assert.h". + * lib/mes/ntoab.c: #include "assert.h". + + mescc: Mes C Library: Use __mesabi_uldiv. + * lib/mes/ntoab.c (ntoab): Use __mesabi_uldiv. + + mescc: Mes C Library: Add integer division algorithm. + * lib/mes/div.c: New file. + +2019-07-28 Jan Nieuwenhuizen + + mescc: Mes C Library: Have write behave well with buffered reads. + * lib/mes/write.c: New file. + * build-aux/configure-lib.sh (libc_mini_SOURCES): Add it. + (libc_mini_shared_SOURCES): New variable. + (libc_mini_SOURCES, libmes_SOURCES): Use it. + (libmes_SOURCES): Add lib/linux/lseek.c, lib/posix/write.c. + (libc_tcc_SOURCES): Remove lib/linux/lseek.c. + * lib/posix/write.c (write): Correct for read buffer. + * lib/stdio/fwrite.c (fwrite): Remove read buffer correction. + * simple.sh: Update. + +2019-07-27 Jan Nieuwenhuizen + + mescc: Mes C Library: Add buffered read. + * lib/mes/__buffered_read.c: New file. + * build-aux/configure-lib.sh (libc_SOURCES): Add it. Also add memmove.c. + (libc_tcc_SOURCES): Remove memmove.c + * lib/linux/close.c (close): Clear read buffer. + * lib/linux/_open3.c (_open3): Likewise. + * lib/linux/lseek.c (lseek): Correct for read buffer. + * lib/stdio/fwrite.c (fwrite): Likewise. + * lib/posix/read.c (read): Call __buffered_read. + * lib/posix/write.c (write): Add FIXME note about buffered reads. + * simple.sh: Update. + +2019-06-10 Jan Nieuwenhuizen + + tests: Disable 70-extern.c for x86_64-gcc. + * build-aux/check-mescc.sh (XFAIL_TESTS)[x86_64-gcc]: Add + 70-extern.c. + +2019-05-30 Danny Milosavljevic + + mescc: Put char's ASCII code into register, not char. + * module/mescc/compile.scm (expr-register): Put char's ASCII code into + register, not char. + +2019-06-09 Jan Nieuwenhuizen + + mes: Update to Nyacc 0.93. + * mes/module/nyacc/lang/c99/util.mes: New file. + * mes/module/nyacc/lang/c99/parser.mes: Use it. + * module/mescc/compile.scm (ast->info): Update for Nyacc 0.93.0. + * module/mescc/preprocess.scm (need-progress): Likewise. + (ast-strip-comment): Likewise. + +2019-08-02 Jan Nieuwenhuizen + + mes: string->number: Support #x-prefixed hex numbers. + * mes/module/mes/scm.mes (string->number): Support "#x"-prefix. + * tests/math.test ("string->number #hex"): Test it. + +2019-07-27 Jan Nieuwenhuizen + + mescc: Do not dump variables with extern storage. + * lib/tests/scaffold/70-extern.stdout: New file. + * lib/tests/scaffold/70-extern.c: New file. + * build-aux/check-mescc.sh (TESTS): Add it.. + * module/mescc/M1.scm (global-string?, global-extern?): New function. + (info->M1): Dump strings first. Skip extern symbols. + * module/mescc/info.scm (): Add storage field. + (make-global): Add storage parameter. Pass it. + * module/mescc/compile.scm (make-global-entry): Likewise. + (global->info): Likewise. + (init-declr->info): Likewise. + (decl->info): Pass storage. + + build: ./pre-inst-env MES_PREFIX fixup. + * build-aux/pre-inst-env.in: Set MES_PREFIX to abs_top_srcdir. + * src/mes.c (open_boot): Cater for MES_PREFIX/mes and ${srcdest}. + + mescc: Be silent. + * module/mescc/M1.scm (infos->M1, info->M1): Add verbose?. Move + debugging into verbose? > 1. + * module/mescc/compile.scm (c99-input->info, c99-ast->info): Likewise. + (mescc:trace-verbose): Rename from mescc:trace. + (mescc:trace): New function. + * module/mescc.scm (mescc:main): Likewise. + * module/mescc/mescc.scm (mescc:preprocess, c->ast mescc:compile, + c->info, E->info): Likewise. + * module/mescc/preprocess.scm (c99-input->full-ast, c99-input->ast): + Likewise. + +2019-07-26 Jan Nieuwenhuizen + + mescc: Add // to include path. + * module/mescc/preprocess.scm (c99-input->full-ast): Add + // to include path. + * module/mescc/compile.scm (c99-input->info): Pass arch. + * module/mescc/mescc.scm (mescc:preprocess): Likewise. + (c->info): Likewise. + (c->ast): Likewise. + + mescc: Add 70-function-destruct-declare.c test. + * module/mescc/compile.scm (init-declr->info): Do not attempt to + re-calculate function type. + (ftn-declr:get-type): Remove. + * lib/tests/scaffold/70-function-destruct-declare.c: New file. + * build-aux/check-mescc.sh (TESTS): Add it. + + mescc: Resurrect --write. + * module/mescc/mescc.scm (mescc:preprocess): Pass pretty-print/write + to c->ast. + + build: Distribute crt*.c, libc+gnu.c for tcc, gcc bootstrap build. + * build-aux/build-lib.sh (libc_gnu_SOURCES): Build libc+gnu.c. Copy + crt*.c, libc+gnu.c for distribution. + + build: Uniquify config macros. + * configure (main): Rename VERSION to MES_VERSION, pkgdatadir to + MES_PKGDATADIR. Update users. + * configure.sh (mes_system): Likewise. + * src/mes.c (mes_symbols): Update. + (open_boot): Update. + * scaffold/cons-mes.c (main): Update. + * simple.sh: Update. + +2019-07-20 Jan Nieuwenhuizen + + build: Resurrect --with-cheating. + * build-aux/config.sh.in (SCHEME): New substitute. + * build-aux/config.make.in: Likewise. + * configure: Substitute them. + +2019-07-23 Jan Nieuwenhuizen + + mescc: Support tcc: libtcc1 build fixes. + * lib/libtcc1.c: Support building without long long, float support. + +2019-06-01 Jan Nieuwenhuizen + + mescc: Mes C Library: Avoid type/size_t conflicts. + * include/alloca.h: Remove typedefs, include sys/types.h. + * include/stdint.h: Likewise. + * include/string.h: Likewise. + +2019-07-17 Jan Nieuwenhuizen + + mescc: Support tcc: Add intptr_t, uintptr_t. + * include/sys/types.h (intptr_t, uintptr_t): Add typedef. + +2019-07-21 Jan Nieuwenhuizen + + mescc: Add 70-struct-post.c test with fix. + * lib/tests/scaffold/70-struct-post.c: New file. + * build-aux/check-mescc.sh (TESTS): Add it. + * module/mescc/compile.scm (expr->register): Use type size for rank + 0 (WAS: 1). + + mescc: Add 70-struct-short-enum-init.c test with fix. + * module/mescc/compile.scm (init->data): Respect type of size. + * lib/tests/scaffold/70-struct-short-enum-init.c: New file. + * lib/tests/scaffold/70-struct-short-enum-init.stdout: New file. + * build-aux/check-mescc.sh (TESTS): Add test. + +2019-07-20 Jan Nieuwenhuizen + + mescc: Add 70-array-in-struct-init.c test with fix. + * lib/tests/scaffold/70-array-in-struct-init.c: New file. + * lib/tests/scaffold/70-array-in-struct-init.stdout: New file. + * build-aux/check-mescc.sh (TESTS): Add test. + * module/mescc/compile.scm (array-init-element->data): Recurse for + elements instead of using init->data. Support array fields. + +2019-07-19 Jan Nieuwenhuizen + + mes: Remove broken copy of simple-format. + * mes/module/mes/simple-format.mes: New file. + * mes/module/mes/guile.mes: Use it. + (with-output-to-string, simple-format): Remove broken copies. + * mes/module/mes/display.mes (with-output-to-string, simple-format, + format): Remove. + +2019-07-05 Danny Milosavljevic + + Fix remainder handling. + * mes/module/mes/scm.mes (number->string): Fix remainder handling. + * build-aux/check-mescc.sh (XFAIL_TESTS): Remove + lib/tests/scaffold/60-math.c. + +2019-07-09 Jan Nieuwenhuizen + + Revert "test: Disable 60-math.c test." + This reverts commit bbe6576a66a520d429bb3ec84120ffcce88480bf. + + test: Disable 60-math.c test. + * build-aux/check-mescc.sh (TESTS): Remove + lib/tests/scaffold/60-math.c. + (BROKEN_TESTS): Add it. + +2019-07-07 Jan Nieuwenhuizen + + build: Resurrect bootstrap.sh. + * build-aux/connfigure-lib.sh: Split from build-lib.sh + * build-aux/build-lib.sh: Include it. + * build-aux/bootstrap.sh.in: New file. + * configure.sh: Substitute it. + +2019-07-08 Jan Nieuwenhuizen + + mescc: Use basename of input as default output name. + * module/mescc/mescc.scm (mescc:preprocess, mescc:compile, + mescc:assemble, M1->hex2): Use basename of input as default output name. + +2019-07-06 Jan Nieuwenhuizen + + build: Handle gcc with --pie-by-default. + This fixes upgrading to debian-hurd-20190220.img. + + * build-aux/build.sh.in (CFLAGS): Add -static. Fixes using gcc + compiled with --pie-by-default + * build-aux/check.sh.in (CFLAGS): Likewise. + * module/mescc.scm (parse-opts): Ignore -no-pie, -static. + +2019-07-08 Jan Nieuwenhuizen + + test: Split-off broken 72-typedef-struct-def-local. + * lib/tests/scaffold/72-typedef-struct-def-local.c: New file. + * lib/tests/scaffold/72-typedef-struct-def.c: Remove local bit. + * build-aux/check-mescc.sh (TESTS): Add it. + (XFAIL_TESTS)[mescc]: Add lib/tests/scaffold/72-typedef-struct-def.c. + +2019-06-28 Jan Nieuwenhuizen + + test: Fix open-read test. + * build-aux/pre-inst-env.in (srcdir): Remove. + (abs_top_srcdir, abs_top_builddir): Export. + * lib/tests/posix/50-open-read.c (main): Use abs_top_srcdir. + +2019-06-26 Jan Nieuwenhuizen + + test: Add open-read test. + * build-aux/test-c.sh: Support running by hand. + * lib/tests/posix/50-open-read.c: New test. + * lib/tests/posix/data/open-read: New file. + * build-aux/check-mescc.sh (TESTS): Add it. + + test: Enable argv test, run tests with arguments. + * build-aux/check-mescc.sh (TESTS): Enable 54-argv.c + (XFAIL_TESTS): Remove it. + * build-aux/test-c.sh: Invoke test with options. + * lib/tests/scaffold/54-argc.c: Update. + +2019-06-25 Jan Nieuwenhuizen + + mescc: Mes C library: Move common getcwd, open bits to posix. + * lib/linux/_getcwd.c: Rename from getcwd.c. + * lib/linux/_open3.c: Rename from open.c. + * lib/posix/getcwd.c: New file with bits from ../linux/getcwd.c. + * lib/posix/open.c: New file with bits ../linux/getcwd.c. + * build-aux/build-lib.sh (libc_SOURCES): Update. + +2019-06-24 Jan Nieuwenhuizen + + mescc: Mes C Library: Move posix bits to read. + * lib/linux/_read.c: Rename from read. + * lib/posix/read.c: New file. + * build-aux/build-lib.sh (libc_SOURCES): Update. + * include/mes/lib.h (_read): Declare. + +2019-06-25 Jan Nieuwenhuizen + + porting: Avoid failing in scaffold build. + * build-aux/build-scaffold.sh: Do not fail when using courage. + + build: Use bash if available to avoid dash problems. + * configure: Set SHELL to bash. + * configure.sh: Likewise. + * build-aux/test-suite.sh (TEST_LOGS): + * build-aux/export.make: Export SHELL. + * build-aux/config.sh.in (SHELL): New substitute, export. + * build-aux/config.make.in (SHELL): New substitute. + * build-aux/GNUmakefile.in (build, check, install, uninstall): Use + $SHELL to avoid dash problems. + * build-aux/check-mescc.sh: Likewise. + * build-aux/build.sh.in: Likewise. + * build-aux/check-mes.sh: Likewise. + * build-aux/check.sh.in: Likewise. + + test: Oops, uncomment some commented-out tests. + * lib/tests/scaffold/55-char-array.c: Uncomment. + * lib/tests/scaffold/72-typedef-struct-def.c: Likewise. + + build: Improve --with-system-libc support. + * build-aux/build-lib.sh: Avoid building libc for --with-system-libc. + Make libmes richer. + build-aux/check-mescc.sh: Enable 50-malloc test. + * include/dirstream.h: Use HAVE_DIRSTREAM_H to cater for non-existing + dirstream.h. + * include/grp.h[SYSTEM_LIBC]: Typo. + * include/mes/lib.h (__brk, __call_at_exit)[SYSTEM_LIBC]: Declare. + * include/stdlib.h (comparison_fn_t)[SYSTEM_LIBC]: Declare. + * include/time.h (mktime): Return time_t. + * lib/posix/isatty.c [SYSTEM_LIBC]: Do not (re)declare termios. + * lib/stub/mktime.c (mktime): Return time_t. + * lib/tests/scaffold/41-ternary.c (main): Remove assumption that + locals are initialized. + * lib/tests/scaffold/70-stdarg.c: Cater for SYSTEM_LIBC. + * lib/tests/setjmp/80-setjmp.c: Declare jmp buf. + * lib/*/*.c: Add missing mes/lib.h, errno.h includes. + +2019-06-23 Jan Nieuwenhuizen + + porting: Add x86_64 scaffold: exit and write in assembly. + * lib/x86_64-mes-gcc/exit-42.S: New file. + * lib/x86_64-mes-gcc/hello-mes.S: New file. + * lib/x86_64-mes/elf64-0exit-42.hex2: New file. + * lib/x86_64-mes/elf64-0hello-mes.hex2: New file. + * lib/x86_64-mes/elf64-body-exit-42.hex2: Rewrite.. + * lib/x86_64-mes/elf64-body-hello-mes.hex2: + * lib/x86_64-mes/elf64-0header.hex2: Fix copyright header. + * lib/x86_64-mes/elf64-header.hex2: Likewise. + * lib/x86_64-mes/elf-0footer.hex2: Remove. + +2019-06-13 Jan Nieuwenhuizen + + porting: Add x86 scaffold: exit and write in assembly. + * lib/x86-mes-gcc/exit-42.S: New file. + * lib/x86-mes-gcc/hello-mes.S: New file. + * lib/x86-mes/elf32-0exit-42.hex2: New file. + * lib/x86-mes/elf32-0hello-mes.hex2: New file. + * lib/x86-mes/elf32-body-hello-mes.hex2: New file. + * lib/x86-mes/elf32-body-exit-42.hex2: Rewrite. + * lib/x86-mes/elf32-header.hex2: Fix copyright header. + * lib/x86-mes/elf32-0header.hex2: Likewise. + * lib/x86-mes/elf-0footer.hex2: Remove. + * build-aux/build-scaffold.sh: Build them. + * .dir-locals.el (asm-mode): Allow TABs. + * .gitignore: Reserve .S assembly sources, i.e. manual written + assembly. Update build system. + * module/mescc/mescc.scm: Update. + * build-aux/build-lib.sh: Update. + * scripts/ar.in: Update. + +2019-06-10 Jan Nieuwenhuizen + + make check: Do not re-check unless recheck=true. + * build-aux/check-mescc.sh (recheck): New variable. + * build-aux/check.sh.in (recheck): New variable. + * build-aux/test-suite.sh (TEST_LOGS): Use it. + +2019-05-22 Jan Nieuwenhuizen + + build: Cater for ARM. + * configure: Cater for ARM. + * configure.sh: Likewise + * build-aux/GNUmakefile.in: Likewise. + * build-aux/bootstrap.sh.in: Likewise. + * module/mescc.scm (parse-opts): Likewise. + * src/mes.c (mes_environment): Likewise. + * build-aux/build.sh.in: Likewise. + * build-aux/config.sh Likewise. + * build-aux/install.sh.in: Likewise. + * module/mes/guile.scm: Likewise. + * scripts/mescc.scm.in: Likewise. + * module/mescc/mescc.scm (arch-get): New function. + (arch-get-info): New function. + (arch-get-define): New function. + (arch-get-m1-options): New function. + (arch-get-Architecture): New function. + (mescc:preprocess c->info, E->info, M1->hex2, hex2->elf, + M1->blood-elf, arch-find): Use them. + +2019-06-10 Jan Nieuwenhuizen + + mescc: Drop $@-workaround. + * scripts/mescc.in: Drop $@-workaround. + +2019-06-08 Jan Nieuwenhuizen + + build: Simplify. + core: Make mes src/ c files separate compilation units. + + * include/mes/constants.h: New file. + * include/mes/macros.h: New file. + * include/mes/mes.h: New file. + * src/gc.c: Update. + * src/hash.c: Update. + * src/lib.c: Update. + * src/math.c: Update. + * src/mes.c: Update. + * src/module.c: Update. + * src/posix.c: Update. + * src/reader.c: Update. + * src/string.c: Update. + * src/struct.c: Update. + * src/vector.c: Update. + + mes: Update datadir. + + * src/mes.c (g_datadir): New global. + (open_boot): Rename from read_boot. + (read_boot): New function. + * mes/module/mes/boot-0.scm: Move from boot-0.scm.in + * configure: Update. + * configure.sh: Update. + + mescc: Create libraries from separate files. + + * .gitignore: Update. + * build-aux/bootstrap-mes.sh: Remove. + * build-aux/bootstrap.sh.in: Remove. + * build-aux/build-guile.sh: Update. + * build-aux/build-mes.sh: Update. + * build-aux/build-scaffold.sh: New file. + * build-aux/build.sh.in: Update. + * build-aux/cc.sh: Update. + * build-aux/check-tcc.sh: Remove. + * build-aux/config.sh.in: New file. + * build-aux/config.sh: Remove. + * build-aux/install.sh.in: Update. + * build-aux/test-boot.sh: New file. + * build-aux/test-c.sh: New file. + * build-aux/test-driver: New file. + * build-aux/test-suite.sh: New file. + * build-aux/trace.sh: Update. + * build-aux/uninstall.sh.in: Update. + * configure: Update. + * configure.sh: Update. + * lib/linux/x86-mes-mescc/crt1.c: Move from lib/linux/x86-mes. + * lib/linux/x86-mes-mescc/mini.c: Likewise. + * lib/linux/x86_64-mes-mescc/crt1.c: Move from lib/linux/x86_64-mes. + * lib/linux/x86_64-mes-mescc/mini.c: Likewise. + * lib/linux/x86-mes-gcc/syscall.c: Rename from mes.c. + * lib/linux/x86-mes-mescc/syscall.c: Likewise. + * lib/linux/x86_64-mes-gcc/syscall.c: Likewise. + * lib/linux/x86_64-mes-mescc/syscall.c: Likewise. + * lib/mes/mes_open.c: Include config.h. + * lib/tests/stdio/70-printf-hello.c: Likewise. + * lib/tests/stdio/70-printf-simple.c: Likewise. + * scaffold/gc-test.sh: New file. + * simple.sh: Update. + +2019-06-08 Jan Nieuwenhuizen + + test: Move scaffold/tests into lib. + * lib/tests/scaffold: Move from scaffold/tests. + * scaffold/tests: Remove. + * build-aux/check-mescc.sh: Update. + +2019-05-10 Danny Milosavljevic + + build: Make "GUILEC" compilation status output more verbose (print full path). + * build-aux/build-guile.sh: Make "GUILEC" compilation status output more + verbose (print full path). + +2019-05-29 Jan Nieuwenhuizen + + build: Fix --disable-silent-rules. Thanks ng0! + * configure (main): Substitute V as string value. + * build-aux/trace.sh: Typo. Fixes using V=0. + * build-aux/config.status.in (V): New substitute. + * build-aux/config.make.in (V): New substiute. + + mescc: Use a.out as default executable name. + * module/mescc/mescc.scm (hex2->elf): Use a.out as default executable + name. + + mescc: Robustify against empty `V' in environment. + * module/mescc.scm: Robustify against empty V in environment. + +2019-05-28 Jan Nieuwenhuizen + + mescc: Fix -dumpmachine to respect -m bits selection. + * module/mescc.scm (parse-opts): Fix -dumpmachine to respect -m bits + selection. Also display kernel. + +2019-05-29 Jan Nieuwenhuizen + + mescc: Support single-dash options on Mes too. + * scripts/mescc.in[MES]: Add -- as separator, fixes using single-dash + options on Mes too. + + mescc: Ignore -fnobuiltin, -nostdinc for GCC compatibility. + * module/mescc.scm (parse-opts): Add -fnobuiltin, -nostdinc. + (mescc:main): Ignore them. + +2019-05-27 Jan Nieuwenhuizen + + test: Resurrect running boot tests on Guile. + * module/mes/guile.scm (keyword->string): New function. + * scaffold/boot/43-or.scm (foo): Add quoting. + * scaffold/boot/45-pass-if.scm (pass-if): Likewise. + * scaffold/boot/46-report.scm (pass-if): Likewise. + * scaffold/boot/47-pass-if-eq.scm (pass-if): Likewise. + * scaffold/boot/48-let.scm (map): Rename from map1. + * scaffold/boot/60-let-syntax-expanded.scm: Some work. + +2019-05-26 Jan Nieuwenhuizen + + mescc: Mes C Library: Fix compile warnings. + * lib/stdio/fputc.c (fputc): Oops, stream is a long. + * lib/stdlib/malloc.c (malloc): Cast to char *. FIXME + * lib/string/memchr.c (memchr): Cast to void *. + * lib/string/memcmp.c (memcmp): Add const cast. + + mescc: Mes C Library: Fixes for x86_64 crt1.c + * lib/linux/x86_64-mes/crt1.c (_start): Write only 4 bytes to int + variables __stdin, __stdout, __stderr. + +2019-05-29 Jan Nieuwenhuizen + + test: Move srfi-1 for-each and map tests to tests/srfi-1.test. + This fixes: `make check MES=guile'. + + * tests/srfi-1.test ("map 1,2", "map 2,1", "for-each 1,2", + for-each 2,1"): Move from scm.test. + * tests/scm.test ("map 1,2", "map 2,1", "for-each 1,2", + for-each 2,1"): Remove. + +2019-05-29 Jan Nieuwenhuizen + + mescc: Mes C Library: Use SYSTEM_LIBC [WAS: WITH_GLIBC]. + Run: sed -i 's,WITH_GLIBC,SYSTEM_LIBC,g' $(git grep -l WITH_GLIBC) + + * build-aux/config.sh: Update. + * include/alloca.h: Likewise. + * include/ar.h: Likewise. + * include/argz.h: Likewise. + * include/assert.h: Likewise. + * include/ctype.h: Likewise. + * include/dirent.h: Likewise. + * include/dirstream.h: Likewise. + * include/dlfcn.h: Likewise. + * include/endian.h: Likewise. + * include/errno.h: Likewise. + * include/fcntl.h: Likewise. + * include/features.h: Likewise. + * include/float.h: Likewise. + * include/getopt.h: Likewise. + * include/inttypes.h: Likewise. + * include/libgen.h: Likewise. + * include/limits.h: Likewise. + * include/linux/x86_64/syscall.h: Likewise. + * include/locale.h: Likewise. + * include/math.h: Likewise. + * include/memory.h: Likewise. + * include/mes/lib-mini.h: Likewise. + * include/pwd.h: Likewise. + * include/setjmp.h: Likewise. + * include/signal.h: Likewise. + * include/stdarg.h: Likewise. + * include/stdbool.h: Likewise. + * include/stddef.h: Likewise. + * include/stdint.h: Likewise. + * include/stdio.h: Likewise. + * include/stdlib.h: Likewise. + * include/stdnoreturn.h: Likewise. + * include/string.h: Likewise. + * include/strings.h: Likewise. + * include/sys/cdefs.h: Likewise. + * include/sys/dir.h: Likewise. + * include/sys/file.h: Likewise. + * include/sys/ioctl.h: Likewise. + * include/sys/mman.h: Likewise. + * include/sys/param.h: Likewise. + * include/sys/resource.h: Likewise. + * include/sys/select.h: Likewise. + * include/sys/stat.h: Likewise. + * include/sys/time.h: Likewise. + * include/sys/timeb.h: Likewise. + * include/sys/times.h: Likewise. + * include/sys/types.h: Likewise. + * include/sys/ucontext.h: Likewise. + * include/sys/user.h: Likewise. + * include/sys/wait.h: Likewise. + * include/termio.h: Likewise. + * include/time.h: Likewise. + * include/unistd.h: Likewise. + * lib/libmes.c: Likewise. + * lib/tests/stdio/70-printf-hello.c: Likewise. + * lib/tests/stdio/70-printf-simple.c: Likewise. + * lib/tests/stdio/80-sscanf.c: Likewise. + * lib/tests/stdlib/50-malloc.c: Likewise. + * module/mescc/preprocess.scm: Likewise. + * scaffold/cons-mes.c: Likewise. + * scaffold/lib/stdlib/malloc.c: Likewise. + * scaffold/micro-mes.c: Likewise. + * scaffold/tests/61-array.c: Likewise. + * scaffold/tiny-mes.c: Likewise. + * simple.sh: Likewise. + * src/mes.c: Likewise. + +2019-05-27 Jan Nieuwenhuizen + + mes: Bugfix for search-path. Fixes running MesCC on Guile. + * module/mescc/mescc.scm (arch-find): Also look in cwd. + * mes/module/mes/posix.mes (search-path): Do not look in cwd. + +2019-05-25 Jan Nieuwenhuizen + + mescc: Use named --architecture switch for upcoming mescc-tools 0.6. + * module/mescc/mescc.scm (M1->hex2): Use named --architecture switch for + upcoming mescc-tools 0.6. + (hex2->elf): Likewise. + * build-aux/bootstrap-mes.sh: Likewise. + * build-aux/bootstrap.sh.in: Likewise. + * build-aux/config.sh: Likewise. + +2019-05-27 Jan Nieuwenhuizen + + mes: Identify 64-bit bug when compiled with MesCC. + * src/math.c (divide): Add divide-by-zero error. + (modulo): Likewise. + * module/mes/guile.scm (%compiler): New variable. + * module/mescc/M1.scm (mesc?): New variable. + (hex2:immediate8): Use it to avoid divide-by-zero error. + * HACKING (Bugs): Add it. + + mes: Make debug levels 4 and 5 usable. + * HACKING: Update debug policy. + * lib/linux/read.c (read): Print read in level 5. + * src/mes.c (eval_apply): Print module in level 6. + (main): Likewise. Remove redundant module printing. + * src/gc.c (gc): Print symbols in level 6. + +2019-05-18 Jan Nieuwenhuizen + + mes: Run build-aux/indent.sh. + * src/mes.c: Re-indent. + * src: Likewise. + * include: Likewise. + * lib: Likewise. + * scaffold: Likewise. + +2019-05-12 Jan Nieuwenhuizen + + mes: Grand indent: prepare. + * build-aux/indent.sh: New file. + * include/mes/builtins.h: Move from src/builtins.h. + * include/fcntl.h: Use // *INDENT-OFF* to prevent indent breakage. + * include/locale.h: Likewise. + * include/signal.h: Likewise. + * include/sys/stat.h: Likewise. + * include/sys/user.h: Likewise. + * lib/linux/x86-mes-gcc/crt0.c: Likewise. + * lib/linux/x86-mes-gcc/crt1.c: Likewise. + * lib/linux/x86-mes-gcc/mes.c: Likewise. + * lib/linux/x86-mes-gcc/mini.c: Likewise. + * lib/linux/x86_64-mes-gcc/crt0.c: Likewise. + * lib/linux/x86_64-mes-gcc/crt1.c: Likewise. + * lib/linux/x86_64-mes-gcc/mes.c: Likewise. + * lib/linux/x86_64-mes-gcc/mini.c: Likewise. + * lib/x86_64-mes-gcc/setjmp.c: Likewise. + * src/mes.c: Likewise. + * src/reader.c: Likewise. + +2019-05-15 Jan (janneke) Nieuwenhuizen + + mes: Support -c EXPR. + * mes/module/mes/boot-0.scm.in: Support -c EXPR. + + mes: Support optional port on read. + * mes/module/mes/scm.mes (read): Support optional port on read. + + build: Fix mescc installation on Debian. + * build-aux/pre-inst-env.in: Set bindir. + * scripts/mescc.in: Fix configure/prefix issues. + * mes/module/mes/boot-01.scm (integer->char): Remove. + (newline): Use "\n". + (%moduledir): Use string-append. + * mes/module/mes/boot-02.scm: Likewise. + * mes/module/mes/boot-0.scm: Likewise. + + build: Debian make check and install fixes. + * configure (main): Oops, typo: mandir uses --infodir. + * build-aux/check.sh.in: Run check-mescc.sh with bash. + * build-aux/config.sh (CFLAGS, CPPFLAGS, HEX2FLAGS, LDFLAGS, M1FLAGS): + unset. + * build-aux/install.sh.in: Use BASHOPTS to check for bash; on Debian + dash is used and has $SHELL=/bin/bash. Use ${DESTDIR}@... + +2019-05-14 Jan Nieuwenhuizen + + mes: Rename strings.c. + * src/string.c: Rename from src/strings.c. + * src/mes.c + * build-aux/snarf.sh: Update. + +2019-05-12 Jan Nieuwenhuizen + + mescc: Mes C Library: Use mes_open to avoid open trickery. + * include/mes/lib.h (mes_open): Declare. + * lib/libmes.c[WITH_GLIBC]: Remove open undefine. + (mes_open)[!WITH_GLIBC]: New function. + * src/mes.c (open_boot): Use mes_open. + * src/posix.c (open_input_file): Likewise. + (open_output_file): Likewise. + + mescc: Mes C Library: Remove dead code. + * lib/glibc.c: Remove. + * lib/abtol.c: Remove. + + mescc: Mes C Library: Explode linux/tcc.c. + * lib/linux/close.c: New file. + * lib/linux/lseek.c: New file. + * lib/linux/rmdir.c: New file. + * lib/linux/stat.c: New file. + * lib/linux/tcc.c: Include them. + (close, lseek, rmdir, stat): Remove. + + mescc: Mes C Library: Explode linux/libc.c. + * lib/linux/access.c: New file. + * lib/linux/brk.c: New file. + * lib/linux/chmod.c: New file. + * lib/linux/dup.c: New file. + * lib/linux/dup2.c: New file. + * lib/linux/execve.c: New file. + * lib/linux/fork.c: New file. + * lib/linux/fsync.c: New file. + * lib/linux/getcwd.c: New file. + * lib/linux/ioctl.c: New file. + * lib/linux/libc.c: New file. + * lib/linux/open.c: New file. + * lib/linux/read.c: New file. + * lib/linux/unlink.c: New file. + * lib/linux/waitpid.c: New file. + * lib/linux/libc.c: Include them. + (access, brk, chmod, dup, dup2, execve, fork, fsync, getcwd, ioctl, + libc, open, read, unlink, waitpid): Remove. + +2019-05-11 Jan Nieuwenhuizen + + mescc: Mes C Library: Explode linux/gnu.c. + * lib/linux/chdir.c: New file. + * lib/linux/fcntl.c: New file. + * lib/linux/fstat.c: New file. + * lib/linux/getdents.c: New file. + * lib/linux/getegid.c: New file. + * lib/linux/geteuid.c: New file. + * lib/linux/getgid.c: New file. + * lib/linux/getpid.c: New file. + * lib/linux/getppid.c: New file. + * lib/linux/getrusage.c: New file. + * lib/linux/getuid.c: New file. + * lib/linux/kill.c: New file. + * lib/linux/link.c: New file. + * lib/linux/lstat.c: New file. + * lib/linux/mkdir.c: New file. + * lib/linux/nanosleep.c: New file. + * lib/linux/pipe.c: New file. + * lib/linux/rename.c: New file. + * lib/linux/setgid.c: New file. + * lib/linux/settimer.c: New file. + * lib/linux/setuid.c: New file. + * lib/linux/signal.c: New file. + * lib/linux/sigprogmask.c: New file. + * lib/linux/gnu.c: Include them. + (chdir, fcntl, fstat, getdents, getegid, geteuid, getgid, getpid, + getppid, getrusage, getuid, kill, link, lstat, mkdir, munmap, + nanosleep, pipe, rename, setgid, settimer, setuid, signal, + sigprogmask): Remove. + +2019-05-09 Jan Nieuwenhuizen + + mescc: Mes C Library: Explode libc-mini.c. + * lib/posix/write.c: New file. + * lib/linux/libc-mini.c: Include it. + (write): Remove. + * lib/tests/mes/30-oputs.c: Remove dead code. + +2019-05-07 Jan Nieuwenhuizen + + mescc: Mes C Library: Cleanup includes. + * include/mes/lib-mini.h: Move from include/libmes-mini.h. Update users. + * include/mes/lib.h: Move from include/libmes.h. Update users. + +2019-05-05 Jan Nieuwenhuizen + + mescc: Support -nodefaultlibs, -nostartfiles, -nostdlib. + * module/mescc.scm (parse-opts): Parse -nodefaultlibs, -nostartfiles, -nostdlib. + * module/mescc/mescc.scm (mescc:link): Handle -nodefaultlibs, -nostdlib. + (hex2->elf): Handle -nostartfiles, -nostdlib. + +2019-05-03 Jan Nieuwenhuizen + + build: Do not install test binaries. + * build-aux/install.sh.in: Do not install test binaries. + +2019-05-05 Jan Nieuwenhuizen + + mes: m2: Move force-output to Scheme. + * mes/module/mes/posix.mes (force-output): New function. + * src/posix.c (force_output): Remove. + * src/mes.c (mes_builtins): Remove adding of force-output. + +2019-03-23 Jan Nieuwenhuizen + + build: M2-Planet first-aid, simplest build script possible. + * simple.sh: New file. + +2019-03-27 Jan Nieuwenhuizen + + .dir-locals.el: Assert default GNU settings. + * .dir-locals.el: Assert default GNU settings. + + Fix typo in stage0 copyright headers. + * lib/x86-mes/elf-0footer.hex2: Fix typo. + * lib/x86-mes/elf32-0header.hex2: Fix typo. + * lib/x86-mes/elf32-body-exit-42.hex2: Fix typo. + * lib/x86-mes/elf32-footer-single-main.hex2: Fix typo. + * lib/x86-mes/elf32-header.hex2: Fix typo. + * lib/x86_64-mes/elf-0footer.hex2: Fix typo. + * lib/x86_64-mes/elf64-0header.hex2: Fix typo. + * lib/x86_64-mes/elf64-body-exit-42.hex2: Fix typo. + * lib/x86_64-mes/elf64-footer-single-main.hex2: Fix typo. + * lib/x86_64-mes/elf64-header.hex2: Fix typo. + +2019-03-16 Jan Nieuwenhuizen + + mescc: Mes C Library: Fix ungetc. + * include/sys/resource.h (OPEN_MAX, RLIMIT_NOFILE): New macro. + * lib/libc.c: Add memset.c include. + * lib/libc+tcc.c: Remove memset.c include. + * lib/linux/tcc.c (close): + * lib/mes/fdgetc.c (__ungetc_buf): New global. + (_ungetc_pos, _ungetc_fd, _ungetc_buf): Remove. Update users. + * scaffold/tests/65-read.c: Update. + +2019-03-23 Jan Nieuwenhuizen + + build: Replace POSIX, posix_p by WITH_GLIBC, wip_glibc_p. + * build-aux/build-mes.sh: Replace POSIX, posix_p by WITH_GLIBC, wip_glibc_p. + * build-aux/build.sh.in: Likewise. + * build-aux/cc.sh (link): Likewise. + * build-aux/config.make.in (with_glibc_p): Likewise. + * build-aux/config.sh (libc): Likewise. + (CPPFLAGS): Likewise. + * build-aux/config.status.in (with_glibc_p): Likewise. + * build-aux/test.sh: Likewise. + * configure (main): Likewise. + * configure.sh (subst): Likewise. + (mes_arch): Likewise. + * include/libmes.h: Likewise. + * include/linux/x86_64/syscall.h: Likewise. + * lib/libmes.c: Likewise. + * lib/tests/stdio/70-printf-hello.c (main): Likewise. + * lib/tests/stdio/70-printf-simple.c (main): Likewise. + * lib/tests/stdio/80-sscanf.c (main): Likewise. + * lib/tests/stdlib/50-malloc.c: Likewise. + * module/mescc/preprocess.scm (c99-input->full-ast): Likewise. + * scaffold/cons-mes.c: Likewise. + * scaffold/lib/stdlib/malloc.c: Likewise. + * scaffold/micro-mes.c: Likewise. + * scaffold/tests/61-array.c (getenv): Likewise. + * scaffold/tiny-mes.c: Likewise. + * src/mes.c: Likewise. + +2019-03-03 Jan Nieuwenhuizen + + mescc: Mes C Library: Fix compile warnings. + * include/libmes.h (dtoab, itoa, ltoa, ntoab, ultoa, utoa): Return + char* (WAS: char const*). + * lib/*/*c: Update, add missing includes. + +2019-03-02 Jan Nieuwenhuizen + + mescc: Mes C Library: Fix isatty. + * lib/posix/isatty.c (isatty): Test ioctl == 0. + * mes/module/mes/boot-0.scm.in: Update: no tty?: read from stdin. + + test: 50-getenv: Test PATH, allow to fail. + * lib/tests/posix/50-getenv.c (main): Test PATH. + * build-aux/check-mescc.sh (broken): Add 50-getenv. + + mes: Support map and for-each with lists of unequal length. + * mes/module/mes/base.mes (map): Support lists of unequal length. + * mes/module/mes/scm.mes (for-each): Likewise. + * module/mescc/compile.scm (expr->register): Fix compile warning. + * tests/scm.test ("map 1,2", "map 2,1", "for-each 1,2", "for-each + 2,1": Test it. + + mescc: Mes C Library: Use __ as global internal prefix. + * include/libmes-mini.h (g_stdin, g_stdout, g_stderr): Rename to + __stdin, __stdout, __stderr. Update users. + +2019-02-28 Jan Nieuwenhuizen + + mescc: ctype.h: Add missing prototypes. + * include/ctype.h: Add missing prototypes. + + mescc: Mes C Library: Bugfix for tcc-compiled exit assembly. + * lib/linux/x86-mes-gcc/mini.c (_exit): Add clobbered registers %eax, + %ebx. Fixes always exit 1. + +2019-02-25 Jan Nieuwenhuizen + + test: Remove special characters from files. + * scaffold/tests/06-call-not-1.c: Rename from 06-call-!1.c. + * scaffold/tests/06-not-call-1.c: Rename from 06-!call-1.c. + * scaffold/tests/12-if-eq.c: Rename from 12-if-==.c. + * scaffold/tests/13-if-neq.c: Rename from 13-if-!=.c. + * scaffold/tests/15-if-not-f.c: Rename from 15-if-!f.c. + * scaffold/tests/21-char-array-simple.c: Rename from 21-char[]-simple.c. + * scaffold/tests/21-char-array.c: Rename from 21-char[].c. + * scaffold/tests/22-while-char-array.c: Rename from 22-while-char[].c. + * scaffold/tests/41-ternary.c: Rename from 41-?.c. + * scaffold/tests/7u-call-ternary.c: Rename from 7u-call-?.c. + * scaffold/tests/7u-ternary-expression.c: Rename from 7u-?-expression.c. + * build-aux/check-mescc.sh (tests): Update. + + build: Support building with Gash. + * build-aux/check-mes.sh: Replace unspported $((..)) by $(expr ...). + * build-aux/check-mescc.sh: Likewise. + * build-aux/check-tcc.sh: Likewise. + +2019-02-18 Jan Nieuwenhuizen + + build: Configure: remove temp files. + * configure (gulp-pipe*): Remove .error. + (check-header-c): Remove .config.c. + (check-compile-c): Likewise. + (check-link-c): Likewise. + + build: Remove mini-mes. + * scaffold/mini-mes.c: Remove. + * build-aux/build-mes.sh: Remove commented build instructions. + * .gitignore: Remove pattern. + +2019-02-24 Jan Nieuwenhuizen + + mescc: Mes C Library: Initialize streams in crt1. + * lib/linux/x86-mes-gcc/crt1.c: Initialize streams. + * lib/linux/x86-mes/crt1.c: Likewise. + * lib/linux/x86_64-mes-gcc/crt1.c: Likewise. + * lib/linux/x86_64-mes/crt1.c: Likewise. + * src/mes.c (main): Remove initialization of streams. + + mescc: Mes C Library: Populate with function tests from scaffold. + * .gitignore: Update. + * build-aux/bootstrap.sh.in: Update. + * build-aux/build-mes.sh: Update. + * build-aux/check-mescc.sh: Update. + * lib/tests/assert/50-assert.c: Move from scaffold/tests/50-assert.c. + * lib/tests/dirent/90-readdir.c: Move from scaffold/tests/99-readdir.c. + * lib/tests/dirent/readdir.dir: Move from scaffold/tests/readdir.dir. + * lib/tests/io/90-stat.c: Move from scaffold/tests/92-stat.c. + * lib/tests/mes/30-oputs.c: Move from scaffold/tests/31-oputs.c. + * lib/tests/mes/50-itoa.c: Move from scaffold/tests/51-itoa.c. + * lib/tests/posix/90-unsetenv.c: Move from scaffold/tests/94-unsetenv.c. + * lib/tests/setjmp/80-setjmp.c: Move from scaffold/tests/80-setjmp.c. + * lib/tests/signal/90-signal.c: Move from scaffold/tests/95-signal.c. + * lib/tests/stdio/70-printf-hello.c: Move from scaffold/tests/70-printf-hello.c. + * lib/tests/stdio/70-printf-simple.c: Move from scaffold/tests/70-printf-simple.c. + * lib/tests/stdio/70-printf.c: Move from scaffold/tests/70-printf.c. + * lib/tests/stdio/80-sscanf.c: Move from scaffold/tests/87-sscanf.c. + * lib/tests/stdio/90-fopen-append.c: Move from scaffold/tests/98-fopen.c. + * lib/tests/stdio/90-fopen.c: Move from scaffold/tests/97-fopen.c. + * lib/tests/stdio/90-fread-fwrite.c: Move from scaffold/tests/93-fread-fwrite.c. + * lib/tests/stdio/90-fseek.c: Move from scaffold/tests/91-fseek.c. + * lib/tests/stdlib/50-getenv.c: Move from lib/tests/stdlib/getenv.c. + * lib/tests/stdlib/50-malloc.c: Move from lib/tests/stdlib/malloc.c. + * lib/tests/stdlib/70-strtoull.c: Move from scaffold/tests/7j-strtoull.c. + * lib/tests/stdlib/80-qsort-dupes.c: Move from scaffold/tests/81-qsort-dupes.c. + * lib/tests/stdlib/80-qsort.c: Move from scaffold/tests/81-qsort.c. + * lib/tests/stdlib/90-strtol.c: Move from scaffold/tests/96-strto.c. + * lib/tests/string/30-strlen.c: Move from scaffold/tests/30-strlen.c. + * lib/tests/string/50-strcmp.c: Move from scaffold/tests/51-strcmp.c. + * lib/tests/string/50-strcpy.c: Move from scaffold/tests/53-strcpy.c. + * lib/tests/string/50-strncmp.c: Move from scaffold/tests/51-strncmp.c. + * lib/tests/string/70-strchr.c: Move from scaffold/tests/70-strchr.c. + * lib/tests/string/80-strncpy.c: Move from scaffold/tests/86-strncpy.c. + * lib/tests/string/80-strrchr.c: Move from scaffold/tests/88-strrchr.c. + * lib/tests/string/90-snprintf.c: Move from scaffold/tests/9a-snprintf.c. + * lib/tests/string/90-strpbrk.c: Move from scaffold/tests/90-strpbrk.c. + * lib/tests/string/90-strspn.c: Move from scaffold/tests/90-strspn.c. + +2019-02-24 Jan Nieuwenhuizen + + mescc: Mes C Library: Start test suite. + TODO: move strict libc tests from scaffold/test/* here. + + * lib/tests/stdlib/getenv.c: New file. + * lib/tests/stdlib/malloc.c: Move from scaffold. + * build-aux/bootstrap.sh.in: Built them. + * build-aux/build-mes.sh: Likewise. + +2019-02-24 Jan Nieuwenhuizen + + mes: Remove stray debugging newline output. + * mes/module/mes/guile.mes (open-input-file): Move debugging newline + into debug clause. + + mescc: Mes C Library: Fix brk return type compare. + * lib/stdlib/malloc.c (malloc): Fix brk return type compare. + + core: Rename load_env to read_boot. + * src/mes.c (read_boot): Rename from load_env; Update users. + (open_boot): Rename from load_boot; Update users. + +2019-02-10 Jan Nieuwenhuizen + + core: Initialize g_buf dynamically, add MES_STRING_MAX override. + * src/mes.c (g_buf, MAX_STRING): Move from strings.c. + (gc_init_cells): Initialize g_buf dynamically. + (main): Add environment override MES_MAX_STRING for MAX_STRING. + * doc/mes.texi (Environment Variables): Document it. + +2019-02-03 Jan Nieuwenhuizen + + mes-snarf: rewrite for development-time snarfing + * build-aux/mes-snarf.scm (%gcc?): Remove. + (symbol->header): Produce code for src/builtins.h. + (symbol->source, symbol->names, function->environment): Remove. + (snarf-symbols): Rewrite, snarf from init_symbol (...). + (function->source): Produce code to be manually put into + (main): Remove --mes option. + +2019-02-15 Jan Nieuwenhuizen + + core: Resurrect POSIX build. Thanks, gio! + * lib/libmes.c[POSIX]: Define and initialize g_stdin, g_stdout and + g_stderr that were moved to crt1 for non-POSIX builds. + * src/mes.c[POSIX]: Remove struct-initialisation exceptions. + +2019-01-04 Jan Nieuwenhuizen + + core: Remove struct definitions for builtins, drop snarfing. + After making a change to the list of builtin functions, run + + cat src/*.i + + and move the into + + src/mes.c:mes_builtins () + + and, or also after changing the list of fixed symbols in src/mes.c:mes_symbols (), do + + cat src/*.h > src/builtins.h + + * build-aux/build.sh.in: Remove snarfing. + * build-aux/bootstrap.sh.in: Likewise. + * mes/module/mes/display.mes (display): + * mes/module/mes/type-0.mes (cell:type-alist): Remove . + (function?, builtin?): Remove. + * src/builtins.h: New file. + * src/mes.c (TFUNCTION): Remove. + (struct function): Remove. + (apply_builtin): Rewrite from call. + (mes_builtins): Rewrite. + (init_builtin, make_builtin_type, make_builtin, builtin_name, + builtin_arity, builtin, builtin_p, builtin_printer): New function. + +2019-01-04 Jan Nieuwenhuizen + + core: Remove struct definitions for cells, drop snarfing for symbols. + * src/mes.c (init_symbol): New function. + (mes_symbols): Use it. + (scm_nil, ... scm_test): Remove. + +2018-12-27 Jan Nieuwenhuizen + + mes: Add take-while. + * mes/module/srfi/srfi-1.mes (take-while): New function. + +2018-12-26 Jan Nieuwenhuizen + + mescc: Enhance POSIX command-line support, e.g. -DFOO=1. + * module/mescc.scm (unclump-single): New function. + (main): Use it to support -DFOO=bar, and equivalent. + +2018-12-27 Jan Nieuwenhuizen + + build: Support running out-of-tree. + * build-aux/pre-inst-env.in (MES_PREFIX): Use absolute name. + + core: Remove string debugging. + * src/strings.c (make_bytes, make_string, string_equal_p, + symbol_to_string, symbol_to_keyword, make_symbol): Remove string + debugging. + + core: Remove --dump, --load. + * mes/module/mes/boot-0.scm.in (tty?): Remove --dump, --load. + * src/mes.c (bload_env): Remove. + * src/reader.c (dump): Remove. + +2018-12-16 Jan Nieuwenhuizen + + doc: Post-release update. + * doc/announce/ANNOUNCE-0.19: Update. + + Release 0.19. + * configure (VERSION): Update to 0.19. + (main): Likewise. + * configure.sh (VERSION): Likewise. + * guix/git/mes.scm (mes, mes.git): Likewise. + +2018-10-20 Jan Nieuwenhuizen + + doc: Release update. + * AUTHORS: Update. + * HACKING: Update. + * NEWS: Update. + * doc/mes.guix: Update. + * scripts/mescc.in: Update. + * mes/module/mes/boot-0.scm.in: Update. + * doc/announce/ANNOUNCE-0.19: New file. + +2018-12-15 Jan Nieuwenhuizen + + mes: assq-ref, assoc-ref: Support alist == #f. + * mes/module/mes/scm.mes (assq-ref): Support alist == #f. + (assoc-ref): Likewise. + + core: Bump MAX_STRING to 524288 + * src/strings.c (MAX_STRING): Bump to 524288. + (assert_max_string): New function. + (list_to_cstring, string_append, read_string): Use it. + * src/reader.c (reader_read_string): Use it. + +2018-12-14 Jan Nieuwenhuizen + + mescc: Support Bash: Add getppid. + * lib/linux/gnu.c (getppid): New function. + * include/linux/x86/syscall.h (SYS_getppid): New macro. + * include/linux/x86_64/syscall.h (SYS_getppid): New macro. + + mescc: Support bash: Add sigdelset stub. + * lib/stub/sigdelset.c (sigdelset): New stub. + * lib/libc+gnu.c: Include it. + +2018-12-07 Jan Nieuwenhuizen + + mescc: getcwd: Support getcwd (0, 0) GNU extension. + * lib/linux/libc.c (_getcwd): Rename from getcwd. + (_getcwd): New function. Support getcwd (0, 0) GNU extension. + +2018-12-02 Jan Nieuwenhuizen + + mescc: Replace \r in comments. + * module/mescc/compile.scm (ast->comment): Replace \r in comments. + +2018-11-24 Jan Nieuwenhuizen + + build: Support building with Gash. + * build-aux/install.sh: Replace variables with substitution. + * build-aux/bootstrap.sh: New file. + * configure: Substitute it. + * configure.sh: Likewise. Be friendly to Gash. + * .gitignore: Ignore it. + +2018-11-25 Jan Nieuwenhuizen + + mescc: Run without shell. + * mes/module/mescc.mes: New file. + * module/mescc.scm: Include it. + * scripts/mescc.scm.in: New file. + * scripts/mescc.in: Use it; Make pure shell. + * configure: Substitute it. + * configure.sh: Substitute it. + * build-aux/install.sh.in: Install it. + +2018-11-15 Jan Nieuwenhuizen + + core: Add string-ref. + * src/strings.c (string_ref): New function. + * mes/module/mes/scm.mes (string-ref): Remove. + + core: Add string-length. + * src/strings.c (string_length): New function. + * mes/module/mes/scm.mes (string-length): Remove. + + core: Add string-append. + * src/strings.c (string_append): New function. + * mes/module/mes/boot-0.scm.in (string-append): Remove. + * mes/module/mes/boot-03.scm (string-append): Remove. + * scaffold/boot/50-make-string.scm (string-append): Remove. + * scaffold/boot/50-string-append.scm (string-append): Remove. + * scaffold/boot/50-string-join.scm (string-append): Remove. + * scaffold/boot/51-module.scm (string-append): Remove. + * scaffold/boot/52-define-module.scm (string-append): Remove. + * tests/macro.test (string-append): Remove. + * scaffold/boot/17-string-append.scm: Move from 50-string-append.scm. + +2018-11-11 Jan Nieuwenhuizen + + core: String as array of bytes. + * src/strings.c: New file. + * src/mes.c: Use it. Update users. + +2018-11-25 Jan Nieuwenhuizen + + mescc: Move mecmp to libc. + * lib/libc.c: Include mecmp.c. + * lib/libc+tcc.c: Remove mecmp.c include. + +2018-11-15 Jan Nieuwenhuizen + + mescc: Move memchr to libc. + * lib/libc.c: Include memchr.c. + + test: Use write instead of display. + * module/mes/test.scm (seq?, sequal?, seq2?, sless?, sequal2?): Use + write for expected, actual. + +2018-11-14 Jan Nieuwenhuizen + + core: struct_set_: Oops typo. + * src/struct.c (struct_set_x_): Oops, remove indirection. + + mes: Remove copy of make-string. + * mes/module/mes/guile.mes (make-string): Remove copy. + + mescc: Compile fixes. + * include/libmes-mini.h[WITH_GLIBC]: Do not declare strlen, write, types. + +2018-11-11 Jan Nieuwenhuizen + + mes: Oops, %moduledir debug info. + * mes/module/mes/boot-0.scm.in: Oops, %moduledir debug info. + + build: configure: Support Mes. + * configure: Support Mes. + + mes; Add read-line. + * mes/module/mes/guile.mes (read-line): New function. + + mes: dirname: Fix for absolute file names. + * mes/module/mes/guile.mes (dirname): Fix absolute files. + + mes: Add file-exists?. + * mes/module/mes/guile.mes (file-exists?): New function. + + mes: Add with-error-to-file. + * mes/module/mes/guile.mes (with-error-to-file): New function. + + mes: Add string-downcase, string-upcase, string-tokenize. + * mes/module/srfi/srfi-13.mes (string-downcase, string-upcase, + string-tokenize): New function. + + mes: Add char-downcase, char-upcase. + * mes/module/srfi/srfi-14.mes (char-downcase, char-upcase): New + function. + + mes: Add char-set:digit, char-set:lower-case, char-set:upper-case. + * mes/module/srfi/srfi-14.mes (char-set:digit, char-set:lower-case, + char-set:upper-case): New variable. + + mes: Add char-set-adjoin, char-set-complement. + * mes/module/srfi/srfi-14.mes (char-set-adjoin, char-set-complement): + New function. + + mes: system*: Support redirection. + * mes/module/mes/posix.mes (system*): Support redirection. + + core: read_string: Allow for gc. + * src/posix.c (read_char): Add optional port parameter. + (read_string): Allow for gc. + + core: Add delete_file. + * src/posix.c (delete_file): New function. + + core: Add dup, dup2. + * src/posix.c (dup_, dup2_): New function. + + core: Add getcwd. + * src/posix.c (getcwd_): New function. + + core: Support redirection of stderr. + * include/libmes-mini.h (g_stderr): New global. + * lib/mes/eputc.c (eputc): Use it. + * lib/mes/eputs.c (eputs): Likewise. + * lib/mes/oputc.c (oputc): Likewise. + * lib/mes/oputs.c (oputs): Likewise. + * src/lib.c (display_error_, write_error_): Likewise. + * src/posix.c (write_byte): Likewise. + * src/mes.c (mes_builtins): Likewise. + (main): Iniitalize g_stderr. + * src/posix.c (current_error_port, set_current_error_port): New + function. + * mes/module/mes/boot-0.scm.in (current-output-port, + current-error-port): Remove. + + core: Assert g_free in alloc. + * src/mes.c (alloc): Assert g_free. + + mescc: unlink: Move to libc. + * lib/linux/libc.c (unlink): New function. + * lib/linux/tcc.c (unlink): Remove. + + mescc: dup, dup2: Move to libc. + * lib/linux/libc.c (dup, dup2): New function. + * lib/linux/gnu.c (dup, dup2): Remove. + + mescc: getcwd: Move to libc. + * lib/linux/libc.c (getcwd): New function. + * lib/linux/tcc.c (getcwd): Remove. + +2018-11-10 Jan Nieuwenhuizen + + mescc: Support GNU make with POSIX. + * include/linux/x86/syscall.h (SYS_sigprocmask): New macro. + * include/linux/x86_64/syscall.h (SYS_rt_sigprocmask): New macro. + * include/signal.h (SIG_BLOCK, SIG_UNBLOCK, SIG_SETMASK): New macro. + (sigprocmask): Declare. + * lib/linux/gnu.c (sigprocmask): New function. + +2018-11-09 Jan Nieuwenhuizen + + mescc: Support GNU Bash. + * include/errno.h (EACCES, ENOSPC, ESPIPE): New macro. + * include/linux/x86/syscall.h (SYS_setuid, SYS_geteuid, SYS_getegid, + SYS_setgid): New macro. + * include/linux/x86_64/syscall.h: Likewise. + * include/stdint.h (LLONG_MIN, LLONG_MAX, SIZE_MAX): New macro. + * include/sys/stat.h (S_ISUID, S_ISGID, S_IXGRP, S_IXOTH, S_IRGRP, + S_IROTH, S_IWGRP, S_IWOTH, S_IRWXG, S_IRWXO): New macro. + * include/termio.h: New file. + * include/unistd.h (_POSIX_VERSION): New macro. + * lib/linux/gnu.c (geteuid, getegid, setuid, setgid): New function. + * lib/string/memchr.c: New file. + * lib/stub/getpwuid.c: New file. + * lib/stub/rand.c: New file. + * lib/stub/ttyname.c: New file. + * include/string.h (memchr): Declare. + * include/unistd.h (geteuid, getegid, setuid, setgid): Declare. + +2018-11-06 Jan Nieuwenhuizen + + build: Simplify: cater for one compiler at a time. + * build-aux/build-cc.sh: Remove. + * build-aux/build-cc32.sh: Remove. + * build-aux/build-cc64.sh: Remove. + * build-aux/build-x86_64-mes.sh: Remove. + * build-aux/cc-mes.sh: Remove. + * build-aux/cc-x86_64-mes.sh: Remove. + * build-aux/cc32-mes.sh: Remove. + * build-aux/cc64-mes.sh: Remove. + * build-aux/test64.sh: Remove. + * build-aux/bootstrap-mes.sh: New file. + * build-aux/config.make.in: New file. + * build-aux/config.status.in: New file. + * build-aux/test-cc.sh: New file. + * .gitignore: Update. + * build-aux/GNUmakefile.in: Update. + * build-aux/build-guile.sh: Update. + * build-aux/build-mes.sh: Update. + * build-aux/build.sh.in: Update. + * build-aux/cc.sh: Update. + * build-aux/check-boot.sh: Update. + * build-aux/check-mes.sh: Update. + * build-aux/check-mescc.sh: Update. + * build-aux/check-tcc.sh: Update. + * build-aux/check.sh.in: Update. + * build-aux/config.sh: Update. + * build-aux/export.make: Update. + * build-aux/install.sh.in: Update. + * build-aux/pre-inst-env.in: Update. + * build-aux/test.sh: Update. + * build-aux/uninstall.sh.in: Update. + * configure: Update. + * configure.sh: Update. + * module/mescc/i386/as.scm: Update. + * module/mescc/preprocess.scm: Update. + * module/mescc/x86_64/as.scm: Update. + * scripts/mescc.in: Update. + * tests/psyntax.test: Update. + +2018-11-09 Jan Nieuwenhuizen + + mescc: Add missing define. + * lib/x86-mes/x86.M1: Add missing define. + +2018-11-08 Jan Nieuwenhuizen + + mescc: Exit if library cannot be found. + * module/mescc/mescc.scm (arch-find): Exit upon failure. + + mescc: Accept -O, --std, -x. + * scripts/mescc.in (parse-opts): Accept -O, --std, -x. + + mescc: Support -dumpmachine. + * scripts/mescc.in (parse-opts): Support -dumpmachine. + +2018-10-22 Jan Nieuwenhuizen + + mescc: vsnprintf: Compliant implementation. + * lib/stdio/vsnprintf.c (vsnprintf): New, complient implementation, + replacing vsnprint. + * lib/stdio/vsprintf.c (vsnprint): Forward to vsnprint. + * lib/stdio/snprintf.c (snprintf): Likewise. + * scaffold/tests/9a-snprintf.c: Test it. + * build-aux/check-mescc.sh (tests): Run it. + +2018-10-21 Jan Nieuwenhuizen + + test: Add performance test. + * module/mes/test.scm (pass-if-timeout): New macro. + * tests/perform.test: New test. + * build-aux/check-mes.sh (tests): Run it. + + mes: Add ceil, floor, round, inexact->exact. + * mes/module/mes/scm.mes (ceil, floor, round, inexact->exact, + exact->inexact): New function. + + mes: read-string: Take optional port argument. + * src/posix.c (read_string): Take optional port argument. + * mes/module/mes/guile.mes (read-string): Remove. + + core: eval_apply: Order gotos according to frequency. + * src/mes.c (eval_apply): Order gotos according to frequency. + + Revert "core: eval_apply profile." + This reverts commit d61e6be0b18459a8e3c262eab448b428dc81937a. + + core: eval_apply profile. + * src/mes.c: Poor man's eval_apply profile. + +2018-10-20 Jan Nieuwenhuizen + + core: Fix displaying of closure. + * src/lib.c (display_helper): Fix displaying of closure. + + mes: Print backtrace upon exception. + * mes/module/mes/catch.mes (display-backtrace, + frame-function): New function. + (%eh): Use them. + + core: Set procedure in stack frame. + * src/mes.c (eval_apply): Set procedure in stack frame. + + core: Implement stack and frame. + * src/lib.c (frame_printer make_frame_type, make_frame, + make_stack_type, make_stack, stack_length, stack_ref): New function. + + core: Support time functions. + * lib/linux/clock_gettime.c: New file, move from gnu.c. + * lib/linux/gettimeofday.c: New file, move from tcc.c. + * lib/linux/time.c: New file, move from tcc.c. + * lib/linux/libc.c: Include them. + * lib/linux/gnu.c (clock_gettime): Remove. + * lib/linux/tcc.c (time, gettimeofday): Remove. + * include/time.h (CLOCK_PROCESS_CPUTIME_ID): New define. + * src/posix.c (init_time, current_time, gettimeofday_, + seconds_and_nanoseconds_to_long, get_internal_run_time): New function. + * src/mes.c (scm_symbol_internal_time_units_per_second): New symbol. + (main): Call init_time. + +2018-10-18 Jan Nieuwenhuizen + + core: Use hash table for symbols. + * src/mes.c (mes_symbols): Use hash table for symbols. Update users. + +2018-10-19 Jan Nieuwenhuizen + + core: Use assert before failure exit. + * src/mes.c (error): Use assert before failure exit. Helps debugging. + +2018-10-18 Jan Nieuwenhuizen + + core: Add hashq_get_handle, hash, hash_ref, hash_set_x. + * src/mes.c (scm_symbol_hashq_table, scm_symbol_record_type, + scm_symbol_module, scm_symbol_buckets, scm_symbol_size): New symbols. + Update users. + * src/hash.c (hash_list_of_char): Rename from hashq_. Respect size, + update callers. + (hashq_, hash_ hash, hashq_get_handle, hash_ref, hash_set_x_, + hash_set_x): New function. + (hashq_ref): Do not return handle. Update callers. + + mes: Move pair? to core. + * src/lib.c (pair_p): New function. Gains 8% performance on MesCC. + +2018-10-19 Jan Nieuwenhuizen + + mes: Move assoc to core. + * mes/mes.c (assoc_string, assoc): New function. + * mes/module/mes/scm.mes (assoc): Remove. Gains 12% performance for + MesCC. + +2018-10-20 Jan Nieuwenhuizen + + Revert "core: Add gc-debug for stack array." + This reverts commit f35084d1dbea889d107824e7596da1701c6b90ad. + +2018-10-19 Jan Nieuwenhuizen + + core: Add gc-debug for stack array. + * src/gc.c (gc_debug): New function. + + scaffold: Resurrect mini-mes. + * src/mini-mes.c: Resurrect. + +2017-12-14 Jan Nieuwenhuizen + + core: Use array-based stack. + * src/mes.c (STACK_SIZE)[MES_ARRAY_STACK]: New variable. + (g_stack_array): New variable. + (g_stack): Change type to SCM*. + (gc_push_frame)[MES_ARRAY_STACK]: Use g_stack_array, g_stack. + (gc_peek_frame): Likewise. + (gc_pop_frame): Likewise. + * src/gc.c (gc_check): Likewise. + (gc): Likewise. + +2018-10-17 Jan Nieuwenhuizen + + mes: Resurrect Guile-1.8 support. + * module/mes/mes-0.scm: Resurrect Guile-1.8 support. + +2018-10-16 Jan Nieuwenhuizen + + core: expand_variable: Remove weird exceptions: begin, if. + * src/mes.c (expand_variable_): Remove weird exceptions: begin, if. + +2018-10-15 Jan Nieuwenhuizen + + mes: Switch to srfi-9 based on structs. + * mes/module/srfi/srfi-9.mes: Swap symlink to srfi-9-struct.mes. + * mes/module/srfi/srfi-9/gnu.mes: Swap symlink to gnu-struct.mes. + * src/module.c (make_module_type): Update to match srfi-9-struct + records. Update users. + * src/hash.c (make_hashq_type): Likewise. + + mes: srfi-9: Add implementation based on struct. + * mes/module/srfi/srfi-9-struct.mes: New file. + * mes/module/srfi/srfi-9-vector.mes: Rename from srfi-9.mes + * mes/module/srfi/srfi-9.mes: Symlink to srfi-9-vector.mes. + * mes/module/srfi/srfi-9/gnu-struct.mes: Add srfi-9-struct + implementation. + * mes/module/srfi/srfi-9/gnu-vector.mes: Rename from gnu.mes. + * mes/module/srfi/srfi-9/gnu.mes: Symlink to gnu-vector.mes. + + core: hashq-table: Refactor to be a record-like struct. + * src/hash.c (hash_table_printer): New function. + (make_hashq_type): New function. + * src/module.c (module_printer): Use it. + (make_module_type): New function. + (make_initial_module): Use them. + + mescc: Mes C Library: oputs: New function. + * lib/mes/oputc.c: New file. + * lib/libmes.c: Include it. + * include/libmes.h: Declare it. + + core: Use hashq-table for macros. + * src/mes.c (lookup_macro_): Remove. + (macro_ref, get_macro, macro_set_x): New function. Update callers. + + core: Add hashq-table type. + src/hash.c: New file. + src/module.c (char_hash, module_hash): Remove. + * src/module.c (make_initial_module): Use hash primitives. + (module_define_x): Likewise. + (module_variable): Likewise. + * build-aux/snarf.sh: Snarf it. + * src/mes.c: Include it. + + core: Add boot-module. + * src/mes.c (scm_symbol_boot_module): New symbol. + (eval_apply): Handle it. + (mes_symbols): Initialize it. + +2018-10-14 Jan Nieuwenhuizen + + core: Add module-define! + * src/module.c (module_define_x, module_printer): New function. + (make_initial_module): Use them. + * tests/srfi-0.test: Test it. + * src/mes.c (display_m0): Remove. Update callers. + * mes/module/mes/fluids.mes (make-fluid): Rewrite. + * tests/macro.test: Test it. + * mes/module/mes/boot-0.scm.in (module-define!): Remove. + * mes/module/mes/boot-02.scm: Likewise. + * module/mes/misc.scm (pk, warn): New function. + * build-aux/check-mes.sh (tests): Run tests. + + core: Add module indirection for variable lookup. + * src/module.c (module_ref, module_variable): New function. + * src/mes.c: Thoughout: Use them. + (assq_ref_env): Remove. + * mes/module/mes/boot-0.scm.in (defined?): Use module-variable. + * mes/module/mes/boot-00.scm (defined?): Likewise. + * mes/module/mes/boot-01.scm (defined?): Likewise. + * mes/module/mes/boot-02.scm (defined?): Likewise. + * scaffold/boot/53-closure-display.scm: Likewise. + + core: Add module type. + * src/module.c: New file. + * build-aux/snarf.sh: Snarf it. + * src/mes.c: Include it. + + core: Add cstring_to_symbol. + * src/mes.c (make_symbol): Rename from lookup_symbol_. Update + callers. + (cstring_to_symbol): New function. + * src/reader.c (reader_read_identifier_or_number): Use it. + +2018-10-13 Jan Nieuwenhuizen + + core: Add struct type. + * src/struct.c: New file. + * build-aux/snarf.sh: Snarf it. + * src/mes.c: Include it. + +2018-10-15 Jan Nieuwenhuizen + + build: factor-out snarfing. + * build-aux/snarf.sh: New file. + * build-aux/build-cc.sh: Use it. + * build-aux/build-cc32.sh: Likewise. + * build-aux/build-cc64.sh: Likewise. + * build-aux/build-mes.sh: Likewise. + * build-aux/build-x86_64-mes.sh: Likewise. + * build-aux/snarf.sh: Likewise. + + core: core:cdr: Support port type. + * src/mes.c (cdr_): Support port type. + * mes/module/mes/display.mes (display): Add space between fields. + + mes: with-fluids: Fix reset. + * mes/module/mes/fluids.mes (with-fluids): Fix reset. + * tests/fluids.test (report): Remove Mes failure expectation. + +2018-10-19 Jan Nieuwenhuizen + + mescc: Recognize U integer suffix. + * module/mescc/compile.scm (cstring->int): Recognize U integer + suffix. Thanks, Peter de Wachter! + +2018-10-16 Peter De Wachter + + mescc: Add INTn_MIN/MAX defines to stdint.h. + * include/stdint.h: Add INTn_MIN/MAX defines. Move integere size + defines from limits.h + * include/limits.h: Include it. + +2018-10-16 Peter De Wachter + + mescc: Allow superfluous parentheses in function declarations. + E.g.: int (f)(); + This is obscure but valid C. It occurs in the csmith headers (thanks + to macro shenanigans). + + * module/mescc/compile.scm (fctn-defn:get-name, + fctn-defn:get-statement): Allow superfluous parentheses in function declarations. + +2018-10-16 Peter De Wachter + + mescc: Implement unary plus operator. + * module/mescc/compile.scm (ast->type, expr->register, + try-expr->number):): Implement unary plus operator. + + mescc: Add missing assembly defines. + * lib/x86-mes/x86.M1: Add missing assembly defines. + * lib/x86_64-mes/x86_64.M1: Likewise. + + mescc: Delete duplicate assembly defines. + * lib/x86-mes/x86.M1: Delete duplicate assembly defines. + * lib/x86_64-mes/x86_64.M1: Likewise. + +2018-10-16 Peter De Wachter + + mescc: Exit with non-zero exit code when subprocess fails. + system* returns the result of waitpid. So, suppose that a subprocess + fails with exit code 1. Then the waitpid return value will be 256. + And exit(256) is equivalent to exit(0). + + Modified-by: Jan Nieuwenhuizen + + * mes/module/mes/posix.mes (status:exit-val): New function. + * module/mescc/mescc.scm (assert-system*): Use it. + +2018-10-12 Jan Nieuwenhuizen + + mescc: Oops typo. + * module/mescc/M1.scm (hex2:immediate8): Typo. + +2018-12-13 Jan Nieuwenhuizen + + core: Support \xNN in reader. Fixes tcc-boot running on Mes. + * src/reader.c (reader_read_string): Support \xNN. Fixes Guix + bootstrap chain; i.e., compilation of gcc-2.95.3 using tcc-boot. + * tests/base.test ("reader: \\x08"): Test it. + * scaffold/tests/17-compare-char.c: Likewise, for mescc. + * build-aux/check-mescc.sh (tests): Run it. + +2018-11-18 Jan Nieuwenhuizen + + build: configure: Make dot optional. + * configure: Make dot optional. + +2018-10-11 Jan Nieuwenhuizen + + build: Oops, remove stray lib/linux/x86_64-mes/crt1. + * lib/linux/x86_64-mes/crt1: Remove. + +2018-10-10 Jan Nieuwenhuizen + + build: x86_64 bootstrap build fixes and workaround. + * configure: Substitute @arch@ (WAS: ARCH). Update users. + * configure.sh: Substitute @arch@. + * build-aux/build-mes.sh: Use $GUILE for x86_64 build. + * build-aux/install.sh.in: Install mes.S, mes.x86_64-mes-S too. + Prune *.E, *.out. + +2018-10-08 Jan Nieuwenhuizen + + doc: Release update. + + mescc: Oops, delete wrong line of assembly. + * lib/x86-mes/x86.M1 (movzbl_%bx,%ebx): Delete wrong line. Thanks, pdewacht! + +2018-10-07 Jan Nieuwenhuizen + + admin: Release update. + * doc/announce/ANNOUNCE-0.18: New file. + * guix/git/mes.scm (mes): Update hash. + +2018-10-04 Jan Nieuwenhuizen + + Release 0.18. + * configure (VERSION): Update to 0.18. + (main): Likewise. + * configure.sh (VERSION): Likewise. + * guix/git/mes.scm (mes, mes.git): Likewise. + * guix/mescc-tools-boot.patch: New file. + +2018-09-05 Jan Nieuwenhuizen + + doc: Release update. + * BOOTSTRAP: Update. + * HACKING: Update. + * NEWS: Update. + * README: Update. + * doc/mes.texi (Submitting Patches): Fix misquoting, misattribution. + +2018-10-07 Jan Nieuwenhuizen + + mescc: Another attempt at divide. + * module/mescc/i386/as.scm (i386:r0/r1): Never be signed. Use div for unsigned. + (i386:r0%r1): Likewise. + * module/mescc/x86_64/as.scm (x86_64:r0/r1): Likewise. + (x86_64:r0%r1): Likewise. + * lib/x86-mes/x86.M1: Add div. + * lib/x86_64-mes/x86_64.M1: Likewise. + + tests: Expect srfi-13 failure, MesCC more resembles Gcc. + * tests/srfi-13.test (report): Expect INT-MIN failure for x86. + +2018-10-06 Jan Nieuwenhuizen + + core: reader: Support 64 bit. + * src/reader.c (reader_read_identifier_or_number): Support 64 bit. + (reader_read_binary): Likewise. + (reader_read_octal): Likewise. + (reader_read_hex): Likewise. + + mescc: Mes C Library: Fix execve on x86_64. + * include/linux/x86_64/syscall.h (SYS_execve): Typo. Fixes execve on + x86_64. + + build: Support make seed for x86_64. + * build-aux/GNUmakefile.in (seed): Support make seed for x86_64. + * build-aux/build-mes.sh[SEED]: Also build src/mes.S. + * build-aux/build-x86_64-mes.sh[SEED]: Also build src/mes.x86_64-mes.S. + + mes: Support fold-right 3. + * mes/module/srfi/srfi-1.mes (fold-right): Support fold-right 3. + * tests/srfi-1.test ("fold-right-3"): Test it. + + mescc: Nyacc comment escapes. + * module/mescc/compile.scm (ast->comment): Nyacc comment escapes. + + mescc: Fix clobbering of struct by value assign. + * module/mescc/x86_64/as.scm (long-r0->r1-mem): New instruction. + * module/mescc/i386/as.scm: Likewise. + * lib/x86_64-mes/x86_64.M1: Support it. + * module/mescc/compile.scm (r0->r1-mem*n-): Fix clobbering. + + core: Add vector test. + * scaffold/boot/11-vector.scm: New test. + * build-aux/check-boot.sh: Run it. + + mescc: Fix obnoxious assignment ERROR message. + * module/mescc/compile.scm (expression->register): Fix assignment + ERROR message. + + core: Avoid 64bit zero divide. + * src/math.c (divide): Avoid (64bit) 0 divide. + (modulo): Likewise. + + mescc: Support negative divide. + * module/mescc/i386/as.scm (i386:r0/r1, i386:r0%r1): Support + negative divide. + * module/mescc/x86_64/as.scm (x86_64:r0/r1, x86_64:r0%r1): Likewise. + * lib/x86-mes/x86.M1: Likewise. + * lib/x86_64-mes/x86_64.M1: Likewise. + * scaffold/tests/a0-math-divide-signed-negative.c: Test it. + * build-aux/check-mescc.sh (tests): Run it. + + mescc: Support --align, off by default. + * scripts/mescc.in (parse-opts): Add --align. + * module/mescc/mescc.scm (mescc:compile): Support --align, off by + default. + * module/mescc/M1.scm (infos->M1): Add #:align parameter. + (M1:merge-infos): Likewise. Keep types. + (info->M1): Likewise. Make alignment switchable. + * module/mescc/compile.scm (r->ident): Do not clobber. + (ident-add): Likewise. + (clean-info): Keep types. + * module/mescc/i386/as.scm (i386:r->byte-label): New instruction. + * lib/x86-mes/x86.M1: Add instructions. + * lib/x86_64-mes/x86_64.M1: Add instructions. + * module/mescc/x86_64/as.scm (x86_64:r->byte-label, + x86_64:r->word-label, x86_64:r->long-label): New instruction. + + Revert "mescc: Make globals at least reg-size." + This reverts commit 30544316c35ed4a2472f2029beb27e007d913792. + + mescc: Make globals at least reg-size. + * module/mescc/compile.scm (global->info): Make globals at least reg-size. + + mescc: Support 64-bit immediates. + * module/mescc/M1.scm (hex2:address8, hex2:immediate8): New function. + (info->M1): Support 64-bit. + * module/mescc/compile.scm (convert-r0): FIXME! + * module/mescc/x86_64/as.scm (x86_64:value->r, x86_64:r->local, + x86_64:label->arg, x86_64:label->r, x86_64:r+value, + x86_64:r-cmp-value, x86_64:r-long-mem-add, x86_64:r-and): Support + 64-bit immediates. + * lib/x86_64-mes/x86_64.M1: Likewise. + * scaffold/tests/17-compare-unsigned-char-le.c: Test it. + * scaffold/tests/17-compare-unsigned-short-le.c: Test it. + * build-aux/check-mescc.sh (tests): Run them. + + core: Use proper name for %compiler. + * src/mes.c (mes_symbols, bload_env): : Use proper name for %compiler. + + core: Resurrect MES_MINI for non-POSIX. + src/mes.c[MES_MINI,!POSIX]: Resurrect. + + mescc: Mes C Library: Add ultoa. + * lib/mes/ultoa.c: New file. + * lib/libmes.c: Include it. + * include/libmes.h: Declare ultoa. + + mescc: Mes C Library: Add ltoa. + * lib/mes/ltoa.c: New file. + * lib/libmes.c: Include it. + * include/libmes.h: Declare ltoa. + + mescc: Fix truncation of short. + * module/mescc/compile.scm (convert-r0): Typo. Fixes truncation of + short. Thanks, pdewacht! + * scaffold/tests/a0-call-trunc-char.c: New file. + * scaffold/tests/a0-call-trunc-short.c: New file. + * build-aux/check-mescc.sh: Add them. + + build: Split-off x86_mes-gcc build. + * build-aux/build-cc64.sh: New file. + * build-aux/build.sh.in[CC64]: Invoke it. + * build-aux/build-cc.sh: Remove x86_64-mes-gcc build. + * build-aux/GNUmakefile.in (x86_64-mes-gcc): New target. + * build-aux/build-x86_64-mes.sh: Build all scafffold files. + +2018-10-05 Jan Nieuwenhuizen + + build: Oops, use MES_LIBS. + * build-aux/build-x86_64-mes.sh: Use MES_LIBS instead of the unused + MES64_LIBS. Fixes build. Thanks, pdewacht! + + build: remove bashism. + * build-aux/trace.sh (trace): Remove bashism. Thanks pdewacht! + +2018-10-04 Jan Nieuwenhuizen + + core: Support x86_64. + * src/lib.c: Support x86_64. + * src/math.c: Likewise. + * src/mes.c: Likewise. + * src/reader.c: Likewise. + * src/vector.c Likewise. + + build: Oops, set VERSION. + * build-aux/install.sh.in (VERSION): New substituted variable. + +2018-09-30 Jan Nieuwenhuizen + + build: Resurrect make seed. + * build-aux/GNUmakefile.in (seed): Resurrect. + * build-aux/build-x86_64-mes.sh: Build from seed. + +2018-08-15 Jan Nieuwenhuizen + + mescc: x86_64 support: Refactor to abstracted assembly, add x86_64. + * module/mescc/as.scm: Support abstracted assembly. + * module/mescc/i386/as.scm: Rewrite. + * module/mescc/x86_64/as.scm: Implement. + * module/mescc/compile.scm: Refactor to abstracted assembly. + * module/mescc/M1.scm: Update for partial 64 bit support. + * module/mescc/bytevectors.scm (bytevector-u64-native-set!): New + procedure. + * module/mescc/i386/info.scm (i386:type-alist): Use 4 byte type length + also for faking double, long long, long double. + * module/mescc/info.scm:modified: + * module/mescc/x86_64/info.scm (x86_64:registers): New variable. + * lib/x86-mes/x86.M1: Update for new register scheme. + * lib/x86_64-mes/x86_64.M1: Implement. + * lib/x86-mes/setjmp.c: Implement. + * lib/x86_64-mes-gcc/setjmp.c: Implement. + * build-aux/build-cc.sh: Update for x86_64. + * build-aux/build-cc32.sh: Likewise. + * build-aux/build-mes.sh: Likewise. + * build-aux/build-x86_64-mes.sh: Likewise. + * build-aux/check-mescc.sh: Likewise. + * build-aux/test64.sh: Likewise. + * include/libmes.h: Likewise. + * include/setjmp.h: Likewise. + * include/signal.h: Likewise. + * include/stdarg.h: Likewise. + * include/sys/stat.h: Likewise. + * include/sys/types.h: Likewise. + * include/sys/wait.h: Likewise. + * include/unistd.h: Likewise. + * lib/libc+gnu.c: Likewise. + * lib/libc+tcc.c: Likewise. + * lib/linux/gnu.c: Likewise. + * lib/linux/libc-mini.c: Likewise. + * lib/linux/libc.c: Likewise. + * lib/linux/tcc.c: Likewise. + * lib/linux/x86_64-mes-gcc/mes.c: Likewise. + * lib/linux/x86_64-mes/crt1.c: Likewise. + * lib/mes/abtol.c: Likewise. + * lib/posix/mktemp.c: Likewise. + * lib/posix/wait.c: Likewise. + * lib/stdio/fopen.c: Likewise. + * lib/stdio/fputc.c: Likewise. + * lib/stdio/fseek.c: Likewise. + * lib/stdio/printf.c: Likewise. + * lib/stdio/sprintf.c: Likewise. + * lib/stdio/vfprintf.c: Likewise. + * lib/stdio/vsprintf.c: Likewise. + * lib/stdio/vsscanf.c: Likewise. + * lib/stdlib/qsort.c: Likewise. + * lib/x86-mes-gcc/setjmp.c: Likewise. + * scaffold/tests/11-if-1.c: Likewise. + * scaffold/tests/15-if-!f.c: Likewise. + * scaffold/tests/16-if-t.c: Likewise. + * scaffold/tests/21-char[].c: Likewise. + * scaffold/tests/23-pointer.c: Likewise. + * scaffold/tests/32-compare.c: Likewise. + * scaffold/tests/33-and-or.c: Likewise. + * scaffold/tests/34-pre-post.c: Likewise. + * scaffold/tests/35-compare-char.c: Likewise. + * scaffold/tests/36-compare-arithmetic.c: Likewise. + * scaffold/tests/37-compare-assign.c: Likewise. + * scaffold/tests/38-compare-call.c: Likewise. + * scaffold/tests/40-if-else.c: Likewise. + * scaffold/tests/41-?.c: Likewise. + * scaffold/tests/42-goto-label.c: Likewise. + * scaffold/tests/43-for-do-while.c: Likewise. + * scaffold/tests/44-switch.c: Likewise. + * scaffold/tests/45-void-call.c: Likewise. + * scaffold/tests/46-function-static.c: Likewise. + * scaffold/tests/51-strcmp.c: Likewise. + * scaffold/tests/51-strncmp.c: Likewise. + * scaffold/tests/53-strcpy.c: Likewise. + * scaffold/tests/54-argv.c: Likewise. + * scaffold/tests/60-math.c: Likewise. + * scaffold/tests/61-array.c: Likewise. + * scaffold/tests/63-struct-cell.c: Likewise. + * scaffold/tests/64-make-cell.c: Likewise. + * scaffold/tests/65-read.c: Likewise. + * scaffold/tests/70-printf.c: Likewise. + * scaffold/tests/71-struct-array.c: Likewise. + * scaffold/tests/72-typedef-struct-def.c: Likewise. + * scaffold/tests/74-multi-line-string.c: Likewise. + * scaffold/tests/76-pointer-arithmetic.c: Likewise. + * scaffold/tests/79-int-array.c: Likewise. + * scaffold/tests/7a-struct-char-array.c: Likewise. + * scaffold/tests/7b-struct-int-array.c: Likewise. + * scaffold/tests/7i-struct-struct.c: Likewise. + * scaffold/tests/7k-for-each-elem.c: Likewise. + * scaffold/tests/7l-struct-any-size-array.c: Likewise. + * scaffold/tests/7o-struct-pre-post.c: Likewise. + * scaffold/tests/7q-bit-field.c: Likewise. + * scaffold/tests/7s-struct-short.c: Likewise. + * scaffold/tests/80-setjmp.c: Likewise. + * scaffold/tests/81-qsort.c: Likewise. + * scaffold/tests/85-sizeof.c: Likewise. + * scaffold/tests/87-sscanf.c: Likewise. + * scaffold/tests/90-strpbrk.c: Likewise. + * scaffold/tests/91-fseek.c: Likewise. + * scaffold/tests/95-signal.c: Likewise. + * scaffold/tests/97-fopen.c: Likewise. + * scaffold/tests/99-readdir.c: Likewise. + * scaffold/tests/t.c: Likewise. + * lib/linux/x86_64-mes/mes.c: New file. + * lib/linux/x86_64-mes/mini.c: New file. + * lib/x86_64-mes/setjmp.c: New file. + * scaffold/tests/06-!call-1.c: New file. + * scaffold/tests/06-call-2.c: New file. + * scaffold/tests/06-call-variable.c: New file. + * scaffold/tests/08-assign-global.c: New file. + * scaffold/tests/08-assign-negative.c: New file. + * scaffold/tests/17-compare-and-or.c: New file. + * scaffold/tests/17-compare-and.c: New file. + * scaffold/tests/17-compare-ge.c: New file. + * scaffold/tests/17-compare-gt.c: New file. + * scaffold/tests/17-compare-le.c: New file. + * scaffold/tests/17-compare-lt.c: New file. + * scaffold/tests/17-compare-or.c: New file. + * scaffold/tests/17-compare-unsigned-ge.c: New file. + * scaffold/tests/17-compare-unsigned-gt.c: New file. + * scaffold/tests/17-compare-unsigned-le.c: New file. + * scaffold/tests/17-compare-unsigned-lt.c: New file. + * scaffold/tests/21-char[]-simple.c: New file. + * scaffold/tests/23-global-pointer-init-null.c: New file. + * scaffold/tests/23-global-pointer-init.c: New file. + * scaffold/tests/23-global-pointer-pointer-ref.c: New file. + * scaffold/tests/23-global-pointer-ref.c: New file. + * scaffold/tests/23-pointer-sub.c: New file. + * scaffold/tests/31-oputs.c: New file. + * scaffold/tests/32-call-wrap.c: New file. + * scaffold/tests/38-compare-call-2.c: New file. + * scaffold/tests/38-compare-call-3.c: New file. + * scaffold/tests/51-pointer-sub.c: New file. + * scaffold/tests/54-argc.c: New file. + * scaffold/tests/63-struct-array-assign.c: New file. + * scaffold/tests/63-struct-array-compare.c: New file. + * scaffold/tests/63-struct-array.c: New file. + * scaffold/tests/63-struct-assign.c: New file. + * scaffold/tests/63-struct-function.c: New file. + * scaffold/tests/63-struct-local.c: New file. + * scaffold/tests/63-struct-pointer.c: New file. + * scaffold/tests/63-struct.c: New file. + * scaffold/tests/70-printf-hello.c: New file. + * scaffold/tests/70-printf-simple.c: New file. + * scaffold/tests/70-stdarg.c: New file. + * scaffold/tests/70-strchr.c: New file. + * scaffold/tests/73-union-hello.c: New file. + * scaffold/tests/76-pointer-arithmetic-pp.c: New file. + * scaffold/tests/79-int-array-simple.c: New file. + * scaffold/tests/7b-struct-int-array-hello.c: New file. + * scaffold/tests/7b-struct-int-array-pointer.c: New file. + * scaffold/tests/7i-struct-struct-simple.c: New file. + * scaffold/tests/7k-for-each-elem-simple.c: New file. + * scaffold/tests/7l-struct-any-size-array-simple.c: New file. + * scaffold/tests/7o-struct-pre-post-simple.c: New file. + * scaffold/tests/7q-bit-field-simple.c: New file. + * scaffold/tests/90-strspn.c: New file. + * scaffold/tests/06-call-string.c.: Rename from 31-eputs.c. + * scaffold/tests/7t-function-destruct.c: Rename from 48-function-destruct.c. + * scaffold/tests/48-global-static.c: Rename from 49-global-static.c. + * scaffold/tests/55-char-array.c:renamed: Rename from 4a-char-array.c. + * scaffold/tests/51-itoa.c:r Rename from 52-itoa.c. + * include/signal.h:(struct sigaction): + + mescc: x86_64 support: Add tests. + +2018-08-14 Jan Nieuwenhuizen + + mescc: Initial x86_64 support. + make all-go && MES=guile ./pre-inst-env scripts/mescc -m64 -c scaffold/main.c + + mescc: Prepare for x86_64 support. + * module/mescc/info.scm (info): Add allocated, registers. + * module/mescc/i386/info.scm: New file. + * build-aux/build-guile.sh (SCM_FILES): Add it. + * module/mescc/compile.scm (c99-input->info): Add info parameter. + (c99-ast->info): Likewise. + (i386:type-alist): Remove. + (alloc-register, free-register): New function. + (expr->register*): Rename from expr->accu*. Update callers. + (expr->accu): Rename from expr->accu. Update callers. + * module/mescc/mescc.scm(%info): New variable. + * module/mescc/mescc.scm (c->ast): Use it. + (mescc:compile): Likewise. + (E->info): Likewise. + +2018-09-16 Jan Nieuwenhuizen + + emacs: Add disassembly helpers. + * .dir-locals.el (as-32, as-64): Add disassembly helpers. + +2018-09-11 Jan Nieuwenhuizen + + guix: nyacc-for-mes: Update to 0.86.0. + * guix/git/mes.scm (nyacc-for-mes): Update to 0.86.0 plus fix binary + literals. + + mescc: Support gcc-3.0: Locale header fix. + * include/locale.h (LC_ALL, LC_NUMERIC): Numbers, not strings. + (LC_COLLATE, LC_CTYPE): New macro. + +2018-09-09 Jan Nieuwenhuizen + + build: Oops, fix ./check.sh for bootstrap build. + * build-aux/config.sh (top_builddir): Set default to `.'. + +2018-09-05 Jan Nieuwenhuizen + + guix: nyacc-for-mes: Update to 0.85.3. + * guix/git/mes.scm (nyacc-for-mes): Update to 0.85.3. + + mes: Support Nyacc 0.85.3: Integrate progress. + * mes/module/nyacc/lang/sx-util.mes: New file. + * mes/module/nyacc/version.mes: New file. + * mes/module/nyacc/lang/c99/cpp.mes (nyacc): Include them. + * mes/module/nyacc/lang/c99/parser.mes (nyacc): Include them. + * module/mescc/preprocess.scm (need-progress): New function. + (progress): New function. + (insert-progress-monitors): Use them to Integrate progress. + + mes: Support Nyacc 0.85.3: Add char-set-copy. + * mes/module/srfi/srfi-14.mes (char-set-copy): New function> + +2018-09-04 Jan Nieuwenhuizen + + doc: Update bootstrap graph. + * doc/images/gcc-mesboot-graph.dot: Regenerate. + * build-aux/GNUmakefile.in (doc/mes.info): Oops change dependency to .png. + * doc/mes.texi (The Mes Bootstrap Process): Update image and wording. + + guix: Update hash. + * guix/git/mes.scm (mes): Update hash. + +2018-09-03 Jan Nieuwenhuizen + + Release 0.17.1. + * configure (VERSION): Update to 0.17.1. + (main): Likewise. + * configure.sh (VERSION): Likewise. + * build-aux/GNUmakefile.in (gen-announce): Likewise. + * guix/git/mes.scm (mes, mes.git): Likewise. + +2018-08-09 Jan Nieuwenhuizen + + doc: Release update. + * HACKING (prefix): Update. + * INSTALL (http): Update. + * NEWS: Update. + * README (C-compiler): Update. + * doc/announce/ANNOUNCE-0.17: Update. + +2018-09-03 Jan Nieuwenhuizen + + build: ALlow releasing from worktree. + * build-aux/GNUmakefile.in (COMMIT): Check for .git file. + +2018-09-01 Jan Nieuwenhuizen + + mescc: Mes C Library: Do not redefine size_t. + * include/stddef.h: Do not redefine size_t. + +2018-08-27 Jan Nieuwenhuizen + + mescc: Mes C Library: Support make 3.80: Add setlocale, sigaddset. + * include/limits.h (ULONG_MAX): New macro. + * include/locale.h (LC_ALL, LC_NUMERIC): New macro. + * lib/stub/setlocale.c: New file. + * lib/stub/sigaddset.c: New file. + * lib/libc+gnu.c: Include them. + + mescc: Mes C Library: Fix qsort to support duplicate entries. + * lib/stdlib/qsort.c (qpart): Handle dupes. + * scaffold/tests/81-qsort-dupes.c: New file. + * build-aux/check-mescc.sh (tests): Run it. + +2018-08-26 Jan Nieuwenhuizen + + mescc: Mes C Library: Support make: Implement clock_gettime, time. + * include/linux/x86/syscall.h (SYS_time, SYS_clock_gettime, + SYS_gettimeofday): New macro. + * include/linux/x86_64/syscall.h (SYS_time, SYS_clock_gettime, + SYS_gettimeofday): New macro. + * lib/linux/tcc.c (gettimeofday, time): New function. + * lib/linux/gnu.c (clock_gettime): New function. + * include/time.h: Declare it. + * lib/stub/gettimeofday.c: Remove. + * lib/stub/time.c: Remove. + + mescc: Mes C Library: Support make: Support main with envp. + * lib/linux/x86-mes-gcc/crt1.c (_start): Also push envp. + * lib/linux/x86-mes/crt1.c (_start): Also push envp. + * lib/linux/x86_64-mes-gcc/crt1.c (_start): Also mov environment,%rdx. + + mescc: Mes C Library: Support make: Add chdir, getlogin, setvbuf, sigblock. + * lib/stub/getlogin.c: New file. + * lib/stub/setvbuf.c: New file. + * lib/stub/sigblock.c: New file. + * lib/libc+gnu.c: Include them. + * include/linux/x86/syscall.h (SYS_chdir): New macro. + * include/linux/x86_64/syscall.h (SYS_chdir): New macro. + * include/stdio.h (_IOFBF, _IOLBF, _IONBF): New macro. + * include/errno.h (ENOEXEC, ECHILD): New macro. + * include/sys/wait.h (WNOHANG): New macro. + * lib/linux/gnu.c (chdir): New function. + * include/ar.h: New file. + + mescc: Mes C Library: Support diffutils: Add execl. + * include/limits.h (CHAR_MAX): New macro. + * lib/posix/execl.c: New file. + * include/unistd.h: Declare it. + + mescc: Mes C Library: Add closedir, opendir, readdir. + * include/dirent.h: New file. Import from glibc-2.2.5. + * include/dirstream.h: Likewise. + * lib/dirent/__getdirentries.c: Likewise. + * lib/dirent/closedir.c: Likewise. + * lib/dirent/readdir.c (readdir): Likewise. + * lib/libc+gnu.c: Include them. + * include/linux/x86/syscall.h (SYS_getdents): New macro. + * include/linux/x86_64/syscall.h (SYS_getdents): Likewise. + * lib/linux/gnu.c (getdents): New function. + * include/limits.h (NAME_MAX): New macro. + * include/fcntl.h (O_DIRECTORY): New macro. + * scaffold/tests/readdir.dir: New directory. + * scaffold/tests/99-readdir.c: New file, use it. + * build-aux/check-mescc.sh (tests): Run it. + +2018-08-21 Jan Nieuwenhuizen + + mescc: Mes C Library: Move strncmp to own test. + * scaffold/tests/51-strcmp.c: Remove strncmp tests. + * scaffold/tests/51-strncmp.c: New file. + * build-aux/check-mescc.sh (tests): Add it. + +2018-08-19 Jan Nieuwenhuizen + + test: Cleanup includes. + * scaffold/tests/30-strlen.c: Include only libmes-mini.h + * scaffold/tests/31-eputs.c: Likewise. + * scaffold/tests/32-compare.c: Likewise. + * scaffold/tests/33-and-or.c: Likewise. + * scaffold/tests/34-pre-post.c: Likewise. + * scaffold/tests/35-compare-char.c: Likewise. + * scaffold/tests/36-compare-arithmetic.c: Likewise. + * scaffold/tests/37-compare-assign.c: Likewise. + * scaffold/tests/38-compare-call.c: Likewise. + * scaffold/tests/40-if-else.c: Likewise. + * scaffold/tests/41-?.c: Likewise. + * scaffold/tests/42-goto-label.c: Likewise. + * scaffold/tests/43-for-do-while.c: Likewise. + * scaffold/tests/44-switch.c: Likewise. + * scaffold/tests/45-void-call.c: Likewise. + + mescc: Cleanup includes. + * include/libmes-mini.h: New file. + * include/libmes.h: Use it. + +2018-08-15 Jan Nieuwenhuizen + + mescc: Add dir to include path. + * module/mescc/mescc.scm (preprocess): Add dir to include path. + (c->info): Likewise. + * scaffold/tests/08-assign.c: New file. + +2018-08-16 Jan Nieuwenhuizen + + check-mescc: c-mini + +2018-08-24 Jan Nieuwenhuizen + + mescc: Mes C Library: Explode libc+gnu.c. + * modified: include/math.h: Add declarations. + * lib/posix/getopt.c: Rename from lib/getopt.c. + * lib/gcc.c: Remove. + * lib/m4.c: Remove. + * lib/ctype/isalnum.c: New file, explode from libc+gnu.c. + * lib/ctype/isalpha.c: Likewise. + * lib/ctype/isascii.c: Likewise. + * lib/ctype/iscntrl.c: Likewise. + * lib/ctype/isnumber.c: Likewise. + * lib/ctype/isprint.c: Likewise. + * lib/ctype/ispunct.c: Likewise. + * lib/math/fabs.c: Likewise. + * lib/posix/alarm.c: Likewise. + * lib/posix/mktemp.c: Likewise. + * lib/posix/raise.c: Likewise. + * lib/posix/sbrk.c: Likewise. + * lib/posix/sleep.c: Likewise. + * lib/posix/unsetenv.c: Likewise. + * lib/stdio/clearerr.c: Likewise. + * lib/stdio/fdgets.c: Likewise. + * lib/stdio/feof.c: Likewise. + * lib/stdio/fgets.c: Likewise. + * lib/stdio/fileno.c: Likewise. + * lib/stdio/freeopen.c: Likewise. + * lib/stdio/freopen.c: Likewise. + * lib/stdio/perror.c: Likewise. + * lib/stdlib/__exit.c: Likewise. + * lib/stdlib/abs.c: Likewise. + * lib/stdlib/atexit.c: Likewise. + * lib/stdlib/atol.c: Likewise. + * lib/stdlib/bsearch.c: Likewise. + * lib/stdlib/mbstowcs.c: Likewise. + * lib/string/bcmp.c: Likewise. + * lib/string/bcopy.c: Likewise. + * lib/string/bzero.c: Likewise. + * lib/string/index.c: Likewise. + * lib/string/rindex.c: Likewise. + * lib/string/strcspn.c: Likewise. + * lib/string/strdup.c: Likewise. + * lib/string/strerror.c: Likewise. + * lib/string/strncat.c: Likewise. + * lib/string/strpbrk.c: Likewise. + * lib/string/strspn.c: Likewise. + * lib/stub/__cleanup.c: Likewise. + * lib/stub/atof.c: Likewise. + * lib/stub/chown.c: Likewise. + * lib/stub/ctime.c: Likewise. + * lib/stub/fpurge.c: Likewise. + * lib/stub/freadahead.c: Likewise. + * lib/stub/frexp.c: Likewise. + * lib/stub/fscanf.c: Likewise. + * lib/stub/getpwnam.c: Likewise. + * lib/stub/gmtime.c: Likewise. + * lib/stub/pclose.c: Likewise. + * lib/stub/popen.c: Likewise. + * lib/stub/rewind.c: Likewise. + * lib/stub/setbuf.c: Likewise. + * lib/stub/sigsetmask.c: Likewise. + * lib/stub/strftime.c: Likewise. + * lib/stub/sys_siglist.c: Likewise. + * lib/stub/system.c: Likewise. + * lib/stub/times.c: Likewise. + * lib/stub/umask.c: Likewise. + * lib/stub/utime.c: Likewise. + * lib/libc+gnu.c: Include explodings. + * lib/libg.c: Likewise. + * lib/libgetopt.c: Include explodings. + +2018-08-22 Jan Nieuwenhuizen + + mescc: Mes C Library: Explode libc+tcc.c. + * include/libmes.h: Add declarations. + * include/string.h: Likewise. + * lib/ctype/islower.c: New file, explode from lib/libc+tcc.c. + * lib/ctype/isupper.c: Likewise. + * lib/ctype/tolower.c: Likewise. + * lib/ctype/toupper.c: Likewise. + * lib/mes/search-path.c: Likewise. + * lib/posix/execvp.c: Likewise. + * lib/stdio/fclose.c: Likewise. + * lib/stdio/fdopen.c: Likewise. + * lib/stdio/ferror.c: Likewise. + * lib/stdio/fflush.c: Likewise. + * lib/stdio/fopen.c: Likewise. + * lib/stdio/fprintf.c: Likewise. + * lib/stdio/fread.c: Likewise. + * lib/stdio/fseek.c: Likewise. + * lib/stdio/ftell.c: Likewise. + * lib/stdio/fwrite.c: Likewise. + * lib/stdio/printf.c: Likewise. + * lib/stdio/remove.c: Likewise. + * lib/stdio/snprintf.c: Likewise. + * lib/stdio/sprintf.c: Likewise. + * lib/stdio/sscanf.c: Likewise. + * lib/stdio/vfprintf.c: Likewise. + * lib/stdio/vprintf.c: Likewise. + * lib/stdio/vsnprintf.c: Likewise. + * lib/stdio/vsprintf.c: Likewise. + * lib/stdio/vsscanf.c: Likewise. + * lib/stdlib/calloc.c: Likewise. + * lib/stdlib/qsort.c: Likewise. + * lib/stdlib/strtof.c: Likewise. + * lib/stdlib/strtol.c: Likewise. + * lib/stdlib/strtold.c: Likewise. + * lib/stdlib/strtoll.c: Likewise. + * lib/stdlib/strtoul.c: Likewise. + * lib/stdlib/strtoull.c: Likewise. + * lib/string/memcmp.c: Likewise. + * lib/string/memmem.c: Likewise. + * lib/string/memmove.c: Likewise. + * lib/string/memset.c: Likewise. + * lib/string/strcat.c: Likewise. + * lib/string/strchr.c: Likewise. + * lib/string/strlwr.c: Likewise. + * lib/string/strncpy.c: Likewise. + * lib/string/strrchr.c: Likewise. + * lib/string/strstr.c: Likewise. + * lib/string/strupr.c: Likewise. + * lib/stub/gettimeofday.c: Likewise. + * lib/stub/ldexp.c: Likewise. + * lib/stub/localtime.c: Likewise. + * lib/stub/mprotect.c: Likewise. + * lib/stub/sigaction.c: Likewise. + * lib/stub/sigemptyset.c: Likewise. + * lib/stub/strtod.c: Likewise. + * lib/stub/time.c: Likewise. + * lib/libc+tcc.c: Include explodings. + +2018-08-16 Jan Nieuwenhuizen + + mescc: Mes C Library: Explode libmes.c. + * include/libmes.h: Add declarations. + * lib/abtol.c: New file, explode from lib/libmes.c. + * lib/ctype/isdigit.c: Likewise. + * lib/ctype/isnumber.c: Likewise. + * lib/ctype/isspace.c: Likewise. + * lib/ctype/isxdigit.c: Likewise. + * lib/mes/abtol.c: Likewise. + * lib/mes/eputc.c: Likewise. + * lib/mes/eputs.c: Likewise. + * lib/mes/fdgetc.c: Likewise. + * lib/mes/fdputc.c: Likewise. + * lib/mes/fdputs.c: Likewise. + * lib/mes/fdungetc.c: Likewise. + * lib/mes/itoa.c: Likewise. + * lib/mes/ltoab.c: Likewise. + * lib/mes/ntoab.c: Likewise. + * lib/mes/utoa.c: Likewise. + * lib/stdlib/atoi.c: Likewise. + * lib/libmes.c: Include explodings. + + mescc: Mes C Library: Explode libc-mini.c. + * include/libmes.h: Add declarations. + * lib/mes/eputs.c: New file, explode from lib/libc-mini.c. + * lib/mes/oputs.c: Likewise. + * lib/stdlib/exit.c: Likewise. + * lib/stdlib/puts.c: Likewise. + * lib/string/strlen.c: Likewise. + * lib/libc-mini.c: Include explodings. + + mescc: Mes C Library: Explode libc.c. + * lib/libc.c: New file, explode from lib/libc.c. + * lib/posix/execv.c: Likewise. + * lib/posix/isatty.c: Likewise. + * lib/posix/wait.c: Likewise. + * lib/stdio/fgetc.c: Likewise. + * lib/stdio/fputc.c: Likewise. + * lib/stdio/fputs.c: Likewise. + * lib/stdio/getc.c: Likewise. + * lib/stdio/getchar.c: Likewise. + * lib/stdio/putc.c: Likewise. + * lib/stdio/putchar.c: Likewise. + * lib/stdio/ungetc.c: Likewise. + * lib/stdlib/free.c: Likewise. + * lib/stdlib/getenv.c: Likewise. + * lib/stdlib/realloc.c: Likewise. + * lib/stdlib/setenv.c: Likewise. + * lib/string/strcmp.c: Likewise. + * lib/string/strcpy.c: Likewise. + * lib/string/strncmp.c: Likewise. + * lib/libc.c: Include explodings. + +2018-08-15 Jan Nieuwenhuizen + + test: Build initial scaffold tests without libc. + * scaffold/argv.c (strcmp): New function; support building without + libc. + * build-aux/build-cc.sh: Build initial scaffold tests without libc. + * build-aux/build-cc32.sh: Likewise. + * build-aux/build-mes.sh: Likewise. + * build-aux/check-mescc.sh: Likewise. + * scaffold/read.data: Rename from `mesmes'. + * scaffold/read.c: Rename from `m.c'; update. + + test: Remove 30-test.i indirection. + * include/30-test.i: Remove. + * scaffold/tests/30-strlen.c: Remove 30-test.i indirection. + * scaffold/tests/31-eputs.c: Likewise. + * scaffold/tests/32-compare.c: Likewise. + * scaffold/tests/33-and-or.c: Likewise. + * scaffold/tests/34-pre-post.c: Likewise. + * scaffold/tests/35-compare-char.c: Likewise. + * scaffold/tests/36-compare-arithmetic.c: Likewise. + * scaffold/tests/37-compare-assign.c: Likewise. + * scaffold/tests/38-compare-call.c: Likewise. + * scaffold/tests/40-if-else.c: Likewise. + * scaffold/tests/41-?.c: Likewise. + * scaffold/tests/42-goto-label.c: Likewise. + * scaffold/tests/43-for-do-while.c: Likewise. + * scaffold/tests/44-switch.c: Likewise. + * scaffold/tests/45-void-call.c: Likewise. + * scaffold/tests/46-function-static.c: Likewise. + * scaffold/tests/50-assert.c: Likewise. + * scaffold/tests/51-strcmp.c: Likewise. + * scaffold/tests/52-itoa.c: Likewise. + * scaffold/tests/53-strcpy.c: Likewise. + * scaffold/tests/60-math.c: Likewise. + * scaffold/tests/63-struct-cell.c: Likewise. + * scaffold/tests/64-make-cell.c: Likewise. + * scaffold/tests/65-read.c: Likewise. + * scaffold/tests/66-local-char-array.c: Likewise. + * scaffold/tests/70-printf.c: Likewise. + * scaffold/tests/71-struct-array.c: Likewise. + * scaffold/tests/72-typedef-struct-def.c: Likewise. + * scaffold/tests/73-union.c: Likewise. + * scaffold/tests/74-multi-line-string.c: Likewise. + * scaffold/tests/75-struct-union.c: Likewise. + * scaffold/tests/76-pointer-arithmetic.c: Likewise. + * scaffold/tests/77-pointer-assign.c: Likewise. + * scaffold/tests/78-union-struct.c: Likewise. + * scaffold/tests/79-int-array.c: Likewise. + * scaffold/tests/7a-struct-char-array.c: Likewise. + * scaffold/tests/7b-struct-int-array.c: Likewise. + * scaffold/tests/7c-dynarray.c: Likewise. + * scaffold/tests/7d-cast-char.c: Likewise. + * scaffold/tests/7e-struct-array-access.c: Likewise. + * scaffold/tests/7f-struct-pointer-arithmetic.c: Likewise. + * scaffold/tests/7g-struct-byte-word-field.c: Likewise. + * scaffold/tests/7h-struct-assign.c: Likewise. + * scaffold/tests/7i-struct-struct.c: Likewise. + * scaffold/tests/7j-strtoull.c: Likewise. + * scaffold/tests/7k-for-each-elem.c: Likewise. + * scaffold/tests/7l-struct-any-size-array.c: Likewise. + * scaffold/tests/7m-struct-char-array-assign.c: Likewise. + * scaffold/tests/7n-struct-struct-array.c: Likewise. + * scaffold/tests/80-setjmp.c: Likewise. + * scaffold/tests/81-qsort.c: Likewise. + * scaffold/tests/86-strncpy.c: Likewise. + * scaffold/tests/87-sscanf.c: Likewise. + + test: Remove 00-test.i indirection. + * include/00-test.i: Remove. + * scaffold/tests/01-return-0.c: Remove 00-test.i indirection. + * scaffold/tests/02-return-1.c: Likewise. + * scaffold/tests/03-call.c: Likewise. + * scaffold/tests/04-call-0.c: Likewise. + * scaffold/tests/05-call-1.c: Likewise. + * scaffold/tests/06-call-!1.c: Likewise. + * scaffold/tests/10-if-0.c: Likewise. + * scaffold/tests/11-if-1.c: Likewise. + * scaffold/tests/12-if-==.c: Likewise. + * scaffold/tests/13-if-!=.c: Likewise. + * scaffold/tests/14-if-goto.c: Likewise. + * scaffold/tests/15-if-!f.c: Likewise. + * scaffold/tests/16-if-t.c: Likewise. + * scaffold/tests/20-while.c: Likewise. + * scaffold/tests/21-char[].c: Likewise. + * scaffold/tests/22-while-char[].c: Likewise. + * scaffold/tests/23-pointer.c: Likewise. + + build: Cleanup trace output. + * build-aux/build-cc.sh: Cleanup trace output. + * build-aux/build-cc32.sh: Likewise. + * build-aux/build-guile.sh: Likewise. + * build-aux/build-mes.sh: Likewise. + * build-aux/build-x86_64-mes.sh: Likewise. + * build-aux/cc-mes.sh: Likewise. + * build-aux/cc.sh: Likewise. + * build-aux/cc32-mes.sh: Likewise. + * build-aux/cc64-mes.sh: Likewise. + * build-aux/check-boot.sh: Likewise. + + mescc: Support -l none (linking without libc). + * module/mescc/mescc.scm (mescc:link): Support -l none. + +2018-08-14 Jan Nieuwenhuizen + + mescc: Support -o-. + * module/mescc/mescc.scm (GUILE-with-output-to-file): New variable. + (with-output-to-file): Use it in redefined function. + + build: Update dir-locals for new layout. + * .dir-locals.el: Update to new layout. + +2018-08-12 Jan Nieuwenhuizen + + mescc: Mes C Library: Support oputs for POSIX. + * lib/libmes.c (oputs)[POSIX]: New function. + + core: mes: Prepare for M2-Planet. + * src/mes.c (cal): Refactor to use if instead of switch. + (eval_apply): Likewise. + + core: lib: Prepare for M2-Planet. + * src/lib.c (display_helper): Refactor to use if instead of switch. + (memq): Likewise. + + core: reader: Prepare for M2-Planet. + * src/reader.c (MAX_STRING): New define. + (read_input_file_env_): Remove dead code. + (reader_read_line_comment): Refactor to remove recursion. + (reader_read_line_sexp_): Refactor to use if instead of switch. + (reader_read_hash): Likewise. + (reader_read_character): Refactor: cache peekchar () value, make + M2-Planet friendly. + (reader_read_binary): Make M2-Planet friendly. + (reader_read_octal): Likewise. + (reader_read_hex): Likewise. + (reader_read_string): Refactor. + (dump): Make M2-Planet friendly. + + build: src/mes build fixes. + * build-aux/GNUmakefile.in (seed): Add dependency on gcc. + * build-aux/build-cc.sh: Copy result to src/mes. + * build-aux/build-cc32.sh: Likewise. + * build-aux/build.sh.in: Remove copying of results. + + mescc: Mes C Library: Cleanup start files. + * lib/linux/x86-mes-gcc/crt0.c: Split from lib/linux/crt0.c. + * lib/linux/x86-mes-gcc/crt1.c: Split from lib/linux/crt1.c. + * lib/linux/x86-mes-gcc/crti.c: Split from lib/linux/crti.c. + * lib/linux/x86-mes-gcc/crtn.c: Split from lib/linux/crtn.c. + * lib/linux/x86-mes/crt0.c: Split from lib/linux/crt0.c. + * lib/linux/x86-mes/crt1.c: Split from lib/linux/crt1.c. + * lib/linux/x86-mes/crti.c: Split from lib/linux/crti.c. + * lib/linux/x86-mes/crtn.c: Split from lib/linux/crtn.c. + * build-aux/build-cc.sh: Update. + * build-aux/build-cc32.sh: Update. + * build-aux/build-mes.sh: Update. + +2018-08-11 Jan Nieuwenhuizen + + mescc: Mes C Library: Add x86_64 libc+gnu support. + * include/linux/x86/syscall.h: Move SYS_ defines from gnu.c. + * include/linux/x86_64/syscall.h: Add SYS_ defines for gnu. + * lib/linux/gnu.c: Update. + * lib/linux/gnu.c (signal)[__x86_64__]: Implement using rt_sigaction. + * lib/stdlib/abort.c: Support x86_64. + + mescc: Mes C Library: Add x86_64 libc+tcc support. + * include/linux/x86/syscall.h: Move SYS_ defines from tcc.c. + * include/linux/x86_64/syscall.h: Add SYS_ defines for tcc. + * lib/x86-mes-gcc/setjmp.c: Rename from lib/libc+tcc-gcc.c + * lib/x86-mes/setjmp.c: Rename from lib/libc+tcc-mes.c + * lib/linux/tcc.c: Update. + + mescc: Mes C Library: Add x86_64 libc support. + * include/linux/x86_64/syscall.h: New file. + * include/linux/x86/syscall.h: New file. + * lib/linux/x86_64-mes-gcc/mes.c: New file. + * lib/linux/x86-mes/mes.c: Rename from lib/linux/mes.c. + * lib/linux/x86-mes-gcc/mes.c: Rename from lib/linux/gcc.c. + * lib/linux/libc.c: Update includes. + (waitpid)[__x86_64__]: Use wait4. + * build-aux/build-cc.sh: Build libc too. + * lib/x86-mes/x86.M1 (mov____0x8(%ebp),%esi): New macro. + +2018-08-10 Jan Nieuwenhuizen + + mescc: Mes C Library: Add x86_64 libc-mini support. + * lib/linux/x86-mes-gcc/mini.c: Rename from lib/linux/mini-gcc.c. + * lib/linux/x86-mes/mini.c: Rename from lib/linux/mini-mes.c. + * lib/linux/x86_64-mes-gcc/crt1.c: Rename from lib/linux/x86_64/crt1.c. + * lib/linux/x86_64-mes-gcc/mini.c: New file. + * build-aux/build-cc.sh: Build libc-mini, scaffold/main, scaffold/hello. + * build-aux/cc64.sh: New file. + + mescc: Add objdump'able x86_64-mes scaffold. + * lib/x86_64-mes/elf64-header.hex2: New file. + * lib/x86_64-mes/elf64-footer-single-main.hex2: New file. + * build-aux/build-x86_64-mes.sh: Enable second, objdump'able exit-42 + scaffold test. + + mescc: Initial x86_64-mes scaffold. + * build-aux/GNUmakefile.in (x86_64-mes): New target. + * .gitignore: Ignore x86 and x86_64 out files. + * build-aux/build-mes.sh: Resurrect three initial exit42 scaffold tests. + * build-aux/build-x86_64-mes.sh: New file. Add initial exit42 + scaffold test. + * lib/x86-mes/elf32-0header.hex2: Fix comment. + * lib/x86-mes/elf32-header.hex2: Likewise. + * lib/x86_64-mes/elf-0footer.hex2: New file. + * lib/x86_64-mes/elf64-0header.hex2: New file. + * lib/x86_64-mes/elf64-body-exit-42.hex2: New file. + * lib/x86_64-mes/exit-42.c: New file. + +2018-08-12 Jan Nieuwenhuizen + + build: seed: Oops, copy TCC seed after it's been regenerated. + * build-aux/GNUmakefile.in (seed): Oops, copy TCC seed after it's been + regenerated. + +2018-08-10 Jan Nieuwenhuizen + + build: Fix mescc man page generation. + * build-aux/GNUmakefile.in (doc/mescc.1): Reverse dependencies; + generate page for mescc. + +2018-08-23 Jan Nieuwenhuizen + + build: Fixes for make check. + * build-aux/config.sh (srcdir): Initialize if unset. + * build-aux/test.sh (DIFF): Do not fail if unset. + +2018-08-09 Jan Nieuwenhuizen + + guix: Update to 0.17. + * guix/git/mes.scm (mes): Update to 0.17. + +2018-07-22 Jan Nieuwenhuizen + + Release 0.17. + * configure (VERSION): Update to 0.17. + + doc: Release update. + * HACKING: Update. + * INSTALL: Update. + * NEWS: Update. + * README: Update. + * doc/announce/ANNOUNCE-0.17: New file. + +2018-08-09 Jan Nieuwenhuizen + + build: Non-bootstrap install fixes. + * configure (main): Fix default bindir. + * build-aux/GNUmakefile.in (PHONY_TARGETS): Remove src/mes. Fixes + re-build upon install. + * build-aux/install.sh.in: Fix tar arguments for scaffold files. + Expand install directories. + + check: Do not fail if partial test prerequisites fail. + * build-aux/check-tcc.sh: Pass if no test directory found. + * build-aux/check.sh.in (TINYCC_PREFIX): Rename from TCC_PREFIX. Pass + if partial tests prerequisites fail. + + check: Fix 4f-string-split.scm for Guile. + * module/mes/guile.scm (core:car, core:make-cell): New function. + Fixes scaffold/boot/4f-string-split.scm. + + build: configure: Oops, substitute @prefix@. + * build-aux/pre-inst-env.in (MES_PREFIX): Respect pre-set value. + * configure (main): Oops, substitute @prefix@. + * configure.sh (subst): Likewise. + +2018-07-28 Jan Nieuwenhuizen + + build: web: New target. + * README: Add bug-mes@gnu.org + * NEWS: Likewise. + * doc/mes.texi: Likewise. + * build-aux/gendocs.sh: New file, from gnulib. + * doc/gendocs_template: New file, from gnulib. + * build-aux/GNUmakefile.in (web): New target. + + Remove fosdem talk. + * doc/fosdem/GuixSD.png: Remove. + * doc/fosdem/LISP-1-5-page-13-bottom.png: Remove. + * doc/fosdem/LISP-1.5-page-13-bottom.png: Remove. + * doc/fosdem/LISP-1.5-page-13.pdf: Remove. + * doc/fosdem/LISP-1.5-page-13.png: Remove. + * doc/fosdem/README: Remove. + * doc/fosdem/beamercolorthemeX.sty: Remove. + * doc/fosdem/beamerthemeX.sty: Remove. + * doc/fosdem/bootstrap-graph.png: Remove. + * doc/fosdem/egg.jpeg: Remove. + * doc/fosdem/egg.png: Remove. + * doc/fosdem/egg.xcf: Remove. + * doc/fosdem/fosdem.org: Remove. + * doc/fosdem/fosdem.pdf: Remove. + * doc/fosdem/fsb-logo-guile-guix-gnu.png: Remove. + * doc/fosdem/fsb-logo-guile-guix-gnu.xcf: Remove. + * doc/fosdem/fsb-logo-guile-guix-mes.png: Remove. + * doc/fosdem/fsb-logo-guile-guix-mes.xcf: Remove. + * doc/fosdem/fsb-logo.png: Remove. + * doc/fosdem/guix-build-bootstrap-tarballs.log: Remove. + * doc/fosdem/mes.png: Remove. + * doc/fosdem/mes.xcf: Remove. + +2018-07-26 Jan Nieuwenhuizen + + build: Remove tinycc/test2 import. + * scaffold/tinycc/: Remove. + * build-aux/check-mescc.sh: Remove tinycc testing. + * build-aux/check-tcc.sh: New file. + * build-aux/check.sh.in: Use it. + * build-aux/config.sh: Update. + * build-aux/export.make: Update. + + Add missing copyright headers and READMEs. + * ChangeLog: Add copyright header. + * build-aux/GNUmakefile.in (generate-ChangeLog): Append it as copyright footer. + * BOOTSTRAP: Add copyright header. + * scaffold/boot/2f-define-second-lambda.scm: Likewise. + * scaffold/boot/39-global-define-override.scm: Likewise. + * scaffold/boot/3a-global-define-lambda-override.scm: Likewise. + * scaffold/boot/4f-string-split.scm: Likewise. + * scaffold/boot/numbers.scm: Likewise. + * scaffold/gc.scm: Likewise. + * scaffold/b-0.mes: Remove. + * doc/GNU-EVAL-APPLY: Remove. + * doc/announce/README: New file. + * doc/announce/ANNOUNCE: Move from doc/ANNOUNCE. + * doc/announce/ANNOUNCE-0.10: Likewise. + * doc/announce/ANNOUNCE-0.11: Likewise. + * doc/announce/ANNOUNCE-0.12: Likewise. + * doc/announce/ANNOUNCE-0.13: Likewise. + * doc/announce/ANNOUNCE-0.14: Likewise. + * doc/announce/ANNOUNCE-0.15: Likewise. + * doc/announce/ANNOUNCE-0.16: Likewise. + * doc/announce/ANNOUNCE-0.3: Likewise. + * doc/announce/ANNOUNCE-0.4: Likewise. + * doc/announce/ANNOUNCE-0.5: Likewise. + * doc/announce/ANNOUNCE-0.6: Likewise. + * doc/announce/ANNOUNCE-0.7: Likewise. + * doc/announce/ANNOUNCE-0.8: Likewise. + * doc/announce/ANNOUNCE-0.9: Likewise. + * doc/announce/ANNOUNCE-2: Likewise. + * doc/announce/UPDATE-0.13: Likewise. + * doc/fosdem/README: New file. + * doc/fosdem/fosdem.org: Add legalese. + * doc/fosdem/fosdem.pdf: Regenerate. + * doc/images/README: New file. + * mes/module/mes/psyntax.pp.header: New file. + * mes/module/mes/psyntax.pp: Add it to generated file. + +2018-07-25 Jan Nieuwenhuizen + + build: Make build more autotools-like. + * build-aux/build.sh.in: Move from ./build.sh + * build-aux/check.sh.in: Likewise. + * build-aux/GNUmakefile.in: Likewise. + * build-aux/install.sh.in: Likewise. + * build-aux/uninstall.sh.in: Likewise. + * configure: Substitute them. + * configure.sh: Likewise. + * build-aux/build-cc.sh: Update: use ${srcdest} instead of ${top_builddest}. + * build-aux/build-cc32.sh: Likewise. + * build-aux/build-guile.sh: Likewise. + * build-aux/build-mes.sh: Likewise. + * build-aux/cc-mes.sh: Likewise. + * build-aux/cc.sh: Likewise. + * build-aux/cc32-mes.sh: Likewise. + * build-aux/check-boot.sh: Likewise. + * build-aux/check-mes.sh: Likewise. + * build-aux/check-mescc.sh: Likewise. + * build-aux/config.sh: Likewise. + * build-aux/export.make: Likewise. + * build-aux/mes-snarf.scm: Likewise. + * build-aux/pre-inst-env.in: Likewise. + * build-aux/test.sh: Likewise. + * build-aux/trace.sh: Likewise. + * module/mescc/mescc.scm: Likewise. + * scripts/mescc.in: Likewise. + * src/mes.c: Likewise. + * .gitignore: Likewise. + +2018-07-23 Jan Nieuwenhuizen + + build: Support all `Standard targets' for users. + * GNUmakefile (distclean mostlyclean, maintainer-clean, html, dvi, ps, + install-dvi, install-ps, install-html, installcheck): New target. + (install-info): Remove fake target. + * configure (parse-opts): Add --srcdir. + + xx + +2018-07-23 Jan Nieuwenhuizen + + Add taken-from-Binutils and copyright line to alloca.c + * lib/stdlib/alloca.c: Add `taken from binutils' and copyright line to + alloca.c for minor changes. + +2018-07-26 Jan Nieuwenhuizen + + Relicense some taken-from-GNU Guile LGPLv3+ files to GPLv3+. + * mes/module/mes/pmatch.scm: Relicense to GPLv3+. + * mes/module/sxml/xpath.scm: Likewise. + * mes/module/mes/peg/cache.scm: Likewise. + * mes/module/mes/peg/codegen.scm: Likewise. + * mes/module/mes/peg/simplify-tree.scm: Likewise. + * mes/module/mes/peg/string-peg.scm: Likewise. + * mes/module/mes/peg/using-parsers.scm: Likewise. + +2018-07-23 Jan Nieuwenhuizen + + Relicense some taken-from-GNU Guile LGPLv2+ files to GPLv3+. + * mes/module/mes/pretty-print.scm: Relicense to GPLv3+. + * mes/module/mes/psyntax.ss: Likewise. + * mes/module/srfi/srfi-1.scm: Likewise. + * mes/module/srfi/srfi-16.scm: Likewise. + * mes/module/srfi/srfi-26.scm: Likewise. + * module/mes/getopt-long.scm: Likewise. + + Add missing copyright headers. + * .dir-locals.el: Add copyright header. + * AUTHORS: Likewise. + * HACKING: Likewise. + * INSTALL: Likewise. + * README: Likewise. + * build-aux/export.make: Likewise. + * build-aux/setup-mes.sh: Likewise. + * configure.sh: Likewise. + * install.sh: Likewise. + * scaffold/tests/90-goto-var.c: Likewise. + * scaffold/tests/91-goto-array.c: Likewise. + * tests/read.test: Likewise. + * uninstall.sh: Likewise. + * doc/fosdem/beamercolorthemeX.sty: + * doc/fosdem/beamerthemeX.sty: + * doc/fosdem/html.sty: Remove. + * doc/fosdem/README: New file. + * doc/images/README: New file. + +2018-07-22 Jan Nieuwenhuizen + + GNU Mes. + Throughout, make these changes + + Copyright headers: GNU Mes + First mention of name: GNU Mes + Website: https://www.gnu.org/software/mes + Git: git://git.savannah.gnu.org/mes.git + +2018-07-22 Jan Nieuwenhuizen + + build: Support uninstall. + * uninstall.sh: New file. + * GNUmakefile (uninstall): Use it in new target. + + build: Generate gcc-mesboot-graph from .dot. + * doc/images/gcc-mesboot-graph.dot: New file. + * doc/images/gcc-mesboot-graph.png: Remove. + * GNUmakefile (${top_builddest}doc/images/gcc-mesboot-graph.png): New target. + * configure (det): Add check. + * build-aux/export.make: Export it. + * doc/mes.texi (The Mes Bootstrap Process): Describe new recipe. + * guix/git/mes.scm (mes): Add graphvis dependency. + +2018-07-22 Jan Nieuwenhuizen + + guix: Refactor package setup. + Next to the convenient environment setup and package build from git + + guix environment -l .guix.scm + guix build -f .guix.scm + + we can now also build other included packages + + GUIX_PACKAGE_PATH=guix guix build mes@0.17 + GUIX_PACKAGE_PATH=guix guix build nyacc@0.80.42 + + * guix/git/mes.scm: Move from .guix.scm, make a module. + * .guix.scm: Move from guix.scm, use it. + * build-aux/manifest.scm: Update location. + * build-aux/pre-inst-env.in: Support it. + * configure: Check for guix. + * build-aux/export.make: Export GUIX. + * GNUmakefile (update-hash): New target. + +2018-07-22 Jan Nieuwenhuizen + + build: Respect --docdir. + * configure: Respect --docdir. + +2018-07-21 Jan Nieuwenhuizen + + build: Support --srcdir build. + * build-aux/config.sh: New file. + * build-aux/trace.sh: New file. + * build-aux/GNUmakefile.in: New file. + * configure: Support srcdir configure. + * GNUmakefile: Support srcdir build. + * build-aux/build-cc.sh: Likewise. + * build-aux/build-cc32.sh: Likewise. + * build-aux/build-guile.sh: Likewise. + * build-aux/build-mes.sh: Likewise. + * build-aux/cc-mes.sh: Likewise. + * build-aux/cc.sh: Likewise. + * build-aux/cc32-mes.sh: Likewise. + * build-aux/check-mes.sh: Likewise. + * build-aux/check-mescc.sh: Likewise. + * build-aux/export.make: Likewise. + * build-aux/mes-snarf.scm: Likewise. + * build-aux/pre-inst-env.in: Likewise. + * build-aux/test.sh: Likewise. + * build.sh: Likewise. + * check.sh: Likewise. + * install.sh: Likewise. + * module/mescc/mescc.scm: Likewise. + * scripts/mescc.in: Likewise. + * src/mes.c: Likewise. + +2018-06-30 Jan Nieuwenhuizen + + core: Prepare for the Hurd. + * lib/linux/libc.c: Move from lib/linux.c. + * lib/linux/gcc.c: Move from lib/linux-gcc.c. + * lib/linux/gnu.c: Move from lib/linux+gnu.c. + * lib/linux/libc.c: Move from lib/linux.c. + * lib/linux/mes.c: Move from lib/linux-mes.c. + * lib/linux/mini-gcc.c: Move from lib/linux-mini-gcc.c. + * lib/linux/mini-mes.c: Move from lib/linux-mini-mes.c. + * lib/linux/tcc.c: Move from lib/linux+tcc.c. + * lib/linux/crt0.c: Move from lib/crt0.c. + * lib/linux/crt1.c: Move from lib/crt1.c. + * lib/linux/crti.c: Move from lib/crti.c. + * lib/linux/crtn.c: Move from lib/crtn.c. + * build-aux/build-cc.sh: Update for new layout. + * build-aux/build-cc32.sh: Likewise. + * build-aux/build-mes.sh: Likewise. + * build-aux/cc-mes.sh: Likewise. + * build-aux/cc32-mes.sh: Likewise. + * lib/string/argz-count.c: New file taken from GNU C Library, + relicensed. + * lib/string/argz-extract.c: New file taken from GNU C Library, + relicensed. + * include/argz.h: New file. + * lib/string/memcpy.c: New file, extract from libc. + * lib/assert/assert.c: Likewise. + +2018-07-21 Jan Nieuwenhuizen + + build: Install ChangeLog. + * ChangeLog: New file. + * install.sh: Regenerate it, install it. + + build: Refactor configure. + * configure: Refactor. + +2018-07-21 Jan Nieuwenhuizen + + build: Prepare for autoconfiscation. + Make build system more in alignment with how autotools work. This + will make transition easier. + + * mes/module/mes/boot-0.scm.in: Update from module/mes/boot-0.scm. + * scripts/mescc.in: Update from scripts/mescc. + * build-aux/pre-inst-env.in: New file. + * build-aux/cc-mes.sh: Use pre-inst-env. + * configure: Substitute new .in files. + * install.sh: Do not substitute mescc, boot-0.scm. + +2018-07-21 Jan Nieuwenhuizen + + core: Document number->string INT-MIN failure with gcc-x86. + * src/mes.c (scm_symbol_arch, scm_symbol_compiler): New symbol. + (mes_symbols, bload_env): Add them. + (scm_symbol_gnuc, scm_symbol_mesc): Remove. + * scaffold/mini-mes.c: Likewise. + * module/mes/mes-0.scm (%arch, %compiler): New public variable. + * tests/srfi-13.test: Expect number->string INT-MIN to fail for + gcc-x86. + * HACKING (Bugs): Add it. + + build: Refactor mes tests. + * build-aux/check-mes.sh: New file. + * check.sh: Invoke it for Guile and Mes. + * .gitignore: Ignore new guile logs. + * mes/module/mes/boot-0.scm: Ignore some standard Guile options. + * module/mes/test.scm: Make a module. + * tests/base.test: Use it. Make a module, support invoking with Guile + or Mes alike. + * tests/boot.test: Likewise. + * tests/catch.test: Likewise. + * tests/closure.test: Likewise. + * tests/cwv.test: Likewise. + * tests/display.test: Likewise. + * tests/fluids.test: Likewise. + * tests/getopt-long.test: Likewise. + * tests/guile.test: Likewise. + * tests/let-syntax.test: Likewise. + * tests/let.test: Likewise. + * tests/match.test: Likewise. + * tests/math.test: Likewise. + * tests/module.test: Likewise. + * tests/optargs.test: Likewise. + * tests/peg.test: Likewise. + * tests/pmatch.test: Likewise. + * tests/psyntax.test: Likewise. + * tests/quasiquote.test: Likewise. + * tests/read.test: Likewise. + * tests/scm.test: Likewise. + * tests/srfi-13.test: Likewise. + * tests/srfi-14.test: Likewise. + * tests/srfi-16.test: Likewise. + * tests/srfi-1.test: Likewise. + * tests/srfi-43.test: Likewise. + * tests/srfi-9.test: Likewise. + * tests/syntax.test: Likewise. + * tests/vector.test: Likewise. + * tests/base.test-guile: Remove. + * tests/boot.test-guile: Remove. + * tests/catch.test-guile: Remove. + * tests/closure.test-guile: Remove. + * tests/cwv.test-guile: Remove. + * tests/display.test-guile: Remove. + * tests/fluids.test-guile: Remove. + * tests/getopt-long.test-guile: Remove. + * tests/guile.test-guile: Remove. + * tests/let-syntax.test-guile: Remove. + * tests/let.test-guile: Remove. + * tests/match.test-guile: Remove. + * tests/math.test-guile: Remove. + * tests/module.test-guile: Remove. + * tests/optargs.test-guile: Remove. + * tests/peg.test-guile: Remove. + * tests/pmatch.test-guile: Remove. + * tests/psyntax.test-guile: Remove. + * tests/quasiquote.test-guile: Remove. + * tests/read.test-guile: Remove. + * tests/scm.test-guile: Remove. + * tests/srfi-13.test-guile: Remove. + * tests/srfi-14.test-guile: Remove. + * tests/srfi-16.test-guile: Remove. + * tests/srfi-1.test-guile: Remove. + * tests/srfi-43.test-guile: Remove. + * tests/srfi-9.test-guile: Remove. + * tests/syntax.test-guile: Remove. + * tests/vector.test-guile: Remove. + + build: all-go: Support V=0,1,2. + * build-aux/build-guile.sh: Support V=0,1,2. + + build: Fix for handling missing makeinfo. + * configure (main): Update MAKEINFO. + + mescc: fwrite: Increase debug tracing threshold. + * lib/libc+tcc.c (fwrite): Increase debug tracing threshold. + + mescc: Add proper includes. + * include/libmes.h (__mes_debug): Declare. + * lib/libtcc1.c: Add proper includes. + * lib/linux+gnu.c: Likewise. + * lib/m4.c: Likewise. + + core: Resurrect gcc support. + * src/mes.c (MES_ARENA)[POSIX]: Default to 100000000. + + scaffold: Add proper includes. + * scaffold/argv.c: Add proper includes. + * scaffold/malloc.c: Likewise. + * scaffold/micro-mes.c: Likewise. + * scaffold/mini-mes.c: Likewise. + * scaffold/tiny-mes.c: Likewise. + + build: cc32: Silence warnings. + * build-aux/build-cc32.sh (CC32_CFLAGS): Silence warnings. + + build: Resurrect i686-unknown-linux-gnu-gcc support. + * build-aux/build-cc32.sh (CC32_CFLAGS): Add -fno-builtin. Resurrects + i686-unknown-linux-gnu-gcc. + + mescc: Support verbose int types. + * module/mescc/compile.scm (i386:type-alist): Support verbose int types. + + build: Separate Mes and Guile modules. + * scaffold/gc.scm: Move from guile/gc.scm. + * guile/: Remove. + * module/language/paren.mes: Remove. + * mes/module/mes/base.mes: Move from module/mes/. + * mes/module/mes/boot-0.scm: Likewise. + * mes/module/mes/boot-00.scm: Likewise. + * mes/module/mes/boot-01.scm: Likewise. + * mes/module/mes/boot-02.scm: Likewise. + * mes/module/mes/catch.mes: Likewise. + * mes/module/mes/display.mes: Likewise. + * mes/module/mes/fluids.mes: Likewise. + * mes/module/mes/getopt-long.mes: Likewise. + * mes/module/mes/guile.mes: Likewise. + * mes/module/mes/lalr.mes: Likewise. + * mes/module/mes/lalr.scm: Likewise. + * mes/module/mes/let.mes: Likewise. + * mes/module/mes/match.mes: Likewise. + * mes/module/mes/match.scm: Likewise. + * mes/module/mes/mescc.mes: Likewise. + * mes/module/mes/misc.mes: Likewise. + * mes/module/mes/module.mes: Likewise. + * mes/module/mes/optargs.mes: Likewise. + * mes/module/mes/optargs.scm: Likewise. + * mes/module/mes/peg.mes: Likewise. + * mes/module/mes/peg/cache.scm: Likewise. + * mes/module/mes/peg/codegen.scm: Likewise. + * mes/module/mes/peg/simplify-tree.scm: Likewise. + * mes/module/mes/peg/string-peg.scm: Likewise. + * mes/module/mes/peg/using-parsers.scm: Likewise. + * mes/module/mes/pmatch.mes: Likewise. + * mes/module/mes/pmatch.scm: Likewise. + * mes/module/mes/posix.mes: Likewise. + * mes/module/mes/pretty-print.mes: Likewise. + * mes/module/mes/pretty-print.scm: Likewise. + * mes/module/mes/psyntax-0.mes: Likewise. + * mes/module/mes/psyntax-1.mes: Likewise. + * mes/module/mes/psyntax.mes: Likewise. + * mes/module/mes/psyntax.pp: Likewise. + * mes/module/mes/psyntax.ss: Likewise. + * mes/module/mes/quasiquote.mes: Likewise. + * mes/module/mes/quasisyntax.mes: Likewise. + * mes/module/mes/quasisyntax.scm: Likewise. + * mes/module/mes/repl.mes: Likewise. + * mes/module/mes/scm.mes: Likewise. + * mes/module/mes/syntax.mes: Likewise. + * mes/module/mes/syntax.scm: Likewise. + * mes/module/mes/test.mes: Likewise. + * mes/module/mes/tiny-0.mes: Likewise. + * mes/module/mes/type-0.mes: Likewise. + * mes/module/mescc/M1.mes: Likewise. + * mes/module/mescc/as.mes: Likewise. + * mes/module/mescc/bytevectors.mes: Likewise. + * mes/module/mescc/compile.mes: Likewise. + * mes/module/mescc/i386/as.mes: Likewise. + * mes/module/mescc/info.mes: Likewise. + * mes/module/mescc/mescc.mes: Likewise. + * mes/module/mescc/preprocess.mes: Likewise. + * mes/module/nyacc/lalr.mes: Likewise. + * mes/module/nyacc/lang/c99/cpp.mes: Likewise. + * mes/module/nyacc/lang/c99/parser.mes: Likewise. + * mes/module/nyacc/lang/c99/pprint.mes: Likewise. + * mes/module/nyacc/lang/calc/parser.mes: Likewise. + * mes/module/nyacc/lang/util.mes: Likewise. + * mes/module/nyacc/lex.mes: Likewise. + * mes/module/nyacc/parse.mes: Likewise. + * mes/module/nyacc/util.mes: Likewise. + * mes/module/rnrs/arithmetic/bitwise.mes: Likewise. + * mes/module/srfi/srfi-0.mes: Likewise. + * mes/module/srfi/srfi-1.mes: Likewise. + * mes/module/srfi/srfi-1.scm: Likewise. + * mes/module/srfi/srfi-13.mes: Likewise. + * mes/module/srfi/srfi-14.mes: Likewise. + * mes/module/srfi/srfi-16.mes: Likewise. + * mes/module/srfi/srfi-16.scm: Likewise. + * mes/module/srfi/srfi-26.mes: Likewise. + * mes/module/srfi/srfi-26.scm: Likewise. + * mes/module/srfi/srfi-43.mes: Likewise. + * mes/module/srfi/srfi-8.mes: Likewise. + * mes/module/srfi/srfi-9.mes: Likewise. + * mes/module/srfi/srfi-9/gnu.mes: Likewise. + * mes/module/sxml/xpath.mes: Likewise. + * mes/module/sxml/xpath.scm: Likewise. + * module/mes/mes-0.scm: Likewise. + * build-aux/build-guile.sh: Update for new layout. + * build-aux/build-mes.sh: Likewise. + * build-aux/check-boot.sh: Likewise. + * build-aux/check-mescc.sh: Likewise. + * install.sh: Likewise. + * scaffold/boot/51-module.scm: Likewise. + * scaffold/boot/52-define-module.scm: Likewise. + * scripts/mescc: Likewise. + * src/mes.c: Likewise. + * tests/base.test-guile: Likewise. + * tests/boot.test: Likewise. + * tests/srfi-9.test: Likewise. + * mes/include: New symlink. + * mes/lib: New symlink. + * AUTHORS: Update file names. + + core: typo: Remove trailing 1. + * include/alloca.h: typo: Remove trailing 1. + +2018-07-20 Jan Nieuwenhuizen + + Add missing copyright header. Thanks, Mike! + * guile/gc.c: Add missing copyright header. Thanks, Mike! + +2018-07-19 Jan Nieuwenhuizen + + guix: mes: Updatee to 0.16.1. + * guix.scm (mes): Update to 0.16.1. + (mes.git): Likewise. + +2018-07-12 Jan Nieuwenhuizen + + Release 0.16.1 + * configure (VERSION): Bump to 0.16.1. + + doc: Release update. + * BOOTSTRAP: Update. + * HACKING: Update. + * INSTALL: Update. + * NEWS: Update. + * README: Update. + * scaffold/tests/23-pointer.c: Add (janneke) to copyright line. + * doc/images/gcc-mesboot-graph.png: Update. + * doc/mes.texi (The Mes Bootstrap Process): Describe update. + + build: setup-mes.sh: Cater for Debian/stretch too. Thanks, pdewacht! + * build-aux/setup-mes.sh: Cater for Debian/stretch too. Thanks, + pdewacht! + + core: Fix segfault on Debian/strectch. Thanks, pdewacht! + * src/posix.c (execl_): Typo in initialization. Fixes segfault on + Debian/strectch. Thanks, pdewacht! + + doc: Add html, pdf. + * GNUmakefile (html, pdf): New target. + * .gitignore: Ignore html, pdf targets. + + doc: Remarks from Rutger. + * doc/mes.texi: Remarks from Rutger. + + doc: Further work. + * doc/images/gcc-mesboot-graph.png: New file. + * install.sh: Install it. + * doc/mes.texi (The Mes Bootstrap Process): Show it. + (Bootstrapping): Add missing Mes direntry. + (Running the Test Suites): Fix example. + Fix typos. + + build: Handle CFLAGS, CPPFLAGS for Debian. + + build: Have configure create a git archive. + * configure: Create git archive if necessary. + + build: Use GNU style lower case directory configure variable naming. + * GNUmakefile: Use GNU style lower case directory configure variable naming. + * HACKING: Likewise. + * INSTALL: Likewise. + * build-aux/build-cc.sh: Likewise. + * build-aux/build-cc32.sh: Likewise. + * build-aux/cc-mes.sh: Likewise. + * build-aux/cc.sh: Likewise. + * build-aux/cc32-mes.sh: Likewise. + * build-aux/export.make: Likewise. + * build-aux/setup-mes.sh: Likewise. + * build.sh: Likewise. + * check.sh: Likewise. + * configure: Likewise. + * doc/mes.texi: Likewise. + * install.sh: Likewise. + * scripts/mescc: Likewise. + + build: Support Debian build, install. + * scripts/mescc: Support Debian build, install. + * lib/libmes.c (fdgetc): Allow Nyacc/ungetc conflict. + * build-aux/export.make (ARCH): Export. + * build-aux/build-mes.sh: Disable full build for non-bootstrap + x86-only. + * check.sh (total): Use bash to invoke build-aux/check-mescc.sh. + * build-aux/build-guile.sh (SCM_FILES): Support guile-2.0. + * module/mes/guile.scm (guile-2.0): Support guile-2.0. + * build-aux/build-mes.sh: Use bash. + * build-aux/setup-mes.sh: New file. + + mescc: Be sure to exit upon system* failure. + * module/mescc/mescc.scm (assert-system*): New function. + (M1->hex2, hex2->elf, M1->blood-elf): Use it. + + build: Support $DESTDIR. + * build-aux/export.make: export DESTDIR. + * install.sh: Support $DESTDIR. + + build: Build and install manual pages. + * build-aux/export.make: New file. + * GNUmakefile (man): New target. + (doc): Depend on man. + include build-aux/export.make, remove exports. + * guix.scm (mes): Add dependency on help2man. + * configure: Check for help2man. + * install.sh: Install manual pages if built. + + doc: Initial version. + * doc/mes.texi: New file. + * doc/fdl-1.3.texi: New file. + * AUTHORS: Mention it. + * GNUmakefile (doc, info, install-info): New targets. + * install.sh: Install info if available. + * guix: (mes): Add texinfo to native-inputs. + * configure: Check for makeinfo. + +2018-06-26 Jan Nieuwenhuizen + + guix: mescc-tools: Update to 0.5.1. + * guix.scm (mescc-tools): Update to 0.5.1. + + guix: Oops, fix nyacc-for-mes checksum. Thanks, pdewacht! + * guix.scm (nyacc-for-mes): Fix checksum. + + guix: Update mes to 0.16. + * guix.scm (mes): Update to 0.16. + (mes.git): Likewise. + +2018-06-25 Jan Nieuwenhuizen + + Release 0.16. + * configure (VERSION): Bump to 0.16. + +2018-06-24 Jan Nieuwenhuizen + + doc: Release update. + * BOOTSTRAP: Update. + * HACKING: Update. + * INSTALL: Update. + * NEWS: Update. + * README: Update. + * doc/ANNOUNCE-0.16: New file. + +2018-06-26 Jan Nieuwenhuizen + + core: Fix compile warnings. + * lib/libmes.c: Fix warning. + * src/posix.c (execl_): Fix warning, add debug printing. + + core: execl_: Allow 1000 arguments. + * src/posix.c (execl_): Allow 1000 arguments. + +2018-06-24 Jan Nieuwenhuizen + + mescc: Support binutils 2.10.1: strrchr: Stop at start of string. + * lib/libc+tcc.c (strrchr): Stop at start of string. + * scaffold/tests/88-strrchr.c: Test it. + * build-aux/check-mescc.sh (tests): Run it. + + build: Support tcc, create tinycc-seed with tcc. + * configure: check for tcc. + * build-aux/cc32-mes.sh: Rename from cc-mes-gcc.sh. Support + tcc. Update users. + * build-aux/build-cc32-mes.sh: Rename from build-mes-gcc.sh. Update users. + * GNUmakefile (mes-tcc): New target. + * .gitignore: Ignore mes-tcc arch output. + * lib/crt1.c (_start): Add "rm" constraint so satisfy tcc. + * lib/linux-gcc.c (_sys_call, _sys_call1 _sys_call2 _sys_call3): Likewise. + +2018-06-20 Jan Nieuwenhuizen + + mescc: Support glibc-2.2.5: header tweaks. + * include/sys/types.h [__PTRDIFF_T]: Extra guard for ptrdiff_t. + [__SIZE_T]: Extra guard for size_t. + * include/stdlib.h: Include alloca; remove alloca prototype, + * include/errno.h: Add E2BIG. + +2018-06-24 Jan Nieuwenhuizen + + mescc: Support binutils 2.20.1: vfprint, vsprintf: %llx. + * lib/libc+tcc.c (vfprintf, vsprintf): Handle %%llx. Print error: + should we skip another int, va_arg a long long? + +2018-06-20 Jan Nieuwenhuizen + + mescc: Support binutils 2.14: vfprint, vsprintf: %12.10d. + * lib/libc+tcc.c (vfprintf, vsprintf): Handle %12.10d. + * scaffold/tests/70-printf.c: Test it. + +2018-06-19 Jan Nieuwenhuizen + + mescc: Support gnu toolchain: libtcc1. + * lib/libtcc1.c: New file. + * lib/libc+tcc-gcc.c: Remove libtcc1 stubs. + + mescc: Support binutils-2.20.1a: header tweaks. + * include/signal.h: Include sys/types.h; remove type declaration copies. + * include/stdarg.h: Likewise. + * include/stdio.h: Likewise. + * include/stdlib.h: Likewise. + * include/unistd.h: Likewise. + +2018-06-18 Jan Nieuwenhuizen + + mescc: Support Tinycc 0.9.27: Drop dlclose, dlopen. + * lib/libc+tcc.c (dlclose, dlopen): Remove. + * include/dlfcn.h (RTLD_DEFAULT): Add. + + core: Resurrect dump-tiny. + * src/reader.c (dump): Resurrect dump-tiny. + + core: Resurrect loading of boot-0.32-mo. + +2018-06-17 Jan Nieuwenhuizen + + mescc: Support binutils 2.25: fseek: Add debug printing. + * lib/libc+tcc.c (fseek): Add debug printing. + + mescc: Tinycc support: bcopy: Do not return void. + * lib/m4.c (bcopy): Do not return void. Helps tcc. + + mescc: Support binutils 2.25: memcmp: Support size 0. + * lib/libc+tcc.c (memcmp): Support size 0. + + mescc: Support binutils 2.25: vsscanf: Skip `l'. + * lib/libc+tcc.c (vsscanf): Skip `l'. + + mescc: Debugging oops. + * lib/libc.c (__mes_debug): Oops, wrong direction. + +2018-06-16 Jan Nieuwenhuizen + + mescc: Support binutils 2.15a: fread: read ungetc'd chars too. + * lib/libmes.c (_ungetc_fd): New variable. + (fdgetc): Use it. + (_fdungetc_p): New function. + * lib/libc+tcc.c (_fungetc_p): New function. + * lib/libc+tcc.c (fread): Use it to read ungetc'd chars too. + + mescc: Add another fopen test. + * scaffold/tests/98-fopen.c: New file. + * build-aux/check-mescc.sh (tests): Add it. + * AUTHORS: Mention it. + + mescc: Add fopen test. + * scaffold/tests/97-fopen.c: New file. + * build-aux/check-mescc.sh (tests): Run it. + * include/unistd.h (link): Declare. + + mescc: Support binutils-2.14: fopen: Return 0 upon failure. + * lib/libc+tcc.c (fopen): Return 0 upon failure. + +2018-06-16 Jan Nieuwenhuizen + + mescc: Update elf32-header for linux-4.17. + Previously, our binaries showed this + + $ readelf -s scaffold/main.mes-out + There are 2 program headers, starting at offset 64 + + Program Headers: + Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align + LOAD 0x000000 0x01000000 0x01000000 0x0557c 0x0557c RWE 0x1 + LOAD 0x000000 0x01000000 0x01000000 0x0557c 0x0557c RWE 0x1 + + Section to Segment mapping: + Segment Sections... + 00 .text .data + 01 .text .data + + Linux-4.17 refuses to run this and says + + Uhuuh, elf segment at 0000000001000000 requested but the memory is mapped already + Segmentation fault + + * lib/x86-mes/elf32-header.hex2: Remove unused data program header. + +2018-06-16 Jan Nieuwenhuizen + + build: make seed: Update mescc-tools-seed too. + + guix: mescc-tools: Update to 0.5. + * guix.scm (mescc-tools): Update to 0.5. + + Update for mescc-tools-0.5. + * build-aux/build-mes.sh (HEX2FLAGS): Remove = from flags. + * build.sh (HEX2FLAGS): Likewise. + * module/mescc/mescc.scm (hex2->elf): Likewise. + +2018-06-11 Jan Nieuwenhuizen + + guix: Update mes to 0.15. + * guix.scm (mes): Update to 0.15. + (mes.git): Likewise. + +2018-06-10 Jan Nieuwenhuizen + + Release 0.15. + * configure (VERSION): Bump to 0.15. + +2018-05-23 Jan Nieuwenhuizen + + doc: Release udpate. + * BOOTSTRAP: Update. + * HACKING: Update. + * NEWS: Update. + * README: Update. + * doc/ANNOUNCE-0.15: New file. + +2018-06-12 Jan Nieuwenhuizen + + build: Resurrect non-bootstrap build. + * configure (parse-opts): Support mixing VAR=VALUE --prefix=PREFIX. + * guix.scm (mes): Remove setting PREFIX in make-flags. + * install.sh: Cater for Guix's setting read-only of scripts/diff.scm. + +2018-06-10 Jan Nieuwenhuizen + + mescc: Support less-patched tcc/gcc: Add crti and crtn. + * lib/crt0.c[__MESC__]: Support MesCC. + * lib/crti.c: New file. + * lib/crtn.c: New file. + * build-aux/build-mes-gcc.sh: Build them. + + mescc: Refactor debug and stub printing. + * lib/libc.c (__mes_debug): New function. Use it for debug printing + and in stubs throughout. + + mescc: Support binutils-2.30: fopen fix. + * lib/libc+tcc.c (fopen): Set O_APPEND for 'a'. + +2018-06-09 Jan Nieuwenhuizen + + mescc: Support binutils-2.30. + * lib/binutils.c (raise, strdup): New function. + (mbstowcs): New stub. + * include/fcntl.h (O_APPEND, FD_CLOEXEC): New define. + + mescc: Support binutils-2.10.1: Stubs set errno to 0. + + mescc: Silence some stubs. + * lib/libc+tcc.c: [!NOISY_FLOATS, !NOISY_TIMES]: Silence stubs. + * lib/gcc.c: Likewise. + * lib/binutils.c: Likewise. + +2018-06-10 Jan Nieuwenhuizen + + mescc: Add debug printing: fopen, fwrite. + * lib/libc+tcc.c (fopen, fwrite)[MESC_DEBUG]: Print debug info. + + mescc: Support binutils-2.10.1: opentype `r+'. + * lib/libc+tcc.c (fopen): Support opentype `r+'. + +2018-06-08 Jan Nieuwenhuizen + + mescc: syscall: return only ever error -1, set errno. + +2018-06-07 Jan Nieuwenhuizen + + mescc: Support gcc-2.95: Add getpwnam stub. + * lib/gcc.c (getpwnam): New stub. + + mescc: Support gcc-3.0: Implement alarm, setitimer. + + mescc: Support gcc-3.0: Implement atexit. + + mescc: Support gcc-3.0: Implement dup2, fcntl, getrusage. + * include/sys/resource.h: New file. + * lib/linux+gnu.c (fcntl, dup2, getrusage): New function. + * lib/binutils.c (fcntl): Remove stub. + + mescc: Support gcc-3.2: Implement getuid, getgid. + * lib/linux+gnu.c (getuid, getdid): New function. + * lib/binutils.c (getuid, getdid): Remove stub. + + mescc: Support gcc-3.2: Reset errno. + * lib/linux-gcc.c (_sys_call, _sys_call1, _sys_call2, _sys_call3): + Reset errno. + * lib/linux-mes.c (__sys_call, __sys_call1, __sys_call2 , + __sys_call3): Rename from _*. + (_sys_call, _sys_call1, _sys_call2, _sys_call3): New function. + Reset errno. + +2018-06-06 Jan Nieuwenhuizen + + mescc: Support gcc-3.2: Implement integer strto*. + * lib/libc+tcc.c (strtoll, strtoul): Call strtoul. + + mescc: Support gcc-3.2: Add getpid, signal. + * lib/linux+gnu.c (getpid, signal): New function. + * include/signal.h: Declare signal. + * include/unistd.h: Declare getpid. + * scaffold/tests/95-signal.c: Test it. + * build-aux/check-mescc.sh (tests): Run it. + + mescc: Support gcc-3.4.0: *printf: Support `%n'. + * lib/libc+tcc.c (vfprintf, vsprintf): Support `%n'. For Gcc 3.4.0. + * scaffold/tests/70-printf.c: Test it. + + mescc: Support gcc-3.4.0: alloca. + * lib/alloca.c: New file. + * AUTHORS: Mention it. + * lib/libc+gnu.c: Add it. + * include/stdlib.h: Declare alloca. + + mescc: Support gcc-3.4.0: unsetenv. + * lib/gcc.c (unsetenv): New function. + + mescc: Support gcc-3.2: Add __divdi3, __moddi3 stubs. + * lib/gcc.c (__divdi3, __moddi3): New stubs. + + mescc: Support gcc-3.2: puts with newline. + * lib/libc-mini.c (oputs): Rename from puts. + (puts): New function: Add newline. + + mescc: Support binutils-2.10.1. + xx + +2018-06-03 Jan Nieuwenhuizen + + mescc: Support glibc-1.06.4. + * lib/glibc.c: New file. + * lib/libc+gnu.c: Include it. + +2018-06-02 Jan Nieuwenhuizen + + mescc: Support gcc-2.6.3. + * TODO + +2018-05-30 Jan Nieuwenhuizen + + mescc: Support binutils-2.5.1. + * include/stdint.h: #undef types before typedef'ing them. + * include/sys/types.h: Likewise. + * include/string.h (NULL): New define. + * include/stdio.h (BUFSIZ): New define. + +2018-06-01 Jan Nieuwenhuizen + + tests: Remove tinycc-imported non-free grep test. + * scaffold/tinycc/46_grep.c: Remove. + * scaffold/tinycc/46_grep.expect: Remove. + +2018-05-30 Jan Nieuwenhuizen + + mescc: Implement fflush, sscanf, vsscanf. + * lib/libc+tcc.c (vsscanf): New function. + (sscanf): Use it. + (fflush): Remove stub notice; we have no buffering. + * include/stdarg.h: Declare it. + * scaffold/tests/87-sscanf.c: Test it. + * build-aux/check-mescc.sh (tests): Run it. + +2018-05-29 Jan Nieuwenhuizen + + build: Use arch-dir. + * lib/x86-mes: Move from stage0. + * build-aux/build-cc.sh: Create libraries in lib/gcc. Update users. + * build-aux/build-mes.sh: Create libraries in lib/x86-mes. Update users. + * build-aux/build-mes-gcc.sh: Rename from build-mlibc.sh. Create + libraries in lib/x86-mes-gcc. Update callers. + * build-aux/cc-mes-gcc.sh: Rename from cc-mlibc.sh. Update callers. + + mlibc: Implement strstr. + * lib/libc+tcc.c (_memmem, memmem): New function. Import from GNU + LilyPond. + (strstr): Implement using memmem. + * include/string.h (_memmem, memmem): Declare. + * AUTHORS: Add Han-Wen Nienhuys. + + mlibc: Implement ftell, fseek. + * lib/libc+tcc.c (ftell, fseek): Implement. + + mlibc: Cleanup. + +2018-05-27 Jan Nieuwenhuizen + + mescc: m4 support: WIP + +2018-05-28 Jan Nieuwenhuizen + + core: Refactor boot-0 loading. + * src/mes.c (load_boot): New function. + (load_env): Use it. + +2018-05-26 Jan Nieuwenhuizen + + mescc: Out of the box Geiser support. + * .dir-locals.el: New file. Out of the box Geiser support for mescc. + +2018-05-25 Jan Nieuwenhuizen + + mescc: Posixify interface. + * module/mescc/compile.mes: Move from language/c99/compiler.mes. + * module/mescc: New module.. + * module/mescc/M1.scm: Move from mes/M1.mes. + * module/mescc/as.scm: Likewise. + * module/mescc/bytevectors.scm: Likewise. + * module/mescc/mescc.scm: New file. + * scripts/mescc: Update to new layout and posixy interface. + * GNUmakefile: Likewise. + * build-aux/build-cc.sh: Likewise. + * build-aux/build-guile.sh: Likewise. + * build-aux/build-mes.sh: Likewise. + * build-aux/build-mlibc.sh: Likewise. + * build-aux/cc-mes.sh: Likewise. + * build-aux/cc-mlibc.sh: Likewise. + * build-aux/cc.sh: Likewise. + * build-aux/check-mescc.sh: Likewise. + * build-aux/test.sh: Likewise. + * build.sh: Likewise. + * .gitignore: Update for posixy extensions. + +2018-05-26 Jan Nieuwenhuizen + + mes: Add drop, drop-right. + * module/srfi/srfi-1.mes (drop, drop-right): New function. + +2018-05-25 Jan Nieuwenhuizen + + Revert "fork/exec: debug." + This reverts commit f0315ac0d9acd66a30dbb192334f443459b7ed16. + + fork/exec: debug. + +2018-05-24 Jan Nieuwenhuizen + + core: Support fork, waitpid, execve. + * stage0/x86.M1 (SYS_fork, SYS_waitpid, SYS_execve): New define. + * lib/linux-gcc.c (fork, waitpid, execve): New function. + * lib/linux-mes.c (fork, waitpid, execve): New function. + * lib/libc.c (wait): New function. + * include/unistd.h (fork, execve): Declare. + * include/sys/wait.h (waitpid, wait): Declare. + * module/mes/posix.mes (search-path, execlp, system*, waitpid): New function. + * src/posix.c (primitive_fork, execl): New function. + +2018-05-27 Jan Nieuwenhuizen + + mescc: Oops, alignment. + * module/mes/M1.mes (object->M1): Oops, alignment: only add alignment + when not aligned. + +2018-05-26 Jeremiah Orians + + mescc: Add fopen. + * lib/libc+tcc.c (fopen)[!POSIX]: Remove stub. + * lib/libc.c (fopen)[!POSIX]: New function. + * AUTHORS: Add Jeremiah. + +2018-05-27 Jan Nieuwenhuizen + + build: Remove function declarations from M1. + * module/language/c99/compiler.mes (info->object): Remove function + declarations. + + build: Check for mes-seed, tinycc-seed. + * configure: Check for guile-tools, mes-seed, tinycc-seed. Bugfix: + Add cwd to load path. + +2018-05-22 Jan Nieuwenhuizen + + guix: mes: Update to 0.14. + * guix.scm (mes): Update to 0.14. + (mes.git): Likewise. + +2018-05-23 Jan Nieuwenhuizen + + guix: Add nyacc-for-mes. + * guix.scm (nyacc-for-mes): New variable. + +2018-05-20 Jan Nieuwenhuizen + + Release 0.14. + * configure (VERSION): Bump to 0.14. + +2018-05-19 Jan Nieuwenhuizen + + doc: Release udpate. + * BOOTSTRAP: Update. + * HACKING: Update. + * NEWS: Update. + * README: Update. + * doc/ANNOUNCE-0.14: New file. + +2018-05-22 Jan Nieuwenhuizen + + mescc: Tinycc support: Handle short struct initializer. + * module/language/c99/compiler.mes (array-init-element->data): Handle + short struct initializer. + +2018-05-21 Jan Nieuwenhuizen + + mescc: Align global data. + * module/mes/M1.mes (object->M1): Align globals. + +2018-05-20 Jan Nieuwenhuizen + + mescc: Tinycc support: strncpy. + * lib/libc+tcc.c (strncpy): New function. + * scaffold/tests/86-strncpy.c: Test it. + * build-aux/check-mescc.sh (tests): Run it. + * build-aux/cc-mlibc.sh (LIBC): Acknowlegde. + * build-aux/test.sh (LIBC): Export it. + +2018-05-21 Jan Nieuwenhuizen + + tinycc: Add stubs: __fixdfdi, __fixxfdi, __fixsfdi. + * lib/libc+tcc-gcc.c (__fixdfdi, __fixxfdi, __fixsfdi): New stub. + +2018-05-20 Jan Nieuwenhuizen + + tinycc: Add stubs: __floatundixf __fixunsxfdi. + * lib/libc+tcc-gcc.c (__floatundixf, __fixunsxfdi): New stub. + + mescc: Tinycc support: workaround for tcc; this breaks: Structured type with char or short on heap. + * module/language/c99/compiler.mes (int->bv): Always use 32bit byte + vector. + +2018-05-19 Jan Nieuwenhuizen + + mescc: Tinycc support: Structured type with char or short on heap. + * module/language/c99/compiler.mes (int->bv): New function. + (init->data): Use it. Add parameter. Update callers. + (array-init->data): Add type parmeter. + (array-init-element->data): Likewise. + * module/mes/bytevectors.mes (bytevector-u8-set!): New function. + * module/mes/bytevectors.scm (mes): Export it. + * module/mes/as.mes (int->bv8): New function. + +2018-05-20 Jan Nieuwenhuizen + + mescc: Fix size ERROR message. + * module/language/c99/compiler.mes (expr->accu): Fix size ERROR message. + + mescc: Fix itoa. + * lib/libc.c (itoa): Use function-static buffer. Increase to 12 to + handle INT_MIN. + (itoab): Likewise. + +2018-05-19 Jan Nieuwenhuizen + + mescc: Tinycc support: Export nested struct definitions. + * module/language/c99/compiler.mes (struct-field): Support nested, + named and anonymous enums. + (field->info): New function. + (type->info): Use it to reap nestedly defined enums, structs, unions. + (decl->info): Likewise. + * scaffold/tests/t.c: Test it. + + mescc: Tinycc support: Unsigned comparison. + * stage0/x86.M1 (ja32, jae32, jb32, jbe32): New macro. + * module/mes/as-i386.mes (i386:jump-a, i386:jump-ae, i386:jump-b, + i386:jump-be): Use it in new function. + * module/mes/as-i386.scm: Export them. + * module/language/c99/compiler.mes (test-jump-label->info): Use them to + support unsigned comparison. + * scaffold/tests/7s-unsigned-compare.c: Test it. + * build-aux/check-mescc.sh (tests): Run it. + +2018-05-18 Jan Nieuwenhuizen + + mescc: Tinycc support: Char and short sign extend. + * module/mes/as-i386.mes (i386:accu*n->local, i386:byte-accu->local+n, + i386:word-accu->local+n): Remove. + (i386:byte-accu, i386:signed-byte-accu, i386:word-accu, + i386:signed-word-accu): New function. + * module/mes/as-i386.scm: Export them. + * module/language/c99/compiler.mes (accu->local+n-text): Simplify. + (mem->accu, convert-accu): New function. + (expr->accu): Use them. + * stage0/x86.M1 (mov____%al,0x32(%ebp), mov____%al,0x8(%ebp), + mov____%ax,0x32(%ebp), mov____%ax,0x8(%ebp), movzbl_0x32(%ebp),%eax, + movzbl_0x8(%ebp),%eax, movzwl_0x32(%ebp),%eax, + movzwl_0x8(%ebp),%eax): Deprecate. + * scaffold/tests/7r-sign-extend.c: Test it. + * build-aux/check-mescc.sh (tests): Run it. + +2018-05-21 Jan Nieuwenhuizen + + mes: string->number: Support upper case hex. + * module/mes/scm.mes (string->number): Support upper case hex. + +2018-05-18 Jan Nieuwenhuizen + + mescc: Tinycc support: Minimal float support. + * lib/libc+tcc.c (ldexp, strtod, strtof, strtold): New stub. + * include/math.h (ldexp): Declare. + * include/stdlib.h (strtod, strtof, strtold): Declare. + * module/mes/scm.mes (string->number): Minimal float support. + (inexact->exact): New function. + * tests/math.test ("string->number"): Test it. + * module/language/c99/compiler.mes (ast->type): Handle float type. + (type->info): Likewise. + (cstring->int): Rename from cstring->number. Update callers. + (cstring->float): New function. + (expr->accu): Use it. + +2018-05-17 Jan Nieuwenhuizen + + mescc: Tinycc support: Switch with heterogeneous body, non-last default. + * module/language/c99/compiler.mes (switch->info): New function. + (ast->info): Use it for switch. + (clause->info, statements->clauses): Remove. + * scaffold/tests/44-switch.c (default_first): Test it. + +2018-05-20 Jan Nieuwenhuizen + + mes: Support fold 3. + * module/srfi/srfi-1.mes (fold): Support fold 3. + +2018-05-14 Jan Nieuwenhuizen + + mescc: Tinycc support: Compound strings as function argument. + * module/language/c99/compiler.mes (expr->accu): Handle compound + strings as function argument. + * module/mes/M1.mes (object->M1): Call error when string not found. + * scaffold/tests/t.c: Test it. + + mescc: Tinycc support: Update some tests. + + mescc: Tinycc support: Add __lshrdi3, __ashldi3, __ashrdi3. + * lib/libc+tcc-gcc.c (__lshrdi3, __ashldi3, __ashrdi3): New function. + + mescc: Tinycc support: Fix sizeof interesting expressions. + * module/language/c99/compiler.mes (ast->type): Return type for + sizeof-expr, sizeof-type. + * scaffold/tests/85-sizeof.c: Test it. + +2018-05-13 Jan Nieuwenhuizen + + mescc: Tinycc support: Support bit-fields. + * module/language/c99/compiler.mes (struct->fields): Support bit-fields. + (ast->type): + (field-field): + (field-offset): + (expr->accu*): + (expr->accu): + (struct-field): + (->size): + * module/language/c99/info.scm (): New type. + * stage0/x86.M1 (and____$i32,%eax, and____(%edx),%eax, + mov____(%edx),%eax, or____(%edx),%eax): New macro. + * module/mes/as-i386.mes (i386:base-mem->accu): Use + it. + (i386:accu-and, i386:accu-and-base-mem, i386:accu-or-base-mem): New + function. + * module/mes/as-i386.scm: Export them. + * scaffold/tests/7q-bit-field.c: Test it. + * build-aux/check-mescc.sh (tests): Run it. + +2018-05-12 Jan Nieuwenhuizen + + mescc: Tinycc support: Anonymous string array. + * module/language/c99/compiler.mes (global->info): Anonymous string + array. + (local->info): Likewise. + (array-init->string): Support array of char. + (init-local): Likewise. + (->size): Fix for array. + * scaffold/tests/4a-char-array.c: Test it. + * build-aux/check-mescc.sh (tests): Run it. + + mescc: Tinycc support: sizeof: Bugfix for c-array. + * module/language/c99/compiler.mes (->size): Bugfix for c-array. + * scaffold/tests/85-sizeof.c: Test it. + +2018-05-11 Jan Nieuwenhuizen + + mescc: Tinycc support: Implement ((struct foo*)p)->bar. + * module/language/c99/compiler.mes (expr->accu*): + * scaffold/tests/7p-struct-cast.c: Test it. + * build-aux/check-mescc.sh (tests): Run it. + +2018-05-13 Jan Nieuwenhuizen + + mescc: Tinycc support: Implement (foo--)->bar and permutations. + * module/language/c99/info.scm (clone): Add post field. + (make): Handle post parameter. + * module/language/c99/compiler.mes (clone): Handle post parameter. + (expr->accu*): Set it to support foo--/foo--. + (expr->accu): Read it to support foo--/foo--. + * scaffold/tests/7o-struct-pre-post.c: Test it. + * build-aux/check-mescc.sh: Run it. + +2018-05-11 Jan Nieuwenhuizen + + mescc: Tinycc support: Function addresses. + + mescc: Tinycc support: Numeric constant expressions. + + mescc: Tinycc support: Function variables. + + mescc: Tinycc support: Pointer typedefs. + + mescc: Tinycc support: Array typedefs. + + mescc: Tinycc support: Sizeof struct destruct. + + mescc: Tinycc support: Anonymous union initialization. + + mescc: Tinycc support: Fix for ?-operator. + + mescc: Tinycc support: Valued function assign. + +2018-05-10 Jan Nieuwenhuizen + + mescc: Refactor type system: WIP + * module/language/c99/compiler.mes (): WIP + * module/language/c99/info.scm (): WIP + + mescc: Refactor type system: struct/enum fields: (name . ). + * module/language/c99/compiler.mes (struct-field): Refactor. + (field:name): Update. + (field:pointer): Update. + (field:size): Update. + (field:type): Remove. + (->size): New function. + +2018-05-09 Jan Nieuwenhuizen + + mescc: Refactor type system: introduce , , . + * module/language/c99/info.scm (, , ): New type. + * module/language/c99/compiler.mes (ast->): New function. + (ast-type): Use it. + +2018-05-05 Jan Nieuwenhuizen + + mescc: Refactor variable declaration. + * module/language/c99/compiler.mes (decl->info): Refactor. + +2018-05-04 Jan Nieuwenhuizen + + mescc: Handle sizeof expression. + * module/language/c99/compiler.mes (expr->accu): Handle sizeof + expression. + * scaffold/tests/85-sizeof.c: Test it. + + mescc: Handle struct field lists. + * module/language/c99/compiler.mes (struct-field): Return list of + fields. Update callers. + * scaffold/tests/84-struct-field-list.c: Test it. + * build-aux/check-mescc.sh (tests): Add it. + + mescc: Support heterogeneous variable init. + * module/language/c99/compiler.mes (decl->info): Support heterogeneous + variable init. + * scaffold/tests/83-heterogenoous-init.c: Test it. + * build-aux/check-mescc.sh (tests): Add it. + + mescc: Handle (Skip) global static. + * module/language/c99/compiler.mes (decl->info): Handle (Skip) global + static. + * scaffold/tests/48-global-static.c: Test it. + + mescc: Support functions in expression. + * module/language/c99/info.scm (): New type. + * module/language/c99/compiler.mes (ast->type): Support function. + (expr->type-size): Likewise. + (expr->type): Likewise. + (expr->accu*): Likewise. + (function->info): Create . + * module/mes/M1.mes (object->M1): Grok . + * scaffold/tests/47-function-expression.c: Test it. + * build-aux/check-mescc.sh: Add it. + + mescc: Support function-static variables. + * module/language/c99/info.scm (make): Add statics field. + (): Add name and function fields. Update callers. + (global->string): New function. + * module/mes/M1.mes (object->M1): Update. + * module/language/c99/compiler.mes (clone): Add statics field. + (ident->accu): For , use global in text (WAS: name). + (ident-address->accu): Likewise. + (ident-address->base): Likewise. + (decl-local->info): New function. + (decl->info): New function. + (ast->info): Use them. + (function->info): Keep globals in object (WAS: global:value only). + * scaffold/tests/46-function-static.c: Test it. + +2018-05-20 Jan Nieuwenhuizen + + mes: Add unfold. + * module/srfi/srfi-1.mes (unfold): New function. + + mes: Add const. + * module/mes/scm.mes (const): New function. + * tests/scm.test ("const"): Test it. + +2018-05-16 Jan Nieuwenhuizen + + core: Add logxor. + * src/math.c (logxor): New function. + * tests/math.test ("logxor"): Test it. + + mes: string-join: Support optional delimiter, support grammar. + * module/srfi/srfi-13.mes (string-join): Support optional infix and + grammar. + * tests/srfi-13.test ("string-join"): Test it. + + core: reader: Support binary #b101. + * src/reader.c (reader_read_binary): New function. + (reader_read_hash): Use it. + * tests/scm.test ("binary"): Test it. + +2018-05-04 Jan Nieuwenhuizen + + mes: Support srfi-9-gnu. + * module/srfi/srfi-9/gnu.mes: New file. Support srfi-9-gnu. + * tests/srfi-9.test: Test it. + * tests/srfi-9.test-guile: + +2018-04-28 Jan Nieuwenhuizen + + core: Have core:eval expand macros. + * src/mes.c (core:eval-expand): Remove + (core:eval-expanded): New variable. + (eval_apply): Have core:eval expand macros; core:eval-expanded evals + expanded sexps. + +2018-04-29 Jan Nieuwenhuizen + + Revert "core: Remove pmatch-car, pmatch-cdr hack." + This reverts commit be1e84624ea4a158173f34af923e3c4a3793412a. + +2018-04-28 Jan Nieuwenhuizen + + core: Remove pmatch-car, pmatch-cdr hack. + * src/mes.c (scm_vm_eval_pmatch_car, scm_vm_eval_pmatch_cdr): Remove + (eval_apply): Remove cell_vm_eval_pmatch_car, + cell_vm_eval_pmatch_cdr hack. + (mes_symbols): Remove cell_symbol_pmatch_car, cell_symbol_pmatch_cdr. + * scaffold/mini-mes.c: Likewise. + * module/mes/guile.scm (mes): Remove pmatch-car, pmatch-cdr. + * module/mes/pmatch.scm (ppat): Use plain car, cdr. + +2018-05-23 Jan Nieuwenhuizen + + build: Do not assume /bin/sh, basename/dirname. + * install.sh: Do not assume /bin/sh, basename/dirname. + * scripts/diff.scm: Likewise. + + build: Build mini-libc and libc+tcc-gcc too. + * include/getopt.h[__GNUC__ && POSIX]: Only use include_next. + * lib/libc+tcc-gcc.c[POSIX](longjmp, setjmp, __udivdi3, __umoddi3): + Remove. + * build-aux/build-cc.sh: Build mini-libc-gcc and libc+tcc-gcc too. + * build-aux/build-mlibc.sh: Build mini-libc-gcc too. + + boot: Bugfix for diff on mes. + * scripts/diff.scm (diff-files): Rename from diff; Avoids name clash + with module to allow using -e '()' hack. + + build: Install naive diff. + * scripts/diff.scm: Move from build-aux. + * install.sh: Install it. + * build-aux/tests.sh: Update location. + +2018-05-20 Jan Nieuwenhuizen + + build: Update configure. + * configure: Update. + +2018-05-02 Jan Nieuwenhuizen + + mes: Remove debugging. + * module/mes/module.mes (mes-load-module-env): Remove debugging. + +2018-05-10 Jan Nieuwenhuizen + + build: Use ../mes-seed/refresh.sh, ../tinycc-seed/refresh.sh. + * GNUmakefile (seed): Use ../mes-seed/refresh.sh, ../tinycc-seed/refresh.sh. + +2018-05-04 Jan Nieuwenhuizen + + mescc: Guile fixes. + * scripts/mescc: Set GODIR. Add module as expression to Mes + invokation. Remove explicit (second) call to main. + +2018-05-18 Jan Nieuwenhuizen + + test: Use diff -ub for tinycc tests. + * build-aux/diff.scm: Support -b. + * build-aux/test.sh: Use it. + +2018-05-04 Jan Nieuwenhuizen + + check: Also test with i686-unknown-linux-gnu-gcc. + * check.sh (CC32): New variable. + * build-aux/test.sh: Also test with CC32.o + +2018-05-06 Jan Nieuwenhuizen + + build: configure: Handle VAR=VALUE. Update help. + * configure: Handle VAR=VALUE. Update help. + +2018-05-03 Jan Nieuwenhuizen + + build: Fixes for Debian and /bin/sh == dash. + * build.sh: Use separate export stanzas. Use command -v (WAS: type + -p). Fixes sh, /bin/sh == dash. + * build-aux/build-cc.sh: Likewise. + * build-aux/build-guile.sh: Likewise. + * build-aux/build-mes.sh: Likewise. + * build-aux/build-mlibc.sh: Likewise. + * build-aux/cc-mes.sh: Likewise. + * build-aux/check-mescc.sh: Likewise. + * check.sh: Likewise. + * install.sh: Likewise. + * scripts/mescc: Likewise. + + build: Rebuild after build from seed. + * build-aux/build-mes.sh: Rebuild after build from seed. + + mescc: Use file-name as global prefix. + * module/mes/M1.mes (object->M1): Add file-name parameter. + +2018-05-02 Jan Nieuwenhuizen + + core: Fixes for int-max, int-min. + * src/math.c (greater_p): Fix INT_MAX > 0. + (less_p): Fix INT_MIN < 0. + * tests/math.test ("< INT-MIN"): Test it. + ("< INT-MAX"): + ("> INT-MAX"): + ("> INT-MAX 0"): + ("> INT-MIN"): + * tests/srfi-13.test ("string->number INT-MAX"): Test it. + ("string->number INT-MIN"): + ("number->string INT-MAX"): + ("number->string INT-MIN"): + * scaffold/tests/60-math.c (test): Test it. + + mescc: Fix dumping of strings > M1_STRING_MAX. + * module/mes/M1.mes (object->M1): Skip opening quote. + +2018-04-30 Jan Nieuwenhuizen + + Revert "core: length: Check parameter." + This reverts commit 1f52ed35c66febcce16e06868e803a39be7eda41. + + core: length: Check parameter. + * src/mes.c (length): Check parameter. + +2018-05-01 Jan Nieuwenhuizen + + test: enable all tests, use expect count, add tinycc tests. + * build-aux/check-mescc.sh (tests): Add tinycc tests. + * build-aux/diff.scm: Naive diff for tinycc tests. + * build-aux/test.sh: Run diff when .expect found. + +2018-04-29 Jan Nieuwenhuizen + + build: Simplify, drop make.scm experiment. + * build.sh: Rewrite. + * build-aux/build-cc.sh: New file. + * build-aux/build-mes.sh: New file. + * build-aux/build-mlibc.sh: New file. + * build-aux/cc.sh: New file. + * build-aux/cc-mes.sh: New file. + * build-aux/cc-mlibc.sh: New file. + * install.sh: Update. + * make.scm: Remove. + * guile/guix/make.scm: Remove. + * guile/guix/records.scm: Remove. + * guile/guix/shell-utilsg.scm: Remove. + +2018-04-30 Jan Nieuwenhuizen + + core: Use length__. + * src/mes.c (check_formals): Use length__. + +2018-04-29 Jan Nieuwenhuizen + + mes-snarf: Support running with Mes. + * build-aux/mes-snarf.scm: Support running with Mes. + + mes: Support -C and -L for Guile compatibility. + * module/mes/boot-0.scm): Support -C and -L for Guile compatibility. + + mes: Support -e,--main option. + * module/mes/boot-0.scm: Support -e,--main option. + + mes: Upgrade Guile module support. + * module/mes/boot-0.scm (define-module): New macro with minimal Guile support. + (use-modules): New macro. + + mes: Add srfi-8. + * module/srfi/srfi-8.mes: New file. + + mes: string-join: Handle empty list. + * module/mes/boot-0.scm (string-join): Handle empty list. + + mes: Add basename. + * module/mes/posix.mes (basename): New function. + + mes: Add delete-duplicates. + * module/srfi/srfi-1.mes (delete-duplicates): New function. + + mes: filter-map: Handle two lists. + * module/srfi/srfi-1.mes (filter-map): Handle two lists, add error + when called with three or more. + + mes: Add string-replace. + * module/srfi/srfi-13.mes (string-replace): New function. + * tests/srfi-13.test ("string-replace"): Test it. + + mes: Add string-map. + * module/srfi/srfi-13.mes (string-map): New function. + * tests/srfi-13.test ("string-map"): Test it. + + mes: Add string-trim, string-trim-right, string-trim-both. + * module/srfi/srfi-13.mes (string-trim, string-trimn-right, + string-trim-both): New function. + * tests/srfi-13.test ("string-trim"): Test it. + ("string-trim-right"): + ("string-trim-both"): + + mes: Add string-contains. + * module/srfi/srfi-13.mes (string-contains): New function. + * tests/srfi-13.test ("string-contains"): Test it. + ("string-contains not"): + + mes: string-drop: Error on negative droppings. + * module/srfi/srfi-13.mes (string-drop, string-take, + string-drop-right): Error on negative droppings. + * tests/srfi-13.test ("string-drop"): Test it. + + core: reverse!: Handle empty list. + * src/mes.c (reverse_x_): Handle empty list. + * tests/scm.test ("reverse! ()"): Test it. + + core: Add string ports. + * src/mes.c (type_t): Add TPORT. + (scm_type_port): New symbol. + (PORT): New macro. + (MAKE_STRING_PORT): New macro. + (eval_apply): Handle string ports in primitive-load. + (mes_symbols): Add scm_type_port. + * src/posix.c (peekchar): Handle string ports. + (readchar): New function. Replace all getchar callers. + (unreadchar): Likewise. + * module/mes/type-0 (port?): New function. + * module/mes/guile.mes (with-input-from-file): Rewrite. + (open-input-string): Remove. + * module/mes/guile.scm (guile): Update cell types. + * src/gc.c (gc_loop): Support TPORT. + * src/lib.c (display_helper): Support TPORT. + * module/mes/display.mes (display): Support TPORT. + + mes: assq, assoc-ref: Handle non-A-LISTs. + * src/mes.c (assq): Return #f if A-LIST is not a list. + * module/mes/scm.mes (assoc): Likewise. + + core: Use single definition rule for cell-type. + * src/mes.c (scm_type_char, scm_type_closure, scm_type_continuation, + scm_type_function, scm_type_keyword, scm_type_macro, + scm_type_number, scm_type_pair, scm_type_ref, scm_type_special, + scm_type_string, scm_type_symbol, scm_type_values, + scm_type_variable, scm_type_vector): New symbol. + (mes_symbols): Add them. + * module/mes/type-0.mes (, , , + , , , , + , , , , + , , , , + , + + guix: Update mes to 0.13. + * guix.scm (mes): Update to 0.13. + (mes.git): Likewise. + +2018-04-27 Jan Nieuwenhuizen + + Release 0.13. + * configure (VERSION): Bump to 0.13. + +2018-04-21 Jan Nieuwenhuizen + + doc: Release udpate. + * BOOTSTRAP: Update. + * HACKING: Update. + * NEWS: Update. + * README: Update. + * doc/ANNOUNCE-0.13: New file. + +2018-04-27 Jan Nieuwenhuizen + + mescc: Merge mescc.mes and mescc.scm. + * scripts/mescc: New file. + * scripts/mescc.mes: Remove. + * guile/mescc.scm: Remove. + * guile/guix/make.scm (CC.mescc): Update. + * install.sh (TINYCC_SEED): Update. + * make.scm (bootstrap?): Update. + * test.sh (MES): Update. + * check-boot.sh: Use $GUILE to allow running without Guile. + + core: Add chmod. + * src/posix.c (chmod_): New function. + +2018-04-25 Jan Nieuwenhuizen + + core: jam-scaper/garbage-collector: Use only one arena. + * src/mes.c (ARENA_SIZE): Lower to 200000. + (MES_MAX_ARENA): Bump to 300000000. + (JAM_SIZE): New global. + (make_cell__): Remove ARENA assert. + (gc_init_cells): Alloc ARENA_SIZE + JAM_SIZE. + (mes_symbols): Do not init news. + (gc_init_news): Remove. + (main): Initialize JAM_SIZE, consider MES_JAM environment variable. + * src/gc.c (gc_init_news): Move from mes.c. Start at g_free. + (gc_flip): Do not flip to g_news, instead copy g_news to cells. + (gc_up_arena): Realloc to ARENA_SIZE + JAM_SIZE. + (gc_): Init news. Only up arena if g_news is safe. + +2018-04-24 Jan Nieuwenhuizen + + mescc: Create less garbage when dumping M1. + * module/mes/M1.mes (display-join): New function. + * (object->M1): Use it. + + core: last_pair: Move to core. + * src/lib.c (last_pair): New function. + * module/mes/scm.mes (last-pair): Remove. + + core: equal2_p: Add short-circuit and eliminate tail call. + * src/lib.c (equal2_p): Add short-circuit and eliminate tail call. + +2018-04-23 Jan Nieuwenhuizen + + mescc: Use display for dumping M1. + * module/mes/M1.mes (object->M1): Use display for dumping M1. + +2018-04-22 Jan Nieuwenhuizen + + mes: Guile-like command-line interface. + * module/mes/boot-0.scm (tty?): Guile-like command-line interface. + * scripts/repl.mes: Remove. + * scripts/mescc.mes: Update. + * tests/*.test: Update scripts. + * module/mes/repl.mes (repl): Add ,quit. + + mes: getopt-long: Support stop-at-first-non-option. + * module/mes/getopt-long.scm (process-options): Fix parsing `-'. Add + parameter: stop-at-first-non-option. + (getopt-long): Add keyword parameter #:stop-at-first-non-option. + + mes: Add isatty?. + * src/posix.c (isatty_p): New function. + + mlibc: Add isatty. + * lib/libc.c (isatty): New function. + * include/unistd.h: Declare it. + + mlibc: Add ioctl. + * stage0/x86.M1 (SYS_ioctl): New define. + * lib/linux-mes.c (ioctl): New syscall. + * lib/linux-gcc.c (ioctl): New syscall. + * include/sys/ioctl.h: New file. + +2018-04-10 Jan Nieuwenhuizen + + core: Compile minimal mes with MES_MINI=1. + * src/mes.c: Compile minimal mes with MES_MINI=1. + +2018-04-21 Jan Nieuwenhuizen + + core; reader_read_string: Support escaped characters. + * src/reader.c (reader_read_string): Support escaped characters. + +2018-04-22 Jan Nieuwenhuizen + + Revert "mescc: Use core:write." + This reverts commit d88e31dfec3158a830c32f9f732b052cfccac6eb. + +2018-04-21 Jan Nieuwenhuizen + + mescc: Use core:write. + * scripts/mescc.mes (source->ast): Use core:write. + +2018-04-22 Jan Nieuwenhuizen + + mes: display: Display escaped characters. + * module/mes/display.mes (display): Display escaped characters. + +2018-04-21 Jan Nieuwenhuizen + + core: display_helper: Display escaped characters. + * src/lib.c (display_helper): Display escaped characters. + + mes: Resurrect macros in repl. + * src/mes.c (scm_vm_begin_expand): Rename to core:begin-expand. + (eval_apply): Expose it. + * module/mes/repl.mes (repl): Use it to resurrect macros. + + core: Fixes for garbage collector/jam scraper. + * src/gc.c (gc_loop): Do not relocate car of TCLOSURE, TCONTINUATION. + Check for TBROKEN_HEART. + * src/mes.c (make_closure_): Set car to 0. + (check_apply): Check for TBROKEN_HEART. Fixes reporting artificial + out-of-memory error. + (eval_apply): Likewise. + * src/vector.c (vector_entry): Only copy TCHAR and TNUMBER. + + core: drop global_p from variable. + * src/mes (struct scm): Remove field global_p. + (VARIABLE_GLOBAL_P): Remove. + (make_variable_): Remove global_p parameter. Update callers. + * src/lib.c (display_helper): Drop VARIABLE_GLOBAL_P support. + + core: Reenable full printing of lists. + * src/lib.c (display_helper): Reenable full printing of lists. + +2018-04-20 Jan Nieuwenhuizen + + core: append2, append_reverse, reverse, reverse!: Create less garbage. + * src/mes.c (append_reverse): New function. + (reverse_x_): New function. + (append2): Use them to create less garbage. + * module/mes/scm.mes (reverse): Create less garbage. + * module/srfi/srfi-1.mes (reverse!): Rewrite, use core:reverse!. + (append-reverse): Remove. + + core: vector_to_list: Create less garbage. + * src/vector.c (vector_to_list): Create less garbage. + + core: Optimize vector-map, vector-for-each. + * module/srfi/srfi-43.mes (vector-map): Optimize. + (vector-for-each): Optimize. + * tests/srfi-43.test: New file. + * tests/srfi-43.test-guile: New file. + * check.sh (tests): Add it. + * make.scm (mes-tests): Add it. + +2018-04-18 Jan Nieuwenhuizen + + Revert "build-32.sh" + This reverts commit ace8b6f1b52de58c9ab404ed13234f397dac6bdc. + +2018-04-16 Jan Nieuwenhuizen + + build-32.sh + +2018-04-14 Jan Nieuwenhuizen + + core: Cleanup make_cell, remove tmp cells. + * src/mes.c (make_cell__): New function. + (make_cell_): Use it. + (length__): New function. + (tmp, tmp_num, tmp_num2, tmp_num_, tmp_num2_, make_tmps): Remove. + Update callers to use make_cell__ directly. + * src/vector.c (make_vector__): New function. + (make_vector_): Use it. + +2018-04-21 Jan Nieuwenhuizen + + Revert "mlibc: Use memmove in realloc." + This reverts commit f47a21e3cb4814c4a30d10ff59e5c947441725e9. + +2018-04-15 Jan Nieuwenhuizen + + mlibc: Use memmove in realloc. + * src/libc.c (memmove): New function. + (realloc): Use it. + * src/libc+tcc.c (memmove): Remove. + + mes: Add char-whitespace? + * module/srfi/srfi-14.mes (char-whitespace?): New function. + +2018-04-14 Jan Nieuwenhuizen + + mes: Move base-0.mes int boot-0.scm. + * module/mes/boot-02.scm: New file, rename from boot-0.scm. + * module/mes/boot-0.scm: Add base-0.mes. + * module/mes/base-0.mes: Remove. + +2018-04-13 Jan Nieuwenhuizen + + mes: Unify mlibc-gcc and mes builds. + * make.scm (bin.gcc): Remove stray slash. + * src/mes.c: Unify mlibc-gcc and mes builds. + (gc_init_cells): + (gc_init_news): + (bload_env): + * src/reader.c (reader_read_character): + (reader_read_string): + +2018-04-12 Jan Nieuwenhuizen + + core: Remove local variables from gc. + * src/gc.c (gl_loop): Remove local variables. + + core: Listen to MES_SAFETY environment variable. + + core: Remove local variables from eval/apply. + * src/mes.c (eval_apply): Move all variables to global scope. + + core: Remove MesCC reminder. + +2018-04-11 Jan Nieuwenhuizen + + core: Update default memory settings. + * src/mes.c (MAX_ARENA_SIZE)[__MESC__]: Set to maximum 172100000. + +2018-04-09 Jan Nieuwenhuizen + + core: Tune debug printing. + * src/mes.c: Tune debug printing. + * src/gc.c: Likewise. + * module/mes/guile.mes: Likewise. + * HACKING: Describe it. + + core: Rewrite reader to create less garbage. + * src/reader.c (reader_read_line_comment): Rename from read_line_comment. + (reader_identifier_p): New function. + (reader_end_of_word_p): New function. + (reader_read_identifier_or_number): New function. + (reader_read_sexp_): Rewrite. Update callers. + (reader_read_list): Rewrite. + (reader_lookup_): Remove. + +2018-04-10 Jan Nieuwenhuizen + + core: Add isspace. + * include/ctype.h (isspace): Declare. + * lib/libc.c (isspace): New function. + +2018-04-08 Jan Nieuwenhuizen + + core: Rewrite string reader. + * src/reader.c (reader_read_string): Rewrite, create much less + garbage. + (append_char): Remove. + + install: Fix prefix confusion. + * install.sh: Substitute @PREFIX@ with MES_PREFIX. + * scripts/mescc.mes: Grok PREFIX as MES_PREFIX. + + guix.scm: Update mes to 0.12. + * guix.scm (mes, mes.git): Update to 0.12. + +2018-04-06 Jan Nieuwenhuizen + + Release 0.12. + * configure (VERSION): Bump to 0.12. + +2017-11-21 Jan Nieuwenhuizen + + doc: Release udpate. + * HACKING: Update. + * INSTALL: Update. + * NEWS: Update. + * README: Update. + * doc/ANNOUNCE-0.12: New file. + * throughout: (janneke) coming out. + +2018-04-08 Jan Nieuwenhuizen + + guix.scm: Update mescc-tools to 0.4. + * guix.scm (mescc-tools): Update to 0.4. + + core: Workaround for mescc. + * src/mes.c (eval_apply)[__MESC__]: Add reminder for macro_p, global_p. + +2018-04-07 Jan Nieuwenhuizen + + build: Remove scripts/mes symlink. + + mes: Add string-fold, string-fold-right. + * module/srfi/srfi-13.mes (string-fold, string-fold-right): New + function. + * tests/srfi-13.test ("string-fold"): Test it. + ("string-fold-right"): Test it. + + mes: Allow tick as part of identifier. + * src/reader.c (reader_read_sexp_): Do not treat tick as special. + + mescc: Remove debugging. + * module/language/c99/compiler.mes: Remove debugging. + + mescc: No comments in M1 when running on Mes. + * module/language/c99/compiler.mes (ast-comment): If mes?, return nil. + + mescc: Trace globals. + * module/language/c99/compiler.mes (mescc:trace): New function. Use + throughout. + + Revert "core: Add member." + This reverts commit 921686a0a3b06281f1804d04e6d4a0344dda507a. + + core: Add member. + * src/lib.c (member): New function. + * module/mes/scm.mes (member): Remove. + + mescc: trace M1 dumping. + * module/language/c99/compiler.mes (info->object): Add tracing. + * module/mes/M1.mes (object->M1): Add tracing. + + Revert "guix: Update nyacc to 0.83.31." + This reverts commit 624b85d6b1dd876542f7ad342d6beb8a92408397. + + guix: Update nyacc to 0.83.31. + * guix.scm (nyacc): Update to 0.83.31. + + mescc: Have Nyacc trace functions while parsing. + * guile/mescc.scm (main): Set NYACC_TRACE. + * scripts/mescc.mes (main): Set NYACC_TRACE. + + mes: Add setenv. + * src/posix.c (setenv_): New function. + * tests/base.test ("setenv, getenv"): Test it. + + core: Add setenv. + * lib/libc.c (setenv): New function. + * include/stdlib.h (setenv): Declare it. + * scaffold/tests/61-array.c (test): Test it. + +2018-04-05 Jan Nieuwenhuizen + + guix: Add manifest. + * build-aux/manifest.scm: New file. + + guix: Update Nyacc to 0.80.42. + * guix.scm (nyacc): Update to 0.80.42. + +2018-04-06 Jan Nieuwenhuizen + + mescc: Also print `parsing: input' when using -E. + * module/language/c99/compiler.mes (c99-input->ast): Print `parsing: + input'. + (c99-input->info): Remove that. + +2018-04-05 Jan Nieuwenhuizen + + core: Cleanup reader. + * src/reader.c (reader_read_sexp_): Rename from reader_read_word_. Cleanup. + (read_hash): Cleanup. + + mes: Cleanup formatting. + + core: Add equal2?. + * src/lib.c (equal2_p): New function. + * module/mes/base.mes (equal2?): Remove. + + core: Add memq. + * lib/mes.c (memq): New function. + * module/mes/scm.mes (memq): Remove. + + mes: Remove duplicate memq. + * module/mes/base-0.mes (memq): Remove. + +2017-12-09 Jan Nieuwenhuizen + + mes: Single environment lookup for variables, SICP chapter 3. + * src/mes.c (t): Add TVARIABLE. + (scm_vm_eval_deref): New vm special. + (make_vref_): New internal function. + (eval_apply): WIP: replace symbols with their variable reference. + * src/gc.c (gc_loop): Handle TVARIABLE. + * src/lib.c (display_helper): Handle TVARIABLE. + * module/mes/type-0.mes (): New variable. + (cell:type-alist): Add it. + (variable?): New function. + * module/mes/display.mes (display): Handle . + +2018-04-03 Jan Nieuwenhuizen + + core: Remove override hook for read-input-file. + * src/reader.c (read_input_file_env): Remove override hook for + read-input-file. + +2018-03-04 Jan Nieuwenhuizen + + mes: Iterative recursive macro expand. + * src/mes.c (eval_apply): Iterative recursive macro expand. + * src/posix.c (set_current_input_port): Return previous port. + * module/mes/catch.mes (%eh): Use core:display. + * module/mes/display.mes (display-cut, display-cut2): Move macro + definitions to toplevel. + +2018-04-04 Jan Nieuwenhuizen + + guix: records.scm: update from upstream. + * guile/guix/records.scm: Update from upstream. + +2018-01-25 Jan Nieuwenhuizen + + mes: Add incremental test suite. + * check-boot.sh: New file. + * check.sh: Invoke it. + * module/srfi/srfi-16.mes: New file. + * scaffold/boot/00-zero.scm: New file. + * scaffold/boot/01-true.scm: New file. + * scaffold/boot/02-symbol.scm: New file. + * scaffold/boot/03-string.scm: New file. + * scaffold/boot/04-cons.scm: New file. + * scaffold/boot/04-quote.scm: New file. + * scaffold/boot/05-list.scm: New file. + * scaffold/boot/06-tick.scm: New file. + * scaffold/boot/07-if.scm: New file. + * scaffold/boot/08-if-if.scm: New file. + * scaffold/boot/10-cons.scm: New file. + * scaffold/boot/11-list.scm: New file. + * scaffold/boot/12-car.scm: New file. + * scaffold/boot/13-cdr.scm: New file. + * scaffold/boot/14-exit.scm: New file. + * scaffold/boot/15-display.scm: New file. + * scaffold/boot/16-if-eq-quote.scm: New file. + * scaffold/boot/20-define-quote.scm: New file. + * scaffold/boot/20-define-quoted.scm: New file. + * scaffold/boot/20-define.scm: New file. + * scaffold/boot/21-define-procedure.scm: New file. + * scaffold/boot/22-define-procedure-2.scm: New file. + * scaffold/boot/23-begin.scm: New file. + * scaffold/boot/24-begin-define.scm: New file. + * scaffold/boot/25-begin-define-2.scm: New file. + * scaffold/boot/26-begin-define-later.scm: New file. + * scaffold/boot/26-define-define.scm: New file. + * scaffold/boot/27-lambda-define.scm: New file. + * scaffold/boot/28-define-define.scm: New file. + * scaffold/boot/29-lambda-define.scm: New file. + * scaffold/boot/2a-lambda-lambda.scm: New file. + * scaffold/boot/2b-define-lambda.scm: New file. + * scaffold/boot/2c-define-lambda-recurse.scm: New file. + * scaffold/boot/2d-define-lambda-set.scm: New file. + * scaffold/boot/2e-define-second.scm: New file. + * scaffold/boot/30-capture.scm: New file. + * scaffold/boot/31-capture-define.scm: New file. + * scaffold/boot/32-capture-modify-close.scm: New file. + * scaffold/boot/33-procedure-override-close.scm: New file. + * scaffold/boot/34-cdr-override-close.scm: New file. + * scaffold/boot/35-closure-modify.scm: New file. + * scaffold/boot/36-closure-override.scm: New file. + * scaffold/boot/37-closure-lambda.scm: New file. + * scaffold/boot/38-simple-format.scm: New file. + * scaffold/boot/40-define-macro.scm: New file. + * scaffold/boot/41-when.scm: New file. + * scaffold/boot/42-if-when.scm: New file. + * scaffold/boot/43-or.scm: New file. + * scaffold/boot/44-or-if.scm: New file. + * scaffold/boot/45-pass-if.scm: New file. + * scaffold/boot/46-report.scm: New file. + * scaffold/boot/47-pass-if-eq.scm: New file. + * scaffold/boot/48-let.scm: New file. + * scaffold/boot/49-macro-override.scm: New file. + * scaffold/boot/4a-define-macro-define-macro.scm: New file. + * scaffold/boot/4b-define-macro-define.scm: New file. + * scaffold/boot/4c-quasiquote.scm: New file. + * scaffold/boot/50-primitive-load.scm: New file. + * scaffold/boot/51-module.scm: New file. + * scaffold/boot/52-define-module.scm: New file. + * scaffold/boot/53-closure-display.scm: New file. + * scaffold/boot/60-let-syntax.scm: New file. + * scaffold/boot/closure.scm: New file. + * scaffold/boot/compose.scm: New file. + * scaffold/boot/data/bar.mes: New file. + * scaffold/boot/data/i.scm: New file. + * scaffold/boot/data/module.mes: New file. + * scaffold/boot/foo.scm: New file. + * scaffold/boot/lambda-star.scm: New file. + * scaffold/boot/vector.scm: New file. + * tests/boot.test: New file. + * tests/boot.test-guile: New file. + * tests/srfi-16.test: New file. + * tests/srfi-16.test-guile: New file. + +2018-02-03 Jan Nieuwenhuizen + + mes: Boot from MES_BOOT, boot-0.scm. + * src/mes.c (load_env): Softcode loading of boot-0.scm from + environment variabl MES_BOOT. + * module/mes/boot-00.scm: New file. + * module/mes/boot-01.scm: New file. + * module/mes/boot-0.scm: Rename from read-0.mes. + * module/mes/module.mes: New file. + +2018-03-04 Jan Nieuwenhuizen + + build: Add -fno-stack-protector for debian. + * guile/guix/make.scm (%C32-FLAGS): Add -fno-stack-protector. + +2018-01-06 Jan Nieuwenhuizen + + mes: reader: reader_ prefix; read/write char/string in core. + * src/posix.c (peek_char, read_char, read_string, unread_char, write_char): New function. + * src/reader.c: Use reader_ prefix. + + r# bootstrappable.org + +2018-01-25 Jan Nieuwenhuizen + + mes: More informative error reporting for number asserts. + * src/math.c (assert_number): New function. Update assert () users. + +2018-01-27 Jan Nieuwenhuizen + + guile: Resurrect eval/apply in scheme. + * guile/mes.mes (eval-expand): Short-circuit make-closure. + * guile/mes.scm (environment): Update. + +2018-02-03 Jan Nieuwenhuizen + + mes: simple-format: support ~A, ~S. + * module/mes/display.scm (simple-format): support ~A, ~S. + +2018-01-22 Jan Nieuwenhuizen + + core: Display and write string and char compliance. + * src/lib.c (display_helper): Display and write char and string compliance. + +2018-02-03 Jan Nieuwenhuizen + + mes: display: Support keyword. + * src/lib.c (display_helper): Support keyword. + +2018-01-12 Jan Nieuwenhuizen + + mes: display: vector. + * src/lib.c (display_helper): Display vector. + +2018-01-14 Jan Nieuwenhuizen + + mes: display: closure names. + * src/lib.c (display_helper): Display closure names. + +2018-01-07 Jan Nieuwenhuizen + + mes: Rename make-vector to core:make-vector. + * src/vector.c (make_vector_): Rename from make_vector. Update callers. + + mes: Better error reporting. + * src/lib.c (write_error_): New function. + * src/mes.c (error, check_apply): Use it. + (append2, set_car_x): Upon error, call error (WAS: assert). + + Revert "mes: un-defmacro optargs. WIP" + This reverts commit 5da527c540dc0e1481a010899233b4e806fe37da. + +2018-01-06 Jan Nieuwenhuizen + + mes: un-defmacro optargs. WIP + + mes: Test optargs without pmatch. + * tests/optargs.test: Remove pmatch. + + mes: Add define-macro*. + * module/mes/optargs.mes (define-macro*): New macro. + +2018-01-05 Jan Nieuwenhuizen + + mes: Evaluate test of COND only once. + * module/mes/base-0.mes (cond): Evaluate test of COND only once. + Fixes cond tests with side effects (Nyacc). + * tests/base.test ("cond side effect"): Test it. + +2018-01-04 Jan Nieuwenhuizen + + mes: #\page is whitespace. + * module/srfi/srfi-14.mes (char-set:whitespace): Add #\page. + + mes: # is not a character. + * module/mes/display.mes (display): + * module/mes/type-0.mes (char?): -1 is not a character. + (eof-object?): New function. + * tests/base.test ("#"): Test it. + * module/mes/scm.mes (eof-object?): Remove. + (unread-char): Return character (WAS: integer). + + mes: open-input-string: peek fix. + * module/mes/guile.mes (open-input-string): Return actual tell. + * tests/guile.test ("open-input-string peek"): Test it. + + mes: with-input-from-string: peek fix. + * module/mes/guile.mes (with-input-from-string): Return actual tell. + * tests/guile.test ("with-input-from-string peek"): Test it. + +2018-01-03 Jan Nieuwenhuizen + + mescc: Resurrect guile-1.8. + * guile/mescc.scm: Use GUILE_LOAD_COMPILED_PATH instead of -C. + [guile]: Include syncase. + * module/language/c99/compiler.scm [guile]: Stub pretty-print-c99. + Set stack to unlimited. + * module/language/c99/info.scm [guile]: Include (ice-9 syncase). + * module/mes/as-i386.scm [guile]: Likewise. + * module/mes/guile.scm [guile]: Add compose, export it. + + mes: Add string-drop-right. + * module/srfi/srfi-13.mes (string-drop-right): New function. + +2018-01-02 Jan Nieuwenhuizen + + mescc: cleanups. + * guile/mescc.scm: Cleanups. + * module/language/c99/compiler.mes: + * module/language/c99/compiler.scm: + * module/language/c99/info.mes: + * module/language/c99/info.scm: + * module/mes/getopt-long.mes: + * module/mes/optargs.mes: + * module/mes/optargs.scm: + * module/mes/repl.mes: + * module/mes/scm.mes: + * scripts/mescc.mes: + + nyacc cpp-debugging, tests + + mes: getopt-long: fix multi-opt and unclumping. + * module/mes/getopt-long.scm (remove-if-not): Remove. + (option-spec): Add value field. Update users. + (expand-clumped-singles): Simplify, fix. + (process-options): To get an option's value, use value instead of + value-policy. Fixes multi-opt. + * tests/getopt-long.test: New file. + * make.scm (mes-tests): Add it. + * check.sh (tests): Add it. + * tests/getopt-long.test-guile: New symlink. + + guix: back to 0.80.41 for tinycc. + guix.scm (nyacc): New variable. + +2018-01-01 Jan Nieuwenhuizen + + mes: Support equal? with arbitrary number of arguments. + * module/mes/base.mes (equal2?): Rename from equal?. + (equal?): Implement. + + mescc: Use records for mes too. + * module/language/c99/info.mes: Use info.scm records, remove + simplistic list data structures. + + mescc.mes: Use write for preprocessing output. + * scripts/mescc.mes (source->ast): Use core:write instead of pretty-print. + + mes: Add write, core:write. + * src/lib.c (display_helper, fdisplay_): Add parameter, write_p. + Update callers. When write_p: write quoted strings. + (write_, write_port_): New function. + * module/mes/read-0.mes (write): New function. + + mes: gc_safety. + + check-mescc.sh: run with mes. + * src/build.sh: + * src/check-mescc.sh: Run with mes. + + mes: Add string-null?. + * module/srfi/srfi-13.mes (string-null?): New function. + + mes: Add dirname. + * module/mes/guile.mes (dirname): New function. + +2018-01-01 Jan Nieuwenhuizen + + test: Add syntax tests. + * tests/syntax.test: New file. + * tests/syntax.test-guile: New file. + + fixup: 1b0696f9 (Jan Nieuwenhuizen 2018-01-01 15:53:13 +0100 40) , (lambda () + +2017-12-17 Jan Nieuwenhuizen + + Revert "mes: use array-based stack. WIP: will not survice gc." + This reverts commit 7fb653f68c2dbf8bc83cce4bd138439c600b538f. + +2017-12-14 Jan Nieuwenhuizen + + mes: use array-based stack. WIP: will not survice gc. + * src/mes.c (STACK_SIZE)[MES_ARRAY_STACK]: New variable. + (g_stack_array): New variable. + (g_stack): Change type to SCM*. + * (gc_push_frame)[MES_ARRAY_STACK]: Use g_stack_array, g_stack. + (gc_peek_frame): Likewise. + (gc_pop_frame): Likewise. + * src/gc.c (gc_check): Likewise. + (gc): Likewise. + +2017-12-12 Jan Nieuwenhuizen + + mes: Fix assq to improve performance. + * src/mes.c (assq): Special case eq_p to improve performance. + +2017-12-11 Jan Nieuwenhuizen + + mes: Reimplement records. + * module/srfi/srfi-9.mes (define-record-type): New macro. + * AUTHORS: Update. + * module/mes/record-0.mes: Remove. + * module/mes/record.mes: Remove. + * module/srfi/srfi-9-psyntax.mes: Remove. + * module/srfi/srfi-9.scm: Remove. + * make.scm: Remove them. + + mes: Fix display of closure. + * module/mes/display.mes (display): Drop extra ( at start of *closure*, *circ*. + * src/lib.c (display_helper): Likewise. + +2017-12-09 Jan Nieuwenhuizen + + mes: Resurrect define, define-macro in C core. + * make.scm (bin.gcc, bin.mescc): Use MES_C_READER=1. + * src/mes.c (scm_symbol_define, scm_symbol_define_macro): New symbol. + (scm_vm_eval_define): New special. + (scm_symbol_c_define): New symbol. + (MAKE_MACRO): New define. + (eval_apply)[MES_C_DEFINE]: Handle define, define-macro. + (mes_symbols): Define %c-define for use in read-0.mes. + * module/mes/read-0.mes: Do not implement full scheme define if %c-define. + * module/mes/quasiquote.mes (sexp:define, env:define, env:macro): New function. + (define-macro): New macro. FIXME + * module/mes/psyntax.mes (define): New macro. FIXME + +2017-12-10 Jan Nieuwenhuizen + + mes: Fix initial display. + * module/mes/read-0.mes (display): Fix. + +2017-12-11 Jan Nieuwenhuizen + + mes: Fix compile warning in reader. + * src/reader.c[MES_C_READER]: Declare read_block_comment, read_hash. + Fixes compile warning. + +2017-12-09 Jan Nieuwenhuizen + + mescc: Allow invoking git mescc.mes from elsewhere. + * src/mes.c (load_env): Look in MES_PREFIX too. Add debug printing. + * scripts/mescc.mes: Consider MES_PREFIX. + * guile/mescc.scm (%prefix): Consider MES_PREFIX. + * module/mes/base-0.mes (string->list): New function, move from type-0.mes. + (%moduledir): Consider MES_PREFIX. + * module/mes/type-0.mes (string->list): Remove. + + mescc: Output performance hacks: use core:display. + * src/lib.c (display_): Write to g_stdout (WAS: STDOUT). + * module/mes/guile.scm (guile): Declare and export core:display core:display-error. + * module/mes/M1.mes (object->M1): Use core:display and string-append + instead of format. + * module/mes/guile.mes (with-input-from-string): Add debugging. + (open-input-string): Likewise. + (read-string): Likewise. Re-implement. + (drain-input): Use read-string. + + mes: Nyacc support: substring/copy, substring/shared. + * module/srfi/srfi-13.mes (substring/copy, substring/shared): Define + to substring. + + mes: Nyacc support: Read old characters. + * src/reader.c (read_character)[MES_C_READER]: Support reading old + characters: #\bel, #\bs, #\vt. + + mes: resurrect running MesCC: handle \t in strings. + * src/reader.c (read-string): Handle \t. Fixex M1 output. + + mescc: Use small, bootstrappable syntax rather than huge psyntax seed. + * module/nyacc/lex.mes (mes): Use syntax (WAS: psyntax). + * module/mes/pmatch.mes (mes): Likewise. + * module/nyacc/lang/c99/parser.mes (srfi-9): Use syntax (WAS: srfi-9-psyntax). + + mes: Fix for pmatch on bootstrappable syntax-rules. + * module/mes/pmatch.scm (ppat): Do not use let. + * tests/pmatch.test ("pmatch nyacc minimal", "pmatch nyacc"): Test it. + +2017-12-05 Jan Nieuwenhuizen + + mlibc: M4 support: robustify headers, add sys/signal.h. + * include/errno.h (ERANGE): New define. + * include/stdarg.h (size_t): Undefine before typedef. + * include/stdint.h: Likewise. + * include/stdio.h: Likewise. + * include/stdlib.h: Likewise. + * include/sys/types.h: Likewise. + * include/string.h: Likewise. + (ssize_t): Undefine before typedef. + * include/unistd.h: Likewise. + (off_t): Undefine before typedef. + * include/sys/stat.h (struct stat): New stub. + * include/sys/signal.h: New file. + +2017-12-04 Jan Nieuwenhuizen + + mescc: M4 support: scaffold/tests/82-define.c. + * scaffold/tests/82-define.c: New file; inspired by M4. Thanks, Ricardo! + * make.scm ("82-define"): Build it. + * check-mescc.sh: Add 82-define. + + mlibc: Tinycc support: Avoid hex. + * include/00-test.i (main)[__TINYC__]: Do not use $0x. + + mlibc: Tinycc support: qsort. + * lib/libc+tcc.c (qswap, qpart): New function + (qsort): Implement. + * scaffold/tests/81-qsort.c: Test it. + * make.scm ("81-qsort"): Build it. + +2017-12-03 Jan Nieuwenhuizen + + mescc: scaffold: misc cleanups. + * scaffold/tests/44-switch.c (swits): More case labels. + * scaffold/tests/60-math.c: Discriminate return values. + * scaffold/tests/77-pointer-assign.c (memset)[__TINYC__]: Remove. + * scaffold/tests/79-int-array.c (test): Discriminate return values. + + mlibc: Tinycc support: __udivdi3, __umoddi3. + * lib/libc+tcc-gcc.c (__udivdi3, __umoddi3): Fix signature, do not + crash on simple integer devisions. + + mescc: Tinycc support: Respect word size better. + * stage0/x86.M1 (movzwl_0x32(%ebp),%eax,movzwl_0x8(%ebp),%eax): New + define. + * module/mes/as-i386.mes (i386:push-word-local-de-ref, + i386:word-local->accu): New function. + * module/mes/as-i386.scm: Export them. + * module/language/c99/compiler.mes (push-local-de-ref): Respect word size. + (ident->accu): Likewise. + + mlibc: New library layout; remove duplication. + * lib/libc+tcc-gcc.c: New file: Libc bits for GCC from libc-mes+tcc.c. + * lib/libc+tcc-mes.c: New file: Libc bits for MesCC from libc-mes+tcc.c. + * lib/libc+tcc.c: New file: Libc bits from libc-mes+tcc.c. + * lib/libc.c: New file: Merged from libc-mes.c, libc-gcc.c. + (abtoi): New function: Rename from _atoi. + * lib/linux+tcc-gcc.c: New file: Linux bits from libc-gcc+tcc.c. + * lib/linux+tcc-mes.c: New file: Linux bits from libc-mes+tcc.c. + * lib/linux-gcc.c: New file: Linux bits from libc-gcc.c. + * lib/linux-mes.c: New file: Linux bits from libc-mes.c. + * lib/mini-libc-gcc.c: New file. + * lib/mini-libc.c: New file: Libc bits from mini-libc-mes.c. + * lib/mini-linux-gcc.c: New file. + * lib/mini-linux-mes.c: New file: Linux bits from mini-libc-mes.c. + * lib/libc-gcc.c: Remove duplication using include now. + * lib/libc-mes.c: Likewise. + * lib/mini-libc-mes.c: Likewise. + * include/stdio.h (puts)[POSIX]: Remomve macro. + (fputc, fputs)[!POSIX]: New macro. + (fputc, fputs): Remove declaration. + * scaffold/tests/7j-strtoull.c (strtoull, test): Use abtoi. + * src/lib.c (fputs)[__MESC__]: Remove define. + * guile/guix/make.scm: Update for new library layout. + * make.scm: Likewise. + * build.sh: Likewise. + * install.sh: Likewise. + + mlibc: Tinycc support: itoab, for debugging. + * lib/libc-gcc.c (itoab): New function. + * lib/libc-mes.c (itoab): New function. + +2017-12-02 Jan Nieuwenhuizen + + mescc: prefix string labels with _. + * module/mes/M1.mes (object->M1): Prefix string lables with _. + + mescc: prefix local labels with _. + * module/language/c99/compiler.mes (expr->accu): prefix local labels with _. + + bootstrap: Update build script. + * build.sh: Add blood-elf, use -o. + + mlibc: Mescc-tools support: fix for [v]fprintf. + * lib/libc-mes+tcc.c (vfprintf): Bugfix: print to fd. + +2017-11-29 Jan Nieuwenhuizen + + mes: resurrect full reader in C core. + * module/mes/read-0.mes (defined?): New function. + (eat-whitespace, read-env, read-word, read-block-comment, + read-line-comment, read-list, read-character, read-hex, read-octal, + reader:read-string, lookup, read-hash, read-word): Only define if + not %c-reader. + * module/mes/base-0.mes (defined?): Remove. + * src/mes.c[MES_C_READER]: Set ARENA_SIZE=10000000. + (scm_symbol_quasiquote scm_symbol_unquote, + scm_symbol_unquote_splicing, scm_symbol_syntax, + scm_symbol_quasisyntax, scm_symbol_unsyntax, + scm_symbol_unsyntax_splicing): New symbol. + (scm_symbol_c_reader): New symbol. + (MAKE_KEYWORD)[MES_C_READER]: New define. + (mes_symbols): Define %c_reader. + * src/reader.c (read_word_)[MES_C_READER]: Extend to full Scheme + reader. + (eat_whitespace)[MES_C_READER]: Likewise. + (read_block_comment, read_hash, read_word, read_character, + read_octal, read_hex, append_char, read_string)[MES_C_READER]: + Likewise. + * make.scm (bin.gcc,bin.mescc): Define MES_C_READER=1. + +2017-11-27 Jan Nieuwenhuizen + + mescc: Mescc-tools support: char foo[BAR] = {'a', 'b', 'c'}. + * stage0/x86.M1 (mov____%al,0x8(%ebp), mov____%al,0x32(%ebp), + mov____%ax,0x8(%ebp), mov____%ax,0x32(%ebp)): New define. + * module/mes/as-i386.mes (i386:accu->local+n,i386:byte-accu->local+n, + i386:word-accu->local+n): New function. + * module/language/c99/compiler.mes (accu->local+n): New function. + (initzer->data): Return char as single byte. + (decl->info): Support char foo[BAR] = {'a', 'b', 'c'}. + * scaffold/tests/66-local-char-array.c: Test it. + * make.scm (add-scaffold-test): Build it. + +2017-11-26 Jan Nieuwenhuizen + + mlibc: Mescc-tools support: chmod. + * stage0/x86.M1 (SYS_chmod): New define. + * lib/libc-gcc.c (chmod): New function. + * lib/libc-mes.c (chmod): New function. + + mlibc: GNU Gcc support: setjmp, longjmp. + * stage0/x86.M1 (jmp____*%ebx): New macro. + (mov____0x8(%ebp),%ebp): New macro. + (mov____0x8(%ebp),%esp): New macro. + * include/setjmp.h (jmp_buf): Redefine as struct. + * lib/libc-mes+tcc.c (longjmp, setjmp): Implement. + * scaffold/tests/80-setjmp.c: Test it. + * make.scm ("80-setjmp"): Build it. + * .gitignore: Ignore *.tcc-guile. + +2017-11-25 Jan Nieuwenhuizen + + mlibc: GNU Gcc support: ferror. + * lib/libc-mes+tcc.c (ferror): New function. + * include/stdio.h (ferror): Declare it. + +2017-11-24 Jan Nieuwenhuizen + + bootstrap: Add bootstrap build scripts. + * build.sh: New file. + * check-mescc.sh: New file. + * check.sh: New file. + * install.sh: New File. + +2017-11-23 Jan Nieuwenhuizen + + remove obsolete Nyacc link. + * guile/nyacc: Remove. + +2017-11-22 Jan Nieuwenhuizen + + build: mlib/include to include, move mlib to lib. + * 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. + +2017-11-21 Jan Nieuwenhuizen + + mes: Resurrect running mes tests tests/*.test with Guile. + * tests/tests/base.test-guile: New file to resurrect running Mes test with Guile. + * tests/catch.test-guile: Symlink for same purpose. + * tests/closure.test-guile: Likewise. + * tests/cwv.test-guile: Likewise. + * tests/display.test-guile: Likewise. + * tests/fluids.test-guile: Likewise. + * tests/guile.test-guile: Likewise. + * tests/let-syntax.test-guile: Likewise. + * tests/let.test-guile: Likewise. + * tests/match.test-guile: Likewise. + * tests/math.test-guile: Likewise. + * tests/module.test-guile: Likewise. + * tests/optargs.test-guile: Likewise. + * tests/peg.test-guile: Likewise. + * tests/pmatch.test-guile: Likewise. + * tests/psyntax.test-guile: Likewise. + * tests/quasiquote.test-guile: Likewise. + * tests/read.test-guile: Likewise. + * tests/record.test-guile: Likewise. + * tests/scm.test-guile: Likewise. + * tests/srfi-1.test-guile: Likewise. + * tests/srfi-13.test-guile: Likewise. + * tests/srfi-14.test-guile: Likewise. + * tests/vector.test-guile: Likewise. + * make.scm (add-guile-test): New function. Use it to run running tests/*.test-guile. + +2017-11-20 Jan Nieuwenhuizen + + mes: resurrect running MesCC: handle \t in strings. + * module/mes/read-0.mes (reader:read-string): Handle \t. Fixex M1 output. + + mes: Nyacc support: with-fluids. + * module/mes/fluids.mes (with-fluids): New macro. + * tests/fluids.test ("with-fluids"): Test it. + + mes: resurrect running MesCC: update info interface. + * module/language/c99/info.mes (type?, global?, local?): New function. + (make-global): Remove name parameter. + * module/nyacc/lang/c99/pprint.mes: New file. + +2017-12-17 Jan Nieuwenhuizen + + mes: Add last. + * module/srfi/srfi-1.mes (last): New funcion. + +2017-11-20 Jan Nieuwenhuizen + + mes: Add reverse-list->string. + * module/srfi/srfi-13.mes (reverse-list->string): New function. + + bootstrap: Unbundle necessary M1 sources. + * mlibc/crt1.M1: Remove. + * mlibc/libc-mes.M1: Remove. + * src/mes.M1: Remove. + +2017-11-19 Jan Nieuwenhuizen + + mlibc: Mescc-tools support: fix fgetc. + * mlibc/libc-mes.c (fgetc): Fix from completely fubar. + + mlibc: Mescc-tools support: strtol: partly implement stub. + * mlibc/libc-mes+tcc.c (strtol): Partly implement stub. + + mlibc: Mescc-tools support: getopt, getopt_long. + * mlibc/getopt.c: Move to ANSI C. Remove GETOPT_COMPAT and + non-POSIXLY_CORRECT options. + * mlibc/include/getopt.h: New file. + * mlibc/libc-gcc+tcc.c: Include getopt.c. + * mlibc/libc-mes+tcc.c: Likewise. + + mlibc: Mescc-tools support: import getopt_long. + * mlibc/getopt.c: Import from gcc-2.0. + + Revert "mescc: Grok char foo[] parameter." + This reverts commit c4cc75105db48b550cd515751b766b2e7a88ddc3. + + mescc: Grok char foo[] parameter. + * module/language/c99/compiler.mes (function->text+data): Grok char + foo[] parameter. + + mescc: Grok char *const foo[]; + * module/language/c99/compiler.mes (ast-strip-const): Grok char *const argv[]; + + mlibc: Mescc-tools support: endianness. + * mlibc/include/endian.h: New file. + * mlibc/include/ctype.h[!(__GNUC__ && POSIX)]: Include it. + * mlibc/include/stdlib.h: Likewise. + * mlibc/include/sys/types.h: Likewise. + + mlibc: Mescc-tools support: exit stati. + * mlibc/include/stdlib.h (EXIT_FAILURE, EXIT_SUCCESS): New define. + +2017-11-18 Jan Nieuwenhuizen + + mescc: cleanup obsolete Nyacc 0.7x compatibility. + * module/language/c99/compiler.mes (ast-type->type, ast->type + expr->accu, struct-field, decl->info,): Remove obsolete Nyacc 0.7x + patterns. + + guix: Release update. + * guix.scm (mes): Update commit, hash and version. Add + 'make-git-source-writable stage. + + Release 0.11. + * configure (VERSION): Bump to 0.11. + +2017-11-11 Jan Nieuwenhuizen + + doc: Release udpate. + * HACKING: Update. + * INSTALL: Update. + * NEWS: Update. + * README: Update. + * doc/ANNOUNCE-0.11: New file. + +2017-11-18 Jan Nieuwenhuizen + + build: fix for 07-include, thanks rain1! + * make.scm (add-scaffold-test): New keyword parameter: includes. + ("07-include"): Use it. + + build: support gcc -m32, thanks rain1! + * guile/guix/make.scm (%CC32): fallback to %CC. + (%C32-FLAGS): Add -m32, to suppor gcc -m32. + (LINK.gcc): Use it. + +2017-11-18 Jan Nieuwenhuizen + + bootstrap: Update necessary M1 sources. + 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 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 + exec_enable src/mes-mes + + * mlibc/libc-mes.M1: Update. + * src/mes.M1: Udate. + +2017-11-18 Jan Nieuwenhuizen + + mescc: Tinycc support: test #include. + * scaffold/tests/exit-42.i: New file. + * scaffold/tests/07-include.c: New file. + * make.scm ("07-include"): Build it. + +2017-11-17 Jan Nieuwenhuizen + + mescc: Tinycc support: struct struct array. + Support + + struct foo + { + struct bar baz[N]; + struct bar bla*[M]; + }; + + * module/language/c99/compiler.mes (expr->accu): + * scaffold/tests/7n-struct-struct-array.c: Test it. + * make.scm (add-scaffold-test): Build it. + +2017-11-16 Jan Nieuwenhuizen + + mlibc: Tinycc support: support, most syscalls stubbed. + * mlibc/libc-gcc.c (exit, write)[__TINYC__]: tcc-compatible gcc-style + asm implementation. + (read,open,access,brk,fsync)[__TINYC__]: Stub body. + * mlibc/libc-gcc+tcc.c (close,unlink, lseek, getcwd)[__TINYC__]: Stub + body. + * mlibc/libc-mes+tcc.c: Support tinycc. + * mlibc/include/00-test.i (main) [__TINYC__]: Support tcc. + + mescc: Tinycc support: empty for. + * module/language/c99/compiler.mes (test-jump-label->info): Handle + empty expression. + * make.scm (add-tcc-test "45_empty_for"): Test it. + + tinycc: scaffold/main.c: running mes-tcc compiled binary #6. + * scaffold/main.c (main): Use variable, if, argc, ++, +=, function call to return 42. + +2017-11-15 Jan Nieuwenhuizen + + tinycc: scaffold/main.c: running mes-tcc compiled binary #5. + * scaffold/main.c (main): Use function call and variable to return 42. + +2017-11-14 Jan Nieuwenhuizen + + tinycc: scaffold/main.c: running mes-tcc compiled binary #4. + * scaffold/main.c (main): Use variables to return 42. + + mescc: Tinycc support: workaround lack of long long support. + * module/language/c99/compiler.mes (i386:type-alist): Use size=4 for + long long as a workaround. + +2017-11-11 Jan Nieuwenhuizen + + mescc: refactor expr->accu, expr->accu*, fixes nontrivial struct by value assign. + * module/language/c99/compiler.mes: (pke): New function. + (expr->number): Rename from p-expr->number. Update callers. + (decl->info, init-declr->pointer, struct-field): Several pointeryness fixes. + (expr->accu*, expr->accu): Remove special-casing for foo.bar, + foo->bar, foo[bar]. Fixes struct by value assign for non-trival + expressions. + (accu->ident, ident-address->accu, ident->accu): + (base->ident-address, ident->base): Remove. + * scaffold/tests/7k-for-each-elem.c (test): Test it. + * scaffold/tests/7c-dynarray.c (test): Test it. + * scaffold/tests/7m-struct-char-array-assign.c: Test it. + * make.scm (add-scaffold-test): Build it. + + mlibc: errno.h: declare errno without extern. + * mlibc/include/errno.h: drop extern. Fixes tcc compile. + + guix: nyacc: Update to 0.82.4. + * guix.scm (nyacc): Update to 0.82.4. + +2017-09-10 Jan Nieuwenhuizen + + guix: Release update. + * guix.scm (mes): Update commit, hash and version. + + Release 0.10. + * configure (VERSION): Bump to 0.10. + + doc: Release udpate. + * HACKING: Update. + * INSTALL: Update. + * NEWS: Update. + * doc/ANNOUNCE-0.10: New file. + * BOOTSTRAP: New file. + * make.scm: Install them. + +2017-09-10 Jan Nieuwenhuizen + + bootstrap: Include necessary M1 sources. + 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 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 + exec_enable src/mes-mes + + * mlibc/crt1.M1: New File. + * mlibc/libc-mes.M1: New File. + * src/mes.M1: New File. + +2017-09-10 Jan Nieuwenhuizen + + guix: Bump Nyacc to 0.82.0. + * guix.scm (nyacc): Bump to 0.82.0. + + mescc: Support Nyacc-0.81.0. + * module/language/c99/compiler.mes (ast->info): Handle asm-expr from + Nyacc 0.81.0. + +2017-09-03 Jan Nieuwenhuizen + + tinycc: scaffold/main.c: running tcc-compiled binary #3. + * scaffold/main.c (main): Remove asm. + +2017-09-10 Jan Nieuwenhuizen + + mescc: Tinycc support: struct by value assign. + * module/language/c99/compiler.mes (expr->accu): warn for unsupported + sizes. + * scaffold/tests/7h-struct-assign.c (test): Test it. + +2017-09-02 Jan Nieuwenhuizen + + tinycc: scaffold/main.c: running tcc-compiled binary #2. + * scaffold/main.c (main)[__i386__]: Rename from _start. + +2017-09-10 Jan Nieuwenhuizen + + build: compile crt1.c, libc-mesc.c and .c separately. + * mlibc/crt1.c: New file. + * mlibc/libc-mes.c (_start): Remove. + * mlibc/libc-gcc.c (_start): Remove. + * make.scm (LINK.hex2, bin.mescc): Move from guile/guix/make.scm. + * guile/guix/make.scm (LINK.hex2, bin.mescc): Remove. + +2017-09-03 Jan Nieuwenhuizen + + mescc: Tinycc support: refactor _start. + * mlibc/libc-mes.c (_start): Refactor. + (_env): Remove. + * stage0/x86.M1: + +2017-08-19 Jan Nieuwenhuizen + + tinycc: scaffold/main.c: first running tcc-compiled binary. + * scaffold/main.c (_start): Exit 42 using asm. + +2017-08-27 Jan Nieuwenhuizen + + mescc: Tinycc support: fix *--p = 'x'. + * module/language/c99/compiler.mes (expr->accu): Respect size in *--p = 'x'. + * scaffold/tests/23-pointer.c (test): Test it. + + mescc: Tinycc support: initializer arithmetic. + * module/language/c99/compiler.mes (p-expr->bool): New function + (p-expr->number): Support bitwise-and, bitwise-not, cast, cond-expr. + + core: Add logand, lognot. + * src/math.c (logand, lognot): New function. + + mescc: Tinycc support: array of struct of any size. + * module/language/c99/compiler.mes (accu*value): New function + (expr->accu*): Use it to support array of struct of any size. + * scaffold/tests/7l-struct-any-size-array.c: Test it. + * make.scm (add-scaffold-test): Build it. + + mescc: Tinycc support: stdint.h: declare size_t. + * mlibc/include/stdint.h (size_t)[!__MES_SIZE_T]: Declare. + +2017-08-26 Jan Nieuwenhuizen + + mescc: Tinycc support: pointer arithmetic with pointer-variable. + * module/language/c99/compiler.mes (expr->accu): pointer arithmetic with pointer-variable. + * scaffold/tests/76-pointer-arithmetic.c (test): Test it. + * mlibc/include/stdarg.h (va_start): Update for fixed pointer arithmetic. + +2017-08-25 Jan Nieuwenhuizen + + mescc: Tinycc support: pointer arithmetic with &variable. + * module/language/c99/compiler.mes (expr->pointer): Handle ref. + * scaffold/tests/76-pointer-arithmetic.c: Test it. + +2017-08-23 Jan Nieuwenhuizen + + mescc: Tinycc support: pointer arithmetic with variable. + * module/language/c99/compiler.mes (expr->accu): Support pointer + arithmetic with variable: p + i, p - i, p += i, p -= i. + * scaffold/tests/76-pointer-arithmetic.c (test): Test it. + + mescc: Tinycc support: handle pointerness, siziness for cast foo*. + * module/language/c99/compiler.mes (expr->pointer): Support cast foo*. + (expr->size): Likewise. + * scaffold/tests/7k-for-each-elem.c: Test it + * make.scm (add-scaffold-test): Build it. + +2017-08-19 Jan Nieuwenhuizen + + mescc: Tinycc support: strtoull. + * mlibc/include/mlibc.h (_atoi): Declare. + * mlibc/include/ctype.h (isxdigit): Declare. + * mlibc/libc-gcc.c (isxdigit, _atoi): New function. + (atoi): Use it. + * mlibc/libc-mes.c (isxdigit, _atoi): New function. + (atoi): Use it. + * scaffold/tests/7j-strtoull.c (test): Test it. + * make.scm (add-scaffold-test): Build it. + +2017-08-12 Jan Nieuwenhuizen + + mescc: Tinycc support: snprintf. + * mlibc/include/stdarg.h (vsprintf): Declare. + * mlibc/libc-gcc.c (vsprintf): New function. + (sprintf): Use it. + * mlibc/libc-mes+tcc.c (snprintf): Implement. + * mlibc/libc-mes.c (vsprintf): New function + (sprintf): Use it. + +2017-08-10 Jan Nieuwenhuizen + + mescc: Tinycc support: struct.struct. + * module/language/c99/compiler.mes (field:name): + (field:pointer): + (field:size): + (field:type): + (field-field): + (field-offset): + (struct-field): Support struct.struct. + * scaffold/tests/7i-struct-struct.c: Test it. + * make.scm (add-scaffold-test): Build it. + + mescc: Fix compile warnings. + * mlibc/include/stdio.h (fdputs): Declare. + * mlibc/libc-gcc.c (malloc): + (memcpy): Fix compile warning. + + mescc: Tinycc support: --*p, ++*p. + * module/language/c99/compiler.mes (expr->accu): Remove specific --/++. + (expr->accu*): Support p, *p. + * scaffold/tests/76-pointer-arithmetic.c (test): Test it. + +2017-08-08 Jan Nieuwenhuizen + + mescc: Tinycc support: word array assignment. + * stage0/x86.M1 (movzwl_(%eax),%eax): New define. + * module/mes/as-i386.mes (i386:word-mem->accu): New function. + * module/mes/as-i386.scm: Export it. + * module/language/c99/compiler.mes (expr->accu): word array assignment. + (expr->accu*): word array assignment. + * scaffold/tests/7a-struct-char-array.c (test): Test it. + +2017-08-07 Jan Nieuwenhuizen + + mescc: Tinycc support: struct char array assignment. + * module/language/c99/compiler.mes (expr->accu): struct char array assignment. + * scaffold/tests/7a-struct-char-array.c (test): Test it. + +2017-08-06 Jan Nieuwenhuizen + + mescc: Tinycc support: struct assign by value. + * module/language/c99/compiler.mes (base->ident): Remove. + (accu->ident): Use them to support assign of size >4 by value. + * scaffold/tests/7h-struct-assign.c: Test it. + * make.scm (add-scaffold-test): Build it. + * module/mes/as-i386.mes (i386:base->local): Remove. + (i386:accu*n->local): + (i386:accu*n->label): New functions. + * module/mes/as-i386.scm: Export them. + * stage0/x86.M1: (mov____%ebx,0x32): + (mov____%ebx,0x32(%ebp)): + (mov____%ebx,0x8(%ebp)): + (mov____%ebx,0x8(%edx)): + (mov____%ecx,0x32(%ebp)): + (mov____%ecx,0x8(%ebp)): + (mov____0x32(%eax),%ebx): + (mov____0x32(%eax),%ecx): + (mov____0x8(%eax),%ebx): New define. + + mescc: Tinycc support: eputc. + * mlibc/include/stdio.h (eputc): Declare. + * mlibc/libc-gcc.c (eputc): + * mlibc/libc-mes.c (eputc): New function. + + mescc: Move simple main to scaffold. + * scaffold/main.c (main): Move from doc/examples/main.c + * make.scm: Build it. + * README: Update. + * guile/mescc.scm (main): + * scripts/mescc.mes (main): Remove fallback doc/examples/main.c + + mescc: Tinycc support: byte and word struct fields. + * stage0/x86.M1 (mov____%al,0x8(%edx)): + (mov____%ax,(%edx)): + (mov____%ax,0x32(%edx)): + (mov____%ax,0x8(%edx)): + (movzbl_0x32(%eax),%eax): + (movzbl_0x8(%eax),%eax): + (movzwl_0x32(%eax),%eax): + (movzwl_0x8(%eax),%eax): New define. + * module/mes/as-i386.mes (i386:word-accu->base-mem): + (i386:byte-accu->base-mem+n): + (i386:word-accu->base-mem+n): + (i386:byte-mem+n->accu): + (i386:word-mem+n->accu): New function. + * module/mes/as-i386.scm: Export them. + * module/language/c99/compiler.mes (struct-field): Use actual size for + simple types (WAS: 4). + (decl->info): + (expr->accu): Respect byte and word struct field sizes. + * scaffold/tests/7g-struct-byte-word-field.c: Test it. + * make.scm (add-scaffold-test): Build it. + + mescc: Tinycc support: eputs as function for gcc. + * mlibc/libc-gcc.c (eputs)[POSIX]: New function. + * mlibc/include/stdio.h (eputs)[POSIX]: Remove define. + +2017-08-05 Jan Nieuwenhuizen + + mescc: Tinycc support: fixes for foo.bar[baz]. + * module/language/c99/compiler.mes (expr->accu, expr->accu*): fixes for foo.bar[baz]. + * scaffold/tests/7c-dynarray.c: Test it. + + mescc: Tinycc support: fixes for foo->bar[baz]. + * module/language/c99/compiler.mes (expr->accu, expr->accu*): fixes + for foo->bar[baz]. + (expr->pointer): Support i-sel. + (p-expr->type): Support add, sub, de-ref, ref-to. + * scaffold/tests/7f-struct-pointer-arithmetic.c: Test it. + * make.scm (add-scaffold-test): Build it. + + mescc: Tinycc support: foo.bar[baz], foo->bar[baz] for typedef'd struct bar. + * module/language/c99/compiler.mes (expr->accu): foo.bar[baz], + foo->bar[baz] for typedef'd struct bar. + * scaffold/tests/7c-dynarray.c: Test it. + +2017-08-04 Jan Nieuwenhuizen + + mescc: Tinycc support: foo[index]->bar for array bar. + * module/language/c99/compiler.mes (expr->accu*): foo[index]->bar for array bar. + * scaffold/tests/7e-struct-array-access.c: Test it. + * make.scm (add-scaffold-test): Build it. + +2017-08-04 Jan Nieuwenhuizen + + Revert "mescc: Tinycc support: workaround for nyacc "\0" bug." + This reverts commit b160540e221dbeb96908823b5a3504bdbfd7f751. + + Fixed by: https://lists.gnu.org/archive/html/guile-user/2017-08/msg00007.html + +2017-08-04 Jan Nieuwenhuizen + + guix: use nyacc 0.80.41. + * guix.scm (nyacc): use 0.80.41. + + mescc: Tinycc support: ((unsigned char*)str)[i]. + * module/language/c99/compiler.mes (expr->accu*): Consider size of + expr array deref. + * scaffold/tests/7d-cast-char.c: Test it. + + mescc: Tinycc support: ((unsigned char*)str)[0]. + * module/language/c99/compiler.mes (expr->accu): Consider size of + expr array deref. + * stage0/x86.M1 (movzbl_0x32(%ebp),%eax): New define. + * scaffold/tests/7d-cast-char.c: Test it. + + mescc: Tinycc support: define __linux__. + * module/language/c99/compiler.mes (c99-input->full-ast): Add + "__linux__=1" to cpp-defs. + +2017-08-01 Jan Nieuwenhuizen + + mescc: Tinycc support: strcat. + * mlibc/libc-mes+tcc.c (strcat): Implement. + + mescc: Tinycc support: vsnprintf. + * module/language/c99/compiler.mes (ast-type->type): Support *p++ in test. + * mlibc/libc-mes+tcc.c (vsnprintf): Implement. + + mescc: Tinycc support: support foo.bar[baz], foo->bar[baz] for struct bar. + * module/language/c99/compiler.mes (struct-field): Use negative + pointer for struct array fields. + (expr->accu): support: support foo.bar[baz], foo->bar[baz] for struct bar. + * scaffold/tests/7c-dynarray.c: Test it. + + mescc: drop naive realloc. + * mlibc/libc-gcc.c (free, memcpy): Move from libc-mes+tcc.c. + (realloc): Use realloc from libc-mes+tcc.c + * mlibc/libc-gcc+tcc.c (free, memcpy, realloc): Remove. + * mlibc/libc-mes+tcc.c (free, memcpy, realloc): Remove. + * scaffold/tests/79-int-array.c (test): Update. + * scaffold/tests/7a-struct-char-array.c (test): Update. + +2017-07-31 Jan Nieuwenhuizen + + mescc: Tinycc support: ((foo*) p) + n. + * module/language/c99/compiler.mes init-declr->pointer, expr->pointer, + expr->size): support: ((foo*) p) + n. + (expr->accu*): Consider field size for foo.bar[baz]. + * scaffold/tests/7b-struct-int-array.c: Test it. + * make.scm (add-scaffold-test): Build it. + +2017-07-30 Jan Nieuwenhuizen + + mescc: Tinycc support: field size of foo.bar[baz], foo->bar[baz]. + Inspired by a patch from rain1 for foo->bar[baz]. + + * module/language/c99/compiler.mes (expr->accu): + (expr->accu*): Consider field size for foo.bar[baz]. + * scaffold/tests/7a-struct-char-array.c: Test it. + * make.scm (add-scaffold-test): Build it. + +2017-07-30 Jan Nieuwenhuizen + + mescc: Tinycc support: fwrite. + * mlibc/libc-mes+tcc.c (fwrite): Implement. + + mescc: Tinycc support: fclose. + * mlibc/libc-mes+tcc.c (fclose): Implement. + +2017-07-30 rain1 + + mescc: Tinycc support: fgetc. + * mlibc/libc-mes.c (fgetc): Implement. + + mescc: Tinycc support: fprintf. + * mlibc/libc-mes+tcc.c (fprintf): Implement. + + mescc: allow complicated enums expressions. + * module/language/c99/compiler.mes (p-expr->number): Support lshift, rshift, ash. + (enum-def-list->constants): Refactor using p-expr->number. + + mescc: support \x00 strings in M1. + * module/mes/M1.mes (object->m1): Support \x00 strings. + +2017-07-30 Jan Nieuwenhuizen + + mescc: Tinycc support: memmove. + * mlibc/libc-mes+tcc.c (memmove): Implement. + + mescc: Tinycc support: strrchr. + * mlibc/libc-mes+tcc.c (strrchr): Implement. + + mescc: Tinycc support: strchr. + * mlibc/libc-mes+tcc.c (strchr): Implement. + +2017-07-27 Jan Nieuwenhuizen + + mescc: Tinycc support: noisy stubs. + * mlibc/libc-mes+tcc.c: Noisy stubs. + +2017-07-30 Jan Nieuwenhuizen + + mescc: Tinycc support: int foo[bar] = {baz,...}. + * scaffold/tests/79-int-array.c: Test it. + * make.scm (add-scaffold-test): Build it. + * module/language/c99/compiler.mes (init-declr->count): New function. + (decl->info): Support int foo[bar] = {baz,...}. + +2017-07-29 Jan Nieuwenhuizen + + mescc: Tinycc support: union.struct. + * module/language/c99/compiler.mes (decl->info): Support struct inside union. + * scaffold/tests/78-union-struct.c: Test it. + * make.scm (add-scaffold-test): Build it. + + mescc: Tinycc support: fix accu value after comparison. + * stage0/x86.M1 (setg___%al,, setge__%al, setl___%al, setle__%al): New + defines. + * module/mes/as-i386.mes (i386:g?->accu, i386:ge?->accu, + i386:l?->accu, i386:le?->accu, i386:jumpl, i386:jumple): New functions. + * module/mes/as-i386.scm: Export them. + * module/language/c99/compiler.mes (expr->accu): Use them to fix accu + value after comparisons. + (test-jump-label->info): Update comparison jumps. + + mescc: Tinycc support: memcmp. + * mlibc/libc-mes+tcc.c (memcmp): Implement. + + mescc: Tinycc support: bugfix *++foo,*--foo. + * module/language/c99/compiler.mes (c99-input->full-ast): Pre-define NULL. + (expr->pointer, expr->size): Handle pre/post-inc/dec. + + mescc: Tinycc support: uniquify strings per compilation unit. + * module/mes/M1.mes (object->M1): Add file-name to string id. + +2017-07-28 Jan Nieuwenhuizen + + mescc: Tinycc support: foo.bar = foo.baz = bla. + * module/language/c99/compiler.mes (expr->base*): New function. + (expr->accu): Use it to have value in accu for assignments. + * scaffold/tests/77-pointer-assign.c (test): Test it. + * stage0/x86.M1 (mov____%ecx,(%edx), mov___(%eax),%ecx): New define. + * module/mes/as-i386.mes (accu-mem->base->mem): New function. + (i386:byte-base->accu-mem+n): + (i386:byte-base->accu-mem): + (i386:base-mem->accu-mem): + (i386:base->accu-mem): + (i386:value->accu-mem+n): + (i386:value->accu-mem): + (i386:accu->base-mem+n): + (i386:byte-accu->base-mem): + (i386:accu->base-mem): Rename from accu-address, base-address. + Update callers. + * module/mes/as-i386.scm (mes): Update exports. + + mescc: Tinycc support: workaround for nyacc "\0" bug. + * module/language/c99/compiler.mes (fix-null): Replace "\nul" with "\0". + (initzer->data): Use it. + (expr->global): Use it. + + mescc: Tinycc support: bugfix foo % bar. + * stage0/x86.M1 (mov____%edx,%ebx): Typo + (idiv___%ebx): Replace div____%ebx. + * module/mes/as-i386.mes (i386:accu/base): Update. + (i386:accu%base): Update. + +2017-07-29 Jan Nieuwenhuizen + + mescc: Tinycc support: fix foo[bar]->baz. + * module/language/c99/compiler.mes (expr->accu*): Lose one indirection. + * scaffold/tests/72-typedef-struct-def.c: Test it. + +2017-07-28 Jan Nieuwenhuizen + + mescc: Tinycc support: foo *bar[baz]. + * module/language/c99/compiler.mes (decl->info): Support foo *bar[baz]. + * module/language/c99/compiler.mes (push-global): Support push of -2, + -1. Change signature to take info. Update callers. + (push-global-address): Change signature to take info. Update callers. + + mescc: Tinycc support: bugfix foo[bar] = baz, with foo*[]. + * module/language/c99/compiler.mes (expr->accu): Support size for more expressions. + (expr->pointer): + (expr->size): Support more expressions. + * scaffold/tests/77-pointer-assign.c (add0): Test it. + + mescc: Tinycc support: bugfix *foo = bar. + * module/language/c99/compiler.mes (base->ident-address): Typo, fixes (non-char*)*x = y. + * scaffold/tests/77-pointer-assign.c (test): Test it. + + mescc: Tinycc support: bugfix *(cast)foo = bar. + * module/language/c99/compiler.mes (expr->accu): Thinko for de-ref assign. + * stage0/x86.M1: Fix typos. + * module/mes/as-i386.mes: Update for typos. + * scaffold/tests/77-pointer-assign.c: Test it. + * make.scm (add-scaffold-test): Build it. + + mescc: Tinycc support: pointer arithmetic. + * module/language/c99/compiler.mes (ident->size, expr->size): New function. + (expr->accu): Use them for ++,--,add, sub. + (i386:type-alist): Set void size to 1. + * scaffold/tests/71-struct-array.c (test): + * scaffold/tests/76-pointer-arithmetic.c: Test it. + * make.scm (add-scaffold-test): Build it. + + mescc: Tinycc support: compile tcc with TCC_IS_NATIVE. + * mlibc/include/string.h (strcat): Declare. + * mlibc/libc-mes+tcc.c (dlclose, dlopen, mprotect, sigaction, + sigemptyset, strcat, vfprintf): Move from libc-gcc+tcc.c. + * mlibc/libc-gcc+tcc.c: Remove them. + * module/language/c99/compiler.mes (c99-input->full-ast): Define __i386__=1. + (i386:type-alist): Parse `long long int', `unsigned short int', + `unsigned long long int'. + (struct-field): Support void**. + (init-declr->name): + (init-declr->pointer): Support function declaration. + +2017-07-27 Jan Nieuwenhuizen + + mlibc: Tinycc support: gcc -nostdinc -nostdlib. + * mlibc/libc-gcc+tcc.c: New file. + * mlibc/include/dlfcn.h: + * mlibc/include/errno.h: + * mlibc/include/signal.h: + * mlibc/include/sys/mman.h: + * mlibc/include/sys/time.h: Add tcc declarations. + + mescc: Tinycc support: malloc,memcpy. + * mlibc/libc-mes.c (malloc): Rewrite. + * mlibc/libc-mes+tcc.c (memcpy): Implement. + + build: support libc-mes+tcc. + + mescc: Tinycc support: memset. + * mlibc/libc-mes+tcc.c (memset): Implement. + +2017-08-26 Jan Nieuwenhuizen + + mescc: bump default maximum for M1-strings to 80. + * module/mes/M1.mes (object->M1): bump default maximum for M1-strings to 80. + +2017-07-26 Jan Nieuwenhuizen + + mescc: Tinycc support: oops, use new realloc. + * mlibc/libc-mes.c (realloc): Disable naive realloc for libc-mes+tcc.c. + + mescc: Bugfix: output M1-strings if possible. + * module/mes/M1.mes (object->M1): Typo. Also disallow \return in M1-strings. + + guix: Release update. + * guix.scm (mes): Update commit, hash and version. + + Release 0.9. + * configure (VERSION): Bump to 0.9. + + doc: Release udpate. + * HACKING: Update. + * INSTALL: Update. + * NEWS: Update. + * README: Update. + * doc/ANNOUNCE-0.9: New file. + * make.scm: Install it. + * guix.scm (mescc-tools): Bump to 0.2. + + build: Install and installed-run fixes. + * guile/mescc.scm (%datadir,%docdir,%moduledir,%version): Remove. + * scripts/mescc.mes: Likewise. + * module/language/c99/compiler.mes: Likewise. + (%prefix): Prefer environment setting. + (c99-input->full-ast): Remove unnecessary includes. + Remove unnecessary defines. + * make.scm (%scm-files): Add mes/guile.scm. + (src/mes.gcc, src/mes.mlibc-gcc, src/mes.guile): Update MODULEDIR, + add -I src. + * src/mes.c (load_env): Use temporary variable for MODULEDIR concatenation. + (bload_env): Likewise. + + mescc: Tinycc support: calloc,malloc,realloc. + * mlibc/libc-mes+tcc.c (calloc,malloc,realloc): New function. + + mescc: Tinycc support: bugfix struct.array. + * module/language/c99/compiler.mes (struct-field): Update pointer + info. + (field:name,field:pointer,field:size,field:type): Rely on pointer + info. + (field:pointer): New function. + (expr->accu): Use it. + * scaffold/tests/71-struct-array.c (test): Test it. + + mescc: Tinycc support: bugfix struct pointer. + * module/language/c99/compiler.mes (decl->info): Only set non-pointer struct to -1. + * scaffold/tests/23-pointer.c (test): Test it. + + mescc: Tinycc support: more function stack space. + * module/mes/as-i386.mes (function-locals): Increase local space from + 64 (16 vars) to 2*1025 + 80 (20 vars). + + mescc: Tinycc support: bugfix for char **pp = *p. + * module/language/c99/compiler.mes (ptr-declr->pointer): Grok ***. + (decl->info): Bugfix for char **pp = *p, cleanup. + * mlibc/libc-mes.c (getenv): Update for bugfix. + * scaffold/tests/23-pointer.c (test): Test it. + + mescc: Tinycc support: execvp stub. + * mlibc/include/unistd.h (execvp): Declare. + * mlibc/libc-mes+tcc.c (execvp): Add stub. + + mescc: Tinycc support: remove stub. + * mlibc/include/stdio.h (remove): Declare. + * mlibc/libc-mes+tcc.c (remove): Add stub. + + mescc: Tinycc support: fread stub. + * mlibc/include/stdio.h (fread): Declare. + * mlibc/libc-mes+tcc.c (fread): Add stub. + + mescc: Tinycc support: ftell stub. + * mlibc/include/stdio.h (ftell): Declare. + * mlibc/libc-mes+tcc.c (ftell): Add stub. + + mescc: Tinycc support: fseek stub. + * mlibc/include/stdio.h (fseek): Declare. + * mlibc/libc-mes+tcc.c (fseek): Add stub. + + mescc: Tinycc support: fopen stub. + * mlibc/include/stdio.h (fopen): Declare. + * mlibc/libc-mes+tcc.c (fopen): Add stub. + + mescc: Tinycc support: strstr stub. + * mlibc/include/string.h (strstr): Declare. + * mlibc/libc-mes+tcc.c (strstr): Add stub. + + mescc: Tinycc support: sscanf stub. + * mlibc/include/stdio.h (sscanf): Declare. + * mlibc/libc-mes+tcc.c (sscanf): Add stub. + + mescc: Tinycc support: longjmp, setjump stub. + * mlibc/include/stdarg.h (longjmp, setjmp): Declare. + * mlibc/libc-mes+tcc.c (longjmp, setjmp): Add stub. + + mescc: Tinycc support: function parameters. + * module/language/c99/compiler.mes (.name): Handle function parameters. + + mescc: Tinycc support: fflush stub. + * mlibc/include/stdio.h (fflush): Declare. + * mlibc/libc-mes+tcc.c (fflush): Add stub. + + mescc: Tinycc support: vnsprintf stub. + * mlibc/include/stdarg.h (vnsprintf): Declare. + * mlibc/libc-mes+tcc.c (vnsprintf): Add stub. + + mescc: Tinycc support: jump 32. + * module/mes/as-i386.mes (i386:jump-byte-z): Use jne32 (was: jne8). + + mescc: Tinycc support: free stub. + * mlibc/include/stdlib.h (free): Declare. + * mlibc/libc-mes+tcc.c (free): Add stub. + + mescc: Tinycc support: strrchr stub. + * mlibc/include/string.h (strrchr): Declare. + * mlibc/libc-mes+tcc.c (strrchr): Add stub. + + mescc: Tinycc support: strtoll stub. + * mlibc/include/stdlib.h (strtoll): Declare. + * mlibc/libc-mes+tcc.c (strtoll): Add stub. + + mescc: Tinycc support: strtoull stub. + * mlibc/include/stdlib.h (strtoull): Declare. + * mlibc/libc-mes+tcc.c (strtoull): Add stub. + + mescc: Tinycc support: strtol stub. + * mlibc/include/stdlib.h (strtol): Declare. + * mlibc/libc-mes+tcc.c (strtol): Add stub. + + mescc: Tinycc support: lseek. + * mlibc/include/unistd.h (lseek): Declare. + * stage0/x86.M1 (SYS_lseek): New define. + * mlibc/libc-mes+tcc.c (lseek): New function. + + mescc: Tinycc support: fclose stub. + * mlibc/include/stdio.h (fclose): Declare. + * mlibc/libc-mes+tcc.c (fclose): Add stub. + + mescc: Tinycc support: fdopen stub. + * mlibc/include/stdio.h (fdopen): Declare. + * mlibc/libc-mes+tcc.c (fdopen): Add stub. + + mescc: Tinycc support: unlink. + * mlibc/include/unistd.h (unlink): Declare. + * stage0/x86.M1 (SYS_unlink): New define. + * mlibc/libc-mes+tcc.c (unlink): New function. + + mescc: Tinycc support: fwrite stub. + * mlibc/include/stdio.h (fwrite): Declare. + * mlibc/libc-mes+tcc.c (fwrite): Add stub. + + mescc: Tinycc support: qsort stub. + * mlibc/include/stdlib.h (qsort): Declare. + * mlibc/libc-mes+tcc.c (qsort): Add stub. + + mescc: Tinycc support: getcwd. + * mlibc/include/unistd.h (getcwd): Declare. + * stage0/x86.M1 (SYS_getcwd): New define. + * mlibc/libc-mes+tcc.c (getcwd): New function. + + mescc: Tinycc support: strchr stub. + * mlibc/include/string.h (strchr): Declare. + * mlibc/libc-mes+tcc.c (strchr): Add stub. + + mescc: Tinycc support: fprintf stub. + * mlibc/include/stdio.h (fprintf): Declare. + * mlibc/libc-mes+tcc.c (fprintf): Add stub. + + mescc: Tinycc support: localtime stub. + * mlibc/include/time.h (localtime): Declare. + * mlibc/libc-mes+tcc.c (localtime): Add stub. + + mescc: Tinycc support: time stub. + * mlibc/include/time.h (time): Declare. + * mlibc/libc-mes+tcc.c (time): Add stub. + + mescc: Tinycc support: snprintf stub. + * mlibc/include/stdio.h (snprintf): Declare. + * mlibc/libc-mes+tcc.c (snprintf): Add stub. + + mescc: Tinycc support: strtoul stub. + * mlibc/include/stdlib.h (strtoul): Declare. + * mlibc/libc-mes+tcc.c (strtoul): Add stub. + + mescc: Tinycc support: memmove stub. + * mlibc/include/string.h (memcmp): Declare. + * mlibc/libc-mes+tcc.c (memcmp): Add stub. + + mescc: Tinycc support: memset stub. + * mlibc/include/string.h (memset): Declare. + * mlibc/libc-mes+tcc.c (memset): Add stub. + + mescc: Tinycc support: memmove stub. + * mlibc/include/string.h (memmove): Declare. + * mlibc/libc-mes+tcc.c (memmove): Add stub. + + mescc: Tinycc support: memcpy stub. + * mlibc/include/string.h (memcpy): Declare. + * mlibc/libc-mes+tcc.c (memcpy): Add stub. + + mescc: Tinycc support: close. + * stage0/x86.M1 (SYS_close): New define. + * mlibc/include/unistd.h (close): Declare. + * mlibc/libc-mes+tcc.c: New file. + * make.scm: Build and install it. + + mescc: Tinycc support: arithmetic in initializes. + * module/language/c99/compiler.mes (p-expr->number): Handle + bitwise-or, constants. + (initzer-data): Refactor, use p-expr->number. + + mescc: Tinycc support: multi-byte [local] offsets. + * stage0/x86.M1: Add 32bit variants for all 8bit instructions. + * module/mes/as-i386.mes: Use them, switch on size. + + mescc: Naming fix. + * stage0/x86.M1 (je8): Rename from jne8. + * module/mes/as-i386.mes (i386:jump-byte-z): Update. + + mescc: Tinycc support: remove warnings for foo (void), foo (...). + * module/language/c99/compiler.mes (.name, .type): Expect foo (void), foo (...). + + mescc: Tinycc support: multiple statements in default case. + * module/language/c99/compiler.mes (clause->info): Support multiple + statements in default case. + + mescc: Tinycc support: array[]. + * module/language/c99/compiler.mes (p-expr->number): New function. + (struct-field, decl->info): Use it to support const expressions in array size. + + mescc: Use "tag" for tag namespace. + * module/language/c99/compiler.mes: Use "tag" for tag namespace (WAS: "struct"). + Move enums to "tag" namespace. + + mescc: Guile eval.c support: headers. + * mlibc/include/signal.h (sigset_t): New type. + * mlibc/include/float.h: New file. + * mlibc/include/stddef.h: New file. + * mlibc/include/sys/select.h: New file. + + mescc: Non-Guix support. Thanks rain1! + * mlibc/include: Neutralize include guards before #include_next. + Fixes compiling tinycc on Debian GNU/Linux. + + mescc: Tinycc support: sizeof (struct.field). + * module/language/c99/compiler.mes (expr->accu): Support sizeof (struct.field). + + mescc: Tinycc support: struct.union. + * module/language/c99/compiler.mes (struct-field): Add struct tag to + struct/union types. + (field-type, field-size, field-offset, field-field, ast-type->type): + Ascertain struct tag with type. + * (expr->accu*): Do not add struct tag. + * scaffold/tests/75-struct-union.c: Test it. + * scaffold/tests/71-struct-array.c: Update. + + mescc: Tinycc support: sizeof ("foo"). + * module/language/c99/compiler.mes (expr->accu): Support sizeof (string). + + mescc: Tinycc support: struct foo {int bar; int baz} = {0}. + * module/language/c99/compiler.mes (decl->info): struct foo {int bar; int baz} = {0}. + * scaffold/tests/72-typedef-struct-def.c (test): + + mescc: Tinycc support: generalize neg. + * module/language/c99/compiler.mes (expr->accu): Generalize neg. + + mescc: Tinycc support: >>=, <<=. + * module/language/c99/compiler.mes (expr->accu): Support >>= <<=. + + mescc: Bugfix non-char* *x x[] test. + * module/language/c99/compiler.mes (expr->pointer): New function. + (test-jump-label->info): Use it to fix non char* while (*x | x[i]). + + mescc: Tinycc support: foo[i].bar.baz. + * module/language/c99/compiler.mes (init-declr->pointer): Use -1 for array. + (expr->accu): Implement foo[i].bar.baz. + * scaffold/tests/72-typedef-struct-def.c (test): Test it. + + mescc: Tinycc support: *global =. + * module/language/c99/compiler.mes (base->ident-address): + Support *global = ... + * scaffold/tests/74-multi-line-string.c: Test it. + + mescc: Tinycc support: anonymous union. + * module/language/c99/compiler.mes (field:name): New function. + (decl->info): Use it. + (struct-field): Support anonymous union. + (field:size): Update. + (field-field): Update. + (field-offset): Update. + + mescc: Tinycc support: declare struct tm. + * mlibc/include/time.h (struct tm): New type. + + mescc: Tinycc support: ignore [ULL], UL, LL, L. + * module/language/c99/compiler.mes (cstring->number): Drop suffix. + + mescc: Tinycc support: ~, ^=. + * module/mes/as-i386.mes (i386:accu-not): New function. + (i386:accu-negate): Rename from i386:accu-not. + * module/mes/as-i386.scm (mes): Export them. + * module/language/c99/compiler.mes (expr->accu): Support ~, ^=. + * scaffold/tests/60-math.c (test): Test it. + * stage0/x86.M1 (not____%eax): New define. + + mescc: Tinycc support: struct.struct. + * module/language/c99/compiler.mes (expr->accu): Support &*, + bar.foo.i, p->foo.i, p->pf->i (*pp)->foo.i, [slightly modified] offsetof. + * scaffold/tests/72-typedef-struct-def.c (test): Test them. + + mescc: Tinycc support: ***parameter. + * module/language/c99/compiler.mes (.name): Support ***parameter. + + mescc: Tinycc support: bitwise-or initializer. + * module/language/c99/compiler.mes (initzer->value): New function. + (initzer->data): Use it to support bitwise-or initializer. + * scaffold/tests/74-multi-line-string.c (test): Test it. + + mescc: Tinycc support: char*[] in function. + * module/language/c99/compiler.mes (c99-input->full-ast): Add NULL. + (decl->info): Support char* [] in function scope. + * scaffold/tests/71-struct-array.c (test) Test it. + + mescc: Tinycc support: more list initializers. + * module/language/c99/compiler.mes (init-declr->name): Handle array, + pointer array. + (init-declr->pointer): Likewise. + (decl->info): Generalize list initializers, add pointer variant. + FIXME: AST-rewriting? + + mescc: Tinycc support: headers. + * mlibc/include/string.h (ssize_t): New type. + * mlibc/include/unistd.h (ssize_t): New type. + + mescc: Tinycc support: sizeof struct field. + * module/language/c99/compiler.mes (expr->accu): Sizeof struct field. + * scaffold/tests/72-typedef-struct-def.c (test): Test it. + + mescc: Tinycc support: sizeof typename. + * module/language/c99/compiler.mes (expr->accu): Sizeof typename. + + mescc: Tinycc support: pre/post-inc/dec more. + * module/language/c99/compiler.mes (expr-add): New function. + (expr->pointer): New function. + (expr->accu): Use it to support broader pre/post-inc/dec.. + * scaffold/tests/72-typedef-struct-def.c (test): Test it. + + mescc: Tinycc support: comma operator. + * module/language/c99/compiler.mes (expr->accu): Handle comma operator. + * scaffold/tests/74-multi-line-string.c (test): Test it. + + mescc: Tinycc support: assign pointer to struct field. + * module/language/c99/compiler.mes (expr->accu, expr->accu*): Support + pointer field selection. + * scaffold/tests/72-typedef-struct-def.c (test): Test it. + + mescc: Tinycc support: multi-line strings. + * module/language/c99/compiler.mes (initzer->data, expr->global): + Handle multi-line strings. + * scaffold/tests/74-multi-line-string.c: New file. + * make.scm (add-scaffold-test): Build it. + + mescc: Tinycc support: union. + * scaffold/tests/73-union.c: New file. + * module/language/c99/compiler.mes (union->type-entry): New + function. + (decl->info): Support unions. + + mescc: Tinycc support: struct. + * scaffold/tests/72-typedef-struct-def.c: New file. + * module/language/c99/compiler.mes (decl->info): Struct support for tinycc. + + mescc: Refactor decl. + * module/mes/as-i386.mes (i386:mem->base, i386:nop): New functions. + * module/mes/as-i386.scm: Export them. + * module/language/c99/compiler.mes: + * stage0/x86.M1 (nop,mov____(%edx),%edx,movzbl_(%edx),%edx): New defines. + * scaffold/tests/23-pointer.c: New file. + * scaffold/tests/t.c: New file. + * make.scm: Build them. + * module/language/c99/compiler.mes (init-declr->name): Handle array. + (init-declr->pointer): Likewise. + (ident->accu): Simplify. + (ident->base): Simplify. + (ident-address->base): Typo. + (expr->accu): Simplify. + (decl->info): Simplify. + * mlibc/libc-mes.c (getenv): Remove superfluous statement. + + mescc: Use records for Guile: . + * module/language/c99/info.scm (): New record. + * module/language/c99/compiler.mes (make-local-entry): Rename from + make-local. Update callers. + (local-var?): Rename from local?. Update callers. + * module/language/c99/info.mes (make-local, local:type, local:pointer, + local:id): Move from compiler.mes. + + mescc: Use records for Guile: . + * module/language/c99/info.scm (): New record. + * module/language/c99/compiler.mes (make-global-entry): Rename from + make-global. Update callers. + * module/language/c99/info.mes (make-global, global:type, + global:pointer, global:value): Move from compiler.mes. + + mescc: Use records for Guile: . + * module/language/c99/info.scm (): New record. + * module/language/c99/compiler.mes (make-type-entry): Rename from + make-type. Update-callers. + * module/language/c99/info.mes (make-type, type:type, type:size, + type:pointer, type:description): Move from compiler.mes. + + mescc: Use records for Guile: . + * module/language/c99/info.scm (): Make immutable record. + Update users. + + mescc: Use records for Guile: preparation. + * module/language/c99/info.mes: New file. + * module/mes/M1.mes: Use it. + * scripts/mescc.mes: Use it. + * module/language/c99/compiler.mes: Use it. (, , + , , , , , , + , , make, info?, .info, .types, .constants, + .functions, .globals, .locals, .function, .text, .break, .continue): + Remove. + * module/language/c99/info.scm: New file. + * module/language/c99/compiler.scm: Use it. + * guile/mescc.scm: Use it. + * module/mes/M1.scm: Use it. + + mescc: Refactor decl. + * module/language/c99/compiler.mes (decl->info, ptr-declr->pointer): + New function. + (ast->info): Use decl->info. + + guix: Update build. + * guix.scm (mes): Do not strip. Fixes mes binary. + + build: support Guix. + * guile/guix/make.scm (link-or-cp): New function. + (assert-link, store): Use it. + + build: Add make install. + * guile/guix/make.scm (method-cp, install, install-target?): New functions. + * make.scm: Use them. + + build: Add target list. + * GNUmakefile (%): Handle all targets. + * make.scm (main): Show and implement target list. + + build: Ignore some files. + .gitignore: Update for make.scm. + + build: Bugfix for store. + * guile/guix/make.scm (store): Add each store file only once. + + build: Resurrect guile-2.0. Thanks rain1! + * module/mes/guile.scm: New file. + * module/mes/elf.scm: Include it. + * module/mes/bytevectors.scm: : Include it. + * module/mes/as.scm: Include it. + * module/mes/as-i386.scm: Include it. + * module/mes/M1.scm: Include it. + * module/language/c99/compiler.scm: Include it. + * make.scm: Update. + +2017-07-26 Jan Nieuwenhuizen + + build: Non-Guix build robustifications. Thanks, rain1! + Fix typo in configure, gracefully switch between M0 vs M1, skip + CC32/i686-unknown-linux-gnu-gcc targets if not available, esp. for + non-Guix usage. + + * configure (M1): Declare missing variable. + * make.scm (main): all-go, clean-go: New targets. + * GNUmakefile (PHONY_TARGETS): Add them. + (.config.make): New target. + * guile/guix/make.scm (%CC32): Set to #f if not found. + (bin.gcc): Skip if CC not set. + (check-target?, add-target): Skip if target is not set. + +2017-07-26 Jan Nieuwenhuizen + + build: Fix snarf dependencies. + * guile/guix/make.scm (compile.gcc compile.mescc bin.mescc m1-asm): + Accept and forward dependencies. + * make.scm (gcc-snarf-targets): Remove explicit defaults. + + build: Use released M0 intead of M1. + +2017-07-26 Jan Nieuwenhuizen + + mescc: Import tinycc test suite. + * make.scm (check-scaffold-tinycc): New target. + * guile/guix/make.scm (): Add baseline field. + (method-check): Handle baseline. + * scaffold/tinycc/00_assignment.c: New file. + * scaffold/tinycc/00_assignment.expect: New file. + * scaffold/tinycc/01_comment.c: New file. + * scaffold/tinycc/01_comment.expect: New file. + * scaffold/tinycc/02_printf.c: New file. + * scaffold/tinycc/02_printf.expect: New file. + * scaffold/tinycc/03_struct.c: New file. + * scaffold/tinycc/03_struct.expect: New file. + * scaffold/tinycc/04_for.c: New file. + * scaffold/tinycc/04_for.expect: New file. + * scaffold/tinycc/05_array.c: New file. + * scaffold/tinycc/05_array.expect: New file. + * scaffold/tinycc/06_case.c: New file. + * scaffold/tinycc/06_case.expect: New file. + * scaffold/tinycc/07_function.c: New file. + * scaffold/tinycc/07_function.expect: New file. + * scaffold/tinycc/08_while.c: New file. + * scaffold/tinycc/08_while.expect: New file. + * scaffold/tinycc/09_do_while.c: New file. + * scaffold/tinycc/09_do_while.expect: New file. + * scaffold/tinycc/10_pointer.c: New file. + * scaffold/tinycc/10_pointer.expect: New file. + * scaffold/tinycc/11_precedence.c: New file. + * scaffold/tinycc/11_precedence.expect: New file. + * scaffold/tinycc/12_hashdefine.c: New file. + * scaffold/tinycc/12_hashdefine.expect: New file. + * scaffold/tinycc/13_integer_literals.c: New file. + * scaffold/tinycc/13_integer_literals.expect: New file. + * scaffold/tinycc/14_if.c: New file. + * scaffold/tinycc/14_if.expect: New file. + * scaffold/tinycc/15_recursion.c: New file. + * scaffold/tinycc/15_recursion.expect: New file. + * scaffold/tinycc/16_nesting.c: New file. + * scaffold/tinycc/16_nesting.expect: New file. + * scaffold/tinycc/17_enum.c: New file. + * scaffold/tinycc/17_enum.expect: New file. + * scaffold/tinycc/18_include.h: New file. + * scaffold/tinycc/18_include.c: New file. + * scaffold/tinycc/18_include.expect: New file. + * scaffold/tinycc/19_pointer_arithmetic.c: New file. + * scaffold/tinycc/19_pointer_arithmetic.expect: New file. + * scaffold/tinycc/20_pointer_comparison.c: New file. + * scaffold/tinycc/20_pointer_comparison.expect: New file. + * scaffold/tinycc/21_char_array.c: New file. + * scaffold/tinycc/21_char_array.expect: New file. + * scaffold/tinycc/22_floating_point.c: New file. + * scaffold/tinycc/22_floating_point.expect: New file. + * scaffold/tinycc/23_type_coercion.c: New file. + * scaffold/tinycc/23_type_coercion.expect: New file. + * scaffold/tinycc/24_math_library.c: New file. + * scaffold/tinycc/24_math_library.expect: New file. + * scaffold/tinycc/25_quicksort.c: New file. + * scaffold/tinycc/25_quicksort.expect: New file. + * scaffold/tinycc/26_character_constants.c: New file. + * scaffold/tinycc/26_character_constants.expect: New file. + * scaffold/tinycc/27_sizeof.c: New file. + * scaffold/tinycc/27_sizeof.expect: New file. + * scaffold/tinycc/28_strings.c: New file. + * scaffold/tinycc/28_strings.expect: New file. + * scaffold/tinycc/29_array_address.c: New file. + * scaffold/tinycc/29_array_address.expect: New file. + * scaffold/tinycc/30_hanoi.c: New file. + * scaffold/tinycc/30_hanoi.expect: New file. + * scaffold/tinycc/31_args.c: New file. + * scaffold/tinycc/31_args.expect: New file. + * scaffold/tinycc/32_led.c: New file. + * scaffold/tinycc/32_led.expect: New file. + * scaffold/tinycc/33_ternary_op.c: New file. + * scaffold/tinycc/33_ternary_op.expect: New file. + * scaffold/tinycc/34_array_assignment.c: New file. + * scaffold/tinycc/34_array_assignment.expect: New file. + * scaffold/tinycc/35_sizeof.c: New file. + * scaffold/tinycc/35_sizeof.expect: New file. + * scaffold/tinycc/36_array_initialisers.c: New file. + * scaffold/tinycc/36_array_initialisers.expect: New file. + * scaffold/tinycc/37_sprintf.c: New file. + * scaffold/tinycc/37_sprintf.expect: New file. + * scaffold/tinycc/38_multiple_array_index.c: New file. + * scaffold/tinycc/38_multiple_array_index.expect: New file. + * scaffold/tinycc/39_typedef.c: New file. + * scaffold/tinycc/39_typedef.expect: New file. + * scaffold/tinycc/40_stdio.c: New file. + * scaffold/tinycc/40_stdio.expect: New file. + * scaffold/tinycc/41_hashif.c: New file. + * scaffold/tinycc/41_hashif.expect: New file. + * scaffold/tinycc/42_function_pointer.c: New file. + * scaffold/tinycc/42_function_pointer.expect: New file. + * scaffold/tinycc/43_void_param.c: New file. + * scaffold/tinycc/43_void_param.expect: New file. + * scaffold/tinycc/44_scoped_declarations.c: New file. + * scaffold/tinycc/44_scoped_declarations.expect: New file. + * scaffold/tinycc/45_empty_for.c: New file. + * scaffold/tinycc/45_empty_for.expect: New file. + * scaffold/tinycc/46_grep.c: New file. + * scaffold/tinycc/46_grep.expect: New file. + * scaffold/tinycc/47_switch_return.c: New file. + * scaffold/tinycc/47_switch_return.expect: New file. + * scaffold/tinycc/48_nested_break.c: New file. + * scaffold/tinycc/48_nested_break.expect: New file. + * scaffold/tinycc/49_bracket_evaluation.c: New file. + * scaffold/tinycc/49_bracket_evaluation.expect: New file. + * scaffold/tinycc/50_logical_second_arg.c: New file. + * scaffold/tinycc/50_logical_second_arg.expect: New file. + * scaffold/tinycc/51_static.c: New file. + * scaffold/tinycc/51_static.expect: New file. + * scaffold/tinycc/52_unnamed_enum.c: New file. + * scaffold/tinycc/52_unnamed_enum.expect: New file. + * scaffold/tinycc/54_goto.c: New file. + * scaffold/tinycc/54_goto.expect: New file. + * scaffold/tinycc/55_lshift_type.c: New file. + * scaffold/tinycc/55_lshift_type.expect: New file. + * scaffold/tinycc/56_btype_excess-1.c: New file. + * scaffold/tinycc/56_btype_excess-1.expect: New file. + * scaffold/tinycc/57_btype_excess-2.c: New file. + * scaffold/tinycc/57_btype_excess-2.expect: New file. + * scaffold/tinycc/58_function_redefinition.c: New file. + * scaffold/tinycc/58_function_redefinition.expect: New file. + * scaffold/tinycc/59_function_array.c: New file. + * scaffold/tinycc/59_function_array.expect: New file. + * scaffold/tinycc/60_enum_redefinition.c: New file. + * scaffold/tinycc/60_enum_redefinition.expect: New file. + * scaffold/tinycc/61_undefined_enum.c: New file. + * scaffold/tinycc/61_undefined_enum.expect: New file. + * scaffold/tinycc/62_enumerator_redefinition.c: New file. + * scaffold/tinycc/62_enumerator_redefinition.expect: New file. + * scaffold/tinycc/63_local_enumerator_redefinition.c: New file. + * scaffold/tinycc/63_local_enumerator_redefinition.expect: New file. + * scaffold/tinycc/64_macro_nesting.c: New file. + * scaffold/tinycc/64_macro_nesting.expect: New file. + * scaffold/tinycc/67_macro_concat.c: New file. + * scaffold/tinycc/67_macro_concat.expect: New file. + * scaffold/tinycc/70_floating_point_literals.c: New file. + * scaffold/tinycc/70_floating_point_literals.expect: New file. + * scaffold/tinycc/71_macro_empty_arg.c: New file. + * scaffold/tinycc/71_macro_empty_arg.expect: New file. + * scaffold/tinycc/72_long_long_constant.c: New file. + * scaffold/tinycc/72_long_long_constant.expect: New file. + * scaffold/tinycc/73_arm64.c: New file. + * scaffold/tinycc/73_arm64.expect: New file. + * scaffold/tinycc/74_nocode_wanted.c: New file. + * scaffold/tinycc/74_nocode_wanted.expect: New file. + * scaffold/tinycc/75_array_in_struct_init.c: New file. + * scaffold/tinycc/75_array_in_struct_init.expect: New file. + * scaffold/tinycc/76_dollars_in_identifiers.c: New file. + * scaffold/tinycc/76_dollars_in_identifiers.expect: New file. + * scaffold/tinycc/77_push_pop_macro.c: New file. + * scaffold/tinycc/77_push_pop_macro.expect: New file. + * scaffold/tinycc/78_vla_label.c: New file. + * scaffold/tinycc/78_vla_label.expect: New file. + * scaffold/tinycc/79_vla_continue.c: New file. + * scaffold/tinycc/79_vla_continue.expect: New file. + * scaffold/tinycc/80_flexarray.c: New file. + * scaffold/tinycc/80_flexarray.expect: New file. + * scaffold/tinycc/81_types.c: New file. + * scaffold/tinycc/81_types.expect: New file. + * scaffold/tinycc/82_attribs_position.c: New file. + * scaffold/tinycc/82_attribs_position.expect: New file. + * scaffold/tinycc/83_utf8_in_identifiers.c: New file. + * scaffold/tinycc/83_utf8_in_identifiers.expect: New file. + * scaffold/tinycc/84_hex-float.c: New file. + * scaffold/tinycc/84_hex-float.expect: New file. + * scaffold/tinycc/85_asm-outside-function.c: New file. + * scaffold/tinycc/85_asm-outside-function.expect: New file. + * scaffold/tinycc/86_memory-model.c: New file. + * scaffold/tinycc/86_memory-model.expect: New file. + * scaffold/tinycc/87_dead_code.c: New file. + * scaffold/tinycc/87_dead_code.expect: New file. + * scaffold/tinycc/88_codeopt.c: New file. + * scaffold/tinycc/88_codeopt.expect: New file. + * scaffold/tinycc/89_nocode_wanted.c: New file. + * scaffold/tinycc/89_nocode_wanted.expect: New file. + * scaffold/tinycc/90_struct-init.c: New file. + * scaffold/tinycc/90_struct-init.expect: New file. + * scaffold/tinycc/91_ptr_longlong_arith32.c: New file. + * scaffold/tinycc/91_ptr_longlong_arith32.expect: New file. + * scaffold/tinycc/92_enum_bitfield.c: New file. + * scaffold/tinycc/92_enum_bitfield.expect: New file. + * scaffold/tinycc/93_integer_promotion.c: New file. + * scaffold/tinycc/93_integer_promotion.expect: New file. + * scaffold/tinycc/COPYING: New file. + * scaffold/tinycc/LICENSE: New file. + + include + +2017-07-09 Jan Nieuwenhuizen + + test: Split-up Mescc scaffold test. + * make.scm (check-scaffold, check-scaffold-tests): New targets. + * mlibc/include/00-test.i: New file. + * mlibc/include/30-test.i: New file. + * mlibc/mini-libc-mes.c (puts): New function. + * scaffold/tests/00-exit-0.c: : New file. + * scaffold/tests/01-return-0.c: : New file. + * scaffold/tests/02-return-1.c: : New file. + * scaffold/tests/03-call.c: : New file. + * scaffold/tests/04-call-0.c: : New file. + * scaffold/tests/05-call-1.c: : New file. + * scaffold/tests/06-call-!1.c: : New file. + * scaffold/tests/10-if-0.c: : New file. + * scaffold/tests/11-if-1.c: : New file. + * scaffold/tests/12-if-==.c: : New file. + * scaffold/tests/13-if-!=.c: : New file. + * scaffold/tests/14-if-goto.c: : New file. + * scaffold/tests/15-if-!f.c: : New file. + * scaffold/tests/16-if-t.c: : New file. + * scaffold/tests/20-while.c: : New file. + * scaffold/tests/21-char[].c: : New file. + * scaffold/tests/22-while-char[].c: : New file. + * scaffold/tests/30-strlen.c: : New file. + * scaffold/tests/31-eputs.c: : New file. + * scaffold/tests/32-compare.c: : New file. + * scaffold/tests/33-and-or.c: : New file. + * scaffold/tests/34-pre-post.c: : New file. + * scaffold/tests/35-compare-char.c: : New file. + * scaffold/tests/36-compare-arithmetic.c: : New file. + * scaffold/tests/37-compare-assign.c: : New file. + * scaffold/tests/38-compare-call.c: : New file. + * scaffold/tests/40-if-else.c: : New file. + * scaffold/tests/41-?.c: : New file. + * scaffold/tests/42-goto-label.c: : New file. + * scaffold/tests/43-for-do-while.c: : New file. + * scaffold/tests/44-switch.c: : New file. + * scaffold/tests/45-void-call.c: : New file. + * scaffold/tests/50-assert.c: : New file. + * scaffold/tests/51-strcmp.c: : New file. + * scaffold/tests/52-itoa.c: : New file. + * scaffold/tests/53-strcpy.c: : New file. + * scaffold/tests/54-argv.c: : New file. + * scaffold/tests/60-math.c: : New file. + * scaffold/tests/61-array.c: : New file. + * scaffold/tests/63-struct-cell.c: : New file. + * scaffold/tests/64-make-cell.c: : New file. + * scaffold/tests/65-read.c: : New file. + * scaffold/tests/66-struct-array.c: : New file. + * scaffold/t.c: Remove. + * scaffold/t-tcc.c: Remove. + + mescc: Avoid warnings in recursve functions. + * module/language/c99/compiler.mes (expr->accu): Avoid warnings in recursve functions. + + mescc: undefine __GNUC__. + * module/language/c99/compiler.mes (c99-input->full-ast): Remove + __GNUC__=0. Should help compiling pcc, libguile/eval.c. + +2017-07-05 Jan Nieuwenhuizen + + mescc: Support stdarg. + * mlibc/include/stdarg.h (va_list): New type. + (va_start, va_arg, va_end, va_copy): New macro. + (vprintf): New declaration. + * mlibc/libc-mes.c (vprintf): New function. + (printf): Rewrite using vprintf. + * module/language/c99/compiler.mes (expr->accu, expr->accu*): Handle + any array. Limitation: element size must be 4/sizeof (expression). + (make-type): Add value pointer to type. + (type:type, type:size, type:pointer, type:description): New functions. + (ast->info): Handle typedef with pointer. + +2017-07-02 Jan Nieuwenhuizen + + build: Remove make. + * GNUmakefile: trivial convenience-frontend to ./make.scm + * make/*.make: Remove. + * */*.make: Remove. + +2017-07-02 Jan Nieuwenhuizen + + mescc: Produce M1 output instead of hex2. + Use: ./make.scm [TARGET] + ./make.scm check + + * stage0/x86.M1: New file. + * mlibc/mini-libc-mes.c (exit, write): Use M1 instead of .byte. + * mlibc/libc-mes.c (_start, exit, read, write, open, access, brk, + fsync, printf): Use M1 instead of .byte. + * module/mes/as-i386.mes: Use M1. + * module/mes/make.scm: New file. + * make.scm: New file. + * guile/guix/records.scm: New File. + * guile/guix/shell-utils.scm: New file. + * module/mes/M1.mes: Rename from hex2.mes. + * module/mes/M1.scm: Rename from hex2.scm. + * scripts/mescc.mes: Update callers. + * guile/mescc.scm: Update callers. + +2017-06-18 Jan Nieuwenhuizen + + mescc: Add headers for guile:eval.c. + * mlibc/include/alloca.h: New file. + * mlibc/include/stdint.h: New file. + * mlibc/include/inttypes.h: Remove definitionss, include stdint.h. + + mescc: Add headers for 8cc. + * mlibc/include/libgen.h: New file. + * mlibc/include/locale.hh: New file. + * mlibc/include/stdbool.h: New file. + * mlibc/include/stdnoreturn.h: New file. + * mlibc/include/time.h: Add time_t. + +2017-06-27 Jan Nieuwenhuizen + + guix: Add missing module. + * guix.scm: Use (guix download). Fixes compilation with mescc-tools included. + +2017-06-26 Jan Nieuwenhuizen + + guix: Add mescc-tools. + * guix.scm (mescc-tools): New variable. Fixes using guix.scm. Thanks paroneayea! + +2017-06-25 Jan Nieuwenhuizen + + Release 0.8. + * configure (VERSION): Bump. + + build: Release update. + * configure (main): Make hex2 required. + * guix.scm (mes): Add mescc-tools to propagated-inputs. Update commit, hash. + +2017-06-08 Jan Nieuwenhuizen + + doc: Release update. + * NEWS: Update. + * INSTALL: Update. + * HACKING: Update. + * doc/ANNOUNCE-0.8: New file. + +2017-06-25 Jan Nieuwenhuizen + + mescc: Remove ELF creation, handled by hex2 now. + * module/language/c99/compiler.scm (make-global, global:type, + global:pointer, global:value): Move from elf-util.mes + * module/mes/as.mes: New file. + * module/mes/as-i386.mes: Use it. + * module/mes/as-i386.scm: Use it. + * module/mes/elf-util.mes: Remove. + * module/mes/elf.mes (elf32-addr, elf32-half, elf32-off, elf32-word, + make-elf, write-any, object->elf): Remove + (hex2->elf): New function with dummy implementation. + * module/mes/elf.scm: Update exports. + * module/mes/hex2.mes (object->elf): New function. + * module/mes/hex2.scm: Export it. + + mescc: Produce object files in hex2 format, remove hex3. + * GNUmakefile (HEX2_FLAGS): New variable. + * make/mescc-guile.make ($(OUT)/$(TARGET)): Use HEX2 for linking. + * make/mescc-mes.make ($(OUT)/$(TARGET)): Likewise. + * guile/mescc.scm (main): Remove hex3 support. + * scripts/mescc.mes (main): Likewise. + * stage0/elf32-0header.hex2: New file, merging of elf32.hex and elf32-header.hex2. + * stage0/elf-0footer.hex2: New file. + * stage0/elf32-header.hex2: Rename from elf32-header-exit-42.hex2, + repurpose as generic debug heder. + * stage0/elf32-footer-single-main.hex2: Rename from elf32-footer-exit-42.hex2, + repurpose as generic debug footer for single-main source. + * stage0/exit-42.c: New file. + * stage0/stage0.make ($(OUT)/0exit-42): Test 0header, 0footer. + ($(OUT)/exit-42.guile): Test generic debug header, footer. + * stage0/elf32.hex2: Remove. + +2017-06-23 Jan Nieuwenhuizen + + build: Add stage0 hex2 test. + * configure (HEX2): Check for hex2 from MESCC_tools. + * INSTALL: Mention it. + * GNUmakefile (SUBDIRS): Add stage0. + * make/check-cc.make: New file. + * make/check.make: Remove CC-not-empty guard. + * scaffold/scaffold.make: Update CC check targets. + +2017-06-21 Jan Nieuwenhuizen + + stage0: Move to-be-generated part of body to footer. + * stage0/elf32-footer-exit-42.hex2: Add ELF_str, ELF_sym from body. + * stage0/elf32-body-exit-42.hex2: Remove ELF_str, ELF_sym. + +2017-06-19 Jan Nieuwenhuizen + + stage0: Leverage label>base in stage0 gdb header. + * stage0/elf32-header-exit-42.hex2: Replace calculated addresses with label>base. + * stage0/elf32-body-exit-42.hex2: Likewise. + + stage0: Move stage0's section-headers before text. + * stage0/elf32-header-exit-42.hex2: Add section-headers. + * stage0/elf32-body-exit-42.hex2: Update. + * stage0/elf32-footer-exit-42.hex2: Remove section-headers. + +2017-06-18 Jan Nieuwenhuizen + + stage0: Add stage0 hex2 gdb header and footer example. + * stage0/elf32-header-exit-42.hex2: New file. + * stage0/elf32-footer-exit-42.hex2: New file. + +2017-06-13 Jan Nieuwenhuizen + + mescc: Remove jump calculation, use labels: rename jumps. + * module/mes/as-i386.mes (i386:jump, i386:jump-byte-z, i386:jump-g, + i386:jump-ge, i386:jump-nc, i386:jump-ncz, i386:jump-nz, + i386:jump-z): Rename from i386:jump-label*. + * module/mes/as-i386.scm (mes): Update exports. + * module/language/c99/compiler.mes (ast->info): Update callers. + + mescc: Remove jump calculation, use labels: remove offset-jumps. + * module/mes/as-i386.mes (i386:XXjump, i386:Xjump, i386:Xjump-c, + i386:Xjump-cz, i386:Xjump-g, i386:Xjump-ge, i386:Xjump-l, + i386:Xjump-le, i386:Xjump-nc, i386:Xjump-ncz, i386:Xjump-ncz", + i386:Xjump-nz, i386:Xjump-z, i386:jump, i386:jump-byte-nz, + i386:jump-byte-z, i386:jump-c, i386:jump-cz, i386:jump-le, + i386:jump-nc, i386:jump-ncz, i386:jump-nz, i386:jump-z, + i386:test-jump-z): Remove. + * module/mes/as-i386.scm: Remove export. + +2017-06-12 Jan Nieuwenhuizen + + mescc: Remove jump calculation, use labels: cleanup. + * module/language/c99/compiler.mes (test->jump->info): Remove. + +2017-06-13 Jan Nieuwenhuizen + + mescc: Remove jump calculation, use labels: switch. + * module/language/c99/compiler.mes (expr->accu): Refactor (switch ...). + (clause->info): Refactor. + +2017-06-12 Jan Nieuwenhuizen + + mescc: Remove jump calculation, use labels: and, or. + * module/language/c99/compiler.mes (expr->accu): Refactor (and + ...), (or ...). + + mescc: Remove jump calculation, use labels: if. + * module/language/c99/compiler.mes (ast->info): Refactor (if ...) + using test-jump-label->info. + + mescc: Remove jump calculation, use labels: for. + * module/language/c99/compiler.mes (ast->info): Refactor (for ...) + using test-jump-label->info. + + mescc: Remove jump calculation, use labels: do while. + * module/language/c99/compiler.mes (ast->info): Refactor (do-while + ...) using test-jump-label->info. + + mescc: Remove jump calculation, use labels: ?. + * module/language/c99/compiler.mes (ast->info): Refactor (cond-expr + ...) using test-jump-label->info. + + mescc: Support continue in while. + * module/language/c99/compiler.mes (make): Add continue field. + (.continue): New function. + (clone): Support continue field. + (ast->info): Support continue. + * scaffold/t.c (test): Test it. + + mescc: Remove jump calculation, use labels: while. + * module/language/c99/compiler.mes (ast->info): Refactor (while ...) + using test-jump-label->info. + + mescc: Remove jump calculation, use labels: prepare. + * module/language/c99/compiler.mes (test-jump-label->info): New + function. + * module/mes/as-i386.mes (i386:jump-label-z,i386:jump-label-byte-z, + i386:jump-label-g, i386:jump-label-ge,i386:jump-label-nz): New + functions. + * module/mes/as-i386.scm: Export them. + + mescc: Remove duplication of string globals. + * module/language/c99/compiler.mes (expr->global): Curry-in globals. + Update callers. + (initzer->global): Likewise. + +2017-06-11 Jan Nieuwenhuizen + + mescc: Unify labels. + * module/language/c99/compiler.mes: Use (#:address label) (#local + label) (#:relative label) thoughout. + * module/mes/elf-util.mes (add-s:-prefix, drop-s:-prefix): Remove. + (function->text): Update. + * module/mes/hex2.mes (write-hex2): Update. + + mescc: Write object files in hex2 or hex3 format. + * stage0/elf32.hex2: New file. + * module/mes/hex2.mes: New file. + * module/mes/hex2.scm: New file. + * module/language/c99/compiler.mes: Eradicate object lamdas. + (current-eval, dec-xhex, function:-object->text, object->elf, + object->objects, merge-objects, alist-add): Remove. + * module/mes/elf.mes (object->elf): New function, move from compiler.mes. + * module/mes/elf.scm: Export it. + * guile/mescc.scm (parse-opts): Add -g. + (main): Use it. + * scripts/mescc.mes: Likewise. + * scripts/mescc-guile.make (MESCC.scm, MESLD.scm): Add -g flag. + * scripts/mescc-mes.make (MESCC.mes, MESLD.mes): Likewise. + * scaffold/m.c: Add proper includes. + * scaffold/argv.c: New file. + * scaffold/hello.c: Simplify. + * scaffold/micro-mes.c: Add proper includes. + * scaffold/t.c: Add proper includes. + +2017-06-12 Jan Nieuwenhuizen + + core: %moduledir ends with /. + * make/install.make (MODULEDIR): Append /. + (install): Remove /. + * src/mes.c (load_env, bload_env): Update. + +2017-06-11 Jan Nieuwenhuizen + + mescc: Put _start at top of mlibc. + * mlibc/libc-mes.c (_start): Move to top. + * mlibc/mini-libc-mes.c (_start): Likewise. + * module/mes/elf-util.mes (function-prefix): Update for _start == 0. + (function-offset): Likewise. + + mes: Add list-index. + * module/srfi/srfi-1.scm (list-index): New function. + +2017-06-08 Jan Nieuwenhuizen + + build: Bugfix add prepocess dependency on snarfing mes. + * src/src.make ($(OUT)/$(DIR)/mes.guile-E, $(OUT)/$(DIR)/mes.mes-E): + Depend on mes snarfing. + +2017-06-20 Jan Nieuwenhuizen + + test: Support for non-Guix[SD]: cater for missing CC/CC32 compilers. + * make/check.make: Skip if CC is not set. + * make/check-mlibc.make: New file. + * scaffold/scaffold.make: Use it for mlibc targets. + * tinycc/tinycc.make: Skip mlibc targets if CC32 not set. + + mescc: Support for non-Guix[SD] builds. + * module/language/c99/compiler.mes (c99-input->full-ast): Cater for + C_INCLUDE_PATH not set. Fixes non-Guix[SD] builds. + + build: Support for non-Guix[SD]: make CC/CC32 optional in configure too. + * configure (optional): New global. + (BUILD_TRIPLET): Use Guile value. + (check-version): Add keyword argument #:optional. + (main): Make CC optional (--with-courage). Only check for stdio.h, + limits.h if CC is found. + Make CC32 check optional. + * scripts/scripts.make: Skip if CC is not set. + +2017-06-05 Jan Nieuwenhuizen + + mescc: Bugfix for merging objects. + * mlibc/libc-mes.c (main): Declare. + * mlibc/mini-libc-mes.c (g_stdin): Define. + (main): Declare. + * module/language/c99/compiler.mes (alist-add): Thinko. Fixes merging + objects when first declares function of next. + +2017-06-03 Jan Nieuwenhuizen + + guix hash: 0fvzr1ai2rmi46zdi5b2bdjb6s8ip78mkmsk02yxl46rajmp2pb1 + + Release 0.7. + * configure (VERSION): Bump. + + doc: Release update. + * AUTHORS: Remove module/nyacc. + * HACKING: Release uppdate. + * NEWS: Release uppdate. + * doc/ANNOUNCE-0.7: New file. + + guix: mes.git: Add git hash to version. + * guix.scm (mes.git): Add git hash to version. + + mescc: move include into share/mlibc, allows installing alongside gcc. + * mlibc: Rename from libc. + * HACKING: Update for name change. + * make/bin.make: Likewise. + * make/mescc-guile.make: Likewise. + * make/mescc-mes.make: Likewise. + * scaffold/scaffold.make: Likewise. + * make/install.make: Likewise. + (install): Install mlibc into share/mlibc. + +2017-06-02 Jan Nieuwenhuizen + + mescc: Handle any const, by ignoring. + * module/language/c99/compiler.mes (ast-strip-const): New function. + (c99-input->ast): Use it. + (type->size, type->description, ast->info): Remove const handling. + +2017-05-31 Jan Nieuwenhuizen + + mescc: Support array in struct. + * module/language/c99/compiler.mes: (field:size, field-offset): New + functions. Update callers, use them throughout. + (ast->info): Support declaration of struct and typedef'ed struct + variable with array fields. + (expr->accu, expr->accu*): Support foo.bar[baz], foo->bar[baz]. + * scaffold/t-tcc.c: Test it. + +2017-05-28 Jan Nieuwenhuizen + + build: Skip gcc, mlibc, guile or mes builds using CC=, CC32=, GUILE= or MES=. + * GNUmakefile (build-scripts): New target + (HELP_TOP): Mention it. + * configure (main): Write GUILE_FOR_BUILD. + * make/bin-mlibc.make: Skip if CC32 is not set. + * make/bin.make: Skip if CC is not set. + * make/install.make (install): Only install $(OUT)/mes.mes if + MES_BOOTSTRAP is set. + * make/mescc-guile.make: Skip if GUILE is not set. + * make/mescc-mes.make: Skip if MES is not set. + * HACKING: write something about + + core: Always include reader.c, drop binary read-0-32.mo dependency. + * module/language/c99/compiler.mes (c99-input->full-ast): Remove + obsolete __NYACC__ and MES_FULL defines. + * src/mes.c [!MES_FULL]: Include reader-mes.h. + (mes_builtins) [!MES_FULL]: Include reader.mes.i, reader.me.environment.i. + [!MES_FULL]: Include reader.c. + (main) [!MES_FULL]: By default call load_env, only call bload_env + when --load is supplied. WAS: Always bload read-0-32.mo. + * src/reader.c (__end_of__mes_): Remove. + (dump): Remove option of dumping tiny test program. + * make/mescc-mes.make ($(OUT)/$(TARGET), mescc.mes-ccompile, + mescc.mes.c-compile-E): Depend on $(OUT)/mes, scripts/mes. + * src/src.make (mes.guile): Remove module/mes/read-32-0 dependency. + Do not build $(OUT)/mes.mes. + * module/module.make (module/mes/read-0.mo, module/mes/read-0-32.mo, + module/mes/tiny-0-32.mo): Remove targets. + (CLEAN): Do not add them. Neither install $(OUT)/mes.mes. + * .gitignore: Remove exceptions for them. + * make/install.make (install): Do not install them. + * HACKING: Update info about creating module/mes/read-32-0.mo. + * scaffold/mini-mes.c: Remove. + * scaffold/tiny-mes.c: Remove. + * scaffold/cons-mes.c: Remove. + * scaffold/scaffold.make (tiny-mes.libc, tiny-mes.guile, tiny-mes.mes, + mini-mes.libc, mini-mes.guile, mini-mes.mes): Reemove targets. + +2017-05-27 Jan Nieuwenhuizen + + mescc: Add missing builtins. + * module/language/c99/compiler.mes (i386:type-alist): Add missing + builtins. TODO: identify and handle unsigned. + +2017-05-25 Jan Nieuwenhuizen + + mescc: Support typedef and many TCC declaration variants. + * module/language/c99/compiler.mes (ast->info): Register typedefs in types. + (enum-def-list->constants): Support addition and substraction in + enum field values. + (get-type): New function. Use throughout. + + mescc: Handle comments anywhere. + * module/language/c99/compiler.mes (c99-input->full-ast): Rename from c99-input->full-ast. + (ast-strip-comment, c99-input->ast): New functions. + (ast->info): Remove comment exceptions. + + mescc: Support anonymous enums. + * module/language/c99/compiler.mes (enum-def-list->constants): New function. + (ast->info): Support anonymous enum. + +2017-05-23 Jan Nieuwenhuizen + + mescc: C99 header files and declaraions. + * libc/include/assert.h (assert_fail): + * libc/include/stdio.h: + +int eputs (char const* s); + +int fputs (char const* s); + +int puts (char const* s); + +int putchar (int c); + +int fputc (int c, int fd); + +int getchar (); + * libc/include/stdlib.h: + +char* getenv (char const* s) + +int atoi (char const *s); + +int *malloc (size_t); + +int *realloc (int *p, int size); + * libc/include/unistd.h (access): + * src/lib.c (display_helper): + * src/mes.c (read_input_file_env): + * src/posix.c: Include unistd.h. + + guix: Update from Guix. + * guix.scm (mes): Update from Guix. + +2017-05-22 Jan Nieuwenhuizen + + build: Use separate preprocessing stage for mescc. + * make/mescc-guile.make (mescc.scm-c-preprocess, (mescc.scm-compile-E): + New defines. + [!MESC_DIRECT]Compile .o via separate preprocessed .E stage. + + mescc: support -E. + * guile/mescc.scm (parse-opts): Add -E. + (source->ast): New function. + (main): Use it. + * scripts/mescc.mes (parse-opts): Add -E. + (source->ast): New function. + (main): Use it. + +2017-05-21 Jan Nieuwenhuizen + + mescc: Refactor mlibc compilation. + * libc/libc-mes.c: New file. Contents from module/mes/libc.mes, module/mes/libc-i386.mes. + * libc/libc-gcc.c: Rename from libc/mlibc.c, include libc/mstart.c + * libc/mstart.c: Remove. + * module/mes/libc-i386.mes: Remove. + * module/mes/libc-i386.scm: Remove. + * module/mes/libc.mes: Remove. + * module/mes/libc.scm: Remove. + * GNUmakefile (CFLAGS): Include libc-gcc.c (WAS: mlibc.c). + * make/bin-mlibc.make (C_FLAGS): Remove start.c include. + * make/mescc-guile.make: Rewrite using compile, link. + * make/mescc-mes.make: Likewise. + * scaffold/m.c: Update. + +2017-05-17 Jan Nieuwenhuizen + + mescc: support -c, -o. + * module/language/c99/compiler.mes: Throughout: quote lambda's. + (current-eval): New function. + Thanks Andy! + (object->list): New function. Update callers. + (c99-input->info): Dump a.o. + (initzer->non-const, function:object->list): New functions. + (info:object->list): New function. + (c99-input->elf): Call it. + * module/mes/as-i386: Throughout: quote lambda's. + * scripts/mescc.mes (main): Rewrite. + * guile/mescc.scm (main): Likewise. + +2017-05-23 Jan Nieuwenhuizen + + mes: Bugifx for number->string radix > 10. + * module/mes/scm.mes (number->string): Bugfix for `10' -> hex/radix > 10. + +2017-05-21 Jan Nieuwenhuizen + + mes: Simplify read-string. + * module/mes/guile.mes (read-string): Simplify, probably fix even. + + mescc: Remove LALR C frontend prototype. + * module/language/c/compiler.mes: Remove. + * module/language/c/lexer.mes: Remove. + * module/language/c/parser.mes: Remove. + + mes: Add negate. + * module/mes/scm.mes (negate): New function. + +2017-05-19 Jan Nieuwenhuizen + + core: Add current-output-port, open-output-file, set-current-output-port. + * libc/include/fcntl.h: Declare it. Add some fcntl defines. + * libc/include/stdio.h: Remove fcntl defines, Declare g_stdout. + * module/language/c99/compiler.mes (c99-input->ast): Define O_WRONLY, O_RDWR. + * module/mes/guile.mes (with-output-to-file, with-output-to-port): New functions. + * src/posix.c (current_output_port, open_output_file, + set_current_output_port): New functions. + * libc/mlibc.c (open): Add optional mode parameter. + * module/mes/libc-i386.mes (i386:open): Forward third parameter. + * scaffold/mini-mes.c (main): Init g_stdout. + * src/mes.c (main): Likewise. + + mes: Support octal numbers in reader. + * module/mes/read-0.mes (read-octal): New function. + (read-word): Use it. + * tests/read.test: Test it. + +2017-05-18 Jan Nieuwenhuizen + + mes: Add getopt-long. + * module/mes/getopt-long.scm: New file, imported from Guile-1.8, + * module/mes/getopt-long.mes: Include it. + * AUTHORS: Mention it. + + mes: Add string-rindex. + * module/srfi/srfi-13.mes (string-rindex): New function. + + mes: Support predicate with string-index. + * module/srfi/srfi-13.mes (string-index): Support predicate. + + mes: Add string-suffix? + * module/mes/scm.mes (string-prefix?): Refactor. + (string-suffix?): New function. + +2017-05-27 Jeremiah Orians + + Purging binary blobs + * mes.mes: Remove. + * module/mes/read-0-32.mo: Remove. + +2017-05-15 Jan Nieuwenhuizen + + doc: Update. + * AUTHORS: Remove module/nyacc. + +2017-05-14 Jan Nieuwenhuizen + + doc: typo + + guix hash: 0qqywk3siyhf08v7xac08lqldklrqfndlp495wgy6ii9fn93197k + +2016-12-25 Jan Nieuwenhuizen + + Release 0.6. + * configure (VERSION): Bump. + +2017-05-06 Jan Nieuwenhuizen + + doc: Release update. + * NEWS: Update. + +2017-05-04 Jan Nieuwenhuizen + + test: Run 33/55 tests of ../tinycc/tests/test2 if avaiable. + * make/check-tinycc.make: New file. + * tinycc/tinycc.make: New file. + * GNUmakefile (SUBDIRS): Add tinycc. + +2017-05-14 Jan Nieuwenhuizen + + build: Support i686, support development for arm. + * configure (CC32): Accept arm-* as 32 bit compiler. + (check-compile-header-c, check-header-c): New functions. + (parse-opts): New option: --with-courage. + (main): Check for platform, stdio.h, limits.h. + +2017-05-08 Jan Nieuwenhuizen + + mescc: Minimal support for short. + * module/language/c99/compiler.mes (i386:type-alist): Add short. + + mescc: Add strcpy. + * libc/include/string.h (strcpy): Declare. + * libc/mlibc.c (strcpy): New function. + * module/mes/libc.mes (strcpy): New function. + (libc): Add it. + * scaffold/t.c (string_test): Test it. + + mescc: Enhance sizeof support. + * module/language/c99/compiler.mes (expr->accu): Support sizeof (simple-type), + sizeof (var). + + mescc: Support void return. + * module/language/c99/compiler.mes (ast-info): Support `return'. + +2017-05-07 Jan Nieuwenhuizen + + nyacc: Unbundle. + * configure (check-version): Use keyword parameters, add #:command + parameter. + (main): Check for Nyacc. + * INSTALL: Mention Nyacc as dependency. + * make/guile.make (all-go): Compile in guile dir. + * module/module.make (SCM_FILES): Remove Nyacc filters. + * module/nyacc/BUGS: Remove. + * module/nyacc/ChangeLog: Remove. + * module/nyacc/README: Remove. + * module/nyacc/README.nyacc: Remove. + * module/nyacc/bison.scm: Remove. + * module/nyacc/export.scm: Remove. + * module/nyacc/import.scm: Remove. + * module/nyacc/lalr.scm: Remove. + * module/nyacc/lalr2.scm: Remove. + * module/nyacc/lang/c99/README: Remove. + * module/nyacc/lang/c99/body.scm: Remove. + * module/nyacc/lang/c99/cpp.scm: Remove. + * module/nyacc/lang/c99/cppmach.scm: Remove. + * module/nyacc/lang/c99/mach.d/c99act.scm: Remove. + * module/nyacc/lang/c99/mach.d/c99tab.scm: Remove. + * module/nyacc/lang/c99/mach.d/c99xact.scm: Remove. + * module/nyacc/lang/c99/mach.d/c99xtab.scm: Remove. + * module/nyacc/lang/c99/mach.d/cppact.scm: Remove. + * module/nyacc/lang/c99/mach.d/cpptab.scm: Remove. + * module/nyacc/lang/c99/mach.scm: Remove. + * module/nyacc/lang/c99/parser.scm: Remove. + * module/nyacc/lang/c99/pprint.scm: Remove. + * module/nyacc/lang/c99/util1.scm: Remove. + * module/nyacc/lang/c99/util2.scm: Remove. + * module/nyacc/lang/c99/xparser.scm: Remove. + * module/nyacc/lang/calc/parser.scm: Remove. + * module/nyacc/lang/util.scm: Remove. + * module/nyacc/lex.scm: Remove. + * module/nyacc/parse.scm: Remove. + * module/nyacc/util.scm: Remove. + + mes: Consider GUILE_LOAD_PATH for include-from-path. + * module/mes/guile.scm (include-from-path): New macro. + + mescc: Bugfixes for local char[]. + * module/language/c99/compiler.mes (push-ident): Cater for local arrays. + (expr->accu): Avoid post-inc/post-dec twice on rhs of assignment. + Fix size lookup for local char arrayns. + +2017-05-06 Jan Nieuwenhuizen + + nyacc: Update to 0.78. + + mes: Add srfi-16 to Nyacc Guile support. + * module/mes/guile.mes: Include srfi-16 for Nyacc. + + mes: Basic support for string-index. + * module/srfi/srfi-13.mes (string-index): New function. + * tests/srfi-13.test ("string-index"): Test it. + + mes: Support #\cr short form in reader. + * module/mes/read-0.mes (read-character): Support #\cr short form for #\return. + * module/mes/read-0-32.mo: Regenerate. + + mes: Support case-lambda. + * module/srfi/srfi-16.scm: New file. + * AUTHORS: Mention it. + * module/srfi/srfi-16.mes: New file. + + mescc: Enhance enum support. + * module/language/c99/compiler.mes (ast->info): Support enum variable + declaration. Respect field value overrides. + + mescc: Support binary constants. + * module/language/c99/compiler.mes (cstring->number): Support binary 0bxxx values. + * scaffold/t.c (math_test): Test it. + + mescc: Support ==, != as expression value. + * module/mes/as-i386.scm: Export them. + * module/language/c99/compiler.mes (expr->accu): Set accu to 0/1 for eq, ne. + * module/mes/as-i386.mes (i386:nz->accu, i386:z->accu, + i386:accu<->stack): New functions. + * scaffold/t.c (math_test): Test it. + + mescc: Support &, ^. + * module/mes/as-i386.mes (i386:accu-and-base, i386:accu-xor-base): New functions. + * module/mes/as-i386.scm: Export them. + * module/language/c99/compiler.mes (expr->accu): Support bitwise-and, bitwise-xor. + + mescc: Support struct pointers. + * module/language/c99/compiler.mes (expr->accu): Support + &struct.field, struct->field. + (ast->info): Support struct *foo = &bar; + * scaffold/t.c (struct_test): Test it. + + mescc: Support struct definition with variable declaration. + * module/language/c99/compiler.mes (ast->info): Support `struct foo {} bar;'. + + mescc: Support void functions. + * module/language/c99/compiler.mes (function->info): Add return if + missing. Fixes calling void functions (and functions where return + is missing). + * scaffold/t.c (void_func): Test it. + + mescc: Bugfix for break in switch not in compound. + * module/language/c99/compiler.mes (clause->jump-info): Rename from + case->jump-info. + (statements->clauses): New function. + (ast->info): Use it. Fixes switch statement with break in a case + outside of a compound. + * scaffold/t.c (swits): Test it. + +2017-05-05 Jan Nieuwenhuizen + + mescc: Enhance [int/pointer] array support. + * module/language/c99/compiler.mes (p-expr->type): Handle array-ref + with any index. + (ast->info): Support plain array declerations. + (expr->accu): For size == 4, assume value in accu. Fixes int/pointer arrays. + * scaffold/t.c: Test it. + +2017-05-04 Jan Nieuwenhuizen + + mescc: Enhance struct support. + * module/language/c99/compiler.mes (expr->accu): Remove struct scm + hardcoding. + (p-expr->type): New function. + (ast->info): Support struct variable declaration without + initializer. Set struct type for all struct declarations. + +2017-05-03 Jan Nieuwenhuizen + + mescc: Fix itoa for negative numbers, using workaround. + * module/mes/libc.mes (itoa): Avoid `sign = x < 0;' FIXME, todo. + * scaffold/t.c (test): Test it. + +2017-05-02 Jan Nieuwenhuizen + + mescc: Support regular C99 compile, headers + mlibc. + * libc/include/assert.h: New file. + * libc/include/ctype.h: New file. + * libc/include/errno.h: New file. + * libc/include/fcntl.h: New file. + * libc/include/limits.h: New file. + * libc/include/mlibc.h: New file. + * libc/include/stdio.h: New file. + * libc/include/stdlib: New file. + * libc/include/string.h: New file. + * libc/include/unistd.h: New file. + * libc/mlibc.c: Remove declarations. + * make/bin.make (INCLUDES): Factor out standard includes. + * make/bin-mlibc.make: New file. + * scaffold/scaffold.make: Use it. + * src/src.make: Use it. + * module/language/c99/compiler.mes (ast-info): Handle more function declarations. + * scaffold/cons-mes.c: Remove mlibc definitionsa and mlibc.c include. + Instead include . + * scaffold/hello.c: Likewise. + * scaffold/m.c: Likewise. + * scaffold/malloc.c: Likewise. + * scaffold/micro-mes.c: Likewise. + * scaffold/mini-mes.c: Likewise. + * scaffold/t.c: Likewise. + * scaffold/tiny-mes.c: Likewise. + * src/gc.c: Likewise. + * src/lib.c: Likewise. + * src/math.c: Likewise. + * src/mes.c: Likewise. + * src/posix.c: Likewise. + * src/reader.c: Likewise. + +2017-05-03 Jan Nieuwenhuizen + + mescc: Support list of initializers. + * module/language/c99/compiler.mes (ast->info): Support list of initializers. + +2017-05-02 Jan Nieuwenhuizen + + mescc: Basic printf support. + * module/mes/libc-i386.mes (i386:va-arg): New function. + * module/mes/libc-i386.scm (mes): Export it. + * module/mes/libc.mes (printf): New function. + (libc): Add it. + * libc/include/stdio.h: New file. + * module/language/c99/compiler.mes (c99-input->ast): Add libc/include + to include path. + (ast-info): Handle (skip) ellipsis in function declaration. + + guix: Update from Guix. + * guix.scm: Use version from Guix. + * make/install.make (update-hash): Update version for new Guix meme. + + make: Recompile .go too when included mes is touched. + * build-aux/compile-all.scm (scm->mes): New function. + (file-needs-compilation?): Use it to hackishly respect (include-[from-path] "<>.mes") + +2017-05-05 Jan Nieuwenhuizen + + build: Resolve MODULEDIR confusion. Fixes mes installation. + * make/install.make (GUILEDIR): New variable. Was MODULEDIR. + (MODULEDIR): Mes' module dir. + * guile/mescc.scm: Update. + * src/mes.c (load_env, bload_env): Update. + +2017-05-02 Jan Nieuwenhuizen + + guix hash: 01m8n7zk4f1ryd61dj589zarx09vbi7fc5f8m1x5zfk6r7l0zja2 + + guix.scm: Remove erroneous system restriction. + * guix.scm (mes): Remove second erroneous system restriction. + +2017-04-27 Jan Nieuwenhuizen + + Release 0.5. + * configure (VERSION): Bump. + + bootstrap: Regenerate. + * module/mes/read-0-32.mo: Regenerate. + + doc: Release update. + * AUTHORS: Mention Nyacc and GuixSD. + * NEWS: Update. + * README: Update. + * doc/ANNOUNCE-0.5 New file. + * HACKING: Add pointers, update TODO/DONE. + +2017-04-25 Jan Nieuwenhuizen + + bootstrap: Regenerate. + * mes.mes: Regenerate. + +2017-04-24 Jan Nieuwenhuizen + + mescc: Parse mlibc early, show progress. + * module/mes/libc.mes (_start, strlen, getchar, assert_fail, ungetc, + putchar, fputc, eputs, fputs, puts, strcmp, itoa, isdigit, atoi, + malloc, realloc, strncmp, c:getenv): Change to function, add + progress. Update callers. + * module/language/c99/compiler.mes (c99-input->info): Compile libc separately. + * guile/mescc.scm: Update progress. + * scripts/mescc.mes: Update progress. + +2017-04-25 Jan Nieuwenhuizen + + bootstrap: Regenerate. + * mes.mes: Regenerate. + +2017-04-24 Jan Nieuwenhuizen + + core: Set argv for mescc too. + * src/mes.c (main)[!__MESC__]: Remove branch. + + bootstrap: Regenerate. + * mes.mes: Regenerate. + +2017-04-23 Jan Nieuwenhuizen + + mescc: Avoid duplication of globals. + * module/language/c99/compiler.mes (globals:add-string): New function. + (expr->arg): Use it to avoid globals duplication. + (expr->accu): Do not pre-add globals. + + mescc: Fix global creation in AND/OR clause. + * module/language/c99/compiler.mes (test->jump->info): Retain globals + created in AND/OR test. + +2017-04-17 Jan Nieuwenhuizen + + core: Move some debugging to MES_DEBUG=2. + * module/mes/base-0.mes (load): Add ;;;. + * src/gc.c (gc_flip): Test on g_debug > 1. + (gc): Likewise. + * src/mes.c (mes_builtins): Likewise. + (main): Likewise. + * src/reader.c (dump): Likewise. + + mescc: Add atoi. + * libc/mlibc.c (atoi): New function. + * module/mes/libc.mes (atoi): New function. + (libc): Add it. + + mescc: Add getenv. + * module/mes/libc-i386.mes (i386:_start): Push environment pointer. + * module/mes/libc.mes (g_environment): New global. + (_env): New function. + (_start): Use it to set g_environment. + (getenv): New function. + * lib/mlibc.c (strncmp): New function. + (getenv): Implement. + * lib/mstart.c (_start): Set g_environment. + * module/mes/libc.mes (strncmp): New function. + (libc): Add it. + * scaffold/t.c: (array_ref): Test it. + + mescc: Support pointer arrays and some arithmetic. + * module/language/c99/compiler.mes (.name): Support **; handle type size. + (.statements): Likewise. + (push-local-de-ref): Likewise. + (push-ident-de-ref): Likewise. + (expr->arg): Likewise. + (ident->accu): Likewise. + (base->ident-address): Likewise. + (ident-add): Likewise. + (expr->accu): Likewise. + (decl->type): Likewise. + (formal->text): Likewise. + (int->global, ident-address->accu, ident-address->base): New functions. + (ast->info): Support *, *[] ** declarations. + (push-local-de-de-ref, push-ident-de-de-ref): New functions. + * module/mes/as-i386.mes (i386:push-byte-local-de-ref): Rename from + i386:push-local-de-ref. Update callers. + (i386:push-local-de-ref, i386:push-byte-local-de-de-ref, + i386:accu-mem-add): New functions. + * module/mes/as-i386.scm (mes): Export them. + * scaffold/t.c (array_test): Test it. + +2017-04-25 Jan Nieuwenhuizen + + bootstrap: Regenerate. + * mes.mes: Regenerate. + * module/mes/read-0-32.mo: Regenerate. + +2017-04-16 Jan Nieuwenhuizen + + Add access? + * libc/mlibc.c (access): New function. + * module/mes/libc-i386.mes (i386:access): New function. + (i386:libc): Add it. + * src/posix.c (access_p): New function. + * module/mes/posix.mes: New file. + * module/mes/base-0.mes (mes): Include it. + * module/mes/read-0-32.mo: Regenerate. + +2017-04-25 Jan Nieuwenhuizen + + bootstrap: Regenerate + * module/mes/read-0-32.mo: Regenerate. + +2017-04-12 Jan Nieuwenhuizen + + build: Refactor. + * GNUmakefile (OUT,QUIET,SUBDIRS): New variables. + include make/common.make + * .gitignore: Remove toplevel targets. + * build-aux/compile-all.scm: Import from GNU Guix. + * configure (gulp-pipe): Check exit status. Actually test for CC, + CC32. + * make/bin.make: New file. + * make/check.make: New file. + * make/clean.make: New file. + * make/common.make: New file. + * make/compile.make: New file. + * make/guile.make: New file. + * make/mescc-guile.make: New file. + * make/mescc-mes.make: New file. + * make/reset.make: New file. + * lib/mlibc.c: Rename from top. + * lib/start.c: Rename from top. + * module/module.make: New file. + * scaffold/scaffold.make: New file. + * scripts/scripts.make: New file. + * src/mes.c: Rename from top. + * src/src.make: New file. + * src/mes.c: Rename from top. + * src/gc..c: Rename from top. + * src/lib.c: Rename from top. + * src/posix.c: Rename from top. + * src/reader.c: Rename from top. + * src/vector.c: Rename from top. + * tests/tests.make: New file. + +2017-04-15 Jan Nieuwenhuizen + + Remove gc scaffolding. + * tests/gc-0.test: Remove. + * tests/gc-1.test: Remove. + * tests/gc-2.test: Remove. + * tests/gc-2a.test: Remove. + * tests/gc-3.test: Remove. + * tests/gc-4.test: Remove. + * tests/gc-5.test: Remove. + * tests/gc-6.test: Remove. + * tests/gc.test:Remove. + + mescc: Add fsync. + * module/mes/libc-i386.mes (i386:fsync): New function. + (i386:libc): Export it. + * mlibc.c (fsync): New function. + +2017-04-10 Jan Nieuwenhuizen + + core/mini-mes: Merge merge mes.c and mini-mes.c. + * mes.c: + * scaffold/mini-mes.c: + * gc.c: + * GNUmakefile: + + mescc: Allow usage of const by ignoring. + * module/language/c99/compiler.mes (ast->info): Support const + declarations (by ignoring them). + * lib.c (display_helper)[!__GNUC__]: Remove branch. + * posix.c (write_byte)[!__GNUC__]: Likewise. + + HACKING: Removed __MESC__ workarounds. + * HACKING: Update pointer. + + mescc: Support break in while. + * module/language/c99/compiler.mes (make): Add break field. + (.break): New function. + (clone): Support break field. + (ast->info): Support break. + * scaffold/t.c (test): Test it. + * scaffold/mini-mes.c (lookup_symbol_): Use it; remove goto workaround. + +2017-04-09 Jan Nieuwenhuizen + + mescc: Refactor switch. + * module/language/c99/compiler.mes (case->jump-info): Refactor. + Support multiple case statements. + * scaffold/t.c (swits): Test it. + * lib.c (display_helper)[__NYACC__]: Remove branch. + +2017-04-08 Jan Nieuwenhuizen + + mini-mes: Merge with mes.c: lib.c, math.c, posix.c. + * mes.c: Include math.c after posix.c. + (assert_defined, check_formals, check_apply, load_env, + bload_env): Move from lib.c + * scaffold/mini-mes.c: Include mini-lib.h, lib.c., mini-math.h, + math.c, mini-posix.h, posix.c. + (greater_p, less_p, is_p, minus, plus, divide, modulo, multiply, + logior, ash): Remove. + (ungetchar, peekchar, peek_byte, read_byte, write_byte, + string_to_cstring, getenv_, open_input_file, current_input_port, + set_current_input_port, force_output): Remove. + (mes_builtins): include mini-lib.i, mini-lib.environment.i. + mini-math.i, mini-math.environment.i mini-posix.i, + mini-posix.environment.i. + * GNUmakefile (guile-mini-mes): Add dependencies. + + mescc: Refactor assignment. + * module/language/c99/compiler.mes (expr->accu): Refactor assignment. + Support multiple operators. + * scaffold/t.c (math_test): Test it. + * scaffold/mini-mes.c (minus, divide, modulo, multiply, + logior)[!__GNUC__]: Remove branch. + +2017-04-07 Jan Nieuwenhuizen + + mescc: Factor-out array-ref. + * module/language/c99/compiler.mes: Factor-out array-ref. + + mescc: Refactor expr->base. + * module/language/c99/compiler.mes (expr->base): Rename from + expr->+base. Use throughout. + + mescc: Refactor binary operators. + * module/language/c99/compiler.mes (binop->accu): Rename from + compare->accu. Update callers. + (expr->accu): Use it for binary operators. + * scaffold/t.c (math_test): Test it. + + mescc: Factor-out append-text. + * module/language/c99/compiler.mes: Use append-text throughout. + + mescc: Factor-out wrap-as. + * module/language/c99/compiler.mes (wrap-as): Rename from wrap. Use throughout. + + mescc: Refactor comparisons. + * module/language/c99/compiler.mes (compare->accu, append-text, wrap): + New functions. + (expr->accu): Use them to implement construct like 1 == inc (0). + * scaffold/t.c (math_test): Test them. + +2017-04-06 Jan Nieuwenhuizen + + HACKING: Removed gc.c, vector.c mescc workarounds. + * HACKING: Update pointer and recipe. + + mescc: Refactor array ref. + * module/language/c99/compiler.mes (expr->accu, expr->accu*): Remove + duplication, use expression as array index. + * scaffold/t.c (struct_test): Test it. + * vector.c (vector_length, list_to_vector)[!__GNUC__]: Remove branch. + + mescc: Refactor expressions. + * module/language/c99/compiler.mes (expr->accu, ast->info): Remove + duplication, separate concerns. + +2017-04-05 Jan Nieuwenhuizen + + mescc: Refactor pre/post inc/dec. + * module/language/c99/compiler.mes: Refactor pre/post inc/dec. + + bootstrap: Regenerate. + * mes-mini-mes: Regenerate. + * module/mes/read-0-32.mes: Regenerate. + + mescc: function call. + * module/language/c99/compiler.mes (expr->accu): Move function call + from ast->info. + + mescc: Support expression as lhs array index. + * module/language/c99/compiler.mes (expr->accu): Treat array index as expression. + * scaffold/t.c (struct_test): Test it. + * gc.c (gc_copy)[!__GNUC__]: Remove branch. + * vector.c (list_to_vector)[!__GNUC__]: Likewise. + +2017-04-04 Jan Nieuwenhuizen + + mescc: Remove duplication. + * module/language/c99/compiler.mes (expr->arg): Use expr->accu for + most expressions. + + scripts: Support --help, --version. + * guile/mescc.scm: Support --help, --version. + * scripts/mescc.mes: Likewise. + * scripts/repl.mes: Likewise. + +2017-04-03 Jan Nieuwenhuizen + + scm: Do not quote list of strings. + * module/mes/display.mes (display): Check value of write?, fixes + quoting display string. + + mescc: Do not return ELF text. + * module/language/c99/compiler.mes (info->exe): Do not return ELF text. + +2017-04-02 Jan Nieuwenhuizen + + build: Update Guix build and install. + * guix.scm (%source-dir): New variable. + (git-file?): New function. + (mes): Use them to simplify building/installing from git. + * make/install.make (READMES): Add INSTALL, README. + * (install): Install mescc.scm and read-0-32.mo. + + bootstrap: Regenerate. + * mes-mini-mes: First self-hosting binary. + + HACKING: scripts/mescc.mes scaffold/mini-mes runs. + * HACKING: Update pointer and recipe. + + mini-mes: Fix for assq. + * scaffold/mini-mes.c (assq): Use eq_p iso ==. Fixes + tests/display.test ("write alarm"). + + core: Use 0.25% safety region. + * gc.c (gc_up_arena): Up GC_SAFETY too. + * scripts/repl.mes: Remove MES_ARENA override. + + bootstrap: Regenerate. + * module/mes/read-0-32.mo: Regenerate. + + core: Remove append. + * lib.c (append): Remove. + * scaffold/mini-mes.c (append): Remove. + * module/mes/base-0.mes (append): New function. + * module/mes/read-0.mo: Regenerate. + * module/mes/read-0-32.mo: Regenerate. + + test: Add test for append-map. + * tests/srfi-1.test ("append-map"): New test. + +2017-04-01 Jan Nieuwenhuizen + + core: Check gc free harder. + * gc.c (gc_check): New fuction. + * mes.c (eval_apply): Use it. + + mescc: Fix by value assignment from array-of struct entry. + * module/language/c99/compiler.mes (expr->accu): Fix by value + assignment from array-of struct entry. + * scaffold/t.c (struct_test): Test it. + * vector.c (make_vector, list_to_vector, vector_to_list): Use it; + remove workarounds. + * gc.c (gc_copy): Likewise. + + core: Fix flush for _POSIX_SOURCE. + * posix.c (write_byte, force_output)[_POSIX_SOURCE]: Use FILE* + functions. Fixes repl.mes. + + core: Increase MAX_ARENA_SIZE and GC safety. + * mes.c (MAX_ARENA_SIZE): Double to 40000000. + (GC_SAFETY): Set to 10000 cells (WAS: 1000). + * scaffold/mini-mes.c (MAX_ARENA_SIZE, GC_SAFETY): Likewise. + * gc.c (gc)[MES_DEBUG]: Also print safety area. + + HACKING: scripts/mescc.mes scaffold/t.c runs. + + core: Increase GC safety. + * mes.c (GC_SAFETY): Set to 1000 cells (WAS: 100). + * scaffold/mini-mes.c (GC_SAFETY): Likewise. + + HACKING: scripts/mescc.mes scaffold/tiny-mes.c runs. + + HACKING: scripts/mescc.mes scaffold/cons-mes.c runs. + + test: Add nyacc cpp match tests; two fail. + * tests/match.test ("match nyacc 0", "match nyacc 1"): New tests. + ("match nyacc simple", "match nyacc tkl0"): New tests; FAIL with Mes. + (report): Set failure expectation to 2 for Mes. + * HACKING: Add to bugs. + + scm: Support test failure expectation. + * module/mes/test.mes (result): Take second argument to mean expected + failure count. + +2017-04-02 Jan Nieuwenhuizen + + scm: Evaluate arguments of OR only once. + * module/mes/base.mes (or): Evaluate arguments only once. + * module/mes/read-0.mes (or): Likewise. + * tests/base.test ("or only once"): Test it. + * module/mes/read-0-32.mo: Regenerate. + +2017-04-01 Jan Nieuwenhuizen + + scm: Have char-set-contains? strictly return boolean. + * module/srfi/srfi-14.mes (char-set-contains?): Return #t rather than + memq result. + + scm: Fix bug in assq-set! + * module/mes/scm.mes (assq-set!): Bugfix. + +2017-04-02 Jan Nieuwenhuizen + + scm: Add c????r. + * module/mes/base-0.mes (caar, cadr, cdar, cddr, map): Remove. Update callers. + * module/mes/base.mes (): Remove. + * module/mes/base.mes (cadadr, cddadr, cdddar): New function. + +2017-03-31 Jan Nieuwenhuizen + + scm: Add access? + * module/mes/guile.mes (access?): New dummy function. Fixes Nyacc's #include. + +2017-03-29 Jan Nieuwenhuizen + + doc: Add Roamdmap. + * HACKING: Add roadmap. + +2017-04-01 Jan Nieuwenhuizen + + scm: Add open-input-string, read-string. + * module/mes/guile.mes (open-input-string, read-string): New functions. + * tests/guile.test: New file. + * GNUmakefile (TESTS): Add it. + +2017-04-02 Jan Nieuwenhuizen + + build: Cleanup, use gcc-specific snarfing. + * .gitignore: Ignore *.o-32, mes-mini-mes. + * scripts/nyacc-calc.mes: Remove. + * scripts/nyacc.mes: Remove. + * scripts/paren.mes: Remove. + * make/install.make (install): Remove them. + p* module/mes/mes-0.mes: Remove. + * module/mes/loop-0.mes: Remove. + * build-aux/mes-snarf.scm (main): Add --mini option. + * GNUmakefile (mini-mes): Use it. + +2017-03-27 Jan Nieuwenhuizen + + core: Fix error message when macro is missing. + * mes.c (scm_vm_eval_check_func): New symbol. + (eval_apply): In eval, evaluate car before evlis. Fixes error + message when macro match is missing in (match ... (car x)). + (mes_symbols): Add cell_call_with_values, cell_current_module to environment. + * scaffold/mini-mes.c (eval_apply): Likewise. + +2017-03-29 Jan Nieuwenhuizen + + test: Add pmatch tests. + * tests/pmatch.test: New file. + * GNUmakefile (TESTS): Add it. + +2017-03-28 Jan Nieuwenhuizen + + nyacc: prefix globals. + +2017-03-27 Jan Nieuwenhuizen + + scm: Bugfix display of named characters: add port. + * module/mes/display.mes (display): Typo, add port. + + nyacc: Add missing (mes pmatch) include. + * module/nyacc/lang/c99/cpp.mes (mes): Include (mes pmatch). + +2017-04-01 Jan Nieuwenhuizen + + nyacc: Use pmatch rather than match for cpp. + * module/nyacc/lang/c99/cpp.scm (nyacc lang c99 cpp): Import (system + base pmatch) rather than (ice-9 match). + (rtokl->string): Rewrite using pmatch. + +2017-03-27 Jan Nieuwenhuizen + + scm: Bugfix drain-input. + * module/mes/guile.mes (drain-input): Bugfix: return string. + + scm: Add assoc-set! + * module/mes/scm.mes (assoc-set!): New function. + * tests/scm.test ("assoc-set!", "assoc-set! new"): New tests. + +2017-03-26 Jan Nieuwenhuizen + + scm: Add compose. + * module/mes/scm.mes (compose): New function. + * tests/scm.test ("compose"): New test. + + scm: Support reading negative hex numbers. + * module/mes/read-0.mes (read-hex): Support negative hex numbers. + * tests/math.test ("#x-10"): New test. + * tests/read.test: Add test. + + scm: Support map4. + * module/mes/base-0.mes (map): Remove. Update callers. + * module/mes/base.mes (map): Support map4. + + nyacc: Add simple split-cppdef for Mes. + * module/nyacc/lang/c99/body.scm: Add non-regexp split-cppdef for Mes. + + scm: Add with-throw-handler hack. + * module/mes/catch.mes (with-throw-handler): Add hack for Nyacc 0.75 + + scm: Add list->char-set. + * module/srfi/srfi-14.mes (list->char-set): New function. + * tests/srfi-14.test ("list->char-set!"): Test it. + +2017-03-26 Jan Nieuwenhuizen + + mini-mes: Debugging to stderr. + * scaffold/mini-mes.c (error, bload_env, main): Send debug info to + stderr. + + throw/catch dinges: URG + +2017-03-26 Jan Nieuwenhuizen + + scripts: Allow running with any mes. + * scripts/mescc.mes: Run $MES if set, default to ../scripts/mes. + * scripts/repl.mes: Likewise. + + mini-mes: Include and enable gc. + * scaffold/mini-mes.c: Set MES_GC=1. + (ARENA_SIZE)[MES_GC]: Reduce to 10,000 cells (WAS: 1,000,000,000 + chars). + (g_news): New global. + (NTYPE, NCAR, NVALUE, NLENGTH, NCDR, NVECTOR): New macros. + (mes_symbols)[MES_GC]: Call gc_init_news. + (mes_builtins): Include gc.i, gc.environment.i. + +2017-04-01 Jan Nieuwenhuizen + + mini-mes: Workarounds for gc.c. + * gc.c (gc_copy)[!__GNUC__]: Avoid by value assignment from array-of + struct entry. + * scaffold/mini-mes.c (gc_init_cells): Workarounds. + +2017-03-26 Jan Nieuwenhuizen + + core: Prepare gc.c for mescc, non-POSIX_SOURCE. + * mes.c (NLENGTH, NVALUE, NVECTOR): New macros. + (mes_builtins): Add comment on .i include order. + * module/language/c99/compiler.mes (mescc): Add define _POSIX_SOURCE=0. + * gc.c (gc_up_arena, gc_flip, gc_loop, gc)[!_POSIX_SOURCE]: Use eputs + rather than fprintf. + (gc_loop): Use CAR, TYPE, NVECTOR rather than .car, .type, .vector. + * gc.c (gc_up_arena)[!_POSIX_SOURCE]: Add non-POSIX mlib.c + implementation. + + mescc: Bugfix for realloc. + * module/mes/libc.mes (realloc): Thinko. + +2017-03-25 Jan Nieuwenhuizen + + mescc: Bugfix for neg. + * module/language/c99/compiler.mes (expr->accu): Fix neg. + * scaffold/t.c (math_test): Test it. + * scaffold/mini-mes.c (ash): Remove workaround. + + mescc: Support rshift, have guile-mini-mes pass math test. + * module/mes/as-i386.mes (i386:accu>>base): New function. + * module/mes/as-i386.scm (mes): Export it. + * module/language/c99/compiler.mes (expr->accu): Support rshift. + * scaffold/t.c (math_test): Test it. + * scaffold/mini-mes.c (ash): Use it. + +2017-03-26 Jan Nieuwenhuizen + + test: Enable vector read test. + * tests/read.test: Enable vector read test. + +2017-03-25 Jan Nieuwenhuizen + + mini-mes: Support vectors. + * scaffold/mini-mes.c (REF, MAKE_REF): New macro. + Include vector.h, vector.c. + (mes_builtins): Include vector.i, vector.environment.i. + + mini-mes: Workarounds for vector.c. + * vector.c (make_vector, vector_set_x, list_to_vector)[!__GNUC__]: Avoid + by value assignment from array-of struct entry. + + core: prepare vector.c for mescc. + * vector.c (make_vector, vector_set_x, vector_to_list): Use REF, VALUE + rather than .ref, .value. + + mini-mes: Fully remove reader from core. + * scaffold/mini-mes.c (lookup_): Remove. + * mes.c: Likewise. + * reader.c (lookup_): Enable. + * mlib.c (putc): New function. + * module/mes/libc.mes (putc): New function. + +2017-03-24 Jan Nieuwenhuizen + + mescc: Support bitwise or. + * module/mes/as-i386.mes (i386:accu-or-base): New function. + * module/mes/as-i386.scm: Export it. + * module/language/c99/compiler.mes (expr->accu): Use it; support bitwise or. + * scaffold/t.c (math_test): Test it. + * scaffold/mini-mes.c (logior): Use it. + + mescc: Lshift support non-fixed shift value. + * module/mes/as-i386.mes (i386:accu<accu): Use it. + * scaffold/t.c (math_test): Test it. + + mescc: Use signed integer comparison. + * module/language/c99/compiler.mes (test->jump->info): + * module/mes/as-i386.mes (i386:Xjump-le, i386:Xjump-g, i386:Xjump-l, + i386:Xjump-ge): New functions. + * module/mes/as-i386.scm: Export them. + * scaffold/t.c (math_test): Test them. + * tests/scm.test ("iota -1"): Enable for mesc. + +2017-03-26 Jan Nieuwenhuizen + + mescc: Run module/base-0.mes. + * gc.c: New file. + * vector.c: New file. + * mes.c: Remove vector and gc functions, include vector.c, gc.c. + * GNUmakefile (mes.o): Add gc, vector dependencies. + * scaffold/mini-mes.c (eval_apply): Support primitive-load through + read_input_file. + (getenv_, open_input_file, current_input_port, + set_current_input_port force_output, exit_, values, arity_, xassq, + is_p, minus, plus, divide, modulo multiply, logior, ash): New function. + (mes_symbols): Add symbols %gnuc, %mesc. + * scaffold/mini-mes.c (): New functions. + * scaffold/b-0.mes: New file. + * scaffold/t-0.mes: New file. + + test: Allow running with any mes. + * test/base.test: Run $MES if set, default to ../scripts/mes. + * tests/base.test: Likewise. + * tests/catch.test: Likewise. + * tests/closure.test: Likewise. + * tests/cwv.test: Likewise. + * tests/display.test: Likewise. + * tests/fluids.test: Likewise. + * tests/gc-0.test: Likewise. + * tests/gc-1.test: Likewise. + * tests/gc-2.test: Likewise. + * tests/gc-2a.test: Likewise. + * tests/gc-3.test: Likewise. + * tests/gc-4.test: Likewise. + * tests/gc-5.test: Likewise. + * tests/gc-6.test: Likewise. + * tests/gc.test: Likewise. + * tests/let-syntax.test: Likewise. + * tests/let.test: Likewise. + * tests/match.test: Likewise. + * tests/math.test: Likewise. + * tests/module.test: Likewise. + * tests/optargs.test: Likewise. + * tests/peg.test: Likewise. + * tests/psyntax.test: Likewise. + * tests/quasiquote.test: Likewise. + * tests/read.test: Likewise. + * tests/record.test: Likewise. + * tests/scm.test: Likewise. + * tests/srfi-1.test: Likewise. + * tests/srfi-13.test: Likewise. + * tests/srfi-14.test: Likewise. + * tests/vector.test: Likewise. + +2017-04-02 Jan Nieuwenhuizen + + scm+test: Factor-out math and vector. + * module/mes/base-0.mes (quotient): Remove. + * module/mes/scm.mes (quotient): Add. + * tests/scm.test: Remove arithmetic/math tests. + * tests/math.test: New file. + * GNUmakefile (TESTS): Add it + +2017-03-23 Jan Nieuwenhuizen + + mescc: Have ungetc remember 2 positions. + * doc/examples/t.c (read_test): Test it. + * doc/examples/mini-mes.c: + * mlibc.c (getchar, ungetc): Support 2 ungetc positions. + * module/mes/libc.mes (getchar, ungetc): Likewise. + +2017-04-02 Jan Nieuwenhuizen + + mescc: Add brk, naive malloc. + * scaffold/mini-mes.c (gc_init_cells): Use malloc to init g_cells. + * scaffold/malloc.c: New file. + * GNUmakefile (malloc, guile-malloc): New targets. + * module/mes/libc-i386.mes (i386:brk): New function. + (i386:libc): Add it. + * mlibc.c (brk): New function. + (malloc): Use it. + (realloc): New function. + * module/mes/libc.mes (malloc, realloc): New functions. + +2017-03-23 Jan Nieuwenhuizen + + mescc: Struct fixes. + * module/language/c99/compiler.mes (expr->arg, expr->accu, ast->info): + Fixes for struct assignment. + +2017-03-22 Jan Nieuwenhuizen + + mescc: Add missing defines. + * module/language/c99/compiler.mes (mescc): Set STDIN, STDOUT, STDERR, + INT_MIN, INT_MAX. + + mini-mes: Update display_. + * doc/examples/mini-mes.c (display_): Add separator, nicer recursion. + * mes.c (display_): Update. + + mescc: Struct by value assignment fixes. + * module/language/c99/compiler.mes (ast->info): Remove g_function + hardcoding, fix struct assignment. + * doc/examples/t.c (struct_test): Test it. + + mescc: Fix struct field comparison. + * module/language/c99/compiler.mes (expr->accu, ast->info): Some + push/pop fixes, fixes struct field comparisons. + * doc/examples/t.c (struct_test): Test it. + + mescc: Run full scheme reader read-0.mes. + * lib.c (load_env)[MINI_MES]: Load full reader, module/mes/read-0.mes. + * GNUmakefile (module/mes/read-0-32.mo): Update dependency. + * module/mes/mini-0.mes: Remove. + * doc/examples/t.c (struct_test): + * module/mes/read-0-32.mo: New file: bootstrap binary reader. + + mescc: Mini-mes (gcc-compiled) runs read-0.mes. + * module/language/c99/compiler.mes (expr->accu): Add mul. + (test->jump->info): Add le, ge. + (ast->info): Support int and char* initialization at top level. + * module/mes/as-i386.mes (i386:accu*base, i386:Xjump-cz, + i386:Xjump-ncz): New function. + * module/mes/as-i386.scm: Export them. + * doc/examples/t.c (test): Test them. + * module/mes/libc.mes (ungetc): New function. + (getchar): Support it. + (assert_fail, isdigit): New functions. + (libc): Export them. + * module/mes/mini-0.mes: Load full reader. + * mlibc.c (ungetc): New function. + (getchar): Support it. + (assert_fail, isdigit): New functions. + * mes.c (list length error lookup_ getchar ungetchar peekchar + peek_byte read_byte unread_byte greater_p less_p): Move functions + needed to run read-0.mes into core. + * doc/examples/mini-mes.c: Likewise. + * lib.c (length, error): Comment-out. + * math.c (greater_p, less_p): Comment-out. + * posix.c: (getchar, ungetchar, peekchar, peek_byte, read_byte, + unread_byte): Comment-out. + * reader.c (lookup_): Comment-out. + +2017-03-19 Jan Nieuwenhuizen + + mescc: Cleanup mini-mes build and test. + * GNUmakefile (guile-cons-mes guile-m guile-main guile-micro-mes + guile-mini-mes guile-t guile-tiny-mes): New targets. + (clean): Clean them. + * .gitignore: Ignore them. + * HACKING: Update. + * scaffold/tiny-mes.c (bload_env): Read module/mes/tiny-0-32.mo. + * scaffold/cons-mes.c (simple_bload_env): Likewise. + * lib.c (dump)[MES_TINY]: Write crafted dump: module/mes/tiny-0-32.mo. + (load_env): Read module/mes/mini-0.mes. + (bload_env): Read module/mes/read-0-32.mo. + * module/mes/mini-0.mes: New file. + * module/mes/tiny-0.mes : New file. + +2017-04-02 Jan Nieuwenhuizen + + mescc: Refactor libc. + * GNUmakefile (mini-mes): Add include. + * mlibc.c: New file: libc bits for GNUC -nostdlib. + * mstart.c: New file: _start for GNUC -nostdlib. + * scaffold/cons-mes.c: Remove GNUC libc bits. + * scaffold/m.c: Likewise. + * scaffold/mini-mes.c: Likewise. + * scaffold/t.c: Likewise. + * scaffold/tiny-mes.c: Litkewise. + * module/language/c99/compiler.mes (libc, i386:libc): Remove. + * module/language/c99/compiler.scm + * module/mes/libc-i386.mes: Remove assembly bits. + (_start): New function. + * module/mes/libc-i386.scm: Export it, remove assembly exports. + * module/mes/as-i386.mes: New file: assembly bits from libc-i386.mes. + * module/mes/as-i386.scm: New file: export them. + * module/mes/libc.mes (libc,_start): New functions from compiler.mes. + * module/mes/libc.scm: Export them. + +2017-03-19 Jan Nieuwenhuizen + + mescc: Refactor ret. + * module/mes/libc-i386.mes (i386:ret): Refactor. + * module/language/c99/compiler.mes (ast->info): Use it. + +2017-03-18 Jan Nieuwenhuizen + + mescc: Cache text generation. + * module/mes/elf-util.mes (functions->text): Add cache. + + mescc: Refactor function-offset. + * module/mes/elf-util.mes (function-offset): Recurse down. Factor 5 + speedup on mini-mes.c. + + mescc: Cache data-offset too. + * module/mes/elf-util.mes (data-offset): Add cache. + + mescc: Support assignment with comparison. + * module/language/c99/compiler.mes (expr->accu): Handle assignment -> accu. + * doc/examples/t.c (test): Test it. + * doc/examples/mini-mes.c (eval_apply): Use it. + + mescc: Support assignment test. + * module/language/c99/compiler.mes (test->jump->info): Handle assignment. + * doc/examples/t.c (test): Test it. + +2017-03-17 Jan Nieuwenhuizen + + mescc: Fix simple value tests. + * module/language/c99/compiler.mes (test->jump->info): Test accu + before jumping. Fixes simple value tests. + + mescc: Struct by value. + * build-aux/mes-snarf.scm (symbol->names, function->header, + function->environment): Remove struct by value assignment + workarounds. + * module/language/c99/compiler.mes (ast->info): Remove struct by value + assignment debug printing. + + mescc: Support generic initializer. + * module/language/c99/compiler.mes (ast->info): Support generic + declaration using initializer. Supports struct field initializer. + * doc/examples/t.c (struct_test): Test it. + * doc/examples/mini-mes.c (call_lambda, eval_apply, write_byte, + display_): Use it. (call_lambda): (eval_apply, + list_of_char_equal_p): Use it. + + mescc: Remove last hardcodings for identifiers. + * module/language/c99/compiler.mes (ident->accu, ident->base): + Use local:ptr, type->size to remove hard coding of functionx, c1. + (expr->accu): Use type->size to remove hard coding of size byte. + (decl->type): Also handle typename, bail out if type not found. + (type->size): Print identifier and and bail out if type not found. + (formal:ptr): New function. + (formals->locals): Use it to set pointer value of parameter. WAS: 0. + (ast->info): Remove functionx hardcoding. + (getchar): Rename c1 to c. + * doc/examples/t.c: Test it. + + mescc: Support function call with enum value. + * doc/examples/mini-mes.c: Remove debug printing. + * module/language/c99/compiler.mes (push-global, push-local, + push-global-address, push-local-address, push-local-de-ref): Return + list of lambda. + (push-ident): Support push constant. Fixes mini-mes, + cstring_to_list. + * doc/examples/t.c (test): Test it. + +2017-03-13 Jan Nieuwenhuizen + + mescc: Fix d-sel comparisons. + * module/language/c99/compiler.mes (ast->info): Save base while + computing accu. Fix comparison using d-sel in second argument. + * doc/examples/t.c: Test it. + * doc/examples/mini-mes.c (assq): Use it. + + mescc: Fix for character array s[0]. + * module/language/c99/compiler.mes (expr->arg, expr->accu, ast->info): + Use type size to calculate index. + * doc/examples/t.c: Test it. + * doc/examples/mini-mes.c (cstring_to_list): Simplify. + +2017-03-12 Jan Nieuwenhuizen + + mescc: Support mini-mes running scheme program with builtins. + Mini-mes, compiled with either gcc or mescc, now runs a memory dump of + this mini-0.mes program + + (begin + (write-byte (make-cell 0 0 65)) + (write-byte (make-cell 0 0 66)) + (write-byte (make-cell 0 0 67)) + (write-byte (make-cell 0 0 10)) + #f) + + when read and dumped by (gcc-compiled) mes-32. + + * build-aux/mes-snarf.scm: FIXES ..collapse? + * module/language/c99/compiler.mes (ast->info): Bail out on unhandled + declarations. Was: verbosely skip. + +2017-03-12 Jan Nieuwenhuizen + + mescc: Support [for] itoa. + * module/mes/libc-i386.mes (i386:accu%base): New function. + * module/mes/libc-i386.scm: Export it. + * module/language/c99/compiler.mes (expr->accu): Use it to support mod. + * doc/examples/t.c (itoa): New function. + (test): Test it. + * doc/examples/mini-mes.c (itoa)[!__GNUC__]: New function. + + mescc: Support do .. while. + * module/language/c99/compiler.mes (ast->info): Support do-while. + * doc/examples/t.c (test): Test it. + +2017-03-10 Jan Nieuwenhuizen + + core+mini-mes: Replace manual snippets by snarfed includes. + * build-aux/mes-snarf.scm (symbol->source, function->header, + function->source, function->environment): Add workarounds to + avoid struct-copy initializers. + * GNUmakefile (mini-mes): Snarf symbols and functions. + * scaffold/mini-mes.c: Include mini-mes.h, mini-mes.symbols.h, + mini-mes.symbols.i, mini-mes.i, mini-mes.environment.i. + Add snarfable symbol/special definitions. + (type_t): Prefix all types with `T', update users. + (assert_defined, gc_push_frame, gc_peek_frame, gc_init_cells): Mark + as internal. + * mes.c (type_t): Prefix all types with `T', update users. + * scaffold/mini-mes.c (eq_p, type_, car_, cdr_, + list_of_char_equal_p, lookup_macro, write_byte): New functions (from + mes.c). + (assq): Add debugging, workaround. + +2017-03-05 Matt Wette + + nyacc: removed start from lalr-spec -- not needed + +2017-03-04 Matt Wette + + nyacc: working javascript interpreter in guile + +2017-03-03 Matt Wette + + nyacc: lex fixes for char-lit + +2017-03-02 Matt Wette + + nyacc: cleaned up documentation + +2017-03-01 Matt Wette + + nyacc: working on C99 UG as a memo + +2017-02-28 Matt Wette + + nyacc: new release 0.76.5 + + nyacc: fixed bug in pretty-print-c99 wrt i-sel + +2017-02-25 Matt Wette + + nyacc: merge from 0.76.4 + +2017-02-24 Matt Wette + + nyacc: new release 0.76.4 + +2017-02-23 Matt Wette + + nyacc: new release 0.76.3 + + nyacc: more bugs in cpp tokl->string + + nyacc: new release 0.76.2 + + nyacc: fixed more CPP issues + +2017-02-22 Matt Wette + + nyacc: new release 0.76.1 + + nyacc: fixed C99 CPP to deal with numbers correctly + +2017-02-20 Matt Wette + + nyacc: merge master 0.76.0 + +2017-02-19 Matt Wette + + nyacc: new release 0.76.0 + + nyacc: worked c99/util2.scm udecl->mspec + + nyacc: new release 0.75.6 + + nyacc: fixed some c99/util2 items + +2017-02-17 Matt Wette + + nyacc: merged in 0.75.5 from master and inc version + + nyacc: new release 0.75.5 + + nyacc: new release 0.74.4 + + nyacc: minor cpp fixes + +2017-02-16 Matt Wette + + nyacc: merge from 0.75.3 + + nyacc: new release 0.75.3 + + nyacc: new release 0.75.2 + + nyacc: new release 0.75.1 + + nyacc: new release 0.74.0 + + nyacc: I think cpp is working now + +2017-02-15 Matt Wette + + nyacc: working cpp now, I hope + +2017-02-12 Matt Wette + + nyacc: CPP not yet working for file mode + +2017-02-11 Matt Wette + + nyacc: working on cpp issues + +2017-02-05 Matt Wette + + nyacc: C99 CPP for code is better + +2017-01-20 Matt Wette + + nyacc: starting to work on reframing + +2017-01-19 Matt Wette + + nyacc: more CPP fixes + +2017-01-17 Matt Wette + + nyacc: redesign lang/c99/cppbocy.scm:scan-cpp-input + +2017-03-10 Jan Nieuwenhuizen + + mescc: Support goto in while body. + * module/language/c99/compiler.mes (ast->info): Support goto in while + body. + * doc/examples/t.c (test): Test it. + +2017-03-09 Jan Nieuwenhuizen + + core+mini-mes: Move function name to struct function. + * module/language/c99/compiler.mes (expr->arg): Handle char arguments. + * doc/examples/cons-mes.c (struct function): Add name field. + * doc/examples/mini-mes.c: Likewise. + (mes_builtins): Update. + * mes.c: Likewise. + * build-aux/mes-snarf.scm: Update. + +2017-03-09 Jan Nieuwenhuizen + + mescc: Support strings in struct initialization. + * module/mes/elf-util.mes (add-s:-prefix, drop-s:-prefix): New functions. + * module/mes/elf-util.scm: Export them. + * module/language/c99/compiler.mes (string->global): Add `s:' prefix + to global strings. Update users. + (expr->arg): Update. + (expr->accu): Handle string expressions. + (initzer->global): New function. + (struct-field): Handle string field. + * doc/examples/t.c: Test it. + * doc/examples/mini-mes.c: Use it. + + dun! + +2017-03-07 Jan Nieuwenhuizen + + mescc: Display sexps better. + * module/mes/elf.mes (make-elf): Only display data sections smaller + than 200 bytes. + * doc/examples/mini-mes.c (simple_bload_env): Read mini-0-32.mes. + * doc/examples/cons-mes.c (display_): Support symbols and specials. + * doc/examples/tiny-mes.c: Likewise. + * lib.c: + * mes.c: + +2017-03-06 Jan Nieuwenhuizen + + mescc: Compile all of mini-mes. + * module/language/c99/compiler.mes (case->jump-info): Support single statement. + * module/mes/elf-util.mes (function-prefix): Workaround for reversed + functions. FIXME! + * module/mes/elf.mes: + * scaffold/mini-mes.c (type_t): Rename FUNCTION to TFUNCTION for Nyacc. + Add missing symbols. + (eval_apply): Uncomment most. + * scaffold/tiny-mes.c: + * scaffold/cons-mes.c: Remove cruft. + +2017-03-02 Jan Nieuwenhuizen + + mescc: Support struct assignment. + * module/mes/libc-i386.mes (i386:base-address->accu-address, + i386:accu+n, i386:base+n): New functions. + * module/mes/libc-i386.scm: Export them. + * module/language/c99/compiler.mes (ast->info): Use them. + * doc/examples/t.c: Test them. + * doc/examples/cons-mes.c: Drop workarounds. + * doc/examples/mini-mes.c: Likewise. + * mes.c: + + mescc: Fix add, sub, lshift. + * module/language/c99/compiler.mes (expr->accu): Fix add, sub, lshift. + * doc/examples/t.c: Test them. + * doc/examples/cons-mes.c: + * doc/examples/mini-mes.c: + +2017-02-27 Jan Nieuwenhuizen + + mescc: Support any expression as arg. + * module/language/c99/compiler.mes (expr->arg): Also push parameter, + always return info. + (ast->info): Loop over args. Fixes using function calls in arguments. + * module/mes/libc-i386.mes (i386:push-arg): Remove. + (i386:call, i386:call-accu): Remove arguments parameter. + * doc/examples/t.c: Test it. + +2017-03-02 Jan Nieuwenhuizen + + mescc: Rename expr->accu*. + * module/language/c99/compiler.mes (expr->accu*): Rename from expr->accuX. + +2017-04-02 Jan Nieuwenhuizen + + mescc: Fixes for goto. + * module/mes/libc-i386.mes (XXjump): New function. + * module/mes/libc-i386.scm: Export it. + * module/language/c99/compiler.mes (case->jump-info, ast->info): Use it. + * scaffold/t.c: Test it. + * GNUmakefile (cons-mes): New target. + * scaffold/cons-mes.c: New file. + * scaffold/mini-mes.c: + +2017-02-24 Jan Nieuwenhuizen + + mescc: Mini-mes runs (cons 0 1) dump. + * module/mes/libc-i386.mes (i386:Xjump-z, i386:Xjump-c, + i386:Xjump-nc): New functions. + * module/mes/libc-i386.scm: Export them. + * module/language/c99/compiler.mes (case->jump-info, test-jump->info, + ast->info): Use them. + * doc/examples/t.c: Test it. + * doc/examples/mini-mes.c: Run it. + +2017-01-29 Jan Nieuwenhuizen + + mescc: Run mini-mes. + * .gitignore: Ignore tiny-mes and tiny .mo's. + * doc/examples/tiny-mes.c: Simplify. + * doc/examples/mini-mes.c: Use simplifications from tiny-mes. + * doc/examples/t.c (read_test, struct_test): New functions. + (test): Add tests for arena, g_cells globals. + * module/mes/elf-util.mes (dec->hex): New function. + (lambda/label->list): Add text-address parameter. Update callers. + * module/language/c99/compiler.mes (make, info, clone): Add init field. + (.init): New function. + (ident->accu): Add exceptions for globals. + * module/mes/elf-util.scm: Export it. + * module/mes/libc-i386.mes (i386:accu->base-ref, + i386:byte-accu->base-ref, i386:accu->base-ref+n, + i386:accu->global-ref, i386:global-ref->accu, i386:global-ref->base, + i386:global-add, i386:global->accu):, i386:local-ref->accu, + i386:local-ptr->accu, i386:local-ptr->base): New functions. + * module/mes/libc-i386.scm: Export them. + +2017-01-22 Jan Nieuwenhuizen + + doc: Add gdb assembly debugging info. + * HACKING: Add gdb assembly debugging info. + +2017-01-21 Jan Nieuwenhuizen + + doc: Add fosdem talk. + * .gitignore: Ignore beamer/tex stuff. + * doc/fosdem/fosdem.org: New file. + * doc/fosdem/GuixSD.png: New file. + * doc/fosdem/LISP-1-5-page-13-bottom.png: New file. + * doc/fosdem/LISP-1.5-page-13-bottom.png: New file. + * doc/fosdem/LISP-1.5-page-13.pdf: New file. + * doc/fosdem/LISP-1.5-page-13.png: New file. + * doc/fosdem/beamercolorthemeX.sty: New file. + * doc/fosdem/beamerthemeX.sty: New file. + * doc/fosdem/bootstrap-graph.png: New file. + * doc/fosdem/egg.jpeg: New file. + * doc/fosdem/egg.png: New file. + * doc/fosdem/egg.xcf: New file. + * doc/fosdem/fosdem.pdf: New file. + * doc/fosdem/fsb-logo-guile-guix-gnu.png: New file. + * doc/fosdem/fsb-logo-guile-guix-gnu.xcf: New file. + * doc/fosdem/fsb-logo-guile-guix-mes.png: New file. + * doc/fosdem/fsb-logo-guile-guix-mes.xcf: New file. + * doc/fosdem/fsb-logo.png: New file. + * doc/fosdem/guix-build-bootstrap-tarballs.log: New file. + * doc/fosdem/html.sty: New file. + * doc/fosdem/mes.png: New file. + * doc/fosdem/mes.xcf: New file. + + mescc: bugfix: arg as function call. + * module/language/c99/compiler.mes (expr->arg): + +2017-01-18 Jan Nieuwenhuizen + + mini-mes: gcc: run (cons 0 1). + +2017-01-15 Matt Wette + + nyacc: new release 0.74.3 + + nyacc: CPP working better now + +2017-01-14 Matt Wette + + nyacc: something working + + nyacc: still debugginug + +2017-01-12 Matt Wette + + nyacc: working # and ## I think, but lots of debug output too + +2017-01-11 Matt Wette + + nyacc: exceptions worked on.. still need to fix # + + nyacc: new release 0.74.2 + + nyacc: fixed C99 use of 'defined XYZ' (no parens) + + nyacc: merged master + + nyacc: working on fixes + +2017-01-10 Jan Nieuwenhuizen + + mescc: Read and display sexp dumped by mes. + * lib.c (dump)[MES_HACK]: Dump small hello-world sexp, to be handled by + * doc/examples/tiny-mes.c (display_): New function. + * module/mes/libc-i386.mes (i386:accu->base, i386:mem->accu, + i386:mem+n->accu): New functions. + * module/mes/libc-i386.scm: Export them. + * GNUmakefile (mes-32): New target. + +2017-01-17 Jan Nieuwenhuizen + + mescc: Support global pointer assignments. + * module/mes/libc-i386.mes (base->accu-ref, local-ref->base): New functions. + * module/mes/libc-i386.scm: Export them. + * module/language/c99/compiler.mes (base->ident-ref, ident-ref->base): + New functions. + + mescc: Add data as loadable ELF section. + * module/mes/elf.mes (make-elf): Add data as loadable section too. + + mescc: Support switch. + * module/language/c99/compiler.mes (case->jump-info): New function. + (ast->info): Use it. + * doc/examples/t.c (swits): Test it. + +2017-01-10 Jan Nieuwenhuizen + + mescc: Handle enums. + * module/language/c99/compiler.mes (, ): New slots for info. + (make, clone): Add them. + (.types, .constants): New accessors. + + mescc: Update for. + * module/language/c99/compiler.mes (ast->info): Rewrite for to use + test->jump->info. + +2017-01-17 Jan Nieuwenhuizen + + scm: Add string-delete. + * module/srfi/srfi-13.mes (string-delete): New function. + +2017-04-02 Jan Nieuwenhuizen + + mescc: Add open/read C-tests. + * scaffold/m.c: New file. + * scaffold/tiny-mes.c: New file. + * GNUmakefile (m, tiny-mes): New targets. + * scaffold/micro-mes.c: Update gcc-libc bits. + * scaffold/mini-mes.c: Likewise. + +2017-01-10 Jan Nieuwenhuizen + + mescc: Support ?. + * module/language/c99/compiler.mes (ast->info): Support cond-expr. + * scaffold/t.c (test): Test it. + + mescc: Support open, read. + * module/mes/libc-i386.mes (i386:write): Fix comment. + (i386:open, i386:read): New functions. + * module/mes/libc-i386.scm: Export them. + * module/language/c99/compiler.mes (i386:libc): Add them. + (getchar, putchar): New libc functions. + (libc): Add them. + + mescc: Support globals. + * module/language/c99/compiler.mes (write-any): Catch writing of + procedure and give more debug information. + (ref-local, ref-global): Remove. + (push-global-ref, push-global, push-ident-ref): New functions. + (push-ident): New function. + (expr->arg): Use them. + (ident->accu, ident->accu, accu->ident, value->ident, ident->base): + Take info parameter, also handle globals. + (ident-address->accu, ident->global, cstring->number): New functions. + (ast->info): Update. + * module/mes/libc-i386.mes (i386:ret-local): Remove. + (i386:push-global-ref): Rename from i386:ref-global. + (i386:push-local): Rename from i386:ref-local. + (i386:value->local): Rename from i386:local-assign. + (i386:push-global, i386:push-local-ref, i386:value->global, + i386:local-address->accu): New functions. + * module/mes/libc-i386.scm: Export them. + +2017-01-09 Jan Nieuwenhuizen + + mescc: Small ELF tweaks allowing debugging with gdb. + * module/mes/elf.mes (make-elf): Change note section to comment. Fixes + readelf. Add SHF-ALLOC to .text and .data. + +2017-01-08 Jan Nieuwenhuizen + + mescc: Handle && in if and while. + * scaffold/t.c (test): Add strcmp tests. + * module/language/c99/compiler.mes (expr->arg): + (test->jump->info): New function. + (ast->info): Use it. + * module/mes/libc-i386.mes (i386:global->accu): + (i386:base-mem->accu): Rename from i386:mem->accu. + (i386:byte-base-mem->accu): Rename from i386:base-mem->accu. + (i386:accu-not, i386:global->accu, i386:xor-accu): New functions. + * module/mes/libc-i386.scm: Export them. + +2017-01-07 Jan Nieuwenhuizen + + mescc: Proper support for i++,++i,i--,--i. + * module/language/c99/compiler.mes (ast->info): Bugfix: locals. + Add i--, --i. Properly support i++, ++i. + * module/mes/libc-i386.mes (i386:function-locals): Support 8 local vars. + * scaffold/t.c (test): Test it. + +2017-04-02 Jan Nieuwenhuizen + + mescc: Beginning of expression and test template. + * scaffold/t.c: New file. + * GNUmakefile (mescc-check, t-check): New targets. + * module/language/c99/compiler.mes (write-any): Catch weirdness. + (make): Add slot. + (.function): New accessor. + (clone): Handle it. + (function->info): Set it. + (ast->info): Make tests generic in if, for, while. Add goto, label, + !, ==, !=, -, &&. + * module/mes/elf-util.mes (lambda/label->list): New function. + (text->list): Use it. + (functions->text, function-prefix): New function. + (function-offset): Use it. + (label-offset): New function. + * module/mes/elf-util.scm (mes): Export them. + * module/mes/elf.mes (make-elf): Use text->list. + * module/mes/libc-i386.mes (eputs, puts): Remove. + (i386:byte-base-sub): Rename from sub-byte-base. + (i386:byte-jump-z): Rename from i386:Xjump-byte-z. + (i386:byte-mem->accu): Rename from i386:Xmem-byte->accu. + (i386:byte-mem->base): Rename from i386:Xmem-byte->base. + (i386:accu->local, i386:accu-non-zero?, i386:accu-zero?, + i386:base-sub, i386:byte-sub-base, i386:jump-c, i386:jump-cz, + i386:jump-nc, i386:jump-ncz, i386:byte-mem->base, i386:sub-base, + i386:test-accu, i386:test-base, i386:test-jump-z, i386:value->base, + i386:xor-zf): New functions. + +2017-01-05 Jan Nieuwenhuizen + + mescc: Have micro-mes use strcmp to print help. + * doc/examples/micro-mes.c (main): Add --help. + * module/language/c99/compiler.mes (info?): New function. + (expr->accu): Handle function call and sub. + (ast->info): Handle if not, and, de-ref, eq, sub, return f (). + * module/mes/libc-i386.mes (i386:accu-zero?, i386:Xmem-byte->accu, + i386:Xmem-byte->base, i386:jump-byte-nz, i386:jump-byte-z, + i386:test-byte-base, i386:Xjump-byte-z, i386:sub-byte-base): New + functions. + * module/mes/libc-i386.scm: Export them. + + mescc: Compile specific for loop. + * module/language/c99/compiler.mes (ast->info): Handle for, pre-inc. + * GNUmakefile (main): New target. + * doc/examples/main.c: + (exit, write, strlen,puts)[__GNUC__]: New functions; import from micro-mes.c + (_start): New function. + +2017-01-04 Jan Nieuwenhuizen + + mescc: Refactor compiler. + * module/language/c99/compiler.mes (make, clone): Lightweight functional + GOOPS-like list-based info structure. + (make-text+globals+locals): Remove. + (ast->info): Rename from statement->text+globals+locals, refactor. + Update callers. + (function->info): Rename from function->globals, refactor. Update + callers. + (ast-list->info): New function. + +2017-01-07 Jan Nieuwenhuizen + + scm: Fix psyntax/keyword/optargs interaction bug. + * module/mes/psyntax-0.mes (self-evaluating?): Add keyword?. + * module/mes/pmatch.mes (mes): Add missing psyntax dependency. + * module/mes/optargs.scm (rest-arg->keyword-binding-list): Make error + messages non-constant. + * tests/optargs.test ("clone "): New test. + +2017-01-03 Jan Nieuwenhuizen + + mescc: Compile file supplied on command line. + * scripts/mecc.mes: Pass (command-line) to main. + + nyacc: Add cpp to c99 mes module. + * module/nyacc/lang/c99/parser.mes: Include (nyacc lang c99 cpp). + + mescc: Rename symbols to globals. + * module/language/c99/compiler.mes: + + mescc: Have micro-mes use if not to segfault. + * module/language/c99/compiler.mes (write-any): Check explicitly on + number?, report error otherwise. + (statement->text+symbols+locals): Remove statement-offset. + Handle compounds. Handle very specific if. + (function->symbols): Remove unused text-offset. + * doc/examples/micro-mes.c (main): If argc > 1 print argv1. Fixes + segfault :-) + * module/mes/elf-util.mes (symbols->text): Loop rather than map, + feed text-offset. + * module/mes/libc-i386.mes (i386:local-test, i386:jump-le): New + functions. + * module/mes/libc-i386.scm: Export them. + + mescc: Have micro-mes print argv. + * module/language/c99/compiler.mes (expr->arg): Bugfix argv: Use + size=4 (int). + (statement->text+symbols+locals): Bugfixes: array-ref, initialize with + immediate, initialize with local. + (formals->locals): Bugfix: formals counted down from -1 [WAS: down to + -1]. + * module/mes/libc-i386.mes (i386:call): Reverse args pushes to match + formals index changes. + (i386:write): Update for changed formals push order. + (i386:mem->accu, i386:value->accu): New functions. + * module/mes/libc-i386.scm (mes): Export them. + * doc/examples/micro-mes.c (eputs, puts, fputs): Make identical with + mescc's implementations. + (main): Print argv[0] and (unconditionally; crash if not given) argv[1]. + + mescc: Have micro-mes print argc. + * module/language/c99/compiler.mes (accu->ident): New function. + (statement->text+symbols+locals): Use it to implement initialization + with immediate, local. + (_start): Call main with argc,argv [WAS: 0,0]. + * module/mes/libc-i386.mes (i386:push-accu, i386:accu->local): New + functions. + * module/mes/libc-i386.scm: Export them. + * doc/examples/micro-mes.c (main): Return argc as exit status. + + mescc: Support literal .byte in asm (). + * module/language/c99/compiler.mes (expr->arg): Handle array-ref (int + only). + (byte->hex, asm->hex): New functions. + (statement->text+symbols+locals): Use it to implement asm (). + + mescc: Remove data section from disassembly. + * module/mes/elf.mes (make-elf): Remove executable bit from data. + +2017-01-02 Jan Nieuwenhuizen + + mescc: Formals, local variables. + * module/language/c99/compiler.mes (statement->text+symbols+locals): + Rename from statement->text+symbols. Handle locals. + (formals->text): Add proper function preamble. + (formals->locals): Add formals as locals. + (expr->accu, ident->accu, ident->base, ident-ref, global-ref): New + functions. + (strlen, eputs, fputs, puts): New functions. + (libc): New variable. + (i386:libc): Rename from libc. Remove eputs and puts. + * module/mes/libc-i386.mes (i386:eputs, i386:puts: Remove. + (i386:call, i386:ret): Handle locals as argument. + (i386:function-locals, i386:function-preamble, i386:jump, + i386:local->accu, i386:local-add, i386:local-assign, + i386:local->base, i386:ref-global, i386:ref-local, i386:ret-local, + i386:mem-byte->accu, i386:test-jump, i386:write): New functions. + * module/mes/libc-i386.scm: Export them. + + mescc: Nicer functions/parameters. + * module/mes/libc-i386.mes (eputs, exit, puts): Save stack pointer, + fill parameter registers from stack. + * module/language/c99/compiler.mes (formal->text): Fill parameter + registers from stack memory. + (formals->text): Save stack pointer. + + mini-mes: Parse with Nyacc. + * doc/examples/mini-mes.c: Parse with Nyacc. + +2017-04-02 Jan Nieuwenhuizen + + mescc: Scaffolding of Nyacc compile experiments. + * scaffold/micro-mes.c: New file. + * scaffold/mini-mes.c: New file. + * GNUmakefile (mini-mes, micro-mes): New targets. + * .gitignore: Ignore them. + + mescc: Nyacc updates, factor-out elf-util. + * module/mes/bytevectors.mes + * module/mes/elf-util.mes: New file. + * module/mes/elf.mes: Use it. + (make-elf): Generate symbol-table string-table. + * module/mes/elf-util.scm: New file. + * module/mes/elf.scm: Use it. + * module/language/c99/compiler.mes: Include it. + * module/language/c99/compiler.scm: Include it. + * module/mes/libc-i386.mes (call, eputs, exit, puts): New functions. + * module/mes/libc-i386.scm: Export them. + +2016-12-31 Jan Nieuwenhuizen + + mescc: Use Nyacc frontend. + * module/language/c99/compiler.mes: New file. + * module/language/c99/compiler.scm: Include it. + * module/mes/elf.mes: Move (mes-use-module) into cond-expand. + * module/mes/elf.scm: New file. + * module/mes/libc-i386.scm: New file. + * module/nyacc/lang/c99/parser.mes: Add missing module includes. + * module/nyacc/lang/util.mes: Add missing module include. + * scripts/mescc.mes: Use Nyacc. + * guile/mescc.scm: New file. + * GNUmakefile (guile-mescc): Run it. + +2017-01-03 Jan Nieuwenhuizen + + scm: Avoid xpath's shadowing of filter. + * module/sxml/xpath.scm (xpath:filter): Rename from filter. Fixes + shadowing of core filter. + +2017-01-09 Matt Wette + + nyacc: fixes didn't get in in 0.74.0 + + nyacc: ugh. fixes did not take, why? + +2017-01-08 Matt Wette + + nyacc: new release 0.74.0 + + nyacc: minor fixes + + nyacc: lots of C99/CPP fixes. now more robust for code mode + + nyacc: lots of fixes to make CPP more robust; now need to test + +2017-01-06 Matt Wette + + nyacc: updates for cpp-ok/not-ok + +2017-01-02 Matt Wette + + nyacc: fixed c99/CPP bug: need to skip space before lparen + + nyacc: have something working for in-place include + +2017-01-01 Matt Wette + + nyacc: working on cpp-include fix + +2016-12-31 Matt Wette + + nyacc: creating fixes for 0.73.0 + +2016-12-26 Matt Wette + + nyacc: new release 0.73.0 + + nyacc: misc updates; see ChangeLog + +2016-12-03 Matt Wette + + nyacc: multiple fixes + +2016-08-09 Matt Wette + + nyacc: starting devel on 0.72.0 + +2016-12-26 Jan Nieuwenhuizen + + nyacc: Move README.nyacc. + * module/nyacc/README.nyacc: Moved from README.nyacc. + + nyacc: Add README.nyacc. + * README.nyacc: New file. + +2016-12-25 Jan Nieuwenhuizen + + tests: Move (ice-9 syncase) into cond-expand. + * tests/psyntax.mes: Move (ice-9 syncase) into cond-expand. Fixes + guile-2 deprecation messages. + +2017-03-26 Jan Nieuwenhuizen + + nyacc: Move (ice-9 syncase) into cond-expand. + * module/nyacc/lalr.scm: Move (ice-9 syncase) into cond-expand. Fixes + guile-2 deprecation messages. + * module/nyacc/lang/c99/cpp.scm: Likewise. + * module/nyacc/lang/c99/parser.scm: Likewise. + * module/nyacc/lex.scm: Likewise. + +2017-01-04 Jan Nieuwenhuizen + + core: Move GNUisms inside #if. + * mes.c: Move GNUisms inside #if, add Nyacc #ifs. + (tmp_num2, tmp_num3): Remove. + (make_tmps): Update. + (g_free): Make simple int. Update users. + * lib.c: Update users. + * build-aux/mes-snarf.scm (GCC?): New switch to enable GNU extensions. + +2017-01-22 Jan Nieuwenhuizen + + repl: Fix expand in repl. + * module/mes/repl.mes (repl): Fix expand. Remove sc-expand. + +2017-01-03 Jan Nieuwenhuizen + + scm: Error throws rather than hard exit. + * module/mes/read-0.mes (read-character, read-string): Call error. + * module/mes/scm.mes (error): Call core:error instead of exit. + (syntax-error): Likewise. + * module/mes/repl.mes (repl): Move read into catch. + +2016-12-28 Jan Nieuwenhuizen + + repl: Use exception handling. + * module/mes/repl.mes (repl): Use catch to prevent exit upon error. + + core: Throw exceptions rather than asserts. + * lib.c (error): Throw instead of assert. + (check_formals, check_apply): Update. + * mes.c (scm_symbol_unbound_variable, scm_symbol_not_a_pair, + scm_symbol_system_error, scm_symbol_wrong_number_of_args, + scm_symbol_wrong_type_arg, scm_symbol_unbound_variable): New symbols. + (car, cdr, set_cdr_x, set_env_x, eval_apply, gc_up_arena): Update. + + core+scm: Implement exception handling. + * mes.c (scm_symbol_throw): New symbol. + * module/mes/catch.scm (catch, throw): Implement [WAS: syntactic sugar]. + (make-exception, exception?, exception-key, exception-args): Remove. + * tests/catch.test ("catch", "catch 22"): Add tests. + * module/mes/base-0.scm: Include it. + + Revert "core: Display me debuggor CPS+CC." + This reverts commit 6c327b5bdceae6fc59ac8cce4aed99ea0a491846. + +2016-12-28 Jan Nieuwenhuizen + + core: Display me debuggor CPS+CC. + Having display in the core is handy for debugging. + This is a courtesy commit intended to prevent bitrot. + + * GNUmakefile (mes.o): Depend on display. + * mes.c: Include display. + * display.c: New file. + +2016-12-28 Jan Nieuwenhuizen + + core: Add continuations, call/cc. + * mes.c (type_t): Add CONTINUATION. + (scm_t): Add continuation; + (scm_call_with_current_continuation): New symbol. + (scm_symbol_call_with_current_continuation): New special. + (g_continuations): New global + (CONTINUATION): New field accessor. + (MAKE_CONTINUATION): New make_cell helper. + (car_): Update. + (eval_apply): Implement call/cc. + * module/mes/display.mes (display): Handle continuations. + * module/mes/type-0.mes (): New type. + (cell-type-alist): Add it. + (continuation?): New function. + * tests/base.test ("call/cc"): New test. + + core: Rewrite eval_apply in continuation passing style. + * mes.c (scm_vm_evlis, scm_vm_evlis2, scm_vm_evlis3, scm_vm_apply, + scm_vm_apply2, scm_vm_eval, scm_vm_eval_set_x, scm_vm_eval_macro, + scm_vm_eval2, scm_vm_macro_expand, scm_vm_begin, + scm_vm_begin_read_input_file, scm_vm_begin2, scm_vm_if, + scm_vm_if_expr, scm_vm_call_with_values, scm_vm_call_with_values2, + scm_vm_return): New specials. + (scm_vm_eval_car, scm_vm_eval_cdr, scm_vm_eval_cons, + scm_vm_eval_null_p)[PRIMITIVE-EVAL]: New specials. + (eval_apply_t, g_target): Remove. + (push_cc): New function. + (eval_apply): Rewrite. + (vm_call, eval_env, apply_env, eval_env, macro_expand_env, begin_env, + call_with_values_env): Remove. + * posix.c (stderr_): Update. + * reader.c (read_input_file_env): Update. + * module/mes/base-0.mes: Update. + +2017-01-04 Jan Nieuwenhuizen + + Support radix for string->number, number->string. + * module/mes/scm.mes (string->number, number->string): Support radix. + + Add string-take, string-drop. + * module/srfi/srfi-13.mes (string-take, string-drop): New functions. + + core: Stderr_ also print numbers. + * posix.c (stderr_): Handle numbers. + + Bugfixes bytevectors. + * math.c (modulo): Modulo of negative value correctly. + * module/mes/bytevectors.mes (bytevector-u32-native-set!): + (bytevector-u16-native-set!): Use ash instead of quotient. + + Append-map: handle multiple list. + * module/srfi/srfi-1.mes (append-map): Add optional rest argument. + + core: Move GNUisms inside #if. + * mes.c: Move GNUisms inside #if, add Nyacc #ifs. + (tmp_num2, tmp_num3): Remove. + (make_tmps): Update. + (g_free): Make simple int. Update users. + * lib.c: Update users. + * build-aux/mes-snarf.scm (GCC?): New switch to enable GNU extensions. + + Add drain-input. + * module/mes/guile.mes (drain-input): New function. + + Bugfix for reading #\*eof* character. + * module/mes/read-0.mes (read-character): Bugfix for #\*eof*. + + core: Expose command line. + * mes.c (scm_symbol_argv): New symbol + (main): Use it to add argv to environment. + * module/mes/base.mes (command-line): New function. + + Include srfi-13 in base. + * module/mes/base-0.mes: Include srfi-13. + + Add filter-map. + * module/srfi/srfi-1.mes (filter-map): New function. + + Add srfi-1:iota. + * module/srfi/srfi-1.mes (iota,srf-1:iota): New function. + + Add pretty-print from Guile. + * module/mes/pretty-print.scm: Import. + * module/mes/pretty-print.mes: Include it. + * AUTHORS: Mention it. + + Add make-string, object->string. + * module/mes/guile.mes (make-string, object->string): New functions. + + Add list-set!, string-set! + * module/mes/scm.mes (list-set!, string-set!): New functions. + + Fix core:car, core:cdr for specials. + * mes.c (car_, cdr_): Return special. Fixes string->list, returning nil. + * tests/scm.test ("string-length", "string->list"): New tests. + + core: Add continuation on stack. + * mes.c (r3): New stack variable. + (mes_g_stack): Initialize it. + (gc_push_frame): Add it. + (gc_peek_frame): Set it. + + core: Uniformize calling of apply. + * mes.c (eval_apply): Have apply take one argument, like all other vm + functions: r1; cons of function f and argument list x. Sorry John. + (r2): Repurpose as save/load register. Update users. + (r3): Remove. + (vm_call): Remove p2. Update callers. + + core: Refactor stack handling. + * mes.c (gc_pop_frame, gc_push_frame): New Functions. + (gc_frame, gc_stack): Remove. + (vm_call): Update callers. + * lib.c (dump, bload_env): Update callers. + + Add simple-format. + * module/mes/display.mes (simple-format, format): New functions. + + Display: If possible, show name of closure. + * module/mes/display.mes (display): Lookup closure's name and display it. + +2016-12-25 Jan Nieuwenhuizen + + Update documentation. + * doc/ANNOUNCE-0.4: New file. + * NEWS: Typo. + + guix hash: 1jpm8m8y2dqsl3sc6flf8da4rpdrqh6zgr2mghzjw0lg34v1r21j + + Release 0.4. + * configure (VERSION): Bump. + + Remove hardcoded duplication of version. + * GNUmakefile (CPPFLAGS): Include VERSION. + * mes.c (main): Use it. Add --dump and --load to --help. + (scm_symbol_mes_prefix, scm_symbol_mes_version): New sybols. + (mes_symbols): Use them to set prefix and version. + * module/mes/base-0.mes (effective-version): Use %version. + * module/mes/repl.mes (welcome): Likewise. + +2016-12-24 Jan Nieuwenhuizen + + Update documentation. + * HACKING: Update status, some ideas where to go next. + * NEWS: Update status. + * README: Update. + * doc/ANNOUNCE: Move from top. + * doc/ANNOUNCE-2: Likewise. + * doc/ANNOUNCE-0.3: New file. + + make: Install nyacc scripts too. + * make/install.make (install): Add scripts/nyacc.mes, scripts/nyacc-calc.mes. + +2016-12-25 Jan Nieuwenhuizen + + Revert "core: Display me debuggor." + This reverts commit 53ec23a0edcfdcb7dd4e32277e5a24e0a8fab5dd. + +2016-12-25 Jan Nieuwenhuizen + + core: Display me debuggor. + Having display in the core is handy for debugging. + This is a courtesy commit intended to prevent bitrot. + + * GNUmakefile (mes.o): Depend on display. + * mes.c: Include display. + * display.c: New file. + +2016-12-25 Jan Nieuwenhuizen + + Revert "core: FAT_C_READER: Show your speed." + This reverts commit 5a9b9ac36bd33e497272b287ab1f0db715e01d38. + +2016-12-25 Jan Nieuwenhuizen + + core: FAT_C_READER: Show your speed. + scripts/nyacc.mes runs in 4s rather than 18s with fat C reader. + This is a courtesy commit intended to prevent bitrot. + + * mes.c (quasiquote, unquote, unquote_splicing, syntax, quasisyntax, + unsyntax, unsyntax_splicing): Add symbols. + * reader.c (char_eof, char_nul, char_alarm, char_backspace, char_tab, + char_newline, char_vtab, char_page, char_return, + char_space)[FAT_C_READER]: New global variables. + (make_keyword, read_block_comment, read_character, read_hex, + append_char, read_string, fat_c_lookup_, fat_c_eat_whitespace, + fat_c_read_word): New functions. + (eat_whitespace_, read_word_, lookup_)[FAT_C_READER]: Add hook. + +2016-12-24 Jan Nieuwenhuizen + + Refactor reader. + * module/mes/read-0.mes (read-hash): New function. + (read-word): Use it. + (eat-whitespace): Rewrite. + (display): Minimal implementation through core. + * lib.c (stderr_): Support printing of strings while booting. + + core: Remove c3+r abbreviatons. + * lib.c (caaar, caadr, caddr, cdadr, cadar, cddar, cdddr, cadddr): + Remove. + * mes.c: Rewrite callers + * module/mes/read-0.mes: Rewrite callers. + * module/mes/base.mes (caaar, caadr, caddr, cdadr, cadar, cddar, cdddr, + cadddr): New function. + + core: Move dump, load, bload to lib.c. + * lib.c (dump, load, bload): Move from mes.c + * mes.c (dump, load, bload): Remove. + + core: Add getenv, verbose module loading on MES_DEBUG. + * mes.c (MAKE_REF, MAKE_STRING): Oops, remove stray semicolon. + * posix.c (getenv_): New function. + * module/mes/base-0.mes (load): Use it to switch on MES_DEBUG=1. + (mes-use-module): Remove commented-out code. + + core: Add some error checking. + * lib.c (length): Return -1 for non-proper lists. + (error): New function. + (assert_defined): Use it. + (check_formals, check_apply): New functions. + * mes.c (car, cdr, set_cdr_x, set_env_x, eval_apply): Add error check. + * srfi/srfi-1.mes (member): New function. + * tests/srfi-1.tests ("member"): New test. + + core: Move reader and posix functions from mes.c + * mes.c (getchar, ungetchar, peekchar, peek_byte, read_byte, + unread_byte, write_byte, read_input_file_env_, read_input_file_env): + Remove. + * posix.c (getchar, ungetchar, peekchar, peek_byte, read_byte, + unread_byte, write_byte): Move from mes.c. + * reader (read_input_file_env_, read_input_file_env): Move from mes.c. + + core: Remove unused symbols. + * mes.c (scm_symbol_noexpand, scm_symbol_syntax, + scm_symbol_quasisyntax, scm_symbol_unsyntax, + scm_symbol_unsyntax_splicing, scm_symbol_quasiquote, + scm_symbol_unquote, scm_symbol_unquote_splicing, scm_symbol_define, + scm_symbol_define_macro): Remove. + + Add write, add display test, some fixes. + * mes.c (write_byte): Rename from write_char. + * module/mes/display.mes (display): Fixes for write: char, closure, procedure. + (write-char, write, with-output-to-string): New functions. + * tests/read.test: Include base-0 to see some output. + * tests/display.test: New file. + * GNUmakefile (TESTS): Add it. + + core: Remove display. + * posix.c (stderr_): New function. + * display.c: Remove. + * mes.c: Remove includes. Use stderr_ instead of display_. + (gc_loop): Preserve function's name. + (arity_): New function. + * GNUmakefile (mes.o): Remove dependency on display. + * module/mes/read-0.mes: Use core:stderr instead of display, newline. + (newline): New function. + * module/mes/base-0.mes: Use core:stderr instead of display. + Include (mes display). + * module/mes/display.mes: New file. + * lib.c (assert_defined): Move from mes.c. + (string_to_cstring): Move from posix.c + * build-aux/mes-snarf.scm (function-environment): Initialize function + name with scheme string. + + Import srfi-26 from Guile. + * module/srfi/srfi-26.scm: Import. + * module/srfi/srfi-26.mes: Include it. + * AUTHORS: Mention it. + +2016-12-23 Jan Nieuwenhuizen + + core: Remove symbol_to_list, char_to_integer, integer_to_char. + * mes.c (symbol_to_list, char_to_integer, integer_to_char): Remove + * module/mes/read-0.mes (symbol->list, integer->char, + symbol->keyword): New function. + (read-word): Use symbol->keyword. + * module/mes/type-0.mes (char->integer): New function. + * module/mes/scm.mes (keyword->symbol): New function. + + core: Remove string.c. + * string.c: Remove. + * mes.c (eval_apply): Remove caller. + * GNUmakefile (mes.o): Remove dependency on string. + * module/mes/psyntax-0.mes (eval): Handle "noexpand". + * module/mes/type-0.mes (string->symbol, symbol->list, symbol->string): + New function. + + core: Remove number_to_string. + * string.c (number_to_string): Remove. + * module/mes/scm.mes (number->string): New function. + + core: Remove substring. + * string.c (substring): Remove. + * module/mes/scm.mes (substring): New function. + + core: Remove string_length. + * module/mes/scm.mes (string-length): New function. + + core: Remove list_to_string. + * string.c (list_to_string): Remove. + * module/mes/read-0.mes (list->string): New function. + * module/mes/scm.mes (list->string): Remove. + + core: Remove string-append. + * string.c (string_append): Remove. + * module/mes/type-0.mes (string-append): New function. + * module/mes/base-0.mes: Include type-0 without using string-append. + + core: Remove string. + * string.c (string): Remove. + * module/mes/type-0.mes (string): New function. + + Add exit. + * lib.c (exit_): Rename from builtin_exit. + * module/mes/scm.mes (list): Remove. + + core: Remove last_pair, list_ref, string_ref. + * lib.c (last_pair, list_ref): Remove. + * string.c (string_ref): Remove. + * module/mes/type-0.mes (string->list): New function. + * module/mes/scm.mes (string-ref): New function. + + core: Make closure real type. + * display.c (display_helper): + * mes.c (type_t): Add CLOSURE. + (scm_t): Add closure. + (CLOSURE): New macro. + (eval_apply:apply): Update. + (eval_apply:eval): Remove closure special-casing. + (gc_loop): Handle CLOSURE. + * module/mes/read-0.mes: Update types. + * module/mes/type-0.mes: Update types. + * display.c (display): Update. + * module/mes/fluids.mes (env:escape-closure): Check for '*closure. + + core: Remove quote, quasiquote, quasisyntax. + * mes.c (quote, quasiquote, quasisyntax): Remove. + + core: Remove make_lambda. + * mes.c (make_lambda): Remove. + + core: Remove type.c. + * module/mes/type-0.mes: Resurrect. + * module/mes/base-0.mes: Include it. + * module/mes/read-0.mes (not, pair?, atom?): New functions. + * type.c: Remove. + * mes.c: Remove callers. + * GNUmakefile (mes.o): Remove dependency on type. + + core: Remove gc_show. + * mes.c (gc_show): Remove. + + core: Remove add_environment. + * mes.c (add_environment): Remove. Update callers. + (scm_symbol_dot): New global. + + core: Remove make_string. + * mes.c (MAKE_STRING): New macro. + (make_string): Remove. Update callers. + * string.c: Update callers. + + core: Remove make_ref. + * mes.c (MAKE_REF): New macro. + (make_ref): Remove. Update callers. + + core: Remove make_char. + * mes.c (MAKE_CHAR): New macro. + (make_char): Remove. Update callers. + * reader.c (peek_char, read_char, unread_char): Remove. + * module/mes/scm.mes (peek-char, read-char, unread-char): New function. + + core: Remove make_number. + * mes.c (MAKE_NUMBER): New macro. + (tmp_num_, tmp_num_2): New function. + (make_number): Remove. Update callers. + + Remove make_function. + * mes.c (make_function): Remove. + + core: Remove make_keyword. + * mes.c (make_keyword): Remove. + * module/mes/read-0.mes (): New global. + (read-word): Use it with make_cell instead fo make-keyword. + * strting.c (symbol_to_keyword): Use make_cell instead of make_keyword. + + core: Remove make_macro. + * module/mes/read-0.mes (): New global. + (env:macro): Use it with make_cell instead of make_macro. + * mes.c (make_macro): Remove. + * type.c (car_): Rename from mes_car. + (cdr_): Rename from mes_cdr. + + core: Simplify lookup. + * reader.c (lookup_): Rename from lookup. Remove all lookups except + for numbers and symbols. Update callers. + * mes.c (make_symbol_): Rename from internal_make_symbol. Update + callers. + * module/mes/read-0.mes (lookup): New function. + (read-word): Remove all lookup calls, except for numbers and symbols. + + Remove lookup-char. + * reader.c (lookup_char): Remove. + * module/mes/read-0.mes (lookup-char): Remove. + (read-word): Rewrite using quote. + + core: Cleanup symbol initialization and lookup. + * build-aux/mes-snarf.scm (symbol->names): New function + (function->environment): Initialize symbol. + (generate-includes): Also write .symbol-names.i. + * mes.c (mes_symbols): Include it. Remove internal_lookup_symbol. + * display.c (display): Handle display of nil in symbol list. + * reader.c (internal_lookup_symbol): Remove name-fu. + +2016-12-22 Jan Nieuwenhuizen + + core: Remove most of reader. + * reader.c (append_char, read_block_comment, read_character, read_hex, + read_string): Remove. + (eat_whitespace, read_word)[READER]: Remove. + * mes.c (list_to_symbol): New function. + * module/mes/read-0.mes (list->symbol, read-character, read-hex, + read-string): New functions. + +2016-12-25 Jan Nieuwenhuizen + + Refactor reader. + * module/mes/read-0.mes (eat-whitespace): More efficient ordering/peeking. + * module/mes/read-0.mes (read-word): Handle tab. + +2016-12-22 Jan Nieuwenhuizen + + core: Disable reader. + * mes.c (READER): Switch off. + * module/mes/read-0.mes (eat-whitespace): Handle #;. + + core: Do some tail call elimination. + * mes.c (eval_apply): Use goto instead of return. + + core: One big eval_apply. + * mes.c (eval_apply): New function. + (eval_apply_t): New type. + (g_target): New global. + (vm_evlis, vm_apply_env, vm_eval_env, vm_expand_macro_env, + vm_begin_env, vm_if_env, vm_call_with_values_env): Remove. Update callers. + (macro_expand_env): Rename from expand_macro_env. + * guile/mes.mes: Update callers. + * module/mes/base-0.mes: Likewise. + * module/mes/mes-0.mes: Likewise. + * module/mes/psyntax-1.mes: Likewise. + * module/mes/repl.mes: Likewise. + + core: Remove vm_call_lambda. + * mes.c (vm_call_lambda): Remove. + (call_lambda): Use begin_env. + + Support PEG from Guile. + * module/mes/peg.mes: New file. + * module/mes/peg/cache.scm: New file. + * module/mes/peg/codegen.scm: New file. + * module/mes/peg/simplify-tree.scm: New file. + * module/mes/peg/string-peg.scm: New file. + * module/mes/peg/using-parsers.scm: New file. + * tests/peg.test: New file. + * GNUmakefile (TESTS): Add it. + + Support pmatch from Guile. + * module/mes/pmatch.scm: New file. + * module/mes/pmatch.mes: New file. + * AUTHORS: Mention it. + + Use include-from-path for psyntax.pp. + * module/mes/psyntax.pp: Rename from module/mes/psyntax-pp.mes. + * module/mes/psyntax.mes: Update. + * AUTHORS: Update. + + Use include-from-path for upstream. + * module/mes/lalr.scm: Rename from module/mes/lalr.upstream.mes. + * module/mes/lalr.mes: Update. + * module/mes/match.scm: Rename from module/mes/match.upstream.mes. + * module/mes/match.mes: Update. + * module/mes/optargs.scm: Rename from module/mes/optargs.upstream.mes. + * module/mes/optargs.mes: Update. + * module/mes/quasisyntax.scm: Rename from module/mes/quasisyntax.upstream.mes. + * module/mes/quasisyntax.mes: Update. + * module/srfi/srfi-1.scm: Rename from module/srfi/srfi-1.upstream.mes. + * module/srfi/srfi-1.mes: Update. + * module/srfi/srfi-9.scm: Rename from module/srfi/srfi-9.upstream.mes. + * module/srfi/srfi-9.mes: Update. + * AUTHORS: Update. + +2016-12-11 Jan Nieuwenhuizen + + Add string-copy, string=, string=?, char?, char<=?, char>=?. + * module/srfi/srfi-13.mes: New file. + * module/mes/scm.mes (char?, char<=?, char>=?): New function. + * module/srfi/srfi-13.mes: New file. + * tests/srfi-13.test: New file. + * string.c (string_to_symbol): Handle "". + +2016-12-22 Jan Nieuwenhuizen + + core: Remove quasiquote, quasisyntax. + * quasiquote.c: Remove. + * mes.c: Remove callers. + * GNUmakefile (mes.o): Remove dependency on quasiquote. + + core: Disable quasiquote. + * mes.c (QUASIQUOTE): Switch off. + * tests/read.test: Remove quasiquote tests. + + Refactor quasiquote. + * module/mes/quasiquote.mes (quasiquote): Refactor. + * tests/quasiquote.test: Add tests. + + core: Bugfix append with one argument. + * mes.c (append): Handle one argument. + * tests/base.test ("append", "append 0" ... "append 5"): New tests. + + core: Do macro expansion only once. + * mes.c (vm_eval_env): I will expand this macro only once. + +2016-12-21 Jan Nieuwenhuizen + + Add psyntax-based quasisyntax. + * module/mes/quasisyntax.upstream.mes: Import from Guile. + * AUTHORS: Mention it. + * module/mes/quasisyntax.mes: New file. + * module/mes/psyntax.mes: Include it. + + core: Remove define. + * base-0.mes (cons*): Refactor. + * module/mes/read-0.mes: Implement define, define-macro using macros. + * define.c: Remove. + * mes.c: Remove callers. + * GNUmakefile (mes.o): Remove dependency on define. + +2016-12-18 Jan Nieuwenhuizen + + nyacc: Support enhanced Guile-1.8. + * module/nyacc/lalr.scm: Export process-spec, reserved?. Use optargs, syncase. + * module/nyacc/lex.scm: Use optargs, syncase. + * module/nyacc/parse.scm: Use optargs. + * module/nyacc/util.scm: Use optargs. + * module/nyacc/lang/util.scm: Use optargs. + * module/nyacc/lang/c99/cpp.scm: Use syncase. + * module/nyacc/lang/c99/parser.scm: Use optargs, syncase. + +2016-12-19 Jan Nieuwenhuizen + + Nyacc example scripts: support Guile-1.8. + +2016-12-18 Jan Nieuwenhuizen + + Add Nyacc example scripts. + * guile/nyacc-calc.scm: New file. + * guile/nyacc.scm: New file. + * scripts/nyacc-calc.mes: New file. + * scripts/nyacc.mes: New file. + * GNUmakefile (mes-check, guile-check): Run them. + + nyacc: Add mes modules. + * module/nyacc/lang/c99/cpp.mes + * module/nyacc/lang/c99/parser.mes + * module/nyacc/lang/calc/parser.mes + * module/nyacc/lang/util.mes + * module/nyacc/lex.mes + * module/nyacc/parse.mes + * module/nyacc/util.mes + + nyacc: Use standard \return rather than \cr. + +2016-12-17 Jan Nieuwenhuizen + + Import Nyacc 0.72.0. + * module/nyacc: Import module/nyacc. + +2016-12-19 Jan Nieuwenhuizen + + Import psyntax from Guile-1.8: R7RS with-ellipsis. + * GNUmakefile (psyntax-import): New target. + * module/mes/psyntax.ss: Import. + * module/mes/psyntax-pp.mes: Import. + * NEWS: Mention it. + +2016-12-11 Jan Nieuwenhuizen + + Prepare for psyntax-6.3..7.3 support. + * module/mes/psyntax-0.mes (ormap): New function. + (eval): New function. + (remprop): New function. + ($sc-put-cte, $make-environment, environment?, syntax->list, + syntax->vector, literal-identifier=?, $syntax-dispatch, eval-when): + New variable. + +2016-12-20 Jan Nieuwenhuizen + + Add abs. + * module/mes/scm.mes (abs): New function. + + core: Bugfix unread_byte. + * mes.c (unread_byte): Return SCM value instead of stray int. + + Add ash. + * math.c (ash): New function. + * tests/scm.test (ash, ash -1): New tests. + + Support (sxml xpath) for Nyacc c99. + * module/sxml/xpath.mes: New file. + * module/sxml/xpath.upstream.mes: Import from Guile. + * AUTHORS: Mention it. + + Partial (rnrs arithmetic bitwise) support for Nyacc c99. + * module/rnrs/arithmetic/bitwise.mes: New file. + + Nicer closure and builtin procedure display. + * display.c (display): Show closure as procedure with formal + parameters. Display ariry as fake parameters with builtin. + + Add string->number. + * module/mes/scm.mes (string->number): New function. + + Add unless. + * module/mes/scm.mes (unless): New syntax. + + Add iota. + * module/mes/scm.mes: (iota): New function. + * tests/scm.test (iota, iota 0, iota -1): New tests. + + Partial srfi-43 support for Nyacc. + * module/srfi/srfi-43.mes: New file. + + Partial srfi-14 support for Nyacc. + * module/srfi/srfi-14.mes: New file. + * tests/srfi-14.test: New file. + * GNUmakefile (TESTS): Add it. + + Add delete, delq, vector-copy. + * module/mes/scm.mes (filter, delete, delq, vector-copy): New functions. + + Add negative?, positive?, zero?, 1+ 1-. + * module/mes/scm.mes (negative?, positive?, zero?, 1+, 1-): New functions. + + Add missing srfi-1 functions for Nyacc. + * module/srfi/srfi-1.scm (fold, fold-right, remove, append-reverse, + remove!): New functions. + * tests/srfi-1.test: New file. + * GNUmakefile (TESTS): Add it. + * module/srfi/srfi-1.upstream.mes: Import bits from Guile-1.8. + * AUTHORS: Mention it. + + Add even?, odd?. + * module/mes/scm.mes (even?, odd?): New function. + + Bugfix: for-each with two lists. + * module/mes/scm.mes (for-each): Fix for two lists. Always return *unspecified*. + + Add and=>. + * module/mes/base.scm (and=>): New function. + + Add eqv?. + * module/mes/base.scm (eqv?): New function. + +2016-12-19 Jan Nieuwenhuizen + + Closure is not a pair. + * module/mes/base.mes (closure_p, mes_car, mes_cdr): New function. + (pair_p): Closure is not a pair. + * NEWS: Mention it. + * psyntax-0.mes (self-evaluating?): Add closure?. + + Bugfix: support map^3. + * module/mes/base-0.scm (map): Support third list, add more visible + error when used with 4 or more list. + +2016-12-16 Jan Nieuwenhuizen + + Resurrect quasisyntax support. + * mes.c (the_unsyntaxers): New symbol. + (mes_builtins)[QUASISYNTAX]: Initialize it, add to environment. + * quasiquote.c (add_unsyntaxers): Use it. + (vm_eval_quasisyntax): New function. + (eval_quasisyntax): Use it. + +2016-12-18 Jan Nieuwenhuizen + + Add psyntax-based srfi-9. + * module/srfi/srfi-9-psyntax.mes: New file. + + Add support for including Guile files. + * module/mes/guile.mes: New file. + * module/mes/pretty-print.mes: New file. + + Support include and include-from-path. + * module/mes/base-0.mes (include, include-from-path): New function. + + Support backslash in string. + * reader.c (read_string): Handle '\\'. + * tests/read.test: Add it. + + Support #\alarm, #\vtab. + * mes.c (char_alarm): New variable. + (char_vtab): Rename from char_vt. + * reader.c (read_character): Add alarm, update vtab. + * display.c (display): Likewise. + * module/language/c/lexer.mes (read-string): Use vtab. + + Support non-nested #| |# comment. + * module/mes/read-0.mes (read-word, read-block-comment): Implement #|. + * reader.c (read_word, read_block_comment)[READER]: Likewise. + * tests/read.test: Test it. + * NEWS: Mention it. + + Support #; comment. + * module/mes/read-0.mes (read-word): Implement #;. + * reader.c (read_word)[READER]: Likewise. + * tests/read.test: Test it. + * NEWS: Mention it. + +2016-12-17 Jan Nieuwenhuizen + + Minimal syntactic exception support. + * module/mes/catch.mes: New file. + * tests/catch.test: New file. + * GNUmakefile (TEST): Add it. + + Minimal syntactic fluids support. + * module/mes/fluids.mes: New file. + * tests/fluids.test: New file. + * GNUmakefile (TESTS): Add it. + + Add string-prefix?, symbol-prefix, symbol-append. + * module/mes/scm.mes (string-prefix?, symbol-prefix, symbol-append): + New function, + + Add list-head, list-tail. + * module/mes/scm (list-head, list-tail): New function. + + core: Bugfix number-based-cells: allow displaying (current-module). + * display.c (display): Handle cell_symbol_quote as symbol. + +2016-12-21 Jan Nieuwenhuizen + + Make guile switchable in GNUmakefile. + * GNUmakefile (GUILE): New variable. Update users. + * guile/mes-0.scm (mes?, guile-1.8?, guile-2?): New variables. + * module/mes/base.mes (guile?): Remove. + * module/mes/base-0.mes (effective-version, mes?, guile?, guile-1.8?, + guile-2?): New variables. + * tests/cwv.test: Support Guile 1.8. + +2016-12-17 Jan Nieuwenhuizen + + Resurrect guile-mescc with guile-2.1.5. + * scripts/include.mes: Grep all files. + * GNUmakefile (mescc.cat): Update for mes-use-module; list all toplevel inputs. + * module/language/c/lexer.mes: Use (system base lalr). + * module/language/c/parser.mes: Likewise. + * module/language/c/compiler.mes: Likewise. Remove encoding on output port. + * scripts/mescc.mes: Remove BROKEN comment. + +2016-12-25 Jan Nieuwenhuizen + + optargs guile + +2016-12-16 Jan Nieuwenhuizen + + Support Guile optargs. + * module/mes/optargs.upstream.mes: Import latest non-syntax-case + version from Guile. + * AUTHORS: Add it. + * module/mes/optargs.scm: New file. + * tests/optargs.test: New file. + * GNUmakefile (TESTS): Add it. + * NEWS: Update. + + Support => in cond. + * module/mes/base-0.mes (cond): Support =>. + * module/mes/rea-0.mes (cond): Update. + * NEWS: Update. + + core: Support keywords. + * display.c (display): Handle keyword. + * mes.c (type_t): Add KEYWORD. + (eq_p): Handle it. + (make_keyword): New function. + * reader.c (lookup): Use it. + * type.c (keyword_p): New function. + * NEWS: Update. + + Handle form-feed. + * module/mes/read-0.mes (eat-whitespace, read-word): Handle form-feed. + * reader.c (eat_whitespace, read_word): Likewise. + +2016-12-14 Jan Nieuwenhuizen + + core: Make symbols constants. + * mes.c (apply_env,eval_env): Rewrite using switch. + * build-aux/mes-snarf.scm (symbol->header): Define constants. + (symbol->source): Only update g_free and init cells. + +2016-12-13 Jan Nieuwenhuizen + + Extend Scheme reader, reduce C reader dependency. + * mes.c (bload_env): Mark as internal. + (load_env): Likewise. Load Scheme reader from source. Remove dumping. + (dump): New function. + * (vm_begin_env): Allow for gc while read_input_file_env. + (mes_builtins): Add *dot*. + (read_input_file_env)[!READER]: Invoke read-input-file. + * module/mes/read-0.mes (read-env): New function. + (read-word): Support quasisyntax. + Remove usage of ' thoughout. + * module/mes/repl.mes (repl): Use read instead of read-env. + * guile/mes.scm (environment): Add *dot*. + * guile/reader.mes: Update. + * NEWS: Update. + + Silence garbage collector. + * GNUmakefile: unexport MES_DEBUG. + + Update README. + * README: Add a paragraph with current status. + +2016-12-12 Jan Nieuwenhuizen + + guix hash: 0nbdjvmsyarp4vfg3r9hhhnabv11z1b7isw4g09x3kjd0r1lx0mh + + Release 0.3. + * configure (VERSION): Bump to 0.3. + * mes.c (main): Likewise. + * module/mes/repl.mes: Likewise. + + Update Mes in Guile. + * guile/mes.scm: Update for guile-2.2. + * guile/mes.mes: Update from module/mes/mes-0.mes. + * guile/reader.mes: Update from module/mes/read-0.mes. + + Resurrect Mes in Guile. + * guile/mes.mes: New file, from the archives. + * guile/mes.scm: Updates. + + Avoid garbage returns. + * posix.c (set-current-input-port): Return current-input-port. + (force_output): Return scm_unspecified. + + Update documentation. + * README: Add make targets. + * INSTALL: Add guix. + * HACKING: Add info on sc. + + core: Resurrect QUASIQUOTE=0. + * mes.c (mes_builtins) [!QUASIQUOTE]: Do not add unquoters. + * module/mes/base-0.mes (push!, pop!, load, mes-use-module): Rewrite + without quasiquote. + * module/mes/quasiquote.mes (quasiquote): Rewrite using if, and. + * module/srfi/srfi-0 (cond-expand): Rewrite without quasiquote. + + Add loadable modules. + * module/mes/base-0.mes (mes-use-module): Implement. + * module/mes: Update users. + * HACKING: Update. + * NEWS: Update. + * configure (main): Use shell expansion for prefix. + * make/install.make (install): Substitute prefix. + + Use syntax rather than psyntax. + * module/language/c/parser.mes: Switch to syntax. + * module/language/paren.mes: Likewise + * scripts/mescc.mes: Likewise + * scripts/paren.mes: Likewise + * scripts/repl.mes: Likewise + * tests/let-syntax.test: Likewise + * tests/match.test: Likewise + * tests/record.test: Likewise + + Resurrect syntax.mes. + * module/mes/syntax.mes: New file. + * AUTHORS: List it. + + core: use FIXED_PRIMITIVES rather than environment cache. + * cache.c: Remove. + * define.c: Remove callers. + * mes.c: Likewise. + (vm_eval_env) [FIXED_PRIMITIVES]: Hardcode car, cdr, cons, null_p. + * GNUmakefile: Update. + + core: Set max arena size. + * mes.c (MAX_ARENA_SIZE): New global. + (gc): Use it. + + core: Make arena size configurable. + * mes.c (main): Read MES_ARENA. + * scripts/repl.mes: Set MES_ARENA to 5000000 if not already set. + Fixes repl startup. + + core: Grow gc arena gradually. + * mes.c: (gc_up_arena): New function. + (gc): Use it when possible. + (gc_init_cells, gc_init_news): New function. + (mes_symbols): Use them. + + core: gc bugfixes. + * mes.c (make_tmps): New function. + (make_symbols, gc): Use it. + (vm_call_with_values_env): New vm function. + (call-with-values): Call it. + (eval_env): Do not call eval_env inline. + * define.c (vm_define_env): Use r2 rather than local name. + (g_symbols): Rename from symbols. + + core: Split-off cache, display, reader. + * mes.c: Remove cache, display, reader functions. + * cache.c: New file. + * display.c: New file. + * reader.c: New file. + + Add reader in Scheme. + * module/mes/read-0.mes: New file. + * mes.c (char_to_integer, integer_to_char, null_p): Move to core. + (peek_byte, read_byte, unread_byte): New function. + (main): --dump, --load: New option. + * lib.c (char_to_integer, integer_to_char): Remove. + * NEWS: Update. + + core: Cleanup cells. + * mes.c: Use accessors rather than g_cell[] access throughout. + + core: Add function indirection. + * mes.c (functions): New array. + (scm_t): Change function pointer to index. + (make_cell): Handle function. + (call): Update for function change. + (display_): Likewise. + (make_function): New function. + * build-aux/mes-snarf.scm (function->source): Update declarations. + (function->environment): New function. + + core: Number based cells. + * mes.c (scm_t): Change car, string, ref, cdr, macro, vector into g_cell index + [WAS]: scm_t pointer. + * define.c: Update. + * lib.c: Update. + * math.c: Update. + * posix.c: Update. + * quasiquote.c: Update. + * string.c: Update. + * type.c: Update. + * build-aux/mes-snarf.mes Update. + * tests/gc-4.test: New test. + * tests/gc-5.test: New test. + * tests/gc-6.test: New test. + + core: Integrate garbage collector/jam scraper. + * mes.c (r0, r1, r2, r3, stack): New globals. + (gc_loop): Handle MACRO and SCM. + (gc_copy): Handle FUNCTION, allow for pre-allocated SCM and SYMBOL. + (assq): Flag any BROKEN_HEARTs. + (vm_call): New function. Enables moving C stack to GC stack. + (evlis_env, apply_env, eval_env, expand_macro_env, begin_env, + if_env): Use vm_call-indirection. + (call_lambda): New function. + (vm_apply_env): Rename from apply_env. Remove parameters, instead + use r1, r2 and r0. + (vm_evlis_env, vm_eval_env, vm_expand_macro_env, vm_begin_env, + vm_if_env): Likewise. + (acons): New function. + (mes_environment) [!MES_FULL, MES_MINI]: Add cpp switches to create minimally + filled environment, for debugging. + (main): Print free value at exit. + * define.c (define_env): Use vm_call-indirection. + (vm_define_env): Rename from define_env. + * quasiquote.c (eval_quasiquote): Use vm_call-indirection. + (vm_eval_quasiquote): Rename from eval_quasiquote. + * tests/gc-2.test: New test. + tests/gc-2a.test: New test. + tests/gc-3.test: New test. + + Add sicp garbage example: tests/gc-1.test. + + core: Make using GC in switchable, set to off; on dumps core. + + core: Add garbage collector/jam collector experiment. + * mes.c (gc, gc_loop, gc_copy, gc_move, gc_relocate_car, + gc_relocate_cdr, gc_flip): New function. + * tests/gc-0.test: New file. + + Add mes gc test setup. + * tests/gc.test: New file. + + guix hash: 09axqivywpw0l9lm7pk1ncp6690vfv658z731z674ih73yqs5qma + + Release 0.2. + * configure (VERSION): Bump to 0.2. + * mes.c (main): Likewise. + * module/mes/repl.mes: Likewise. + + Update NEWS. + + test: Run psyntax before record. + * GNUmakefile (TESTS): Run psyntax before record. + + test: Add psyntax closure tests. + * tests/closure.test (closure 7, closure 8, closure 9): New test. + + core: Show more info on apply error. + * mes.c (apply_env): Be more specific about what cannot be applied. + + test: Add toplevel begin define test. + * tests/base.test (top begin define): New test. + + core: Bugfix: report name of undefined variable. + * mes.c (assert_defined): Add variable as parmeter, print it. Update + callers. + + core: Use switch in display_helper. + *mes (display_helper): Use switch. + + core: Refactor eval. + * mes.c (eval_env): Rename from builtin_eval, Update callers. Use switch. + + core: One SCM type for function. + * mes.c (function_t): New struct. + (type): One type for function. + (call): Refactor. + * build-aux/mes-snarf.mes: Use arity annotation. WAS: args. Update + annotations. + + core: Cleanup macro expansion. + * mes.c (builtin_eval): Call expand_macro_env after handling primitives. + (expand_macro_env): Include syntax-case expansion, remove skipping + of primitives. + (sc_expand_env): Remove. + + core: Factor-out assert_defined. + * mes.c (assert_defined): New function. + (set_env_x): Use it. + (builtin_eval): Use it. + + Implement load. + * mes.c (symbol_primitive_load): New symbol. + (builtin_eval): Use it to implement primitive-load. + * module/mes/base-0.mes (push!, pop!): New macro. + (load): New macro. + * tests/data/load.scm: New file. + * tests/base.test (load): New test. + + posix: Implement open-input-file. + * posix.c: New file. + * mes.c: Include posix.environment.h, posix.environment.i, posix.environment.c. + (read_input_file_env): Rename from read_file_env. Update + callers. + (load_env): Rename from load_file_env. Update callers. + * GNUmakefile (mes.o): Add posix.c, posix.environment.h, + posix.environment.i dependencies. + + core: Support switching of input stream. + * mes.c (g_stdin): New global. + (getchar): New function, use g_stdin. + (ungetchar): Use g_stdin. + (main): Initialize g_stdin to stdin. + + Update documentation wrt syntax-case. + * HACKING: Update wrt syntax-case. + * NEWS: Likewise. + * README: Likewise. + * guix.scm: Likewise. + + Update AUTHORS. + * AUTHORS: Include information on lalr, match and psyntax. + + Finalize psyntax integration. + * mes.c (sc_expand_env): Exclude primitives, expand native macros. + (symbol_expand_macro): New symbol. + * module/mes/psyntax-0.mes (properties-alist): New function. + * module/mes/psyntax-1.mes: Set expand-macro. + (define-syntax, syntax-rules, let-syntax): Remove macro. + * module/language/c/parser.mes: Use psyntax modules, remove syntax module. + * module/language/paren.mes: Likewise. + * scripts/repl.mes: Likewise. + * tests/match.test: Likewise. + * tests/record.test: Likewise. + * tests/psyntax.test (define-syntax swap!): Add test. + * module/mes/let-syntax.mes: Remove. + * module/mes/syntax.mes: Remove. + + core: Quoted internals are symbols. + * mes.c (begin_env): Rename from begin. Update callers. + (scm_begin, scm_if, scm_define, scm_set_x): Rename from symbol_*. + (symbol_begin, symbol_define, symbol_if, scm_lambda, scm_set_x): New symbols. + (mes_environment): Add them to environment, SYMBOL->SCM. + * define.c (define_env): Rename from define. Update callers. + * build-aux/mes-snarf.scm: Shadow internals (SCM) by their symbol. + + test: More values, call-with-values tests. + * tests/cwv.test: New file. + * GNUmakefile (TESTS): Add it. + * tests/scm.test: Remove value and call-with-values tests. + + psyntax: More tests. + * tests/psyntax.test: Add tests. + + core: Fix quasisyntax reading. + * mes.c (readword): Avoid unspecified behaviour in comma list. + + test: Add new macros. + * module/mes/test.mes (pass-if-equal, expect-fail): New macros. + + repl: Add sc-expand meta command, include syntax-case. + * module/mes/repl.mes (,sc-expand): New meta command. + * scripts/repl.mes: Include psyntax-0, psyntax-1, psyntax. Not used as + basis for match yet. + + Add syntax-case based syntax-rules. + * module/mes/psyntax-1.mes (syntax-rules): New syntax transformer, + based on syntax-case. + (define-syntax-rule): New macro. + (let-syntax): New macro, for syntax-case. + * tests/let-syntax.test: Switch to syntax-case. + * tests/psyntax.test: Add syntax-rules and syntax-rule test. + + Bugfix include.mes: skip commented modules. + * scripts/include.mes: Make regexp more strict. + + Initial psyntax integration. + * mes.c (sc_expand_env): New function. + (builtin_eval): Use it. + * module/mes/psyntax-0.mes: New file. + * module/mes/psyntax-1.mes: New file. + * tests/psyntax.test: New file. + * GNUmakefile (TESTS): Add it. + + psyntax: Add missing (interaction-environment) to eval. + * module/mes/psyntax.mes: Add (interaction-environment) to eval. + +2016-12-12 Jan Nieuwenhuizen + + Import psyntax from Guile-1.3a. + * module/mes/psyntax.mes: New file. + * module/mes/psyntax.ss: New file. + + commit 230c435383087a1e6ad60d9c98d3ec75dd2c3e49 + Author: Mikael Djurfeldt + Date: Tue Aug 19 01:28:50 1997 +0000 + + * syncase.scm: New file: Guile-adaption for syntax-case macros. + psyntax.pp, psyntax.ss: Syntax-case macros, portable version 2 by + R. Kent Dybvig, Oscar Waddell, Bob Hieb and Carl Bruggeman + +2016-12-12 Jan Nieuwenhuizen + + Exit upon error. + * module/mes/scm.mes (error): Add exit 1. + + Mescc: avoid `if'. + * module/language/c/lexer.mes (keywords): Produce `If'. + * module/language/c/parser.mes (c-parser): Use `If.' + + core: Add compile time switch for quasisyntax. + * mes.c [QUASISYNTAX]: New switch. Default off. + (builtin_eval) [QUASISYNTAX]: Handle syntax, unsyntax, quasisyntax. + * quasiquote.c (syntax, unsyntax, unsyntax_splicing, eval_quasisyntax, + add_unsyntaxers) [QUASISYNTAX]: Available only. + + More error handling on apply_env. + * mes.c (apply_env): Assert if applying *unspecified*. + + Bugfix assq_ref_cache for running without environment cache. + * mes.c (assq_ref_cache) [!ENV_CACHE]: Return *undefined* if nothing + found. + + Error handling on failing set!. + * mes.c (set_env_x): Produce error message [WAS: dump core]. + + Simplify toplevel read. + * mes.c (read_file_env): Rename from read_file. + (load_file_env): New function. + (main): Use it. + + boot: fix ignored. + * module/mes/loop-0.mes: Wrap read-file in begin. + * module/mes/mes-0.mes: Remove ignored. + + Implement apply with multiple arguments. + * module/mes/base-0.mes (apply): Handle multiple arguments. + * tests/base.test: (apply, apply 1, apply 2): New test. + + Fix values. + * mes.c (call): Respect any other non-value arguments. + * tests/scm.test (values, values 2, values 3, call-with-values): New test. + + Define garbage collector/jam collector primitives. + * mes.c (make_cell): New primitive alongside make_vector for allocation. + (cons, make_char, make_macro, make_number, make_ref, + internal_make_symbol, make_vector): Use it. + + Implement strings and symbols as list of characters [WAS: c-string]. + * mes.c (scm_t): Add string field. + (make_string, internal_lookup_symbol, internal_make_symbol, + make_symbol, lookup, readword): Take scm*. Update callers. + (display_helper): Support string field. + (append_char): New function. + (readstring): Use it. Produce scm*. + (cstring_to_list): New function. + (add_environment, internal_make_symbol): Use it. + (list_of_char_equal_p): New function. + (internal_lookup_symbol): Use it. + * lib.c (list_ref): New function. + * string.c (string_ref): Use it. + (string, string_append, string_length, substring, number_to_string, + string_to_symbol, symbol_to_string): Update to list-of-characters + implementation. + + Environment cache bugfix for define. + * define.c (define): Invalidate cache. Fixes vector test. + * GNUmakefile (mes-check, guile-check): Use set -e. Fixes skipping over errors. + +2016-12-12 Jan Nieuwenhuizen + + Introduce reference type, use vectors of SCM. + * mes.c (type): Add REF. + (scm_t): Add ref, change vector to *scm_t. Update users. + (alloc): New function. + (cons, make_char, make_macro, make_number, make_string, + internal_make_symbol, make_vector): Use it. + (make_ref): New function. + (vector_entry): New function. + (make_vector, list_to_vector, vector_set_x): Use it. + (vector_ref): Dereference REF entry. + (display_helper): Handle REF. + * lib.c (vector_to_list): Handle REF. + * type.c (ref_p): New function. + * tests/vector.test (vector list): New test. + + Bugfix vector-ref. + + * mes.c (vector-ref): Make copies of simple values. Fixes lalr. + * tests/vector.test (vector-set! 3): New test. + +2016-12-12 Jan Nieuwenhuizen + + Guile gc experiment: remove global scan variable. + + Guile gc experiment: add garbage collection. + + Guile gc experiment: add lists and display. + * guile/gc.scm (gc-nil, gc-null?, gc-list, gc-display, make-symbol): + New function. + + Guile gc experiment: add pairs. + * guile/gc.scm (cell-type, cell-index, gc-cons, gc-car, gc-cdr): New + function. + + Guile gc experiment. + guile/gc.scm: New file. + + Revert "Speedup boot eval/apply." + This reverts commit 6326b3103156fd79cd7bebbb351194626cc8a64b. + + Speedup boot eval/apply. + * module/mes/mes-0.scm (apply-env, evlis, eval-expand, + eval-quasiquote): use IF iso COND: factor 3. + (apply-env): Use lambda iso let: another 30%. + + guix hash: 115jycdz8i1r5sj2fsjqcrh456mayxzaykb8cxxxc3wxfkj8nagf + +2016-11-20 Jan Nieuwenhuizen + + Release 0.1. + * configure (VERSION): Bump to 0.1. + * mes.c (main): Likewise. + * module/mes/repl.mes: Likewise. + + Documentation update. + * HACKING: Target is R6RS-like, at least having syntax-case. + * README: Likewise. + * guix.scm: Likewise. + +2016-10-23 Jan Nieuwenhuizen + + Avoid gratuitous consing with begin and quasiquote. + * mes.c (apply_env, main): Call begin rather than eval with cons'ed + symbol begin. + * module/mes/mes-0.mes (apply-env): Likewise. + * quasiquote.c (add_unquoters): cons global unquoters rather than + creating it fresh. + * module/mes/mes-0.mes (add-unquoters): Likewise. + +2016-10-22 Jan Nieuwenhuizen + + Remove dead code. + * mes.c (mes_environment): Remove dead code. + + Move other post-boot and derived functions to lib.c. + * mes.c (c*r, length, last_pair, builtin_list, vector_to_list, + integer_to_char, char_to_integer, builtin_exit): Move to lib.c. + * lib.c: New file. + * GNUmakefile (mes.o): Depend on lib snarf output. + + Move strings to string.c. + * mes.c (string, string_append, list_to_string, string_length, + string_ref, substring, number_to_string, string_to_symbol, + symbol_to_string): Move to string.c + * string.c: New file. + * GNUmakefile (mes.o): Depend on string snarf output. + + Move arithmetic functions to math.c. + * mes.c (greater_p, less_p, is_p, minus, divide, modulo, multiply, + logior): Move to math.c. + * math.c: New file. + * GNUmakefile (mes.o): Depend on math snarf output. + + Move define, define-macro to define.c. + * mes.c (define, define-macro): Move to define.c + * define.c: New file. + * GNUmakefile (mes.o): Depend on define snarf output. + + Move quasiquote to quasiquote.c. + * mes.c (unquote, unquote_splicing, syntax, unsyntax, + unsyntax_splicing, eval_quasiquote, eval_quasisyntax, add_unquoters, + add_unsyntaxers): Move to quasiquote.c + * quasiquote.c: New file. + * GNUmakefile (mes.o): Depend on quasiquote snarf output. + + Move optional type predicates to type.c. + * mes.c (char_p, macro_p, number_p, pair_p, string_p, symbol_p, + vector_p, builtin_p, boolean_p): Move to type.c + * type.c: New file. + * GNUmakefile (mes.o): Depend on type snarf output. + * module/mes/loop-0.mes (cond, map, let, or, and not, evlis-env, + apply-env, eval-expand, uquote, add-unquoters, eval, + expand-macro-env, eval-begin-env, eval-if-env, sexp:define, + env:define, env:macro): Move to mes-0.mes. + * module/mes/mes-0.mes: New file. + * module/mes/type-0.mes: New file. + * scripts/include.mes: If BOOT, also include mes-0.mes. If TYPE0, + also include type-0.mes. + +2016-12-12 Jan Nieuwenhuizen + + Update NEWS. + * NEWS: Note specials fix and booting with smaller core. + +2016-10-21 Jan Nieuwenhuizen + + Generate C header and includes using snarfing. + * mes.c: Move specific renames and n-args to alist annotation. + * build-aux/mes-snarf.scm: New file. + * GNUmakefile (mes.environment.h): Use it. + (mes.h): Remove. + (clean): Update. + (mes.o): New dependency rule. + * .gitignore: Update. + +2016-10-22 Jan Nieuwenhuizen + + Revert "Flip sign of cached symbols: only search cache if symbol is cached." + This reverts commit cef058be0d6ef5322f74e644bbcd96f1725c6327. + +2016-10-21 Jan Nieuwenhuizen + + Flip sign of cached symbols: only search cache if symbol is cached. + * mes.c (cache_save): Flip sign when caching and invalidating. + (cache_invalidate): Flip sign when invalidating. + +2016-10-20 Jan Nieuwenhuizen + + named let-fu FIXME + +2016-10-21 Jan Nieuwenhuizen + + boot: fix builtin? tests. + * tests/scm.test: Test primitives, not eval. + + Environment cache heuristicts. + * mes.c (ENV_HEAD): New define. + (assq_ref_cache): Use it. + + boot: support apply. + * module/mes/loop-0.mes (eval-env): Add clause for apply-env. + + boot: Remove label support from Scheme. + * module/mes/loop-0.scm (apply-env): Remove label clause. + + boot: vector support. + * mes.c (make_vector): Change to scm interface. + (temp_number): New global. + (list_to_vector): Use it. + * module/mes/scm.mes (c:make-vector): New function. + * tests/scm.test: Remove vector tests. + * tests/vector.test: New file. + * GNUmakefile (TESTS): Add it. + + Avoid let* in scm.mes. + * module/mes/scm.mes (case, max, min): Avoid let*. + +2016-10-20 Jan Nieuwenhuizen + + loop-0: define and, let and cache-invalidate-range. + + boot: support quasiquote in eval. + * module/mes/loop-0.mes (eval-env): Add quasiquote support. + +2016-10-18 Jan Nieuwenhuizen + + Remove evcon from loop-0. + * module/mes/loop-0.mes (loop-0): Handle define-macro. + (cond): New macro. + (eval-env-expand): Remove 'cond clause. + (evcon): Remove. + +2016-10-20 Jan Nieuwenhuizen + + Switch fat-c/boot using environment variable BOOT. + * GNUmakefile: check for BOOT, set CFLAGS. + * mes.c: Remove hardcoded BOOT define. + * scripts/include.mes: include loop-0 when BOOT is set. + +2016-10-16 Jan Nieuwenhuizen + + Implement eval/apply in Scheme. + * module/mes/loop-0.mes: New file. + * module/mes/mes.mes: Remove + +2016-10-20 Jan Nieuwenhuizen + + Reduce eval/apply in core, extend in Scheme. + * mes.c (eval_env_)[BOOT]: Rename from eval_env. Remove define, defin-macro. + (eval_env): New function. + (make_macro): Swap parameter ordering. + (apply_env)[BOOT]: Support label. + +2016-10-19 Jan Nieuwenhuizen + + Avoid adding top of environment to cache. + * mes.c (assq_ref_cache): Only consider caching symbols deeper than + 4*CACHE_SIZE depth. 50% speedup. + + Implement environment cache. + * mes.c (cache_save, cache_lookup, cache_invalidate, + cache_invalidate_range): Implement cache for environment. + (assq_ref_cache): New function, perform cached lookups. + (builtin_eval,lookup_macro): Use it. + (set_cdr_x): Invalidate cache. + (set_x): Likewise. + (apply_env): Likewise. + +2016-10-20 Jan Nieuwenhuizen + + Introduce SCM type for special symbols. + * GNUmakefile (mes.h): Also export SCM to symbols.i + * mes.c: Introduce SCM type for special symbols. + (builtin_eval): Rename from eval_env. Update callers. + * module/mes/base-0.mes (eval): Remove. + * module/mes/repl.mes (repl): Use eval. + + Remove static primitives hack. + * mes.c (internal_primitive_p, internal_p, lookup_primitive, + mes_primitives): Remove. + +2016-10-19 Jan Nieuwenhuizen + + Refactor primitives lookup. + * mes.c (lookup_primitive_): Rename from internal_lookup_primitive, + use scm-compatible signature. + (lookup): Update caller. + (eval_env): Check for builtins first. + +2016-10-18 Jan Nieuwenhuizen + + Remove unused symbol. + * mes.c (symbol_cond): Remove. + + Add report to closure test. + * tests/closure.test: Add report. + + Remove dead code from let.mes. + * module/mes/let.mes (simple-let, named-let, let): Remove dead code. + + Avoid cons* in base. + * module/mes/base-0.mes (cond, simple-let, let): Rewrite without cons*. + * module/mes/base.mes (or): Likewise. + + Differentiate apply asserts. + * mes.c (apply_env): Split bool assert into bool, number and string. + + Add display tag for builtin procedures. + * mes.c (display_helper): Show builtin functions as #. + +2016-10-17 Jan Nieuwenhuizen + + Remove macro expansion from apply. + mes.c (apply_env): Remove macro expansion. + +2016-10-18 Jan Nieuwenhuizen + + Add paredit workaround in scripts. + * scripts/elf.mes: Add paredit parsing comment. + * scripts/repl.mes: Likewise. + + make tests standalone executable. + * tests/closure.test: Add shebang and boot-0 include. + * tests/let-syntax.test: Likewise. + * tests/let.test: Likewise. + * tests/match.test: Likewise. + * tests/quasiquote.test: Likewise. + * tests/record.test: Likewise. + * tests/scm.test: Likewise. + * GNUmakefile (mes-check): Run tests by exec'ing. + + make clean: remove symbols.i. + * GNUmakefile (clean): remove symbols.i. + + Update documentation. + * HACKING: Describe (mes-use-modules). + * NEWS: Update. + + Add --help, --version. + * mes.c (main): Handle --help, --version. + * scripts/include.mes: Handle --help. + * scripts/elf.mes: Pass any arguments on to mes. + * scripts/mescc.mes: Likewise. + * scripts/paren.mes: Likewise. + * scripts/repl.mes: Likewise. + + guix hash: 0g6lcms2hv1i8hdkfh2xz0g7jmsayisr7bcwkp47blkbapqpzpsf + + Update guix hash. + * make/install.make (update-hash): New target. + * guix.scm: Prepare for update. + +2016-10-16 Jan Nieuwenhuizen + + Add installation instructions. + * INSTALL: New file. + + Add guix.scm package recipe. + * guix.scm: New file. + +2016-10-15 Jan Nieuwenhuizen + + Prepare for 0.1 release: update READMEs. + * NEWS: New file. + * AUTHORS: Add info about files taken from Scheme48. + * HACKING: Update with info from TODO. + * TODO: Remove. + +2016-10-16 Jan Nieuwenhuizen + + Prepare for 0.1 release: make install. + * make/install.make (install): Install documentation. + + Prepare for 0.1 release: installable scripts. + * scripts/mes: New symlink. + * scripts/elf.mes: Use it. + * scripts/mescc.mes: Likewise, read all mes modules with include.mes. + * scripts/paren.mes: Likewise. + * scripts/repl.mes: Likewise. + +2016-10-15 Jan Nieuwenhuizen + + Prepare for 0.1 release: gnu-build-system. + * configure: New file. + * make/install.make: New file. + * .gitignore: Ignore generated files. + * build-aux/gitlog-to-changelog: New file. + +2016-10-12 Jan Nieuwenhuizen + + Prepare for 0.1 release: new directory structure. + * scripts/elf.mes: New file. + * scripts/include.mes: New file. + * scripts/mescc.mes: New file. + * scripts/paren.mes: New file. + * scripts/repl.mes: New file. + * doc/examples/main.c: Move from ./main.c. + * module/mes/base-0.mes: Move from ./base0.mes. + * module/mes/base.mes: Move from top. + * module/mes/elf.mes: Likewise. + * module/mes/let-syntax.mes: Likewise. + * module/mes/let.mes: Likewise. + * module/mes/mes.mes: Likewise. + * module/mes/quasiquote.mes: Likewise. + * module/mes/repl.mes: Likewise. + * module/mes/scm.mes: Likewise. + * module/mes/syntax.mes: Likewise. + * module/mes/lalr-0.mes: Move from lib/lalr.mes. + * module/mes/lalr.mes: Move from lib/lalr.scm. + * module/mes/match.mes: Move from lib/match.scm. + * module/mes/record-0.mes: Move from lib/record.mes. + * module/mes/record.mes: Move from lib/record.scm. + * module/mes/test.mes: Move flom lib/. + * module/rnrs/bytevectors.mes: Move from lib/rnrs. + * module/srfi/srfi-0.mes: Move from lib/srfi. + * module/srfi/srfi-1.mes: Likewise. + * module/srfi/srfi-9.mes: Likewise. + * module/language/c/lexer.mes: Move from ./c-lexer.scm. + * module/language/c/parser.mes: Move from ./mescc.scm. + * module/language/c/compiler.mes: New file, split from parser.mes. + * module/language/paren.mes: Move from ./paren.scm. + * module/mes/libc-i386.mes: New file, split from elf.mes. + * tests/base.test: Move from test/. + * tests/closure.test: Likewise. + * tests/let-syntax.test: Likewise. + * tests/let.test: Likewise. + * tests/match.test: Likewise. + * tests/quasiquote.test: Likewise. + * tests/record.test: Likewise. + * tests/scm.test: Likewise. + * hello.S: Remove. + * hello.c: Remove. + * loop2.mes: Remove. + * test/foo.test: Remove. + +2016-10-15 Jan Nieuwenhuizen + + Remove evcon (Sorry John). + * mes.c (evcon): Remove, remove callers. + * base0-if.mes (cond): Rename from disabled-cond. + + Support quasisyntax. + * mes.c (eval_quasisyntax, add_unsyntaxers): New functions. + (eval_env): Use them. + +2016-10-16 Jan Nieuwenhuizen + + Add REPL. + * mes.c (expand_macro_env, force_output): New function. Use STRING_MAX + for string buffers throughout. (eval_env, eval_begin_env): Rename + from eval, eval_begin. Update callers. + * repl.mes: New file. + * base.mes (list?): Move from scm.mes. + * scm.mes (eval, apply, primitive-eval, expand-macro): New function. + * GNUmakefile: New repl target. + +2016-10-12 Jan Nieuwenhuizen + + Avoid 90% of cdr'ing environment, assuming static primitives. + * mes.c (internal_primitive_p)[STATIC_PRIMITIVES: New function. + (lookup_macro)[STATIC_PRIMITIVES]: Use it. + (internal_lookup_primitive)[STATIC_PRIMITIVES]: New function. + (lookup)[STATIC_PRIMITIVES]: Use it. + (mes_primitives)[STATIC_PRIMITIVES]: New function. + (main): Use it. + * base0-if.mes (disabled-cond): Rename from xcond. + * GNUmakefile: Add commented profiling CFLAGS. + +2016-10-16 Jan Nieuwenhuizen + + Do not use quasiquote in base0. + * base0.scm (defined?): Rewrite without quasiquote. + +2016-10-12 Jan Nieuwenhuizen + + Add procedure? to base. + * base.mes (procedure?): Move from scm.mes. + +2016-10-08 Jan Nieuwenhuizen + + speedup: use ->car etc. + +2016-10-11 Jan Nieuwenhuizen + + Avoid out-of-spec strncat usage. + mes.c (readword): Use character assignment instead of strncat. Fixes + Valgrind nit. + + Discern between primitive atoms and symbols. + * mes.c (internal_symbol_p): New function. + (eval): Use it. + +2016-10-10 Jan Nieuwenhuizen + + resurrect mescc. + + cleanup and doc update. + + syntax.mes: silence syntax error. + + test/scm.test: update. + +2016-10-11 Jan Nieuwenhuizen + + test/match.test: pass. + +2016-10-10 Jan Nieuwenhuizen + + lib/match: ugly hygiene hack. FIXME. + + let-syntax.mes: implement. + +2016-10-08 Jan Nieuwenhuizen + + speedup: use ->car etc. + + use IF as primitive, drop using cond/evcon only option. + + c++ type-safety. + + assq: use while instead of recursion. + + mes.c: uniquify symbols. + + mes-check: separate target. + +2016-09-25 Jan Nieuwenhuizen + + Updates to README, TODO. + +2016-08-14 Jan Nieuwenhuizen + + mescc.scm: compile simple, well-behaved for-loop. + + elf.mes: for loop. + + mescc.scm: print two strings. + +2016-08-13 Jan Nieuwenhuizen + + mescc.scm: first a.out produced from main.c. + + lib/match.scm: import. + + lib/srfi/srfi-1.scm: add append-map, filter, find. + + elf.mes: make-elf. + + elf.mes: use elf32-* remove set!. + + elf.mes: remove text-free, softcode data-offset. + + elf.mes: put marker in note section. + + Revert "elf.mes: drop .note section." + This reverts commit b2b5b73b91308407ec82a5ba658aca025512c542. + + elf.mes: drop .note section. + + elf.mes: softcode more. + + mes.c: implement string->list. + + elf.mes: compute text-free, text-offset. + + lib/rnrs/bytevectors.scm: minimal rnrs bytevectors. + + elf.mes: separate-out text, text-free and data sections. + +2016-08-12 Jan Nieuwenhuizen + + resurrect guile-mescc, use write-int and (current-error-port) iso `2'. + +2016-09-25 Jan Nieuwenhuizen + + Revert "mes.c: use single malloc with arena." + This reverts commit 38c364faeff430a5ee28f402d24b073f6bf9a548. + +2016-08-12 Jan Nieuwenhuizen + + mes.c: use single malloc with arena. + + elf.mes: a.out runs. + + elf.mes: error-free header, no program yet. + + elf.mes: readelf -h a.out shows some info. + + mescc/elf.mes: write minimal ELF header. + + mes.c: display, newline: take optional port; add write-char, read hex #xXX. + + remove debug output to stdout. + +2016-07-27 Jan Nieuwenhuizen + + syntax-if.mes: TODO. + + Use IF iso COND as primitive; keep COND primitive as option. + + let.scm: cleanups. + +2016-07-26 Jan Nieuwenhuizen + + macro hax0rz + + Revert "lib/lalr-debug.scm" + This reverts commit 084d1bea33d45f0653cdc6bef44dc295faef6b72. + + lib/lalr-debug.scm + + quasiquote.mes: disable, too slow. + +2016-07-25 Jan Nieuwenhuizen + + split-up test suite, implement quasiquote in scheme. + +2016-07-26 Jan Nieuwenhuizen + + hello.c, hello.S: hello world target for C compiler. + +2016-07-24 Jan Nieuwenhuizen + + mescc: mes parses simplest main with lalr. + + scm.mes: add port-location dummies. + + mes.c: add set-cdr, substring, string-ref. + + mes.c: support whitespace characters. + + mescc.scm: parse simple main.c. + + TODO/HACKING: update: lalr/paren.scm runs. + + mes.c: when reading `EOF', defer read control to program. + + mes.c, scm.c: add read-char, peek-char, char=?, char-alphabetic?. + + scm.mes: add list-ref. + + mes.c: add logior. + + scm.mes: add expt. + + scm.mes: remainder. + + scm.mes: implement do. + + scm.mes: add max, min. + + <=, >=: take multiple arguments. + + mes.c: add quotient and modulo. + + mes.c: less_p, greater_p, is_p: take multiple arguments. + + mes.c: display_helper fix for vector. + + scm.mes: make-vector: fix fill. + + paren.scm revert + + mes.c: fix apply. + + fix for-each. + + lalr paren test + +2016-10-18 Jan Nieuwenhuizen + + ADD .gitignore. + + lib/lalr.scm + +2016-07-24 Jan Nieuwenhuizen + + mes.c: grok #\tab. + +2016-07-23 Jan Nieuwenhuizen + + mes.c: add syntax, quasisyntax to reader.... + + srfi-9 records! + + mes.c: refactor begin and closures. Fixes bugs/top.mes. + + bugs/top.mes: document toplevel begin bug; probable reason for record/syntax-case failure. + + check: resurrect guile-check. + + mes.c: remove hacks + + trying to get records up....WIP + + srfi-9 + + lib/record.scm: import. + + lib/srfi/srfi-0.scm: add. + + mes.c: barf on unknown symbols. + + syntax.mes: update from scheme48-1.1. + + Add header to syntax.mes MERGE + + scm.mes: add last-pair. + + test.mes: enable vector tests for mes. + +2016-07-22 Jan Nieuwenhuizen + + scm.mes: add assq-set!, assq-ref. + + Update documentation, remove old bug files, move bugs into bugs/. + + mes.c: add new macro type, junk *macro* hack. + + mes.c: store actual environment with closures. + + fix closure 5 + +2016-07-19 Jan Nieuwenhuizen + + mes.c: store enviroment depth in closures. Fixes c1, c3 and more. + + mes.c: move begin_env into eval, decruft. + +2016-07-18 Jan Nieuwenhuizen + + fix some tests. + + test: hack: show expected/actual + + remove booting into mes (would need VM), boot.mes; rewrite test.mes. + + c0.mes, c1.mes: update. + +2016-07-17 Jan Nieuwenhuizen + + unquoting fix. + + no closuring in macro body... + + add equal?, member, for-each. + + closures: mostly supported... + + syntax.mes: more debugging. + + mes.c: single-statement body lambda closures. + + c0.mes: simpler bug. + + TODO: update + + closure.mes: document mes closure bug. + + mes.c: add boolean_p. + + mes.c: fix symbol? for nil. + + test.mes: disable call-with-values test, prints too much debugging. + + mes.c: evcon: support clause without cdr. Fixes or. + + add simple <=, >= and list?. + + scm.mes: and: bugfix, return #f for (and #f 1 2 3). + + syntax.mes: use cond iso if. rode harink + + hax0rz..ugh + next name? test in macro.mes. + + mes.c: another macro clue-bat in apply. now macro.mes equals guile -s macro.mes. + + mes.c: begin_env: bugfix, keep going in body after set! + + mes.c: bugfix for eval_quasiquote: stay in quasiquote mode after next quote. + +2016-07-16 Jan Nieuwenhuizen + + guile runs macro-based mes:define-syntax, mes runs but yields *undefined*. + + support define-macro inside eval (i.e., inside define-macro) + + mes.c: move define, define-macro into begin_env, remove loop. fixes inner defines. + + define-syntax... + +2016-10-18 Jan Nieuwenhuizen + + syntax... + +2016-07-16 Jan Nieuwenhuizen + + implement variable-argument and, or. + + implement let loop. + + cleanup let, let*, letrec + + implement unquote-splicing, cleanup some macros + + update macro, fix andmap. + + add scheme apply, rename apply-> apply_env. + + syntax.mes: experiments... + + support cond without match, define-macro x (lambda)). + +2016-07-11 Jan Nieuwenhuizen + + *unspecified* harder. + + add number->string, string->symbol, symbol->string. + + add procedure? + + add variable argument append. + + +,-,*,/: take n arguments. + + add call-with-values, values. + + add memq/memv. + + rename assoc to assq. + + add vectors. + +2016-07-10 Jan Nieuwenhuizen + + add length. + + remove disabled code. + + add chars. + + add strings. + + TODO: new file. + + add begin. + + add letrec. + + fix for set! inside lambda. + + add not, if. + + add +,/,*,=. + + loop2.mes: separate from scm.mes. + + ignore + + add set!. + +2016-07-09 Jan Nieuwenhuizen + + snarf scm functions and environment. + + eval: disarm lambda. + + map: support two lists. + + add simple map. + + fix evlis argumuent execution order. + + add let*. + + reader: handle whitespace and comments inside lists. + + move mes language additions to scm.mes. + + hack to print (current-module). + + mes.c, mes.mes: support quasiquote, unquote. + + boot.mes: generate from mes.mes, scm.mes, test.mes. + +2016-07-08 Jan Nieuwenhuizen + + mes.c: support `.' and add let. + + boot.mes: support macros, add and, or. + +2016-05-29 Jan Nieuwenhuizen + + boot.mes: boostrap into mes. + +2016-07-09 Jan Nieuwenhuizen + + Leave pure LISP. + * GNUmakefile: New file. + * mes.c: Lots of work. + * mes.mes: New file, split-off from mes.scm. + (builtin, number): New function. + (apply): Use them. + * mes.test: New file. + * scm.mes: New file, split-off from mes.scm. + + Add LISP interpreter in C. + mes.c: New file. + +2016-05-28 Jan Nieuwenhuizen + + Add Guile version of John McCarthy's Maxwell Equations of Software. + * .gitignore: New file. + * AUTHORS: Idem. + * COPYING: Idem. + * README: Idem. + * mes.scm: Idem. + +2016-05-15 Jan Nieuwenhuizen + + Initial. + -*- org -*- + +#+TITLE: ChangeLog + +Copyright © 2016,2017,2018 Jan (janneke) Nieuwenhuizen + + Copying and distribution of this file, with or without modification, + are permitted in any medium without royalty provided the copyright + notice and this notice are preserved. + +Normally a ChangeLog is generated at "make dist" time and available in +source tarballs. diff --git a/sysa/mes-0.22/HACKING b/sysa/mes-0.22/HACKING new file mode 100644 index 0000000..fb6d7e9 --- /dev/null +++ b/sysa/mes-0.22/HACKING @@ -0,0 +1,190 @@ + -*- org -*- +#+TITLE: Hacking GNU Mes + +* SETUP + guix environment -l guix.scm #64 bit + 32bit + + CC=i686-unkown-linux-gnu-gcc ./configure +or + ./configure + +The 64bit bootstrap is not supported; MesCC needs work to be able to +compile a functional tinycc. + +* BUILD + +GNU Guile can be used as a replacement for Mes. It's faster and has +much better error handling. + + #+BEGIN_SRC bash + make MES=guile + make check MES=guile + #+END_SRC + +Configure to compile with Tiny CC + + #+BEGIN_SRC bash + ./configure CC=tcc --host=i686-unknown-linux-gnu --with-courage + #+END_SRC + +* DEBUG + MES_DEBUG= mes +** Levels + 1) Informational: + - MODULEDIR + - included SCM modules and sources + - result of program + - gc stats at exit + 2) opened files + 3) runtime gc stats + 4) detailed info + - parsed, expanded program + - list of builtins + - list of symbol + - opened input strings + - gc details + 5) lots of data + - usage of opened input strings + - bytes read + 6) globals + +* Bugs +** mes: performance, Mes is now 2-10x slower than Guile. +** mes/mescc lack support for fork/exec on the Hurd. +** mes: gcc-x86_64 compiled mes segfaults with small arena, or gc_up_arena. +** mes: gcc-x86 compiled, tests/srfi-13.test number->string INT-MIN fails: +test: number->string INT-MIN: fail +expected: -2147483648 +actual: -./,),(-*,( +** tcc: tcc-built lib/libc+tcc.c segfaults with mes, with tcc. +** mes: remove pmatch-car/pmatch-cdr hack. +** mescc: softcode stack frame size, now hardcoded and very large +** mes+mescc: parse tcc.c->tcc.E works, compile tcc.E -> tcc.M1 segfaults. + time GUILE_LOAD_PATH=/home/janneke/src/nyacc/module:$GUILE_LOAD_PATH ../mes/scripts/mescc -E -o tcc.E -I . -I ../mes/lib -I ../mes/include -D 'CONFIG_TCCDIR="usr/lib/tcc"' -D 'CONFIG_TCC_CRTPREFIX="usr/lib:{B}/lib:."' -D 'CONFIG_TCC_ELFINTERP="/gnu/store/70jxsnpffkl7fdb7qv398n8yi1a3w5nx-glibc-2.26.105-g0890d5379c/lib/ld-linux.so.2"' -D 'CONFIG_TCC_LIBPATHS="/home/janneke/src/tinycc/usr/lib:{B}/lib:."' -D 'CONFIG_TCC_SYSINCLUDEPATHS="../mes/include:usr/include:{B}/include"' -D CONFIG_USE_LIBGCC=1 -D 'TCC_LIBGCC="/home/janneke/src/tinycc/usr/lib/libc+tcc-gcc.mlibc-o"' -D CONFIG_TCC_STATIC=1 -D ONE_SOURCE=yes -D TCC_TARGET_I386=1 -D BOOTSTRAP=1 tcc.c + time GUILE_LOAD_PATH=/home/janneke/src/nyacc/module:$GUILE_LOAD_PATH MES_ARENA=200000000 ../mes/scripts/mescc -c -o tcc.M1 tcc.E +** mescc: 64 bit compiled mes loses top 4 bytes +*** 64 bit mescc-compiled mes: + #x100000000 => 0 + (modulo 1 #x100000000) => divide-by-zero +*** 64 bit gcc-compiled mes: + #x100000000 => 0 + (modulo 1 #x100000000) => 1 +** mescc: 7n-struct-struct-array.c: struct file f = {"first.h"}; +** test/match.test ("nyacc-simple"): hygiene problem in match +* OLD: Booting from LISP-1.5 into Mes + +Mes started out experimenting with booting from a hex-coded minimal +LISP-1.5 (prototype in mes.c), into an almost-RRS Scheme. + +When EOF is read, the LISP-1.5 machine calls loop2 from loop2.mes, +which reads the rest of stdin and takes over control. The functions +readenv, eval and apply-env in mes.mes introduced define, define-macro +quasiquote and macro expansion. + +While this works, it's amazingly slow. We implemented a full reader +in mes.c, which makes running mes:apply-env mes:eval somewhat +bearable, still over 1000x slower than running mes.c. + +Bootstrapping has been removed and mes.c implements enough of RRS to +run a macro-based define-syntax and syntax-rules. + +loop.mes and mes.mes are unused and lagging behind. Probably it's not +worth considering this route without a VM. GNU Epsilon is taking the +more usual VM-route to provide multiple personas. While that sounds +neat, Lisp/Scheme, bootstrapping and trusted binaries are probably not +in scope as there is no mention of such things; only ML is mentioned +while Guile is used for bootstrapping. + +* Assorted ideas and info +** Using GDB on assembly/a.out +info registers +p/x $eax +p/x $edx +set disassemble-next-line on +gdb-display-disassembly-buffer +b *0x804a79d +** Create memory dump with 32 bit Gcc compiled Mes +make out/i686-unknown-linux-gnu-mes +out/i686-unknown-linux-gnu-mes --dump < module/mes/read-0.mes > module/mes/read-0-32.mo + +x/s *((char **)($rsp+8)) + +** C parser/compiler +*** [[https://savannah.gnu.org/projects/nyacc][nyacc]] +*** PEG: [[http://piumarta.com/software/peg/][parse C using PEG]] +*** [[https://en.wikipedia.org/wiki/Tiny_C_Compiler][Tiny C Compiler]] +*** [[http://www.t3x.org/subc/index.html][Sub C]] +*** [[https://groups.google.com/forum/#!topic/comp.lang.lisp/VPuX0VsjTTE][C intepreter in LISP/Scheme/Python]] + +** C assembler/linker +*** [[http://www.tldp.org/HOWTO/Assembly-HOWTO/linux.html][Assembly HOWTO]] +*** ELF +7f 45 4c 46 +*** [[http://www.muppetlabs.com/~breadbox/software/tiny/][Small ELF programs]] +*** [[http://www.cirosantilli.com/elf-hello-world/][Elf hello world]] +** SC - c as s-expressions +sc: http://sph.mn/content/3d3 +** RNRS +*** [[http://www.scheme-reports.org/][Scheme Reports]] +*** [[ftp://publications.ai.mit.edu/ai-publications/pdf/AIM-349.pdf][Scheme - Report on Scheme]] +*** [[ftp://publications.ai.mit.edu/ai-publications/pdf/AIM-452.pdf][RRS - Revised Report on Scheme]] + +** tiny schemes +http://forum.osdev.org/viewtopic.php?f=15&t=19937 + +http://www.stripedgazelle.org/joey/dreamos.html +http://armpit.sourceforge.net/ +http://common-lisp.net/project/movitz/movitz.html + + janneke: https://github.com/namin/inc looks interesting [15:18] +** Orians Jeremiah + janneke: also, if you look at + https://github.com/oriansj/stage0/tree/master/stage2/High_level_prototypes + [the garbage collected lisp I implemented], if there are any pieces + I could add to finish off your mes lisp bootstrap just let me know + because I would be more than happy to do that :D + OriansJ: that's what I'm hoping for, that our efforts can be + complementary and we can work together +*** lfam (~lfam@2601:47:4180:2ffb:7c05:17de:cf5f:23ef) has quit: Ping timeout: + 246 seconds [00:22] + exciting times! [00:23] + OriansJ: i looked a few times and saw 'LISP empty', so thanks for + the pointer! [00:24] + OriansJ, janneke: from that page, there's also: + https://web.archive.org/web/20160604035203fw_/http://homepage.ntlworld.com/edmund.grimley-evans/bcompiler.html + +** C4/C500 +https://web.archive.org/web/20160604041431/http://homepage.ntlworld.com/edmund.grimley-evans/cc500/cc500.c +https://github.com/rswier/c4/blob/master/c4.c +** Compilers for free +http://codon.com/compilers-for-free +** Small lisps +*** [[https://www.mirrorservice.org/sites/www.bitsavers.org/bits/TI/Explorer/zeta-c/][ZETA-C]] +** Small C compilers +*** tinycc +*** [[https://github.com/rui314/8cc][8cc]] -- a C11 compiler, but simple +8cc is a compiler for the C programming language. It's intended to +support all C11 language features while keeping the code as small and +simple as possible. +*** pcc +*** early GCC? +https://miyuki.github.io/2017/10/04/gcc-archaeology-1.html +*** [[http://tack.sourceforge.net/][ack]] + it may be possible to compile like this: mes |> ack |> pcc |> tcc |> + gcc 4.7.4 |> gcc later version... up to modern +*** [[https://web.archive.org/web/20160402225843/http://homepage.ntlworld.com/edmund.grimley-evans/cc500/][cc500]] +** rain1's Bootstrapping Wiki: https://bootstrapping.miraheze.org/wiki/Main_Page +** rain1's hex86 +https://notabug.org/rain1/hex86/src/master/tests/hex0b3.hex86 +** janneke, have you ever tried testing mescc with csmith? [10:55] +** e.g. as described here + https://jamey.thesharps.us/2016/07/15/testing-strategies-for-corrode/ + ("Randomized testing with Csmith and C-Reduce") [10:58] +** linux syscalls: https://fedora.juszkiewicz.com.pl/syscalls.html +* legalese + +Copyright © 2016,2017,2018,2019 Jan (janneke) Nieuwenhuizen + + Copying and distribution of this file, with or without modification, + are permitted in any medium without royalty provided the copyright + notice and this notice are preserved. diff --git a/sysa/mes-0.22/INSTALL b/sysa/mes-0.22/INSTALL new file mode 100644 index 0000000..dcea9eb --- /dev/null +++ b/sysa/mes-0.22/INSTALL @@ -0,0 +1,111 @@ + -*- org -*- +#+TITLE: Building and Installing GNU Mes + +Copyright © 2016,2017,2018,2019 Jan (janneke) Nieuwenhuizen + + Copying and distribution of this file, with or without modification, + are permitted in any medium without royalty provided the copyright + notice and this notice are preserved. + +Mes can be built in two modes: as a regulare package build or as a +bootstrap package. + +After bootstrapping Mes it can be used to bootstrap TinyCC (tcc) in a +similar way. + +* Get it + git clone [[git://git.savannah.gnu.org][git://git.savannah.gnu.org/mes.git]] + +* Regular build +** Prerequisites +*** Guix + #+BEGIN_SRC bash + guix environment -l guix.scm #64 bit + 32bit + guix environment --system=i686-linux -l guix.scm #32 bit only + #+END_SRC + +*** Other GNU/Linux + - [[https://savannah.gnu.org/projects/mescc-tools/][mescc-tools]], 0.6.1 is known to work. + - [[https://savannah.gnu.org/projects/nyacc][Nyacc]], 0.93.0 is known to work. + - GNU Gcc, 4.9.3 is known to work. + - GNU Guile, version 2.0.12 or is know to work. + - SH, /bin/sh, GNU Bash 4.3 is known to work. + - GNU coreutils + - sed, GNU sed 4.2 is known to work. + - Perl, 5.22 is known to work. + +** Build it + + #+BEGIN_SRC bash + ./configure + make + #+END_SRC + +If you get something like + + #+BEGIN_SRC bash + mes.c:(.text+0x8da0): undefined reference to `__stack_chk_fail' + #+END_SRC + +then your compiler inserts stack protection code. The Mes C Library +does not support that. Turn it off lik this + + #+BEGIN_SRC bash + ./configure CFLAGS=-fno-stack-protector + #+END_SRC + +** Check it + + #+BEGIN_SRC bash + make check + #+END_SRC + +** Install it + + #+BEGIN_SRC bash + make install + #+END_SRC + +* Guix it + + #+BEGIN_SRC bash + guix build -f guix.scm + #+END_SRC + +* Bootstrap build + +The bootstrap build is part of Guix, see +https://git.savannah.gnu.org/cgit/guix.git/tree/gnu/packages/commencement.scm + +** Prerequisites + - [[https://savannah.gnu.org/projects/mescc-tools/][mescc-tools]], 0.6.1 is known to work. + - [[https://savannah.gnu.org/projects/nyacc][Nyacc]], 0.93.0 is known to work. + +** Build it + + #+BEGIN_SRC bash + sh configure.sh [--prefix=] + sh bootstrap.sh + #+END_SRC + +** Check it + + #+BEGIN_SRC bash + sh check.sh + #+END_SRC + +** Install it + + #+BEGIN_SRC bash + sh install.sh + #+END_SRC +* Regular build and bootstrap combine + +To build mes.c using MesCC, configure using --with-bootstrap: + + #+BEGIN_SRC bash + ./configure --with-bootstrap + make + #+END_SRC + +This creates bin/mes-gcc and bin/mes-mescc. diff --git a/sysa/mes-0.22/NEWS b/sysa/mes-0.22/NEWS new file mode 100644 index 0000000..1c41387 --- /dev/null +++ b/sysa/mes-0.22/NEWS @@ -0,0 +1,599 @@ + -*- org -*- +#+TITLE: GNU Mes NEWS – history of user-visible changes +#+STARTUP: content hidestars + +Copyright © 2016,2017,2018,2019 Jan (janneke) Nieuwenhuizen + + Copying and distribution of this file, with or without modification, + are permitted in any medium without royalty provided the copyright + notice and this notice are preserved. + +Please send Mes bug reports to bug-mes@gnu.org. + +* Changes in 0.22 since 0.21 +** Core +*** Mes now builds reproducibly with MesCC, cross distribution +Using --with-bootstrap on x86, a bin/mes-mescc is compiled with +mes+mescc, that shall have sha256sum + + 9e0bcb1633c58e7bc415f6ea27cee7951d6b0658e13cdc147e992b31a14625fb bin/mes-mescc + +This has been verified on GNU Guix, Debian GNU/Linux and NixOS. +*** Mes now builds reproducibly with Guile+MesCC vs Mes+MesCC. +*** Mes now builds reproducibly with Tiny CC-built MesCC. +*** configure now respects the user's CFLAGS, CPPFLAGS and LDFLAGS. +*** Mes now supports mescc-tools 0.5.2 next to 0.6.1. +This allows introducing the Scheme-only bootstrap without updating or +adding new bootstrap binary seeds into GNU Guix. +*** Mes now runs when configured --with-courage on the Hurd: + GNU debian 0.9 GNU-Mach 1.8+git20170609-486/Hurd-0.9 i686-AT386 GNU +Note that mescc does not run; fork and exec are not yet implemented. +*** Mes now configures --with-courage on x86-FreeBSD 12.1 +The initial ELF scaffold tests: exit-42.S, 0exit-42.hex2, +body-exit-42.hex2, hello-mes.S, 0hello-mes.hex2, body-hello-mes.hex2 +pass. +*** configure now has a --with-bootstrap option. +This adds the reproducible bootstrap build of bin/mes-mescc, using +mes+mescc. +*** configure prefers $CC over gcc; tcc over gcc, gcc over cc. +*** Mes now prints an error when attempting to read a file that does not exist. +*** Mes no longer depends on GIT. +** Noteworthy bug fixes +*** Several annoying build problems were fixed, for non-Guix systems. +*** A bug with buffered-read was fixed. +This means that bash-2.05 can now build glibc-2.2.5; notably it now +successfully executes make-syscall.sh. +*** A bug with execlp, execvp for file names containing a slash was fixed. +This should allow make-3.80 running scripts that have "#! ./move-if-change". +* Changes in 0.21 since 0.20 +** Core +*** Mes can now be bootstrapped with Gash and Gash Core Utils. +*** Mes now supports a Scheme-only bootstrap. +*** Mes now supports -c EXPR. +** MesCC +*** Mes C Library now supports bootstrapping GNU Awk, GNU Bash, GNU SED, and GNU Tar. +*** Mes C Library now has limited float support in vfprintf, vsnprintf, vsscanf. +**** 7 new functions +abtod, atof, creat, dtoab, execlp, isgraph, mknod, readlink, strtod, +symlink. +**** 5 new stubs +getgrgid, getgrnam, getpgid, getpgrp, mktime, setgrent. +** Noteworthy bug fixes +*** A bug with `mes -c EXPR' has been fixed. +*** The REPL now works again on x86_64. +*** --with-system-libc now works again. +* Changes in 0.20 since 0.19 +** Core +*** The build system has been simplified, again. +Mes now builds ootb on Debian. +*** Mes now supports -c EXPR. +** Divide by zero is now flagged. +** Language +*** 1 new function: +take-while. +** MesCC +*** The C libraries have been exploded into one function per file. +*** MesCC now has enhanced POSIX/gcc comand line support, e.g. -DFOO=1, +-nodefaultlibs, +-nostartfiles, +-nostdlib. +*** The archiver is now called `mesar'. +*** MesCC now supports Nyacc-0.99. +*** MesCC now depends on MesCC-Tools 0.6.0. +*** 1 new function +__mesabi_uldiv. +** Noteworthy bug fixes +*** map and for-each now support lists with unequal length. +*** interger division has been fixed. +*** isatty now looks at terminfo. +*** signal now uses sigaction correctly for non-x86. +*** string->number now support #x hex-prefix. +*** ungetc now has a buffer per file handle. +* Changes in 0.19 since 0.18 +** Core +*** The build system has been simplified. +*** Mes now prints a backtrace upon error. +*** Performance has been improved 2-8 times, making Mes 2-10 times slower than Guile. +*** Mes now supports a module type and uses a `boot-module'. +*** Mes now supports a hash_table type. +*** Mes now supports a struct type. +*** Mes now supports building a %bootstrap-mes seed from Guix. +** Language +*** Records are now implemented using struct (WAS: vector). +*** 44 new functions +ceil, char-downcase, char-set-adjoin, char-set-complement, +char-upcase, current-time, delete-file, dup, dup2, file-exists?, +floor, frame-printer, get-internal-run-time, getcwd, gettimeofday, +hash, hash-ref, hash-set!, hash-table-printer, hashq, +hashq-get-handle, hashq-ref, hashq-set, inexact->exact, +make-hash-table, make-stack, make-struct, module-define!, +module-printer, module-ref, module-variable, read-line, round, +stack-length, stack-ref, string-downcase, string-tokenize, +string-upcase, struct-length, struct-ref, struct-set! struct-vtable, +struct-vtable, with-error-to-file. +** MesCC +*** Assembly defines have been cleaned-up: duplicates deleted, missing added, wrong fixed. +*** MesCC now supports compiling GNU Bash and GNU Tar. +**** 6 New functions +getegid, geteuid, getppid, setgid, setuid, sigdelset, sigprocmask. +**** 22 New macros +EACCES, ENOSPC, ESPIPE, INT16_MAX, INT16_MIN, INT32_MAX, INT32_MIN, +INT64_MAX, INT64_MIN, INT8_MAX, INT8_MIN, LLONG_MAX, LLONG_MIN, +SIZE_MAX SYS_getegid, SYS_geteuid, SYS_setgid SYS_setuid, S_IRGRP, +S_IROTH, S_IRWXG, S_IRWXO S_ISGID, S_ISUID, S_IWGRP, S_IWOTH, S_IXGRP, +S_IXOTH, UINT16_MAX, UINT32_MAX, UINT64_MAX, UINT8_MAX, +_POSIX_VERSION. +** Noteworthy bug fixes +*** Mes now supports characters #\xNN. +*** Mes now supports assq-ref and assoc-ref with alist == #f. +*** Mes now support \xNN in strings. Fixes using Nyacc-0.86.0. +*** MesCC now supports the unary plus operator. +*** MesCC now supports the `U' integer suffix. +*** MesCC now comes with INTnn_MIN/MAX, UINTnn defines in stdint.h. +*** MesCC now always exits non-zero when assembler or linker fail. +* Changes in 0.18 since 0.17.1 +** Core +*** Mes/MesCC now supports x86_64. +*** Mes/MesCC now brings a Reduced Binary Seed bootstrap to GuixSD. +** Language +*** fold-right now supports 3 lists. +** MesCC +*** MesCC now supports x86_64 (also as cross build), using -m 64. +*** Mes C Library now has better support for bootstrapping gcc-3.0. +*** Mes C test suite now has 178 tests; 74 tests were added. +*** MesCC has been refactored to support use an abstracted assembly language. +*** MesCC now uses Nyacc 0.86.0. +** Noteworthy bug fixes +*** scaffold/tests/7s-struct-short.c has been fixed. +* Changes in 0.17.1 since 0.17 +** MesCC +*** Mes C Library has now been exploded into a separate C file per function. +*** Mes C Library now bootstraps glibc-2.16.0, binutils-2.20.1, gcc-4.7.4. +*** Mes C Library now supports compiling make-3.82. +*** Mes C Library now supports compiling diffutils-2.7. +*** Mes C Library now supports x86_64. +**** 7 new functions +chdir, clock_gettime, closedir, execl, opendir, readdir, time. +**** 5 new stubs +getlogin, setlocale, setvbuf, sigaddset, sigblock. +** Noteworthy bug fixes +*** qsort can now handle lists with duplicate entries. + +* Changes in 0.17 since 0.16.1 +** Core +*** GNU Mes is now an official GNU package. +*** MesCC is now installed as a regular Guile package. +*** Support --srcdir build. +*** Support all standard GNU make targets. +** MesCC +*** Mes C Lib now bootstraps glibc-2.2.5, binutils-2.20.1, gcc-4.7.4. +* Changes in 0.16.1 since 0.16 +** Core +*** Mes now builds out of the box on Debian buster/testing. +*** Mes now comes with a generic build recipe: build-aux/setup-mes.sh. +*** Mes now comes with INFO documentation. +** MesCC +*** MesCC now exits if spawning BLOOD_ELF, M1, or HEX2 fails. +* Changes in 0.16 since 0.15 +** Core +*** Support building with tcc, including Mes C Lib in-line assembly. +*** core:execl now supports 1000 arguments. +** MesCC +*** Mes C Lib now bootstraps glibc-2.2.5, binutils-2.20.1, gcc-4.1.0. +*** MesCC binaries now run on Linux 4.17 too, i.e. survive Linus' new `sane mmap limits.' +*** MesCC now runs with mescc-tools 0.5 (no = in long options). +**** 3 new C test +88-strrchrc, 97-fopen.c, 98-fopen.c. +** Noteworthy bug fixes +*** strrchr now stops when it reaches start of string. +*** fopen now return 0 upon failure. Supports binutils' hack: fd=-2 means `cached'. +*** vfprintf, vsprintf now support precision and width on integers strings better. +*** fread now produces ungetc'd chars too. +*** memcmp now supports comparing 0 bytes, supporting binutils. + +*** The unused ELF header data section, identical to the text section, has been removed. +* Changes in 0.15 since 0.14 +** Core +*** Support fork, exec, waitpid. +*** Boot-0 loading has been refactored. +*** MesCC now has out of the box Geiser support. +** Language +*** 2 new functions +drop, drop-right. +** MesCC +*** MesCC and Mes C Lib can now build binutils-2.30, gcc-2.95.3 and glibc-2.2.5. +*** MesCC now provides dummy crti.o, crtn.o so that tcc needs not be patched for those. +*** Mes C Lib now supports compiling glibc-2.2.25. +*** Mes C Lib now supports compiling gcc-2.95.3 +*** Mes C Lib now supports compiling binutils-2.30. +*** Mes C Lib now supports compiling m4-1.4. +*** Mes C Lib has been split into archs: gcc, x86-mes-gcc and x86-mes. +*** MesCC now has a posixy command line interface. +**** 70 new functions +abs, access, alarm, alloca, atexit, atol, bcmp, bcopy, brk, bzero, +chmod, clearerr, close, dup, dup2, execve, fabs, fcntl, fdgets, feof, +fgets, fileno, fork, freopen, fscanf, fstat, fsync, getcwd, getgid, +getpid, getrusage, getuid, index, ioctl, isalnum, isalpha, isascii, +iscntrl, isprint, ispunct, kill, link, lseek, lstat, mkdir, mktemp, +nanosleep, open, perror, pipe, raise, read, rename, rindex, rmdir, +sbrk, sbrk, setitimer, signal, sleep, stat, strcspn, strdup, strerror, +strncat, strpbrk, strspn, unlink, unsetenv, waitpid. +**** 23 new stubs +abort, atof, bsearch, bsearch, chown, ctime, fpurge, freadahead, +frexp, getpwnam, gmtime, mbstowcs, pclose, popen, rewind, setbuf, +sigsetmask, strftime, sys_siglist, system, times, umask, utime. +**** 10 new C tests +51-strcmp.c, 70-printf.c, 87-sscanf.c, 90-strpbrk.c, 91-fseek.c, +92-stat.c, 93-fread-fwrite.c, 94-unsetenv.c, 95-signal.c, 96-strto.c. + +* Changes in 0.14 since 0.13 +** Core +*** Bootstrapped Mes+MesCC now compiles a tcc that is self-hosting and only slightly patched. +*** The reader now supports binary numbers (previously: read as decimal). +*** String port support has been moved to C. +*** The build has been simplified, the Make-in-Scheme experiment has been removed. +*** 2 new functions +chmod, logxor. +** Language +*** Mes now supports define-immutable-record-type and single set-field from srfi-9 gnu. +*** 12 new functions +basename, chmod, const, delete-duplicates, logxor, string-contains, +string-map, string-replace, string-trim, string-trim-both, +string-trim-right, unfold. +** MesCC +*** MesCC now supports standalone usage of nestedly defined enums, structs and unions. +*** MesCC now supports comparison of unsigned and promotion of signed/unsigned -> unsigned. +*** MesCC now supports sign extension for char, short. +*** MesCC now has stubbing for floats; compiling works, data is fu. +*** MesCC now has full suport for switch case, e.g. with default as first clause. +*** MesCC now supports destruction of casted expressions: ((struct foo*)p)->bar. +*** MesCC now has full support for pre/post, e.g.: (foo--)->bar and permutations. +*** MesCC now supports sizeof any expression or type. +*** MesCC now supports initialization of anonymous unions. +*** MesCC now supports bit fields. +*** MesCC now supports valued functions in expressions: destruction and dereferencing. +*** MesCC now supports function-static variables. +*** MesCC now supports initializer lists in structs and unions. +*** MesCC now has full support for heterogeneous variable declarations, e.g.: char p, *x = "foo", buf[3]; +**** 4 new functions +__lshrdi3, __ashldi3, __ashrdi3, strncpy. +**** 9 new mlibc stubs +__fixdfdi, __fixsfdi, __fixunsxfdi, __fixxfdi, __floatundixf, ldexp, +strtod, strtof, strtold. +* Changes in 0.13 since 0.12 +** Core +*** Bootstrapped Mes+MesCC can now compile a patched tcc in ~1h45' (~25,000 LOC). +*** MesCC scripts for Mes and Guile are now merged; executable is: `mescc'. +*** Mes now uses only one arena for stop-and-copy; doubles available size. +*** Mes now has a Guile-like command-line interface (mes.repl has been removed). +*** Mes now boots into a full Scheme by default. +*** Mes can now be compiled (MES_MINI=1) to boot into a minimal Scheme (~2000 cells). +*** Mes now creates less garbage in the reader and in +append2, append_reverse, reverse, reverse!, vector-for-each, vector-to-list, vector-map. +*** 5 new functions +append-reverse, chmod, ioctl, isatty, isspace, last_pair, reverse!. +** Language +*** 3 new functions +char-whitespace?, chmod, isatty? +** Noteworthy bug fixes +*** Two bugs in the jam scraper/garbage collector have been fixed. +*** equal2_p now uses tail call elimination. +*** Escaped characters in strings are now read and write'd correctly. +*** The repl now expands macros again. +* Changes in 0.12 since 0.11 +** Core +*** Mes can now run Nyacc (0.80.42) to compile itself in ~4min (~3000 LOC). +*** Mes now recursively expands global variables per top level statement. +*** Mes now recursively expands macros per top level statement. +*** Mes now boots from MES_BOOT (default: module/mes/boot-0.scm). +*** Mes now has a full Scheme reader in C again. +This gives a 10x-20x performance improvement and increases the +bootstrap footprint by 160 LOC. +*** Mes reader now supports older abbreviated character forms +#\bel, #\bs, #\ht and #\vt. +*** 3 new functions +equal2?, memq, core:write. +** Language +*** Mes now has an incremental Scheme semantics test suite with 71 small tests. +*** Variable names can now have ticks. +*** Mes now evaluates expresions of COND only once. +*** srfi-9 records have been reimplemented. +*** #\page is now whitespace. +*** # is no longer a character. +*** 2 new macros +define-macro*, with-fluids. +*** 9 new functions +dirname, last, reverse-list->string, setenv, string-drop-right, +string-fold, string-fold-right, string-null?, write. +** MesCC +**** 9 new functions +chmod, getopt_long, ferror, itoab, longjmp, qsort, setenv, setjmp, strtol. +**** 2 new header files +endian.h, sys/signal.h. + +* Changes in 0.11 since 0.10 +** MesCC +*** MesCC now compiles a mes-tcc that fails 41/69 of mescc's C tests. +*** MesCC's libc can now be compiled with tcc (syscall support: write). +*** MesCC now compiles a less-patched tcc: -214/+458 lines [WAS: -333/+747]. +*** MesCC now supports empty for. +*** MesCC has been greatly refactored, 500/3000 lines have been removed. +*** MesCC now supports complex [struct] by value assign foo.bar, foo->bar, foo[bar]. +*** MesCC now depends on Nyacc 0.82.4. +* Changes in 0.10 since 0.9 +** Core +*** 2 new functions +logand, lognot. +*** Mes now includes M1 sources for full source bootstrapping up to tcc. +** Mescc +*** Mescc now depends on Nyacc 0.81.0. +*** Mescc now compiles a mes-tcc that compiles a trivial C to a running a.out. +*** Mescc now supports several (as used my tinycc) struct by value assignments. +*** Mescc now has _start in a separate crt1.c. +*** Mescc now supports initializer arithmetic. +*** Mescc now supports arrays of struct of arbitrary size. +*** Mescc now supports pointer arithmetic. +*** Mescc now defines __i386__, __linux__. +*** Mescc now supports --*p, ++*p. +*** Mescc now supports int foo[bar] = {baz,...}. +*** Mescc now supports \x00 in strings in M1. +*** Mescc now supports complex enum expressions. Thanks, rain1! +*** Mescc now supports short. +*** Mescc now supports foo.bar = foo.baz = bla. +*** Mescc now supports foo = bar < baz and comparison permutations. +*** Mescc now supports (anonymous) structs in unions. +*** Mescc now writes M1 strings if possible. +**** 2 improved mlibc functions +malloc, realloc. +**** 13 new mlibc functions +fclose, fgetc, fprintf, fwrite, memcpy, memmove, memset, snprintf, strcat, +strchr, strrchr, strtoull, vnsprintf. +**** 15 new tinycc-support tests +76-pointer-arithmetic.c, 77-pointer-assign.c, 78-union-struct.c, +79-int-array.c, 7a-struct-char-array.c, 7b-struct-int-array.c, +7c-dynarray.c, 7d-cast-char.c, 7e-struct-array-access.c, +7f-struct-pointer-arithmetic.c, 7g-struct-byte-word-field.c, +7h-struct-assign.c, 7i-struct-struct.c, 7j-strtoull.c, +7k-for-each-elem.c. +** Noteworthy bug fixes +*** Mescc has many fixes for foo.bar[baz], foo[bar].baz with ./-> permutations. +*** Many bugs and limitations in mescc have been fixed and removed. +* Changes in 0.9 since 0.8 +** Core +*** Mes now builds better in non-Guix[SD] legacy distros/environments. Thanks, rain1! +** Mescc +*** Mescc now compiles a modified tinycc into a running [mostly segfaulting] mes-tcc. +https://gitlab.com/janneke/tinycc branch wip-mescc. +*** Mescc now supports locals stack frame larger than 1 byte offset. +*** Mescc now supports incomplete struct initializers {0}. +*** Mescc now supports >>=, <<=, ^=, ~. +*** Mescc now supports the comma operator. +*** Mescc now supports mullti-line string initializers. +*** Mescc now supports unions. +*** Mescc now supports arrays in structs. +*** Mescc now supports structs in structs. +*** Mescc now builds and runs with Guile-2.0 (legacy distro support, Guile-2.2 recommended). +*** Mescc has been refactored to use records. +*** Mescc now bundles tinycc's test2 test suite, passes one more test [34/55 pass]. +*** Mescc now has an incremental test suite consisting of 56 tests. +*** Mescc now supports stdarg variable argument lists. +*** Mescc now has __GNUC__ unset, #f (WAS: 0). +*** Mescc now depends on Nyacc 0.80.3. +*** Mescc now depends on M1 from [[https://github.com/oriansj/mescc-tools][mescc-tools]] v0.2. +*** Mescc now compiles to M1 object files. +**** 7 new mlibc functions +calloc, close, getcwd, lseek, sprintf, unlink, vprintf. +**** 31 new mlibc stubs +execvp, fclose, fdopen, fflush, fopen, fprintf, fread, free, fseek, +ftell, fwrite, localtime, longjmp, memcpy, memmove, memmove, memset, +qsort, remove, setjump, snprintf, sscanf, strchr, strrchr, strstr, +strtol, strtoll, strtoul, strtoull, time, vnsprintf. +**** 10 new header files +alloca.h, float.h, libgen.h, locale.h, stdbool.h, stddef.h, stdint.h, +stdnoreturn.h, sys/select.h, sys/wait.h. +** Noteworthy bug fixes +*** Many bugs and limitations in mescc have been fixed and removed. +* Changes in 0.8 since 0.7 +** Mescc +*** Mescc now has experimental annotation support for hex2. +*** Mescc now depends on the hex2 linker from [[https://github.com/oriansj/mescc-tools][mescc-tools]]. +Direct ELF output support has been removed. +ELF symbol and string table creation has been removed. +*** Mescc has been simplified by leveraging use labels in hex2 output. +*** Mescc now supports continue in loops. +*** Mescc now compiles to hex2 object files. +** Language +*** 1 new function +list-index. +* Changes in 0.7 since 0.6 +** Core +*** The minimal C reader is now always included; dependencies +on i686-unknown-linux-gnu-gcc and binary read-0-32.mo have been +dropped, these are now optional. +** Language +*** Mes reader now supports octal numbers #oXXX. +*** 10 new functions +current-output-port, getopt-long, negate, open-output-file, +option-ref, set-current-output-port, string-rindex, string-suffix?, +with-ouwith-output-to-file, with-output-to-port. +** Mescc +*** Mescc can now be installed and used alongside a gcc installation. +*** Mescc can now handle const anywhere. +*** Mescc now supports array fields in structs. +*** Mescc now supports forward declarations and typedef. +*** Mescc can now handle comments anywhere. +*** Mescc now supports addition and substraction for enum field values. +*** Mescc now supports anonymous enums. +*** Mescc now supports all C99 header files needed to compile tcc.c. +*** build: C sources are now preprocessed separately, then compiled and linked. +*** build: mlibc and C sources are now compiled separately and then linked. +*** mlibc has been moved from Scheme snippets into C. +*** Mescc now supports -c, -D, -E, -I and -o options. +**** open now supports optional third mode parameter. +** Noteworthy bug fixes +*** string-index now supports function predicate. +*** number->string for radix > 10 now produces `a' instead of `:'. +* Changes in 0.6 since 0.5 +** Core +*** configure, build now supports x86 and development for arm with-courage. +** Language +*** Nyacc has been unbundled and is now a dependency. +*** Mes now supports case-lambda. +*** Mes reader now supports abbreviated form for return character #\cr. +*** 1 new function +string-index. +** Mescc +*** Mescc can be used on regular C sources, like tinycc's tests/test2 suite. +*** make check passes 33/55 of tinycc's test suite etest/test2 tests. +*** Mescc now recognizes `short' as a type. +*** Mescc now supports sizeof (), sizeof(). +*** Mescc now respects enum field initializers and supports enum variables. +*** Mescc now supports binary constants . +*** Mescc now supports assignments from ==, != boolean expressions . +*** Mescc now supports &, ^. +*** Mescc now supports struct pointers. +*** Mescc now supports struct definition with immediatete variable declaration. +*** Mescc now supports calling (returning correctly from) void functions. +*** Mescc now handles case statements breaks without compound correctly. +*** Mescc now has better [int/pointer] array support. +*** Mescc now has better support for simple (non-array-)structs. +*** Mescc now supports multiple declarations in one statement like: int a,b; +**** 2 new mlibc functions +printf, strcpy. +** Noteworthy bug fixes +*** Installed mes and mes.repl now also run outside of source tree again. +* Changes in 0.5 since 0.4 +** Core +*** Support compilation with Mescc. +*** Support compilation with -nostdinc, -nostdlib using mlibc. +*** Support call-with-current-continuation. +*** Support exception handling, catch/throw. +*** Give sensible error message when a macro is missing. +** Language +*** Map now supports 4 lists. +*** The reader supports negative hex numbers. +*** 24 new functions +access?, assoc-set! c????r, compose, list->char-set, +open-input-string, read-string, string-delete, with-throw-handler. +** Mescc +*** Mescc can be used separately as a Nyacc-based C compiler backend for Guile. +*** Switch to Nyacc frontend, update Nyacc to 0.76.5. +*** Mescc now has a test suite, scaffold/t.c. +*** Mescc now includes a minimal C library libc/mlib.c libc/mstart.c. +*** Mescc can now compile mes.c. +** Noteworthy bug fixes +*** The build system (configure, make) has been refactored. +*** Support map-4. +*** Evaluate arguments of OR only once. +*** Fix assq-set! +*** Fix ,expand in the REPL. + +* Changes in 0.4 since 0.3 +** Core +*** Improved performance. +Macros are now memoized; after expansion and before eval'ing the +expanded form, their input s-expression is replaced by the expansion. +This yields a nice performance improvement which finally allowed +moving all non-essential bits from the C-core into Scheme...including +the reader. The Scheme reader is much, much slower than the previous +C version, making Mes--again-- feel slow. Think of that as a feature. +*** Bootstrap with minimal reader in C. +The C-reader needs only support reading of words and lists +(s-expressions), line-comments to read the initial [[file:module/mes/read-0.mes][Scheme reader]] which +then takes over and handles reading of quoting, characters, strings, +block-comments. +*** Reduced size. +Total C size: ~1500LOC. The main Mes evaluator is now ~1000LOC +including cell creation and garbage collector. This code is able to +execute a Scheme program that has been loaded into memory. Another +~500LOC is spent to load a minimal Scheme program and to dump it, to +provide a small posix interface, math functions and do some error +reporting. +*** Programs can be dumped and loaded using --dump and --load. +** Language +*** Minimal syntactic exception support for Nyacc. +*** Minimal syntactic fluids support for Nyacc. +*** Keywords are now supported. +*** Cond now supports =>. +*** Guile's optargs: lambda* and define* are now supported. +*** #;-comments are now supported. +*** Non-nested #| |#-comments are now supported. +*** Quasisyntax is now supported. +*** R7RS syntax-rules with custom ellipsis, with-ellipsis are now supported. +*** 9 new [partial] modules +(mes fluids), (mes nyacc), (mes optargs), (mes pmatch), (mes peg), +(srfi srfi-13), (srfi srfi-9-psyntax), (srfi srfi-26), (srfi srfi-43), +(rnrs arithmetic bitwise), (sxml xpath) +*** 36 new functions +1+, 1-, abs, and=>, append-reverse, ash, char<=?, char=?, +char>?, even?, filter, delete, delq, vector-copy, fold, fold-right, +getenv, iota, keyword->symbol list-head, list-tail, negative?, odd?, +positive?, remove!, remove, string->number, string-copy, +string-prefix?, string=, string=?, symbol->keyword symbol-append, +symbol-prefix?, unless, write, zero?. +** Noteworthy bug fixes +*** Macros are now memoized. +*** An error is reported when using a wrong number of arguments with a call. +*** Cond now evaluates its test clauses only once. +*** Append can also handle one argument. +*** For-each now supports 2 list arguments. +*** Map now supports 3 list arguments. +*** Backslash in string is supported. +*** Closure is not a pair. +*** All standard characters are supported. +*** Mescc now also runs in Guile. +* Changes in 0.3 since 0.2 +** Core +*** Number-based rather than pointer-based cells. +*** Garbage collector aka Jam scraper. +A variant on SICP's stop and copy Garbage Colletor (Jam Scraper?) +algorithm has been implemented. +*** The reader has been moved to Scheme. +** Language +*** Simple loadable modules. +*** Srfi-9 and match use handwritten syntax-rules (mes-use-module (mes syntax)). +*** Optional syntax-case using psyntax (mes-use-module (mes psyntax)). +** Noteworthy bug fixes +*** Srfi-0 has been fixed. +* Changes in 0.2 since 0.1 +** Core +*** Names of symbols and strings are list of characters [WAS: c-string]. +*** Sc-expand from pre-R6RS's psyntax has been integrated. +*** Undefined variable error now shows the name of the undefined variable. +*** There is now only one SCM type for builtin functions. +*** Macro expansion has been cleaned-up. +** Language +*** Mes now provides a subset of R6RS. +*** Mes now provides syntax-case. +*** Mes now provides `load'. +** Noteworthy bug fixes +*** Using values as second parameter of builtin function yields first value. +*** Quoted internals (e.g. 'if 'lambda) are now symbols. +*** Syntax error now exits. +*** Make+Bash voodoo has been replaced by build-aux/mes-snarf.scm. +*** Apply now accepts multiple list arguments. +*** Apply of character, inernal, number, string is an error. +*** Quasisyntax reading + +* Changes in 0.1 (since progress report #2) +** Core +*** expand_macro is now a separate function. +*** A smaller core can now compiled using BOOT=1. +The smaller core does not provide define, define-macro, or quasiquote; +these are provided from a Scheme version of implemented eval/apply. +** Language +*** Mes now provides a subset of R5RS. +*** Mes now provides let-syntax. +*** Mes now provides match. +*** Mes now provides quasisyntax, unsyntax and unsyntax-splicing. +** User interface +*** Mes now provides a REPL, run: + scripts/repl.mes +*** Mes compiler can be run as a script: + scripts/mescc.mes doc/examples/main.c +*** Macro expansion can be inspected in the REPL, e.g.: + ,expand (and 0 1) +** Noteworthy bug fixes +*** Performance: scripts/mescc.mes now takes 2s to compile main.c (was 1'20"). +*** Symbols are now truly unique. + * '(), #t, #f are no longer symbols. diff --git a/sysa/mes-0.22/PORTING b/sysa/mes-0.22/PORTING new file mode 100644 index 0000000..706ea13 --- /dev/null +++ b/sysa/mes-0.22/PORTING @@ -0,0 +1,84 @@ +#+COMMENT: -*- org -*- +#+TITLE: Porting GNU Mes + +* Porting GNU Mes to ARM + +The ARM port can be found in wip-arm on savannah. + +For development, we use Guix's qemu-binfmt-service-type. + +** Guix Setup, see [[info:guix#Virtualization%20Services][Virtualization Services]]. + +Add something like + #+BEGIN_SRC scheme + (service qemu-binfmt-service-type + (qemu-binfmt-configuration + (platforms (lookup-qemu-platforms "arm")) + (guix-support? #t))) + #+END_SRC +to your config.scm and run guix system reconfigure. + +** Setup environment + + #+BEGIN_SRC bash + guix environment -s armhf-linux --pure --ad-hoc bash coreutils diffutils gawk gcc-toolchain grep guile help2man make nyacc pkg-config sed texinfo + PATH=~/src/mescc-tools-arm/bin:$PATH + #+END_SRC + +(No git, graphviz on ARM yet). + +** Try it + #+BEGIN_SRC bash + ./configure --with-courage --with-system-libc + ./simple.sh + #+END_SRC + +some failures are expected. + +** Build it + #+BEGIN_SRC bash + ./configure --with-courage --with-system-libc + make MES=guile + make check + #+END_SRC + +expect many failures. Non-system-libc, i.e. using the Mes C Library is currently WIP. + +* Porting GNU Mes to x86_64 + +The x86_64 port is almost done, only a few bugs remain. The Guix +bootstrap for x86_64 uses x86 mes and that is not expected to change. + +* Porting GNU Mes to GNU/Hurd + +The Hurd port can be found in wip-hurd on savannah. For development, we +use a Debian GNU/Hurd vm. + +* Porting GNU Mes to FreeBSD +The FreeBSD port can be found in wip-freebsd on savannah. + +* Porting the Reduced Binary Seed bootstrap to NixOS +The NixOS port of the Reduced Binary Seed bootstrap lives on the +mes-bootstrap branch in https://github.com/xwvvvvwx/nixpkgs + +* Porting the Reduced Binary Seed bootstrap to Debian GNU/Linux +To port the Reduced Binary Seed bootstrap to a traditional distribution +such as Debian, two things need to happen: the bootstrap must be ported +and the distribution build process needs to change to start from a only +binary seed. + +The porting aspect is probably easiest: we start by packaging GNU Mes as +a regular package. Having Mes built as a regular package, we can then +build a bootstrap Mes. This bootstrap Mes can be used to build tinycc, +and so on. + +Once we have shown that the Debian base system can be bootstrapped from +a Reduced Binary seed, thus significantly reducing the Trusted Computing +Base (TCB), strategic decisions about the build process can start. + +* Legalese +Copyright © 2019 Jan (janneke) Nieuwenhuizen <[[mailto:janneke@gnu.org][janneke@gnu.org]]> + + Copying and distribution of this file, with or without modification, + are permitted in any medium without royalty provided the copyright + notice and this notice are preserved. diff --git a/sysa/mes-0.22/README b/sysa/mes-0.22/README new file mode 100644 index 0000000..7607b6c --- /dev/null +++ b/sysa/mes-0.22/README @@ -0,0 +1,84 @@ +#+COMMENT: -*- org -*- +#+TITLE: About GNU Mes + +#+SUBTITLE: Maxwell Equations of Software + +[[https://www.gnu.org/software/mes][GNU Mes]] is a Scheme interpreter and C compiler for bootstrapping the GNU +System. Since version 0.22 it has again helped to halve the size of +opaque, uninspectable binary seeds that are currently being used in the +[[https://guix.gnu.org/blog/2019/guix-reduces-bootstrap-seed-by-50/][Reduced Binary Seed bootstrap]] of [[https://www.gnu.org/software/guix][GNU Guix]]. The final goal is to help +create a full source bootstrap as part of the [[http://bootstrappable.org][bootstrappable builds]] +effort for UNIX-like operating systems. + +The Scheme interpreter is written in ~5,000 LOC of simple C, and the C +compiler written in Scheme and these are mutual self-hosting. This +mes.c is [[https://github.com/oriansj/mes-m2][being simplified]] to be transpiled by [[https://github.com/oriansj/m2-planet][M2-Planet]]. + +Mes has a Garbage Collector, a library of loadable Scheme modules-- +notably Dominique Boucher's [[https://github.com/schemeway/lalr-scm][LALR]], Pre-R6RS [[https://www.cs.indiana.edu/chezscheme/syntax-case/old-psyntax.html][portable syntax-case]] with +R7RS ellipsis, Matt Wette's [[https://www.nongnu.org/nyacc][Nyacc]] --and test suite, just enough to +support a REPL and a C99 compiler: mescc. + +Mes+MesCC can compile an only [[http://gitlab.com/janneke/tinycc][lightly patched TinyCC]] that is +self-hosting. Using this tcc and the Mes C library we now have a +Reduced Binary Seed bootstrap for the gnutools triplet: glibc-2.2.5, +binutils-2.20.1, gcc-2.95.3. This is enough to bootstrap Guix for +i686-linux and x86_64-linux. + +Mes is inspired by The Maxwell Equations of Software: [[http://www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf][LISP-1.5]] -- John +McCarthy page 13, GNU Guix's source/binary packaging transparency and +Jeremiah Orians's [[https://github.com/oriansj/stage0][stage0]] ~500 byte self-hosting hex assembler. + +GNU Mes is free software, it is distributed under the terms of the GNU +General Public Licence version 3 or later. See the file [[file:COPYING][COPYING]]. + +* Get it + + #+BEGIN_SRC bash + git clone git://git.savannah.gnu.org/mes.git + #+END_SRC + +* Build it (see [[file:INSTALL][INSTALL]] for full instructions) + + #+BEGIN_SRC bash + ./configure + make all + make check + #+END_SRC + +* REPL it + + #+BEGIN_SRC bash + ./pre-inst-env mes + #+END_SRC + +* MesCC compiler + + #+BEGIN_SRC bash + ./pre-inst-env mescc -c scaffold/main.c + #+END_SRC + +* Bugs + + Please send Mes bug reports to [[mailto:bug-mes@gnu.org][bug-mes@gnu.org]]. + +* Links + [0] https://www.gnu.org/software/mes + [1] https://guix.gnu.org/blog/2019/guix-reduces-bootstrap-seed-by-50/ + [2] https://www.gnu.org/software/guix + [3] https://bootstrappable.org + [4] https://github.com/oriansj/mes-m2 + [5] https://github.com/oriansj/m2-planet + [6] https://github.com/schemeway/lalr-scm + [7] https://www.cs.indiana.edu/chezscheme/syntax-case/old-psyntax.html + [8] https://www.nongnu.org/nyacc + [9] https://gitlab.com/janneke/tinycc + [10] [[http://www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf]] + [11] https://github.com/oriansj/stage0 + +* Legalese +Copyright © 2016,2017,2018,2019 Jan (janneke) Nieuwenhuizen <[[mailto:janneke@gnu.org][janneke@gnu.org]]> + + Copying and distribution of this file, with or without modification, + are permitted in any medium without royalty provided the copyright + notice and this notice are preserved. diff --git a/sysa/mes-0.22/ROADMAP b/sysa/mes-0.22/ROADMAP new file mode 100644 index 0000000..ca476c4 --- /dev/null +++ b/sysa/mes-0.22/ROADMAP @@ -0,0 +1,100 @@ + -*- org -*- +#+TITLE: Tentative GNU Mes Road Map + +Copyright © 2016,2017,2018,2019 Jan (janneke) Nieuwenhuizen + + Copying and distribution of this file, with or without modification, + are permitted in any medium without royalty provided the copyright + notice and this notice are preserved. + +The goals of the GNU Mes project are two-fold: + + - to bootstrap the GNU System purely from source, without using any binary + seeds. + + - to aid the Reproducible-Builds.org effort; demonstrate the impact and + importance of GNU and Software Freedom. + +Since its inception, the project has gone a long way towards that goal. Below +is a list of items we want for version "1.0" of GNU Mes. + +You're welcome to discuss this road map on bug-mes@gnu.org or #bootstrappable +on Freenode! + +* TODO +** release 0.x, unsorted + - Merge the Scheme-only bootstrap which uses Gash and Gash Core + Utilities to remove from bootstrap-binary seed : Awk, Bash, Core + Utilities, Grep, Gzip, Sed, Tar. + - Introduce the Reduced Binaries Seed bootstrap to NixOS (Debian, + Arch, Gentoo, ...?) + - Full Source Bootstrap: compile mes.c using M2-Planet. Jeremiah + branched-out from mes; see https://github.com/oriansj/mes-m2, also see the + branches: wip-full-source-bootstrap, wip-m2-merge and wip-m2. + - Full Guile-compatible module support: define-module, define-public, + export, use-modules, ... + - ARMv7/AArch64 support: Mes C Library and MesCC. + - Simplify eval-apply and other core functionality (see mes-m2). + - Support native x86_64 bootstrap. + - Simplify MesCC ``MesCC should optimize ease of convincing us of its + correctness'' + - tcc: remove or upstream patches from tcc-boot. + - tcc: build 0.9.27 directly instead of via 0.9.26, see tinycc +** after release 1.0 + - Build Guix packages using Mes: run or simplify (guix build utils), + (guix build gnu-build-system). + - Build Guix packages without guix-daemon. See Ludovic's initrd build + work. + - Bootstrap support for the Hurd. Most needed now are fork and exec. + - Replace the initial gcc-2.95.3 with gcc-4.6.4. + - FreeBSD, *BSD? + wip-bootstrappable@0.9.27 branch + - Skip tcc: Build gcc using MesCC. + - better garbage collector. + - mes/mescc: proper docstrings, api reference documentation. + - mes/mescc: bootstrap a minimal Guile? + + libguile/{eval,init,list,strings,values,..}. + + ice-9/eval.scm + - syntax-case bootstrap problem + + resolve portable syntax-case bootstrap, or + + get full source syntax-case up (Andre van Tonder?) + https://srfi.schemers.org/srfi-72/srfi-72.html, or + + ... drop it? +* DONE + - 0.22 GNU Mes now builds reproducibly cross-platform, runs on the + Hurd and has better support for other distributions and kernels. + - 0.21 GNU Mes now supports a Scheme-only bootstrap and is packaged in + Debian GNU/Linux. + - 0.20 GNU Mes brings the Reduced Binary Source bootstrap to Guix. + - 0.19 GNU Mes now compiles TinyCC in ~8min and supports building Bash and + GNU Tar. + - 0.18 GNU Mes now supports GuixSD bootstrap (x86,x86_64) and has native + x86_64 support. + - 0.17.1 GNU Mes now allows removing glibc, binutils and gcc from the GuixSD + bootstrap. + - 0.17 GNU Mes is now an official GNU project and bootstraps gcc-4.7.4. + - 0.16.1 Mes now has info docs and installs ootb on Debian buster/testing. + - 0.16 Mes Lib C now bootstraps glibc-2.2.5, binutils-2.20.1, gcc-4.1.0. + - 0.15: MesCC now has a libc+gnu that supports compiling binutils-2.14, + gcc-2.95.3 and glibc-2.2.5. + - 0.14: Mes+MesCC now compiles a slightly patched self-hosting tcc. + - 0.13: Mes+MesCC now compiles a modified, functional tcc.c (~25,000LOC) in + 1h30'. + - 0.12: Mes+MesCC now compiles mes.c (~3000LOC) in ~4min. + - 0.11: MesCC now compiles a mes-tcc that passes 26/69 of mescc's C tests. + - 0.10: Mescc now compiles a mes-tcc that compiles a trivial C to a running + a.out. + - 0.9: Mescc now writes M1 macro assembly files and compiles tcc. + - 0.8: Mescc now writes object files in stage0's labeled hex2 format. + - 0.7: Mescc supports -E, -c, -o options, include more complete set of + header files, enough to work on compiling tinycc's tcc.c albeit a somewhat + modified version. + - 0.6: Work with unmodified, unbundled Nyacc; compile 33/55 tinycc's + tests/test2 suite. + - 0.5: Mutual self-hosting Scheme interpreter and C compiler: mes.c and + mescc, Support call-with-current-continuation, refactor catch/throw + - 0.4: Support Nyacc, Gcc-compiled Mes compiles minimal main.c using nyacc + - 0.3: Garbage collector + - 0.2: Support psyntax + - 0.1: Mes eval/apply feature complete; support syntax-rules, compile main.c + using LALR, dump ELF diff --git a/sysa/mes-0.22/build-aux/GNUmakefile.in b/sysa/mes-0.22/build-aux/GNUmakefile.in new file mode 100644 index 0000000..a5a3ffe --- /dev/null +++ b/sysa/mes-0.22/build-aux/GNUmakefile.in @@ -0,0 +1,402 @@ +# GNU Mes --- Maxwell Equations of Software +# Copyright © 2018,2019 Jan (janneke) Nieuwenhuizen +# +# This file is part of GNU Mes. +# +# GNU Mes is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# GNU Mes is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Mes. If not, see . + +SHELL=@BASH@ +srcdest=@srcdest@ +srcdir=@srcdir@ +abs_top_srcdir=@abs_top_srcdir@ +abs_top_builddir=@abs_top_builddir@ + +GUILE_FLAGS:=--no-auto-compile -L . -L module -C . -C module + +cleaning-p:=$(filter clean%, $(MAKECMDGOALS))$(filter %clean, $(MAKECMDGOALS)) + +ifndef cleaning-p +include .config.make +ifneq ($(prefix),) +prefix-arg=--prefix=$(prefix) +endif +ifneq ($(build),) +build-arg=--build=$(build) +endif +ifneq ($(host),) +host-arg=--host=$(host) +endif +ifeq ($(mes_libc),system) +--with-system-libc=system +endif +.config.make: + ${srcdir}/configure $(prefix_arg) $(host-arg) $(build-arg) $(with-system-libc) +endif + +PHONY_TARGETS:=\ + TAGS\ + all-go\ + all\ + build\ + check\ + clean-go\ + clean\ + default\ + dist\ + distclean\ + doc\ + dvi\ + gcc\ + generate-ChangeLog\ + help\ + html\ + info\ + install-dvi\ + install-html\ + install-pdf\ + install-ps\ + install-strip\ + install\ + installcheck\ + installdirs\ + maintainer-clean\ + man\ + mes-gcc\ + mes-tcc\ + mes\ + mostlyclean\ + pdf\ + ps\ + sign-dist\ + uninstall\ + web\ +# + +.PHONY: $(PHONY_TARGETS) + +default: all + +all: doc + +doc: build + +build: + $(SHELL) build.sh + +src/${program_prefix}mes: build + +clean: + rm -f *.o *.s bin/mes bin/mes-gcc bin/mes-mescc + rm -f mes.{aux,cp,cps,fn,info,log,tmp,toc,vr,vrs} + rm -f .log build.log + rm -f 0exit-42 0hello-mes exit-42 body-exit-42 body-hello-mes hello-mes + rm -f build-aux/mes-snarf.go + rm -f module/mescc.go + rm -f module/mes/*.go module/mescc/*.go + rm -f module/mescc/i386/*.go + rm -f module/mescc/x86_64/*.go + rm -rf gcc-lib/*.o gcc-lib/*.s gcc-lib/*.a gcc-lib/*-mes + rm -f gcc-lib/libc+gnu.c + rm -f gcc-lib/.log gcc-lib/build.log + rm -rf mescc-lib/*.o mescc-lib/*.s mescc-lib/*.a mescc-lib/*-mes + rm -f mescc-lib/libc+gnu.c + rm -f mescc-lib/.log mescc-lib/build.log + rm -rf mescc/bin + rm -f scaffold/boot/*.log scaffold/boot/*.trs + rm -f test-suite.log tests/*.log tests/*.trs + rm -f scaffold/*.s scaffold/*.o + rm -f doc/images/gcc-mesboot-graph.{eps,pdf,png} + rm -f doc/mes.1 doc/mesar.1 doc/mescc.1 + rm -f .config .config.E .config.o + +distclean: clean + rm -f GNUmakefile bootstrap.sh build.sh check.sh install.sh uninstall.sh + rm -f include/mes/config.h + rm -f .config.make config.sh mescc-lib/config.sh gcc-lib/config.sh + rm -f scripts/mesar scripts/mescc scripts/mescc.scm scripts/m2-merge + rm -f TAGS + +mostlyclean: clean + +maintainer-clean: distclean + rm -f doc/mes.info + rm -f doc/version.texi + +TAGS: + etags ${srcdest}lib/*.c ${srcdest}lib/*/*.c ${srcdest}src/*.c ${srcdest}include/*.h ${srcdest}include/sys/*.h + +all-go: + ${srcdest}build-aux/build-guile.sh + +clean-go: + rm -f $(shell find . -name '*.go') + +check: + $(SHELL) check.sh + +check-mescc: + $(SHELL) pre-inst-env build-aux/check-mescc.sh + +# Mes does not feature post-install checks yet, so we're great! +installcheck: + true + +install: + $(SHELL) install.sh + +uninstall: + $(SHELL) uninstall.sh + +doc/version.texi: ${srcdest}doc/mes.texi GNUmakefile + @mkdir -p $(@D) + (set `LANG= date -r $< +'%d %B %Y'`;\ + echo "@set UPDATED $$1 $$2 $$3"; \ + echo "@set UPDATED-MONTH $$2 $$3"; \ + echo "@set EDITION $(VERSION)"; \ + echo "@set VERSION $(VERSION)") > $@ + +doc: doc/version.texi +ifdef MAKEINFO +doc: info +else +$(warning skipping info: no makeinfo) +endif + +ifdef HELP2MAN +doc: man +else +$(warning skipping man: no help2man) +endif + +info: doc/mes.info + +doc/mes.info: ${srcdest}doc/mes.texi doc/version.texi ${srcdest}doc/images/gcc-mesboot-graph.png GNUmakefile + $(MAKEINFO) -o $@ -I doc -I doc $< + +doc/images/%.eps: ${srcdest}doc/images/%.dot +ifdef DOT + $(DOT) -T eps $< > $@ +else + touch $@ +endif + +doc/images/%.pdf: ${srcdest}doc/images/%.dot +ifdef DOT + $(DOT) -T pdf $< > $@ +else + touch $@ +endif + +doc/images/%.png: ${srcdest}doc/images/%.dot +ifdef DOT + $(DOT) -T png $< > $@ +else + touch $@ +$(warning info: graphvis missing: no images) +endif + +man: doc/mes.1 doc/mescc.1 doc/mesar.1 + +# disable builtin-rules +%.o: %.s +%.s: %.S +%.o: %.S +%.o: %.c +%: %.S +%: %.o +%: %.c + +doc/mes.1: src/${program_prefix}mes | build + MES_ARENA=10000000 ./pre-inst-env $(HELP2MAN) \ + --name="Scheme interpreter for bootstrapping the GNU system" \ + $( $@ + +doc/mescc.1: scripts/mescc src/${program_prefix}mes | build + MES_ARENA=10000000 ./pre-inst-env $(HELP2MAN) \ + --name="C99 compiler in Scheme for bootstrapping the GNU system" \ + $( $@ + +doc/mesar.1: scripts/mescc src/${program_prefix}mes | build + MES_ARENA=10000000 ./pre-inst-env $(HELP2MAN) \ + --name="Archiver for MesCC" \ + $( $@ + +html: doc/html/index.html + +doc/html/index.html: ${srcdest}doc/mes.texi doc/version.texi doc/images/gcc-mesboot-graph.png + $(MAKEINFO) --html -o $(@D) -I ${srcdest}doc -I doc $< + +dvi: doc/mes.dvi + +doc/mes.dvi: ${srcdest}doc/mes.texi + $(MAKEINFO) --dvi -I ${srcdest}doc -I doc -o doc/mes.dvi $< + +pdf: doc/mes.pdf + +doc/mes.pdf: ${srcdest}doc/mes.texi + $(MAKEINFO) --pdf -I ${srcdest}doc -I doc -o doc/mes.pdf $< + +ps: doc/mes.ps + +doc/mes.ps: ${srcdest}doc/mes.texi + $(MAKEINFO) --ps -I ${srcdest}doc -I doc -o doc/mes.ps $< + +WEB_IMAGES:=\ + doc/images/gcc-mesboot-graph.eps\ + doc/images/gcc-mesboot-graph.pdf\ + doc/images/gcc-mesboot-graph.png + +web: info $(WEB_IMAGES) + GENDOCS_TEMPLATE_DIR=doc build-aux/gendocs.sh -I doc -s ${srcdest}doc/mes.texi -o doc/web/manual --email bug-mes@gnu.org mes "GNU Mes manual" + +### dist +COMMIT=$(shell test -e ${srcdest}.git && (cd ${srcdir} && git describe --dirty 2>/dev/null) || cat ${srcdest}.tarball-version) +TARBALL_VERSION=$(COMMIT:v%=%) +TARBALL_DIR:=$(PACKAGE)-$(TARBALL_VERSION) +TARBALL:=$(TARBALL_DIR).tar.gz +# Be friendly to Debian; avoid using EPOCH +MTIME=$(shell git show HEAD --format=%ct --no-patch 2>/dev/null) +# Reproducible tarball +TAR_FLAGS=--sort=name --mtime=@$(MTIME) --owner=0 --group=0 --numeric-owner --mode=go=rX,u+rw,a-s + +.tarball-version: + echo $(COMMIT) > $@ + +GIT_ARCHIVE_HEAD:=git archive HEAD -- +GIT_LS_FILES:=git ls-files +ifeq ($(wildcard .git),) +GIT_ARCHIVE_HEAD:=tar -cf- +GIT_LS_FILES:=find +MTIME:=0 +endif + +dist: $(TARBALL) + +sign-dist: $(TARBALL) + gpg -a --output $(TARBALL).sig --detach-sig $(TARBALL) + git checkout ChangeLog + +tree-clean-p: + test ! -d .git || git diff --exit-code > /dev/null + test ! -d .git || git diff --cached --exit-code > /dev/null + @echo commit:$(COMMIT) + +generate-ChangeLog: + $(PERL) ${srcdest}build-aux/gitlog-to-changelog --srcdir=${srcdir} > $@ + cat ChangeLog >> generate-ChangeLog + mv generate-ChangeLog ChangeLog + +$(TARBALL): .tarball-version | generate-ChangeLog + ($(GIT_LS_FILES) \ + --exclude=$(TARBALL_DIR); \ + echo $^ | tr ' ' '\n') \ + | tar $(TAR_FLAGS) \ + --transform=s,^,$(TARBALL_DIR)/,S -T- -cf- \ + | gzip -c --no-name > $@ + git checkout ChangeLog + +ifdef GUIX +update-hash: $(TARBALL) + $(GUIX) download file://$(PWD)/$< + sed -i -e 's,(base32 #!mes!# "[^"]*"),(base32 #!mes!# "$(shell $(GUIX) hash $<)"),' guix/git/mes.scm + +else +$(warning update-hash: no guix) +endif + +tag: + git tag -s v$(VERSION) -m "GNU Mes $(VERSION)." + +# Release process +# 0. Prepare git, see history: +# - doc: Release update +# + NEWS, etc. +# + doc/announce/ANNOUNCE-0.22, using xxx for checksums +# - Release 0.22 +# 1. make tag VERSION=0.22 +# 2. make sign-dist +# 3. make release +# - Update doc/announce/ANNOUNCE-0.22 +# - doc: Post-release update. +# 4. verify bootstrap + +guix-build: + ./pre-inst-env $(GUIX) build mes@$(VERSION) --with-source=$(TARBALL) + +release: update-hash | gen-announce guix-build + +GPG_KEY_ID:=1A858392E331EAFDB8C27FFBF3C1A0D9C1D65273 +GEN_ANNOUNCE=$(GNULIB)/build-aux/announce-gen +GNULIB=../../gnulib +gen-announce: + $(GEN_ANNOUNCE)\ + --release-type=beta\ + --package-name=mes\ + --previous-version='0.21 '\ + --current-version=$(VERSION)\ + --gpg-key-id=$(GPG_KEY_ID)\ + --url-directory=https://ftp.gnu.org/gnu/mes\ + --news=NEWS\ + > doc/announce/ANNOUNCE-$(VERSION)- + +installdirs: mkinstalldirs + mkdir -p\ + $(DESTDIR)$(bindir)\ + $(DESTDIR)$(datadir)\ + $(DESTDIR)$(libdir)\ + $(DESTDIR)$(infodir)\ + $(DESTDIR)$(mandir) + +install-dvi: dvi + mkdir -p $(DESTDIR)${docdir} + cp doc/mes.dvi $(DESTDIR)${docdir} + +install-html: html + mkdir -p $(DESTDIR)${docdir} + tar -cf- -C doc html | tar -xf- -C $(DESTDIR)${docdir} + +install-pdf: pdf + mkdir -p $(DESTDIR)${docdir} + cp doc/mes.pdf $(DESTDIR)${docdir} + +install-ps: ps + mkdir -p $(DESTDIR)${docdir} + cp doc/mes.ps $(DESTDIR)${docdir} + +# We do not strip binaries, binutils' strip corrupts M1+hex2-generated ELFs +install-strip: install + + +define HELP_TOP +Usage: make [OPTION]... [TARGET]... + +Main and non-standard targets: + all update everything + all-go update .go files + dist update $(TARBALL) + doc update documentation + check run unit tests + clean run git clean -dfx + clean-go clean .go files + info update info documentation + install install in $(prefix) + install-info install info docs in $(prefix)/share/info + release dist and tag + uninstall uninstall from $(prefix) +endef +export HELP_TOP +help: + @echo "$$HELP_TOP" + +include ${srcdest}build-aux/export.make diff --git a/sysa/mes-0.22/build-aux/bootstrap.sh.in b/sysa/mes-0.22/build-aux/bootstrap.sh.in new file mode 100644 index 0000000..1fbd38d --- /dev/null +++ b/sysa/mes-0.22/build-aux/bootstrap.sh.in @@ -0,0 +1,114 @@ +#! @SHELL@ + +# GNU Mes --- Maxwell Equations of Software +# Copyright © 2019 Jan (janneke) Nieuwenhuizen +# +# This file is part of GNU Mes. +# +# GNU Mes is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# GNU Mes is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Mes. If not, see . + +LANG= +MES_ARENA=${MES_ARENA-20000000} +export MES_ARENA +MES_MAX_ARENA=${MES_MAX_ARENA-${MES_ARENA}} +export MES_MAX_ARENA +MES_STACK=${MES_STACK-5000000} +export MES_STACK +MES_PREFIX=${MES_PREFIX-$PWD} + +. ./config.sh +. ${srcdest}build-aux/configure-lib.sh +. ${srcdest}build-aux/cflags.sh + +CPPFLAGS="-D HAVE_CONFIG_H=1 -I include" +AM_CFLAGS="" +mkdir -p mescc-lib +cp config.sh mescc-lib/config.sh +cd mescc-lib +srcdest=../${srcdest} +ln -sf ${srcdest}mes . +ln -sf ${srcdest}module . +ln -sf ${srcdest}src . +AM_CPPFLAGS="-D HAVE_CONFIG_H=1 -I ${srcdest}include -I ${srcdest}include/$mes_kernel/$mes_cpu" + +mkdir -p $mes_cpu-mes +$CC -c $AM_CPPFLAGS $CPPFLAGS $AM_CFLAGS $CFLAGS ${srcdest}lib/$mes_kernel/$mes_cpu-mes-$compiler/crt1.c +cp crt1.o $mes_cpu-mes +cp crt1.s $mes_cpu-mes + +objects= +for c in $libc_mini_SOURCES; do + o=$(basename $c .c).o + if test ! -e $o -o ${srcdest}$c -nt $o; then + echo " CC $c" + $CC -c $AM_CPPFLAGS $CPPFLAGS $AM_CFLAGS $CFLAGS ${srcdest}$c + fi + objects="$objects $o" +done +echo " AR $mes_cpu-mes/libc-mini.a" +$AR crD $mes_cpu-mes/libc-mini.a $objects + +objects= +for c in $libc_SOURCES; do + o=$(basename $c .c).o + if test ! -e $o -o ${srcdest}$c -nt $o; then + echo " CC $c" + $CC -c $AM_CPPFLAGS $CPPFLAGS $AM_CFLAGS $CFLAGS ${srcdest}$c + fi + objects="$objects $o" +done +echo " AR $mes_cpu-mes/libc.a" +$AR crD $mes_cpu-mes/libc.a $objects + +objects= +for c in $libc_tcc_SOURCES; do + o=$(basename $c .c).o + if test ! -e $o -o ${srcdest}$c -nt $o; then + echo " CC $c" + $CC -c $AM_CPPFLAGS $CPPFLAGS $AM_CFLAGS $CFLAGS ${srcdest}$c + fi + objects="$objects $o" +done +echo " AR $mes_cpu-mes/libc+tcc.a" +$AR crD $mes_cpu-mes/libc+tcc.a $objects + +cd .. +srcdest= +CPPFLAGS="-D HAVE_CONFIG_H=1 -I ${srcdest}include -I ${srcdest}include/$mes_kernel/$mes_cpu" + +objects= +for c in $mes_SOURCES; do + o=$(basename $c .c).o + if test ! -e $o -o ${srcdest}$c -nt $o; then + echo " CC $c" + $CC -c $AM_CPPFLAGS $CPPFLAGS $AM_CFLAGS $CFLAGS ${srcdest}$c + fi + objects="$objects $o" +done +echo " CCLD bin/mes-mescc" +mkdir -p bin +$CC -nostdlib -o bin/mes-mescc -L mescc-lib mescc-lib/crt1.o $objects -lc +cp bin/mes-mescc bin/mes + +( + mkdir -p gcc-lib + cp config.sh gcc-lib + cd gcc-lib + compiler=gcc + if test -z "$srcdest"; then + srcdest=../ + srcdir=../ + fi + @SHELL@ ${srcdest}build-aux/build-source-lib.sh +) diff --git a/sysa/mes-0.22/build-aux/build-guile.sh b/sysa/mes-0.22/build-aux/build-guile.sh new file mode 100755 index 0000000..bd30450 --- /dev/null +++ b/sysa/mes-0.22/build-aux/build-guile.sh @@ -0,0 +1,65 @@ +#! /bin/sh + +# GNU Mes --- Maxwell Equations of Software +# Copyright © 2017,2018 Jan (janneke) Nieuwenhuizen +# +# This file is part of GNU Mes. +# +# GNU Mes is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# GNU Mes is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Mes. If not, see . + +set -e + +. ./config.sh + +. ${srcdest}build-aux/trace.sh +GUILE_AUTO_COMPILE=0 + +SCM_FILES=" +module/mes/getopt-long.scm +module/mes/guile.scm +module/mes/misc.scm +module/mes/test.scm +module/mescc/M1.scm +module/mescc/as.scm +module/mescc/bytevectors.scm +module/mescc/compile.scm +module/mescc/i386/as.scm +module/mescc/i386/info.scm +module/mescc/x86_64/as.scm +module/mescc/x86_64/info.scm +module/mescc/info.scm +module/mescc.scm +module/mescc/mescc.scm +module/mescc/preprocess.scm +" + +SCRIPTS=" +build-aux/mes-snarf.scm +" + +export host=$($GUILE -c "(display %host-type)") + +abs=$srcdest +if [ "$GUILE_EFFECTIVE_VERSION" = "2.0" ]; then + srcdest=$abs_top_srcdir/ +fi + +for i in $SCM_FILES $SCRIPTS; do + b=$(basename $i) + go=${i%%.scm}.go + f=${srcdest}$i + if test $f -nt $go; then + trace "GUILEC $f" $GUILD compile -L ${srcdest}module -L ${srcdest}build-aux -L ${srcdest}scripts -o $go $f + fi +done diff --git a/sysa/mes-0.22/build-aux/build-lib.sh b/sysa/mes-0.22/build-aux/build-lib.sh new file mode 100755 index 0000000..4ef701c --- /dev/null +++ b/sysa/mes-0.22/build-aux/build-lib.sh @@ -0,0 +1,81 @@ +#! /bin/sh + +# GNU Mes --- Maxwell Equations of Software +# Copyright © 2019 Jan (janneke) Nieuwenhuizen +# +# This file is part of GNU Mes. +# +# GNU Mes is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# GNU Mes is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Mes. If not, see . + +. ./config.sh +. ${srcdest}build-aux/configure-lib.sh +. ${srcdest}build-aux/trace.sh +. ${srcdest}build-aux/cc.sh + +trap 'test -f .log && cat .log' EXIT + +mkdir -p $mes_cpu-mes +compile lib/$mes_kernel/$mes_cpu-mes-$compiler/crt1.c +cp crt1.o $mes_cpu-mes +if test -e crt1.s; then + cp crt1.s $mes_cpu-mes +fi + +archive libc-mini.a $libc_mini_SOURCES +cp libc-mini.a $mes_cpu-mes +if test -e libc-mini.s; then + cp libc-mini.s $mes_cpu-mes +fi + +archive libmes.a $libmes_SOURCES +cp libmes.a $mes_cpu-mes +if test -e libmes.s; then + cp libmes.s $mes_cpu-mes +fi + +if test $mes_libc = mes; then + archive libc.a $libc_SOURCES + cp libc.a $mes_cpu-mes + if test -e libc.s; then + cp libc.s $mes_cpu-mes + fi +fi + +archive libc+tcc.a $libc_tcc_SOURCES +cp libc+tcc.a $mes_cpu-mes +if test -e libc+tcc.s; then + cp libc+tcc.s $mes_cpu-mes +fi + +if $courageous; then + exit 0 +fi + +archive libc+gnu.a $libc_gnu_SOURCES +cp libc+gnu.a $mes_cpu-mes +if test -e libc+gnu.s; then + cp libc+gnu.s $mes_cpu-mes +fi + +archive libtcc1.a $libtcc1_SOURCES +cp libtcc1.a $mes_cpu-mes +if test -e libtcc1.s; then + cp libtcc1.s $mes_cpu-mes +fi + +archive libgetopt.a lib/posix/getopt.c +cp libgetopt.a $mes_cpu-mes +if test -e libgetopt.s; then + cp libgetopt.s $mes_cpu-mes +fi diff --git a/sysa/mes-0.22/build-aux/build-mes.sh b/sysa/mes-0.22/build-aux/build-mes.sh new file mode 100755 index 0000000..4e388c4 --- /dev/null +++ b/sysa/mes-0.22/build-aux/build-mes.sh @@ -0,0 +1,57 @@ +#! /bin/sh + +# GNU Mes --- Maxwell Equations of Software +# Copyright © 2019 Jan (janneke) Nieuwenhuizen +# +# This file is part of GNU Mes. +# +# GNU Mes is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# GNU Mes is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Mes. If not, see . + +set -e +set -u + +V=${V-} + +if [ "$V" = 2 ]; then + set -x +fi + +. ./config.sh +. ${srcdest}build-aux/trace.sh +. ${srcdest}build-aux/cc.sh + +trap 'test -f .log && cat .log' EXIT + +mes_sources=" +src/gc.c +src/hash.c +src/lib.c +src/math.c +src/mes.c +src/module.c +src/posix.c +src/reader.c +src/string.c +src/struct.c +src/vector.c +" + +for c in $mes_sources; do + compile $c +done +if test $mes_libc = system; then + LIBS=-lmes +fi +link bin/mes-$compiler +cp bin/mes-$compiler bin/mes diff --git a/sysa/mes-0.22/build-aux/build-scaffold.sh b/sysa/mes-0.22/build-aux/build-scaffold.sh new file mode 100755 index 0000000..911e8cd --- /dev/null +++ b/sysa/mes-0.22/build-aux/build-scaffold.sh @@ -0,0 +1,149 @@ +#! /bin/sh + +# GNU Mes --- Maxwell Equations of Software +# Copyright © 2017,2018,2019 Jan (janneke) Nieuwenhuizen +# +# This file is part of GNU Mes. +# +# GNU Mes is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# GNU Mes is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Mes. If not, see . + +set -e +set -u + +V=${V-1} + +if [ "$V" = 2 ]; then + set -x +fi + +. ./config.sh +. ${srcdest}build-aux/trace.sh + +if $courageous; then + set +e + set_min_e () { + echo "Applying courage" + } + set_min_e +else + set_min_e () { + set -e + } +fi + +case "$mes_cpu" in + arm) + stage0_arch=40 + stage0_cpu=armv7l + ;; + x86_64) + stage0_arch=2 + stage0_cpu=amd64 + ;; + x86) + stage0_arch=1 + stage0_cpu=x86 + ;; + *) + stage0_arch=1 + stage0_cpu=$mes_cpu + ;; +esac + +trace "CCLD ${srcdest}lib/$mes_kernel/$mes_cpu-mes-$compiler/exit-42.S" $CC\ + -nostdlib\ + -g\ + ${srcdest}lib/$mes_kernel/$mes_cpu-mes-$compiler/exit-42.S\ + -o exit-42 + +trace "TEST exit-42" +{ set +e; ./exit-42; r=$?; set_min_e; } +[ $r != 42 ] && echo " => $r" +[ $r = 42 ] + +if $numbered_arch; then + stage0_cpu_flag="--Architecture $stage0_arch"; +else + stage0_cpu_flag="--architecture $stage0_cpu"; +fi + +trace "HEX2 ${srcdest}lib/$mes_kernel/$mes_cpu-mes/elf$mes_bits-0exit-42.hex2" $HEX2\ + --LittleEndian\ + $stage0_cpu_flag\ + --BaseAddress 0x1000000\ + -f ${srcdest}lib/$mes_kernel/$mes_cpu-mes/elf$mes_bits-0header.hex2\ + -f ${srcdest}lib/$mes_kernel/$mes_cpu-mes/elf$mes_bits-0exit-42.hex2\ + --exec_enable\ + -o 0exit-42 + +trace "TEST 0exit-42" +{ set +e; ./0exit-42; r=$?; set_min_e; } +[ $r != 42 ] && echo " => $r" +[ $r = 42 ] + +trace "HEX2 ${srcdest}lib/$mes_kernel/$mes_cpu-mes/elf$mes_bits-body-exit-42.hex2" $HEX2\ + --LittleEndian\ + $stage0_cpu_flag\ + --BaseAddress 0x1000000\ + -f ${srcdest}lib/$mes_kernel/$mes_cpu-mes/elf$mes_bits-header.hex2\ + -f ${srcdest}lib/$mes_kernel/$mes_cpu-mes/elf$mes_bits-body-exit-42.hex2\ + -f ${srcdest}lib/$mes_kernel/$mes_cpu-mes/elf$mes_bits-footer-single-main.hex2\ + --exec_enable\ + -o body-exit-42 + +trace "TEST body-exit-42" +{ set +e; ./body-exit-42; r=$?; set_min_e; } +[ $r != 42 ] && echo " => $r" +[ $r = 42 ] + +### FIXME: c&p from exit-42 +trace "CCLD ${srcdest}lib/$mes_kernel/$mes_cpu-mes-$compiler/hello-mes.S" $CC\ + -nostdlib\ + -g\ + ${srcdest}lib/$mes_kernel/$mes_cpu-mes-$compiler/hello-mes.S\ + -o hello-mes + +trace "TEST hello-mes" +{ set +e; ./hello-mes; r=$?; set_min_e; } +[ $r != 0 ] && echo " => $r" +[ $r = 0 ] + +trace "HEX2 ${srcdest}lib/$mes_kernel/$mes_cpu-mes/elf$mes_bits-0hello-mes.hex2" $HEX2\ + --LittleEndian\ + $stage0_cpu_flag\ + --BaseAddress 0x1000000\ + -f ${srcdest}lib/$mes_kernel/$mes_cpu-mes/elf$mes_bits-0header.hex2\ + -f ${srcdest}lib/$mes_kernel/$mes_cpu-mes/elf$mes_bits-0hello-mes.hex2\ + --exec_enable\ + -o 0hello-mes + +trace "TEST 0hello-mes" +{ set +e; ./0hello-mes; r=$?; set_min_e; } +[ $r != 0 ] && echo " => $r" +[ $r = 0 ] + +trace "HEX2 ${srcdest}lib/$mes_kernel/$mes_cpu-mes/elf$mes_bits-body-hello-mes.hex2" $HEX2\ + --LittleEndian\ + $stage0_cpu_flag\ + --BaseAddress 0x1000000\ + -f ${srcdest}lib/$mes_kernel/$mes_cpu-mes/elf$mes_bits-header.hex2\ + -f ${srcdest}lib/$mes_kernel/$mes_cpu-mes/elf$mes_bits-body-hello-mes.hex2\ + -f ${srcdest}lib/$mes_kernel/$mes_cpu-mes/elf$mes_bits-footer-single-main.hex2\ + --exec_enable\ + -o body-hello-mes + +trace "TEST body-hello-mes" +{ set +e; ./body-hello-mes; r=$?; set_min_e; } +[ $r != 0 ] && echo " => $r" +[ $r = 0 ] diff --git a/sysa/mes-0.22/build-aux/build-source-lib.sh b/sysa/mes-0.22/build-aux/build-source-lib.sh new file mode 100644 index 0000000..9180567 --- /dev/null +++ b/sysa/mes-0.22/build-aux/build-source-lib.sh @@ -0,0 +1,53 @@ +#! /bin/sh + +# GNU Mes --- Maxwell Equations of Software +# Copyright © 2019 Jan (janneke) Nieuwenhuizen +# +# This file is part of GNU Mes. +# +# GNU Mes is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# GNU Mes is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Mes. If not, see . + +set -e + +if test "$V" = 2; then + set -x +fi + +set -u +srcdest=${srcdest-} +. ${srcdest}build-aux/configure-lib.sh + +mkdir -p $mes_cpu-mes +cp ${srcdest}lib/$mes_kernel/$mes_cpu-mes-$compiler/crt*.c $mes_cpu-mes + +rm -f libc+gnu.c +cat > libc+gnu.c <> libc+gnu.c + cat ${srcdest}$c >> libc+gnu.c + echo >> libc+gnu.c +done +cp libc+gnu.c $mes_cpu-mes + +cp ${srcdest}lib/libtcc1.c $mes_cpu-mes +cp ${srcdest}lib/posix/getopt.c $mes_cpu-mes/libgetopt.c diff --git a/sysa/mes-0.22/build-aux/build.sh.in b/sysa/mes-0.22/build-aux/build.sh.in new file mode 100644 index 0000000..db6184b --- /dev/null +++ b/sysa/mes-0.22/build-aux/build.sh.in @@ -0,0 +1,141 @@ +#! /bin/sh + +# GNU Mes --- Maxwell Equations of Software +# Copyright © 2018,2019 Jan (janneke) Nieuwenhuizen +# +# This file is part of GNU Mes. +# +# GNU Mes is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# GNU Mes is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Mes. If not, see . + +set -e + +if test "$1" = "help"; then + cat < +# +# This file is part of GNU Mes. +# +# GNU Mes is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# GNU Mes is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Mes. If not, see . + +objects= +compile () { + c=${srcdest}$1 + b=$(basename $c .c) + o=$b.o + objects="$objects $o" + if test ! -e $o -o $c -nt $o; then + trace "CC $c" $CC -c $AM_CPPFLAGS $CPPFLAGS $AM_CFLAGS $CFLAGS -o $o $c + $CC -c $AM_CPPFLAGS $CPPFLAGS $AM_CFLAGS $CFLAGS -o $o $c + fi +} + +archive () { + archive=$1 + shift + sources="$@" + objects= + for c in $sources; do + b=$(basename $c .c) + o=$b.o + compile $c + done + trace "AR $archive" $AR crD $archive $objects + objects= +} + +link () { + out=$1 + d=$(dirname $out) + mkdir -p $d + if test $mes_libc = system; then + crt1= + else + crt1=crt1.o + fi + trace "CCLD $out" $CC $AM_CFLAGS $CFLAGS $AM_LDFLAGS $LDFLAGS -o $out $crt1 $objects $LIBS + objects= +} diff --git a/sysa/mes-0.22/build-aux/cflags.sh b/sysa/mes-0.22/build-aux/cflags.sh new file mode 100644 index 0000000..2ce778a --- /dev/null +++ b/sysa/mes-0.22/build-aux/cflags.sh @@ -0,0 +1,56 @@ +# GNU Mes --- Maxwell Equations of Software +# Copyright © 2018,2019 Jan (janneke) Nieuwenhuizen +# +# This file is part of GNU Mes. +# +# GNU Mes is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# GNU Mes is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Mes. If not, see . + +AM_CPPFLAGS=" +-D HAVE_CONFIG_H=1 +-I ${srcdest}include +-I ${srcdest}include/$mes_kernel/$mes_cpu +" + +if test $mes_kernel = gnu; then + AM_CPPFLAGS="$AM_CPPFLAGS +-I /usr/include +" +fi + +AM_CFLAGS= + +if test $mes_libc = mes; then + AM_CFLAGS="$AM_CFLAGS +-static +-nostdinc +-nostdlib +-fno-builtin +" +fi + +AM_LDFLAGS=" +-L . +" +if test $mes_libc = mes; then + AM_LDFLAGS="$AM_LDFLAGS +-static +-nostdlib +" +fi +LIBS=-lc + +export AM_CFLAGS CFLAGS +export AM_CPPFLAGS CPPFLAGS +export AM_LDFLAGS LDFLAGS +export LIBS diff --git a/sysa/mes-0.22/build-aux/check-boot.sh b/sysa/mes-0.22/build-aux/check-boot.sh new file mode 100755 index 0000000..1f1686a --- /dev/null +++ b/sysa/mes-0.22/build-aux/check-boot.sh @@ -0,0 +1,121 @@ +#! /bin/bash + +# GNU Mes --- Maxwell Equations of Software +# Copyright © 2018,2019 Jan (janneke) Nieuwenhuizen +# +# This file is part of GNU Mes. +# +# GNU Mes is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# GNU Mes is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Mes. If not, see . + +set -e +. ./config.sh +set -u + +TESTS=" + +scaffold/boot/00-zero.scm +scaffold/boot/01-true.scm +scaffold/boot/02-symbol.scm +scaffold/boot/03-string.scm +scaffold/boot/04-quote.scm +scaffold/boot/05-list.scm +scaffold/boot/06-tick.scm +scaffold/boot/07-if.scm +scaffold/boot/08-if-if.scm + +scaffold/boot/10-cons.scm +scaffold/boot/11-list.scm +scaffold/boot/11-vector.scm +scaffold/boot/12-car.scm +scaffold/boot/13-cdr.scm +scaffold/boot/14-exit.scm +scaffold/boot/15-display.scm + +scaffold/boot/16-if-eq-quote.scm + +scaffold/boot/17-memq.scm +scaffold/boot/17-memq-keyword.scm +scaffold/boot/17-string-equal.scm +scaffold/boot/17-equal2.scm +scaffold/boot/17-string-append.scm +scaffold/boot/17-open-input-string.scm + +scaffold/boot/20-define.scm +scaffold/boot/20-define-quoted.scm +scaffold/boot/20-define-quote.scm + +scaffold/boot/21-define-procedure.scm +scaffold/boot/22-define-procedure-2.scm +scaffold/boot/23-begin.scm +scaffold/boot/24-begin-define.scm +scaffold/boot/25-begin-define-2.scm +scaffold/boot/26-begin-define-later.scm +scaffold/boot/27-lambda-define.scm +scaffold/boot/28-define-define.scm +scaffold/boot/29-lambda-define.scm +scaffold/boot/2a-lambda-lambda.scm +scaffold/boot/2b-define-lambda.scm +scaffold/boot/2c-define-lambda-recurse.scm +scaffold/boot/2d-define-lambda-set.scm +scaffold/boot/2d-compose.scm +scaffold/boot/2e-define-first.scm +scaffold/boot/2f-define-second.scm +scaffold/boot/2f-define-second-lambda.scm +scaffold/boot/2g-vector.scm + +scaffold/boot/30-capture.scm +scaffold/boot/31-capture-define.scm +scaffold/boot/32-capture-modify-close.scm +scaffold/boot/33-procedure-override-close.scm +scaffold/boot/34-cdr-override-close.scm +scaffold/boot/35-closure-modify.scm +scaffold/boot/36-closure-override.scm +scaffold/boot/37-closure-lambda.scm +scaffold/boot/38-simple-format.scm +scaffold/boot/39-global-define-override.scm +scaffold/boot/3a-global-define-lambda-override.scm + +scaffold/boot/40-define-macro.scm +scaffold/boot/41-when.scm +scaffold/boot/42-if-when.scm +scaffold/boot/43-or.scm +scaffold/boot/44-or-if.scm +scaffold/boot/45-pass-if.scm +scaffold/boot/46-report.scm +scaffold/boot/47-pass-if-eq.scm +scaffold/boot/48-let.scm +scaffold/boot/49-macro-override.scm +scaffold/boot/4a-define-macro-define-macro.scm +scaffold/boot/4b-define-macro-define.scm +scaffold/boot/4c-quasiquote.scm +scaffold/boot/4d-let-map.scm +scaffold/boot/4e-let-global.scm +scaffold/boot/4f-string-split.scm + +scaffold/boot/50-keyword.scm +scaffold/boot/50-make-string.scm +scaffold/boot/50-string-join.scm +scaffold/boot/50-primitive-load.scm +scaffold/boot/53-closure-display.scm +scaffold/boot/60-let-syntax.scm +scaffold/boot/call-cc.scm +scaffold/boot/memory.scm +scaffold/boot/numbers.scm +" + +XFAIL_TESTS= + +test_ext=.scm +log_compiler="${SHELL} ${srcdest}build-aux/test-boot.sh" +. ${srcdest}build-aux/test-suite.sh diff --git a/sysa/mes-0.22/build-aux/check-mes.sh b/sysa/mes-0.22/build-aux/check-mes.sh new file mode 100755 index 0000000..b6f92b7 --- /dev/null +++ b/sysa/mes-0.22/build-aux/check-mes.sh @@ -0,0 +1,62 @@ +#! /bin/sh + +# GNU Mes --- Maxwell Equations of Software +# Copyright © 2017,2018 Jan (janneke) Nieuwenhuizen +# +# This file is part of GNU Mes. +# +# GNU Mes is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# GNU Mes is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Mes. If not, see . + +set -e +. ./config.sh +set -u + +TESTS=" +tests/boot.test +tests/read.test +tests/srfi-0.test +tests/macro.test +tests/perform.test +tests/base.test +tests/quasiquote.test +tests/let.test +tests/closure.test +tests/scm.test +tests/display.test +tests/cwv.test +tests/math.test +tests/vector.test +tests/srfi-1.test +tests/srfi-9.test +tests/srfi-13.test +tests/srfi-14.test +tests/srfi-43.test +tests/optargs.test +tests/fluids.test +tests/catch.test +tests/getopt-long.test +tests/guile.test +tests/syntax.test +tests/let-syntax.test +tests/pmatch.test +tests/posix.test +tests/match.test +tests/psyntax.test +" + +XFAIL_TESTS= + +test_ext=.test +log_compiler=${SHELL} +. ${srcdest}build-aux/test-suite.sh diff --git a/sysa/mes-0.22/build-aux/check-mescc.sh b/sysa/mes-0.22/build-aux/check-mescc.sh new file mode 100755 index 0000000..15204d3 --- /dev/null +++ b/sysa/mes-0.22/build-aux/check-mescc.sh @@ -0,0 +1,290 @@ +#! /bin/sh + +# GNU Mes --- Maxwell Equations of Software +# Copyright © 2017,2018,2019 Jan (janneke) Nieuwenhuizen +# +# This file is part of GNU Mes. +# +# GNU Mes is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# GNU Mes is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Mes. If not, see . + +set -e +. ./config.sh +set -u + +TESTS=" +lib/tests/scaffold/t.c +lib/tests/scaffold/01-return-0.c +lib/tests/scaffold/02-return-1.c +lib/tests/scaffold/03-call.c +lib/tests/scaffold/04-call-0.c +lib/tests/scaffold/05-call-1.c +lib/tests/scaffold/06-call-not-1.c +lib/tests/scaffold/06-not-call-1.c +lib/tests/scaffold/06-call-2.c +lib/tests/scaffold/06-call-string.c +lib/tests/scaffold/06-call-variable.c +lib/tests/scaffold/06-return-void.c +lib/tests/scaffold/07-include.c +lib/tests/scaffold/08-assign.c +lib/tests/scaffold/08-assign-negative.c +lib/tests/scaffold/08-assign-global.c +lib/tests/scaffold/10-if-0.c +lib/tests/scaffold/11-if-1.c +lib/tests/scaffold/12-if-eq.c +lib/tests/scaffold/13-if-neq.c +lib/tests/scaffold/14-if-goto.c +lib/tests/scaffold/15-if-not-f.c +lib/tests/scaffold/16-if-t.c +lib/tests/scaffold/17-compare-char.c +lib/tests/scaffold/17-compare-ge.c +lib/tests/scaffold/17-compare-gt.c +lib/tests/scaffold/17-compare-le.c +lib/tests/scaffold/17-compare-lt.c +lib/tests/scaffold/17-compare-unsigned-ge.c +lib/tests/scaffold/17-compare-unsigned-gt.c +lib/tests/scaffold/17-compare-unsigned-le.c +lib/tests/scaffold/17-compare-unsigned-lt.c +lib/tests/scaffold/17-compare-unsigned-char-le.c +lib/tests/scaffold/17-compare-unsigned-short-le.c +lib/tests/scaffold/17-compare-unsigned-long-le.c +lib/tests/scaffold/17-compare-and.c +lib/tests/scaffold/17-compare-or.c +lib/tests/scaffold/17-compare-and-or.c +lib/tests/scaffold/17-compare-assign.c +lib/tests/scaffold/17-compare-call.c +lib/tests/scaffold/18-assign-shadow.c +lib/tests/scaffold/20-while.c +lib/tests/scaffold/21-char-array-simple.c +lib/tests/scaffold/21-char-array.c +lib/tests/scaffold/22-while-char-array.c +lib/tests/scaffold/23-global-pointer-init-null.c +lib/tests/scaffold/23-global-pointer-init.c +lib/tests/scaffold/23-global-pointer-ref.c +lib/tests/scaffold/23-global-pointer-pointer-ref.c +lib/tests/scaffold/23-pointer-sub.c +lib/tests/scaffold/23-pointer.c +lib/tests/mes/30-oputs.c +lib/tests/mes/30-eputs.c +lib/tests/string/30-strlen.c +lib/tests/scaffold/30-exit-0.c +lib/tests/scaffold/30-exit-42.c +lib/tests/scaffold/32-call-wrap.c +lib/tests/scaffold/32-compare.c +lib/tests/scaffold/33-and-or.c +lib/tests/scaffold/34-pre-post.c +lib/tests/scaffold/35-compare-char.c +lib/tests/scaffold/36-compare-arithmetic.c +lib/tests/scaffold/37-compare-assign.c +lib/tests/scaffold/38-compare-call-2.c +lib/tests/scaffold/38-compare-call-3.c +lib/tests/scaffold/38-compare-call.c +lib/tests/scaffold/40-if-else.c +lib/tests/scaffold/41-ternary.c +lib/tests/scaffold/42-goto-label.c +lib/tests/scaffold/43-for-do-while.c +lib/tests/scaffold/44-switch.c +lib/tests/scaffold/44-switch-fallthrough.c +lib/tests/scaffold/44-switch-body-fallthrough.c +lib/tests/scaffold/45-void-call.c +lib/tests/scaffold/46-function-static.c +lib/tests/scaffold/47-function-expression.c +lib/tests/scaffold/48-global-static.c +lib/tests/assert/50-assert.c +lib/tests/mes/50-itoa.c +lib/tests/posix/50-getenv.c +lib/tests/stdlib/50-malloc.c +lib/tests/string/50-strcmp.c +lib/tests/string/50-strcpy.c +lib/tests/string/50-strncmp.c +lib/tests/posix/50-open-read.c +lib/tests/scaffold/51-pointer-sub.c +lib/tests/scaffold/54-argc.c +lib/tests/scaffold/54-argv.c +lib/tests/scaffold/55-char-array.c +lib/tests/scaffold/60-math.c +lib/tests/scaffold/61-array.c +lib/tests/scaffold/62-array.c +lib/tests/scaffold/63-struct.c +lib/tests/scaffold/63-struct-pointer.c +lib/tests/scaffold/63-struct-local.c +lib/tests/scaffold/63-struct-function.c +lib/tests/scaffold/63-struct-assign.c +lib/tests/scaffold/63-struct-array.c +lib/tests/scaffold/63-struct-array-assign.c +lib/tests/scaffold/63-struct-array-compare.c +lib/tests/scaffold/63-struct-cell.c +lib/tests/scaffold/64-make-cell.c +lib/tests/scaffold/65-read.c +lib/tests/scaffold/66-local-char-array.c +lib/tests/scaffold/70-stdarg.c +lib/tests/stdio/70-printf-hello.c +lib/tests/stdio/70-printf-simple.c +lib/tests/stdio/70-printf.c +lib/tests/stdlib/70-strtoull.c +lib/tests/string/70-strchr.c +lib/tests/scaffold/71-struct-array.c +lib/tests/scaffold/72-typedef-struct-def.c +lib/tests/scaffold/72-typedef-struct-def-local.c +lib/tests/scaffold/73-union-hello.c +lib/tests/scaffold/73-union.c +lib/tests/scaffold/74-multi-line-string.c +lib/tests/scaffold/75-struct-union.c +lib/tests/scaffold/76-pointer-arithmetic-pp.c +lib/tests/scaffold/76-pointer-arithmetic.c +lib/tests/scaffold/77-pointer-assign.c +lib/tests/scaffold/78-union-struct.c +lib/tests/scaffold/79-int-array-simple.c +lib/tests/scaffold/79-int-array.c +lib/tests/scaffold/7a-struct-char-array.c +lib/tests/scaffold/7b-struct-int-array-hello.c +lib/tests/scaffold/7b-struct-int-array-pointer.c +lib/tests/scaffold/7b-struct-int-array.c +lib/tests/scaffold/7c-dynarray.c +lib/tests/scaffold/7d-cast-char.c +lib/tests/scaffold/7e-struct-array-access.c +lib/tests/scaffold/7f-struct-pointer-arithmetic.c +lib/tests/scaffold/7g-struct-byte-word-field.c +lib/tests/scaffold/7h-struct-assign.c +lib/tests/scaffold/7i-struct-struct-simple.c +lib/tests/scaffold/7i-struct-struct.c +lib/tests/scaffold/7k-empty-for.c +lib/tests/scaffold/7k-for-each-elem-simple.c +lib/tests/scaffold/7k-for-each-elem.c +lib/tests/scaffold/7l-struct-any-size-array-simple.c +lib/tests/scaffold/7l-struct-any-size-array.c +lib/tests/scaffold/7m-struct-char-array-assign.c +lib/tests/scaffold/7n-struct-struct-array.c +lib/tests/scaffold/7o-struct-pre-post-simple.c +lib/tests/scaffold/7o-struct-pre-post.c +lib/tests/scaffold/7p-struct-cast.c +lib/tests/scaffold/7q-bit-field-simple.c +lib/tests/scaffold/7q-bit-field.c +lib/tests/scaffold/7r-sign-extend.c +lib/tests/scaffold/7s-struct-short.c +lib/tests/scaffold/7s-unsigned-compare.c +lib/tests/scaffold/7t-function-destruct.c +lib/tests/scaffold/7u-double.c +lib/tests/scaffold/7u-long-long.c +lib/tests/scaffold/7u-ternary-expression.c +lib/tests/scaffold/7u-call-ternary.c +lib/tests/scaffold/7u-inc-byte-word.c +lib/tests/scaffold/7u-struct-func.c +lib/tests/scaffold/7u-struct-size10.c +lib/tests/scaffold/7u-vstack.c +lib/tests/scaffold/70-array-in-struct-init.c +lib/tests/scaffold/70-struct-short-enum-init.c +lib/tests/scaffold/70-struct-post.c +lib/tests/scaffold/70-extern.c +lib/tests/setjmp/80-setjmp.c +lib/tests/stdio/80-sscanf.c +lib/tests/stdlib/80-qsort.c +lib/tests/stdlib/80-qsort-dupes.c +lib/tests/string/80-strncpy.c +lib/tests/string/80-strrchr.c +lib/tests/scaffold/82-define.c +lib/tests/scaffold/83-heterogenoous-init.c +lib/tests/scaffold/84-struct-field-list.c +lib/tests/scaffold/85-sizeof.c +" + +if test -z "$bootstrap"; then + TESTS="$TESTS +lib/tests/dirent/90-readdir.c +lib/tests/io/90-stat.c +lib/tests/mes/90-abtod.c +lib/tests/mes/90-dtoab.c +lib/tests/posix/90-execlp.c +lib/tests/posix/90-unsetenv.c +lib/tests/signal/90-signal.c +lib/tests/stdio/90-fopen.c +lib/tests/stdio/90-fopen-append.c +lib/tests/stdio/90-fread-fwrite.c +lib/tests/stdio/90-fseek.c +lib/tests/stdio/90-sprintf.c +lib/tests/stdlib/90-strtol.c +lib/tests/string/90-snprintf.c +lib/tests/string/90-strpbrk.c +lib/tests/string/90-strspn.c +lib/tests/scaffold/90-goto-var.c +lib/tests/scaffold/91-goto-array.c +lib/tests/scaffold/a0-call-trunc-char.c +lib/tests/scaffold/a0-call-trunc-short.c +lib/tests/scaffold/a0-call-trunc-int.c +lib/tests/scaffold/a0-math-divide-signed-negative.c +lib/tests/scaffold/a1-global-no-align.c +lib/tests/scaffold/a1-global-no-clobber.c +" +fi + +XFAIL_TESTS=" +lib/tests/stdio/90-sprintf.c +" + +if test $compiler = mescc; then + XFAIL_TESTS="$XFAIL_TESTS +lib/tests/scaffold/17-compare-unsigned-char-le.c +lib/tests/scaffold/17-compare-unsigned-short-le.c +lib/tests/scaffold/66-local-char-array.c +lib/tests/scaffold/72-typedef-struct-def-local.c +lib/tests/mes/90-abtod.c +lib/tests/mes/90-dtoab.c +lib/tests/scaffold/90-goto-var.c +lib/tests/scaffold/91-goto-array.c +" + + if test $mes_cpu = x86; then + XFAIL_TESTS="$XFAIL_TESTS +" + fi + + if test $mes_cpu = x86_64; then + XFAIL_TESTS="$XFAIL_TESTS +lib/tests/scaffold/a0-call-trunc-int.c +" + fi +fi + +if test $mes_cpu = x86_64; then + XFAIL_TESTS="$XFAIL_TESTS +lib/tests/stdio/70-printf-stdarg.c +" +fi + +if test $compiler = gcc; then + XFAIL_TESTS="$XFAIL_TESTS +" + + if test $mes_cpu = x86; then + XFAIL_TESTS="$XFAIL_TESTS +lib/tests/mes/90-dtoab.c +" + fi + + if test $mes_cpu = x86_64; then + XFAIL_TESTS="$XFAIL_TESTS +lib/tests/stdio/70-printf-hello.c +lib/tests/stdio/70-printf-simple.c +lib/tests/stdio/70-printf.c +lib/tests/scaffold/70-extern.c +lib/tests/stdio/80-sscanf.c +lib/tests/posix/90-execlp.c +lib/tests/string/90-snprintf.c +" + fi +fi + +recheck=${recheck-false} +test_ext=.c +log_compiler="${SHELL} ${srcdest}build-aux/test-c.sh" +. ${srcdest}build-aux/test-suite.sh diff --git a/sysa/mes-0.22/build-aux/check.sh.in b/sysa/mes-0.22/build-aux/check.sh.in new file mode 100644 index 0000000..eaf1674 --- /dev/null +++ b/sysa/mes-0.22/build-aux/check.sh.in @@ -0,0 +1,101 @@ +#! /bin/sh + +# GNU Mes --- Maxwell Equations of Software +# Copyright © 2017,2018 Jan (janneke) Nieuwenhuizen +# +# This file is part of GNU Mes. +# +# GNU Mes is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# GNU Mes is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Mes. If not, see . + +set -e + +MES_ARENA=${MES_ARENA-20000000} +export MES_ARENA +MES_MAX_ARENA=${MES_MAX_ARENA-${MES_ARENA}} +export MES_MAX_ARENA +MES_STACK=${MES_STACK-5000000} +export MES_STACK + +. ./config.sh + +if $courageous; then + echo "Applying courage" + set +e +fi + +CFLAGS= +if test $mes_libc = mes; then + CFLAGS="${CFLAGS} +-static +-nostdinc +-nostdlib +-fno-builtin +" +fi + +CPPFLAGS=" +-D HAVE_CONFIG_H=1 +-I ../include +-I ${srcdir}/include +-I ${srcdir}/include/$mes_kernel/$mes_cpu +" + +LIBS= +LDFLAGS= +if test $mes_libc = mes; then + LDFLAGS=" +-nostdlib +" + LIBS=-lc +fi + +export CFLAGS +export CPPFLAGS +export LDFLAGS +#export LIBS + +recheck=${recheck-false} +export recheck + +./pre-inst-env ${SHELL} ${srcdest}build-aux/check-boot.sh +./pre-inst-env ${SHELL} ${srcdest}build-aux/check-mes.sh + +if test $compiler = gcc; then + ( + cd gcc-lib + srcdest=$srcdir/../ + srcdir=../$srcdir + ../pre-inst-env ${SHELL} ${srcdest}build-aux/check-mescc.sh + ) +fi + +( + cd mescc-lib + srcdest=$srcdir/../ + srcdir=../$srcdir + compiler=mescc + mes_lib=mes + CFLAGS=" +-nostdinc +-nostdlib +-fno-builtin +" + LDFLAGS=" +-nostdlib +" + LIBS=-lc + AR="${srcdest}pre-inst-env mesar" + CC="${srcdest}pre-inst-env mescc" + ../pre-inst-env ${SHELL} ${srcdest}build-aux/check-mescc.sh +) diff --git a/sysa/mes-0.22/build-aux/config.make.in b/sysa/mes-0.22/build-aux/config.make.in new file mode 100644 index 0000000..1e250e5 --- /dev/null +++ b/sysa/mes-0.22/build-aux/config.make.in @@ -0,0 +1,82 @@ +# GNU Mes --- Maxwell Equations of Software +# Copyright © 2018 Jan (janneke) Nieuwenhuizen +# +# This file is part of GNU Mes. +# +# GNU Mes is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# GNU Mes is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Mes. If not, see . + +AR:=@AR@ +BASH:=@BASH@ +BLOOD_ELF:=@BLOOD_ELF@ +CC:=@CC@ +CFLAGS:=@CFLAGS@ +CPPFLAGS:=@CPPFLAGS@ +DIFF:=@DIFF@ +DOT:=@DOT@ +GIT:=@GIT@ +GUILD:=@GUILD@ +GUILE:=@GUILE@ +GUILE_EFFECTIVE_VERSION:=@GUILE_EFFECTIVE_VERSION@ +GUILE_LOAD_PATH:=@GUILE_LOAD_PATH@ +GUIX:=@GUIX@ +HELP2MAN:=@HELP2MAN@ +HEX2:=@HEX2@ +LDFLAGS:=@LDFLAGS@ +MAKEINFO:=@MAKEINFO@ +M1:=@M1@ +MES_FOR_BUILD:=@MES_FOR_BUILD@ +NYACC:=@NYACC@ +PACKAGE:=@PACKAGE@ +PACKAGE_NAME:=@PACKAGE_NAME@ +PACKAGE_BUGREPORT:=@PACKAGE_BUGREPORT@ +PERL:=@PERL@ +SCHEME:=@SCHEME@ +SHELL:=@SHELL@ +VERSION:=@VERSION@ +V:=@V@ +colors:=@colors@ + +abs_top_builddir:=@abs_top_builddir@ +abs_top_srcdir:=@abs_top_srcdir@ +arch:=@arch@ +build:=@build@ +host:=@host@ + +bootstrap:=@bootstrap@ +compiler:=@compiler@ +courageous:=@courageous@ +mes_system:=@mes_system@ +mes_cpu:=@mes_cpu@ +mes_bits:=@mes_bits@ +mes_libc:=@mes_libc@ +mes_kernel:=@mes_kernel@ + +prefix:=@prefix@ + +bindir:=@bindir@ +datadir:=@datadir@ +docdir:=@docdir@ +guile_site_ccache_dir:=@guile_site_ccache_dir@ +guile_site_dir:=@guile_site_dir@ +includedir:=@includedir@ +infodir:=@infodir@ +libdir:=@libdir@ +mandir:=@mandir@ +moduledir:=@moduledir@ +with_glibc_p:=@with_glibc_p@ +program_prefix:=@program_prefix@ +srcdest:=@srcdest@ +srcdir:=@srcdir@ +sysconfdir:=@sysconfdir@ +top_builddir:=@top_builddir@ diff --git a/sysa/mes-0.22/build-aux/config.sh.in b/sysa/mes-0.22/build-aux/config.sh.in new file mode 100644 index 0000000..4e2953e --- /dev/null +++ b/sysa/mes-0.22/build-aux/config.sh.in @@ -0,0 +1,104 @@ +# GNU Mes --- Maxwell Equations of Software +# Copyright © 2018 Jan (janneke) Nieuwenhuizen +# +# This file is part of GNU Mes. +# +# GNU Mes is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# GNU Mes is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Mes. If not, see . + +config_sh=1 +AR=${AR-"@AR@"} +BASH="@BASH@" +BLOOD_ELF="@BLOOD_ELF@" +CC=${CC-"@CC@"} +CFLAGS=${CFLAGS-"@CFLAGS@"} +CPPFLAGS=${CPPFLAGS-"@CPPFLAGS@"} +DIFF=${DIFF-@DIFF@} +DOT="@DOT@" +GIT="@GIT@" +GUILD="@GUILD@" +GUILE="@GUILE@" +GUILE_EFFECTIVE_VERSION="@GUILE_EFFECTIVE_VERSION@" +GUILE_LOAD_PATH="@GUILE_LOAD_PATH@" +GUIX="@GUIX@" +HELP2MAN="@HELP2MAN@" +HEX2="@HEX2@" +LDFLAGS=${LDFLAGS-"@LDFLAGS@"} +MAKEINFO="@MAKEINFO@" +M1="@M1@" +MES_FOR_BUILD="@MES_FOR_BUILD@" +NYACC="@NYACC@" +PACKAGE="@PACKAGE@" +PACKAGE_NAME="@PACKAGE_NAME@" +PACKAGE_BUGREPORT="@PACKAGE_BUGREPORT@" +PERL="@PERL@" +#SCHEME="@SCHEME@" +SHELL="@SHELL@" +TINYCC_PREFIX="@TINYCC_PREFIX@" +VERSION="@VERSION@" +V=${V-"@V@"} +colors=${colors-@colors@} + +abs_top_builddir="@abs_top_builddir@" +abs_top_srcdir="@abs_top_srcdir@" +arch="@arch@" +build="@build@" +host="@host@" +numbered_arch=${numbered_arch-"@numbered_arch@"} + +bootstrap=${bootstrap-@bootstrap@} +compiler=${compiler-@compiler@} +courageous=${courageous-@courageous@} +mes_system=@mes_system@ +mes_cpu=@mes_cpu@ +mes_bits=@mes_bits@ +mes_libc=@mes_libc@ +mes_kernel=@mes_kernel@ + +prefix="@prefix@" + +bindir="@bindir@" +datadir="@datadir@" +pkgdatadir="@pkgdatadir@" +docdir="@docdir@" +guile_site_ccache_dir="@guile_site_ccache_dir@" +guile_site_dir="@guile_site_dir@" +includedir="@includedir@" +infodir="@infodir@" +libdir="@libdir@" +mandir="@mandir@" +moduledir="@moduledir@" +with_glibc_p="@with_glibc_p@" +program_prefix="@program_prefix@" +srcdest=${srcdest-"@srcdest@"} +srcdir=${srcdir-"@srcdir@"} +sysconfdir="@sysconfdir@" +top_builddir="@top_builddir@" + +MES_PREFIX=${MES_PREFIX-$abs_top_srcdir} + +export PACKAGE +export PACKAGE_NAME +export PACKAGE_BUGREPORT +export AR +export CC +export DIFF +export SHELL +export V +export colors +export compiler +export courageous +export srcdest +export srcdir +export GUILE_AUTO_COMPILE +export MES_PREFIX diff --git a/sysa/mes-0.22/build-aux/configure-lib.sh b/sysa/mes-0.22/build-aux/configure-lib.sh new file mode 100644 index 0000000..ed0e23b --- /dev/null +++ b/sysa/mes-0.22/build-aux/configure-lib.sh @@ -0,0 +1,422 @@ +#! /bin/sh + +# GNU Mes --- Maxwell Equations of Software +# Copyright © 2019 Jan (janneke) Nieuwenhuizen +# +# This file is part of GNU Mes. +# +# GNU Mes is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# GNU Mes is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Mes. If not, see . + +set -e +set -u + +V=${V-1} + +if [ "$V" = 2 ]; then + set -x +fi + +. ./config.sh + +libc_mini_shared_SOURCES=" +lib/mes/eputs.c +lib/mes/oputs.c +" + +if test $mes_libc = mes; then + libc_mini_shared_SOURCES="$libc_mini_shared_SOURCES +lib/$mes_kernel/$mes_cpu-mes-$compiler/mini.c +lib/stdlib/exit.c +lib/stdlib/puts.c +lib/string/strlen.c +" + + if test $mes_kernel = gnu; then + libc_mini_shared_SOURCES="$libc_mini_shared_SOURCES +lib/gnu/_exit.c +lib/gnu/exec-startup-get-data.c +lib/gnu/fd-get.c +lib/gnu/fd-write.c +lib/gnu/io-write.c +lib/gnu/_write.c +lib/gnu/hurd-start.c +lib/gnu/proc-mark-exit.c +lib/gnu/syscall.c +lib/gnu/task-get-special-port.c +lib/gnu/task-terminate.c +lib/gnu/vm-statistics.c +lib/mach/mach-init.c +lib/mach/mach_host_self.S +lib/mach/mach_msg_trap.S +lib/mach/mach_reply_port.S +lib/mach/mach_task_self.S +lib/mach/mach_thread_self.S +lib/mach/msg.c +lib/string/argz-extract.c +" + fi +fi + +libc_mini_SOURCES="$libc_mini_shared_SOURCES" + +if test $mes_libc = mes; then + libc_mini_SOURCES="$libc_mini_SOURCES +lib/mes/mini-write.c +" +fi + +libmes_SOURCES=" +$libc_mini_shared_SOURCES +lib/ctype/isnumber.c +lib/mes/abtol.c +lib/mes/div.c +lib/mes/eputc.c +lib/mes/fdgetc.c +lib/mes/fdputc.c +lib/mes/fdputs.c +lib/mes/fdungetc.c +lib/mes/itoa.c +lib/mes/ltoa.c +lib/mes/ltoab.c +lib/mes/mes_open.c +lib/mes/ntoab.c +lib/mes/oputc.c +lib/mes/ultoa.c +lib/mes/utoa.c +" + +if test $mes_libc = mes; then + libmes_SOURCES="$libmes_SOURCES +lib/ctype/isdigit.c +lib/ctype/isspace.c +lib/ctype/isxdigit.c +lib/posix/write.c +lib/stdlib/atoi.c +" + if test $mes_kernel = gnu; then + libmes_SOURCES="$libmes_SOURCES +lib/stub/lseek.c +" + fi + if test $mes_kernel = linux; then + libmes_SOURCES="$libmes_SOURCES +lib/linux/lseek.c +" + fi +else + libmes_SOURCES="$libmes_SOURCES +lib/mes/abtod.c +lib/mes/dtoab.c +" +fi + +libc_SOURCES=" +$libmes_SOURCES +lib/mes/__assert_fail.c +lib/mes/__buffered_read.c +lib/mes/__mes_debug.c +lib/posix/execv.c +lib/posix/getcwd.c +lib/posix/getenv.c +lib/posix/isatty.c +lib/posix/open.c +lib/posix/buffered-read.c +lib/posix/setenv.c +lib/posix/wait.c +lib/stdio/fgetc.c +lib/stdio/fputc.c +lib/stdio/fputs.c +lib/stdio/getc.c +lib/stdio/getchar.c +lib/stdio/putc.c +lib/stdio/putchar.c +lib/stdio/ungetc.c +lib/stdlib/free.c +lib/stdlib/malloc.c +lib/stdlib/realloc.c +lib/string/memchr.c +lib/string/memcmp.c +lib/string/memcpy.c +lib/string/memmove.c +lib/string/memset.c +lib/string/strcmp.c +lib/string/strcpy.c +lib/string/strncmp.c +" + +if test $mes_kernel = gnu; then + libc_SOURCES="$libc_SOURCES +lib/gnu/_open3.c +lib/gnu/_read.c +lib/gnu/dir-lookup.c +lib/gnu/fd-read.c +lib/gnu/io-read.c +lib/gnu/malloc.c +lib/gnu/vm-allocate.c +lib/stub/access.c +lib/stub/brk.c +lib/stub/chmod.c +lib/stub/clock_gettime.c +lib/stub/dup2.c +lib/stub/dup.c +lib/stub/execve.c +lib/stub/fork.c +lib/stub/_getcwd.c +lib/stub/gettimeofday.c +lib/stub/ioctl.c +lib/stub/time.c +lib/stub/unlink.c +lib/stub/waitpid.c +" +fi + +if test $mes_kernel = linux; then + libc_SOURCES="$libc_SOURCES +lib/linux/access.c +lib/linux/brk.c +lib/linux/chmod.c +lib/linux/clock_gettime.c +lib/linux/dup.c +lib/linux/dup2.c +lib/linux/execve.c +lib/linux/fork.c +lib/linux/fsync.c +lib/linux/_getcwd.c +lib/linux/gettimeofday.c +lib/linux/ioctl.c +lib/linux/_open3.c +lib/linux/_read.c +lib/linux/time.c +lib/linux/unlink.c +lib/linux/waitpid.c +lib/linux/$mes_cpu-mes-$compiler/syscall.c +" +fi + +libtcc1_SOURCES=" +lib/libtcc1.c +" + +libc_tcc_SOURCES=" +$libc_SOURCES +lib/ctype/islower.c +lib/ctype/isupper.c +lib/ctype/tolower.c +lib/ctype/toupper.c +lib/mes/abtod.c +lib/mes/dtoab.c +lib/mes/search-path.c +lib/posix/execvp.c +lib/stdio/fclose.c +lib/stdio/fdopen.c +lib/stdio/ferror.c +lib/stdio/fflush.c +lib/stdio/fopen.c +lib/stdio/fprintf.c +lib/stdio/fread.c +lib/stdio/fseek.c +lib/stdio/ftell.c +lib/stdio/fwrite.c +lib/stdio/printf.c +lib/stdio/remove.c +lib/stdio/snprintf.c +lib/stdio/sprintf.c +lib/stdio/sscanf.c +lib/stdio/vfprintf.c +lib/stdio/vprintf.c +lib/stdio/vsnprintf.c +lib/stdio/vsprintf.c +lib/stdio/vsscanf.c +lib/stdlib/calloc.c +lib/stdlib/qsort.c +lib/stdlib/strtod.c +lib/stdlib/strtof.c +lib/stdlib/strtol.c +lib/stdlib/strtold.c +lib/stdlib/strtoll.c +lib/stdlib/strtoul.c +lib/stdlib/strtoull.c +lib/string/memmem.c +lib/string/strcat.c +lib/string/strchr.c +lib/string/strlwr.c +lib/string/strncpy.c +lib/string/strrchr.c +lib/string/strstr.c +lib/string/strupr.c +lib/stub/sigaction.c +lib/stub/ldexp.c +lib/stub/mprotect.c +lib/stub/localtime.c +lib/stub/sigemptyset.c +lib/$mes_cpu-mes-$compiler/setjmp.c +" + +if test $mes_kernel = linux; then + libc_tcc_SOURCES="$libc_tcc_SOURCES +lib/linux/close.c +lib/linux/rmdir.c +lib/linux/stat.c +" +fi + +if test $mes_kernel = gnu; then + libc_tcc_SOURCES="$libc_tcc_SOURCES +lib/stub/close.c +lib/stub/rmdir.c +lib/stub/stat.c +" +fi + +libc_gnu_SOURCES=" +$libc_tcc_SOURCES +lib/ctype/isalnum.c +lib/ctype/isalpha.c +lib/ctype/isascii.c +lib/ctype/iscntrl.c +lib/ctype/isgraph.c +lib/ctype/isprint.c +lib/ctype/ispunct.c +lib/dirent/__getdirentries.c +lib/dirent/closedir.c +lib/dirent/opendir.c +lib/dirent/readdir.c +lib/math/ceil.c +lib/math/fabs.c +lib/math/floor.c +lib/mes/fdgets.c +lib/posix/alarm.c +lib/posix/execl.c +lib/posix/execlp.c +lib/posix/mktemp.c +lib/posix/raise.c +lib/posix/sbrk.c +lib/posix/sleep.c +lib/posix/unsetenv.c +lib/stdio/clearerr.c +lib/stdio/feof.c +lib/stdio/fgets.c +lib/stdio/fileno.c +lib/stdio/freopen.c +lib/stdio/fscanf.c +lib/stdio/perror.c +lib/stdio/vfscanf.c +lib/stdlib/__exit.c +lib/stdlib/abort.c +lib/stdlib/abs.c +lib/stdlib/alloca.c +lib/stdlib/atexit.c +lib/stdlib/atof.c +lib/stdlib/atol.c +lib/stdlib/mbstowcs.c +lib/string/bcmp.c +lib/string/bcopy.c +lib/string/bzero.c +lib/string/index.c +lib/string/rindex.c +lib/string/strcspn.c +lib/string/strdup.c +lib/string/strerror.c +lib/string/strncat.c +lib/string/strpbrk.c +lib/string/strspn.c +lib/stub/__cleanup.c +lib/stub/atan2.c +lib/stub/bsearch.c +lib/stub/chown.c +lib/stub/cos.c +lib/stub/ctime.c +lib/stub/exp.c +lib/stub/fpurge.c +lib/stub/freadahead.c +lib/stub/frexp.c +lib/stub/getgrgid.c +lib/stub/getgrnam.c +lib/stub/getlogin.c +lib/stub/getpgid.c +lib/stub/getpgrp.c +lib/stub/getpwnam.c +lib/stub/getpwuid.c +lib/stub/gmtime.c +lib/stub/log.c +lib/stub/mktime.c +lib/stub/modf.c +lib/stub/pclose.c +lib/stub/popen.c +lib/stub/pow.c +lib/stub/rand.c +lib/stub/rewind.c +lib/stub/setbuf.c +lib/stub/setgrent.c +lib/stub/setlocale.c +lib/stub/setvbuf.c +lib/stub/sigaddset.c +lib/stub/sigblock.c +lib/stub/sigdelset.c +lib/stub/sigsetmask.c +lib/stub/sin.c +lib/stub/sqrt.c +lib/stub/strftime.c +lib/stub/sys_siglist.c +lib/stub/system.c +lib/stub/times.c +lib/stub/ttyname.c +lib/stub/umask.c +lib/stub/utime.c +" + +if test $mes_kernel = linux; then + libc_gnu_SOURCES="$libc_gnu_SOURCES +lib/linux/chdir.c +lib/linux/fcntl.c +lib/linux/fstat.c +lib/linux/getdents.c +lib/linux/getegid.c +lib/linux/geteuid.c +lib/linux/getgid.c +lib/linux/getpid.c +lib/linux/getppid.c +lib/linux/getrusage.c +lib/linux/getuid.c +lib/linux/kill.c +lib/linux/link.c +lib/linux/lstat.c +lib/linux/mkdir.c +lib/linux/mknod.c +lib/linux/nanosleep.c +lib/linux/pipe.c +lib/linux/readlink.c +lib/linux/rename.c +lib/linux/setgid.c +lib/linux/settimer.c +lib/linux/setuid.c +lib/linux/signal.c +lib/linux/sigprogmask.c +lib/linux/symlink.c +" +fi + +mes_SOURCES=" +src/gc.c +src/hash.c +src/lib.c +src/math.c +src/mes.c +src/module.c +src/posix.c +src/reader.c +src/string.c +src/struct.c +src/vector.c +" diff --git a/sysa/mes-0.22/build-aux/export.make b/sysa/mes-0.22/build-aux/export.make new file mode 100644 index 0000000..d8ca89e --- /dev/null +++ b/sysa/mes-0.22/build-aux/export.make @@ -0,0 +1,160 @@ +# GNU Mes --- Maxwell Equations of Software +# Copyright © 2018 Jan (janneke) Nieuwenhuizen +# +# This file is part of GNU Mes. +# +# GNU Mes is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# GNU Mes is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Mes. If not, see . + +export PACKAGE +export PACKAGE_NAME +export PACKAGE_BUGREPORT +export VERSION + +export abs_top_builddir +export abs_top_srcdir +export top_builddir +export config.make +export srcdest +export srcdir + +export prefix + +export datadir +export docdir + +export bindir +export guile_site_ccache_dir +export guile_site_dir +export infodir +export libdir +export mandir +export moduledir +export sysconfdir + +export bootstrap +export compiler +export courageous +export mes_system +export mes_cpu +export mes_bits +export mes_libc +export mes_kernel + +ifdef V +export V +endif + +ifdef DESTDIR +export DESTDIR +endif + +ifdef CC +export CC +endif + +ifdef BLOOD_ELF +export BLOOD_ELF +endif + +ifdef DOT +export DOT +endif + +ifdef M1 +export M1 +endif + +ifdef MES +export MES +endif + +ifdef MES_FOR_BUILD +export MES_FOR_BUILD +endif + +ifdef MESCC +export MESCC +endif + +ifdef HEX2 +export HEX2 +endif + +ifdef HELP2MAN +export HELP2MAN +endif + +ifdef GUILE +export GUILE +endif + +ifdef GUILD +export GUILD +endif + +ifdef GUIX +export GUIX +endif + +ifdef PERL +export PERL +endif + +ifdef SCHEME +export SCHEME +endif + +ifdef SHELL +export SHELL +endif + +ifdef GUILE_LOAD_PATH +export GUILE_LOAD_PATH +endif + +ifdef GUILE_LOAD_COMPILED_PATH +export GUILE_LOAD_COMPILED_PATH +endif + +ifdef AM_CFLAGS +export AM_CFLAGS +endif + +ifdef AM_CPPFLAGS +export AM_CPPFLAGS +endif + +ifdef AM_LDFLAGS +export AM_LDFLAGS +endif + +ifdef CFLAGS +export CFLAGS +endif + +ifdef CPPFLAGS +export CPPFLAGS +endif + +ifdef LDFLAGS +export LDFLAGS +endif + +ifdef HEX2FLAGS +export HEX2FLAGS +endif + +ifdef M1FLAGS +export M1FLAGS +endif diff --git a/sysa/mes-0.22/build-aux/gendocs.sh b/sysa/mes-0.22/build-aux/gendocs.sh new file mode 100755 index 0000000..91c058d --- /dev/null +++ b/sysa/mes-0.22/build-aux/gendocs.sh @@ -0,0 +1,510 @@ +#!/bin/sh -e +# gendocs.sh -- generate a GNU manual in many formats. This script is +# mentioned in maintain.texi. See the help message below for usage details. + +scriptversion=2018-03-06.19 + +# Copyright 2003-2018 Free Software Foundation, Inc. +# +# 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 3 of the License, 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, see . +# +# Original author: Mohit Agarwal. +# Send bug reports and any other correspondence to bug-gnulib@gnu.org. +# +# The latest version of this script, and the companion template, is +# available from the Gnulib repository: +# +# https://git.savannah.gnu.org/cgit/gnulib.git/tree/build-aux/gendocs.sh +# https://git.savannah.gnu.org/cgit/gnulib.git/tree/doc/gendocs_template + +# TODO: +# - image importing was only implemented for HTML generated by +# makeinfo. But it should be simple enough to adjust. +# - images are not imported in the source tarball. All the needed +# formats (PDF, PNG, etc.) should be included. + +prog=`basename "$0"` +srcdir=`pwd` + +scripturl="https://git.savannah.gnu.org/cgit/gnulib.git/plain/build-aux/gendocs.sh" +templateurl="https://git.savannah.gnu.org/cgit/gnulib.git/plain/doc/gendocs_template" + +: ${SETLANG="env LANG= LC_MESSAGES= LC_ALL= LANGUAGE="} +: ${MAKEINFO="makeinfo"} +: ${TEXI2DVI="texi2dvi"} +: ${DOCBOOK2HTML="docbook2html"} +: ${DOCBOOK2PDF="docbook2pdf"} +: ${DOCBOOK2TXT="docbook2txt"} +: ${GENDOCS_TEMPLATE_DIR="."} +: ${PERL='perl'} +: ${TEXI2HTML="texi2html"} +unset CDPATH +unset use_texi2html + +MANUAL_TITLE= +PACKAGE= +EMAIL=webmasters@gnu.org # please override with --email +commonarg= # passed to all makeinfo/texi2html invcations. +dirargs= # passed to all tools (-I dir). +dirs= # -I directories. +htmlarg="--css-ref=/software/gnulib/manual.css -c TOP_NODE_UP_URL=/manual" +default_htmlarg=true +infoarg=--no-split +generate_ascii=true +generate_html=true +generate_info=true +generate_tex=true +outdir=manual +source_extra= +split=node +srcfile= +texarg="-t @finalout" + +version="gendocs.sh $scriptversion + +Copyright 2018 Free Software Foundation, Inc. +There is NO warranty. You may redistribute this software +under the terms of the GNU General Public License. +For more information about these matters, see the files named COPYING." + +usage="Usage: $prog [OPTION]... PACKAGE MANUAL-TITLE + +Generate output in various formats from PACKAGE.texinfo (or .texi or +.txi) source. See the GNU Maintainers document for a more extensive +discussion: + https://www.gnu.org/prep/maintain_toc.html + +Options: + --email ADR use ADR as contact in generated web pages; always give this. + + -s SRCFILE read Texinfo from SRCFILE, instead of PACKAGE.{texinfo|texi|txi} + -o OUTDIR write files into OUTDIR, instead of manual/. + -I DIR append DIR to the Texinfo search path. + --common ARG pass ARG in all invocations. + --html ARG pass ARG to makeinfo or texi2html for HTML targets, + instead of '$htmlarg'. + --info ARG pass ARG to makeinfo for Info, instead of --no-split. + --no-ascii skip generating the plain text output. + --no-html skip generating the html output. + --no-info skip generating the info output. + --no-tex skip generating the dvi and pdf output. + --source ARG include ARG in tar archive of sources. + --split HOW make split HTML by node, section, chapter; default node. + --tex ARG pass ARG to texi2dvi for DVI and PDF, instead of -t @finalout. + + --texi2html use texi2html to make HTML target, with all split versions. + --docbook convert through DocBook too (xml, txt, html, pdf). + + --help display this help and exit successfully. + --version display version information and exit successfully. + +Simple example: $prog --email bug-gnu-emacs@gnu.org emacs \"GNU Emacs Manual\" + +Typical sequence: + cd PACKAGESOURCE/doc + wget \"$scripturl\" + wget \"$templateurl\" + $prog --email BUGLIST MANUAL \"GNU MANUAL - One-line description\" + +Output will be in a new subdirectory \"manual\" (by default; +use -o OUTDIR to override). Move all the new files into your web CVS +tree, as explained in the Web Pages node of maintain.texi. + +Please use the --email ADDRESS option so your own bug-reporting +address will be used in the generated HTML pages. + +MANUAL-TITLE is included as part of the HTML of the overall +manual/index.html file. It should include the name of the package being +documented. manual/index.html is created by substitution from the file +$GENDOCS_TEMPLATE_DIR/gendocs_template. (Feel free to modify the +generic template for your own purposes.) + +If you have several manuals, you'll need to run this script several +times with different MANUAL values, specifying a different output +directory with -o each time. Then write (by hand) an overall index.html +with links to them all. + +If a manual's Texinfo sources are spread across several directories, +first copy or symlink all Texinfo sources into a single directory. +(Part of the script's work is to make a tar.gz of the sources.) + +As implied above, by default monolithic Info files are generated. +If you want split Info, or other Info options, use --info to override. + +You can set the environment variables MAKEINFO, TEXI2DVI, TEXI2HTML, +and PERL to control the programs that get executed, and +GENDOCS_TEMPLATE_DIR to control where the gendocs_template file is +looked for. With --docbook, the environment variables DOCBOOK2HTML, +DOCBOOK2PDF, and DOCBOOK2TXT are also consulted. + +By default, makeinfo and texi2dvi are run in the default (English) +locale, since that's the language of most Texinfo manuals. If you +happen to have a non-English manual and non-English web site, see the +SETLANG setting in the source. + +Email bug reports or enhancement requests to bug-gnulib@gnu.org. +" + +while test $# -gt 0; do + case $1 in + -s) shift; srcfile=$1;; + -o) shift; outdir=$1;; + -I) shift; dirargs="$dirargs -I '$1'"; dirs="$dirs $1";; + --common) shift; commonarg=$1;; + --docbook) docbook=yes;; + --email) shift; EMAIL=$1;; + --html) shift; default_htmlarg=false; htmlarg=$1;; + --info) shift; infoarg=$1;; + --no-ascii) generate_ascii=false;; + --no-html) generate_ascii=false;; + --no-info) generate_info=false;; + --no-tex) generate_tex=false;; + --source) shift; source_extra=$1;; + --split) shift; split=$1;; + --tex) shift; texarg=$1;; + --texi2html) use_texi2html=1;; + + --help) echo "$usage"; exit 0;; + --version) echo "$version"; exit 0;; + -*) + echo "$0: Unknown option \`$1'." >&2 + echo "$0: Try \`--help' for more information." >&2 + exit 1;; + *) + if test -z "$PACKAGE"; then + PACKAGE=$1 + elif test -z "$MANUAL_TITLE"; then + MANUAL_TITLE=$1 + else + echo "$0: extra non-option argument \`$1'." >&2 + exit 1 + fi;; + esac + shift +done + +# makeinfo uses the dirargs, but texi2dvi doesn't. +commonarg=" $dirargs $commonarg" + +# For most of the following, the base name is just $PACKAGE +base=$PACKAGE + +if $default_htmlarg && test -n "$use_texi2html"; then + # The legacy texi2html doesn't support TOP_NODE_UP_URL + htmlarg="--css-ref=/software/gnulib/manual.css" +fi + +if test -n "$srcfile"; then + # but here, we use the basename of $srcfile + base=`basename "$srcfile"` + case $base in + *.txi|*.texi|*.texinfo) base=`echo "$base"|sed 's/\.[texinfo]*$//'`;; + esac + PACKAGE=$base +elif test -s "$srcdir/$PACKAGE.texinfo"; then + srcfile=$srcdir/$PACKAGE.texinfo +elif test -s "$srcdir/$PACKAGE.texi"; then + srcfile=$srcdir/$PACKAGE.texi +elif test -s "$srcdir/$PACKAGE.txi"; then + srcfile=$srcdir/$PACKAGE.txi +else + echo "$0: cannot find .texinfo or .texi or .txi for $PACKAGE in $srcdir." >&2 + exit 1 +fi + +if test ! -r $GENDOCS_TEMPLATE_DIR/gendocs_template; then + echo "$0: cannot read $GENDOCS_TEMPLATE_DIR/gendocs_template." >&2 + echo "$0: it is available from $templateurl." >&2 + exit 1 +fi + +# Function to return size of $1 in something resembling kilobytes. +calcsize() +{ + size=`ls -ksl $1 | awk '{print $1}'` + echo $size +} + +# copy_images OUTDIR HTML-FILE... +# ------------------------------- +# Copy all the images needed by the HTML-FILEs into OUTDIR. +# Look for them in . and the -I directories; this is simpler than what +# makeinfo supports with -I, but hopefully it will suffice. +copy_images() +{ + local odir + odir=$1 + shift + $PERL -n -e " +BEGIN { + \$me = '$prog'; + \$odir = '$odir'; + @dirs = qw(. $dirs); +} +" -e ' +/<img src="(.*?)"/g && ++$need{$1}; + +END { + #print "$me: @{[keys %need]}\n"; # for debugging, show images found. + FILE: for my $f (keys %need) { + for my $d (@dirs) { + if (-f "$d/$f") { + use File::Basename; + my $dest = dirname ("$odir/$f"); + # + use File::Path; + -d $dest || mkpath ($dest) + || die "$me: cannot mkdir $dest: $!\n"; + # + use File::Copy; + copy ("$d/$f", $dest) + || die "$me: cannot copy $d/$f to $dest: $!\n"; + next FILE; + } + } + die "$me: $ARGV: cannot find image $f\n"; + } +} +' -- "$@" || exit 1 +} + +case $outdir in + /*) abs_outdir=$outdir;; + *) abs_outdir=$srcdir/$outdir;; +esac + +echo "Making output for $srcfile" +echo " in `pwd`" +mkdir -p "$outdir/" + +# +if $generate_info; then + cmd="$SETLANG $MAKEINFO -o $PACKAGE.info $commonarg $infoarg \"$srcfile\"" + echo "Generating info... ($cmd)" + rm -f $PACKAGE.info* # get rid of any strays + eval "$cmd" + tar czf "$outdir/$PACKAGE.info.tar.gz" $PACKAGE.info* + ls -l "$outdir/$PACKAGE.info.tar.gz" + info_tgz_size=`calcsize "$outdir/$PACKAGE.info.tar.gz"` + # do not mv the info files, there's no point in having them available + # separately on the web. +fi # end info + +# +if $generate_tex; then + cmd="$SETLANG $TEXI2DVI $dirargs $texarg \"$srcfile\"" + printf "\nGenerating dvi... ($cmd)\n" + eval "$cmd" + # compress/finish dvi: + gzip -f -9 $PACKAGE.dvi + dvi_gz_size=`calcsize $PACKAGE.dvi.gz` + mv $PACKAGE.dvi.gz "$outdir/" + ls -l "$outdir/$PACKAGE.dvi.gz" + + cmd="$SETLANG $TEXI2DVI --pdf $dirargs $texarg \"$srcfile\"" + printf "\nGenerating pdf... ($cmd)\n" + eval "$cmd" + pdf_size=`calcsize $PACKAGE.pdf` + mv $PACKAGE.pdf "$outdir/" + ls -l "$outdir/$PACKAGE.pdf" +fi # end tex (dvi + pdf) + +# +if $generate_ascii; then + opt="-o $PACKAGE.txt --no-split --no-headers $commonarg" + cmd="$SETLANG $MAKEINFO $opt \"$srcfile\"" + printf "\nGenerating ascii... ($cmd)\n" + eval "$cmd" + ascii_size=`calcsize $PACKAGE.txt` + gzip -f -9 -c $PACKAGE.txt >"$outdir/$PACKAGE.txt.gz" + ascii_gz_size=`calcsize "$outdir/$PACKAGE.txt.gz"` + mv $PACKAGE.txt "$outdir/" + ls -l "$outdir/$PACKAGE.txt" "$outdir/$PACKAGE.txt.gz" +fi + +# + +if $generate_html; then +# Split HTML at level $1. Used for texi2html. +html_split() +{ + opt="--split=$1 --node-files $commonarg $htmlarg" + cmd="$SETLANG $TEXI2HTML --output $PACKAGE.html $opt \"$srcfile\"" + printf "\nGenerating html by $1... ($cmd)\n" + eval "$cmd" + split_html_dir=$PACKAGE.html + ( + cd ${split_html_dir} || exit 1 + ln -sf ${PACKAGE}.html index.html + tar -czf "$abs_outdir/${PACKAGE}.html_$1.tar.gz" -- *.html + ) + eval html_$1_tgz_size=`calcsize "$outdir/${PACKAGE}.html_$1.tar.gz"` + rm -f "$outdir"/html_$1/*.html + mkdir -p "$outdir/html_$1/" + mv ${split_html_dir}/*.html "$outdir/html_$1/" + rmdir ${split_html_dir} +} + +if test -z "$use_texi2html"; then + opt="--no-split --html -o $PACKAGE.html $commonarg $htmlarg" + cmd="$SETLANG $MAKEINFO $opt \"$srcfile\"" + printf "\nGenerating monolithic html... ($cmd)\n" + rm -rf $PACKAGE.html # in case a directory is left over + eval "$cmd" + html_mono_size=`calcsize $PACKAGE.html` + gzip -f -9 -c $PACKAGE.html >"$outdir/$PACKAGE.html.gz" + html_mono_gz_size=`calcsize "$outdir/$PACKAGE.html.gz"` + copy_images "$outdir/" $PACKAGE.html + mv $PACKAGE.html "$outdir/" + ls -l "$outdir/$PACKAGE.html" "$outdir/$PACKAGE.html.gz" + + # Before Texinfo 5.0, makeinfo did not accept a --split=HOW option, + # it just always split by node. So if we're splitting by node anyway, + # leave it out. + if test "x$split" = xnode; then + split_arg= + else + split_arg=--split=$split + fi + # + opt="--html -o $PACKAGE.html $split_arg $commonarg $htmlarg" + cmd="$SETLANG $MAKEINFO $opt \"$srcfile\"" + printf "\nGenerating html by $split... ($cmd)\n" + eval "$cmd" + split_html_dir=$PACKAGE.html + copy_images $split_html_dir/ $split_html_dir/*.html + ( + cd $split_html_dir || exit 1 + tar -czf "$abs_outdir/$PACKAGE.html_$split.tar.gz" -- * + ) + eval \ + html_${split}_tgz_size=`calcsize "$outdir/$PACKAGE.html_$split.tar.gz"` + rm -rf "$outdir/html_$split/" + mv $split_html_dir "$outdir/html_$split/" + du -s "$outdir/html_$split/" + ls -l "$outdir/$PACKAGE.html_$split.tar.gz" + +else # use texi2html: + opt="--output $PACKAGE.html $commonarg $htmlarg" + cmd="$SETLANG $TEXI2HTML $opt \"$srcfile\"" + printf "\nGenerating monolithic html with texi2html... ($cmd)\n" + rm -rf $PACKAGE.html # in case a directory is left over + eval "$cmd" + html_mono_size=`calcsize $PACKAGE.html` + gzip -f -9 -c $PACKAGE.html >"$outdir/$PACKAGE.html.gz" + html_mono_gz_size=`calcsize "$outdir/$PACKAGE.html.gz"` + mv $PACKAGE.html "$outdir/" + + html_split node + html_split chapter + html_split section +fi +fi # end html + +# +printf "\nMaking .tar.gz for sources...\n" +d=`dirname $srcfile` +( + cd "$d" + srcfiles=`ls -d *.texinfo *.texi *.txi *.eps $source_extra 2>/dev/null` || true + tar czfh "$abs_outdir/$PACKAGE.texi.tar.gz" $srcfiles + ls -l "$abs_outdir/$PACKAGE.texi.tar.gz" +) +texi_tgz_size=`calcsize "$outdir/$PACKAGE.texi.tar.gz"` + +# +# Do everything again through docbook. +if test -n "$docbook"; then + opt="-o - --docbook $commonarg" + cmd="$SETLANG $MAKEINFO $opt \"$srcfile\" >${srcdir}/$PACKAGE-db.xml" + printf "\nGenerating docbook XML... ($cmd)\n" + eval "$cmd" + docbook_xml_size=`calcsize $PACKAGE-db.xml` + gzip -f -9 -c $PACKAGE-db.xml >"$outdir/$PACKAGE-db.xml.gz" + docbook_xml_gz_size=`calcsize "$outdir/$PACKAGE-db.xml.gz"` + mv $PACKAGE-db.xml "$outdir/" + + split_html_db_dir=html_node_db + opt="$commonarg -o $split_html_db_dir" + cmd="$DOCBOOK2HTML $opt \"${outdir}/$PACKAGE-db.xml\"" + printf "\nGenerating docbook HTML... ($cmd)\n" + eval "$cmd" + ( + cd ${split_html_db_dir} || exit 1 + tar -czf "$abs_outdir/${PACKAGE}.html_node_db.tar.gz" -- *.html + ) + html_node_db_tgz_size=`calcsize "$outdir/${PACKAGE}.html_node_db.tar.gz"` + rm -f "$outdir"/html_node_db/*.html + mkdir -p "$outdir/html_node_db" + mv ${split_html_db_dir}/*.html "$outdir/html_node_db/" + rmdir ${split_html_db_dir} + + cmd="$DOCBOOK2TXT \"${outdir}/$PACKAGE-db.xml\"" + printf "\nGenerating docbook ASCII... ($cmd)\n" + eval "$cmd" + docbook_ascii_size=`calcsize $PACKAGE-db.txt` + mv $PACKAGE-db.txt "$outdir/" + + cmd="$DOCBOOK2PDF \"${outdir}/$PACKAGE-db.xml\"" + printf "\nGenerating docbook PDF... ($cmd)\n" + eval "$cmd" + docbook_pdf_size=`calcsize $PACKAGE-db.pdf` + mv $PACKAGE-db.pdf "$outdir/" +fi + +# +printf "\nMaking index.html for $PACKAGE...\n" +if test -z "$use_texi2html"; then + CONDS="/%%IF *HTML_SECTION%%/,/%%ENDIF *HTML_SECTION%%/d;\ + /%%IF *HTML_CHAPTER%%/,/%%ENDIF *HTML_CHAPTER%%/d" +else + # should take account of --split here. + CONDS="/%%ENDIF.*%%/d;/%%IF *HTML_SECTION%%/d;/%%IF *HTML_CHAPTER%%/d" +fi + +curdate=`$SETLANG date '+%B %d, %Y'` +sed \ + -e "s!%%TITLE%%!$MANUAL_TITLE!g" \ + -e "s!%%EMAIL%%!$EMAIL!g" \ + -e "s!%%PACKAGE%%!$PACKAGE!g" \ + -e "s!%%DATE%%!$curdate!g" \ + -e "s!%%HTML_MONO_SIZE%%!$html_mono_size!g" \ + -e "s!%%HTML_MONO_GZ_SIZE%%!$html_mono_gz_size!g" \ + -e "s!%%HTML_NODE_TGZ_SIZE%%!$html_node_tgz_size!g" \ + -e "s!%%HTML_SECTION_TGZ_SIZE%%!$html_section_tgz_size!g" \ + -e "s!%%HTML_CHAPTER_TGZ_SIZE%%!$html_chapter_tgz_size!g" \ + -e "s!%%INFO_TGZ_SIZE%%!$info_tgz_size!g" \ + -e "s!%%DVI_GZ_SIZE%%!$dvi_gz_size!g" \ + -e "s!%%PDF_SIZE%%!$pdf_size!g" \ + -e "s!%%ASCII_SIZE%%!$ascii_size!g" \ + -e "s!%%ASCII_GZ_SIZE%%!$ascii_gz_size!g" \ + -e "s!%%TEXI_TGZ_SIZE%%!$texi_tgz_size!g" \ + -e "s!%%DOCBOOK_HTML_NODE_TGZ_SIZE%%!$html_node_db_tgz_size!g" \ + -e "s!%%DOCBOOK_ASCII_SIZE%%!$docbook_ascii_size!g" \ + -e "s!%%DOCBOOK_PDF_SIZE%%!$docbook_pdf_size!g" \ + -e "s!%%DOCBOOK_XML_SIZE%%!$docbook_xml_size!g" \ + -e "s!%%DOCBOOK_XML_GZ_SIZE%%!$docbook_xml_gz_size!g" \ + -e "s,%%SCRIPTURL%%,$scripturl,g" \ + -e "s!%%SCRIPTNAME%%!$prog!g" \ + -e "$CONDS" \ +$GENDOCS_TEMPLATE_DIR/gendocs_template >"$outdir/index.html" + +echo "Done, see $outdir/ subdirectory for new files." + +# Local variables: +# eval: (add-hook 'before-save-hook 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-end: "$" +# End: diff --git a/sysa/mes-0.22/build-aux/gitlog-to-changelog b/sysa/mes-0.22/build-aux/gitlog-to-changelog new file mode 100755 index 0000000..b9e0fd4 --- /dev/null +++ b/sysa/mes-0.22/build-aux/gitlog-to-changelog @@ -0,0 +1,499 @@ +eval '(exit $?0)' && eval 'exec perl -wS "$0" "$@"' + & eval 'exec perl -wS "$0" $argv:q' + if 0; +# Convert git log output to ChangeLog format. + +my $VERSION = '2019-12-08 20:13'; # UTC +# The definition above must lie within the first 8 lines in order +# for the Emacs time-stamp write hook (at end) to update it. +# If you change this file with Emacs, please let the write hook +# do its job. Otherwise, update this string manually. + +# Copyright (C) 2008-2016 Free Software Foundation, Inc. + +# 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 3 of the License, 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, see <http://www.gnu.org/licenses/>. + +# Written by Jim Meyering + +use strict; +use warnings; +use Getopt::Long; +use POSIX qw(strftime); + +(my $ME = $0) =~ s|.*/||; + +# use File::Coda; # http://meyering.net/code/Coda/ +END { + defined fileno STDOUT or return; + close STDOUT and return; + warn "$ME: failed to close standard output: $!\n"; + $? ||= 1; +} + +sub usage ($) +{ + my ($exit_code) = @_; + my $STREAM = ($exit_code == 0 ? *STDOUT : *STDERR); + if ($exit_code != 0) + { + print $STREAM "Try '$ME --help' for more information.\n"; + } + else + { + print $STREAM <<EOF; +Usage: $ME [OPTIONS] [ARGS] + +Convert git log output to ChangeLog format. If present, any ARGS +are passed to "git log". To avoid ARGS being parsed as options to +$ME, they may be preceded by '--'. + +OPTIONS: + + --amend=FILE FILE maps from an SHA1 to perl code (i.e., s/old/new/) that + makes a change to SHA1's commit log text or metadata. + --append-dot append a dot to the first line of each commit message if + there is no other punctuation or blank at the end. + --no-cluster never cluster commit messages under the same date/author + header; the default is to cluster adjacent commit messages + if their headers are the same and neither commit message + contains multiple paragraphs. + --srcdir=DIR the root of the source tree, from which the .git/ + directory can be derived. + --since=DATE convert only the logs since DATE; + the default is to convert all log entries. + --until=DATE convert only the logs older than DATE. + --ignore-matching=PAT ignore commit messages whose first lines match PAT. + --ignore-line=PAT ignore lines of commit messages that match PAT. + --format=FMT set format string for commit subject and body; + see 'man git-log' for the list of format metacharacters; + the default is '%s%n%b%n' + --strip-tab remove one additional leading TAB from commit message lines. + --strip-cherry-pick remove data inserted by "git cherry-pick"; + this includes the "cherry picked from commit ..." line, + and the possible final "Conflicts:" paragraph. + --help display this help and exit + --version output version information and exit + +EXAMPLE: + + $ME --since=2008-01-01 > ChangeLog + $ME -- -n 5 foo > last-5-commits-to-branch-foo + +SPECIAL SYNTAX: + +The following types of strings are interpreted specially when they appear +at the beginning of a log message line. They are not copied to the output. + + Copyright-paperwork-exempt: Yes + Append the "(tiny change)" notation to the usual "date name email" + ChangeLog header to mark a change that does not require a copyright + assignment. + Co-authored-by: Joe User <user\@example.com> + List the specified name and email address on a second + ChangeLog header, denoting a co-author. + Signed-off-by: Joe User <user\@example.com> + These lines are simply elided. + +In a FILE specified via --amend, comment lines (starting with "#") are ignored. +FILE must consist of <SHA,CODE+> pairs where SHA is a 40-byte SHA1 (alone on +a line) referring to a commit in the current project, and CODE refers to one +or more consecutive lines of Perl code. Pairs must be separated by one or +more blank line. + +Here is sample input for use with --amend=FILE, from coreutils: + +3a169f4c5d9159283548178668d2fae6fced3030 +# fix typo in title: +s/all tile types/all file types/ + +1379ed974f1fa39b12e2ffab18b3f7a607082202 +# Due to a bug in vc-dwim, I mis-attributed a patch by Paul to myself. +# Change the author to be Paul. Note the escaped "@": +s,Jim .*>,Paul Eggert <eggert\\\@cs.ucla.edu>, + +EOF + } + exit $exit_code; +} + +# If the string $S is a well-behaved file name, simply return it. +# If it contains white space, quotes, etc., quote it, and return the new string. +sub shell_quote($) +{ + my ($s) = @_; + if ($s =~ m![^\w+/.,-]!) + { + # Convert each single quote to '\'' + $s =~ s/\'/\'\\\'\'/g; + # Then single quote the string. + $s = "'$s'"; + } + return $s; +} + +sub quoted_cmd(@) +{ + return join (' ', map {shell_quote $_} @_); +} + +# Parse file F. +# Comment lines (starting with "#") are ignored. +# F must consist of <SHA,CODE+> pairs where SHA is a 40-byte SHA1 +# (alone on a line) referring to a commit in the current project, and +# CODE refers to one or more consecutive lines of Perl code. +# Pairs must be separated by one or more blank line. +sub parse_amend_file($) +{ + my ($f) = @_; + + open F, '<', $f + or die "$ME: $f: failed to open for reading: $!\n"; + + my $fail; + my $h = {}; + my $in_code = 0; + my $sha; + while (defined (my $line = <F>)) + { + $line =~ /^\#/ + and next; + chomp $line; + $line eq '' + and $in_code = 0, next; + + if (!$in_code) + { + $line =~ /^([0-9a-fA-F]{40})$/ + or (warn "$ME: $f:$.: invalid line; expected an SHA1\n"), + $fail = 1, next; + $sha = lc $1; + $in_code = 1; + exists $h->{$sha} + and (warn "$ME: $f:$.: duplicate SHA1\n"), + $fail = 1, next; + } + else + { + $h->{$sha} ||= ''; + $h->{$sha} .= "$line\n"; + } + } + close F; + + $fail + and exit 1; + + return $h; +} + +# git_dir_option $SRCDIR +# +# From $SRCDIR, the --git-dir option to pass to git (none if $SRCDIR +# is undef). Return as a list (0 or 1 element). +sub git_dir_option($) +{ + my ($srcdir) = @_; + my @res = (); + if (defined $srcdir) + { + my $qdir = shell_quote $srcdir; + my $cmd = "cd $qdir && git rev-parse --show-toplevel"; + my $qcmd = shell_quote $cmd; + my $git_dir = qx($cmd); + defined $git_dir + or die "$ME: cannot run $qcmd: $!\n"; + $? == 0 + or die "$ME: $qcmd had unexpected exit code or signal ($?)\n"; + chomp $git_dir; + push @res, "--git-dir=$git_dir/.git"; + } + @res; +} + +{ + my $since_date; + my $until_date; + my $format_string = '%s%n%b%n'; + my $amend_file; + my $append_dot = 0; + my $cluster = 1; + my $ignore_matching; + my $ignore_line; + my $strip_tab = 0; + my $strip_cherry_pick = 0; + my $srcdir; + GetOptions + ( + help => sub { usage 0 }, + version => sub { print "$ME version $VERSION\n"; exit }, + 'since=s' => \$since_date, + 'until=s' => \$until_date, + 'format=s' => \$format_string, + 'amend=s' => \$amend_file, + 'append-dot' => \$append_dot, + 'cluster!' => \$cluster, + 'ignore-matching=s' => \$ignore_matching, + 'ignore-line=s' => \$ignore_line, + 'strip-tab' => \$strip_tab, + 'strip-cherry-pick' => \$strip_cherry_pick, + 'srcdir=s' => \$srcdir, + ) or usage 1; + + defined $since_date + and unshift @ARGV, "--since=$since_date"; + defined $until_date + and unshift @ARGV, "--until=$until_date"; + + # This is a hash that maps an SHA1 to perl code (i.e., s/old/new/) + # that makes a correction in the log or attribution of that commit. + my $amend_code = defined $amend_file ? parse_amend_file $amend_file : {}; + + my @cmd = ('git', + git_dir_option $srcdir, + qw(log --log-size), + '--pretty=format:%H:%ct %an <%ae>%n%n'.$format_string, @ARGV); + open PIPE, '-|', @cmd + or die ("$ME: failed to run '". quoted_cmd (@cmd) ."': $!\n" + . "(Is your Git too old? Version 1.5.1 or later is required.)\n"); + + my $prev_multi_paragraph; + my $prev_date_line = ''; + my @prev_coauthors = (); + my @skipshas = (); + while (1) + { + defined (my $in = <PIPE>) + or last; + $in =~ /^log size (\d+)$/ + or die "$ME:$.: Invalid line (expected log size):\n$in"; + my $log_nbytes = $1; + + my $log; + my $n_read = read PIPE, $log, $log_nbytes; + $n_read == $log_nbytes + or die "$ME:$.: unexpected EOF\n"; + + # Extract leading hash. + my ($sha, $rest) = split ':', $log, 2; + defined $sha + or die "$ME:$.: malformed log entry\n"; + $sha =~ /^[0-9a-fA-F]{40}$/ + or die "$ME:$.: invalid SHA1: $sha\n"; + + my $skipflag = 0; + if (@skipshas) + { + foreach(@skipshas) + { + if ($sha =~ /^$_/) + { + $skipflag = $_; + last; + } + } + } + + # If this commit's log requires any transformation, do it now. + my $code = $amend_code->{$sha}; + if (defined $code) + { + eval 'use Safe'; + my $s = new Safe; + # Put the unpreprocessed entry into "$_". + $_ = $rest; + + # Let $code operate on it, safely. + my $r = $s->reval("$code") + or die "$ME:$.:$sha: failed to eval \"$code\":\n$@\n"; + + # Note that we've used this entry. + delete $amend_code->{$sha}; + + # Update $rest upon success. + $rest = $_; + } + + # Remove lines inserted by "git cherry-pick". + if ($strip_cherry_pick) + { + $rest =~ s/^\s*Conflicts:\n.*//sm; + $rest =~ s/^\s*\(cherry picked from commit [\da-f]+\)\n//m; + } + + my @line = split /[ \t]*\n/, $rest; + my $author_line = shift @line; + defined $author_line + or die "$ME:$.: unexpected EOF\n"; + $author_line =~ /^(\d+) (.*>)$/ + or die "$ME:$.: Invalid line " + . "(expected date/author/email):\n$author_line\n"; + + # Format 'Copyright-paperwork-exempt: Yes' as a standard ChangeLog + # `(tiny change)' annotation. + my $tiny = (grep (/^(?:Copyright-paperwork-exempt|Tiny-change):\s+[Yy]es$/, @line) + ? ' (tiny change)' : ''); + + my $date_line = sprintf "%s %s$tiny\n", + strftime ("%Y-%m-%d", gmtime ($1)), $2; + + my @coauthors = grep /^Co-authored-by:.*$/, @line; + # Omit meta-data lines we've already interpreted. + @line = grep !/^(?:Signed-off-by:[ ].*>$ + |Co-authored-by:[ ] + |Copyright-paperwork-exempt:[ ] + |Tiny-change:[ ] + )/x, @line; + + # Remove leading and trailing blank lines. + if (@line) + { + while ($line[0] =~ /^\s*$/) { shift @line; } + while ($line[$#line] =~ /^\s*$/) { pop @line; } + } + + # Handle Emacs gitmerge.el "skipped" commits. + # Yes, this should be controlled by an option. So sue me. + if ( grep /^(; )?Merge from /, @line ) + { + my $found = 0; + foreach (@line) + { + if (grep /^The following commit.*skipped:$/, $_) + { + $found = 1; + ## Reset at each merge to reduce chance of false matches. + @skipshas = (); + next; + } + if ($found && $_ =~ /^([0-9a-fA-F]{7,}) [^ ]/) + { + push ( @skipshas, $1 ); + } + } + } + + # Ignore commits that match the --ignore-matching pattern, if specified. + if (defined $ignore_matching && @line && $line[0] =~ /$ignore_matching/) + { + $skipflag = 1; + } + elsif ($skipflag) + { + ## Perhaps only warn if a pattern matches more than once? + warn "$ME: warning: skipping $sha due to $skipflag\n"; + } + + if (! $skipflag) + { + if (defined $ignore_line && @line) + { + @line = grep ! /$ignore_line/, @line; + while ($line[$#line] =~ /^\s*$/) { pop @line; } + } + + # Record whether there are two or more paragraphs. + my $multi_paragraph = grep /^\s*$/, @line; + + # Format 'Co-authored-by: A U Thor <email@example.com>' lines in + # standard multi-author ChangeLog format. + for (@coauthors) + { + s/^Co-authored-by:\s*/\t /; + s/\s*</ </; + + /<.*?@.*\..*>/ + or warn "$ME: warning: missing email address for " + . substr ($_, 5) . "\n"; + } + + # If clustering of commit messages has been disabled, if this header + # would be different from the previous date/name/etc. header, + # or if this or the previous entry consists of two or more paragraphs, + # then print the header. + if ( ! $cluster + || $date_line ne $prev_date_line + || "@coauthors" ne "@prev_coauthors" + || $multi_paragraph + || $prev_multi_paragraph) + { + $prev_date_line eq '' + or print "\n"; + print $date_line; + @coauthors + and print join ("\n", @coauthors), "\n"; + } + $prev_date_line = $date_line; + @prev_coauthors = @coauthors; + $prev_multi_paragraph = $multi_paragraph; + + # If there were any lines + if (@line == 0) + { + warn "$ME: warning: empty commit message:\n $date_line\n"; + } + else + { + if ($append_dot) + { + # If the first line of the message has enough room, then + if (length $line[0] < 72) + { + # append a dot if there is no other punctuation or blank + # at the end. + $line[0] =~ /[[:punct:]\s]$/ + or $line[0] .= '.'; + } + } + + # Remove one additional leading TAB from each line. + $strip_tab + and map { s/^\t// } @line; + + # Prefix each non-empty line with a TAB. + @line = map { length $_ ? "\t$_" : '' } @line; + + print "\n", join ("\n", @line), "\n"; + } + } + + defined ($in = <PIPE>) + or last; + $in ne "\n" + and die "$ME:$.: unexpected line:\n$in"; + } + + close PIPE + or die "$ME: error closing pipe from " . quoted_cmd (@cmd) . "\n"; + # FIXME-someday: include $PROCESS_STATUS in the diagnostic + + # Complain about any unused entry in the --amend=F specified file. + my $fail = 0; + foreach my $sha (keys %$amend_code) + { + warn "$ME:$amend_file: unused entry: $sha\n"; + $fail = 1; + } + + exit $fail; +} + +# Local Variables: +# mode: perl +# indent-tabs-mode: nil +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "my $VERSION = '" +# time-stamp-format: "%:y-%02m-%02d %02H:%02M" +# time-stamp-time-zone: "UTC0" +# time-stamp-end: "'; # UTC" +# End: diff --git a/sysa/mes-0.22/build-aux/indent.sh b/sysa/mes-0.22/build-aux/indent.sh new file mode 100755 index 0000000..130416c --- /dev/null +++ b/sysa/mes-0.22/build-aux/indent.sh @@ -0,0 +1,21 @@ +#! /bin/sh + +# GNU Mes --- Maxwell Equations of Software +# Copyright © 2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org> +# +# This file is part of GNU Mes. +# +# GNU Mes is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# GNU Mes is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Mes. If not, see <http://www.gnu.org/licenses/>. + +for i in $(find . -name '*.c' -o -name '*.h' -o -name '*.i'); do indent $i --no-tabs --line-length 110 --honour-newlines; done diff --git a/sysa/mes-0.22/build-aux/install.sh.in b/sysa/mes-0.22/build-aux/install.sh.in new file mode 100644 index 0000000..db4c643 --- /dev/null +++ b/sysa/mes-0.22/build-aux/install.sh.in @@ -0,0 +1,133 @@ +#! @SHELL@ + +# GNU Mes --- Maxwell Equations of Software +# Copyright © 2017,2018,2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org> +# +# This file is part of GNU Mes. +# +# GNU Mes is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# GNU Mes is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Mes. If not, see <http://www.gnu.org/licenses/>. + +set -e + +. ./config.sh + +v= +_v= +if test "$V" = 2; then + set -x +fi +if test -n "$V"; then + if test "$V" -gt 0; then + v=v + _v=-v + fi +fi + +set -u + +# Use bash or lose if pipes fail +if test -n "$BASHOPTS"; then + set -o pipefail +fi + +DESTDIR=${DESTDIR-} +mkdir -p ${DESTDIR}${bindir} +cp $_v bin/mes ${DESTDIR}${bindir}/mes +if test -f bin/mes-gcc; then + cp $_v bin/mes-gcc ${DESTDIR}${bindir}/mes-gcc +fi +if test -f bin/mes-mescc; then + cp $_v bin/mes-mescc ${DESTDIR}${bindir}/mes-mescc +fi +cp $_v scripts/mesar ${DESTDIR}${bindir}/mesar +cp $_v scripts/mescc.scm ${DESTDIR}${bindir}/mescc.scm +cp $_v scripts/mescc ${DESTDIR}${bindir}/mescc + +sed \ + -e "s,^#! /bin/sh,#! ${SHELL}," \ + scripts/diff.scm > ${DESTDIR}${bindir}/diff.scm +chmod +x ${DESTDIR}${bindir}/diff.scm + +mkdir -p ${DESTDIR}${docdir} + +if test -n "${PERL}"\ + && test -n "${GIT}"\ + && ${PERL} -v > /dev/null\ + && ! test -f .git-for-build; then + ${PERL} ${srcdest}build-aux/gitlog-to-changelog --srcdir=. > ChangeLog+ +fi + +cp\ + AUTHORS\ + BOOTSTRAP\ + COPYING\ + HACKING\ + NEWS\ + README\ + ROADMAP\ + ${DESTDIR}${docdir} + +if test -f ChangeLog+; then + cp $_v ChangeLog+ ${DESTDIR}${docdir}/ChangeLog + rm -f ChangeLog+ +else + cp $_v ChangeLog ${DESTDIR}${docdir} +fi + +__exclude_go= +__exclude_scm= +if test -f module/mescc.go; then + __exclude_go=--exclude='*.go' + __exclude_scm=--exclude='*.scm' +fi + +mkdir -p $DESTDIR$includedir +mkdir -p $DESTDIR$libdir +mkdir -p $DESTDIR$pkgdatadir +tar -cf- -C ${srcdir}/include . | tar -${v}xf- -C $DESTDIR$includedir +tar -cf- -C ${srcdir}/lib $mes_cpu-mes | tar -${v}xf- -C $DESTDIR$libdir +tar -cf- -C ${srcdir}/lib $mes_kernel/$mes_cpu-mes | tar -${v}xf- -C $DESTDIR$libdir +if test -z "$srcdest"; then + tar -cf- $__exclude_go module | tar -${v}xf- -C $DESTDIR$pkgdatadir +else + tar -cf- -C ${srcdest} module | tar -${v}xf- -C $DESTDIR$pkgdatadir +fi +tar -cf- -C ${srcdest}mes module | tar -${v}xf- -C $DESTDIR$pkgdatadir +if test -d gcc-lib/$mes_cpu-mes; then + tar -cf- -C gcc-lib/$mes_cpu-mes . | tar -${v}xf- -C $DESTDIR$libdir +fi +if test -d mescc-lib/$mes_cpu-mes; then + tar -cf- -C mescc-lib $mes_cpu-mes | tar -${v}xf- -C $DESTDIR$libdir +fi + +mkdir -p ${DESTDIR}${guile_site_dir} +mkdir -p ${DESTDIR}${guile_site_ccache_dir} +tar -cf- -C ${srcdest}module $__exclude_go . | tar -${v}xf- -C ${DESTDIR}${guile_site_dir} +tar -cf- -C module $__exclude_scm . | tar -${v}xf- -C ${DESTDIR}${guile_site_ccache_dir} + +if test -f doc/mes.info; then + mkdir -p ${DESTDIR}${infodir} + tar -cf- doc/mes.info* doc/images | tar -${v}xf- --strip-components=1 -C ${DESTDIR}${infodir} + install-info --info-dir=${DESTDIR}${infodir} doc/mes.info +fi + +if test -f doc/mes.1; then + mkdir -p ${DESTDIR}${mandir}/man1 + cp $_v doc/mes.1 ${DESTDIR}${mandir}/man1/ +fi + +if test -f doc/mescc.1; then + mkdir -p ${DESTDIR}${mandir}/man1 + cp $_v doc/mescc.1 ${DESTDIR}${mandir}/man1/ +fi diff --git a/sysa/mes-0.22/build-aux/manifest.scm b/sysa/mes-0.22/build-aux/manifest.scm new file mode 100644 index 0000000..5f6ec98 --- /dev/null +++ b/sysa/mes-0.22/build-aux/manifest.scm @@ -0,0 +1,23 @@ +;;; GNU Mes --- Maxwell Equations of Software +;;; Copyright © 2018,2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org> + +;;; This file is part of GNU Mes. +;;; +;;; GNU Mes is free software; you can redistribute it and/or modify it +;;; under the terms of the GNU General Public License as published by +;;; the Free Software Foundation; either version 3 of the License, or (at +;;; your option) any later version. +;;; +;;; GNU Mes is distributed in the hope that it will be useful, but +;;; WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;;; GNU General Public License for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with GNU Mes. If not, see <http://www.gnu.org/licenses/>. + +(use-modules (guix packages)) +(define %source-dir (dirname (dirname (current-filename)))) +(add-to-load-path (string-append %source-dir "/guix")) +(use-modules (git mes)) +(packages->manifest (map cadr (package-direct-inputs mes))) diff --git a/sysa/mes-0.22/build-aux/mes-snarf.scm b/sysa/mes-0.22/build-aux/mes-snarf.scm new file mode 100755 index 0000000..9dcac71 --- /dev/null +++ b/sysa/mes-0.22/build-aux/mes-snarf.scm @@ -0,0 +1,205 @@ +#! /bin/sh +# -*-scheme-*- +exec ${GUILE-guile} --no-auto-compile -L $(dirname $0) -C $(dirname $0) -e '(mes-snarf)' -s "$0" "$@" +!# + +;;; GNU Mes --- Maxwell Equations of Software +;;; Copyright © 2016,2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org> +;;; +;;; mes-snarf.scm: This file is part of GNU Mes. +;;; +;;; GNU Mes is free software; you can redistribute it and/or modify it +;;; under the terms of the GNU General Public License as published by +;;; the Free Software Foundation; either version 3 of the License, or (at +;;; your option) any later version. +;;; +;;; GNU Mes is distributed in the hope that it will be useful, but +;;; WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;;; GNU General Public License for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with GNU Mes. If not, see <http://www.gnu.org/licenses/>. + +(define-module (mes-snarf) + #:use-module (srfi srfi-1) + #:use-module (srfi srfi-8) + #:use-module (srfi srfi-9) + #:use-module (srfi srfi-26) + #:use-module (ice-9 rdelim) + #:export (main)) + +(cond-expand + (mes + (define %scheme "mes")) + (guile-2 + (define %scheme "guile") + (define-macro (mes-use-module . rest) #t)) + (guile + (use-modules (ice-9 syncase)) + (define %scheme "guile") + (define-macro (mes-use-module . rest) #t))) + +(mes-use-module (mes guile)) +(mes-use-module (srfi srfi-1)) +(mes-use-module (srfi srfi-8)) +(mes-use-module (srfi srfi-9)) +(mes-use-module (srfi srfi-26)) + +(when (and=> (getenv "V") (lambda (v) (> (string->number v) 1))) + (format (current-error-port) "mes-snarf[~a]...\n" %scheme)) + +(define (char->char from to char) + (if (eq? char from) to char)) + +(define (string-replace-char string from to) + (string-map (cut char->char from to <>) string)) + +(define (string-replace-suffix string from to) + (if (string-suffix? from string) + (string-replace string to (- (string-length string) (string-length from))) + string)) + +(define (string-replace-string string from to) + (cond ((string-contains string from) => (lambda (i) (string-replace string to i (+ i (string-length from))))) + (else string))) + +(define %gcc? #t) + +(define-record-type <file> (make-file name content) + file? + (name file.name) + (content file.content)) + +(define-record-type <function> (make-function name formals annotation) + function? + (name function.name) + (formals function.formals) + (annotation function.annotation)) + +(define (function-scm-name f) + (or (assoc-ref (function.annotation f) 'name) + (let ((name ((compose + identity + (cut string-replace-char <> #\_ #\-) + (cut string-replace-string <> "_to_" "->") + (cut string-replace-suffix <> "_x" "!") + (cut string-replace-suffix <> "_x_" "!-") + (cut string-replace-suffix <> "_p" "?") + ) + (function.name f)))) + (if (not (string-suffix? "-" name)) name + (string-append "core:" (string-drop-right name 1)))))) + +(define %builtin-prefix% "scm_") +(define (function-builtin-name f) + (string-append %builtin-prefix% (function.name f))) + +(define %cell-prefix% "cell_") +(define (function-cell-name f) + (string-append %cell-prefix% (function.name f))) + +(define %start 1) +(define (symbol->header s i) + (string-append + (format #f "// CONSTANT ~a ~a\n" s i) + (format #f "#define ~a ~a\n" s i))) + +(define (function->header f i) + (let* ((arity (or (assoc-ref (function.annotation f) 'arity) + (if (string-null? (function.formals f)) 0 + (length (string-split (function.formals f) #\,))))) + (n (if (eq? arity 'n) -1 arity))) + (format #f "SCM ~a (~a);\n" (function.name f) (function.formals f)))) + +(define (function->source f i) + (let* ((arity (or (assoc-ref (function.annotation f) 'arity) + (if (string-null? (function.formals f)) 0 + (length (string-split (function.formals f) #\,))))) + (n (if (eq? arity 'n) -1 arity))) + (format #f " a = init_builtin (builtin_type, ~s, ~a, &~a, a);\n" (function.name f) n (function.name f)))) + +(define (disjoin . predicates) + (lambda (. arguments) + (any (cut apply <> arguments) predicates))) + +(define (snarf-symbols string) + (let* ((lines (string-split string #\newline)) + (symbols (filter (cut string-prefix? " init_symbol (" <>) lines))) + (define (line->symbol line) + ((compose + (lambda (s) (string-take s (string-index s #\,))) + (cut string-drop <> (string-length " init_symbol ("))) + line)) + (map line->symbol symbols))) + +(define (string-split-string string sep) + (cond ((string-contains string sep) => (lambda (i) (list (string-take string i) (string-drop string (+ i (string-length sep)))))) + (else (list string #f)))) + +(define (snarf-functions string) + (let ((lines (string-split string #\newline))) + (filter-map + (lambda (line previous) + (receive (function rest) + (apply values (string-split-string line " ")) + (and function + (equal? (string-trim previous) "SCM") + (not (string-null? function)) + (not (string-prefix? "#" function)) + (not (string-prefix? "/" function)) + rest + (receive (parameter-list annotation) + (apply values (string-split-string rest " ///")) + (let* ((parameters (string-drop parameter-list 1)) + (parameters (string-drop-right parameters 1)) + (formals (if (string-null? parameters) '() + (string-split parameters #\,))) + (formals (map string-trim formals))) + (and parameters + (let* ((non-SCM (filter (negate (cut string-prefix? "SCM" <>)) formals))) + (and (null? non-SCM) + (let ((annotation (and annotation (with-input-from-string annotation read)))) + (make-function function parameters annotation)))))))))) + lines (cons "\n" lines)))) + +(define (content? f) + ((compose not string-null? file.content) f)) + +(define (internal? f) + ((compose (cut assoc-ref <> 'internal) function.annotation) f)) + +(define (no-environment? f) + ((compose (cut assoc-ref <> 'no-environment) function.annotation) f)) + +(define (generate-includes file-name) + (let* ((srcdest (or (getenv "srcdest") "")) + (string (with-input-from-file (string-append srcdest file-name) read-string)) + (functions (snarf-functions string)) + (functions (delete-duplicates functions (lambda (a b) (equal? (function.name a) (function.name b))))) + (functions (filter (negate internal?) functions)) + (symbols (snarf-symbols string)) + (base-name (basename file-name ".c")) + (dir (string-append (dirname file-name))) + (base-name (string-append dir "/" base-name)) + (base-name (if %gcc? base-name + (string-append base-name ".mes"))) + (header (make-file + (string-append base-name ".h") + (string-join (map function->header functions (iota (length functions) (+ %start (length symbols)))) ""))) + (source (make-file + (string-append base-name ".i") + (string-join (map function->source (filter (negate no-environment?) functions) (iota (length functions) (+ (length symbols) %start))) ""))) + (symbols.h (make-file + (string-append base-name ".symbols.h") + (string-join (map symbol->header symbols (iota (length symbols) %start)) "")))) + (list header source symbols.h))) + +(define (file-write file) + (system* "mkdir" "-p" (dirname (file.name file))) + (with-output-to-file (file.name file) (lambda () (display (file.content file))))) + +(define (main args) + (let* ((files (cdr args)) + (files (append-map generate-includes files))) + (for-each file-write (filter content? files)))) diff --git a/sysa/mes-0.22/build-aux/pre-inst-env.in b/sysa/mes-0.22/build-aux/pre-inst-env.in new file mode 100644 index 0000000..b8ef115 --- /dev/null +++ b/sysa/mes-0.22/build-aux/pre-inst-env.in @@ -0,0 +1,54 @@ +#! @BASH@ + +# GNU Mes --- Maxwell Equations of Software +# Copyright © 2018,2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org> +# +# This file is part of GNU Mes. +# +# GNU Mes is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# GNU Mes is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Mes. If not, see <http://www.gnu.org/licenses/>. + +abs_top_srcdir="@abs_top_srcdir@" +export abs_top_srcdir +abs_top_builddir="@abs_top_builddir@" +export abs_top_builddir +prefix=${prefix-@prefix@} +export prefix +program_prefix=${program_prefix-@program_prefix@} + +MES_PREFIX=${MES_PREFIX-${abs_top_srcdir}} +export MES_PREFIX + +GUILE_LOAD_COMPILED_PATH="$abs_top_builddir/scripts:$abs_top_builddir/module${GUILE_LOAD_COMPILED_PATH:+:}$GUILE_LOAD_COMPILED_PATH" +GUILE_LOAD_PATH="$abs_top_srcdir/module:$abs_top_srcdir/mes:$abs_top_srcdir/guix${GUILE_LOAD_PATH:+:}$GUILE_LOAD_PATH" +if [ -n "$srcdest" ]; then + GUILE_LOAD_PATH="${srcdest}module:${srcdest}mes:$GUILE_LOAD_PATH" +fi +export GUILE_LOAD_COMPILED_PATH GUILE_LOAD_PATH + +PATH="$abs_top_builddir/scripts:$abs_top_builddir/scripts:$abs_top_builddir/bin:$abs_top_builddir/build-aux:$PATH" +export PATH + +MES=${MES-${abs_top_builddir}/bin/${program_prefix}mes} +export MES + +bindir=${abs_top_builddir}/scripts +export bindir + +GUIX_PACKAGE_PATH="$abs_top_srcdir/guix${GUIX_PACKAGE_PATH:+:}$GUIX_PACKAGE_PATH" +export GUIX_PACKAGE_PATH + +LANG= +LC_ALL= + +exec "$@" diff --git a/sysa/mes-0.22/build-aux/setup-mes.sh b/sysa/mes-0.22/build-aux/setup-mes.sh new file mode 100644 index 0000000..18cc637 --- /dev/null +++ b/sysa/mes-0.22/build-aux/setup-mes.sh @@ -0,0 +1,90 @@ +#! /bin/sh + +# GNU Mes --- Maxwell Equations of Software +# Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org> +# +# This file is part of GNU Mes. +# +# GNU Mes is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# GNU Mes is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Mes. If not, see <http://www.gnu.org/licenses/>. + +set -e + +if [ -n "$BUILD_DEBUG" ]; then + set -x +fi + +mkdir -p src +cd src + + +for GUILE_EFFECTIVE_VERSION in 2.2 2.0; do + if sudo apt-get install --no-install-recommends guile-$GUILE_EFFECTIVE_VERSION-dev; then + break + fi +done + +guile_site_dir=/usr/local/share/guile/site/$GUILE_EFFECTIVE_VERSION +guile_site_ccache_dir=/usr/local/lib/guile/$GUILE_EFFECTIVE_VERSION/site-ccache +GUILE_LOAD_PATH=$guile_site_dir +GUILE_LOAD_COMPILED_PATH=$guile_site_ccache_dir +export GUILE_LOAD_PATH +export GUILE_LOAD_COMPILED_PATH + +sudo apt-get install --no-install-recommends build-essential ca-certificates help2man texinfo + +# Nice to have +sudo apt-get install --no-install-recommends gcc-i686-linux-gnu || true + +echo checking for M1 +if ! command -v M1; then + if sudo apt-get install mescc-tools; then + echo yay + else + wget -O mescc-tools-Release_0.5.1.tar.gz https://github.com/oriansj/mescc-tools/archive/Release_0.5.1.tar.gz + tar xf mescc-tools-Release_0.5.1.tar.gz + cd mescc-tools-Release_0.5.1 + make + make check + sudo make install + cd .. + fi +fi + +echo checking for Nyacc +if ! guile -c '(use-modules (nyacc lalr)) (display *nyacc-version*) (newline)'; then + if sudo apt-get install --no-install-recommends nyacc; then + echo yay + else + wget -O nyacc-v0.80.43.tar.gz https://gitlab.com/janneke/nyacc/-/archive/v0.80.43/nyacc-v0.80.43.tar.gz + tar xf nyacc-v0.80.43.tar.gz + cd nyacc-v0.80.43 + ./configure --prefix=/usr/local + make + make check + sudo make install + cd .. + fi +fi + +echo checking for mes +if ! command -v mes; then + sudo apt-get install --no-install-recommends git + git clone git://git.savannah.gnu.org/mes.git + cd mes + git checkout wip-gnu + ./configure + make + make check + make install +fi diff --git a/sysa/mes-0.22/build-aux/snarf.sh b/sysa/mes-0.22/build-aux/snarf.sh new file mode 100755 index 0000000..ceb90c3 --- /dev/null +++ b/sysa/mes-0.22/build-aux/snarf.sh @@ -0,0 +1,36 @@ +#! /bin/sh + +# GNU Mes --- Maxwell Equations of Software +# Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org> +# +# This file is part of GNU Mes. +# +# GNU Mes is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# GNU Mes is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Mes. If not, see <http://www.gnu.org/licenses/>. + +set -e + +. ${srcdest}build-aux/config.sh +. ${srcdest}build-aux/trace.sh + +trace "SNARF$snarf gc.c" ${srcdest}build-aux/mes-snarf.scm src/gc.c +trace "SNARF$snarf hash.c" ${srcdest}build-aux/mes-snarf.scm src/hash.c +trace "SNARF$snarf lib.c" ${srcdest}build-aux/mes-snarf.scm src/lib.c +trace "SNARF$snarf math.c" ${srcdest}build-aux/mes-snarf.scm src/math.c +trace "SNARF$snarf mes.c" ${srcdest}build-aux/mes-snarf.scm src/mes.c +trace "SNARF$snarf module.c" ${srcdest}build-aux/mes-snarf.scm src/module.c +trace "SNARF$snarf posix.c" ${srcdest}build-aux/mes-snarf.scm src/posix.c +trace "SNARF$snarf reader.c" ${srcdest}build-aux/mes-snarf.scm src/reader.c +trace "SNARF$snarf strings.c" ${srcdest}build-aux/mes-snarf.scm src/string.c +trace "SNARF$snarf struct.c" ${srcdest}build-aux/mes-snarf.scm src/struct.c +trace "SNARF$snarf vector.c" ${srcdest}build-aux/mes-snarf.scm src/vector.c diff --git a/sysa/mes-0.22/build-aux/test-boot.sh b/sysa/mes-0.22/build-aux/test-boot.sh new file mode 100755 index 0000000..a189a3e --- /dev/null +++ b/sysa/mes-0.22/build-aux/test-boot.sh @@ -0,0 +1,38 @@ +#! /bin/sh + +# GNU Mes --- Maxwell Equations of Software +# Copyright © 2018,2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org> +# +# This file is part of GNU Mes. +# +# GNU Mes is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# GNU Mes is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Mes. If not, see <http://www.gnu.org/licenses/>. + +set -e + +if [ "$V" = 2 ]; then + set -x +fi + +t=${1-scaffold/boot/00-zero.scm} +b=$(basename "$t" .scm) + +if [ "$(basename $MES)" = guile ]; then + $MES -L ${srcdest}module -C module -L . -c '(begin (use-modules (mes guile)) (include-from-path "'"$t"'"))' +elif [ -z "${b/5[0-9]-*/}" ]; then + cat "$t" | MES_BOOT=boot-00.scm $MES +elif [ -z "${b/6[0-9]-*/}" ]; then + cat "$t" | MES_BOOT=boot-01.scm $MES +else + MES_BOOT=$t $MES; +fi diff --git a/sysa/mes-0.22/build-aux/test-c.sh b/sysa/mes-0.22/build-aux/test-c.sh new file mode 100755 index 0000000..0084407 --- /dev/null +++ b/sysa/mes-0.22/build-aux/test-c.sh @@ -0,0 +1,85 @@ +#! /bin/sh + +# GNU Mes --- Maxwell Equations of Software +# Copyright © 2018,2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org> +# +# This file is part of GNU Mes. +# +# GNU Mes is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# GNU Mes is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Mes. If not, see <http://www.gnu.org/licenses/>. + +set -e + +if test -z "$config_sh"; then + . ./config.sh +fi + +if [ "$V" = 2 ]; then + set -x +fi + +t=${1-lib/tests/scaffold/t.c} +b=$(dirname "$t")/$(basename "$t" .c) +o="$b" +o=lib/tests/${b#*lib/tests/} +if [ "$o" = "$b" ]; then + o=./$(basename "$t" .c) +fi + +rm -f "$o" +CC=${CC-gcc} + +i=$(basename "$t" .c) +if [ -z "${i/[012][0-9]-*/}" ]; then + LIBS= +elif [ -z "${i/[34][0-9]-*/}" ]; then + LIBS='-l c-mini' +elif [ -z "${i/[78][0-9a-z]-*/}" ]; then + LIBS='-l c+tcc' +elif [ -z "${i/9[0-9a-z]-*/}" ]; then + LIBS='-l c+gnu' +else + LIBS='-l c' +fi + +if test $mes_kernel = gnu\ + && test -z "$LIBS"; then + LIBS="-l c-mini" +fi + +if test $mes_libc = system; then + crt1= + LIBS='-l mes' +else + crt1=crt1.o +fi + +$CC -g -c $AM_CPPFLAGS $CPPFLAGS $AM_CFLAGS $CFLAGS -o "$o".o "$t" +$CC -g $AM_CFLAGS $CFLAGS $AM_LDFLAGS $LDFLAGS -L . -o "$o" $crt1 "$o".o $LIBS + +set +e +timeout 10 "$o" -s --long file0 file1 > "$o".1 2> "$o".2 +r=$? +set -e +if [ -f "$b".exit ]; then + e=$(cat "$b".exit) +else + e=0 +fi +[ $r = $e ] || exit 1 +if [ -f "$b".stdout ]; then + $DIFF -ub "$b".stdout "$o".1 +fi +if [ -f "$b".stderr ]; then + $DIFF -ub "$b".stderr "$o".2 +fi diff --git a/sysa/mes-0.22/build-aux/test-driver b/sysa/mes-0.22/build-aux/test-driver new file mode 100755 index 0000000..2930e80 --- /dev/null +++ b/sysa/mes-0.22/build-aux/test-driver @@ -0,0 +1,148 @@ +#!/bin/sh +# test-driver - basic testsuite driver script. + +scriptversion=2018-03-07.03; # UTC + +# Copyright (C) 2011-2018 Free Software Foundation, Inc. +# +# 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, see <https://www.gnu.org/licenses/>. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# This file is maintained in Automake, please report +# bugs to <bug-automake@gnu.org> or send patches to +# <automake-patches@gnu.org>. + +# Make unconditional expansion of undefined variables an error. This +# helps a lot in preventing typo-related bugs. +set -u + +usage_error () +{ + echo "$0: $*" >&2 + print_usage >&2 + exit 2 +} + +print_usage () +{ + cat <<END +Usage: + test-driver --test-name=NAME --log-file=PATH --trs-file=PATH + [--expect-failure={yes|no}] [--color-tests={yes|no}] + [--enable-hard-errors={yes|no}] [--] + TEST-SCRIPT [TEST-SCRIPT-ARGUMENTS] +The '--test-name', '--log-file' and '--trs-file' options are mandatory. +END +} + +test_name= # Used for reporting. +log_file= # Where to save the output of the test script. +trs_file= # Where to save the metadata of the test run. +expect_failure=no +color_tests=no +enable_hard_errors=yes +while test $# -gt 0; do + case $1 in + --help) print_usage; exit $?;; + --version) echo "test-driver $scriptversion"; exit $?;; + --test-name) test_name=$2; shift;; + --log-file) log_file=$2; shift;; + --trs-file) trs_file=$2; shift;; + --color-tests) color_tests=$2; shift;; + --expect-failure) expect_failure=$2; shift;; + --enable-hard-errors) enable_hard_errors=$2; shift;; + --) shift; break;; + -*) usage_error "invalid option: '$1'";; + *) break;; + esac + shift +done + +missing_opts= +test x"$test_name" = x && missing_opts="$missing_opts --test-name" +test x"$log_file" = x && missing_opts="$missing_opts --log-file" +test x"$trs_file" = x && missing_opts="$missing_opts --trs-file" +if test x"$missing_opts" != x; then + usage_error "the following mandatory options are missing:$missing_opts" +fi + +if test $# -eq 0; then + usage_error "missing argument" +fi + +if test $color_tests = yes; then + # Keep this in sync with 'lib/am/check.am:$(am__tty_colors)'. + red='' # Red. + grn='' # Green. + lgn='' # Light green. + blu='' # Blue. + mgn='' # Magenta. + std='' # No color. +else + red= grn= lgn= blu= mgn= std= +fi + +do_exit='rm -f $log_file $trs_file; (exit $st); exit $st' +trap "st=129; $do_exit" 1 +trap "st=130; $do_exit" 2 +trap "st=141; $do_exit" 13 +trap "st=143; $do_exit" 15 + +# Test script is run here. +"$@" >$log_file 2>&1 +estatus=$? + +if test $enable_hard_errors = no && test $estatus -eq 99; then + tweaked_estatus=1 +else + tweaked_estatus=$estatus +fi + +case $tweaked_estatus:$expect_failure in + 0:yes) col=$red res=XPASS recheck=yes gcopy=yes;; + 0:*) col=$grn res=PASS recheck=no gcopy=no;; + 77:*) col=$blu res=SKIP recheck=no gcopy=yes;; + 99:*) col=$mgn res=ERROR recheck=yes gcopy=yes;; + *:yes) col=$lgn res=XFAIL recheck=no gcopy=yes;; + *:*) col=$red res=FAIL recheck=yes gcopy=yes;; +esac + +# Report the test outcome and exit status in the logs, so that one can +# know whether the test passed or failed simply by looking at the '.log' +# file, without the need of also peaking into the corresponding '.trs' +# file (automake bug#11814). +echo "$res $test_name (exit status: $estatus)" >>$log_file + +# Report outcome to console. +echo "${col}${res}${std}: $test_name" + +# Register the test result, and other relevant metadata. +echo ":test-result: $res" > $trs_file +echo ":global-test-result: $res" >> $trs_file +echo ":recheck: $recheck" >> $trs_file +echo ":copy-in-global-log: $gcopy" >> $trs_file + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'before-save-hook 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC0" +# time-stamp-end: "; # UTC" +# End: diff --git a/sysa/mes-0.22/build-aux/test-suite.sh b/sysa/mes-0.22/build-aux/test-suite.sh new file mode 100644 index 0000000..e776770 --- /dev/null +++ b/sysa/mes-0.22/build-aux/test-suite.sh @@ -0,0 +1,143 @@ +#! /bin/sh + +# GNU Mes --- Maxwell Equations of Software +# Copyright © 2011-2018 Free Software Foundation, Inc. +# Copyright © 2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org> +# +# This file is part of GNU Mes. +# +# GNU Mes is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# GNU Mes is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Mes. If not, see <http://www.gnu.org/licenses/>. + +# Adapted from GNU Automake + +TEST_SUITE_LOG=test-suite.log +dry_run=false +create_global_log=cat +subdir=$(basename $(pwd)) + +TEST_LOGS= +for t in $TESTS; do + b=$(dirname $t)/$(basename $t $test_ext) + TEST_LOGS="$TEST_LOGS $b.log" + if test -e $b.log \ + && test -e $b.trs\ + && ! $recheck; then + echo `grep :test-result $b.trs | cut -d' ' -f 2`: $b + continue + fi + d=$(dirname $t) + case " `echo $XFAIL_TESTS` " in + *[\ \ ]$t[\ \ ]*) + fail=yes;; + *) + fail=no;; + esac + mkdir -p $d + ${SHELL} ${srcdest}build-aux/test-driver\ + --test-name $t \ + --log-file $b.log\ + --trs-file $b.trs\ + --color-tests $colors\ + --enable-hard-errors no\ + --expect-failure $fail\ + -- $log_compiler\ + ${srcdest}$t +done + +if test $colors = yes; then + red='' + grn='' + lgn='' + blu='' + mgn='' + brg='' + std='' +else + mgn= red= grn= lgn= blu= brg= std= +fi +bases="$TEST_LOGS" +bases=`for i in $bases; do echo $i; done | sed 's/\.log$//'` +bases=`echo $bases` +ws='[ ]' +results=`for b in $bases; do echo $b.trs; done` +test -n "$results" || results=/dev/null +all=` grep "^$ws*:test-result:" $results | wc -l` +pass=` grep "^$ws*:test-result:$ws*PASS" $results | wc -l` +fail=` grep "^$ws*:test-result:$ws*FAIL" $results | wc -l` +skip=` grep "^$ws*:test-result:$ws*SKIP" $results | wc -l` +xfail=`grep "^$ws*:test-result:$ws*XFAIL" $results | wc -l` +xpass=`grep "^$ws*:test-result:$ws*XPASS" $results | wc -l` +error=`grep "^$ws*:test-result:$ws*ERROR" $results | wc -l` +if test `expr $fail + $xpass + $error` -eq 0; then + success=true +else + success=false +fi +br='==================='; br=$br$br$br$br +result_count () +{ + if test x"$1" = x"--maybe-color"; then + maybe_colorize=yes + elif test x"$1" = x"--no-color"; then + maybe_colorize=no + else + echo "$@: invalid 'result_count' usage" >&2; exit 4 + fi + shift + desc=$1 count=$2 + if test $maybe_colorize = yes && test $count -gt 0; then + color_start=$3 color_end=$std + else + color_start= color_end= + fi + echo "${color_start}# $desc $count${color_end}" +} +create_testsuite_report () +{ + result_count $1 "TOTAL:" $all "$brg" + result_count $1 "PASS: " $pass "$grn" + result_count $1 "SKIP: " $skip "$blu" + result_count $1 "XFAIL:" $xfail "$lgn" + result_count $1 "FAIL: " $fail "$red" + result_count $1 "XPASS:" $xpass "$red" + result_count $1 "ERROR:" $error "$mgn" +} +{ + echo "${PACKAGE}: ${subdir}/${TEST_SUITE_LOG}" + create_testsuite_report --no-color + echo + echo + for b in $bases; do echo $b; done\ + | $create_global_log +} >${TEST_SUITE_LOG}.tmp || exit 1 +mv ${TEST_SUITE_LOG}.tmp ${TEST_SUITE_LOG} +if $success; then + col="$grn" + else + col="$red" + test x"$V" = x0 || cat ${TEST_SUITE_LOG} +fi +echo "${col}$br${std}" +echo "${col}Testsuite summary for ${PACKAGE_NAME}${std}" +echo "${col}$br${std}" +create_testsuite_report --maybe-color +echo "$col$br$std" +if $success; then :; else + echo "${col}See ${subdir}/${TEST_SUITE_LOG}${std}" + if test -n "${PACKAGE_BUGREPORT}"; then + echo "${col}Please report to ${PACKAGE_BUGREPORT}${std}" + fi + echo "$col$br$std" +fi +$success || exit 1 diff --git a/sysa/mes-0.22/build-aux/trace.sh b/sysa/mes-0.22/build-aux/trace.sh new file mode 100644 index 0000000..d847784 --- /dev/null +++ b/sysa/mes-0.22/build-aux/trace.sh @@ -0,0 +1,49 @@ +# GNU Mes --- Maxwell Equations of Software +# Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org> +# +# This file is part of GNU Mes. +# +# GNU Mes is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# GNU Mes is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Mes. If not, see <http://www.gnu.org/licenses/>. + +LOG= +if [ -z "$V" -o "$V" = 0 ]; then + trace () { + echo " $1" + shift + echo "$@" >> build.log + eval "$@ $LOG" + cat .log 1>&2 + cat .log >> build.log + } + LOG=" >.log 2>&1" +fi +if [ "$V" = 1 ]; then + trace () { + shift + echo "$@" + echo "$@" >> build.log + eval "$@ $LOG" + cat .log 1>&2 + cat .log >> build.log + } + LOG=" >.log 2>&1" +fi +if [ "$V" = 2 ]; then + set -x + trace () { + shift + echo "$@" >> build.log + eval "$@" + } +fi diff --git a/sysa/mes-0.22/build-aux/uninstall.sh.in b/sysa/mes-0.22/build-aux/uninstall.sh.in new file mode 100644 index 0000000..e1815d8 --- /dev/null +++ b/sysa/mes-0.22/build-aux/uninstall.sh.in @@ -0,0 +1,96 @@ +#! /bin/sh + +# GNU Mes --- Maxwell Equations of Software +# Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org> +# +# This file is part of GNU Mes. +# +# GNU Mes is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# GNU Mes is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Mes. If not, see <http://www.gnu.org/licenses/>. + +#set -e + +. ./config.sh + +v= +_v= +if test "$V" = 2; then + set -x +fi +if test "$V" -gt 0; then + v=v + _v=-v +fi + +set -u + +rm ${DESTDIR}${bindir}/mes +rm ${DESTDIR}${bindir}/ar +rm ${DESTDIR}${bindir}/mescc +rm ${DESTDIR}${bindir}/mescc.scm +rm ${DESTDIR}${bindir}/diff.scm +rmdir ${DESTDIR}${bindir} || : + +rm -r ${DESTDIR}${libdir}/$mes_cpu-mes +rm ${DESTDIR}${libdir}/libc-mini.a +rm ${DESTDIR}${libdir}/libmes.a +if cmp gcc-lib/libc.a ${DESTDIR}${libdir}/libc.a; then + rm ${DESTDIR}${libdir}/libc.a +fi +if cmp gcc-lib/libtcc1.a ${DESTDIR}${libdir}/libtcc1.a; then + rm ${DESTDIR}${libdir}/libtcc1.a +fi +rm ${DESTDIR}${libdir}/libc+tcc.a +rm ${DESTDIR}${libdir}/libc+gnu.a + +rm -r ${DESTDIR}${includedir}/mes +rm $(grep -lr _MES_ ${DESTDIR}${includedir}) +rmdir ${DESTDIR}${includedir}/linux/x86 +rmdir ${DESTDIR}${includedir}/linux/x86_64 +rmdir ${DESTDIR}${includedir}/linux +rmdir -p ${DESTDIR}${includedir}/sys + +for i in\ + AUTHORS\ + BOOTSTRAP\ + COPYING\ + ChangeLog\ + HACKING\ + INSTALL\ + NEWS\ + README\ + ;do + rm ${DESTDIR}${docdir}/$i || :; +done + +rm -r ${DESTDIR}${pkgdatadir} +rm -r ${DESTDIR}${guile_site_ccache_dir}/mes +rm -r ${DESTDIR}${guile_site_ccache_dir}/mescc + +rm -r ${DESTDIR}${guile_site_dir}/mes +rm ${DESTDIR}${guile_site_dir}/mescc.scm +rm -r ${DESTDIR}${guile_site_dir}/mescc + +rm ${DESTDIR}${infodir}/dir +rm ${DESTDIR}${infodir}/mes.info* +rm ${DESTDIR}${infodir}/images/gcc-mesboot* +rm ${DESTDIR}${infodir}/images/README +rm ${DESTDIR}${mandir}/man1/mes.1 +rm ${DESTDIR}${mandir}/man1/mescc.1 + +rmdir -p ${DESTDIR}${docdir} +rmdir -p ${DESTDIR}${infodir}/images +rmdir -p ${DESTDIR}${guile_site_dir} +rmdir -p ${DESTDIR}${guile_site_ccache_dir} +rmdir -p ${DESTDIR}${mandir}/man1 +true diff --git a/sysa/mes-0.22/configure b/sysa/mes-0.22/configure new file mode 100755 index 0000000..7e59b5a --- /dev/null +++ b/sysa/mes-0.22/configure @@ -0,0 +1,715 @@ +#! /bin/sh +# -*-scheme-*- +MES_ARENA=100000000 exec ${SCHEME-guile} -L . --no-auto-compile -e '(configure)' -s "$0" ${1+"$@"} +!# + +;;; GNU Mes --- Maxwell Equations of Software +;;; Copyright © 2016,2017,2018,2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org> +;;; +;;; configure: This file is part of GNU Mes. +;;; +;;; GNU Mes is free software; you can redistribute it and/or modify it +;;; under the terms of the GNU General Public License as published by +;;; the Free Software Foundation; either version 3 of the License, or (at +;;; your option) any later version. +;;; +;;; GNU Mes is distributed in the hope that it will be useful, but +;;; WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;;; GNU General Public License for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with GNU Mes. If not, see <http://www.gnu.org/licenses/>. + +(define-module (configure) + #:use-module (srfi srfi-1) + #:use-module (srfi srfi-9) + #:use-module (srfi srfi-9 gnu) + #:use-module (srfi srfi-26) + #:use-module (ice-9 getopt-long) + #:use-module (ice-9 optargs) + #:use-module (ice-9 popen) + #:use-module (ice-9 rdelim) + #:export (main)) + +(define *shell* "sh") +(define PACKAGE "mes") +(define PACKAGE-NAME "GNU Mes") +(define PACKAGE-BUGREPORT "bug-mes@gnu.org") +(define VERSION "0.22") + +(cond-expand + (guile) + (mes (mes-use-module (srfi srfi-1)) + (mes-use-module (srfi srfi-9)) + (mes-use-module (srfi srfi-9 gnu)) + (mes-use-module (srfi srfi-26)) + (mes-use-module (mes getopt-long)) + (mes-use-module (mes guile)) + (mes-use-module (mes misc)) + (mes-use-module (mes optargs)) + (define %host-type "x86_64-unknown-linux-gnu") + (define OPEN_READ "r") + (define (canonicalize-path o) + (if (string-prefix? "/" o) o + (string-append (getcwd) "/" o))) + (define (sort lst less) + lst) + (define (close-pipe o) 0) + (define (open-pipe* OPEN_READ . commands) + (let ((fake-pipe ".pipe")) + (with-output-to-file fake-pipe + (lambda _ + (let ((status (apply system* (append commands)))) + (set! close-pipe (lambda _ status))))) + (open-input-file fake-pipe))))) + +(define* (PATH-search-path name #:key (default name) warn?) + (or (search-path (string-split (getenv "PATH") #\:) name) + (and (and warn? (format (current-error-port) "warning: not found: ~a\n" name)) + default))) + +;;; Utility +(define (logf port string . rest) + (apply format (cons* port string rest)) + (force-output port) + #t) + +(define (stderr string . rest) + (apply logf (cons* (current-error-port) string rest))) + +(define (stdout string . rest) + (apply logf (cons* (current-output-port) string rest))) + +(define %verbose? #f) + +(define (verbose string . rest) + (if %verbose? (apply stderr (cons string rest)))) + +(define (gulp-pipe command) + (let* ((err (current-error-port)) + (foo (set-current-error-port (open-output-file ".error"))) + (port (open-pipe command "r")) + (output (read-string port)) + (status (close-pipe port)) + (error (with-input-from-file ".error" read-string))) + (when (file-exists? ".error") + (delete-file ".error")) + (set-current-error-port err) + (verbose "command[~a]: ~s => ~a [~a]\n" status command output error) + (if (not (zero? status)) "" + (string-trim-right (string-append output error))))) + +(define (gulp-pipe* . command) + (gulp-pipe (string-join command))) + +(define (tuple< a b) + (cond + ((and (null? a) (null? b)) #t) + ((null? a) (not (null? b))) + ((null? b) #f) + ((and (not (< (car a) (car b))) + (not (< (car b) (car a)))) + (tuple< (cdr a) (cdr b))) + (else (< (car a) (car b))))) + +(define (tuple<= a b) + (or (equal? a b) (tuple< a b))) + +(define (conjoin . predicates) + (lambda (. arguments) + (every (cut apply <> arguments) predicates))) + +(define (char->char from to char) + (if (eq? char from) to char)) + +(define (string-replace-char string from to) + (string-map (cut char->char from to <>) string)) + +(define (string-replace-string string from to) + (cond ((string-contains string from) + => (lambda (i) (string-replace string to i (+ i (string-length from))))) + (else string))) + +(define (string-replace-string/all string from to) + (or (and=> (string-contains string from) + (lambda (i) + (string-append + (substring string 0 i) + to + (string-replace-string/all + (substring string (+ i (string-length from))) from to)))) + string)) + +;;; Configure + +(define-immutable-record-type <dependency> + (make-dependency name version-expected optional? version-option commands file-name data version-found) + dependency? + (name dependency-name) + (version-expected dependency-version-expected) + (optional? dependency-optional?) + (version-option dependency-version-option) + (commands dependency-commands) + (file-name dependency-file-name) + (data dependency-data) + (version-found dependency-version-found)) + +(define* (make-dep name #:key (version '()) optional? (version-option "--version") (commands (list name)) file-name data) + (let* ((env-var (getenv (name->shell-name name))) + (commands (if env-var (cons env-var commands) commands))) + (make-dependency name version optional? version-option commands file-name data #f))) + +(define (find-dep name deps) + (find (compose (cut equal? <> name) dependency-name) deps)) + +(define (file-name name deps) + (and=> (find-dep name deps) dependency-file-name)) + +(define (variable-name dependency) + (and=> + (dependency-name dependency) + name->shell-name)) + +(define (name->shell-name name) + (string-upcase (string-replace-char name #\- #\_))) + +(define (->string o) + (cond ((number? o) (number->string o)) + ((string? o) o) + (else (format #f "~a" o)))) + +(define (version->string version) + (and version (string-join (map ->string version) "."))) + +(define (string->version string) + (let ((split (string-tokenize string + (char-set-adjoin char-set:digit #\.)))) + (and (pair? split) + (let* ((version (sort split (lambda (a b) + (let ((len-a (length (string-split a #\.))) + (len-b (length (string-split b #\.)))) + (cond ((> len-a len-b) #t) + ((< len-a len-b) #f) + (else (> (string-length a) (string-length b)))))))) + (version (car version)) + (version (string-tokenize version + (char-set-complement (char-set #\.))))) + (map string->number version))))) + +(define (check-program-version dependency) + (let ((name (dependency-name dependency)) + (expected (dependency-version-expected dependency)) + (version-option (dependency-version-option dependency)) + (commands (dependency-commands dependency))) + (let loop ((commands commands)) + (if (or (null? commands) + (not (car commands))) dependency + (let ((command (car commands))) + (stdout "checking for ~a~a... " (if (string-index command #\space) name command) + (if (null? expected) "" + (format #f " [~a]" (version->string expected)))) + (let* ((output (gulp-pipe (string-append command " " (if version-option version-option "")))) + (actual (string->version output)) + (pass? (and actual (tuple< expected actual))) + (dependency (set-field dependency (dependency-version-found) actual))) + (stdout "~a ~a\n" (if pass? (if (pair? actual) "" "yes") + (if actual " no, found" "no")) + (or (version->string actual) "")) + (if pass? (let ((file-name (or (PATH-search-path command) + (dependency-file-name dependency)))) + (set-field dependency (dependency-file-name) file-name)) + (loop (cdr commands))))))))) + +(define (check-file dependency) + (stdout "checking for ~a... " (dependency-name dependency)) + (let ((file-name (and (file-exists? (dependency-file-name dependency)) + (dependency-file-name dependency)))) + (stdout "~a\n" (or file-name "")) + (set-field dependency (dependency-file-name) file-name))) + +(define* (check-header-c cc dependency #:optional (check check-preprocess-header-c)) + (let ((name (dependency-name dependency))) + (stderr "checking for ~a..." name) + (let ((result (check cc name))) + (when (file-exists? ".config.c") + (delete-file ".config.c")) + (stderr " ~a\n" (if result "yes" "no")) + (if result (set-field dependency (dependency-file-name) name) + dependency)))) + +(define* (check-compile-c cc dependency #:optional (check check-compile-string-c)) + (let ((name (dependency-name dependency))) + (stderr "checking for ~a..." name) + (let ((result (check cc (dependency-data dependency)))) + (when (file-exists? ".config.c") + (delete-file ".config.c")) + (stderr " ~a\n" (if result "yes" "no")) + (if result (set-field dependency (dependency-file-name) name) + dependency)))) + +(define* (check-link-c cc dependency #:optional (check check-link-string-c)) + (let ((name (dependency-name dependency))) + (stderr "checking for ~a..." name) + (let ((result (check cc (dependency-data dependency)))) + (when (file-exists? ".config.c") + (delete-file ".config.c")) + (stderr " ~a\n" (if result "yes" "no")) + (if result (set-field dependency (dependency-file-name) name) + dependency)))) + +(define (cflags-list) + (let ((cflags (getenv "CFLAGS"))) + (if cflags (list cflags) + '()))) + +(define (ldflags-list) + (let ((ldflags (getenv "LDFLAGS"))) + (if ldflags (list ldflags) + '()))) + +(define (check-preprocess-header-c cc header) + (with-output-to-file ".config.c" + (cut format #t "#include \"~a\"" header)) + (let ((test (lambda _ (apply system* `(,cc "-E" "-o" ".config.E" ,@(cflags-list) ".config.c"))))) + (zero? (if %verbose? (test) + (with-error-to-file "/dev/null" + test))))) + +(define (check-compile-string-c cc string) + (with-output-to-file ".config.c" + (cut display string)) + (let ((test (lambda _ (apply system* `(,cc "-std=gnu99" "-c" "-o" ".config.o" ,@(cflags-list) ".config.c"))))) + (zero? (if %verbose? (test) + (with-error-to-file "/dev/null" + test))))) + +(define (check-link-string-c cc string) + (with-output-to-file ".config.c" + (cut display string)) + (let ((test (lambda _ (apply system* `(,cc "-std=gnu99" "-o" ".config" ,@(cflags-list) ,@(ldflags-list) ".config.c"))))) + (zero? (if %verbose? (test) + (with-error-to-file "/dev/null" + test))))) + +(define (parse-opts args) + (let* ((option-spec + '((build (value #t)) + (host (value #t)) + + (prefix (value #t)) + (program-prefix (value #t)) + (bindir (value #t)) + (datadir (value #t)) + (docdir (value #t)) + (includedir (value #t)) + (libdir (value #t)) + (srcdir (value #t)) + (sysconfdir (value #t)) + + (mes) + (help (single-char #\h)) + (verbose (single-char #\v)) + (with-bootstrap) + (with-cheating) + (with-courage) + (infodir (value #t)) + (mandir (value #t)) + (disable-colors) + (enable-colors) + (disable-silent-rules) + (enable-silent-rules) + (with-system-libc) + + (enable-fast-install) ; Ignored for Guix + (mandir (value #t)) ; Ignored for Debian + (localstatedir (value #t)) ; Ignored for Debian + (libexecdir (value #t)) ; Ignored for Debian + (runstatedir (value #t)) ; Ignored for Debian + (disable-maintainer-mode) ; Ignored for Debian + (disable-dependency-tracking) ; Ignored for Debian + ))) + + (getopt-long args option-spec))) + +(define* (print-help #:optional (port (current-output-port))) + (format port "\ +`configure' configures ~a ~a to adapt to many kinds of systems. + +Usage: ./configure [OPTION]... [VAR=VALUE] + +To assign environment variables (e.g., CC, CFLAGS...), specify them as +VAR=VALUE. See below for descriptions of some of the useful variables. + +Defaults for the options are specified in brackets. + +Options: + -h, --help display this help + --build=BUILD configure for building on BUILD [guessed] + --colors no colorized output + --disable-silent-rules + verbose build output [V=1] + --host=HOST cross-compile to build programs to run on HOST [BUILD] + -v, --verbose be verbose + --with-bootstrap After building mes with CC, build mes with MesCC + --with-courage Assert that even if this platform is unsupported, + you will be courageous and port GNU Mes to it + (see \"Porting GNU Mes\" in the manual.) + --with-cheating cheat using Guile instead of Mes + --with-system-libc use system libc + +Installation directories: + --prefix=DIR install in prefix DIR [~a] + + --bindir=DIR user executables [PREFIX/bin] + --includedir=DIR C header files [PREFIX/include] + --infodir=DIR info documentation [PREFIX/share/info] + --libdir=DIR object code libraries [EPREFIX/lib] + --mandir=DIR man pages [PREFIX/share/man] + +Program names: + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + +Ignored for Guix: + --enable-fast-install + +Ignored for Debian: + --disable-dependency-tracking + --disable-maintainer-mode + --libexecdir=DIR + --localstatedir=DIR + --runstatedir=DIR + +Some influential environment variables: + CC C compiler command + CFLAGS C compiler flags + CPPFLAGS C preprocessor flags + LDFLAGS C linker flags + GUILE guile command + GUILD guild command + GUILE_LOAD_PATH guile load path; where to find Nyacc + MES_FOR_BUILD build system MES [can be mes or guile] +" PACKAGE VERSION (getenv "prefix"))) + +(define (main args) + (let* ((options (parse-opts args)) + (build-type (option-ref options 'build %host-type)) + (host-type (option-ref options 'host build-type)) + + (prefix "/usr/local") + (prefix (option-ref options 'prefix prefix)) + (program-prefix (option-ref options 'program-prefix "")) + (program-suffix (option-ref options 'program-suffix "")) + (infodir (option-ref options 'infodir "${prefix}/share/info")) + (mandir (option-ref options 'mandir "${prefix}/share/man")) + (sysconfdir (option-ref options 'sysconfdir "${prefix}/etc")) + + (bindir (option-ref options 'bindir "${prefix}/bin")) + (datadir (option-ref options 'datadir "${prefix}/share")) + (docdir (option-ref options 'docdir "${datadir}/doc/mes")) + (includedir (option-ref options 'includedir "${prefix}/include")) + (libdir (option-ref options 'libdir "${prefix}/lib")) + (pkgdatadir (string-append datadir "/mes")) + (guile-load-path (if (and (pair? %load-path) (equal? (car %load-path) ".")) (cdr %load-path) + %load-path)) + (guile-effective-version (effective-version)) + (guile-site-dir (if (equal? prefix ".") (canonicalize-path ".") + (string-append prefix "/share/guile/site/" guile-effective-version))) + (guile-site-ccache-dir (if (equal? prefix ".") (canonicalize-path ".") + (string-append prefix "/lib/guile/" guile-effective-version "/site-ccache"))) + + (srcdir (dirname (car (command-line)))) + (srcdest (if (equal? srcdir ".") "" + (string-append srcdir "/"))) + (abs-top-srcdir (canonicalize-path srcdir)) + (abs-top-builddir (canonicalize-path (getcwd))) + (top-builddir (if (equal? srcdir ".") "." + abs-top-builddir)) + + (with-bootstrap? (option-ref options 'with-bootstrap #f)) + (with-cheating? (option-ref options 'with-cheating #f)) + (with-courage? (option-ref options 'with-courage #f)) + (disable-colors? (option-ref options 'disable-colors #f)) + (enable-colors? (option-ref options 'enable-colors #f)) + (disable-silent-rules? (option-ref options 'disable-silent-rules #f)) + (enable-silent-rules? (option-ref options 'enable-silent-rules #f)) + (with-system-libc? (option-ref options 'with-system-libc #f)) + (vars (filter (cut string-index <> #\=) (option-ref options '() '()))) + (help? (option-ref options 'help #f)) + (mes? (option-ref options 'mes #f))) + (when help? + (print-help) + (exit 0)) + (set! %verbose? (option-ref options 'verbose #f)) + (when %verbose? + (stderr "configure args=~s\n" args)) + (for-each (lambda (v) (apply setenv (string-split v #\=))) vars) + (let* ((cross? (not (equal? host-type build-type))) + (gcc (if cross? (string-append host-type "-" "gcc") "gcc")) + (tcc (if cross? (string-append host-type "-" "tcc") "tcc")) + (mescc (if cross? (string-append host-type "-" "mescc") "mescc")) + (deps (fold (lambda (program results) + (cons (check-program-version program) results)) + '() + (list (make-dep "hex2") + (make-dep "M1") + (make-dep "blood-elf") + (make-dep "diff" #:optional? #t) + (make-dep "guile" #:version '(2 0) #:commands '("guile-2.2" "guile-2.0" "guile-2" "guile") #:optional? #t) + (make-dep "mes" #:version '(0 20) #:optional? #t) + (make-dep "guix" #:version '() #:optional? #t) + (make-dep "ar" #:version '(2 10) #:optional? #t) + (make-dep "sh" #:optional? #t) + (make-dep "bash" #:version '(2 0) #:optional? #t) + (make-dep "guild" #:version '(2 0) #:commands '("guild" "guile-tools" "true")) + (make-dep "CC" #:commands `(,(getenv "CC")) #:optional? #t) + (make-dep "CC-v" #:commands `(,(getenv "CC")) #:optional? #t #:version-option "-v") + (make-dep "cc" #:commands '("cc") #:optional? #t) + (make-dep "gcc" #:commands `(,gcc "gcc") #:optional? #t) + (make-dep "mescc" #:commands `(,mescc "mescc") #:optional? #t) + (make-dep "tcc" #:commands `(,tcc "tcc") #:optional? #t #:version-option "-v") + (make-dep "cc-v" #:commands '("cc") #:optional? #t #:version-option "-v") + (make-dep "make" #:optional? #t #:commands '("gmake" "make")) + (make-dep "makeinfo" #:version '(6) #:optional? #t) + (make-dep "dot" #:version-option "-V" #:optional? #t) + (make-dep "help2man" #:version '(1 47) #:optional? #t) + (make-dep "perl" #:version '(5) #:optional? #t)))) + (guile (file-name "guile" deps)) + (deps (if guile (cons (check-program-version (make-dep "nyacc" #:version '(0 99 0) #:commands (list (string-append guile " -c '(use-modules (nyacc lalr)) (display *nyacc-version*)'")) #:file-name #t #:version-option #f)) + deps) + deps)) + (guile (or guile "guile")) + (cc (or (file-name "CC" deps) + (file-name "CC-v" deps) + (file-name "tcc" deps) + (file-name "gcc" deps) + (file-name "cc" deps) + (file-name "cc-v" deps) + (file-name "mescc" deps))) + (deps (if cc + (cons* (check-header-c cc (make-dep "limits.h")) + (check-header-c cc (make-dep "stdio.h" #:optional? #t)) + deps) + deps)) + (missing (filter (conjoin (negate dependency-file-name) + (negate dependency-optional?)) deps)) + (deps (if cc + (cons (check-compile-c cc (make-dep "cc is GNU C" #:data "#if !defined (__GNUC__) +#error no gnuc +#endif +")) + deps) + deps)) + (gcc? (file-name "cc is GNU C" deps)) + (deps (if cc + (cons (check-compile-c cc (make-dep "cc is Mes C" #:data "#if !defined (__MESC__) +#error no mesc +#endif +")) + deps) + deps)) + (mesc? (file-name "cc is MES C" deps)) + (deps (if cc + (cons (check-compile-c cc (make-dep "cc is Tiny C" #:data "#if !defined (__TINYC__) +#error no tinycc +#endif +")) + deps) + deps)) + (tcc? (file-name "cc is Tiny C" deps)) + (deps (if cc + (cons (check-link-c cc (make-dep "whether cc can create executables" #:data "int main () {return 0;}")) + deps) + deps)) + (system-libc? (and with-system-libc? (file-name "if cc can create executables" deps))) + (host-type (or (and cc (let ((dump (gulp-pipe* cc "-dumpmachine"))) + (and (not (string-null? dump)) dump))) host-type)) + (host-type-list (string-split host-type #\-)) + (mes-cpu (car host-type-list)) + (mes-cpu (cond ((member mes-cpu '("i386" "i486" "i586" "i686")) "x86") + ((member mes-cpu '("arm" "armv4" "armv7l")) "arm") + (else mes-cpu))) + (mes-bits (if (member mes-cpu '("x86_64")) "64" + "32")) + (mes-libc (if system-libc? "system" "mes")) + (mes-kernel (car (filter + (compose not + (cut member <> '("pc" "portbld" "unknown"))) + (cdr host-type-list)))) + (mes-kernel (if (string-prefix? "freebsd" mes-kernel) "freebsd" mes-kernel)) + (mes-compiler (cond (gcc? "gcc") (tcc? "gcc") (else "mescc"))) + (mes-system (string-join (list mes-cpu mes-kernel "mes") "-")) + (bash (or (and (file-exists? "/bin/bash") "/bin/bash") + (file-name "bash" deps) + "")) + (shell (or (and (file-exists? "/bin/bash") "/bin/bash") + (file-name "bash" deps) + (and (file-exists? "/bin/sh") "/bin/sh") + (file-name "sh" deps) + "sh")) + (hex2 (file-name "hex2" deps)) + (numbered-arch? (begin + (stdout "checking for stage0 architecture flag... ") + (let ((numbered? (and hex2 (string-contains (gulp-pipe (string-append hex2 " --help 2>&1" )) "--Architecture 12345")))) + (stdout (if numbered? "numbered\n" "named\n")) + numbered?)))) + + (define* (substitute file-name pairs + #:key (target (if (string-suffix? ".in" file-name) + (string-drop-right file-name 3) file-name))) + (system* "mkdir" "-p" (dirname target)) + (with-output-to-file target + (lambda _ + (let ((in (open-input-file file-name))) + (let loop ((line (read-line in 'concat))) + (when (not (eof-object? line)) + (display (fold (lambda (o result) + (string-replace-string/all result (car o) (cdr o))) + line pairs)) + (loop (read-line in 'concat)))))))) + + (when (and (not (member mes-system '("arm-linux-mes" + "x86-linux-mes" + "x86_64-linux-mes"))) + (not with-courage?)) + (stderr "platform not supported: ~a +See \"Porting GNU Mes\" in the manual, or try --with-courage\n" mes-system) + (exit 1)) + (when (pair? missing) + (stderr "\nMissing dependencies: ~a\n" (string-join (map dependency-name missing))) + (exit 1)) + (let ((pairs `(("@PACKAGE@" . ,PACKAGE) + ("@PACKAGE_NAME@" . ,PACKAGE-NAME) + ("@PACKAGE_BUGREPORT@" . ,PACKAGE-BUGREPORT) + ("@VERSION@" . ,VERSION) + + ("@build@" . ,build-type) + ("@host@" . ,host-type) + + ("@bootstrap@" . ,(if with-bootstrap? "true" "false")) + ("@courageous@" . ,(if with-courage? "true" "false")) + ("@compiler@" . ,mes-compiler) + ("@mes_bits@" . ,mes-bits) + ("@mes_kernel@" . ,mes-kernel) + ("@mes_cpu@" . ,mes-cpu) + ("@mes_libc@" . ,mes-libc) + ("@mes_system@" . ,mes-system) + + ("@abs_top_srcdir@" . ,abs-top-srcdir) + ("@abs_top_builddir@" . ,abs-top-builddir) + ("@top_builddir@" . ,top-builddir) + + ("@srcdest@" . ,srcdest) + ("@srcdir@" . ,srcdir) + + ("@prefix@" . ,prefix) + ("@program_prefix@" . ,program-prefix) + ("@bindir@" . ,bindir) + ("@datadir@" . ,datadir) + ("@pkgdatadir@" . ,pkgdatadir) + ("@docdir@" . ,docdir) + ("@guile_site_ccache_dir@" . ,guile-site-ccache-dir) + ("@guile_site_dir@" . ,guile-site-dir) + ("@infodir@" . ,infodir) + ("@includedir@" . ,includedir) + ("@libdir@" . ,libdir) + ("@mandir@" . ,mandir) + ("@sysconfdir@" . ,sysconfdir) + + ("@colors@" . ,(if disable-colors? "no" "yes")) + ("@V@" . ,(if disable-silent-rules? "1" "0")) + + ("@AR@" . ,(or (file-name "ar" deps) "")) + ("@BASH@" . ,bash) + ("@CC@" . ,cc) + ("@DIFF@" . ,(or (file-name "diff" deps) (string-append abs-top-builddir "/pre-inst-env diff.scm"))) + ("@DOT@" . ,(or (file-name "dot" deps) "")) + ("@GIT@" . ,(or (file-name "git" deps) "")) + ("@GUILE@" . ,guile) + ("@GUILE_EFFECTIVE_VERSION@" . ,(effective-version)) + ("@GUILE_LOAD_PATH@" . ,(string-join guile-load-path ":")) + ("@GUIX@" . ,(or (file-name "guix" deps) "")) + ("@HELP2MAN@" . ,(or (file-name "help2man" deps) "")) + ("@MAKEINFO@" . ,(or (file-name "makeinfo" deps) "")) + ("@MES_FOR_BUILD@" . ,(or (file-name "mes" deps) + guile)) + ("@PERL@" . ,(or (file-name "perl" deps) "")) + ("#SCHEME=\"@SCHEME@\"" . ,(if with-cheating? (string-append "\nSCHEME=\"" guile "\"") "")) + ("@SCHEME@" . ,(if with-cheating? guile "")) + ("@SHELL@" . ,shell) + + ("@CFLAGS@" . ,(or (getenv "CFLAGS") "-static -g")) + ("@CPPFLAGS@" . ,(or (getenv "CPPFLAGS") "")) + ("@LDFLAGS@" . ,(or (getenv "LDFLAGS") "-static -g")) + ("@HEX2FLAGS@" . ,(or (getenv "HEX2FLAGS") "")) + ("@M1FLAGS@" . ,(or (getenv "M1FLAGS") "")) + ("@numbered_arch@" . ,(if numbered-arch? "true" "false")) + + ,@(map + (lambda (o) + (cons (string-append "@" (variable-name o) "@") (or (format #f "~a" (dependency-file-name o)) ""))) + deps)))) + + (unless cc + (format (current-error-port) "must supply a C compiler") + (exit 2)) + (for-each (lambda (o) + (let* ((src (string-append srcdest o)) + (target (string-drop-right o 3)) + (target (if (not (string-prefix? "build-aux/" target)) target + (string-drop target (string-length "build-aux/"))))) + (substitute src pairs #:target target))) + '( + "build-aux/GNUmakefile.in" + "build-aux/config.sh.in" + "build-aux/build.sh.in" + "build-aux/check.sh.in" + "build-aux/install.sh.in" + "build-aux/pre-inst-env.in" + "build-aux/uninstall.sh.in" + "scripts/mesar.in" + "scripts/mescc.scm.in" + "scripts/mescc.in" + )) + (chmod "pre-inst-env" #o755) + (chmod "scripts/mesar" #o755) + (chmod "scripts/mescc" #o755) + (chmod "scripts/mescc.scm" #o755) + (chmod "build.sh" #o755) + (chmod "check.sh" #o755) + (chmod "install.sh" #o755) + (chmod "uninstall.sh" #o755) + + (system* "mkdir" "-p" "include/mes") + (let ((pkgdatadir (gulp-pipe* "sh" "-c" (string-append "prefix=" prefix + ";datadir=" datadir + ";echo ${datadir}/mes")))) + (with-output-to-file "include/mes/config.h" + (lambda _ + (if system-libc? + (display "#define SYSTEM_LIBC 1 +") + (display "#undef SYSTEM_LIBC +")) + (display (string-append " +#define MES_VERSION \"" VERSION "\" +"))))) + (substitute (string-append srcdest "build-aux/config.make.in") pairs #:target ".config.make")) + + (let ((make (and=> (file-name "make" deps) basename))) + (display (string-append " +GNU Mes is configured for + compiler: " mes-compiler " + cpu: " mes-cpu " + bits: " mes-bits " + libc: " mes-libc " + kernel: " mes-kernel " + system: " mes-system " + tools: " (if numbered-arch? "numbered" "named") " arch + bootstrap: " (if with-bootstrap? "yes" "no") " + courageous: " (if with-courage? "yes" "no") " + +Run: + " (or make "./build.sh") " to build mes + " (or make "./build.sh") " help for help on other targets\n")))))) diff --git a/sysa/mes-0.22/configure.sh b/sysa/mes-0.22/configure.sh new file mode 100755 index 0000000..62a5f25 --- /dev/null +++ b/sysa/mes-0.22/configure.sh @@ -0,0 +1,280 @@ +#! /bin/sh + +# GNU Mes --- Maxwell Equations of Software +# Copyright © 2018,2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org> +# +# This file is part of GNU Mes. +# +# GNU Mes is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# GNU Mes is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Mes. If not, see <http://www.gnu.org/licenses/>. + +set -e + +VERSION=0.22 +srcdir=${srcdir-$(dirname $0)} +srcdest= +if test "$srcdir" != "."; then + srcdest=$srcdir/ +fi +. ${srcdest}build-aux/trace.sh + +# parse arguments +while [ $# -gt 0 ]; do + case $1 in + (--with-courage) + courageous=true + ;; + (--with-system-libc) + mes_libc=system + ;; + (--build=*) + build=${1#--build=} + host=${host-$build} + ;; + (--host=*) + host=${1#--host=} + ;; + (--prefix=*) + prefix=${1#--prefix=} + ;; + (--program-prefix=*) + program_prefix=${1#--program-prefix=} + ;; + esac + shift +done + +prefix=${prefix-/usr/local} +mes_libc=${mes_libc-mes} +courageous=${courageous-false} + +BASH=${BASH-$(command -v bash || command -v sh)} +BLOOD_ELF=${BLOOD_ELF-$(command -v blood-elf)} +CC=${CC-$(command -v gcc)} || true +CFLAGS=${CFLAGS-} +CPPFLAGS=${CPPFLAGS-} +DIFF=${DIFF-$(command -v diff || echo $PWD/pre-inst-env diff.scm)} +GUILD=${GUILD-$(command -v guild)} || true +GUILE_TOOLS=${GUILE_TOOLS-$(command -v guile-tools)} || true +if test ! "$GUILD"; then + if test "$GUILE_TOOLS"; then + GUILD=$GUILE_TOOLS + else + GUILD=true + fi +fi +GUILE=${GUILE-$(command -v guile)} || true +HEX2=${HEX2-$(command -v hex2)} +LDPFLAGS=${LDFLAGS-} +M1=${M1-$(command -v M1)} +MES_FOR_BUILD=${MES_FOR_BUILD-$(command -v mes || command -v guile || echo mes)} +GIT=${GIT-$(command -v git)} || true +PERL=${PERL-$(command -v perl)} || true +SHELL=${BASH-$SHELL} + +if test "$srcdir" = .; then + top_builddir=. +else + srcdest=${srcdest} + top_builddir=$PWD +fi +abs_top_srcdir=${abs_top_srcdir-$(cd ${srcdir} && pwd)} +abs_top_builddir=$PWD + +if test -z "$GUILE" -o "$GUILE" = true; then + GUILE_EFFECTIVE_VERSION=${GUILE_EFFECTIVE_VERSION-2.2} +else + GUILE_EFFECTIVE_VERSION=${GUILE_EFFECTIVE_VERSION-$(guile -c '(display (effective-version))')} +fi + +numbered_arch=false +mes_tools=named +if ( $HEX2 --help 2>&1 ) | grep -q "\-\-Architecture 12345"; then + numbered_arch=true + mes_tools=numbered +fi + +bindir=$(eval echo ${bindir-$prefix/bin}) +datadir=$(eval echo ${datadir-$prefix/share}) +docdir=$(eval echo ${docdir-$datadir/doc/mes}) +infodir=$(eval echo ${infodir-$datadir/info}) +includedir=$(eval echo ${includedir-$prefix/include}) +libdir=$(eval echo ${libdir-$prefix/lib}) +pkgdatadir=$(eval echo ${pkgdatadir-$datadir/mes}) +mandir=$(eval echo ${mandir-$datadir/man}) +guile_site_dir=$(eval echo ${guile_site_dir-$prefix/share/guile/site/$GUILE_EFFECTIVE_VERSION}) +guile_site_ccache_dir=$(eval echo ${guile_site_ccache_dir-$prefix/lib/guile/$GUILE_EFFECTIVE_VERSION/site-ccache}) + +subst () { + echo "creating $2" + sed \ + -e s,"@PACKAGE@,$PACKAGE,"\ + -e s,"@PACKAGE_NAME@,$PACKAGE_NAME,"\ + -e s,"@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,"\ + -e s,"@VERSION@,$VERSION,"\ + -e s,"@bootstrap@,true,"\ + -e s,"@build@,$build,"\ + -e s,"@host@,$host,"\ + -e s,"@compiler@,$compiler,"\ + -e s,"@courageous@,$courageous,"\ + -e s,"@mes_bits@,$mes_bits,"\ + -e s,"@mes_kernel@,$mes_kernel,"\ + -e s,"@mes_cpu@,$mes_cpu,"\ + -e s,"@mes_libc@,$mes_libc,"\ + -e s,"@mes_system@,$mes_system,"\ + -e s,"@abs_top_srcdir@,$abs_top_srcdir,"\ + -e s,"@abs_top_builddir@,$abs_top_builddir,"\ + -e s,"@top_builddir@,$top_builddir,"\ + -e s,"@srcdest@,$srcdest,"\ + -e s,"@srcdir@,$srcdir,"\ + -e s,"@prefix@,$prefix,"\ + -e s,"@program_prefix@,$program_prefix,"\ + -e s,"@bindir@,$bindir,"\ + -e s,"@datadir@,$datadir,"\ + -e s,"@docdir@,$docdir,"\ + -e s,"@guile_site_dir@,$guile_site_dir,"\ + -e s,"@guile_site_ccache_dir@,$guile_site_ccache_dir,"\ + -e s,"@infodir@,$infodir,"\ + -e s,"@includedir@,$includedir,"\ + -e s,"@libdir@,$libdir,"\ + -e s,"@mandir@,$mandir,"\ + -e s,"@pkgdatadir@,$pkgdatadir,"\ + -e s,"@sysconfdir@,$sysconfdir,"\ + -e s,"@GUILE_EFFECTIVE_VERSION@,$GUILE_EFFECTIVE_VERSION,"\ + -e s,"@GUILE_LOAD_PATH@,$GUILE_LOAD_PATH,"\ + -e s,"@V@,$V,"\ + -e s,"@AR@,$AR,"\ + -e s,"@BASH@,$BASH,"\ + -e s,"@BLOOD_ELF@,$BLOOD_ELF,"\ + -e s,"@CC@,$CC,"\ + -e s,"@DIFF@,$DIFF,"\ + -e s,"@GIT@,$GIT,"\ + -e s,"@GUILD@,$GUILD,"\ + -e s,"@GUILE@,$GUILE,"\ + -e s,"@PERL@,$PERL,"\ + -e s,"@CFLAGS@,$CFLAGS,"\ + -e s,"@HEX2@,$HEX2,"\ + -e s,"@HEX2FLAGS@,$HEX2FLAGS,"\ + -e s,"@M1@,$M1,"\ + -e s,"@M1FLAGS@,$M1FLAGS,"\ + -e s,"@MES_FOR_BUILD@,$MES_FOR_BUILD,"\ + -e s,"@numbered_arch@,$numbered_arch,"\ + -e s,"@SHELL@,$SHELL,"\ + $1 > $2 +} + +host=${host-$($CC -dumpmachine 2>/dev/null)} +if test -z "$host$host_type"; then + mes_cpu=${arch-$(get_machine || uname -m)} +else + mes_cpu=${host%%-*} +fi +if test "$mes_cpu" = i386\ + || test "$mes_cpu" = i486\ + || test "$mes_cpu" = i586\ + || test "$mes_cpu" = i686; then + mes_cpu=x86 +fi +if test "$mes_cpu" = armv4\ + || test "$arch" = armv7l; then + mes_cpu=arm +fi +if test "$mes_cpu" = amd64; then + mes_cpu=x86_64 +fi + +case "$host" in + *linux-gnu|*linux) + mes_kernel=linux;; + *gnu) + mes_kernel=gnu;; + *freebsd*) + mes_kernel=frreebsd;; + *) + mes_kernel=linux;; +esac + +case "$mes_cpu" in + x86_64) + mes_bits=64;; + *) + mes_bits=32;; +esac +# +if $CC --version | grep gcc; then + compiler=gcc +elif $CC --version | grep tcc; then + compiler=gcc +else + compiler=mescc + AR=${AR-$PWD/scripts/mesar} +fi + +AR=${AR-$(command -v ar)} || true + +mes_system=$mes_cpu-$mes_kernel-mes + +mkdir -p scripts +subst ${srcdest}build-aux/GNUmakefile.in GNUmakefile +subst ${srcdest}build-aux/config.sh.in config.sh +subst ${srcdest}build-aux/bootstrap.sh.in bootstrap.sh +chmod +x bootstrap.sh +subst ${srcdest}build-aux/build.sh.in build.sh +chmod +x build.sh +subst ${srcdest}build-aux/check.sh.in check.sh +chmod +x check.sh +subst ${srcdest}build-aux/install.sh.in install.sh +chmod +x install.sh +subst ${srcdest}build-aux/pre-inst-env.in pre-inst-env +chmod +x pre-inst-env +subst ${srcdest}scripts/mesar.in scripts/mesar +chmod +x scripts/mesar +subst ${srcdest}scripts/mescc.scm.in scripts/mescc.scm +chmod +x scripts/mescc.scm +subst ${srcdest}scripts/mescc.in scripts/mescc +chmod +x scripts/mescc +subst ${srcdest}build-aux/uninstall.sh.in uninstall.sh +chmod +x uninstall.sh + +mkdir -p include/mes +rm -f include/mes/config.h +if test $mes_libc = system; then + cat >> include/mes/config.h <<EOF +#define SYSTEM_LIBC 1 +EOF +else + cat >> include/mes/config.h <<EOF +#undef SYSTEM_LIBC +EOF +fi +cat >> include/mes/config.h <<EOF +#define MES_VERSION "$VERSION" +EOF + +cat <<EOF +GNU Mes is configured for + compiler: $compiler + cpu: $mes_cpu + bits: $mes_bits + libc: $mes_libc + kernel: $mes_kernel + system: $mes_system + tools: $mes_tools arch + courageous: $courageous + bootstrap: yes + +Run: + sh bootstrap.sh to bootstrap build mes + sh check.sh to check mes + sh install.sh to install mes +EOF diff --git a/sysa/mes-0.22/doc/announce/ANNOUNCE b/sysa/mes-0.22/doc/announce/ANNOUNCE new file mode 100644 index 0000000..e73075b --- /dev/null +++ b/sysa/mes-0.22/doc/announce/ANNOUNCE @@ -0,0 +1,45 @@ +Subject: on bootstrapping: introducing Mes +Date: Sun, 19 Jun 2016 13:08:02 +0200 + +Hi, + +I have a minimal LISP-1.5-resembling interpreter in C that now can +also interpret itself + + https://gitlab.com/janneke/mes + +It was inspired by the seemingly often ignored bootstrapping question +made so painfully visible by GuixSD and by OriansJ with their self +hosting hex assembler project. + +As a next step after a hex assembler I was thinking of getting Scheme up +and running and use that to create a tiny C compiler, probably using +PEG. For that I think we need define-syntax, which I had a peek at and +still scares the all-sorts-of-things out of me :-) + +I searched for minimal Lisp/Scheme to get that going and found an +article called the Maxwell Equations of Software 1) with a pointer to +the 1962 LISP 1.5 paper by John McCarthy 2). + +First I `implemented' Mes/LISP-1.5: the bottom half of page 13 and the +necessary helper procedures defined on pages 8-12 using Guile, removing +all but the primitives needed to run LISP-1.5/Mes (I think): car, cdr, +cond, cons, define, eq?, '()/nil, null?, pair? and quote. I cheated +with read, and with display and newline for debugging. + +Then I translated the program into C and got rid of read by using +getchar/ungetchar. + +It's been great fun and now I'm kind of stuck a bit at the point of +implementing macros. I have a simplistic version in C but want to +remove that again --I like the idea of having the absolute minimal LISP +interpreter in C-- and only introduce macros after having bootstrapped +into the LISP/Mes domain. + +Greetings, +Jan + +1) http://www.michaelnielsen.org/ddi/lisp-as-the-maxwells-equations-of-software/ +2) +http://www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf + diff --git a/sysa/mes-0.22/doc/announce/ANNOUNCE-0.10 b/sysa/mes-0.22/doc/announce/ANNOUNCE-0.10 new file mode 100644 index 0000000..29a1991 --- /dev/null +++ b/sysa/mes-0.22/doc/announce/ANNOUNCE-0.10 @@ -0,0 +1,96 @@ +Subject: Mes 0.10 released + +I am pleased to announce the release of Mes 0.10, representing 82 +commits over 6 weeks. Mescc now compiles a bootstrappable-modified +TinyCC into a mes-tcc that in turn can successfully compile a trivial +C program. + +* About + + Mes[0] aims to create full source bootstrapping for GuixSD[1] as + part of the bootstrappable builds[2] project. + + It currently consists of a mutual self-hosting [close to Guile-] + Scheme interpreter prototype in C and a Nyacc-based C compiler in + [Guile] Scheme. This C prototype will be rewritten in stage0[3] + M1 assembly (or possibly stage2 slow-LISP, or ...). + + The Scheme interpreter prototype (mes.c) has a Garbage Collector, + a library of loadable Scheme modules-- notably Dominique Boucher's + LALR[4], Pre-R6RS portable syntax-case[5] with R7RS ellipsis, Matt + Wette's Nyacc[6], Guile's PEG[7] --and test suite just barely + enough to support a simple REPL (repl.mes) and simple C-compiler + (mescc.mes). + + The simple C compiler can compile a modified TinyCC[8] that is + starting to work! A gcc-compiled tcc is known[9] to compile GCC. + + Mes is inspired by The Maxwell Equations of Software: LISP-1.5[10] + -- John McCarthy page 13, GNU Guix's source/binary packaging + transparency and Jeremiah Orians's stage0 ~300 byte self-hosting + hex assembler. + +* Download + + git clone https://gitlab.com/janneke/mes + + wget https://gitlab.com/janneke/mes/repository/archive.tar.gz?ref=v0.10 -O mes-0.10.tar.gz + +Mes runs from the source tree and can also be built, packaged and +installed in Guix[SD] by the usual + + guix package -f guix.scm + +* Changes in 0.10 since 0.9 + ** Core + *** 2 new functions + logand, lognot. + ** Mescc + *** Mes now includes M1 sources for full source bootstrapping up to tcc. + *** Mescc now depends on Nyacc 0.81.0. + *** Mescc now compiles a mes-tcc that compiles a trivial C to a running a.out. + *** Mescc now supports several (as used my tinycc) struct by value assignments. + *** Mescc now has _start in a separate crt1.c. + *** Mescc now supports initializer arithmetic. + *** Mescc now supports arrays of struct of arbitrary size. + *** Mescc now supports pointer arithmetic. + *** Mescc now defines __i386__, __linux__. + *** Mescc now supports --*p, ++*p. + *** Mescc now supports int foo[bar] = {baz,...}. + *** Mescc now supports \x00 in strings in M1. + *** Mescc now supports complex enum expressions. Thanks, rain1! + *** Mescc now supports short. + *** Mescc now supports foo.bar = foo.baz = bla. + *** Mescc now supports foo = bar < baz and comparison permutations. + *** Mescc now supports (anonymous) structs in unions. + *** Mescc now writes M1 strings if possible. + **** 2 improved mlibc functions + malloc, realloc. + **** 13 new mlibc functions + fclose, fgetc, fprintf, fwrite, memcpy, memmove, memset, snprintf, strcat, + strchr, strrchr, strtoull, vnsprintf. + **** 15 new tinycc-support tests + 76-pointer-arithmetic.c, 77-pointer-assign.c, 78-union-struct.c, + 79-int-array.c, 7a-struct-char-array.c, 7b-struct-int-array.c, + 7c-dynarray.c, 7d-cast-char.c, 7e-struct-array-access.c, + 7f-struct-pointer-arithmetic.c, 7g-struct-byte-word-field.c, + 7h-struct-assign.c, 7i-struct-struct.c, 7j-strtoull.c, + 7k-for-each-elem.c. + ** Noteworthy bug fixes + *** Mescc has many fixes for foo.bar[baz], foo[bar].baz with ./-> permutations. + *** Many bugs and limitations in mescc have been fixed and removed. + +Greetings, +janneke + +[0] https://gitlab.com/janneke/mes +[1] https://www.gnu.org/software/guix +[2] http://bootstrappable.org +[3] https://github.com/oriansj/stage0 +[4] https://github.com/schemeway/lalr-scm +[5] https://www.cs.indiana.edu/chezscheme/syntax-case/old-psyntax.html +[6] https://www.nongnu.org/nyacc/ +[7] https://www.gnu.org/software/guile/docs/master/guile.html/PEG-Parsing.html +[8] https://gitlab.com/janneke/tinycc +[9] https://lists.gnu.org/archive/html/tinycc-devel/2017-05/msg00103.html +[10] http://www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf diff --git a/sysa/mes-0.22/doc/announce/ANNOUNCE-0.11 b/sysa/mes-0.22/doc/announce/ANNOUNCE-0.11 new file mode 100644 index 0000000..147ab10 --- /dev/null +++ b/sysa/mes-0.22/doc/announce/ANNOUNCE-0.11 @@ -0,0 +1,70 @@ +Subject: Mes 0.11 released + +I am pleased to announce the release of Mes 0.11, representing 16 +commits over 10 weeks. MesCC now compiles a less heavily patched +TinyCC into a mes-tcc that in turn passes 41/69 of mescc's C tests. + +When mes-tcc passes all 69 tests, this almost-full-source-bootstrapped +version of TinyCC should be able to compile itself. An unpatched, GNU +Gcc-compiled tcc is known to compile GNU Gcc. + +* About + + Mes[0] aims to create full source bootstrapping for GuixSD[1] as + part of the bootstrappable builds[2] project. + + It currently consists of a mutual self-hosting [close to Guile-] + Scheme interpreter prototype in C and a Nyacc-based C compiler in + [Guile] Scheme. This C prototype will be rewritten in stage0[3] + M1 assembly (or compiled by M2-Planet or stage2 slow-LISP, or ...). + + The Scheme interpreter prototype (mes.c) has a Garbage Collector, + a library of loadable Scheme modules-- notably Dominique Boucher's + LALR[4], Pre-R6RS portable syntax-case[5] with R7RS ellipsis, Matt + Wette's Nyacc[6], Guile's PEG[7] --and test suite just barely + enough to support a simple REPL (repl.mes) and simple C-compiler + MesCC (mescc.mes). + + MesCC can compile a modified TinyCC[8] that is close to being + self-hosting. A GNU Gcc-compiled tcc is known[9] to compile GCC. + + Mes is inspired by The Maxwell Equations of Software: LISP-1.5[10] + -- John McCarthy page 13, GNU Guix's source/binary packaging + transparency and Jeremiah Orians's stage0 ~300 byte self-hosting + hex assembler. + +* Download + + git clone https://gitlab.com/janneke/mes + + wget https://gitlab.com/janneke/mes/repository/archive.tar.gz?ref=v0.11 -O mes-0.11.tar.gz + +Mes runs from the source tree and can also be built, packaged and +installed in Guix[SD] by the usual + + guix package -f guix.scm + +* Changes in 0.11 since 0.10 + ** MesCC + *** MesCC now compiles a mes-tcc that passes 41/69 of mescc's C tests. + *** MesCC's libc can now be compiled with tcc (syscall support: write). + *** MesCC now compiles a less-patched tcc: -214/+458 lines [WAS: -333/+747]. + *** MesCC now supports empty for. + *** MesCC has been greatly refactored, 500/3000 lines have been removed. + *** MesCC now supports complex [struct] by value assign foo.bar, foo->bar, foo[bar]. + *** MesCC now depends on Nyacc 0.82.4. + +Greetings, +janneke + +[0] https://gitlab.com/janneke/mes +[1] https://www.gnu.org/software/guix +[2] http://bootstrappable.org +[3] https://github.com/oriansj/stage0 +[4] https://github.com/schemeway/lalr-scm +[5] https://www.cs.indiana.edu/chezscheme/syntax-case/old-psyntax.html +[6] https://www.nongnu.org/nyacc/ +[7] https://www.gnu.org/software/guile/docs/master/guile.html/PEG-Parsing.html +[8] https://gitlab.com/janneke/tinycc +[9] https://lists.gnu.org/archive/html/tinycc-devel/2017-05/msg00103.html +[10] http://www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf diff --git a/sysa/mes-0.22/doc/announce/ANNOUNCE-0.12 b/sysa/mes-0.22/doc/announce/ANNOUNCE-0.12 new file mode 100644 index 0000000..f4566bb --- /dev/null +++ b/sysa/mes-0.22/doc/announce/ANNOUNCE-0.12 @@ -0,0 +1,97 @@ +Subject: Mes 0.12 released + +I am pleased to announce the release of Mes 0.12, representing 120 +commits over 20 weeks. MesCC is prototyped running on Guile and can +now run on Mes. Performance of Mes running MesCC has been improved by +a factor of 100; mes.c (~3000 LOC) now compiles in ~4min. Many fixes +and enhancements make that now also TinyCC parses (~1.5h) and compiles +(~20min) with Mes+MesCC (Guile+MesCC takes ~2min). + +Special thanks go to Ricardo Wurmus for sharing the recursive macro +expand perspective and starting work on that, to Han-Wen Nienhuys for +his sharp `Ah, so you skipped SICP chapter 3' remark and to rain1 for +their continuous help on #bootstrapping and their `let's only expand +global variables' insight. + +* About + + Mes[0] aims to create full source bootstrapping for GuixSD[1] as + part of the bootstrappable builds[2] project. + + It currently consists of a mutual self-hosting [close to Guile-] + Scheme interpreter prototype in C and a Nyacc-based C compiler in + [Guile] Scheme. This C prototype will be simplified to be + transpiled by M2-Planet[3]. + + The Scheme interpreter prototype (mes.c) has a Garbage Collector, + a library of loadable Scheme modules-- notably Dominique Boucher's + LALR[4], pre-R6RS portable syntax-case[5] with R7RS ellipsis, Matt + Wette's Nyacc[6], Guile's PEG[7] --and test suite just barely + enough to support a simple REPL (repl.mes) and simple C-compiler + MesCC (mescc.mes). + + MesCC can compile a modified TinyCC[8] that is close to being + self-hosting. A GNU Gcc-compiled tcc is known[9] to compile GCC. + + Mes is inspired by The Maxwell Equations of Software: LISP-1.5[10] + -- John McCarthy page 13, GNU Guix's source/binary packaging + transparency and Jeremiah Orians's stage0[11] ~300 byte self-hosting + hex assembler. + +* Download + + git clone https://gitlab.com/janneke/mes + + wget https://gitlab.com/janneke/mes/repository/archive.tar.gz?ref=v0.12 -O mes-0.12.tar.gz + +Mes runs from the source tree and can also be built, packaged and +installed in Guix[SD] by the usual + + guix package -f guix.scm + +* Changes in 0.12 since 0.11 + ** Core + *** Mes can now run Nyacc (0.80.42) to compile itself in ~4min (~3000 LOC). + *** Mes now recursively expands global variables per top level statement. + *** Mes now recursively expands macros per top level statement. + *** Mes now boots from MES_BOOT (default: module/mes/boot-0.scm). + *** Mes now has a full Scheme reader in C again. + This gives a 10x-20x performance improvement and increases the + bootstrap footprint by 160 LOC. + *** Mes reader now supports older abbreviated character forms + #\bel, #\bs, #\ht and #\vt. + *** 3 new functions + equal2?, memq, core:write. + ** Language + *** Mes now has an incremental Scheme semantics test suite with 71 small tests. + *** Variable names can now have ticks. + *** Mes now evaluates expresions of COND only once. + *** srfi-9 records have been reimplemented. + *** #\page is now whitespace. + *** #<eof> is no longer a character. + *** 2 new macros + define-macro*, with-fluids. + *** 9 new functions + dirname, last, reverse-list->string, setenv, string-drop-right, + string-fold, string-fold-right, string-null?, write. + ** MesCC + **** 9 new functions + chmod, getopt_long, ferror, itoab, longjmp, qsort, setenv, setjmp, strtol. + **** 2 new header files + endian.h, sys/signal.h. + +Greetings, +janneke + +[0] https://gitlab.com/janneke/mes +[1] https://www.gnu.org/software/guix +[2] http://bootstrappable.org +[3] https://github.com/oriansj/m2-planet +[4] https://github.com/schemeway/lalr-scm +[5] https://www.cs.indiana.edu/chezscheme/syntax-case/old-psyntax.html +[6] https://www.nongnu.org/nyacc/ +[7] https://www.gnu.org/software/guile/docs/master/guile.html/PEG-Parsing.html +[8] https://gitlab.com/janneke/tinycc +[9] https://lists.gnu.org/archive/html/tinycc-devel/2017-05/msg00103.html +[10] http://www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf +[11] https://github.com/oriansj/stage0 diff --git a/sysa/mes-0.22/doc/announce/ANNOUNCE-0.13 b/sysa/mes-0.22/doc/announce/ANNOUNCE-0.13 new file mode 100644 index 0000000..ce01658 --- /dev/null +++ b/sysa/mes-0.22/doc/announce/ANNOUNCE-0.13 @@ -0,0 +1,81 @@ +Subject: Mes 0.13 released + +I am pleased to announce the release of Mes 0.13, representing 45 +commits over 3 weeks. MesCC can now compile a functional tcc when +running on Mes (in ~1h45') or on Guile (in ~3min). + +This means that we are getting very close to a full source bootstrap +of tcc: it is now built without gcc, glibc or guile; using only +MesCC-tools and Mes sources and corresponding ascii/binary seeds. + +* About + + Mes[0] aims to help create full source bootstrapping for GuixSD[1] + as part of the bootstrappable builds[2] project. + + It currently consists of a mutual self-hosting Scheme interpreter + prototype in C and a Nyacc-based C compiler in Scheme. This C + prototype is being simplified to be transpiled by M2-Planet[3]. + + The Scheme interpreter prototype (mes.c) has a Garbage Collector, + a library of loadable Scheme modules-- notably Dominique Boucher's + LALR[4], pre-R6RS portable syntax-case[5] with R7RS ellipsis, Matt + Wette's Nyacc[6], Guile's PEG[7] --and test suite just barely + enough to support a simple REPL (repl.mes) and simple C-compiler + MesCC. + + Mes+MesCC can compile a modified TinyCC[8] that is close to being + self-hosting. A GNU Gcc-compiled tcc is known[9] to compile GCC. + + Mes is inspired by The Maxwell Equations of Software: LISP-1.5[10] + -- John McCarthy page 13, GNU Guix's source/binary packaging + transparency and Jeremiah Orians's stage0[11] ~300 byte self-hosting + hex assembler. + +* Download + + git clone https://gitlab.com/janneke/mes + + wget https://gitlab.com/janneke/mes/-/archive/v0.13/mes-0.13.tar.gz + +Mes runs from the source tree and can also be built, packaged and +installed in Guix[SD] by the usual + + guix package -f guix.scm + +* Changes in 0.13 since 0.12 + ** Core + *** Bootstrapped Mes+MesCC can now compile a patched tcc in ~2h30' (~25,000 LOC). + *** MesCC scripts for Mes and Guile are now merged; executable is: `mescc'. + *** Mes now uses only one arena for stop-and-copy; doubles available size. + *** Mes now has a Guile-like command-line interface (mes.repl has been removed). + *** Mes now boots into a full Scheme by default. + *** Mes can now be compiled (MES_MINI=1) to boot into a minimal Scheme (~2000 cells). + *** Mes now creates less garbage in the reader and in + append2, append_reverse, reverse, reverse!, vector-for-each, vector-to-list, vector-map. + *** 5 new functions + append-reverse, chmod, ioctl, isatty, isspace, last_pair, reverse!. + ** Language + *** 3 new functions + char-whitespace?, chmod, isatty? + ** Noteworthy bug fixes + *** Two bugs in the jam scraper/garbage collector have been fixed. + *** equal2_p now uses tail call elimination. + *** Escaped characters in strings are now read and write'd correctly. + *** The repl now expands macros again. + +Greetings, +janneke + +[0] https://gitlab.com/janneke/mes +[1] https://www.gnu.org/software/guix +[2] http://bootstrappable.org +[3] https://github.com/oriansj/m2-planet +[4] https://github.com/schemeway/lalr-scm +[5] https://www.cs.indiana.edu/chezscheme/syntax-case/old-psyntax.html +[6] https://www.nongnu.org/nyacc/ +[7] https://www.gnu.org/software/guile/docs/master/guile.html/PEG-Parsing.html +[8] https://gitlab.com/janneke/tinycc +[9] https://lists.gnu.org/archive/html/tinycc-devel/2017-05/msg00103.html +[10] http://www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf +[11] https://github.com/oriansj/stage0 diff --git a/sysa/mes-0.22/doc/announce/ANNOUNCE-0.14 b/sysa/mes-0.22/doc/announce/ANNOUNCE-0.14 new file mode 100644 index 0000000..39b96f6 --- /dev/null +++ b/sysa/mes-0.22/doc/announce/ANNOUNCE-0.14 @@ -0,0 +1,101 @@ +Subject: Mes 0.14 released + +I am pleased to announce the release of Mes 0.14, representing 98 +commits over 4 weeks. Mes+MesCC now compiles a self-hosting TinyCC +that has only been slightly patched. + +This means that we can now build a tcc that depends only on a 1MB +ASCII M1 seed. GuixSD currently uses a ~250MB binary seed to build +gcc. + +Next targets are: build gcc using this almost full-source bootstrapped +tcc, and reduce the 1MB ASCII M1 seed to ~100KB of M2 source, which is +a restricted subset of C. + +Packages are available from Guix's wip-bootstrap branch. + +* About + + Mes[0] aims to help create full source bootstrapping for GuixSD[1] + as part of the bootstrappable builds[2] project. + + It currently consists of a mutual self-hosting Scheme interpreter + prototype in C and a Nyacc-based C compiler in Scheme. This C + prototype is being simplified to be transpiled by M2-Planet[3]. + + The Scheme interpreter prototype (mes.c) has a Garbage Collector, + a library of loadable Scheme modules-- notably Dominique Boucher's + LALR[4], pre-R6RS portable syntax-case[5] with R7RS ellipsis, Matt + Wette's Nyacc[6], Guile's PEG[7] --and test suite just barely + enough to support a simple REPL (repl.mes) and simple C-compiler + MesCC. + + Mes+MesCC can compile an only slightly patched TinyCC[8] that is + self-hosting. A GNU Gcc-compiled tcc is known[9] to compile GCC. + + Mes is inspired by The Maxwell Equations of Software: LISP-1.5[10] + -- John McCarthy page 13, GNU Guix's source/binary packaging + transparency and Jeremiah Orians's stage0[11] ~300 byte self-hosting + hex assembler. + +* Download + + git clone https://gitlab.com/janneke/mes + + wget https://gitlab.com/janneke/mes/-/archive/v0.14/mes-0.14.tar.gz + +Mes runs from the source tree and can also be built, packaged and +installed in Guix[SD] by the usual + + guix package -f guix.scm + +* Changes in 0.14 since 0.13 + ** Core + *** Bootstrapped Mes+MesCC now compiles a tcc that is self-hosting and only slightly patched. + *** The reader now supports binary numbers (previously: read as decimal). + *** String port support has been moved to C. + *** The build has been simplified, the Make-in-Scheme experiment has been removed. + *** 2 new functions + chmod, logxor. + ** Language + *** Mes now supports define-immutable-record-type and single set-field from srfi-9 gnu. + *** 12 new functions + basename, chmod, const, delete-duplicates, logxor, string-contains, + string-map, string-replace, string-trim, string-trim-both, + string-trim-right, unfold. + ** MesCC + *** MesCC now supports standalone usage of nestedly defined enums, structs and unions. + *** MesCC now supports comparison of unsigned and promotion of signed/unsigned -> unsigned. + *** MesCC now supports sign extension for char, short. + *** MesCC now has stubbing for floats; compiling works, data is fu. + *** MesCC now has full suport for switch case, e.g. with default as first clause. + *** MesCC now supports destruction of casted expressions: ((struct foo*)p)->bar. + *** MesCC now has full support for pre/post, e.g.: (foo--)->bar and permutations. + *** MesCC now supports sizeof any expression or type. + *** MesCC now supports initialization of anonymous unions. + *** MesCC now supports bit fields. + *** MesCC now supports valued functions in expressions: destruction and dereferencing. + *** MesCC now supports function-static variables. + *** MesCC now supports initializer lists in structs and unions. + *** MesCC now has full support for heterogeneous variable declarations, e.g.: char p, *x = "foo", buf[3]; + **** 4 new functions + __lshrdi3, __ashldi3, __ashrdi3, strncpy. + **** 9 new mlibc stubs + __fixdfdi, __fixsfdi, __fixunsxfdi, __fixxfdi, __floatundixf, ldexp, + strtod, strtof, strtold. + +Greetings, +janneke + +[0] https://gitlab.com/janneke/mes +[1] https://www.gnu.org/software/guix +[2] http://bootstrappable.org +[3] https://github.com/oriansj/m2-planet +[4] https://github.com/schemeway/lalr-scm +[5] https://www.cs.indiana.edu/chezscheme/syntax-case/old-psyntax.html +[6] https://www.nongnu.org/nyacc/ +[7] https://www.gnu.org/software/guile/docs/master/guile.html/PEG-Parsing.html +[8] https://gitlab.com/janneke/tinycc +[9] https://lists.gnu.org/archive/html/tinycc-devel/2017-05/msg00103.html +[10] http://www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf +[11] https://github.com/oriansj/stage0 diff --git a/sysa/mes-0.22/doc/announce/ANNOUNCE-0.15 b/sysa/mes-0.22/doc/announce/ANNOUNCE-0.15 new file mode 100644 index 0000000..4648041 --- /dev/null +++ b/sysa/mes-0.22/doc/announce/ANNOUNCE-0.15 @@ -0,0 +1,106 @@ +Subject: Mes 0.15 released + +I am pleased to announce the release of Mes 0.15, representing 45 +commits over 3 weeks. The GNU toolchain is getting bootstrapped! + +As of 0.14, Mes+MesCC compiles a self-hosting TinyCC. Using the 0.15 +Mes C library, this TinyCC can build the GNU tools triplet: +binutils-2.14, gcc-2.95.3, glibc-2.2.5. + +This means that we can build a GNU toolchain that depends only on a +critical 1MB ASCII M1 seed. GuixSD currently uses a ~250MB binary +seed to build gcc. + +Next targets are: upstream the Mes bootstrap to GuixSD, build a +Gcc-4.7 and Glibc-2.23, bootstrap utilities like bison, flex, grep, +sed..., replace GuixSD's bootstrap for x86 and reduce the 1MB ASCII M1 +seed to ~5000 LOC/~100KB of M2 source, which is a restricted subset of +C. + +Packages are available from Guix's wip-bootstrap branch. + +* About + + Mes[0] aims to help create full source bootstrapping for GuixSD[1] + as part of the bootstrappable builds[2] project. + + It currently consists of a mutual self-hosting Scheme interpreter + prototype in C and a Nyacc-based C compiler in Scheme. This C + prototype is being simplified to be transpiled by M2-Planet[3]. + + The Scheme interpreter prototype (mes.c) has a Garbage Collector, + a library of loadable Scheme modules-- notably Dominique Boucher's + LALR[4], pre-R6RS portable syntax-case[5] with R7RS ellipsis, Matt + Wette's Nyacc[6], Guile's PEG[7] --and test suite just barely + enough to support a simple REPL (repl.mes) and simple C-compiler + MesCC. + + Mes+MesCC can compile an only slightly patched TinyCC[8] that is + self-hosting. Using the Mes C library, this tcc can now build the + GNU tools triplet: binutils-2.14, gcc-2.95.3, glibc-2.2.5. + + Mes is inspired by The Maxwell Equations of Software: LISP-1.5[9] + -- John McCarthy page 13, GNU Guix's source/binary packaging + transparency and Jeremiah Orians's stage0[10] ~300 byte self-hosting + hex assembler. + +* Download + + git clone https://gitlab.com/janneke/mes + + wget https://gitlab.com/janneke/mes/-/archive/v0.15/mes-0.15.tar.gz + +Mes runs from the source tree and can also be built, packaged and +installed in Guix[SD] by the usual + + guix package -f guix.scm + +* Changes in 0.15 since 0.14 + ** Core + *** Support fork, exec, waitpid. + *** Boot-0 loading has been refactored. + *** MesCC now has out of the box Geiser support. + ** Language + *** 2 new functions + drop, drop-right. + ** MesCC + *** MesCC and Mes Lib C can now build binutils-2.30, gcc-2.95.3 and glibc-2.2.5. + *** MesCC now provides dummy crti.o, crtn.o so that tcc needs not be patched for those. + *** Mes Lib C now supports compiling glibc-2.2.25. + *** Mes Lib C now supports compiling gcc-2.95.3 + *** Mes Lib C now supports compiling binutils-2.30. + *** Mes Lib C now supports compiling m4-1.4. + *** Mes Lib C has been split into archs: gcc, x86-mes-gcc and x86-mes. + *** MesCC now has a posixy command line interface. + **** 70 new functions + abs, access, alarm, alloca, atexit, atol, bcmp, bcopy, brk, bzero, + chmod, clearerr, close, dup, dup2, execve, fabs, fcntl, fdgets, feof, + fgets, fileno, fork, freopen, fscanf, fstat, fsync, getcwd, getgid, + getpid, getrusage, getuid, index, ioctl, isalnum, isalpha, isascii, + iscntrl, isprint, ispunct, kill, link, lseek, lstat, mkdir, mktemp, + nanosleep, open, perror, pipe, raise, read, rename, rindex, rmdir, + sbrk, sbrk, setitimer, signal, sleep, stat, strcspn, strdup, strerror, + strncat, strpbrk, strspn, unlink, unsetenv, waitpid. + **** 23 new stubs + abort, atof, bsearch, bsearch, chown, ctime, fpurge, freadahead, + frexp, getpwnam, gmtime, mbstowcs, pclose, popen, rewind, setbuf, + sigsetmask, strftime, sys_siglist, system, times, umask, utime. + **** 10 new C tests + 51-strcmp.c, 70-printf.c, 87-sscanf.c, 90-strpbrk.c, 91-fseek.c, + 92-stat.c, 93-fread-fwrite.c, 94-unsetenv.c, 95-signal.c, 96-strto.c. + + +Greetings, +janneke + +[0] https://gitlab.com/janneke/mes +[1] https://www.gnu.org/software/guix +[2] http://bootstrappable.org +[3] https://github.com/oriansj/m2-planet +[4] https://github.com/schemeway/lalr-scm +[5] https://www.cs.indiana.edu/chezscheme/syntax-case/old-psyntax.html +[6] https://www.nongnu.org/nyacc/ +[7] https://www.gnu.org/software/guile/docs/master/guile.html/PEG-Parsing.html +[8] https://gitlab.com/janneke/tinycc +[9] http://www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf +[10] https://github.com/oriansj/stage0 diff --git a/sysa/mes-0.22/doc/announce/ANNOUNCE-0.16 b/sysa/mes-0.22/doc/announce/ANNOUNCE-0.16 new file mode 100644 index 0000000..b0e6a1e --- /dev/null +++ b/sysa/mes-0.22/doc/announce/ANNOUNCE-0.16 @@ -0,0 +1,100 @@ +Subject: Mes 0.16 released + +I am pleased to announce the release of Mes 0.16, representing 27 +commits over 2 weeks. + +A most annoying ELF header bug was fixed that suddenly had all Mes +binaries segfault before entering `_start' on Linux 4.17 and later. + +We now have binutils-2.20.1 and gcc-4.1.0, both compiled with +gcc-2.95.3 and glibc-2.2.5. + +This reduced-binary-seed bootstrap still depends on these bootstrap +binaries: BOOTSTRAP-GUILE, flex, bash, bzip2, coreutils, diffutils, +gawk, grep, gzip, make, sed, tar, on the small binary seeds: +tinycc-seed, mescc-seed and on the mes.M1 ASCII seed. + +Next targets: + + - build a Gcc 4.7 and Glibc 2.23 + - upstream the x86 Mes bootstrap to GuixSD + - reduce the 1MB ASCII M1 seed to ~5000 LOC/~100KB of M2 source + - revive Gash: a posix shell for Guile to reduce the bootstrap binary + dependencies + - and/or otherwise reduce the bootstrap binary dependencies + +Packages are available from Guix's wip-bootstrap branch. + +* About + +Mes[0] aims to help create full source bootstrapping for GuixSD[1] as +part of the bootstrappable builds[2] effort. + +It currently consists of a mutual self-hosting Scheme interpreter +prototype written in C and a Nyacc-based C compiler written in Scheme. +This C prototype is being simplified[3] to be transpiled by M2-Planet[4]. + +The Scheme interpreter prototype (mes.c) has a Garbage Collector, a +library of loadable Scheme modules-- notably Dominique Boucher's LALR[5], +Pre-R6RS portable syntax-case[6] with R7RS ellipsis, Matt Wette's Nyacc[7], +Guile's PEG[8] --and test suite just barely enough to support a simple +REPL and simple C-compiler: MesCC. + +Mes+MesCC can compile an only lighty patched TinyCC[9] that is +self-hosting. Using this tcc and the Mes C library we now have a +reduced-binary-seed bootstrap for the gnutools triplet: glibc-2.2.5, +binutils-2.20.1, gcc-4.1.0. + +Mes is inspired by The Maxwell Equations of Software: LISP-1.5[10] -- +John McCarthy page 13, GNU Guix's source/binary packaging transparency +and Jeremiah Orians's stage0[11] ~500 byte self-hosting hex assembler. + +* Download + + git clone https://gitlab.com/janneke/mes + + wget https://gitlab.com/janneke/mes/-/archive/v0.16/mes-0.16.tar.gz + +Mes runs from the source tree and can also be built, packaged and +installed in Guix[SD] by the usual + + guix package -f guix.scm + +* Get informed, get involved + + Join #bootstrappable on irc.freenode.net. + +* Changes in 0.16 since 0.15 + ** Core + *** Support building with tcc, including Mes Lib C in-line assembly. + *** core:execl now supports 1000 arguments. + ** MesCC + *** Mes Lib C now bootstraps glibc-2.2.5, binutils-2.20.1, gcc-4.1.0. + *** MesCC binaries now run on Linux 4.17 too, i.e. survive Linus' new `sane mmap limits.' + *** MesCC now runs with mescc-tools 0.5 (no = in long options). + **** 3 new C test + 88-strrchrc, 97-fopen.c, 98-fopen.c. + ** Noteworthy bug fixes + *** strrchr now stops when it reaches start of string. + *** fopen now return 0 upon failure. Supports binutils' hack: fd=-2 means `cached'. + *** vfprintf, vsprintf now support precision and width on integers strings better. + *** fread now produces ungetc'd chars too. + *** memcmp now supports comparing 0 bytes, supporting binutils. + + *** The unused ELF header data section, identical to the text section, has been removed. + +Greetings, +janneke + +[0] https://gitlab.com/janneke/mes +[1] https://www.gnu.org/software/guix +[2] http://bootstrappable.org +[3] https://github.com/oriansj/mes-m2 +[4] https://github.com/oriansj/m2-planet +[5] https://github.com/schemeway/lalr-scm +[6] https://www.cs.indiana.edu/chezscheme/syntax-case/old-psyntax.html +[7] https://www.nongnu.org/nyacc +[8] https://www.gnu.org/software/guile/docs/master/guile.html/PEG-Parsing.html +[9] https://gitlab.com/janneke/tinycc +[10] http://www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf +[11] https://github.com/oriansj/stage0 diff --git a/sysa/mes-0.22/doc/announce/ANNOUNCE-0.17 b/sysa/mes-0.22/doc/announce/ANNOUNCE-0.17 new file mode 100644 index 0000000..915693d --- /dev/null +++ b/sysa/mes-0.22/doc/announce/ANNOUNCE-0.17 @@ -0,0 +1,113 @@ +Subject: GNU Mes 0.17 released + +<#secure method=pgpmime mode=sign> +We are delighted to announce the release of GNU Mes 0.17, representing +64 commits over 6 weeks. + +Mes is now an official GNU package and we have bootstrapped gcc-4.7.4 +for x86-linux with a reduced binary seed (i.e., without regular toolchain). + +Next targets: + + - upstream the x86 Mes bootstrap to GuixSD + - create a x86_64 Mes C Lib, see if that is is enough to bootstrap x86_64 + - reduce the 1MB ASCII M1 seed to ~5000 LOC/~100KB of M2 source + - create a plan for Geesh and Gash and use them to reduce the + bootstrap binary dependencies + - and/or otherwise reduce the bootstrap binary dependencies + +Packages are available from Guix's wip-bootstrap branch. + +* About + +GNU Mes[0] aims to help create full source bootstrapping for GNU/Linux +distributions such as GuixSD[1] as part of the bootstrappable builds[2] +effort. + +It consists of a mutual self-hosting Scheme interpreter written in +~5,000 LOC of simple C and a Nyacc-based C compiler written in Scheme. +This mes.c is being simplified[3] to be transpiled by M2-Planet[4]. + +The Scheme interpreter (mes.c) has a Garbage Collector, a library of +loadable Scheme modules-- notably Dominique Boucher's LALR[5], +Pre-R6RS portable syntax-case[6] with R7RS ellipsis, Matt Wette's +Nyacc[7] --and test suite just barely enough to support a simple REPL +and simple C-compiler: MesCC. + +Mes+MesCC can compile an only lightly patched TinyCC[8] that is +self-hosting. Using this tcc and the Mes C library we now have a +reduced-binary-seed bootstrap for the gnutools triplet: glibc-2.2.5, +binutils-2.20.1, gcc-4.7.4. + +Mes is inspired by The Maxwell Equations of Software: LISP-1.5[9] -- +John McCarthy page 13, GNU Guix's source/binary packaging transparency +and Jeremiah Orians's stage0[10] ~500 byte self-hosting hex assembler. + +* Download + + git clone git://git.savannah.gnu.org/mes.git + + Here are the compressed sources and a GPG detached signature[*]: + https://ftp.gnu.org/gnu/mes/mes-0.17.tar.gz + https://ftp.gnu.org/gnu/mes/mes-0.17.tar.gz.sig + + Use a mirror for higher download bandwidth: + https://www.gnu.org/order/ftp.html + + Here are the MD5 and SHA1 checksums: + + 93ca82612e203fd667dfbdfb83c06549 mes-0.17.tar.gz + d38ec93ab6dc2c92a5c5e96fef7f9295972772c2 mes-0.17.tar.gz + + [*] Use a .sig file to verify that the corresponding file (without the + .sig suffix) is intact. First, be sure to download both the .sig file + and the corresponding tarball. Then, run a command like this: + + gpg --verify mes-0.17.tar.gz.sig + + If that command fails because you don't have the required public key, + then run this command to import it: + + gpg --keyserver keys.gnupg.net --recv-keys 1A858392E331EAFDB8C27FFBF3C1A0D9C1D65273 + + and rerun the 'gpg --verify' command. + +Mes runs from the source tree and can also be built, packaged and +installed in Guix[SD] from a git checkout by running + + guix package -f .guix.scm + +* Get informed, get involved + + Join #bootstrappable on irc.freenode.net. + +* Changes in 0.17 since 0.16.1 + ** Core + *** GNU Mes is now an official GNU package. + *** MesCC is now installed as a regular Guile package. + *** Support --srcdir build. + *** Support all standard GNU make targets. + ** MesCC + *** Mes C Lib now bootstraps glibc-2.2.5, binutils-2.20.1, gcc-4.7.4. +* Changes in 0.16.1 since 0.16 + ** Core + *** Mes now builds out of the box on Debian buster/testing. + *** Mes now comes with a generic build recipe: build-aux/setup-mes.sh. + *** Mes now comes with INFO documentation. + ** MesCC + *** MesCC now exits if spawning BLOOD_ELF, M1, or HEX2 fails. + +Greetings, +janneke + +[0] https://www.gnu.org/software/mes +[1] https://www.gnu.org/software/guix +[2] http://bootstrappable.org +[3] https://github.com/oriansj/mes-m2 +[4] https://github.com/oriansj/m2-planet +[5] https://github.com/schemeway/lalr-scm +[6] https://www.cs.indiana.edu/chezscheme/syntax-case/old-psyntax.html +[7] https://www.nongnu.org/nyacc +[8] https://gitlab.com/janneke/tinycc +[9] http://www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf +[10] https://github.com/oriansj/stage0 diff --git a/sysa/mes-0.22/doc/announce/ANNOUNCE-0.18 b/sysa/mes-0.22/doc/announce/ANNOUNCE-0.18 new file mode 100644 index 0000000..193f8d7 --- /dev/null +++ b/sysa/mes-0.22/doc/announce/ANNOUNCE-0.18 @@ -0,0 +1,133 @@ + +Subject: GNU Mes 0.18 released + +<#secure method=pgpmime mode=sign> +We are pleased to announce the release of GNU Mes 0.18, representing +83 commits over 8 weeks. + +Mes is now bringing a Reduced Binary Seed bootstrap to GuixSD; the +size of bootstrap binaries has been halved and no regular toolchain +binaries are used as binary seeds (i686-linux and x86_64-linux only). + +MesCC has been refactored to use an abstracted assembly language and +can now (cross-)build x86_64 binaries. + +Next targets: + + - reduce the 1MB ASCII M1 seed to ~5000 LOC/~100KB of M2 source + - revive Gash/Geesh and use it to decimate the remaining bootstrap + binary seeds + - and/or otherwise reduce the bootstrap binaries + - ARM, the Hurd? + +Packages are available from Guix's core-updates-next branch. + +* About + + GNU Mes[0] brings a Reduced Binary Seed bootstrap[1] to GuixSD[2] and + potentially to any other interested GNU/Linux distribution, and aims + to help create a full source bootstrap as part of the + bootstrappable builds[3] effort. + + It consists of a mutual self-hosting Scheme interpreter written in + ~5,000 LOC of simple C and a Nyacc-based C compiler written in Scheme. + This mes.c is being simplified[4] to be transpiled by M2-Planet[5]. + + The Scheme interpreter (mes.c) has a Garbage Collector, a library of + loadable Scheme modules-- notably Dominique Boucher's LALR[6], Pre-R6RS + [portable syntax-case[7] with R7RS ellipsis, Matt Wette's Nyacc[8] --and test + suite just barely enough to support a simple REPL and simple + C-compiler: MesCC. + + Mes+MesCC can compile an only lightly patched TinyCC[9] that is + self-hosting. Using this tcc and the Mes C library we now have a + Reduced Binary Seed bootstrap for the gnutools triplet: glibc-2.2.5, + binutils-2.20.1, gcc-2.95.3. This is enough to bootstrap GuixSD for + i686-linux and x86_64-linux. + + Mes is inspired by The Maxwell Equations of Software: LISP-1.5[10] -- John + McCarthy page 13, GNU Guix's source/binary packaging transparency and + Jeremiah Orians's stage0[11] ~500 byte self-hosting hex assembler. + +* Download + + git clone git://git.savannah.gnu.org/mes.git + + Here are the compressed sources and a GPG detached signature[*]: + https://ftp.gnu.org/gnu/mes/mes-0.18.tar.gz + https://ftp.gnu.org/gnu/mes/mes-0.18.tar.gz.sig + + Use a mirror for higher download bandwidth: + https://ftpmirror.gnu.org/mes/mes-0.18.tar.gz + https://ftpmirror.gnu.org/mes/mes-0.18.tar.gz.sig + + Here are the MD5 and SHA1 checksums: + + f9f901f175fbc8a5a3d90c9c551ccc8c mes-0.18.tar.gz + 4f7612731a745ebb806548186453d55e0d0bf217 mes-0.18.tar.gz + + [*] Use a .sig file to verify that the corresponding file (without the + .sig suffix) is intact. First, be sure to download both the .sig file + and the corresponding tarball. Then, run a command like this: + + gpg --verify mes-0.18.tar.gz.sig + + If that command fails because you don't have the required public key, + then run this command to import it: + + gpg --keyserver keys.gnupg.net --recv-keys 1A858392E331EAFDB8C27FFBF3C1A0D9C1D65273 + + and rerun the 'gpg --verify' command. + +Mes runs from the source tree and can also be built, packaged and +installed in Guix[SD] from a git checkout by running + + guix package -f .guix.scm + +* Get informed, get involved + + Join #bootstrappable on irc.freenode.net. + +* Changes in 0.18 since 0.17.1 + ** Core + *** Mes/MesCC now supports x86_64. + *** Mes/MesCC now brings a Reduced Binary Seed bootstrap to GuixSD. + ** Language + *** fold-right now supports 3 lists. + ** MesCC + *** MesCC now supports x86_64 (also as cross build), using -m 64. + *** Mes C Library now has better support for bootstrapping gcc-3.0. + *** Mes C test suite now has 178 tests; 74 tests were added. + *** MesCC has been refactored to support use an abstracted assembly language. + *** MesCC now uses Nyacc 0.86.0. + ** Noteworthy bug fixes + *** scaffold/tests/7s-struct-short.c has been fixed. +* Changes in 0.17.1 since 0.17 + ** MesCC + *** Mes C Library has now been exploded into a separate C file per function. + *** Mes C Library now bootstraps glibc-2.16.0, binutils-2.20.1, gcc-4.7.4. + *** Mes C Library now supports compiling make-3.82. + *** Mes C Library now supports compiling diffutils-2.7. + *** Mes C Library now supports x86_64. + **** 7 new functions + chdir, clock_gettime, closedir, execl, opendir, readdir, time. + **** 5 new stubs + getlogin, setlocale, setvbuf, sigaddset, sigblock. + ** Noteworthy bug fixes + *** qsort can now handle lists with duplicate entries. + +Greetings, +janneke + +[0] https://www.gnu.org/software/mes +[1] http://joyofsource.com/reduced-binary-seed-bootstrap.html +[2] https://www.gnu.org/software/guix +[3] https://bootstrappable.org +[4] https://github.com/oriansj/mes-m2 +[5] https://github.com/oriansj/m2-planet +[6] https://github.com/schemeway/lalr-scm +[7] https://www.cs.indiana.edu/chezscheme/syntax-case/old-psyntax.html +[8] https://www.nongnu.org/nyacc +[9] https://gitlab.com/janneke/tinycc +[10] http://www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf +[11] https://github.com/oriansj/stage0 diff --git a/sysa/mes-0.22/doc/announce/ANNOUNCE-0.19 b/sysa/mes-0.22/doc/announce/ANNOUNCE-0.19 new file mode 100644 index 0000000..c46c246 --- /dev/null +++ b/sysa/mes-0.22/doc/announce/ANNOUNCE-0.19 @@ -0,0 +1,155 @@ + +Subject: GNU Mes 0.19 released + +<#secure method=pgpmime mode=sign> +We are pleased to announce the release of GNU Mes 0.19, representing +100 commits over 10 weeks. + +Mes has now brought the Reduced Binary Seed bootstrap to Guix (bootstrap +a GNU/Linux system without binary GNU toolchain or equivalent) and work +is ongoing to audit and verify this bootstrap path in NixOS. + +This release introduces strings as byte-array, hash-tables and native +structs. While that does increase the footprint somewhat, it fixes +our performance issue; tinycc is now compiled in ~8min (WAS: ~1h30). + +Next targets: + + - translate mes.c into unsnarfed mes.M2 + - use Gash to remove bash, coreutils&co, grep, sed, tar from the Guix + bootstrap binaries + - replace the NixOS bootstrap + - use dietlibc, uClibc, ... for bootstrapping GNU (bash, binutils, + gcc, tar) and remove Mes C lib+gnu? + - bootstrap gcc-3.x or 4.x directly, drop initial gcc-2.95.3 target? + - have M1+hex2 create gcc/tcc-usable object files? archives? + - Debian? + - ARM, the Hurd? + +Packages are available from Guix's core-updates branch. + +* About + + GNU Mes[0] brings a Reduced Binary Seed bootstrap[1] to Guix[2] and + potentially to any other interested GNU/Linux distribution, and aims + to help create a full source bootstrap as part of the + bootstrappable builds[3] effort. + + It consists of a mutual self-hosting Scheme interpreter written in + ~5,000 LOC of simple C and a Nyacc-based C compiler written in Scheme. + This mes.c is being simplified[4] to be transpiled by M2-Planet[5]. + + The Scheme interpreter (mes.c) has a Garbage Collector, a library of + loadable Scheme modules-- notably Dominique Boucher's LALR[6], Pre-R6RS + [portable syntax-case[7] with R7RS ellipsis, Matt Wette's Nyacc[8] --and test + suite just barely enough to support a simple REPL and simple + C-compiler: MesCC. + + Mes+MesCC can compile an only lightly patched TinyCC[9] that is + self-hosting. Using this tcc and the Mes C library we now have a + Reduced Binary Seed bootstrap for the gnutools triplet: glibc-2.2.5, + binutils-2.20.1, gcc-2.95.3. This is enough to bootstrap Guix for + i686-linux and x86_64-linux. + + Mes is inspired by The Maxwell Equations of Software: LISP-1.5[10] -- John + McCarthy page 13, GNU Guix's source/binary packaging transparency and + Jeremiah Orians's stage0[11] ~500 byte self-hosting hex assembler. + +* Download + + git clone git://git.savannah.gnu.org/mes.git + + Here are the compressed sources and a GPG detached signature[*]: + https://ftp.gnu.org/gnu/mes/mes-0.19.tar.gz + https://ftp.gnu.org/gnu/mes/mes-0.19.tar.gz.sig + + Use a mirror for higher download bandwidth: + https://ftpmirror.gnu.org/mes/mes-0.19.tar.gz + https://ftpmirror.gnu.org/mes/mes-0.19.tar.gz.sig + + Here are the MD5 and SHA1 checksums: + + 99e134df87adc5fc5fd2c04941929c23 mes-0.19.tar.gz + c9781b3b6a814acc985c2ac68caa111a56583bca mes-0.19.tar.gz + + [*] Use a .sig file to verify that the corresponding file (without the + .sig suffix) is intact. First, be sure to download both the .sig file + and the corresponding tarball. Then, run a command like this: + + gpg --verify mes-0.19.tar.gz.sig + + If that command fails because you don't have the required public key, + then run this command to import it: + + gpg --keyserver keys.gnupg.net --recv-keys 1A858392E331EAFDB8C27FFBF3C1A0D9C1D65273 + + and rerun the 'gpg --verify' command. + +Mes runs from the source tree and can also be built, packaged and +installed in Guix from a git checkout by running + + guix package -f .guix.scm + +* Get informed, get involved + + See https://bootstrappable.org + Join #bootstrappable on irc.freenode.net. + +* Changes in 0.19 since 0.18 + ** Core + *** The build system has been simplified. + *** Mes now prints a backtrace upon error. + *** Performance has been improved 2-8 times, making Mes 2-10 times slower than Guile. + *** Mes now supports a module type and uses a `boot-module'. + *** Mes now supports a hash_table type. + *** Mes now supports a struct type. + *** Mes now supports building a %bootstrap-mes seed from Guix. + ** Language + *** Records are now implemented using struct (WAS: vector). + *** 44 new functions + ceil, char-downcase, char-set-adjoin, char-set-complement, + char-upcase, current-time, delete-file, dup, dup2, file-exists?, + floor, frame-printer, get-internal-run-time, getcwd, gettimeofday, + hash, hash-ref, hash-set!, hash-table-printer, hashq, + hashq-get-handle, hashq-ref, hashq-set, inexact->exact, + make-hash-table, make-stack, make-struct, module-define!, + module-printer, module-ref, module-variable, read-line, round, + stack-length, stack-ref, string-downcase, string-tokenize, + string-upcase, struct-length, struct-ref, struct-set! struct-vtable, + struct-vtable, with-error-to-file. + ** MesCC + *** Assembly defines have been cleaned-up: duplicates deleted, missing added, wrong fixed. + *** MesCC now supports compiling GNU Bash and GNU Tar. + **** 6 New functions + getegid, geteuid, getppid, setgid, setuid, sigdelset, sigprocmask. + **** 22 New macros + EACCES, ENOSPC, ESPIPE, INT16_MAX, INT16_MIN, INT32_MAX, INT32_MIN, + INT64_MAX, INT64_MIN, INT8_MAX, INT8_MIN, LLONG_MAX, LLONG_MIN, + SIZE_MAX SYS_getegid, SYS_geteuid, SYS_setgid SYS_setuid, S_IRGRP, + S_IROTH, S_IRWXG, S_IRWXO S_ISGID, S_ISUID, S_IWGRP, S_IWOTH, S_IXGRP, + S_IXOTH, UINT16_MAX, UINT32_MAX, UINT64_MAX, UINT8_MAX, + _POSIX_VERSION. + ** Noteworthy bug fixes + *** Mes now supports characters #\xNN. + *** Mes now supports assq-ref and assoc-ref with alist == #f. + *** Mes now supports \xNN in strings. This allows using Nyacc-0.86.0. + *** MesCC now supports the unary plus operator. + *** MesCC now supports the `U' integer suffix. + *** MesCC now comes with INTnn_MIN/MAX, UINTnn defines in stdint.h. + *** MesCC now always exits non-zero when assembler or linker fail. + +Greetings, +janneke + +[0] https://www.gnu.org/software/mes +[1] http://joyofsource.com/reduced-binary-seed-bootstrap.html +[2] https://www.gnu.org/software/guix +[3] https://bootstrappable.org +[4] https://github.com/oriansj/mes-m2 +[5] https://github.com/oriansj/m2-planet +[6] https://github.com/schemeway/lalr-scm +[7] https://www.cs.indiana.edu/chezscheme/syntax-case/old-psyntax.html +[8] https://www.nongnu.org/nyacc +[9] https://gitlab.com/janneke/tinycc +[10] http://www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf +[11] https://github.com/oriansj/stage0 diff --git a/sysa/mes-0.22/doc/announce/ANNOUNCE-0.20 b/sysa/mes-0.22/doc/announce/ANNOUNCE-0.20 new file mode 100644 index 0000000..1a427c1 --- /dev/null +++ b/sysa/mes-0.22/doc/announce/ANNOUNCE-0.20 @@ -0,0 +1,133 @@ + +Subject: GNU Mes 0.20 released + +<#secure method=pgpmime mode=sign> + +We are pleased to announce the release of GNU Mes 0.20, representing +147 commits over 38 weeks. + +Mes has now brought the Reduced Binary Seed bootstrap to Guix (bootstrap +a GNU/Linux system without binary GNU toolchain or equivalent). It +should land in Guix master any day now: a big thank you to everyone who +helped, notably Ludovic and Mark. + +This release is a step towards the upcoming Scheme-only bootstrap and +bringing Mes into NixOS and Debian. This effort is now sponsored by +NLnet[12]. + +Next targets: + + - ARM support + - Reduced Binary Seed bootstrap for ARM + - Scheme-only bootstrap: use Guile and Gash to remove bash, + coreutils&co, grep, sed, etc. from the Guix bootstrap binaries + - mes-m2: port Mes.c to M2-Planet + - Introduce Reduced Binaries Seed bootstrap to NixOS + - Debian? + - Hurd + +Packages are available in Guix master. + +* About + + GNU Mes[0] brings a Reduced Binary Seed bootstrap[1] to GNU Guix[2] + and potentially to any other interested GNU/Linux distribution, and + aims to help create a full source bootstrap as part of the + bootstrappable builds[3] effort. + + It consists of a mutual self-hosting Scheme interpreter written in + ~5,000 LOC of simple C and a Nyacc-based C compiler written in Scheme. + This mes.c is being simplified[4] to be transpiled by M2-Planet[5]. + + The Scheme interpreter (mes.c) has a Garbage Collector, a library of + loadable Scheme modules-- notably Dominique Boucher's LALR[6], Pre-R6RS + [portable syntax-case[7] with R7RS ellipsis, Matt Wette's Nyacc[8] --and test + suite just barely enough to support a simple REPL and simple + C-compiler: MesCC. + + Mes+MesCC can compile an only lightly patched TinyCC[9] that is + self-hosting. Using this tcc and the Mes C library we now have a + Reduced Binary Seed bootstrap for the gnutools triplet: glibc-2.2.5, + binutils-2.20.1, gcc-2.95.3. This is enough to bootstrap Guix for + i686-linux and x86_64-linux. + + Mes is inspired by The Maxwell Equations of Software: LISP-1.5[10] -- John + McCarthy page 13, GNU Guix's source/binary packaging transparency and + Jeremiah Orians's stage0[11] ~500 byte self-hosting hex assembler. + +* Download + + git clone git://git.savannah.gnu.org/mes.git + + Here are the compressed sources and a GPG detached signature[*]: + https://ftp.gnu.org/gnu/mes/mes-0.20.tar.gz + https://ftp.gnu.org/gnu/mes/mes-0.20.tar.gz.sig + + Use a mirror for higher download bandwidth: + https://ftpmirror.gnu.org/mes/mes-0.20.tar.gz + https://ftpmirror.gnu.org/mes/mes-0.20.tar.gz.sig + + Here are the MD5 and SHA1 checksums: + + df839a83e4a2ad6c2a4accc5bf17b1a7 mes-0.20.tar.gz + 38d4cb3fa28fa1f5fc57fea9e046d4d8052bbb8c mes-0.20.tar.gz + + [*] Use a .sig file to verify that the corresponding file (without the + .sig suffix) is intact. First, be sure to download both the .sig file + and the corresponding tarball. Then, run a command like this: + + gpg --verify mes-0.20.tar.gz.sig + + If that command fails because you don't have the required public key, + then run this command to import it: + + gpg --keyserver keys.gnupg.net --recv-keys 1A858392E331EAFDB8C27FFBF3C1A0D9C1D65273 + + and rerun the 'gpg --verify' command. + +* Get informed, get involved + + See https://bootstrappable.org + Join #bootstrappable on irc.freenode.net. + +* Changes in 0.20 since 0.19 + ** Core + *** The build system has been simplified, again. + Mes now builds ootb on Debian. + *** Mes now supports -c EXPR. + ** Divide by zero is now flagged. + ** Language + *** 1 new function: + take-while. + ** MesCC + *** The C libraries have been exploded into one function per file. + *** MesCC now has enhanced POSIX/gcc comand line support, e.g. -DFOO=1, + -nodefaultlibs, -nostartfiles, -nostdlib. + *** The archiver is now called `mesar'. + *** MesCC now supports Nyacc-0.99. + *** MesCC now depends on MesCC-Tools 0.6.0. + *** 1 new function + __mesabi_uldiv. + ** Noteworthy bug fixes + *** interger division has been fixed. + *** isatty now looks at terminfo. + *** signal now uses sigaction correctly for non-x86. + *** string->number now support #x hex-prefix. + *** ungetc now has a buffer per file handle. + +Greetings, +janneke and Danny. + +[0] https://www.gnu.org/software/mes +[1] http://joyofsource.com/reduced-binary-seed-bootstrap.html +[2] https://www.gnu.org/software/guix +[3] https://bootstrappable.org +[4] https://github.com/oriansj/mes-m2 +[5] https://github.com/oriansj/m2-planet +[6] https://github.com/schemeway/lalr-scm +[7] https://www.cs.indiana.edu/chezscheme/syntax-case/old-psyntax.html +[8] https://www.nongnu.org/nyacc +[9] https://gitlab.com/janneke/tinycc +[10] http://www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf +[11] https://savannah.nongnu.org/projects/stage0 +[12] https://nlnet.nl/project/GNUMes diff --git a/sysa/mes-0.22/doc/announce/ANNOUNCE-0.21 b/sysa/mes-0.22/doc/announce/ANNOUNCE-0.21 new file mode 100644 index 0000000..6cf75d4 --- /dev/null +++ b/sysa/mes-0.22/doc/announce/ANNOUNCE-0.21 @@ -0,0 +1,132 @@ + +Subject: GNU Mes 0.21 released + +<#secure method=pgpmime mode=sign> + +We are pleased to announce the release of GNU Mes 0.21, representing +54 commits over 10 weeks. + +Mes has now brought the Reduced Binary Seed bootstrap to Guix (bootstrap +a GNU/Linux system without binary GNU toolchain or equivalent). See +https://guix.gnu.org/blog/2019/guix-reduces-bootstrap-seed-by-50/ + +This release supports a Scheme-only bootstrap: Mes can now be built with +Gash and the experimental Gash Core Utils instead of using GNU Awk, GNU +Bash, the GNU Core Utilities, GNU Grep, GNU Gzip, GNU Make, GNU SED, and +GNU Tar. Also, the Mes C Library now supports bootstrapping those. +Finally, this release brings Mes as a package to Debian GNU/Linux. + +We are excited that the Nlnet Foundation[12] is now sponsoring this +work! + +Next targets: + + - Introduce the Reduced Binaries Seed bootstrap to NixOS (Debian, + Gentoo, ...?) + - Scheme-only bootstrap: use Guile, Gash and Gash Core Utils to remove + awk, bash, core utilities, grep, gzip, make, sed, tar, etc. from the + Guix bootstrap binaries + - ARM support + - Full Source Bootstrap: compile Mes.c using M2-Planet + - Reduced Binary Seed bootstrap for ARM + - the Hurd + +Packages are available in Guix master. + +* About + + GNU Mes[0] brings a Reduced Binary Seed bootstrap[1] to GNU Guix[2]. + This bootstrap has halved the size of opaque, uninspectable binaries + that were needed to bootstrap Guix 1.0. The final goal is to help + create a full source bootstrap as part of the bootstrappable builds[3] + effort for any interested UNIX-like operating system. + + Mes consists of a mutual self-hosting Scheme interpreter written in + ~5,000 LOC of simple C, and a C compiler written in Scheme. This + mes.c is being simplified[4] to be transpiled by M2-Planet[5]. + + The Scheme interpreter has a Garbage Collector, a library of loadable + Scheme modules-- notably Dominique Boucher's LALR[6], Pre-R6RS + [portable syntax-case[7] with R7RS ellipsis, Matt Wette's Nyacc[8] + --and test suite, just enough to support a REPL and a C99 compiler: + MesCC. + + Mes+MesCC can compile an only lightly patched TinyCC[9] that is + self-hosting. Using this tcc and the Mes C library we now have a + Reduced Binary Seed bootstrap for the gnutools triplet: glibc-2.2.5, + binutils-2.20.1, gcc-2.95.3. This is enough to bootstrap Guix for + i686-linux and x86_64-linux. + + Mes is inspired by The Maxwell Equations of Software: LISP-1.5[10] -- John + McCarthy page 13, GNU Guix's source/binary packaging transparency and + Jeremiah Orians's stage0[11] ~500 byte self-hosting hex assembler. + +* Download + + git clone git://git.savannah.gnu.org/mes.git + + Here are the compressed sources and a GPG detached signature[*]: + https://ftp.gnu.org/gnu/mes/mes-0.21.tar.gz + https://ftp.gnu.org/gnu/mes/mes-0.21.tar.gz.sig + + Use a mirror for higher download bandwidth: + https://ftpmirror.gnu.org/mes/mes-0.21.tar.gz + https://ftpmirror.gnu.org/mes/mes-0.21.tar.gz.sig + + Here are the MD5 and SHA1 checksums: + + dea43529d2d84fb4b9d81bdd9efcc715 mes-0.21.tar.gz + 35721a81feeab6e0d5913b8bf78f18951edbb964 mes-0.21.tar.gz + + [*] Use a .sig file to verify that the corresponding file (without the + .sig suffix) is intact. First, be sure to download both the .sig file + and the corresponding tarball. Then, run a command like this: + + gpg --verify mes-0.21.tar.gz.sig + + If that command fails because you don't have the required public key, + then run this command to import it: + + gpg --keyserver keys.gnupg.net --recv-keys 1A858392E331EAFDB8C27FFBF3C1A0D9C1D65273 + + and rerun the 'gpg --verify' command. + +* Get informed, get involved + + See https://bootstrappable.org + Join #bootstrappable on irc.freenode.net. + +* Changes in 0.21 since 0.20 + ** Core + *** Mes can now be bootstrapped with Gash and Gash Core Utils. + *** Mes now supports a Scheme-only bootstrap. + *** Mes now supports -c EXPR. + ** MesCC + *** Mes C Library now supports bootstrapping GNU Awk, GNU Bash, GNU SED, and GNU Tar. + *** Mes C Library now has limited float support in vfprintf, vsnprintf, vsscanf. + **** 7 new functions + abtod, atof, creat, dtoab, execlp, isgraph, mknod, readlink, strtod, + symlink. + **** 5 new stubs + getgrgid, getgrnam, getpgid, getpgrp, mktime, setgrent. + ** Noteworthy bug fixes + *** A bug with `mes -c EXPR' has been fixed. + *** The REPL now works again on x86_64. + *** --with-system-libc now works again. + +Greetings, +janneke and Danny. + +[0] https://www.gnu.org/software/mes +[1] https://guix.gnu.org/blog/2019/guix-reduces-bootstrap-seed-by-50/ +[2] https://www.gnu.org/software/guix +[3] https://bootstrappable.org +[4] https://github.com/oriansj/mes-m2 +[5] https://github.com/oriansj/m2-planet +[6] https://github.com/schemeway/lalr-scm +[7] https://www.cs.indiana.edu/chezscheme/syntax-case/old-psyntax.html +[8] https://www.nongnu.org/nyacc +[9] https://gitlab.com/janneke/tinycc +[10] http://www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf +[11] https://savannah.nongnu.org/projects/stage0 +[12] https://nlnet.nl/project/GNUMes diff --git a/sysa/mes-0.22/doc/announce/ANNOUNCE-0.22 b/sysa/mes-0.22/doc/announce/ANNOUNCE-0.22 new file mode 100644 index 0000000..e148793 --- /dev/null +++ b/sysa/mes-0.22/doc/announce/ANNOUNCE-0.22 @@ -0,0 +1,162 @@ + +Subject: GNU Mes 0.22 released + +<#secure method=pgpmime mode=sign> + +We are pleased to announce the release of GNU Mes 0.22, representing +57 commits over 8 weeks. + +Mes can now be built reproducibly by mes+mescc or guile+mescc accross +distributions such as GNU Guix, Debian GNU/Linux and NixOS. Also, many +build issues were fixed. A big thank you to reproducible-builds.org, +Vagrant Cascadian, Jelle van der Waa, Hannes Mehnert and David Terry! + +Mes now runs on the Hurd--mescc does not run yet, many system calls are +missing, especially fork/exec--and initial scaffolding support for +creating FreeBSD binaries was added. + +This release better supports bringing the Scheme-only bootstrap to Guix: +it no longer requires an update to the Guix bootstrap seed. + +The Scheme-only bootstrap means that Mes can now be built with Gash and +the experimental Gash Core Utils instead of using GNU Awk, GNU Bash, the +GNU Core Utilities, GNU Grep, GNU Gzip, GNU Make, GNU Sed, and GNU Tar. +Also, the Mes C Library now supports bootstrapping those. + +We are excited that the Nlnet Foundation[12] is now sponsoring this +work! + +Next targets: + + - Introduce the Reduced Binaries Seed bootstrap to NixOS (Debian, + Arch, Gentoo, ...?) + - Merge the Scheme-only bootstrap, the wip-bootstrap branch (using + Guile, Gash and Gash Core Utils to remove awk, bash, core utilities, + grep, gzip, make, sed, tar, etc. from the Guix bootstrap binaries) + into Guix core-updates. + - ARM support + - Full Source Bootstrap: compile Mes.c using M2-Planet + - Add full Guile module support + - Reduced Binary Seed bootstrap for ARM + - Support mescc on the Hurd (fork/exec, ...) + +Packages are available in Guix master; the cross-distro reproducible +is built using + + guix build --system=i686-linux mes-rb5 + +* About + + GNU Mes[0] is a Scheme interpreter and C compiler for bootstrapping the GNU + System. Since version 0.22 it has again helped to halve the size of + opaque, uninspectable binary seeds that are currently being used in the + Reduced Binary Seed bootstrap[1] of GNU Guix[2]. The final goal is to help + create a full source bootstrap as part of the bootstrappable builds[3] + effort for UNIX-like operating systems. + + The Scheme interpreter is written in ~5,000 LOC of simple C, and the C + compiler written in Scheme and these are mutual self-hosting. This + mes.c is being simplified[4] to be transpiled by M2-Planet[5]. + + Mes has a Garbage Collector, a library of loadable Scheme modules-- + notably Dominique Boucher's LALR[6], Pre-R6RS [portable syntax-case[7] + with R7RS ellipsis, Matt Wette's Nyacc[8] --and test suite just enough + to support a REPL and a C99 compiler: MesCC. + + Mes+MesCC can compile an only lightly patched TinyCC[9] that is + self-hosting. Using this tcc and the Mes C library we now have a + Reduced Binary Seed bootstrap for the gnutools triplet: glibc-2.2.5, + binutils-2.20.1, gcc-2.95.3. This is enough to bootstrap Guix for + i686-linux and x86_64-linux. + + Mes is inspired by The Maxwell Equations of Software: LISP-1.5[10] -- John + McCarthy page 13, GNU Guix's source/binary packaging transparency and + Jeremiah Orians's stage0[11] ~500 byte self-hosting hex assembler. + +* Download + + git clone git://git.savannah.gnu.org/mes.git + + Here are the compressed sources and a GPG detached signature[*]: + https://ftp.gnu.org/gnu/mes/mes-0.22.tar.gz + https://ftp.gnu.org/gnu/mes/mes-0.22.tar.gz.sig + + Use a mirror for higher download bandwidth: + https://ftpmirror.gnu.org/mes/mes-0.22.tar.gz + https://ftpmirror.gnu.org/mes/mes-0.22.tar.gz.sig + + Here are the MD5 and SHA1 checksums: + + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx mes-0.22.tar.gz + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx mes-0.22.tar.gz + + [*] Use a .sig file to verify that the corresponding file (without the + .sig suffix) is intact. First, be sure to download both the .sig file + and the corresponding tarball. Then, run a command like this: + + gpg --verify mes-0.22.tar.gz.sig + + If that command fails because you don't have the required public key, + then run this command to import it: + + gpg --keyserver keys.gnupg.net --recv-keys 1A858392E331EAFDB8C27FFBF3C1A0D9C1D65273 + + and rerun the 'gpg --verify' command. + +* Get informed, get involved + + See https://bootstrappable.org + Join #bootstrappable on irc.freenode.net. + +* Changes in 0.22 since 0.21 + ** Core + *** Mes now builds reproducibly with MesCC, cross distribution + Using --with-bootstrap on x86, a bin/mes-mescc is compiled with + mes+mescc, that shall have sha256sum + + 9e0bcb1633c58e7bc415f6ea27cee7951d6b0658e13cdc147e992b31a14625fb bin/mes-mescc + + This has been verified on GNU Guix, Debian GNU/Linux and NixOS. + *** Mes now builds reproducibly with Guile+MesCC vs Mes+MesCC. + *** Mes now builds reproducibly with Tiny CC-built MesCC. + *** configure now respects the user's CFLAGS, CPPFLAGS and LDFLAGS. + *** Mes now supports mescc-tools 0.5.2 next to 0.6.1. + This allows introducing the Scheme-only bootstrap without updating or + adding new bootstrap binary seeds into GNU Guix. + *** Mes now runs when configured --with-courage on the Hurd: + GNU debian 0.9 GNU-Mach 1.8+git20170609-486/Hurd-0.9 i686-AT386 GNU + Note that mescc does not run; fork and exec are not yet implemented. + *** Mes now configures --with-courage on x86-FreeBSD 12.1 + The initial ELF scaffold tests: exit-42.S, 0exit-42.hex2, + body-exit-42.hex2, hello-mes.S, 0hello-mes.hex2, body-hello-mes.hex2 + pass. + *** configure now has a --with-bootstrap option. + This adds the reproducible bootstrap build of bin/mes-mescc, using + mes+mescc. + *** configure prefers $CC over gcc; tcc over gcc, gcc over cc. + *** Mes now prints an error when attempting to read a file that does not exist. + *** Mes no longer depends on GIT. + ** Noteworthy bug fixes + *** Several annoying build problems were fixed, for non-Guix systems. + *** A bug with buffered-read was fixed. + This means that bash-2.05 can now build glibc-2.2.5; notably it now + successfully executes make-syscall.sh. + *** A bug with execlp, execvp for file names containing a slash was fixed. + This should allow make-3.80 running scripts that have "#! ./move-if-change". + +Greetings, +janneke and Danny. + +[0] https://www.gnu.org/software/mes +[1] https://guix.gnu.org/blog/2019/guix-reduces-bootstrap-seed-by-50/ +[2] https://www.gnu.org/software/guix +[3] https://bootstrappable.org +[4] https://github.com/oriansj/mes-m2 +[5] https://github.com/oriansj/m2-planet +[6] https://github.com/schemeway/lalr-scm +[7] https://www.cs.indiana.edu/chezscheme/syntax-case/old-psyntax.html +[8] https://www.nongnu.org/nyacc +[9] https://gitlab.com/janneke/tinycc +[10] http://www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf +[11] https://savannah.nongnu.org/projects/stage0 +[12] https://nlnet.nl/project/GNUMes diff --git a/sysa/mes-0.22/doc/announce/ANNOUNCE-0.3 b/sysa/mes-0.22/doc/announce/ANNOUNCE-0.3 new file mode 100644 index 0000000..6f3a2d5 --- /dev/null +++ b/sysa/mes-0.22/doc/announce/ANNOUNCE-0.3 @@ -0,0 +1,99 @@ +Subject: on bootstrapping: first Mes 0.3 released + +I am pleased to announce the first release of Mes: 0.3, representing +152 commits over 3 months since the second status report[1]. + +* About + + Mes aims to create an entirely source-based bootstrapping path. The + target is to [have GuixSD] boostrap from a minimal, easily inspectable + binary --that should be readable as source-- into something close to + R6RS Scheme. + + As bootstrapping is presumably easiest and probably most fun with + Scheme, the next step for Mes is mescc: a C compiler/linker to + boostrap into GNU Gcc and GNU Guile, possibly via Tiny-CC. + + It currently has an interpreter written in C (mes) with Garbage + Collector (Jam Scraper), a library of loadable Scheme modules with + test suite just barely enough to support a simple REPL (repl.mes) + and a proof-of-concept c-compiler (mescc.mes) that produces an elf + from the simplest of C files. + + Mes is inspired by The Maxwell Equations of Software: LISP-1.5[2] + -- John McCarthy page 13 + +* Download + + git clone https://gitlab.com/janneke/mes + + wget https://gitlab.com/janneke/mes/repository/archive.tar.gz?ref=v0.3 -O mes-0.3.tar.gz + +Mes runs from the source tree and can also be built, packaged and +installed in Guix[SD] by the usual + + guix package -f guix.scm + + +* Changes in 0.3 since 0.2 + ** Core + *** Number-based rather than pointer-based cells. + *** Garbage collector aka Jam scraper. + A variant on SICP's stop and copy Garbage Collector (Jam Scraper?) + algorithm has been implemented. + *** The reader has been moved to Scheme. + ** Language + *** Simple loadable modules. + *** Srfi-9 and match use handwritten syntax-rules (mes-use-module (mes syntax)). + *** Optional syntax-case using psyntax (mes-use-module (mes psyntax)). + ** Noteworthy bug fixes + *** Srfi-0 has been fixed. + +* Changes in 0.2 since 0.1 + ** Core + *** Names of symbols and strings are list of characters [WAS: c-string]. + *** Sc-expand from pre-R6RS's psyntax has been integrated. + *** Undefined variable error now shows the name of the undefined variable. + *** There is now only one SCM type for builtin functions. + *** Macro expansion has been cleaned-up. + ** Language + *** Mes now provides a subset of R6RS. + *** Mes now provides syntax-case. + *** Mes now provides `load'. + ** Noteworthy bug fixes + *** Using values as second parameter of builtin function yields first value. + *** Quoted internals (e.g. 'if 'lambda) are now symbols. + *** Syntax error now exits. + *** Make+Bash voodoo has been replaced by build-aux/mes-snarf.scm. + *** Apply now accepts multiple list arguments. + *** Apply of character, inernal, number, string is an error. + *** Quasisyntax reading + +* Changes in 0.1 (since progress report #2) + ** Core + *** expand_macro is now a separate function. + *** A smaller core can now compiled using BOOT=1. + The smaller core does not provide define, define-macro, or quasiquote; + these are provided from a Scheme version of implemented eval/apply. + ** Language + *** Mes now provides a subset of R5RS. + *** Mes now provides let-syntax. + *** Mes now provides match. + *** Mes now provides quasisyntax, unsyntax and unsyntax-splicing. + ** User interface + *** Mes now provides a REPL, run: + scripts/repl.mes + *** Mes compiler can be run as a script: + scripts/mescc.mes doc/examples/main.c + *** Macro expansion can be inspected in the REPL, e.g.: + ,expand (and 0 1) + ** Noteworthy bug fixes + *** Performance: scripts/mescc.mes now takes 2s to compile main.c (was 1'20"). + *** Symbols are now truly unique. + * '(), #t, #f are no longer symbols. + +Greetings, +Jan + +[1] https://lists.nongnu.org/archive/html/guile-user/2016-09/msg00061.html +[2] http://www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf diff --git a/sysa/mes-0.22/doc/announce/ANNOUNCE-0.4 b/sysa/mes-0.22/doc/announce/ANNOUNCE-0.4 new file mode 100644 index 0000000..c5fe2d1 --- /dev/null +++ b/sysa/mes-0.22/doc/announce/ANNOUNCE-0.4 @@ -0,0 +1,103 @@ +Subject: Mes 0.4 released + +I am pleased to announce the release of Mes 0.4, representing 115 +commits over barely two weeks. It now runs Nyacc and PEG and has much +reduced core. + +* About + + Mes aims to create an entirely source-based bootstrapping path. The + target is to [have GuixSD] boostrap from a minimal, easily inspectable + binary --that should be readable as source-- into something close to + R6RS Scheme. + + As bootstrapping is presumably easiest and probably most fun with + Scheme, the next step for Mes is mescc: a C compiler/linker to + boostrap into GNU Gcc and GNU Guile, possibly via Tiny-CC. + + It currently has an interpreter written in C (mes) with Garbage + Collector (Jam Scraper), a library of loadable Scheme modules-- + notably Dominique Boucher's LALR[1], Pre-R6RS portable + syntax-case[2] with R7RS ellipsis, Nyacc[3] and Guile's PEG[4] + --and test suite just barely enough to support a simple REPL + (repl.mes) and a proof-of-concept C-compiler (mescc.mes) that + produces an elf from the simplest of C files. + + Mes is inspired by The Maxwell Equations of Software: LISP-1.5[5] + -- John McCarthy page 13 + +* Download + + git clone https://gitlab.com/janneke/mes + + wget https://gitlab.com/janneke/mes/repository/archive.tar.gz?ref=v0.4 -O mes-0.4.tar.gz + +Mes runs from the source tree and can also be built, packaged and +installed in Guix[SD] by the usual + + guix package -f guix.scm + +* Changes in 0.4 since 0.3 + ** Core + *** Improved performance. + Macros are now memoized; after expansion and before eval'ing the + expanded form, their input s-expression is replaced by the expansion. + This yields a nice performance improvement which finally allowed + moving all non-essential bits from the C-core into Scheme...including + the reader. The Scheme reader is much, much slower than the previous + C version, making Mes--again-- feel slow. Think of that as a feature. + *** Bootstrap with minimal reader in C. + The C-reader needs only support reading of words and lists + (s-expressions), line-comments to read the initial Scheme reader which + then takes over and handles reading of quoting, characters, strings, + block-comments. + *** Reduced size. + Total C size: ~1500LOC. The main Mes evaluator is now ~1000LOC + including cell creation and garbage collector. This code is able to + execute a Scheme program that has been loaded into memory. Another + ~500LOC is spent to load a minimal Scheme program and to dump it, to + provide a small posix interface, math functions and do some error + reporting. + *** Programs can be dumped and loaded using --dump and --load. + ** Language + *** Minimal syntactic exception support for Nyacc. + *** Minimal syntactic fluids support for Nyacc. + *** Keywords are now supported. + *** Cond now supports =>. + *** Guile's optargs: lambda* and define* are now supported. + *** #;-comments are now supported. + *** Non-nested #| |#-comments are now supported. + *** Quasisyntax is now supported. + *** R7RS syntax-rules with custom ellipsis, with-ellipsis are now supported. + *** 9 new [partial] modules + (mes fluids), (mes nyacc), (mes optargs), (mes pmatch), (mes peg), + (srfi srfi-13), (srfi srfi-9-psyntax), (srfi srfi-26), (srfi srfi-43), + (rnrs arithmetic bitwise), (sxml xpath) + *** 36 new functions + 1+, 1-, abs, and=>, append-reverse, ash, char<=?, char<?, char>=?, + char>?, even?, filter, delete, delq, vector-copy, fold, fold-right, + getenv, iota, keyword->symbol list-head, list-tail, negative?, odd?, + positive?, remove!, remove, string->number, string-copy, + string-prefix?, string=, string=?, symbol->keyword symbol-append, + symbol-prefix?, unless, write, zero?. + ** Noteworthy bug fixes + *** Macros are now memoized. + *** An error is reported when using a wrong number of arguments with a call. + *** Cond now evaluates its test clauses only once. + *** Append can also handle one argument. + *** For-each now supports 2 list arguments. + *** Map now supports 3 list arguments. + *** Backslash in string is supported. + *** Closure is not a pair. + *** All standard characters are supported. + *** Mescc now also runs in Guile. + + +Greetings, +Jan + +[1] https://github.com/schemeway/lalr-scm +[2] https://www.cs.indiana.edu/chezscheme/syntax-case/old-psyntax.html +[3] https://www.nongnu.org/nyacc/ +[4] https://www.gnu.org/software/guile/docs/master/guile.html/PEG-Parsing.html +[5] http://www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf diff --git a/sysa/mes-0.22/doc/announce/ANNOUNCE-0.5 b/sysa/mes-0.22/doc/announce/ANNOUNCE-0.5 new file mode 100644 index 0000000..7a04c7a --- /dev/null +++ b/sysa/mes-0.22/doc/announce/ANNOUNCE-0.5 @@ -0,0 +1,79 @@ +Subject: Mes 0.5 released + +I am pleased to announce the release of Mes 0.5, representing 250 +commits over 4 months. Mes is now self-hosting, or rather it features +a mutual self-hosting Scheme interpreter and C compiler: mes.c and +mescc; a Nyacc-based C compiler backend that also works separately +with Guile. + +* About + + Mes aims to create full source bootstrapping for GuixSD: an + entirely source-based bootstrap path. The target is to [have + GuixSD] boostrap from a minimal, easily inspectable binary --that + should be readable as source-- into something close to R6RS + Scheme. + + It currently consists of a mutual self-hosting [close to Guile-] + Scheme interpreter prototype in C and a Nyacc-based C compiler in + [Guile] Scheme. + + The Scheme interpreter prototype (mes.c) has a Garbage Collector, + a library of loadable Scheme modules-- notably Dominique Boucher's + LALR[1], Pre-R6RS portable syntax-case[2] with R7RS ellipsis, Matt + Wette's Nyacc[3] Guile's PEG[4] --and test suite just barely + enough to support a simple REPL (repl.mes) and simple C-compiler + (mescc.mes) that can produce the second initial ELF binary from + binary from mes.c, in only about 2h30'. + + Mes was inspired by The Maxwell Equations of Software: LISP-1.5[5] + -- John McCarthy page 13, GNU Guix's[6] source/binary packaging + transparency and Jeremiah Orians's stage0[7] bootstrap project. + +* Download + + git clone https://gitlab.com/janneke/mes + + wget https://gitlab.com/janneke/mes/repository/archive.tar.gz?ref=v0.5 -O mes-0.5.tar.gz + +Mes runs from the source tree and can also be built, packaged and +installed in Guix[SD] by the usual + + guix package -f guix.scm + +* Changes in 0.5 since 0.4 + ** Core + *** Support compilation with Mescc. + *** Support compilation with -nostdinc, -nostdlib using mlibc. + *** Support call-with-current-continuation. + *** Support exception handling, catch/throw. + *** Give sensible error message when a macro is missing. + ** Language + *** Map now supports 4 lists. + *** The reader supports negative hex numbers. + *** 24 new functions + access?, assoc-set! c????r, compose, list->char-set, + open-input-string, read-string, string-delete, with-throw-handler. + ** Mescc + *** Mescc can be used separately as a Nyacc-based C compiler backend for Guile. + *** Switch to Nyacc frontend, update Nyacc to 0.76.5. + *** Mescc now has a test suite, scaffold/t.c. + *** Mescc now includes a minimal C library: libc/mlib.c libc/mstart.c. + *** Mescc can now compile mes.c. + ** Noteworthy bug fixes + *** The build system (configure, make) has been refactored. + *** Support map-4. + *** Evaluate arguments of OR only once. + *** Fix assq-set! + *** Fix ,expand in the REPL. + +Greetings, +janneke + +[1] https://github.com/schemeway/lalr-scm +[2] https://www.cs.indiana.edu/chezscheme/syntax-case/old-psyntax.html +[3] https://www.nongnu.org/nyacc/ +[4] https://www.gnu.org/software/guile/docs/master/guile.html/PEG-Parsing.html +[5] http://www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf +[6] https://www.gnu.org/software/guix/ +[7] https://github.com/oriansj/stage0 diff --git a/sysa/mes-0.22/doc/announce/ANNOUNCE-0.6 b/sysa/mes-0.22/doc/announce/ANNOUNCE-0.6 new file mode 100644 index 0000000..80bc457 --- /dev/null +++ b/sysa/mes-0.22/doc/announce/ANNOUNCE-0.6 @@ -0,0 +1,82 @@ +Subject: Mes 0.6 released + +I am pleased to announce the release of Mes 0.6, representing 32 +commits over 24 days. Mescc now works with vanilla Nyacc 0.78.3 +(thanks Matt!), Nyacc has been unbundled and Mescc compiles 33/55 +of tinycc test2 tests. + +* About + + Mes aims to create full source bootstrapping for GuixSD: an + entirely source-based bootstrap path. The target is to [have + GuixSD] boostrap from a minimal, easily inspectable binary --that + should be readable as source-- into something close to R6RS + Scheme. + + It currently consists of a mutual self-hosting [close to Guile-] + Scheme interpreter prototype in C and a Nyacc-based C compiler in + [Guile] Scheme. + + The Scheme interpreter prototype (mes.c) has a Garbage Collector, + a library of loadable Scheme modules-- notably Dominique Boucher's + LALR[1], Pre-R6RS portable syntax-case[2] with R7RS ellipsis, Matt + Wette's Nyacc[3] Guile's PEG[4] --and test suite just barely + enough to support a simple REPL (repl.mes) and simple C-compiler + (mescc.mes) that can produce the second initial ELF binary from + binary from mes.c, in only about 2h30'. + + Mes was inspired by The Maxwell Equations of Software: LISP-1.5[5] + -- John McCarthy page 13, GNU Guix's[6] source/binary packaging + transparency and Jeremiah Orians's stage0[7] bootstrap project. + +* Download + + git clone https://gitlab.com/janneke/mes + + wget https://gitlab.com/janneke/mes/repository/archive.tar.gz?ref=v0.6 -O mes-0.6.tar.gz + +Mes runs from the source tree and can also be built, packaged and +installed in Guix[SD] by the usual + + guix package -f guix.scm + +* Changes in 0.6 since 0.5 + ** Core + *** configure, build now supports x86 and development for arm with-courage. + ** Language + *** Nyacc has been unbundled and is now a dependency. + *** Mes now supports case-lambda. + *** Mes reader now supports abbreviated form for return character #\cr. + *** 1 new function + string-index. + ** Mescc + *** Mescc can be used on regular C sources, like tinycc's tests/test2 suite. + *** make check passes 33/55 of tinycc's test suite etest/test2 tests. + *** Mescc now recognizes `short' as a type. + *** Mescc now supports sizeof (<identifier>), sizeof(<expression>). + *** Mescc now respects enum field initializers and supports enum variables. + *** Mescc now supports binary constants . + *** Mescc now supports assignments from ==, != boolean expressions . + *** Mescc now supports &, ^. + *** Mescc now supports struct pointers. + *** Mescc now supports struct definition with immediatete variable declaration. + *** Mescc now supports calling (returning correctly from) void functions. + *** Mescc now handles case statements breaks without compound correctly. + *** Mescc now has better [int/pointer] array support. + *** Mescc now has better support for simple (non-array-)structs. + *** Mescc now supports multiple declarations in one statement like: int a,b; + **** 2 new mlibc functions + printf, strcpy. + ** Noteworthy bug fixes + *** Installed mes and mes.repl now also run outside of source tree again. + +Greetings, +janneke + +[1] https://github.com/schemeway/lalr-scm +[2] https://www.cs.indiana.edu/chezscheme/syntax-case/old-psyntax.html +[3] https://www.nongnu.org/nyacc/ +[4] https://www.gnu.org/software/guile/docs/master/guile.html/PEG-Parsing.html +[5] http://www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf +[6] https://www.gnu.org/software/guix/ +[7] https://github.com/oriansj/stage0 diff --git a/sysa/mes-0.22/doc/announce/ANNOUNCE-0.7 b/sysa/mes-0.22/doc/announce/ANNOUNCE-0.7 new file mode 100644 index 0000000..27636ea --- /dev/null +++ b/sysa/mes-0.22/doc/announce/ANNOUNCE-0.7 @@ -0,0 +1,83 @@ +Subject: Mes 0.7 released + +I am pleased to announce the release of Mes 0.7, representing 32 +commits over 4 weeks. Mescc now behaves more like a regular C +compiler: supporting -E, -c, -o options and with a more complete set +of header files [stubs]; enough to work on compiling tinycc's tcc.c +albeit a somewhat modified version[8]. + +* About + + Mes aims to create full source bootstrapping for GuixSD: an + entirely source-based bootstrap path. The target is to [have + GuixSD] boostrap from a minimal, easily inspectable binary --that + should be readable as source-- into something close to R6RS + Scheme. + + It currently consists of a mutual self-hosting [close to Guile-] + Scheme interpreter prototype in C and a Nyacc-based C compiler in + [Guile] Scheme. + + The Scheme interpreter prototype (mes.c) has a Garbage Collector, + a library of loadable Scheme modules-- notably Dominique Boucher's + LALR[1], Pre-R6RS portable syntax-case[2] with R7RS ellipsis, Matt + Wette's Nyacc[3] Guile's PEG[4] --and test suite just barely + enough to support a simple REPL (repl.mes) and simple C-compiler + (mescc.mes) that can produce the second initial ELF binary from + binary from mes.c, in only about 2h30'. + + Mes was inspired by The Maxwell Equations of Software: LISP-1.5[5] + -- John McCarthy page 13, GNU Guix's[6] source/binary packaging + transparency and Jeremiah Orians's stage0[7] bootstrap project. + +* Download + + git clone https://gitlab.com/janneke/mes + + wget https://gitlab.com/janneke/mes/repository/archive.tar.gz?ref=v0.7 -O mes-0.7.tar.gz + +Mes runs from the source tree and can also be built, packaged and +installed in Guix[SD] by the usual + + guix package -f guix.scm + +* Changes in 0.7 since 0.6 + ** Core + *** The minimal C reader is now always included; dependencies + on i686-unknown-linux-gnu-gcc and binary read-0-32.mo have been + dropped, these are now optional. + ** Language + *** Mes reader now supports octal numbers #oXXX. + *** 10 new functions + current-output-port, getopt-long, negate, open-output-file, + option-ref, set-current-output-port, string-rindex, string-suffix?, + with-ouwith-output-to-file, with-output-to-port. + ** Mescc + *** Mescc can now be installed and used alongside a gcc installation. + *** Mescc can now handle const anywhere. + *** Mescc now supports array fields in structs. + *** Mescc now supports forward declarations and typedef. + *** Mescc can now handle comments anywhere. + *** Mescc now supports addition and substraction for enum field values. + *** Mescc now supports anonymous enums. + *** Mescc now supports all C99 header files needed to compile tcc.c. + *** build: C sources are now preprocessed separately, then compiled and linked. + *** build: mlibc and C sources are now compiled separately and then linked. + *** mlibc has been moved from Scheme snippets into C. + *** Mescc now supports -c, -D, -E, -I and -o options. + **** open now supports optional third mode parameter. + ** Noteworthy bug fixes + *** string-index now supports function predicate. + *** number->string for radix > 10 now produces `a' instead of `:'. + +Greetings, +janneke + +[1] https://github.com/schemeway/lalr-scm +[2] https://www.cs.indiana.edu/chezscheme/syntax-case/old-psyntax.html +[3] https://www.nongnu.org/nyacc/ +[4] https://www.gnu.org/software/guile/docs/master/guile.html/PEG-Parsing.html +[5] http://www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf +[6] https://www.gnu.org/software/guix/ +[7] https://github.com/oriansj/stage0 +[8] https://gitlab.com/janneke/tinycc diff --git a/sysa/mes-0.22/doc/announce/ANNOUNCE-0.8 b/sysa/mes-0.22/doc/announce/ANNOUNCE-0.8 new file mode 100644 index 0000000..6795021 --- /dev/null +++ b/sysa/mes-0.22/doc/announce/ANNOUNCE-0.8 @@ -0,0 +1,70 @@ +Subject: Mes 0.8 released + +I am pleased to announce the release of Mes 0.8, representing 34 +commits over 3 weeks. Mescc now produces object files in the hex2 +ascii output format compatible with the stage0 linker. + +Special thanks to Jeremiah Orians for support with MESCC_Tools and +hex2, more goodness to follow soon! + +* About + + Mes aims to create full source bootstrapping for GuixSD: an + entirely source-based bootstrap path. The target is to [have + GuixSD] boostrap from a minimal, easily inspectable binary --that + should be readable as source-- into something close to R6RS + Scheme. + + It currently consists of a mutual self-hosting [close to Guile-] + Scheme interpreter prototype in C and a Nyacc-based C compiler in + [Guile] Scheme. + + The Scheme interpreter prototype (mes.c) has a Garbage Collector, + a library of loadable Scheme modules-- notably Dominique Boucher's + LALR[1], Pre-R6RS portable syntax-case[2] with R7RS ellipsis, Matt + Wette's Nyacc[3] Guile's PEG[4] --and test suite just barely + enough to support a simple REPL (repl.mes) and simple C-compiler + (mescc.mes) that can produce the second initial ELF binary from + binary from mes.c, in only about 2h30'. + + Mes was inspired by The Maxwell Equations of Software: LISP-1.5[5] + -- John McCarthy page 13, GNU Guix's[6] source/binary packaging + transparency and Jeremiah Orians's stage0[7] bootstrap project. + +* Download + + git clone https://gitlab.com/janneke/mes + + wget https://gitlab.com/janneke/mes/repository/archive.tar.gz?ref=v0.8 -O mes-0.8.tar.gz + +Mes runs from the source tree and can also be built, packaged and +installed in Guix[SD] by the usual + + guix package -f guix.scm + +* Changes in 0.8 since 0.7 + ** Mescc + *** Mescc now depends on the hex2 linker from MESCC_Tools[9]. + Direct ELF output support has been removed. + ELF symbol and string table creation has been removed. + *** Mescc now has experimental annotation support for hex2. + *** Mescc has experimental annotation support for hex2. + *** Mescc has been simplified by leveraging use labels in hex2 output. + *** Mescc now supports continue in loops. + *** Mescc now compiles to hex2 object files. + ** Language + *** 1 new function + list-index. + +Greetings, +janneke + +[1] https://github.com/schemeway/lalr-scm +[2] https://www.cs.indiana.edu/chezscheme/syntax-case/old-psyntax.html +[3] https://www.nongnu.org/nyacc/ +[4] https://www.gnu.org/software/guile/docs/master/guile.html/PEG-Parsing.html +[5] http://www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf +[6] https://www.gnu.org/software/guix/ +[7] https://github.com/oriansj/stage0 +[8] https://gitlab.com/janneke/tinycc +[9] https://github.com/oriansj/MESCC_Tools diff --git a/sysa/mes-0.22/doc/announce/ANNOUNCE-0.9 b/sysa/mes-0.22/doc/announce/ANNOUNCE-0.9 new file mode 100644 index 0000000..b4aac4a --- /dev/null +++ b/sysa/mes-0.22/doc/announce/ANNOUNCE-0.9 @@ -0,0 +1,93 @@ +Subject: Mes 0.9 released + +I am pleased to announce the release of Mes 0.9, representing 107 +commits over 5 weeks. Mescc now compiles to a surprisingly readable +stage0 M1 macro assembler output format. Mescc now compiles a +modified TinyCC into a running [mostly segfaulting] executable. This +is a major milestone as tcc can compile GCC. + + +* About + + Mes[0] aims to create full source bootstrapping for GuixSD[1] as + part of the bootstrappable builds[2] project. + + It currently consists of a mutual self-hosting [close to Guile-] + Scheme interpreter prototype in C and a Nyacc-based C compiler in + [Guile] Scheme. This C prototype will be rewritten in stage0[3] + M1 assembly (or possibly stage2 slow-LISP, or ...). + + The Scheme interpreter prototype (mes.c) has a Garbage Collector, + a library of loadable Scheme modules-- notably Dominique Boucher's + LALR[4], Pre-R6RS portable syntax-case[5] with R7RS ellipsis, Matt + Wette's Nyacc[6], Guile's PEG[7] --and test suite just barely + enough to support a simple REPL (repl.mes) and simple C-compiler + (mescc.mes). + + The simple C compiler can compile a modified TinyCC[8]. This + needs more work. A gcc-compiled tcc is known[9] to compile GCC. + + Mes is inspired by The Maxwell Equations of Software: LISP-1.5[10] + -- John McCarthy page 13, GNU Guix's source/binary packaging + transparency and Jeremiah Orians's stage0 ~300 byte self-hosting + hex assembler. + +* Download + + git clone https://gitlab.com/janneke/mes + + wget https://gitlab.com/janneke/mes/repository/archive.tar.gz?ref=v0.9 -O mes-0.9.tar.gz + +Mes runs from the source tree and can also be built, packaged and +installed in Guix[SD] by the usual + + guix package -f guix.scm + +* Changes in 0.9 since 0.8 + ** Core + *** Mes now builds better in non-Guix[SD] legacy distros/environments. Thanks, rain1! + ** Mescc + *** Mescc now compiles a modified tinycc into a running [mostly segfaulting] tcc.mes. + https://gitlab.com/janneke/tinycc branch wip-mescc. + *** Mescc now supports locals stack frame larger than 1 byte offset. + *** Mescc now supports incomplete struct initializers {0}. + *** Mescc now supports >>=, <<=, ^=, ~. + *** Mescc now supports the comma operator. + *** Mescc now supports mullti-line string initializers. + *** Mescc now supports unions. + *** Mescc now supports arrays in structs. + *** Mescc now supports structs in structs. + *** Mescc has been refactored to use records. + *** Mescc now builds and runs with Guile-2.0 (legacy distro support, not recommended). + *** Mescc now bundles tinycc's test2 test suite, passes one more test [34/55 pass]. + *** Mescc now has an incremental test suite consisting of 56 tests. + *** Mescc now supports stdarg variable argument lists. + *** Mescc now has __GNUC__ unset, #f (WAS: 0). + *** Mescc now depends on Nyacc 0.80.3. + *** Mescc now depends on M1 from MESCC_Tools v0.2. + *** Mescc now compiles to M1 object files. + **** 7 new mlibc functions + calloc, close, getcwd, lseek, sprintf, unlink, vprintf. + **** 31 new mlibc stubs + execvp, fclose, fdopen, fflush, fopen, fprintf, fread, free, fseek, + ftell, fwrite, localtime, longjmp, memcpy, memmove, memmove, memset, + qsort, remove, setjump, snprintf, sscanf, strchr, strrchr, strstr, + strtol, strtoll, strtoul, strtoull, time, vnsprintf. + **** 10 new header files + alloca.h, float.h, libgen.h, locale.h, stdbool.h, stddef.h, stdint.h, + stdnoreturn.h, sys/select.h, sys/wait.h. + +Greetings, +janneke + +[0] https://gitlab.com/janneke/mes +[1] https://www.gnu.org/software/guix +[2] http://bootstrappable.org +[3] https://github.com/oriansj/stage0 +[4] https://github.com/schemeway/lalr-scm +[5] https://www.cs.indiana.edu/chezscheme/syntax-case/old-psyntax.html +[6] https://www.nongnu.org/nyacc/ +[7] https://www.gnu.org/software/guile/docs/master/guile.html/PEG-Parsing.html +[8] https://gitlab.com/janneke/tinycc +[9] https://lists.gnu.org/archive/html/tinycc-devel/2017-05/msg00103.html +[10] http://www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf diff --git a/sysa/mes-0.22/doc/announce/ANNOUNCE-2 b/sysa/mes-0.22/doc/announce/ANNOUNCE-2 new file mode 100644 index 0000000..6a2e523 --- /dev/null +++ b/sysa/mes-0.22/doc/announce/ANNOUNCE-2 @@ -0,0 +1,87 @@ +Subject: on bootstrapping: 2nd status report on Mes +Date: Sun, 25 Sep 2016 13:52:11 +0200 + +Hi! + +In June I announced[0] Mes as a project that seeks to reduce the size of/ +dependency on bootstrap binaries, esp. for a system like GuixSD + +The strategy was to create a minimal trusted binary (prototyped in C but +eventually to be hand-crafted in assembly/hex) that interpets a minimal +LISP. Then using this minimal but already convenient LISP, extend it +into Scheme and write a tiny C compiler/linker. + +Last time I had a minimal LISP-1.5-resembling interpreter in 900 lines +of C that could interpret itself and an extension layer written in LISP +providing a minimal Scheme environment. I was stuck on adding macros in +LISP and had a broken macro implentation in C that I wanted to remove. +Also I hoped to greatly reduce the size of the C part. + +New status[1] + + * Provide Scheme primitives directly in 1400 lines of C + * Remove LISP-1.5 staging + * closures clue-bat, fixing bugs in begin, lambda, lexical + scoping etc. ... learned a lot! + * quasiquote, unquote, unquote-splicing (in C, too slow in Scheme) + * define-macro (in C) + * define-syntax, syntax-rules (in Scheme, using define-macro) + * all primitives needed to run LALR (strings, vectors, records, + some srfi bits; mostly in Scheme) + * test suite with 97 tests that run with Mes and also with Guile + * minimal and partial ANSI C parser for hello world + * minimal and simplistic 32 bit elf c-ast->elf generator + + Mes can now create a running 32-bit elf binary from this hello + world C source with a simplistic for loop + + int main () + { + int i; + puts ("Hi Mes!\n"); + for (i = 0; i < 4; ++i) + puts (" Hello, world!\n"); + return 1; + } + + It takes Mes 1'20" to compile this program, Guile takes 0.5 seconds. + + * cannot get psyntax.pp hooked-up or running + * do not understand syntax stuff [well enough] to implement in C + -> no let-syntax, no MATCH + -> no syntax-case, no PEG parser + +In theory the bootstrapping problem I set out to solve seems to be +cracked. The remaining problem is reduced to `just work': +implementing a minimal C compiler in Scheme. Questions here: I'm not +convinced yet that this is a meaningful project...aaand I really not +want to tackle this without having MATCH, which Mes does not have yet. + +Of the possible directions that I see + + 0 write the C compiler in Scheme without match + 1 rewrite match without let-syntax + 2 grok+write let-syntax/syntax-case using define-macro, some bits in C + 3 run and hook-up psyntax.pp...BUT that would probably require: + 4 address performance problem, possibly by + 5 rewrite Mes into a VM-based solution + +none I find really attractive. Option 5, a VM is proven to work but +that's quite a change of direction. Looking at other VM-based projects +(e.g. GNU Epsilon[2]) I fear that this must result in a much larger code +base in C, throwing out the minimal trusted binary idea. The other +puzzles and work 0, 2 or 3 still need to be done. + +However, diving into syntax-macro or eval work (2 or 3) most probably +needs the performance issue addressed. And if it turns out that a big +VM solution is needed, that may still invalidate this project after +having done even more work. + +Help! :-) Ideas? + +Greetings, +Jan + +[0] https://lists.gnu.org/archive/html/guile-user/2016-06/msg00061.html +[1] https://gitlab.com/janneke/mes +[2] http://git.savannah.gnu.org/cgit/epsilon.git diff --git a/sysa/mes-0.22/doc/announce/README b/sysa/mes-0.22/doc/announce/README new file mode 100644 index 0000000..062335a --- /dev/null +++ b/sysa/mes-0.22/doc/announce/README @@ -0,0 +1,11 @@ + -*- org -*- +#+TITLE: GNU Mes Announcements + +Copyright © 2016, 2017, 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org> + + Copying and distribution of this file, with or without modification, + are permitted in any medium without royalty provided the copyright + notice and this notice are preserved. + +Files are emails sent to public mailing lists. The notice above +applies to these files too. \ No newline at end of file diff --git a/sysa/mes-0.22/doc/announce/UPDATE-0.13 b/sysa/mes-0.22/doc/announce/UPDATE-0.13 new file mode 100644 index 0000000..00b5784 --- /dev/null +++ b/sysa/mes-0.22/doc/announce/UPDATE-0.13 @@ -0,0 +1,87 @@ +Subject: wip-bootstrap updated + +I've updated the wip-bootstrap branch[0] for Mes[1] 0.13. It has new +mes-boot and tcc-boot packages. mes-boot is a bootstrap version of +Mes; it only depends on mescc-tools and a previously compiled mes.M1 +seed. Likewise, tcc-boot depends on a precompiled tcc-seed. Also, +tcc-boot uses a heavily patched version of the tcc sources. + +Mes 0.13 is the first release that can bootstrap a fairly functional +tcc-boot. This bootstrapped tcc passes 67/68 C tests that were created +for MesCC. It can compile a version if itself where float, long long +and bitfield are patched out...but linking fails. This amazing +compiler can now be played with by doing something like + +--8<---------------cut here---------------start------------->8--- +git checkout wip-bootstrap +make +./pre-inst-env guix build tcc-boot # may take ~2h +./pre-inst-env guix environment --ad-hoc tcc-boot +mes-tcc --help #duck and run +--8<---------------cut here---------------end--------------->8--- + +The next big effort will be to make this mes-tcc fully functional and +integrate this with GuixSD. To give you a taste of that, +here's latest bug I'm currently looking at (pretty printed comments +are only added when Guile runs MesCC, the problem is in LEA) + +--8<---------------cut here---------------start------------->8--- +$ diff -u ../mes-seed/mes.M1 src/mes.M1 +--- ../mes-seed/mes.M1 2018-05-01 18:49:37.312162270 +0200 ++++ src/mes.M1 2018-05-01 19:49:40.774770406 +0200 +@@ -35805,12 +33091,11 @@ + call32 %strcpy + add____$i8,%esp !0x8 + test___%eax,%eax +- # strcpy(buf + strlen(buf), "/mes/"); +- push___$i32 &_string_reader_read_list_266 ++ push___$i32 &_string_reader_read_list_265 + mov____%ebp,%eax +- add____$i32,%eax %0x-200 ++ add____$i32,%eax %0x-800 + push___%eax +- lea____0x32(%ebp),%eax %0x-200 ++ lea____0x32(%ebp),%eax %0x-800 + push___%eax + call32 %strlen + add____$i8,%esp !0x4 +--8<---------------cut here---------------end--------------->8--- + +We also need to remove some shortcuts that we took, most notably: +mes-seed[3]. This seed consists of 1MB of M1 code. mes.M1 is +produced by compiling mes.c using MesCC, the C compiler written in +(Guile) Scheme that comes with Mes. Although that's really terrible, +it's probably a big step forward: currently GuixSD uses ~250MB of +binary seed: the bootstrap binaries. + +The plan is to replace the mes.M1 seed with mes.M2 and compile this +new mes.M2 seed using the brand new M2-Planet[2]. M2 is basically +simple C with structs, without preprocessor. This will reduce the +seed size by a factor of 10 while making it much more readable. + +An excerpt of the TODO I keep in Mes' BOOTSTRAP document + +--8<---------------cut here---------------start------------->8--- +* TODO +** have tcc-boot's mes-tcc compile a fully functional tcc +*** mescc: fix unknown bug. +*** mescc: support function-static. +*** mescc: support/grok global static. +*** mescc: support unsigned comparison, arithmetic. +*** mescc: support long long (do we need long long to get long long in tcc)? +*** mescc: support bitfield (do we need bitfield to get bitfield in tcc)? +*** mescc: support float (do we need float to get float in tcc)? +** have bootstrapped tcc compile gcc-4.7 +** remove or upstream patches from tcc-boot +** prepare src/mes.c for M2-Planet[2] transpiler +** integrate with GuixSD +** x86_64, arm, the Hurd +--8<---------------cut here---------------end--------------->8--- + +Greetings, +janneke + +[0] http://git.savannah.gnu.org/cgit/guix.git/log/?h=wip-bootstrap +[1] https://gitlab.com/janneke/mes +[2] https://github.com/oriansj/m2-planet +[3] https://gitlab.com/janneke/mes-seed diff --git a/sysa/mes-0.22/doc/fdl-1.3.texi b/sysa/mes-0.22/doc/fdl-1.3.texi new file mode 100644 index 0000000..cb71f05 --- /dev/null +++ b/sysa/mes-0.22/doc/fdl-1.3.texi @@ -0,0 +1,505 @@ +@c The GNU Free Documentation License. +@center Version 1.3, 3 November 2008 + +@c This file is intended to be included within another document, +@c hence no sectioning command or @node. + +@display +Copyright @copyright{} 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. +@uref{http://fsf.org/} + +Everyone is permitted to copy and distribute verbatim copies +of this license document, but changing it is not allowed. +@end display + +@enumerate 0 +@item +PREAMBLE + +The purpose of this License is to make a manual, textbook, or other +functional and useful document @dfn{free} in the sense of freedom: to +assure everyone the effective freedom to copy and redistribute it, +with or without modifying it, either commercially or noncommercially. +Secondarily, this License preserves for the author and publisher a way +to get credit for their work, while not being considered responsible +for modifications made by others. + +This License is a kind of ``copyleft'', which means that derivative +works of the document must themselves be free in the same sense. It +complements the GNU General Public License, which is a copyleft +license designed for free software. + +We have designed this License in order to use it for manuals for free +software, because free software needs free documentation: a free +program should come with manuals providing the same freedoms that the +software does. But this License is not limited to software manuals; +it can be used for any textual work, regardless of subject matter or +whether it is published as a printed book. We recommend this License +principally for works whose purpose is instruction or reference. + +@item +APPLICABILITY AND DEFINITIONS + +This License applies to any manual or other work, in any medium, that +contains a notice placed by the copyright holder saying it can be +distributed under the terms of this License. Such a notice grants a +world-wide, royalty-free license, unlimited in duration, to use that +work under the conditions stated herein. The ``Document'', below, +refers to any such manual or work. Any member of the public is a +licensee, and is addressed as ``you''. You accept the license if you +copy, modify or distribute the work in a way requiring permission +under copyright law. + +A ``Modified Version'' of the Document means any work containing the +Document or a portion of it, either copied verbatim, or with +modifications and/or translated into another language. + +A ``Secondary Section'' is a named appendix or a front-matter section +of the Document that deals exclusively with the relationship of the +publishers or authors of the Document to the Document's overall +subject (or to related matters) and contains nothing that could fall +directly within that overall subject. (Thus, if the Document is in +part a textbook of mathematics, a Secondary Section may not explain +any mathematics.) The relationship could be a matter of historical +connection with the subject or with related matters, or of legal, +commercial, philosophical, ethical or political position regarding +them. + +The ``Invariant Sections'' are certain Secondary Sections whose titles +are designated, as being those of Invariant Sections, in the notice +that says that the Document is released under this License. If a +section does not fit the above definition of Secondary then it is not +allowed to be designated as Invariant. The Document may contain zero +Invariant Sections. If the Document does not identify any Invariant +Sections then there are none. + +The ``Cover Texts'' are certain short passages of text that are listed, +as Front-Cover Texts or Back-Cover Texts, in the notice that says that +the Document is released under this License. A Front-Cover Text may +be at most 5 words, and a Back-Cover Text may be at most 25 words. + +A ``Transparent'' copy of the Document means a machine-readable copy, +represented in a format whose specification is available to the +general public, that is suitable for revising the document +straightforwardly with generic text editors or (for images composed of +pixels) generic paint programs or (for drawings) some widely available +drawing editor, and that is suitable for input to text formatters or +for automatic translation to a variety of formats suitable for input +to text formatters. A copy made in an otherwise Transparent file +format whose markup, or absence of markup, has been arranged to thwart +or discourage subsequent modification by readers is not Transparent. +An image format is not Transparent if used for any substantial amount +of text. A copy that is not ``Transparent'' is called ``Opaque''. + +Examples of suitable formats for Transparent copies include plain +ASCII without markup, Texinfo input format, La@TeX{} input +format, SGML or XML using a publicly available +DTD, and standard-conforming simple HTML, +PostScript or PDF designed for human modification. Examples +of transparent image formats include PNG, XCF and +JPG. Opaque formats include proprietary formats that can be +read and edited only by proprietary word processors, SGML or +XML for which the DTD and/or processing tools are +not generally available, and the machine-generated HTML, +PostScript or PDF produced by some word processors for +output purposes only. + +The ``Title Page'' means, for a printed book, the title page itself, +plus such following pages as are needed to hold, legibly, the material +this License requires to appear in the title page. For works in +formats which do not have any title page as such, ``Title Page'' means +the text near the most prominent appearance of the work's title, +preceding the beginning of the body of the text. + +The ``publisher'' means any person or entity that distributes copies +of the Document to the public. + +A section ``Entitled XYZ'' means a named subunit of the Document whose +title either is precisely XYZ or contains XYZ in parentheses following +text that translates XYZ in another language. (Here XYZ stands for a +specific section name mentioned below, such as ``Acknowledgements'', +``Dedications'', ``Endorsements'', or ``History''.) To ``Preserve the Title'' +of such a section when you modify the Document means that it remains a +section ``Entitled XYZ'' according to this definition. + +The Document may include Warranty Disclaimers next to the notice which +states that this License applies to the Document. These Warranty +Disclaimers are considered to be included by reference in this +License, but only as regards disclaiming warranties: any other +implication that these Warranty Disclaimers may have is void and has +no effect on the meaning of this License. + +@item +VERBATIM COPYING + +You may copy and distribute the Document in any medium, either +commercially or noncommercially, provided that this License, the +copyright notices, and the license notice saying this License applies +to the Document are reproduced in all copies, and that you add no other +conditions whatsoever to those of this License. You may not use +technical measures to obstruct or control the reading or further +copying of the copies you make or distribute. However, you may accept +compensation in exchange for copies. If you distribute a large enough +number of copies you must also follow the conditions in section 3. + +You may also lend copies, under the same conditions stated above, and +you may publicly display copies. + +@item +COPYING IN QUANTITY + +If you publish printed copies (or copies in media that commonly have +printed covers) of the Document, numbering more than 100, and the +Document's license notice requires Cover Texts, you must enclose the +copies in covers that carry, clearly and legibly, all these Cover +Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on +the back cover. Both covers must also clearly and legibly identify +you as the publisher of these copies. The front cover must present +the full title with all words of the title equally prominent and +visible. You may add other material on the covers in addition. +Copying with changes limited to the covers, as long as they preserve +the title of the Document and satisfy these conditions, can be treated +as verbatim copying in other respects. + +If the required texts for either cover are too voluminous to fit +legibly, you should put the first ones listed (as many as fit +reasonably) on the actual cover, and continue the rest onto adjacent +pages. + +If you publish or distribute Opaque copies of the Document numbering +more than 100, you must either include a machine-readable Transparent +copy along with each Opaque copy, or state in or with each Opaque copy +a computer-network location from which the general network-using +public has access to download using public-standard network protocols +a complete Transparent copy of the Document, free of added material. +If you use the latter option, you must take reasonably prudent steps, +when you begin distribution of Opaque copies in quantity, to ensure +that this Transparent copy will remain thus accessible at the stated +location until at least one year after the last time you distribute an +Opaque copy (directly or through your agents or retailers) of that +edition to the public. + +It is requested, but not required, that you contact the authors of the +Document well before redistributing any large number of copies, to give +them a chance to provide you with an updated version of the Document. + +@item +MODIFICATIONS + +You may copy and distribute a Modified Version of the Document under +the conditions of sections 2 and 3 above, provided that you release +the Modified Version under precisely this License, with the Modified +Version filling the role of the Document, thus licensing distribution +and modification of the Modified Version to whoever possesses a copy +of it. In addition, you must do these things in the Modified Version: + +@enumerate A +@item +Use in the Title Page (and on the covers, if any) a title distinct +from that of the Document, and from those of previous versions +(which should, if there were any, be listed in the History section +of the Document). You may use the same title as a previous version +if the original publisher of that version gives permission. + +@item +List on the Title Page, as authors, one or more persons or entities +responsible for authorship of the modifications in the Modified +Version, together with at least five of the principal authors of the +Document (all of its principal authors, if it has fewer than five), +unless they release you from this requirement. + +@item +State on the Title page the name of the publisher of the +Modified Version, as the publisher. + +@item +Preserve all the copyright notices of the Document. + +@item +Add an appropriate copyright notice for your modifications +adjacent to the other copyright notices. + +@item +Include, immediately after the copyright notices, a license notice +giving the public permission to use the Modified Version under the +terms of this License, in the form shown in the Addendum below. + +@item +Preserve in that license notice the full lists of Invariant Sections +and required Cover Texts given in the Document's license notice. + +@item +Include an unaltered copy of this License. + +@item +Preserve the section Entitled ``History'', Preserve its Title, and add +to it an item stating at least the title, year, new authors, and +publisher of the Modified Version as given on the Title Page. If +there is no section Entitled ``History'' in the Document, create one +stating the title, year, authors, and publisher of the Document as +given on its Title Page, then add an item describing the Modified +Version as stated in the previous sentence. + +@item +Preserve the network location, if any, given in the Document for +public access to a Transparent copy of the Document, and likewise +the network locations given in the Document for previous versions +it was based on. These may be placed in the ``History'' section. +You may omit a network location for a work that was published at +least four years before the Document itself, or if the original +publisher of the version it refers to gives permission. + +@item +For any section Entitled ``Acknowledgements'' or ``Dedications'', Preserve +the Title of the section, and preserve in the section all the +substance and tone of each of the contributor acknowledgements and/or +dedications given therein. + +@item +Preserve all the Invariant Sections of the Document, +unaltered in their text and in their titles. Section numbers +or the equivalent are not considered part of the section titles. + +@item +Delete any section Entitled ``Endorsements''. Such a section +may not be included in the Modified Version. + +@item +Do not retitle any existing section to be Entitled ``Endorsements'' or +to conflict in title with any Invariant Section. + +@item +Preserve any Warranty Disclaimers. +@end enumerate + +If the Modified Version includes new front-matter sections or +appendices that qualify as Secondary Sections and contain no material +copied from the Document, you may at your option designate some or all +of these sections as invariant. To do this, add their titles to the +list of Invariant Sections in the Modified Version's license notice. +These titles must be distinct from any other section titles. + +You may add a section Entitled ``Endorsements'', provided it contains +nothing but endorsements of your Modified Version by various +parties---for example, statements of peer review or that the text has +been approved by an organization as the authoritative definition of a +standard. + +You may add a passage of up to five words as a Front-Cover Text, and a +passage of up to 25 words as a Back-Cover Text, to the end of the list +of Cover Texts in the Modified Version. Only one passage of +Front-Cover Text and one of Back-Cover Text may be added by (or +through arrangements made by) any one entity. If the Document already +includes a cover text for the same cover, previously added by you or +by arrangement made by the same entity you are acting on behalf of, +you may not add another; but you may replace the old one, on explicit +permission from the previous publisher that added the old one. + +The author(s) and publisher(s) of the Document do not by this License +give permission to use their names for publicity for or to assert or +imply endorsement of any Modified Version. + +@item +COMBINING DOCUMENTS + +You may combine the Document with other documents released under this +License, under the terms defined in section 4 above for modified +versions, provided that you include in the combination all of the +Invariant Sections of all of the original documents, unmodified, and +list them all as Invariant Sections of your combined work in its +license notice, and that you preserve all their Warranty Disclaimers. + +The combined work need only contain one copy of this License, and +multiple identical Invariant Sections may be replaced with a single +copy. If there are multiple Invariant Sections with the same name but +different contents, make the title of each such section unique by +adding at the end of it, in parentheses, the name of the original +author or publisher of that section if known, or else a unique number. +Make the same adjustment to the section titles in the list of +Invariant Sections in the license notice of the combined work. + +In the combination, you must combine any sections Entitled ``History'' +in the various original documents, forming one section Entitled +``History''; likewise combine any sections Entitled ``Acknowledgements'', +and any sections Entitled ``Dedications''. You must delete all +sections Entitled ``Endorsements.'' + +@item +COLLECTIONS OF DOCUMENTS + +You may make a collection consisting of the Document and other documents +released under this License, and replace the individual copies of this +License in the various documents with a single copy that is included in +the collection, provided that you follow the rules of this License for +verbatim copying of each of the documents in all other respects. + +You may extract a single document from such a collection, and distribute +it individually under this License, provided you insert a copy of this +License into the extracted document, and follow this License in all +other respects regarding verbatim copying of that document. + +@item +AGGREGATION WITH INDEPENDENT WORKS + +A compilation of the Document or its derivatives with other separate +and independent documents or works, in or on a volume of a storage or +distribution medium, is called an ``aggregate'' if the copyright +resulting from the compilation is not used to limit the legal rights +of the compilation's users beyond what the individual works permit. +When the Document is included in an aggregate, this License does not +apply to the other works in the aggregate which are not themselves +derivative works of the Document. + +If the Cover Text requirement of section 3 is applicable to these +copies of the Document, then if the Document is less than one half of +the entire aggregate, the Document's Cover Texts may be placed on +covers that bracket the Document within the aggregate, or the +electronic equivalent of covers if the Document is in electronic form. +Otherwise they must appear on printed covers that bracket the whole +aggregate. + +@item +TRANSLATION + +Translation is considered a kind of modification, so you may +distribute translations of the Document under the terms of section 4. +Replacing Invariant Sections with translations requires special +permission from their copyright holders, but you may include +translations of some or all Invariant Sections in addition to the +original versions of these Invariant Sections. You may include a +translation of this License, and all the license notices in the +Document, and any Warranty Disclaimers, provided that you also include +the original English version of this License and the original versions +of those notices and disclaimers. In case of a disagreement between +the translation and the original version of this License or a notice +or disclaimer, the original version will prevail. + +If a section in the Document is Entitled ``Acknowledgements'', +``Dedications'', or ``History'', the requirement (section 4) to Preserve +its Title (section 1) will typically require changing the actual +title. + +@item +TERMINATION + +You may not copy, modify, sublicense, or distribute the Document +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense, or distribute it is void, and +will automatically terminate your rights under this License. + +However, if you cease all violation of this License, then your license +from a particular copyright holder is reinstated (a) provisionally, +unless and until the copyright holder explicitly and finally +terminates your license, and (b) permanently, if the copyright holder +fails to notify you of the violation by some reasonable means prior to +60 days after the cessation. + +Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + +Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, receipt of a copy of some or all of the same material does +not give you any rights to use it. + +@item +FUTURE REVISIONS OF THIS LICENSE + +The Free Software Foundation may publish new, revised versions +of the GNU Free Documentation License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. See +@uref{http://www.gnu.org/copyleft/}. + +Each version of the License is given a distinguishing version number. +If the Document specifies that a particular numbered version of this +License ``or any later version'' applies to it, you have the option of +following the terms and conditions either of that specified version or +of any later version that has been published (not as a draft) by the +Free Software Foundation. If the Document does not specify a version +number of this License, you may choose any version ever published (not +as a draft) by the Free Software Foundation. If the Document +specifies that a proxy can decide which future versions of this +License can be used, that proxy's public statement of acceptance of a +version permanently authorizes you to choose that version for the +Document. + +@item +RELICENSING + +``Massive Multiauthor Collaboration Site'' (or ``MMC Site'') means any +World Wide Web server that publishes copyrightable works and also +provides prominent facilities for anybody to edit those works. A +public wiki that anybody can edit is an example of such a server. A +``Massive Multiauthor Collaboration'' (or ``MMC'') contained in the +site means any set of copyrightable works thus published on the MMC +site. + +``CC-BY-SA'' means the Creative Commons Attribution-Share Alike 3.0 +license published by Creative Commons Corporation, a not-for-profit +corporation with a principal place of business in San Francisco, +California, as well as future copyleft versions of that license +published by that same organization. + +``Incorporate'' means to publish or republish a Document, in whole or +in part, as part of another Document. + +An MMC is ``eligible for relicensing'' if it is licensed under this +License, and if all works that were first published under this License +somewhere other than this MMC, and subsequently incorporated in whole +or in part into the MMC, (1) had no cover texts or invariant sections, +and (2) were thus incorporated prior to November 1, 2008. + +The operator of an MMC Site may republish an MMC contained in the site +under CC-BY-SA on the same site at any time before August 1, 2009, +provided the MMC is eligible for relicensing. + +@end enumerate + +@page +@heading ADDENDUM: How to use this License for your documents + +To use this License in a document you have written, include a copy of +the License in the document and put the following copyright and +license notices just after the title page: + +@smallexample +@group + Copyright (C) @var{year} @var{your name}. + Permission is granted to copy, distribute and/or modify this document + under the terms of the GNU Free Documentation License, Version 1.3 + or any later version published by the Free Software Foundation; + with no Invariant Sections, no Front-Cover Texts, and no Back-Cover + Texts. A copy of the license is included in the section entitled ``GNU + Free Documentation License''. +@end group +@end smallexample + +If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, +replace the ``with@dots{}Texts.''@: line with this: + +@smallexample +@group + with the Invariant Sections being @var{list their titles}, with + the Front-Cover Texts being @var{list}, and with the Back-Cover Texts + being @var{list}. +@end group +@end smallexample + +If you have Invariant Sections without Cover Texts, or some other +combination of the three, merge those two alternatives to suit the +situation. + +If your document contains nontrivial examples of program code, we +recommend releasing these examples in parallel under your choice of +free software license, such as the GNU General Public License, +to permit their use in free software. + +@c Local Variables: +@c ispell-local-pdict: "ispell-dict" +@c End: diff --git a/sysa/mes-0.22/doc/gendocs_template b/sysa/mes-0.22/doc/gendocs_template new file mode 100644 index 0000000..daf3bd2 --- /dev/null +++ b/sysa/mes-0.22/doc/gendocs_template @@ -0,0 +1,91 @@ +<!--#include virtual="/server/header.html" --> +<!-- Parent-Version: 1.77 --> +<title>%%TITLE%% - GNU Project - Free Software Foundation + +

    %%TITLE%%

    + +
    Free Software Foundation
    +
    last updated %%DATE%%
    + +

    This manual (%%PACKAGE%%) is available in the following formats:

    + +
    + +

    You can buy printed copies of +some manuals (among other items) from the Free Software Foundation; +this helps support FSF activities.

    + +

    (This page generated by the %%SCRIPTNAME%% +script.)

    + + + + + + + + diff --git a/sysa/mes-0.22/doc/images/README b/sysa/mes-0.22/doc/images/README new file mode 100644 index 0000000..2604d56 --- /dev/null +++ b/sysa/mes-0.22/doc/images/README @@ -0,0 +1,13 @@ + -*- org -*- +#+TITLE: GNU Mes images + +Copyright © 2018,2019 Jan (janneke) Nieuwenhuizen + + Copying and distribution of this file, with or without modification, + are permitted in any medium without royalty provided the copyright + notice and this notice are preserved. + +gcc-mesboot-graph.dot +This graph is generated from Guix wip-bootstrap, doing: +~/src/guix/core-updates/pre-inst-env guix graph --type=bag -e '(@@ (gnu packages commencement) gcc-mesboot)' > doc/images/gcc-mesboot-graph.dot +dot -T png doc/images/gcc-mesboot-graph.dot > doc/images/gcc-mesboot-graph.png diff --git a/sysa/mes-0.22/doc/images/gcc-mesboot-graph.dot b/sysa/mes-0.22/doc/images/gcc-mesboot-graph.dot new file mode 100644 index 0000000..da5ed17 --- /dev/null +++ b/sysa/mes-0.22/doc/images/gcc-mesboot-graph.dot @@ -0,0 +1,123 @@ +digraph "Guix bag" { + "/gnu/store/q8f5yjxp0kcdn2mwqf83bvhal71cnr71-gcc-mesboot-4.9.4.drv" [label = "gcc-mesboot@4.9.4", shape = box, fontname = Helvetica]; + "/gnu/store/q8f5yjxp0kcdn2mwqf83bvhal71cnr71-gcc-mesboot-4.9.4.drv" -> "/gnu/store/2lpg626q4x8v7hgqajywpq1rc8y72hzx-binutils-mesboot-2.20.1a.drv" [color = magenta]; + "/gnu/store/q8f5yjxp0kcdn2mwqf83bvhal71cnr71-gcc-mesboot-4.9.4.drv" -> "/gnu/store/7v6fpp5msmjbhmprikrfcj047016gd54-gcc-mesboot1-wrapper-4.7.4.drv" [color = magenta]; + "/gnu/store/q8f5yjxp0kcdn2mwqf83bvhal71cnr71-gcc-mesboot-4.9.4.drv" -> "/gnu/store/7pllq0crksfkr7856y1pawcy4scc7l4q-gcc-mesboot1-4.7.4.drv" [color = magenta]; + "/gnu/store/q8f5yjxp0kcdn2mwqf83bvhal71cnr71-gcc-mesboot-4.9.4.drv" -> "/gnu/store/lp6fycqqd8adndlfylh4mlihm0qakxzw-glibc-mesboot-2.16.0.drv" [color = magenta]; + "/gnu/store/q8f5yjxp0kcdn2mwqf83bvhal71cnr71-gcc-mesboot-4.9.4.drv" -> "/gnu/store/7wqw4023spvggi15vcxyxvivxa4rmmv8-bootstrap-binaries-0.drv" [color = magenta]; + "/gnu/store/q8f5yjxp0kcdn2mwqf83bvhal71cnr71-gcc-mesboot-4.9.4.drv" -> "/gnu/store/7wqw4023spvggi15vcxyxvivxa4rmmv8-bootstrap-binaries-0.drv" [color = magenta]; + "/gnu/store/q8f5yjxp0kcdn2mwqf83bvhal71cnr71-gcc-mesboot-4.9.4.drv" -> "/gnu/store/r50fj43103526ga6pi2f9jkk4gvaav7m-diffutils-mesboot-2.7.drv" [color = magenta]; + "/gnu/store/q8f5yjxp0kcdn2mwqf83bvhal71cnr71-gcc-mesboot-4.9.4.drv" -> "/gnu/store/r0z9bix88pz0wf6sgcn9185iwcsdracs-linux-libre-headers-bootstrap-0.drv" [color = magenta]; + "/gnu/store/q8f5yjxp0kcdn2mwqf83bvhal71cnr71-gcc-mesboot-4.9.4.drv" -> "/gnu/store/5ad88jy4a1gpbslzdiksk7zjyh28wzkr-make-mesboot-3.82.drv" [color = magenta]; + "/gnu/store/2lpg626q4x8v7hgqajywpq1rc8y72hzx-binutils-mesboot-2.20.1a.drv" [label = "binutils-mesboot@2.20.1a", shape = box, fontname = Helvetica]; + "/gnu/store/2lpg626q4x8v7hgqajywpq1rc8y72hzx-binutils-mesboot-2.20.1a.drv" -> "/gnu/store/x9shp86cz9f4rb5xvhs37zzxg1ngi4dr-binutils-mesboot0-2.20.1a.drv" [color = magenta]; + "/gnu/store/2lpg626q4x8v7hgqajywpq1rc8y72hzx-binutils-mesboot-2.20.1a.drv" -> "/gnu/store/2633565gzh4jqh7c5zf6i0iy9yxqigcv-glibc-mesboot0-2.2.5.drv" [color = magenta]; + "/gnu/store/2lpg626q4x8v7hgqajywpq1rc8y72hzx-binutils-mesboot-2.20.1a.drv" -> "/gnu/store/slnyk8gbnvfwy1m1was8myivpss58idd-gcc-mesboot0-2.95.3.drv" [color = magenta]; + "/gnu/store/2lpg626q4x8v7hgqajywpq1rc8y72hzx-binutils-mesboot-2.20.1a.drv" -> "/gnu/store/7wqw4023spvggi15vcxyxvivxa4rmmv8-bootstrap-binaries-0.drv" [color = magenta]; + "/gnu/store/2lpg626q4x8v7hgqajywpq1rc8y72hzx-binutils-mesboot-2.20.1a.drv" -> "/gnu/store/7wqw4023spvggi15vcxyxvivxa4rmmv8-bootstrap-binaries-0.drv" [color = magenta]; + "/gnu/store/2lpg626q4x8v7hgqajywpq1rc8y72hzx-binutils-mesboot-2.20.1a.drv" -> "/gnu/store/r50fj43103526ga6pi2f9jkk4gvaav7m-diffutils-mesboot-2.7.drv" [color = magenta]; + "/gnu/store/2lpg626q4x8v7hgqajywpq1rc8y72hzx-binutils-mesboot-2.20.1a.drv" -> "/gnu/store/r0z9bix88pz0wf6sgcn9185iwcsdracs-linux-libre-headers-bootstrap-0.drv" [color = magenta]; + "/gnu/store/2lpg626q4x8v7hgqajywpq1rc8y72hzx-binutils-mesboot-2.20.1a.drv" -> "/gnu/store/57da9mdiqhyn72m8wv00pdvzqi2ng4xb-make-mesboot0-3.80.drv" [color = magenta]; + "/gnu/store/x9shp86cz9f4rb5xvhs37zzxg1ngi4dr-binutils-mesboot0-2.20.1a.drv" [label = "binutils-mesboot0@2.20.1a", shape = box, fontname = Helvetica]; + "/gnu/store/x9shp86cz9f4rb5xvhs37zzxg1ngi4dr-binutils-mesboot0-2.20.1a.drv" -> "/gnu/store/fglx0fz62bygkdxxg878j7x9pfl37zhh-tcc-boot-0.9.27.drv" [color = red]; + "/gnu/store/x9shp86cz9f4rb5xvhs37zzxg1ngi4dr-binutils-mesboot0-2.20.1a.drv" -> "/gnu/store/7wqw4023spvggi15vcxyxvivxa4rmmv8-bootstrap-binaries-0.drv" [color = red]; + "/gnu/store/x9shp86cz9f4rb5xvhs37zzxg1ngi4dr-binutils-mesboot0-2.20.1a.drv" -> "/gnu/store/7wqw4023spvggi15vcxyxvivxa4rmmv8-bootstrap-binaries-0.drv" [color = red]; + "/gnu/store/x9shp86cz9f4rb5xvhs37zzxg1ngi4dr-binutils-mesboot0-2.20.1a.drv" -> "/gnu/store/r50fj43103526ga6pi2f9jkk4gvaav7m-diffutils-mesboot-2.7.drv" [color = red]; + "/gnu/store/x9shp86cz9f4rb5xvhs37zzxg1ngi4dr-binutils-mesboot0-2.20.1a.drv" -> "/gnu/store/57da9mdiqhyn72m8wv00pdvzqi2ng4xb-make-mesboot0-3.80.drv" [color = red]; + "/gnu/store/fglx0fz62bygkdxxg878j7x9pfl37zhh-tcc-boot-0.9.27.drv" [label = "tcc-boot@0.9.27", shape = box, fontname = Helvetica]; + "/gnu/store/fglx0fz62bygkdxxg878j7x9pfl37zhh-tcc-boot-0.9.27.drv" -> "/gnu/store/mw6swkryp89aml4jzac5lm8kmcv5k6gy-mes-boot-0.19.drv" [color = dimgrey]; + "/gnu/store/fglx0fz62bygkdxxg878j7x9pfl37zhh-tcc-boot-0.9.27.drv" -> "/gnu/store/nvhjn6b5hi4mj7wnjxrmj0dmdigq9m2z-tcc-boot0-0.9.26-6.c004e9a.drv" [color = dimgrey]; + "/gnu/store/fglx0fz62bygkdxxg878j7x9pfl37zhh-tcc-boot-0.9.27.drv" -> "/gnu/store/7wqw4023spvggi15vcxyxvivxa4rmmv8-bootstrap-binaries-0.drv" [color = dimgrey]; + "/gnu/store/mw6swkryp89aml4jzac5lm8kmcv5k6gy-mes-boot-0.19.drv" [label = "mes-boot@0.19", shape = box, fontname = Helvetica]; + "/gnu/store/mw6swkryp89aml4jzac5lm8kmcv5k6gy-mes-boot-0.19.drv" -> "/gnu/store/msykyiih9lwrd86x00vs00i8s5ipjks4-bootstrap-mescc-tools-0.5.2.drv" [color = darkgoldenrod]; + "/gnu/store/mw6swkryp89aml4jzac5lm8kmcv5k6gy-mes-boot-0.19.drv" -> "/gnu/store/7wqw4023spvggi15vcxyxvivxa4rmmv8-bootstrap-binaries-0.drv" [color = darkgoldenrod]; + "/gnu/store/mw6swkryp89aml4jzac5lm8kmcv5k6gy-mes-boot-0.19.drv" -> "/gnu/store/cfw60j3987wrvb26f2bpbw5l5q6q53fj-bootstrap-mes-0.drv" [color = darkgoldenrod]; + "/gnu/store/msykyiih9lwrd86x00vs00i8s5ipjks4-bootstrap-mescc-tools-0.5.2.drv" [label = "bootstrap-mescc-tools@0.5.2", shape = box, fontname = Helvetica]; + "/gnu/store/7wqw4023spvggi15vcxyxvivxa4rmmv8-bootstrap-binaries-0.drv" [label = "bootstrap-binaries@0", shape = box, fontname = Helvetica]; + "/gnu/store/cfw60j3987wrvb26f2bpbw5l5q6q53fj-bootstrap-mes-0.drv" [label = "bootstrap-mes@0", shape = box, fontname = Helvetica]; + "/gnu/store/nvhjn6b5hi4mj7wnjxrmj0dmdigq9m2z-tcc-boot0-0.9.26-6.c004e9a.drv" [label = "tcc-boot0@0.9.26-6.c004e9a", shape = box, fontname = Helvetica]; + "/gnu/store/nvhjn6b5hi4mj7wnjxrmj0dmdigq9m2z-tcc-boot0-0.9.26-6.c004e9a.drv" -> "/gnu/store/mw6swkryp89aml4jzac5lm8kmcv5k6gy-mes-boot-0.19.drv" [color = magenta]; + "/gnu/store/nvhjn6b5hi4mj7wnjxrmj0dmdigq9m2z-tcc-boot0-0.9.26-6.c004e9a.drv" -> "/gnu/store/msykyiih9lwrd86x00vs00i8s5ipjks4-bootstrap-mescc-tools-0.5.2.drv" [color = magenta]; + "/gnu/store/nvhjn6b5hi4mj7wnjxrmj0dmdigq9m2z-tcc-boot0-0.9.26-6.c004e9a.drv" -> "/gnu/store/7wqw4023spvggi15vcxyxvivxa4rmmv8-bootstrap-binaries-0.drv" [color = magenta]; + "/gnu/store/nvhjn6b5hi4mj7wnjxrmj0dmdigq9m2z-tcc-boot0-0.9.26-6.c004e9a.drv" -> "/gnu/store/cfw60j3987wrvb26f2bpbw5l5q6q53fj-bootstrap-mes-0.drv" [color = magenta]; + "/gnu/store/r50fj43103526ga6pi2f9jkk4gvaav7m-diffutils-mesboot-2.7.drv" [label = "diffutils-mesboot@2.7", shape = box, fontname = Helvetica]; + "/gnu/store/r50fj43103526ga6pi2f9jkk4gvaav7m-diffutils-mesboot-2.7.drv" -> "/gnu/store/mw6swkryp89aml4jzac5lm8kmcv5k6gy-mes-boot-0.19.drv" [color = peachpuff4]; + "/gnu/store/r50fj43103526ga6pi2f9jkk4gvaav7m-diffutils-mesboot-2.7.drv" -> "/gnu/store/fglx0fz62bygkdxxg878j7x9pfl37zhh-tcc-boot-0.9.27.drv" [color = peachpuff4]; + "/gnu/store/r50fj43103526ga6pi2f9jkk4gvaav7m-diffutils-mesboot-2.7.drv" -> "/gnu/store/7wqw4023spvggi15vcxyxvivxa4rmmv8-bootstrap-binaries-0.drv" [color = peachpuff4]; + "/gnu/store/r50fj43103526ga6pi2f9jkk4gvaav7m-diffutils-mesboot-2.7.drv" -> "/gnu/store/7wqw4023spvggi15vcxyxvivxa4rmmv8-bootstrap-binaries-0.drv" [color = peachpuff4]; + "/gnu/store/r50fj43103526ga6pi2f9jkk4gvaav7m-diffutils-mesboot-2.7.drv" -> "/gnu/store/57da9mdiqhyn72m8wv00pdvzqi2ng4xb-make-mesboot0-3.80.drv" [color = peachpuff4]; + "/gnu/store/57da9mdiqhyn72m8wv00pdvzqi2ng4xb-make-mesboot0-3.80.drv" [label = "make-mesboot0@3.80", shape = box, fontname = Helvetica]; + "/gnu/store/57da9mdiqhyn72m8wv00pdvzqi2ng4xb-make-mesboot0-3.80.drv" -> "/gnu/store/fglx0fz62bygkdxxg878j7x9pfl37zhh-tcc-boot-0.9.27.drv" [color = dimgrey]; + "/gnu/store/57da9mdiqhyn72m8wv00pdvzqi2ng4xb-make-mesboot0-3.80.drv" -> "/gnu/store/7wqw4023spvggi15vcxyxvivxa4rmmv8-bootstrap-binaries-0.drv" [color = dimgrey]; + "/gnu/store/57da9mdiqhyn72m8wv00pdvzqi2ng4xb-make-mesboot0-3.80.drv" -> "/gnu/store/7wqw4023spvggi15vcxyxvivxa4rmmv8-bootstrap-binaries-0.drv" [color = dimgrey]; + "/gnu/store/2633565gzh4jqh7c5zf6i0iy9yxqigcv-glibc-mesboot0-2.2.5.drv" [label = "glibc-mesboot0@2.2.5", shape = box, fontname = Helvetica]; + "/gnu/store/2633565gzh4jqh7c5zf6i0iy9yxqigcv-glibc-mesboot0-2.2.5.drv" -> "/gnu/store/x9shp86cz9f4rb5xvhs37zzxg1ngi4dr-binutils-mesboot0-2.20.1a.drv" [color = red]; + "/gnu/store/2633565gzh4jqh7c5zf6i0iy9yxqigcv-glibc-mesboot0-2.2.5.drv" -> "/gnu/store/kcyh6k46ijm9nsq1as26rr0aq7rkx4f7-gcc-core-mesboot-2.95.3.drv" [color = red]; + "/gnu/store/2633565gzh4jqh7c5zf6i0iy9yxqigcv-glibc-mesboot0-2.2.5.drv" -> "/gnu/store/7wqw4023spvggi15vcxyxvivxa4rmmv8-bootstrap-binaries-0.drv" [color = red]; + "/gnu/store/2633565gzh4jqh7c5zf6i0iy9yxqigcv-glibc-mesboot0-2.2.5.drv" -> "/gnu/store/7wqw4023spvggi15vcxyxvivxa4rmmv8-bootstrap-binaries-0.drv" [color = red]; + "/gnu/store/2633565gzh4jqh7c5zf6i0iy9yxqigcv-glibc-mesboot0-2.2.5.drv" -> "/gnu/store/r50fj43103526ga6pi2f9jkk4gvaav7m-diffutils-mesboot-2.7.drv" [color = red]; + "/gnu/store/2633565gzh4jqh7c5zf6i0iy9yxqigcv-glibc-mesboot0-2.2.5.drv" -> "/gnu/store/hnxdqmhjdvh1ra9ar4lxl25xf6a7bhzz-mesboot-headers-0.19.drv" [color = red]; + "/gnu/store/2633565gzh4jqh7c5zf6i0iy9yxqigcv-glibc-mesboot0-2.2.5.drv" -> "/gnu/store/57da9mdiqhyn72m8wv00pdvzqi2ng4xb-make-mesboot0-3.80.drv" [color = red]; + "/gnu/store/kcyh6k46ijm9nsq1as26rr0aq7rkx4f7-gcc-core-mesboot-2.95.3.drv" [label = "gcc-core-mesboot@2.95.3", shape = box, fontname = Helvetica]; + "/gnu/store/kcyh6k46ijm9nsq1as26rr0aq7rkx4f7-gcc-core-mesboot-2.95.3.drv" -> "/gnu/store/x9shp86cz9f4rb5xvhs37zzxg1ngi4dr-binutils-mesboot0-2.20.1a.drv" [color = dimgrey]; + "/gnu/store/kcyh6k46ijm9nsq1as26rr0aq7rkx4f7-gcc-core-mesboot-2.95.3.drv" -> "/gnu/store/fglx0fz62bygkdxxg878j7x9pfl37zhh-tcc-boot-0.9.27.drv" [color = dimgrey]; + "/gnu/store/kcyh6k46ijm9nsq1as26rr0aq7rkx4f7-gcc-core-mesboot-2.95.3.drv" -> "/gnu/store/7wqw4023spvggi15vcxyxvivxa4rmmv8-bootstrap-binaries-0.drv" [color = dimgrey]; + "/gnu/store/kcyh6k46ijm9nsq1as26rr0aq7rkx4f7-gcc-core-mesboot-2.95.3.drv" -> "/gnu/store/7wqw4023spvggi15vcxyxvivxa4rmmv8-bootstrap-binaries-0.drv" [color = dimgrey]; + "/gnu/store/kcyh6k46ijm9nsq1as26rr0aq7rkx4f7-gcc-core-mesboot-2.95.3.drv" -> "/gnu/store/r50fj43103526ga6pi2f9jkk4gvaav7m-diffutils-mesboot-2.7.drv" [color = dimgrey]; + "/gnu/store/kcyh6k46ijm9nsq1as26rr0aq7rkx4f7-gcc-core-mesboot-2.95.3.drv" -> "/gnu/store/57da9mdiqhyn72m8wv00pdvzqi2ng4xb-make-mesboot0-3.80.drv" [color = dimgrey]; + "/gnu/store/hnxdqmhjdvh1ra9ar4lxl25xf6a7bhzz-mesboot-headers-0.19.drv" [label = "mesboot-headers@0.19", shape = box, fontname = Helvetica]; + "/gnu/store/hnxdqmhjdvh1ra9ar4lxl25xf6a7bhzz-mesboot-headers-0.19.drv" -> "/gnu/store/7wqw4023spvggi15vcxyxvivxa4rmmv8-bootstrap-binaries-0.drv" [color = blue]; + "/gnu/store/hnxdqmhjdvh1ra9ar4lxl25xf6a7bhzz-mesboot-headers-0.19.drv" -> "/gnu/store/r0z9bix88pz0wf6sgcn9185iwcsdracs-linux-libre-headers-bootstrap-0.drv" [color = blue]; + "/gnu/store/r0z9bix88pz0wf6sgcn9185iwcsdracs-linux-libre-headers-bootstrap-0.drv" [label = "linux-libre-headers-bootstrap@0", shape = box, fontname = Helvetica]; + "/gnu/store/slnyk8gbnvfwy1m1was8myivpss58idd-gcc-mesboot0-2.95.3.drv" [label = "gcc-mesboot0@2.95.3", shape = box, fontname = Helvetica]; + "/gnu/store/slnyk8gbnvfwy1m1was8myivpss58idd-gcc-mesboot0-2.95.3.drv" -> "/gnu/store/x9shp86cz9f4rb5xvhs37zzxg1ngi4dr-binutils-mesboot0-2.20.1a.drv" [color = darkseagreen]; + "/gnu/store/slnyk8gbnvfwy1m1was8myivpss58idd-gcc-mesboot0-2.95.3.drv" -> "/gnu/store/kcyh6k46ijm9nsq1as26rr0aq7rkx4f7-gcc-core-mesboot-2.95.3.drv" [color = darkseagreen]; + "/gnu/store/slnyk8gbnvfwy1m1was8myivpss58idd-gcc-mesboot0-2.95.3.drv" -> "/gnu/store/2633565gzh4jqh7c5zf6i0iy9yxqigcv-glibc-mesboot0-2.2.5.drv" [color = darkseagreen]; + "/gnu/store/slnyk8gbnvfwy1m1was8myivpss58idd-gcc-mesboot0-2.95.3.drv" -> "/gnu/store/7wqw4023spvggi15vcxyxvivxa4rmmv8-bootstrap-binaries-0.drv" [color = darkseagreen]; + "/gnu/store/slnyk8gbnvfwy1m1was8myivpss58idd-gcc-mesboot0-2.95.3.drv" -> "/gnu/store/7wqw4023spvggi15vcxyxvivxa4rmmv8-bootstrap-binaries-0.drv" [color = darkseagreen]; + "/gnu/store/slnyk8gbnvfwy1m1was8myivpss58idd-gcc-mesboot0-2.95.3.drv" -> "/gnu/store/r50fj43103526ga6pi2f9jkk4gvaav7m-diffutils-mesboot-2.7.drv" [color = darkseagreen]; + "/gnu/store/slnyk8gbnvfwy1m1was8myivpss58idd-gcc-mesboot0-2.95.3.drv" -> "/gnu/store/r0z9bix88pz0wf6sgcn9185iwcsdracs-linux-libre-headers-bootstrap-0.drv" [color = darkseagreen]; + "/gnu/store/slnyk8gbnvfwy1m1was8myivpss58idd-gcc-mesboot0-2.95.3.drv" -> "/gnu/store/57da9mdiqhyn72m8wv00pdvzqi2ng4xb-make-mesboot0-3.80.drv" [color = darkseagreen]; + "/gnu/store/7v6fpp5msmjbhmprikrfcj047016gd54-gcc-mesboot1-wrapper-4.7.4.drv" [label = "gcc-mesboot1-wrapper@4.7.4", shape = box, fontname = Helvetica]; + "/gnu/store/7v6fpp5msmjbhmprikrfcj047016gd54-gcc-mesboot1-wrapper-4.7.4.drv" -> "/gnu/store/7wqw4023spvggi15vcxyxvivxa4rmmv8-bootstrap-binaries-0.drv" [color = red]; + "/gnu/store/7v6fpp5msmjbhmprikrfcj047016gd54-gcc-mesboot1-wrapper-4.7.4.drv" -> "/gnu/store/lp6fycqqd8adndlfylh4mlihm0qakxzw-glibc-mesboot-2.16.0.drv" [color = red]; + "/gnu/store/7v6fpp5msmjbhmprikrfcj047016gd54-gcc-mesboot1-wrapper-4.7.4.drv" -> "/gnu/store/7pllq0crksfkr7856y1pawcy4scc7l4q-gcc-mesboot1-4.7.4.drv" [color = red]; + "/gnu/store/lp6fycqqd8adndlfylh4mlihm0qakxzw-glibc-mesboot-2.16.0.drv" [label = "glibc-mesboot@2.16.0", shape = box, fontname = Helvetica]; + "/gnu/store/lp6fycqqd8adndlfylh4mlihm0qakxzw-glibc-mesboot-2.16.0.drv" -> "/gnu/store/2lpg626q4x8v7hgqajywpq1rc8y72hzx-binutils-mesboot-2.20.1a.drv" [color = magenta]; + "/gnu/store/lp6fycqqd8adndlfylh4mlihm0qakxzw-glibc-mesboot-2.16.0.drv" -> "/gnu/store/2633565gzh4jqh7c5zf6i0iy9yxqigcv-glibc-mesboot0-2.2.5.drv" [color = magenta]; + "/gnu/store/lp6fycqqd8adndlfylh4mlihm0qakxzw-glibc-mesboot-2.16.0.drv" -> "/gnu/store/p9sl13frcs2wdcddkh20hc51l7lpavza-glibc-headers-mesboot-2.16.0.drv" [color = magenta]; + "/gnu/store/lp6fycqqd8adndlfylh4mlihm0qakxzw-glibc-mesboot-2.16.0.drv" -> "/gnu/store/7pllq0crksfkr7856y1pawcy4scc7l4q-gcc-mesboot1-4.7.4.drv" [color = magenta]; + "/gnu/store/lp6fycqqd8adndlfylh4mlihm0qakxzw-glibc-mesboot-2.16.0.drv" -> "/gnu/store/7wqw4023spvggi15vcxyxvivxa4rmmv8-bootstrap-binaries-0.drv" [color = magenta]; + "/gnu/store/lp6fycqqd8adndlfylh4mlihm0qakxzw-glibc-mesboot-2.16.0.drv" -> "/gnu/store/7wqw4023spvggi15vcxyxvivxa4rmmv8-bootstrap-binaries-0.drv" [color = magenta]; + "/gnu/store/lp6fycqqd8adndlfylh4mlihm0qakxzw-glibc-mesboot-2.16.0.drv" -> "/gnu/store/r50fj43103526ga6pi2f9jkk4gvaav7m-diffutils-mesboot-2.7.drv" [color = magenta]; + "/gnu/store/lp6fycqqd8adndlfylh4mlihm0qakxzw-glibc-mesboot-2.16.0.drv" -> "/gnu/store/r0z9bix88pz0wf6sgcn9185iwcsdracs-linux-libre-headers-bootstrap-0.drv" [color = magenta]; + "/gnu/store/lp6fycqqd8adndlfylh4mlihm0qakxzw-glibc-mesboot-2.16.0.drv" -> "/gnu/store/5ad88jy4a1gpbslzdiksk7zjyh28wzkr-make-mesboot-3.82.drv" [color = magenta]; + "/gnu/store/p9sl13frcs2wdcddkh20hc51l7lpavza-glibc-headers-mesboot-2.16.0.drv" [label = "glibc-headers-mesboot@2.16.0", shape = box, fontname = Helvetica]; + "/gnu/store/p9sl13frcs2wdcddkh20hc51l7lpavza-glibc-headers-mesboot-2.16.0.drv" -> "/gnu/store/2lpg626q4x8v7hgqajywpq1rc8y72hzx-binutils-mesboot-2.20.1a.drv" [color = darkgoldenrod]; + "/gnu/store/p9sl13frcs2wdcddkh20hc51l7lpavza-glibc-headers-mesboot-2.16.0.drv" -> "/gnu/store/2633565gzh4jqh7c5zf6i0iy9yxqigcv-glibc-mesboot0-2.2.5.drv" [color = darkgoldenrod]; + "/gnu/store/p9sl13frcs2wdcddkh20hc51l7lpavza-glibc-headers-mesboot-2.16.0.drv" -> "/gnu/store/7pllq0crksfkr7856y1pawcy4scc7l4q-gcc-mesboot1-4.7.4.drv" [color = darkgoldenrod]; + "/gnu/store/p9sl13frcs2wdcddkh20hc51l7lpavza-glibc-headers-mesboot-2.16.0.drv" -> "/gnu/store/hnxdqmhjdvh1ra9ar4lxl25xf6a7bhzz-mesboot-headers-0.19.drv" [color = darkgoldenrod]; + "/gnu/store/p9sl13frcs2wdcddkh20hc51l7lpavza-glibc-headers-mesboot-2.16.0.drv" -> "/gnu/store/7wqw4023spvggi15vcxyxvivxa4rmmv8-bootstrap-binaries-0.drv" [color = darkgoldenrod]; + "/gnu/store/p9sl13frcs2wdcddkh20hc51l7lpavza-glibc-headers-mesboot-2.16.0.drv" -> "/gnu/store/7wqw4023spvggi15vcxyxvivxa4rmmv8-bootstrap-binaries-0.drv" [color = darkgoldenrod]; + "/gnu/store/p9sl13frcs2wdcddkh20hc51l7lpavza-glibc-headers-mesboot-2.16.0.drv" -> "/gnu/store/r50fj43103526ga6pi2f9jkk4gvaav7m-diffutils-mesboot-2.7.drv" [color = darkgoldenrod]; + "/gnu/store/p9sl13frcs2wdcddkh20hc51l7lpavza-glibc-headers-mesboot-2.16.0.drv" -> "/gnu/store/r0z9bix88pz0wf6sgcn9185iwcsdracs-linux-libre-headers-bootstrap-0.drv" [color = darkgoldenrod]; + "/gnu/store/p9sl13frcs2wdcddkh20hc51l7lpavza-glibc-headers-mesboot-2.16.0.drv" -> "/gnu/store/5ad88jy4a1gpbslzdiksk7zjyh28wzkr-make-mesboot-3.82.drv" [color = darkgoldenrod]; + "/gnu/store/7pllq0crksfkr7856y1pawcy4scc7l4q-gcc-mesboot1-4.7.4.drv" [label = "gcc-mesboot1@4.7.4", shape = box, fontname = Helvetica]; + "/gnu/store/7pllq0crksfkr7856y1pawcy4scc7l4q-gcc-mesboot1-4.7.4.drv" -> "/gnu/store/2lpg626q4x8v7hgqajywpq1rc8y72hzx-binutils-mesboot-2.20.1a.drv" [color = cyan3]; + "/gnu/store/7pllq0crksfkr7856y1pawcy4scc7l4q-gcc-mesboot1-4.7.4.drv" -> "/gnu/store/slnyk8gbnvfwy1m1was8myivpss58idd-gcc-mesboot0-2.95.3.drv" [color = cyan3]; + "/gnu/store/7pllq0crksfkr7856y1pawcy4scc7l4q-gcc-mesboot1-4.7.4.drv" -> "/gnu/store/2633565gzh4jqh7c5zf6i0iy9yxqigcv-glibc-mesboot0-2.2.5.drv" [color = cyan3]; + "/gnu/store/7pllq0crksfkr7856y1pawcy4scc7l4q-gcc-mesboot1-4.7.4.drv" -> "/gnu/store/7wqw4023spvggi15vcxyxvivxa4rmmv8-bootstrap-binaries-0.drv" [color = cyan3]; + "/gnu/store/7pllq0crksfkr7856y1pawcy4scc7l4q-gcc-mesboot1-4.7.4.drv" -> "/gnu/store/7wqw4023spvggi15vcxyxvivxa4rmmv8-bootstrap-binaries-0.drv" [color = cyan3]; + "/gnu/store/7pllq0crksfkr7856y1pawcy4scc7l4q-gcc-mesboot1-4.7.4.drv" -> "/gnu/store/r50fj43103526ga6pi2f9jkk4gvaav7m-diffutils-mesboot-2.7.drv" [color = cyan3]; + "/gnu/store/7pllq0crksfkr7856y1pawcy4scc7l4q-gcc-mesboot1-4.7.4.drv" -> "/gnu/store/r0z9bix88pz0wf6sgcn9185iwcsdracs-linux-libre-headers-bootstrap-0.drv" [color = cyan3]; + "/gnu/store/7pllq0crksfkr7856y1pawcy4scc7l4q-gcc-mesboot1-4.7.4.drv" -> "/gnu/store/5ad88jy4a1gpbslzdiksk7zjyh28wzkr-make-mesboot-3.82.drv" [color = cyan3]; + "/gnu/store/5ad88jy4a1gpbslzdiksk7zjyh28wzkr-make-mesboot-3.82.drv" [label = "make-mesboot@3.82", shape = box, fontname = Helvetica]; + "/gnu/store/5ad88jy4a1gpbslzdiksk7zjyh28wzkr-make-mesboot-3.82.drv" -> "/gnu/store/x9shp86cz9f4rb5xvhs37zzxg1ngi4dr-binutils-mesboot0-2.20.1a.drv" [color = dimgrey]; + "/gnu/store/5ad88jy4a1gpbslzdiksk7zjyh28wzkr-make-mesboot-3.82.drv" -> "/gnu/store/2633565gzh4jqh7c5zf6i0iy9yxqigcv-glibc-mesboot0-2.2.5.drv" [color = dimgrey]; + "/gnu/store/5ad88jy4a1gpbslzdiksk7zjyh28wzkr-make-mesboot-3.82.drv" -> "/gnu/store/slnyk8gbnvfwy1m1was8myivpss58idd-gcc-mesboot0-2.95.3.drv" [color = dimgrey]; + "/gnu/store/5ad88jy4a1gpbslzdiksk7zjyh28wzkr-make-mesboot-3.82.drv" -> "/gnu/store/57da9mdiqhyn72m8wv00pdvzqi2ng4xb-make-mesboot0-3.80.drv" [color = dimgrey]; + "/gnu/store/5ad88jy4a1gpbslzdiksk7zjyh28wzkr-make-mesboot-3.82.drv" -> "/gnu/store/7wqw4023spvggi15vcxyxvivxa4rmmv8-bootstrap-binaries-0.drv" [color = dimgrey]; + "/gnu/store/5ad88jy4a1gpbslzdiksk7zjyh28wzkr-make-mesboot-3.82.drv" -> "/gnu/store/7wqw4023spvggi15vcxyxvivxa4rmmv8-bootstrap-binaries-0.drv" [color = dimgrey]; + "/gnu/store/5ad88jy4a1gpbslzdiksk7zjyh28wzkr-make-mesboot-3.82.drv" -> "/gnu/store/r0z9bix88pz0wf6sgcn9185iwcsdracs-linux-libre-headers-bootstrap-0.drv" [color = dimgrey]; + +} diff --git a/sysa/mes-0.22/doc/mes.texi b/sysa/mes-0.22/doc/mes.texi new file mode 100644 index 0000000..0c2de61 --- /dev/null +++ b/sysa/mes-0.22/doc/mes.texi @@ -0,0 +1,1252 @@ +\input texinfo +@c -*- mode: texinfo; -*- + +@c %**start of header +@setfilename mes.info +@documentencoding UTF-8 +@settitle GNU Mes Reference Manual +@c %**end of header + +@include version.texi + +@c Identifier of the OpenPGP key used to sign tarballs and such. +@set OPENPGP-SIGNING-KEY-ID 1A858392E331EAFDB8C27FFBF3C1A0D9C1D65273 + +@copying +Copyright @copyright{} 2018,2019 Jan (janneke) Nieuwenhuizen@* + +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.3 or +any later version published by the Free Software Foundation; with no +Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A +copy of the license is included in the section entitled ``GNU Free +Documentation License''. +@end copying + +@dircategory Bootstrapping +@direntry +* Mes: (mes). A system bootstrap worthy of GNU. + + +* mes: (mes)Invoking mes. Running Mes, a minimalist Guile lookalike. +* mescc: (mes)Invoking mescc. Running the MesCC bootstrap compiler. +@end direntry + +@titlepage +@title GNU Mes Reference Manual +@subtitle Full Source Bootstrapping for the GNU system +@author Jan (janneke) Nieuwenhuizen + +@page +@vskip 0pt plus 1filll +Edition @value{EDITION} @* +@value{UPDATED} @* + +@insertcopying +@end titlepage + +@contents + +@c ********************************************************************* +@node Top, Introduction, (dir), (dir) +@top GNU Mes + +This document describes GNU Mes version @value{VERSION}, a bootstrappable +Scheme interpreter and C compiler written for bootstrapping the GNU system. + +@menu +* Introduction:: What is Mes about? +* Installation:: Installing Mes. +* Bootstrapping:: Would you strap my boots? +* Contributing:: Your help needed! +* Acknowledgments:: Thanks! +* Resources:: +* GNU Free Documentation License:: The license of this manual. +* Concept Index:: Concepts. +* Programming Index:: Data types, functions, and variables. + +@detailmenu + --- The Detailed Node Listing --- + +Software Freedom + +* Reproducible Builds:: Reproducibility and free software. +* Bootstrappable Builds:: The freedom to build a software without binary seed. +* Full Source Bootstrap:: Software dependencies worthy of GNU. +* LISP as Maxwell's Equations of Software:: Auditable elegance. + +Installation + +* Regular Requirements:: Software needed to build and run Mes. +* Bootstrap Requirements:: Software needed to bootstrap Mes. +* Running the Test Suites:: Testing Mes. + +Bootstrapping + +* The Mes Bootstrap Process:: How Mes will make you yogurt from pure milk. +* Invoking mes:: Running Mes, a minimalist Guile lookalike. +* Invoking mescc:: Running the MesCC bootstrap compiler. +* Invoking mesar:: + +Invoking mes + +* Environment Variables:: If the bits won't change, change their habitat. + +Invoking mescc + +* MesCC Environment Variables:: There's no NIX like POSIX. + +Contributing + +* Building from Git:: The latest and greatest. +* Running Mes From the Source Tree:: Hacker tricks. +* Porting GNU Mes:: Teach Mes about your platform. +* The Perfect Setup:: The right tools. +* Coding Style:: Hygiene of the contributor. +* Submitting Patches:: Share your work. + +@end detailmenu +@end menu + +@c ********************************************************************* +@node Introduction, Installation, Top, Top +@chapter Introduction + +@quotation +These were “Maxwell’s Equations of Software!” + +@author Alan Kay +@end quotation + +The purpose of GNU Mes@footnote{``Mes'' is an acronym for the Maxwell +Equations of Software.} is to help create a computer operating system +that we can trust. + +Mes consists of a mutual self-hosting Scheme interpreter written in C +and a Nyacc-based (see @pxref{NYACC User's Guide,,, nyacc-ug, NYACC +User's Guide}) C compiler written in Scheme. The Scheme interpreter +@file{mes.c} is about 5,000LOC of restricted C, to be compiled with +M2-Planet@footnote{See @url{https://github.com/oriansj/m2-planet}}, a +very simple C compiler. + +If we want to trust our computers to do what we instructed them to do +then we need to be able to inspect all instructions---all +softwares---that we have given it to run. + +@section Software Freedom +@cindex purpose +The four essential Freedoms of Software are at the core of our GNU +community. Quoting the GNU philosophy@footnote{The four essential +freedoms @url{https://www.gnu.org/philosophy/free-sw.html}} + +@quotation +A program is free software if the program's users have the four +essential freedoms: + +@enumerate 0 +@item + The freedom to run the program as you wish, for any purpose (freedom 0). + +@item + The freedom to study how the program works, and change it so it does + your computing as you wish (freedom 1). Access to the source code is + a precondition for this. + +@item + The freedom to redistribute copies so you can help others (freedom + 2). + +@item + The freedom to distribute copies of your modified versions to others + (freedom 3). By doing this you can give the whole community a chance + to benefit from your changes. Access to the source code is a + precondition for this. +@end enumerate +@end quotation + +A computer operating system that respects the user's freedom is one +essential ingredient for building a reliable, trustable computing +system. There are about a dozen general purpose operating systems that +can be trusted in this way, see +@url{https://www.gnu.org/distros/free-distros.html, Free Distributions}. +For all softwares on such a system we have the full source code and +build recipes available. + +@c The Free System Distribution Guidelines (GNU FSDG)@footnote{Examples of +@c free operating systems are GNU Guix, GNU Parabola and Trisquel, see +@c https://www.gnu.org/distros/free-system-distribution-guidelines.html} +@c can serve as help to create such a system + +So we have access to all the software, we have studied it, possibly +modified it, then we built it and we installed it on a computer or some +device or appliance. How can we trust that when we run the program we +are indeed running the untainted product of the source code that we +studied? Unless we are certain of this we cannot really enjoy +Freedom 1. + +@menu +* Reproducible Builds:: Reproducibility and free software. +* Bootstrappable Builds:: The freedom to build a software without binary seed. +* Full Source Bootstrap:: Software dependencies worthy of GNU. +* LISP as Maxwell's Equations of Software:: Auditable elegance. +@end menu + +@node Reproducible Builds, Bootstrappable Builds, Introduction, Introduction +@section Reproducible Builds + +The current Reproducible Builds effort incubated in the Debian +project@footnote{@url{http://debian.org, The Debian Project}} and was +organized by Lunar. Quoting the Reproducible Builds +website@footnote{@url{https://reproducible-builds.org/,Reproducible +Builds}} + +@quotation +A build is reproducible if given the same source code, build environment +and build instructions, any party can recreate bit-by-bit identical +copies of all specified artifacts. +@end quotation + +@subsection Can we trust our freedom? + +Now consider the opposite, that a second build of a piece of source code +produces a different binary program. Upon further investigation we +might find that the only difference is probably harmless: a timestamp +that was embedded in the binary, or perhaps the name of the user that +built it or directory it was built in. Such investigations can be +nontrivial and are highly unpractical. And what if the binary +difference is not so trivial, cannot be easily accounted for? + +A piece of software that cannot be built bit-by-bit reproducible is +probably not a good community member in the world of software freedom. +We think the importance of reproducibility should not be underestimated +largely because failing that precondition makes justifable trust in +binaries provided suspect at best and downright dangerous in reality. + +It becomes clear that a bit-by-bit reproducible build of all our +sofwares is essential if we value our Freedom 1. + +@subsection An Old Idea + +The idea of reproducible builds is not very new. It was implemented for +GNU tools in the early 1990s (which we learned, much later in 2017). In +the Debian world it was mentioned first in 2000 and then more explicitly +in 2007 on +debian-devel@footnote{@url{https://lists.debian.org/debian-devel/2007/09/msg00746.html,Martin Uecker on debian-devel on bit-reproducibility}} + +@quotation +I think it would be really cool if the Debian policy required that +packages could be rebuild bit-identical from source. + +@author Martin Uecker +@end quotation + +@node Bootstrappable Builds, Full Source Bootstrap, Reproducible Builds, Introduction +@section Bootstrappable Builds + +Software distributions that take reproducible builds seriously are +currently shipping well over 90% reproducible packages. + +That a package builds bit-by-bit reproducibly however is not enough to +guarantee Freedom 1. There is another factor that is often overlooked: +opaque ascii or binary @emph{seeds} that are injected during build +time. Yes, a package may build reproduciblly from all inspectable +sourcess...but what functionality is programmed in the opaque seed? + +@subsection Bootstrap Binary Seed +Possibly one of the most harmless, but certainly by far the biggest +binary seed that all software distributions inject are the so called +@emph{bootstrap binary seed}. Bootstrap binaries are the initial binary +seeds that are used to start building the distribution. + +The GNU Guix operating system, version 1.0 had a relatively small +closure of bootstrap binary seed: GNU binutils, GNU gcc, GNU Libc, GNU +Guile, and ``Static binaries'' (think: bash, bzip2, coreutils, gawk, +grep, gzip, patch, sed, tar, xz). + +@example +$ du -schx $(readlink $(guix build bootstrap-tarballs)/*) +2.1M /gnu/store/9623n4bq6iq5c8cwwdq99qb7d0xj93ym-binutils-static-stripped-tarball-2.28.1/binutils-static-stripped-2.28.1-x86_64-linux.tar.xz +18M /gnu/store/437xwygmmwwpkddcyy1qvjcv4hak89pb-gcc-stripped-tarball-5.5.0/gcc-stripped-5.5.0-x86_64-linux.tar.xz +1.8M /gnu/store/55ccx18a0d1x5y6a575jf1yr0ywizvdg-glibc-stripped-tarball-2.26.105-g0890d5379c/glibc-stripped-2.26.105-g0890d5379c-x86_64-linux.tar.xz +5.7M /gnu/store/bqf0ajclbvnbm0a46819f30804y3ilx0-guile-static-stripped-tarball-2.2.3/guile-static-stripped-2.2.3-x86_64-linux.tar.xz +5.8M /gnu/store/j8yzjmh9sy4gbdfwjrhw46zca43aah6x-static-binaries-tarball-0/static-binaries-0-x86_64-linux.tar.xz +33M total +@end example + +only a 33MB download that unpacks to a 252MB @emph{seed} of opaque +binary code. + +@example +$ for i in $(readlink $(guix build bootstrap-tarballs)/*);\ + do sudo tar xf $i; done +$ du -schx * +130M bin +13M include +54M lib +51M libexec +5.2M share +252M total +@end example + +During the Guix 1.1 development series we managed to create the first +reduction by 50% of the Guix @emph{bootstrap binary seed}@footnote{See +@url{https://guix.gnu.org/blog/2019/guix-reduces-bootstrap-seed-by-50/}}. +This was a very important step because the ~250MB @emph{seed} of binary +code was practically non-auditable, which makes it hard to establish +what source code produced them. + +@node Full Source Bootstrap, , Bootstrappable Builds, Introduction +@section Full Source Bootstrap + +There is an obvious solution: we cannot allow any binary seeds in our +software stack. Not even in the bootstrap binary seed. Maybe that is a +bit too strong: we want to have the absolute minimum of binary seeds and +all binary seeds need to be inspectable and must be reviewed. How big +would the absolute minimal set be? + +@subsection The Magical Self-Hosting Hex Assembler + +June 2016 I learnt about +@url{https://github.com/oriansj/stage0/,Stage0}. Jeremiah Orians +created @file{hex0} a ~500 byte self-hosting hex assembler. The source +code is well documented and the binary is the exact mirror of the source +code. I was inspired. + +Here is an example of what the @file{hex0} program looks like; the start +of the @var{hex} function + +@example +00000060: 4883 f830 7c6f 4883 f83a 7c5a 4883 f841 H..0|oH..:|ZH..A +@dots{} +000000d0: 48c7 c0ff ffff ffc3 0000 0000 0000 0000 H............... +000000e0: 4883 e830 c300 0000 0000 0000 0000 0000 H..0............ +@end example + +All computer programs look like this: an opaque list of computer codes. +The initial programs that we take for granted---the bootstrap binary +seed---are about 250MB of such numbers: think 250,000 pages full of +numbers. + +Most computers work pretty well so apparently there is not a pressing +need to inspect and study all of these codes. At the same time it is +tricky to fully trust@footnote{ Ken Thompson's 1984 Turing award +acceptance speech +@url{http://www.ece.cmu.edu/~ganger/712.fall02/papers/p761-thompson.pdf, +Reflections on Trusting Tust}.} a computer that was bootstrapped in this +way. + +Here is what the source code of the @file{hex0} assembler looks like + +@example +## function: hex +48 83 f8 30 # cmp $0x30,%rax +7c 6f # jl 6000f3 +48 83 f8 3a # cmp $0x3a,%rax +7c 5a # jl 6000e4 +48 83 f8 41 # cmp $0x41,%rax +@dots{} +## function: ascii_other +48 c7 c0 ff ff ff ff # mov $0xffffffffffffffff,%rax +c3 # ret +@dots{} +## function: ascii_num +48 83 e8 30 # sub $0x30,%rax +c3 # ret +@end example + +While it may be hard to understand what this piece of the program does, +it should be possible for anyone to verify that the computer codes above +correspond to the source code with comments. + +One step beyond these annotated codes is Assembly language. To write a +program in Assembly, you only need to provide the instructions; the +codes are computed by the @file{assembler} program. + +@example +hex: + # deal all ascii less than 0 + cmp $48, %rax + jl ascii_other + # deal with 0-9 + cmp $58, %rax + jl ascii_num +@dots{} +ascii_other: + mov $-1, %rax + ret +ascii_num: + sub $48, %rax + ret +@end example + +More readable still, a similar program text in the C programming language. + +@example +int +hex (int c) +@{ + if (c >= '0' && c <= '9') + return c - 48; +@dots{} +@} +@end example + +What if we could bootstrap our entire system from only this one +@file{hex0} assembler binary seed? We would only ever need to inspect +these 500 bytes of computer codes. Every@footnote{Some program +languages have become very hard or practically impossible to bootstrap. +Instead of depending on a simple language such as C, they depend on a +recent version of itself, or on other binary or ASCII seeds, on other +recent programs written in that language, or even on manual +intervention. Programs written in a language that cannot be +bootstrapped can still run on our systems, but cannot enjoy any of the +trust we intend to create.} later program is written in a more friendly +programming language: Assembly, C, @dots{} Scheme. + +Inspecting all these programs is a lot of work, but it can certainly be +done. We might be able to create a fully inspectable path from almost +nothing to all of the programs that our computer runs. Something that +seemed to be an impossible dream is suddenly starting to look like +``just a couple years of work''. + +@node LISP as Maxwell's Equations of Software +@section LISP as Maxwell's Equations of Software + +As fate would have it, I stumbled upon this +@url{https://queue.acm.org/detail.cfm?id=1039523, interview with Alan +Kay}, where he shares a revelation he had when reading John McCarthy's +@url{http://www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf, +LISP-1.5} manual: + +@quotation +that was the big revelation to me @dots{} when I finally understood that +the half page of code on the bottom of page 13 of the Lisp 1.5 manual +was Lisp in itself. These were “Maxwell’s Equations of Software!” This +is the whole world of programming in a few lines that I can put my hand +over. + +@author Alan Kay +@end quotation + +Our starting point is @file{hex0}, a 500 byte hex assembler and we need +to somehow close the gap to building the bootstrap binary seed, esp. GNU +Gcc and the GNU C Library. What better way to do that than by +leveraging the powers of LISP? + +GNU Mes is a Scheme@footnote{Scheme is a modern LISP} interpreter that +will be indirectly bootstrapped from @file{hex0} and that wields the +magical powers of LISP to close the bootstrap gap, asserting we can +enjoy software Freedom 1. + +@subsection Auditable Elegance + +@code{eval} and @code{apply} are mutual recursing functions that---using +a few helper functions---describe the core of the universe of computing. + +@lisp +(define (apply fn x a) + (cond + ((atom fn) + (cond + ((eq fn CAR) (caar x)) + ((eq fn CDR) (cdar x)) + ((eq fn CONS) (cons (car x) (cadr x))) + ((eq fn ATOM) (atom (car x))) + ((eq fn EQ) (eq (car x) (cadr x))) + (#t (apply (eval fn a) x a)))) + ((eq (car fn) LAMBDA) + (eval (caddr fn) (pairlis (cadr fn) x a))) + ((eq (car fn) LABEL) + (apply (caddr fn) x + (cons (cons (cadr fn) (caddr fn)) a))))) +@end lisp + +@lisp +(define (eval e a) + (cond + ((atom e) (cdr (assoc e a))) + ((atom (car e)) + (cond ((eq (car e) QUOTE) (cadr e)) + ((eq (car e) COND) (evcon (cdr e) a)) + (#t (apply (car e) (evlis (cdr e) a) a)))) + (#t (apply (car e) (evlis (cdr e) a) a)))) +@end lisp + +It will be a big day when our computers are fully bootstrapped from +source. It would be nice if that source code were readable, auditable +and elegant. To be honest, the elegance displayed above that we +achieved at the very start of the Mes project is currently hard to find. +It is our sincerest hope to bring back this level of quality and +elegance.. + +@c ********************************************************************* +@node Installation, Bootstrapping, Introduction, Top +@chapter Installation + +@cindex installing Mes +Mes is available for download from its website at +@url{https://www.gnu.org/pub/gnu/mes/}. This section describes the +software requirements of Mes, as well as how to install it and get ready +to use it. + + +@menu +* Regular Requirements:: Software needed to build and run Mes. +* Bootstrap Requirements:: Software needed to bootstrap Mes. +* Running the Test Suites:: Testing Mes. +@end menu + +@node Regular Requirements, Bootstrap Requirements, Installation, Installation +@section Regular Requirements + +This section lists requirements when building Mes from source. The +build procedure for Mes is the same as for other GNU software, and is +not covered here. Please see the files @file{README} and @file{INSTALL} +in the Mes source tree for additional details. + +GNU Mes depends on the following packages: + +@itemize +@item @url{http://gnu.org/software/guile/, GNU Guile}, version 2.0.13 or +later, including 2.2.x; +@item @url{http://www.gnu.org/software/make/, GNU Make}. +@item @url{https://savannah.gnu.org/projects/nyacc/, NYACC}, 0.93.0 or later, including 0.99.0. +@item @url{http://gcc.gnu.org, GCC's gcc}, version 2.95.3 or later. +@item @url{https://savannah.gnu.org/projects/mescc-tools/, mescc-tools}, version 0.6.1 or later, +@end itemize + +@cindex Guile, compatibility +Mes is compatible with GNU Guile, so it is possible to share the same +Scheme code between both. Currently Mes only supports the minimal +subset of R5RS and Guile extensions to run MesCC. + +@node Bootstrap Requirements, Running the Test Suites, Regular Requirements, Installation +@section Bootstrap Requirements + +This section lists requirements when building Mes as a bootstrap +package. The bootstrap build procedure for Mes is similar to building +GNU software and goes like this + +@example +sh configure.sh --prefix=/your/prefix/here +sh bootstrap.sh +sh check.sh +sh install.sh +@end example + +See @file{configure.sh} and @file{bootstrap.sh} for inspiration on what +environment variables to set. + +Bootstrapping Mes depends on the following packages: + +@itemize +@item a POSIX-compatible shell +@item @url{https://github.com/oriansj/mescc-tools/, mescc-tools}, version 0.6.1 or later. +@item @url{https://savannah.gnu.org/projects/nyacc/, NYACC}, 0.93.0 or later, including 0.99.0. +@end itemize + +@node Running the Test Suites, , Bootstrap Requirements, Installation +@section Running the Test Suites + +@cindex test suites +After a successful @command{configure} and @code{make} run, it is a good +idea to run the test suites. + +@example +make check +@end example + +Run Mes Scheme language semantics tests (@file{scaffold/boot}) only + +@example +build-aux/check-boot.sh +@end example + +Run a single Mes boot test + +@example +MES_BOOT=scaffold/boot/00-zero.scm bin/mes +@end example + +Run a single Mes Scheme test + +@example +./pre-inst-env tests/boot.test +MES=guile ./pre-inst-env tests/boot.test +@end example + +Run MesCC tests only + +@example +build-aux/check-mescc.sh +@end example + +Run a single MesCC test + +@example +CC=gcc CC32=i686-unknown-linux-gnu-gcc MES=guile \ + build-aux/test.sh scaffold/tests/00-exit-0 +@end example + +@node Bootstrapping, Contributing, Installation, Top +@chapter Bootstrapping + +@quotation +Recipe for yogurt: Add yogurt to milk. + +@author Anonymous +@end quotation + +The bootstrap problem we have set out to solve is that none of our +modern software distributions, and Guix in particular, can be created +all from source code. In addition to the carefully signed source code +of all the programs (the `milk') an opaque binary seed (the `yogurt') is +injected as an essential dependency. + +Why would this be a problem, I hear you ask? This is how it is done, we +always did it this way, everyone does it like this! Indeed, a popular +way of handling the bootstrapping issue is by ignoring it. + +@quotation +Your compiler becoming self-hosting@dots{}a language creator's wet +dream. + +@author PFH +@end quotation + +It seems that writing a self-hosting compiler is considered to be a +language creator's ultimate goal. It means that their language and +compiler have become powerful enough to not depend on a pre-exising +language that possibly is---but certainly was until now---more +powerful; it feels like passing the rite to adulthood. + +When you see the irony, you grasp what our bootstrapping effort means in +practice. Creating bootstrappable software is not hard; actually most +softwares' first releases are bootstrappable. The problem of +bootstrapping is not a technical one, it is a lack of awareness and +responsibility. + +@menu +* The Mes Bootstrap Process:: How Mes will make you yogurt from pure milk. +* Invoking mes:: Running Mes, a minimalist Guile lookalike. +* Invoking mescc:: Running the MesCC bootstrap compiler. +* Invoking mesar:: +@end menu + +@node The Mes Bootstrap Process, Invoking mes, Bootstrapping, Bootstrapping +@section The Mes Bootstrap Process + +The Reduced Binary Seed bootstrap currently adopted by Guix@footnote{See +@file{gnu/packages/commencement.scm} in the @var{master} branch in Guix +git +@url{http://git.savannah.gnu.org/cgit/guix.git/tree/gnu/packages/commencement.scm}}. +In its intiial form it is only available for x86-linux. + +Currently, it goes like this: + +@verbatim + gcc-mesboot (4.9.4) + ^ + | + glibc-mesboot (2.16.0) + ^ + | + gcc-mesboot1 (4.7.4) + ^ + | + binutils-mesboot (2.20.1a) + ^ + | + gcc-mesboot0 (2.95.3) + ^ + | + glibc-mesboot0 (2.2.5) + ^ + | + gcc-core-mesboot (2.95.3) + ^ + | + make-mesboot0, diffutils-mesboot, binutils-mesboot0 (2.20.1a) + ^ + | + tcc-boot + ^ + | + tcc-boot0 + ^ + | + mes-boot + ^ + | + * + bootstrap-mescc-tools, bootstrap-mes (~10MB) + bootstrap-bash, bootstrap-coreutils&co, bootstrap-guile (~120MB) +@end verbatim + +@c This graph is generated from wip-bootstrap, doing: + +@c ~/src/guix/core-updates/pre-inst-env guix graph --type=bag -e '(@@ (gnu packages commencement) gcc-mesboot)' > doc/images/gcc-mesboot-graph.dot +@c dot -T png doc/images/gcc-mesboot-graph.dot > doc/images/gcc-mesboot-graph.png + +Here's a generated dependency diagram to for the final bootstrap gcc +that builds the rest of Guix. + +@image{images/gcc-mesboot-graph,2in,,Reference graph of the gcc-mesboot} + +Work is ongoing to remove these binary seeds that were intentionally +injected by our own doing as temporary shortcut +@example +bootstrap-mescc-tools (seed), bootstrap-mes (seed) +@end example + +For now, these additional non-bootstrapped dependencies (i.e., binary +seeds) are taken for granted + +@example +bootstrap-guile, bash, bzip2, coreutils, gawk, grep, gzip, patch, sed, +tar, xz +@end example + +Although we think these are less essential and thus less interesting +than the GNU toolchain triplet that we focussed on initially, our next +priority is to eleminate these one by one. + +@node Invoking mes, Invoking mescc, The Mes Bootstrap Process, Bootstrapping +@section Invoking mes + +@cindex repl +The @command{mes} command is the Scheme interpreter whose prime +directive is to run the @command{MesCC} program. + +For convenience and testing purposes, @command{mes} tries to mimic +guile. + +@example +mes @var{option}@dots{} @file{FILE}@dots{} +@end example + +The @var{option}s can be among the following: + +@table @code + +@item -s @var{script} @var{arg}@dots{} +@cindex script mode +By default, mes will read a file named on the command line as a script. +Any command-line arguments @var{arg}@dots{} following @var{script} +become the script's arguments; the @code{command-line} function returns +a list of strings of the form @code{(@var{script} @var{arg}@dots{})}. + +Scripts are read and evaluated as Scheme source code just as the +@code{load} function would. After loading @var{script}, mes exits. + +@item -c @var{expr} @var{arg}@dots{} +@cindex evaluate expression, command-line argument +Evaluate @var{expr} as Scheme code, and then exit. Any command-line +arguments @var{arg}@dots{}) following @var{expr} become command-line +arguments; the @code{command-line} function returns a list of strings of +the form @code{(@var{guile} @var{arg}@dots{})}, where @var{mes} is the +path of the mes executable. + +@item -- @var{arg}@dots{} +Run interactively, prompting the user for expressions and evaluating +them. Any command-line arguments @var{arg}@dots{} following the +@option{--} become command-line arguments for the interactive session; +the @code{command-line} function returns a list of strings of the form +@code{(@var{guile} @var{arg}@dots{})}, where @var{mes} is the path of the +mes executable. + +@item -L,--load-path=@var{directory} +Add @var{directory} to the front of Mes module load path. The given +directories are searched in the order given on the command line and +before any directories in the @env{GUILE_LOAD_PATH} environment +variable. + +@item -C,--compiled-path=@var{directory} +Accepted and ignored for Guile compatibility. + +@item -l @var{file} +Load Scheme source code from @var{file}, and continue processing the +command line. + +@item -e,--main=@var{function} +Make @var{function} the @dfn{entry point} of the script. After loading +the script file (with @option{-s}) or evaluating the expression (with +@option{-c}), apply @var{function} to a list containing the program name +and the command-line arguments---the list provided by the +@code{command-line} function. + +@item -h@r{, }--help +Display help on invoking mes, and then exit. + +@item -v@r{, }--version +Display the current version of mes%, and then exit. + +@end table + +@menu +* Environment Variables:: If the bits won't change, change their habitat. +@end menu + +@node Environment Variables, , Invoking mes, Invoking mes +@subsection Environment Variables +@cindex environment variables +@cindex shell +@cindex initialization + +@c Hmm, I expected this paragraph in the Guix manual? +Here are the environment variables (see @pxref{Environment Variables,,, +guile, Guile Reference}) that affect the run-time behavior of +mes: + +@table @env +@item MES_BOOT +@vindex MES_BOOT + +Set @env{MES_BOOT} to change the initial Scheme program that mes runs. + +@item MES_ARENA +@vindex MES_ARENA + +The initial size of the arena @pxref{5.3,,, sicp, SICP} in cells. Default: 20,000. + +@item MES_MAX_ARENA +@vindex MES_MAX_ARENA + +The maximum size of the arena in cells. Default: 100,000,000. + +@item MES_MAX_STRING +@vindex MES_MAX_STRING + +The maximum size of a string. Default: 524,288. + +@item MES_DEBUG +@vindex MES_DEBUG + +@enumerate +@item + Informational: +@itemize +@item MODULEDIR +@item included SCM modules and sources +@item result of program +@item gc stats at exit +@end itemize +@item +opened files + +@item +runtime gc stats + +@item +detailed info +@itemize +@item parsed, expanded program +@item list of builtins +@item list of symbol +@item opened input strings +@item gc details +@end itemize + +@item +usage of opened input strings +@end enumerate + + +@item GUILE_LOAD_PATH +@vindex GUILE_LOAD_PATH +This variable may be used to augment the path that is searched for +Scheme files when loading. Its value should be a colon-separated list +of directories. If it contains the special path component @code{...} +(ellipsis), then the default path is put in place of the ellipsis, +otherwise the default path is placed at the end. The result is stored +in @code{%load-path}. + +Mes uses @var{@strong{GUILE}_LOAD_PATH} for compatibility with Guile. + +@end table + +@node Invoking mescc, Invoking mesar, Invoking mes, Bootstrapping +@section Invoking mescc + +@example +mescc @var{option}@dots{} @file{FILE}@dots{} +@end example + +The @var{option}s can be among the following: + +@table @code + +@item --align +align globals + +@item --base-address=ADRRESS +use BaseAddress ADDRESS [0x1000000] + +@item -c +@cindex compile +preprocess, compile and assemble only; do not link + +@item -D @var{DEFINE}[=@var{VALUE}] +@cindex define DEFINE [VALUE=1] + +@item -dumpmachine +@cindex arch +@cindex architecture +@cindex machine +display the compiler's target processor + +@item -E +preprocess only; do not compile, assemble or link + +@item -g +add @command{blood-elf} debug info + +This enables GDB setting breakpoints on function names, and to have the +GDB backtrace command to show the function call stack. + +@item -h, --help +display this help and exit + +@item -I DIR +append DIR to include path + +@item -L DIR +append DIR to library path + +@item -l LIBNAME +link with LIBNAME + +@item -m BITS +compile for BITS bits [32] + +@item -O LEVEL +use optimizing LEVEL + +@item -o FILE +write output to FILE + +@item -S +preprocess and compile only; do not assemble or link + +@item --std=STANDARD +assume that the input sources are for STANDARD + +@item -V,--version +display version and exit + +@item -w,--write=TYPE +dump Nyacc AST using TYPE @{pretty-print,write@} + +@item -x LANGUAGE +specify LANGUAGE of the following input files + +@end table + +@menu +* MesCC Environment Variables:: There's no NIX like POSIX. +@end menu + +@node MesCC Environment Variables, , Invoking mescc, Invoking mescc +@subsection MesCC Environment Variables + +@table @env +@item MES +@vindex MES + +Setting @env{MES} to a mes-compatible Scheme will run mescc using that +@example +MES=guile mescc -c scaffold/main.c +@end example + +See, now Guile has become compatible with Mes, instead of the other way +around ;-) + +@item C_INCLUDE_PATH +@vindex C_INCLUDE_PATH + +@item LIBRARY_PATH +@vindex LIBRARY_PATH + +@item NYACC_DEBUG +@vindex NYACC_DEBUG + +Setting @env{NYACC_DEBUG} makes nyacc print names of function +during the parsing phase. + +@end table + +@node Invoking mesar, , Invoking mescc, Bootstrapping +@section Invoking mesar + +@example +mesar @var{option}@dots{} @var{command} @file{ARCHIVE-FILE} @file{FILE}@dots{} +@end example + +The @var{command} is ignored for compatibility with @file{ar} + +@example + r[ab][f][u] - replace existing or insert new file(s) into the archive + [c] - do not warn if the library had to be created + [D] - use zero for timestamps and uids/gids (default) +@end example + +and assumed to be @var{crD}. + +The @var{option}s can be among the following: + +@table @code + +@item -h, --help +display this help and exit + +@item -V,--version +display version and exit + +@end table + +@c ********************************************************************* +@node Contributing, Acknowledgments, Bootstrapping, Top +@chapter Contributing + +@menu +* Building from Git:: The latest and greatest. +* Running Mes From the Source Tree:: Hacker tricks. +* Porting GNU Mes:: Teach Mes about your platform. +* The Perfect Setup:: The right tools. +* Coding Style:: Hygiene of the contributor. +* Submitting Patches:: Share your work. +@end menu + +@node Building from Git, Running Mes From the Source Tree, Contributing, Contributing +@section Building from Git + +If you want to hack GNU Mes itself, it is recommended to use the latest +version from the Git repository: + +@example +git clone git://git.savannah.gnu.org/mes.git +@end example + +The easiest way to set up a development environment for Mes is, of +course, by using Guix! The following command starts a new shell where +all the dependencies and appropriate environment variables are set up to +hack on Mes: + +@example +guix environment -l .guix.scm +@end example + +Finally, you have to invoke @code{make check} to run tests +(@pxref{Running the Test Suites}). If anything fails, take a look at +installation instructions (@pxref{Installation}) or send a message to +the @email{bug-mes@@gnu.org} mailing list. + +@node Running Mes From the Source Tree, Porting GNU Mes, Building from Git, Contributing +@section Running Mes From the Source Tree + +First, you need to have an environment with all the dependencies +available (@pxref{Building from Git}), and then simply prefix each +command by @command{./pre-inst-env} (the @file{pre-inst-env} script +lives in the top build tree of Mes). + +@node Porting GNU Mes, The Perfect Setup, Running Mes From the Source Tree, Contributing +@section Porting GNU Mes + +Mes was written for x86-linux. A 64 bit (x86_64) is almost done, only a +few bugs remain. The Guix bootstrap for x86_64 uses x86 mes and that is +not expected to change. + +An ARM (armv4/armv7l) linux port is underway. A port to GNU/Hurd +(x86-gnu) is also underway. + +Initial scaffold, built by @file{build-aux/build-scaffold.sh}: +@example + @file{lib/linux/x86-mes-gcc/exit-42.S} + @file{lib/linux/x86-mes/elf32-0exit-42.hex2} + @file{lib/linux/x86-mes/elf32-body-exit-42.hex2} + + @file{lib/linux/x86-mes-gcc/hello-mes.S} + @file{lib/linux/x86-mes/elf32-0hello-mes.hex2} + @file{lib/linux/x86-mes/elf32-body-hello-mes.hex2} +@end example + +Porting MesCC: +@example + @file{lib/x86-mes/x86.M1} + + @file{module/mescc/mescc.scm} + @file{module/mescc/i386/as.scm} + @file{module/mescc/i386/info.scm} + + @file{mes/module/mescc/i386/as.mes} + @file{mes/module/mescc/i386/info.mes} +@end example + +@node The Perfect Setup, Coding Style, Porting GNU Mes, Contributing +@section The Perfect Setup + +The Perfect Setup to hack on Mes is basically the perfect setup used +for Guile hacking (@pxref{Using Guile in Emacs,,, guile, Guile Reference +Manual}). First, you need more than an editor, you need +@url{http://www.gnu.org/software/emacs, Emacs}, empowered by the +wonderful @url{http://nongnu.org/geiser/, Geiser}. + +Geiser allows for interactive and incremental development from within +Emacs: code compilation and evaluation from within buffers, access to +on-line documentation (docstrings), context-sensitive completion, +@kbd{M-.} to jump to an object definition, a REPL to try out your code, +and more (@pxref{Introduction,,, geiser, Geiser User Manual}). + +@node Coding Style, Submitting Patches, The Perfect Setup, Contributing +@section Coding Style + +In general our code follows the GNU Coding Standards (@pxref{Top,,, +standards, GNU Coding Standards}). However, they do not say much about +Scheme, so here are some additional rules. + +@subsection Programming Paradigm + +Scheme code in Mes is written in a purely functional style. + +@subsection Formatting Code + +@cindex formatting code +@cindex coding style +When writing Scheme code, we follow common wisdom among Scheme +programmers. In general, we follow the +@url{http://mumble.net/~campbell/scheme/style.txt, Riastradh's Lisp +Style Rules}. This document happens to describe the conventions mostly +used in Guile’s code too. It is very thoughtful and well written, so +please do read it. + +@cindex indentation, of code +@cindex formatting, of code +If you do not use Emacs, please make sure to let your editor knows these +rules. + +Additionally, in Mes we prefer to format @code{if} statements like this +@example +(if foo? trivial-then + (let ((bar (the-longer @dots{}))) + more-complicated + @dots{} + else)) +@end example + +@node Submitting Patches, , Coding Style, Contributing +@section Submitting Patches + +Development is done using the Git distributed version control system. +Thus, access to the repository is not strictly necessary. We welcome +contributions in the form of patches as produced by @code{git +format-patch} sent to the @email{guix-patches@@gnu.org} mailing list. + +Please write commit logs in the ChangeLog format (@pxref{Change Logs,,, +standards, GNU Coding Standards}); you can check the commit history for +examples. + +@subsection Reporting Bugs + +Encountering a problem or bug can be very frustrating for you as a user +or potential contributor. For us as Mes maintainers, the preferred bug +report includes a beautiful and tested patch that we can integrate +without any effort. + +However, please don't let our preference stop you from reporting a bug. +There's one thing @emph{much} worse for us than getting a bug report +without a patch: Reading a complaint or rant online about your +frustrations and how our work sucks, without having heard directly what +you experienced. + +So if you report a problem, will it be fixed? And @strong{when}? The +most honest answer is: It depends. Let's curry that informationless +honesty with a more helpful and more blunt reminder of a mantra of free +software: + +@quotation +@table @strong +@item Q: +When will it be finished? + +@item A: +It will be ready sooner if you help. +@end table + +@author Richard Stallman +@end quotation + +@cindex contact, irc, mailing list +Join us on @code{#bootstrappable} on the Freenode IRC network or on +@email{guix-devel@@gnu.org} to share your experience---good or bad. + +@cindex bug, bug report, reporting a bug +Please send bug reports with full details to @email{bug-mes@@gnu.org}. + +@c ********************************************************************* +@node Acknowledgments, Resources, Contributing, Top +@chapter Acknowledgments + +We would like to thank the following people for their help: Jeremiah +Orians, Peter de Wachter, rain1, Ricardo Wurmus, Rutger van Beusekom. + +We also thank Ludovic Courtès for creating GNU Guix and making the +bootstrap problem so painfully visible, John McCarthy for creating +LISP-1.5 and Alan Kay for their inspiring comment on +@url{https://queue.acm.org/detail.cfm?id=1039523, Page 13}. + +@c ********************************************************************* +@node Resources, GNU Free Documentation License, Acknowledgments, Top +@chapter Resources + +@itemize + +@item +@url{https://bootstrappable.org, Bootstrappable Builds} Minimize the +amount and size of opaque binary seeds we need to swallow. + +@item +@url{https://reproducible-builds.org, Reproducible Builds} +Provide a verifiable path from source code to binary. + +@item +@url{https://gitlab.com/oriansj/stage0, Stage0} +If we want, it could all start with a ~500 byte self-hosting hex +assembler. + +@item +@url{https://bootstrapping.miraheze.org, Bootstrapping wiki} An amazing +collection of small/bootstrappable compilers, operating systems, +anything you need. + +@item +@url{irc.freenode.net, #bootstrappable} The bootstrapping community home +at the freenode IRC network. + +@item +@file{guix-devel@@gnu.org} The Guix mailing list, where it all started. +@url{https://lists.gnu.org/archive/html/guix-devel/, guix-devel archives}. + +@end itemize + +@c ********************************************************************* +@node GNU Free Documentation License, Concept Index, Resources, Top +@appendix GNU Free Documentation License +@cindex license, GNU Free Documentation License +@include fdl-1.3.texi + +@c ********************************************************************* +@node Concept Index, Programming Index, GNU Free Documentation License, Top +@unnumbered Concept Index +@printindex cp + +@node Programming Index, , Concept Index, Top +@unnumbered Programming Index +@syncodeindex tp fn +@syncodeindex vr fn +@printindex fn + +@bye + +@c Local Variables: +@c ispell-local-dictionary: "american"; +@c End: diff --git a/sysa/mes-0.22/guix.scm b/sysa/mes-0.22/guix.scm new file mode 100644 index 0000000..27f7ecc --- /dev/null +++ b/sysa/mes-0.22/guix.scm @@ -0,0 +1,43 @@ +;;; guix.scm -- Guix package definition + +;;; GNU Mes --- Maxwell Equations of Software +;;; Copyright © 2018,2019 Jan (janneke) Nieuwenhuizen +;;; +;;; This file is part of GNU Mes. +;;; +;;; GNU Mes is free software; you can redistribute it and/or modify it +;;; under the terms of the GNU General Public License as published by +;;; the Free Software Foundation; either version 3 of the License, or (at +;;; your option) any later version. +;;; +;;; GNU Mes is distributed in the hope that it will be useful, but +;;; WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;;; GNU General Public License for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with GNU Mes. If not, see . + +;;; Commentary: +;; +;; GNU Guix development package. To build and install, run: +;; +;; guix package -f guix.scm +;; +;; To build it, but not install it, run: +;; +;; guix build -f guix.scm +;; +;; To use as the basis for a development environment, run: +;; +;; guix environment -l guix.scm +;; +;;; Code: + +(define %source-dir (dirname (current-filename))) +(add-to-load-path (string-append %source-dir "/guix")) + +(use-modules (git mes)) + +;; Return it here so `guix build/environment/package' can consume it directly. +mes.git diff --git a/sysa/mes-0.22/guix/git/mes.scm b/sysa/mes-0.22/guix/git/mes.scm new file mode 100644 index 0000000..fb861b8 --- /dev/null +++ b/sysa/mes-0.22/guix/git/mes.scm @@ -0,0 +1,175 @@ +;;; GNU Mes --- Maxwell Equations of Software +;;; Copyright © 2016,2017,2018,2019 Jan (janneke) Nieuwenhuizen +;;; +;;; This file is part of GNU Mes. +;;; +;;; Also borrowing code from: +;;; guile-sdl2 --- FFI bindings for SDL2 +;;; Copyright © 2015 David Thompson +;;; +;;; GNU Mes is free software; you can redistribute it and/or modify it +;;; under the terms of the GNU General Public License as published by +;;; the Free Software Foundation; either version 3 of the License, or (at +;;; your option) any later version. +;;; +;;; GNU Mes is distributed in the hope that it will be useful, but +;;; WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;;; GNU General Public License for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with GNU Mes. If not, see . + +(define-module (git mes) + #:use-module (srfi srfi-1) + #:use-module (srfi srfi-26) + #:use-module (ice-9 match) + #:use-module (ice-9 popen) + #:use-module (ice-9 rdelim) + #:use-module (gnu packages) + #:use-module (gnu packages base) + #:use-module (gnu packages commencement) + #:use-module (gnu packages cross-base) + #:use-module (gnu packages gcc) + #:use-module (gnu packages graphviz) + #:use-module (gnu packages guile) + #:use-module (gnu packages man) + #:use-module (gnu packages mes) + #:use-module (gnu packages package-management) + #:use-module (gnu packages version-control) + #:use-module (gnu packages perl) + #:use-module (gnu packages pkg-config) + #:use-module (gnu packages texinfo) + #:use-module (guix build-system gnu) + #:use-module (guix build-system trivial) + #:use-module (guix gexp) + #:use-module (guix download) + #:use-module (guix git-download) + #:use-module (guix licenses) + #:use-module (guix packages)) + +(define %source-dir (getcwd)) + +(define-public mescc-tools + (package + (name "mescc-tools") + (version "0.6.1") + (source (origin + (method url-fetch) + (uri (string-append + "http://git.savannah.nongnu.org/cgit/mescc-tools.git/snapshot/" + name "-Release_" version + ".tar.gz")) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "06jpvq6xfjzn2al6b4rdwd3zv3h4cvilc4n9gqcnjr9cr6wjpw2n")))) + (build-system gnu-build-system) + (supported-systems '("i686-linux" "x86_64-linux")) + (arguments + `(#:make-flags (list (string-append "PREFIX=" (assoc-ref %outputs "out")) + "CC=gcc") + #:test-target "test" + #:phases (modify-phases %standard-phases + (delete 'configure)))) + (synopsis "Tools for the full source bootstrapping process") + (description + "Mescc-tools is a collection of tools for use in a full source +bootstrapping process. It consists of the M1 macro assembler, the hex2 +linker, the blood-elf symbol table generator, the kaem shell, exec_enable and +get_machine.") + (home-page "https://savannah.nongnu.org/projects/mescc-tools") + (license gpl3+))) + +(define-public nyacc + (package + (name "nyacc") + (version "0.99.0") + (source (origin + (method url-fetch) + (uri (string-append "mirror://savannah/nyacc/nyacc-" + version ".tar.gz")) + (sha256 + (base32 + "0hl5qxx19i4x1r0839sxm19ziqq65g4hy97yik81cc2yb9yvgyv3")) + (modules '((guix build utils))) + (snippet + '(begin + (substitute* (find-files "." "^Makefile\\.in$") + (("^SITE_SCM_DIR =.*") + "SITE_SCM_DIR = \ +@prefix@/share/guile/site/@GUILE_EFFECTIVE_VERSION@\n") + (("^SITE_SCM_GO_DIR =.*") + "SITE_SCM_GO_DIR = \ +@prefix@/lib/guile/@GUILE_EFFECTIVE_VERSION@/site-ccache\n") + (("^INFODIR =.*") + "INFODIR = @prefix@/share/info\n") + (("^DOCDIR =.*") + "DOCDIR = @prefix@/share/doc/$(PACKAGE_TARNAME)\n")) + #t)))) + (build-system gnu-build-system) + (native-inputs + `(("pkg-config" ,pkg-config))) + (inputs + `(("guile" ,guile-2.2))) + (synopsis "LALR(1) Parser Generator in Guile") + (description + "NYACC is an LALR(1) parser generator implemented in Guile. +The syntax and nomenclature should be considered not stable. It comes with +extensive examples, including parsers for the Javascript and C99 languages.") + (home-page "https://savannah.nongnu.org/projects/nyacc") + (license (list gpl3+ lgpl3+)))) + +(define-public mes + (let ((triplet "i686-unknown-linux-gnu") + (version "0.22")) + (package + (name "mes") + (version version) + (source (origin + (method url-fetch) + (uri (string-append + "https://ftp.gnu.org/pub/gnu/mes/mes-" version ".tar.gz")) + (sha256 + (base32 #!mes!# "04pajp8v31na34ls4730ig5f6miiplhdvkmsb9ls1b8bbmw2vb4n")))) + (build-system gnu-build-system) + (supported-systems '("i686-linux" "x86_64-linux")) + (propagated-inputs + `(("mescc-tools" ,mescc-tools) + ("nyacc" ,nyacc))) + (native-inputs + `(("guile" ,guile-2.2) + ,@(if (string-prefix? "x86_64-linux" (or (%current-target-system) + (%current-system))) + ;; Use cross-compiler rather than #:system "i686-linux" to get + ;; MesCC 64 bit .go files installed ready for use with Guile. + `(("i686-linux-binutils" ,(cross-binutils triplet)) + ("i686-linux-gcc" ,(cross-gcc triplet))) + '()) + ("graphviz" ,graphviz) + ("help2man" ,help2man) + ("perl" ,perl) ; build-aux/gitlog-to-changelog + ("texinfo" ,texinfo))) + (arguments + `(#:strip-binaries? #f)) ; binutil's strip b0rkes MesCC/M1/hex2 binaries + (synopsis "Scheme interpreter and C compiler for full source bootstrapping") + (description + "GNU Mes--Maxwell Equations of Software--brings the Reduced Binary Seed +bootstrap to Guix and aims to help create full source bootstrapping for +GNU/Linux distributions. It consists of a mutual self-hosting Scheme +interpreter in C and a Nyacc-based C compiler in Scheme and is compatible with +Guile.") + (home-page "https://www.gnu.org/software/mes") + (license gpl3+)))) + +(define-public mes.git + (let ((version "0.22") + (revision "0") + (commit (read-string (open-pipe "git show HEAD | head -1 | cut -d ' ' -f 2" OPEN_READ)))) + (package + (inherit mes) + (name "mes.git") + (version (string-append version "-" revision "." (string-take commit 7))) + (source (local-file %source-dir + #:recursive? #t + #:select? (git-predicate %source-dir)))))) diff --git a/sysa/mes-0.22/include/alloca.h b/sysa/mes-0.22/include/alloca.h new file mode 100644 index 0000000..aceea86 --- /dev/null +++ b/sysa/mes-0.22/include/alloca.h @@ -0,0 +1,44 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + * Copyright © 2017 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ +#ifndef __MES_ALLOCA_H +#define __MES_ALLOCA_H 1 + +#if SYSTEM_LIBC +#ifndef _GNU_SOURCE +#define _GNU_SOURCE +#endif +#undef __MES_ALLOCA_H +#include_next + +#else // ! SYSTEM_LIBC + +#include + +#if _ALLOCA_UNSIGNED +void *alloca (unsigned size); +#elif _ALLOCA_CHAR +char *alloca (int); +#else +void *alloca (size_t size); +#endif + +#endif // ! SYSTEM_LIBC + +#endif // __MES_ALLOCA_H diff --git a/sysa/mes-0.22/include/ar.h b/sysa/mes-0.22/include/ar.h new file mode 100644 index 0000000..230f594 --- /dev/null +++ b/sysa/mes-0.22/include/ar.h @@ -0,0 +1,56 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + * Copyright (C) 1996 Free Software Foundation, Inc. + * Copyright © 2018 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ +#ifndef __MES_AR_H +#define __MES_AR_H 1 + +#if SYSTEM_LIBC +#ifndef _GNU_SOURCE +#define _GNU_SOURCE +#endif +#undef __MES_AR_H +#include_next + +#else // ! SYSTEM_LIBC + +// Taken from GNU C Library 2.2.5 + +/* Archive files start with the ARMAG identifying string. Then follows a + `struct ar_hdr', and as many bytes of member file data as its `ar_size' + member indicates, for each member file. */ + +#define ARMAG "!\n" /* String that begins an archive file. */ +#define SARMAG 8 /* Size of that string. */ + +#define ARFMAG "`\n" /* String in ar_fmag at end of each header. */ + +struct ar_hdr +{ + char ar_name[16]; /* Member file name, sometimes / terminated. */ + char ar_date[12]; /* File date, decimal seconds since Epoch. */ + char ar_uid[6], ar_gid[6]; /* User and group IDs, in ASCII decimal. */ + char ar_mode[8]; /* File mode, in ASCII octal. */ + char ar_size[10]; /* File size, in ASCII decimal. */ + char ar_fmag[2]; /* Always contains ARFMAG. */ +}; + +#endif // ! SYSTEM_LIBC + +#endif // __MES_ARGZ_H diff --git a/sysa/mes-0.22/include/argz.h b/sysa/mes-0.22/include/argz.h new file mode 100644 index 0000000..4664e7e --- /dev/null +++ b/sysa/mes-0.22/include/argz.h @@ -0,0 +1,40 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + * Copyright © 2018 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ +#ifndef __MES_ARGZ_H +#define __MES_ARGZ_H 1 + +#if SYSTEM_LIBC +#ifndef _GNU_SOURCE +#define _GNU_SOURCE +#endif +#undef __MES_ARGZ_H +#include_next + +#else // ! SYSTEM_LIBC + +#include + +size_t __argz_count (char const *argz, size_t len); +void __argz_extract (char const *argz, size_t len, char **argv); +size_t __argz_extract_count (char const *argz, size_t len, char **argv); + +#endif // ! SYSTEM_LIBC + +#endif // __MES_ARGZ_H diff --git a/sysa/mes-0.22/include/assert.h b/sysa/mes-0.22/include/assert.h new file mode 100644 index 0000000..dbd3349 --- /dev/null +++ b/sysa/mes-0.22/include/assert.h @@ -0,0 +1,34 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + * Copyright © 2017 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ +#ifndef __MES_ASSERT_H +#define __MES_ASSERT_H 1 + +#if SYSTEM_LIBC +#ifndef _GNU_SOURCE +#define _GNU_SOURCE +#endif +#undef __MES_ASSERT_H +#include_next +#else // ! SYSTEM_LIBC +#define assert(x) ((x) ? (void)0 : __assert_fail (#x)) +void __assert_fail (char *s); +#endif // ! SYSTEM_LIBC + +#endif // __MES_ASSERT_H diff --git a/sysa/mes-0.22/include/ctype.h b/sysa/mes-0.22/include/ctype.h new file mode 100644 index 0000000..01d231a --- /dev/null +++ b/sysa/mes-0.22/include/ctype.h @@ -0,0 +1,51 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + * Copyright © 2017,2018,2019 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ +#ifndef __MES_CTYPE_H +#define __MES_CTYPE_H 1 + +#if SYSTEM_LIBC +#ifndef _GNU_SOURCE +#define _GNU_SOURCE +#endif +#undef __MES_CTYPE_H +#include_next + +#else // ! SYSTEM_LIBC +#include + +int isalnum (int c); +int isalpha (int c); +int isascii (int c); +int iscntrl (int c); +int isdigit (int c); +int isgraph (int c); +int islower (int c); +int isnumber (int c, int base); +int isprint (int c); +int ispunct (int c); +int isspace (int c); +int isupper (int c); +int isxdigit (int c); +int tolower (int c); +int toupper (int c); + +#endif // ! SYSTEM_LIBC + +#endif // __MES_CTYPE_H diff --git a/sysa/mes-0.22/include/dirent.h b/sysa/mes-0.22/include/dirent.h new file mode 100644 index 0000000..7b4a078 --- /dev/null +++ b/sysa/mes-0.22/include/dirent.h @@ -0,0 +1,76 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + * Copyright (C) 1991, 1992 Free Software Foundation, Inc. + * Copyright © 2018 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ + +#ifndef __MES_DIRENT_H +#define __MES_DIRENT_H 1 + +#if SYSTEM_LIBC +#ifndef _GNU_SOURCE +#define _GNU_SOURCE +#endif +#undef __MES_DIRENT_H +#include_next + +#else // ! SYSTEM_LIBC + +#include + +// Taken from GNU C Library 1.06.4, 2.2.5 + +/* + * POSIX Standard: 5.1.2 Directory Operations + */ + +#include + +int __getdirentries (int filedes, char *buffer, size_t nbytes, off_t * basep); + +struct dirent +{ + ino_t d_ino; + off_t d_off; + unsigned short int d_reclen; +#if 0 + unsigned char d_type; +#endif + char d_name[256]; /* We must not include limits.h! */ +}; + +/* Open a directory stream on NAME. + Return a DIR stream on the directory, or NULL if it could not be opened. */ +DIR *opendir (char const *name); + +/* Close the directory stream DIRP. + Return 0 if successful, -1 if not. */ +int closedir (DIR * dirp); + +/* Read a directory entry from DIRP. + Return a pointer to a `struct dirent' describing the entry, + or NULL for EOF or error. The storage returned may be overwritten + by a later readdir call on the same DIR stream. */ +struct dirent *readdir (DIR * dirp); + +/* Rewind DIRP to the beginning of the directory. */ +extern void rewinddir (DIR * dirp); + +#endif // ! SYSTEM_LIBC + +#endif // __MES_DIRENT_H diff --git a/sysa/mes-0.22/include/dirstream.h b/sysa/mes-0.22/include/dirstream.h new file mode 100644 index 0000000..f648b96 --- /dev/null +++ b/sysa/mes-0.22/include/dirstream.h @@ -0,0 +1,55 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + *Copyright (C) 1993, 1995, 1996 Free Software Foundation, Inc. + * Copyright © 2018 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ + +#ifndef __MES_DIRSTREAM_H +#define __MES_DIRSTREAM_H 1 + +#if SYSTEM_LIBC && HAVE_DIRSTREAM_H +#ifndef _GNU_SOURCE +#define _GNU_SOURCE +#endif +#undef __MES_DIRSTREAM_H +#include_next + +#else // ! SYSTEM_LIBC + +#include + +// Taken from GNU C Library 2.2.5 + +/* Directory stream type. */ +struct __dirstream +{ + int fd; /* File descriptor. */ + + char *data; /* Directory block. */ + size_t allocation; /* Space allocated for the block. */ + size_t size; /* Total valid data in the block. */ + size_t offset; /* Current offset into the block. */ + + off_t filepos; /* Position of next entry to read. */ +}; + +typedef struct __dirstream DIR; + +#endif // ! SYSTEM_LIBC + +#endif // __MES_DIRSTREAM_H diff --git a/sysa/mes-0.22/include/dlfcn.h b/sysa/mes-0.22/include/dlfcn.h new file mode 100644 index 0000000..9dbea76 --- /dev/null +++ b/sysa/mes-0.22/include/dlfcn.h @@ -0,0 +1,44 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + * Copyright © 2017 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ +#ifndef __MES_DLFCN_H +#define __MES_DLFCN_H 1 + +#if SYSTEM_LIBC +#undef __MES_DLFCN_H +#include_next + +#else // ! SYSTEM_LIBC + +#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 +#define RTLD_DEFAULT 0 + +void *dlopen (char const *filename, int flags); +int dlclose (void *handle); + +#endif // ! SYSTEM_LIBC + +#endif // __MES_DLFCN_H diff --git a/sysa/mes-0.22/include/endian.h b/sysa/mes-0.22/include/endian.h new file mode 100644 index 0000000..621f075 --- /dev/null +++ b/sysa/mes-0.22/include/endian.h @@ -0,0 +1,36 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + * Copyright © 2017 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ +#ifndef __MES_ENDIAN_H +#define __MES_ENDIAN_H 1 + +#if SYSTEM_LIBC +#ifndef _GNU_SOURCE +#define _GNU_SOURCE +#endif +#undef __MES_ENDIAN_H +#include_next + +#else // ! SYSTEM_LIBC +#define __LITTLE_ENDIAN 1234 +#define __BIG_ENDIAN 4321 +#define __BYTE_ORDER __LITTLE_ENDIAN +#endif // ! SYSTEM_LIBC + +#endif // __MES_ENDIAN_H diff --git a/sysa/mes-0.22/include/errno.h b/sysa/mes-0.22/include/errno.h new file mode 100644 index 0000000..7ac1ebe --- /dev/null +++ b/sysa/mes-0.22/include/errno.h @@ -0,0 +1,72 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + * Copyright © 2017,2018 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ +#ifndef __MES_ERRNO_H +#define __MES_ERRNO_H 1 + +#if SYSTEM_LIBC +#ifndef _GNU_SOURCE +#define _GNU_SOURCE +#endif +#undef __MES_ERRNO_H +#include_next +#else // ! SYSTEM_LIBC + +#ifndef __MES_ERRNO_T +#define __MES_ERRNO_T 1 +typedef int error_t; +int errno; +#endif // !__MES_ERRNO_T + +int errno; +#define ENOENT 2 +#define EINTR 4 +#define EIO 5 +#define ENXIO 6 +#define E2BIG 7 +#define ENOEXEC 8 +#define EBADF 9 +#define ECHILD 10 +#define EAGAIN 11 +#define ENOMEM 12 +#define EACCES 13 +#define EEXIST 17 +#define EXDEV 18 +#define ENOTDIR 20 +#define EISDIR 21 +#define EINVAL 22 +#define EMFILE 24 +#define ENOSPC 28 +#define ESPIPE 29 +#define EPIPE 32 +#define ERANGE 34 + +#define ENAMETOOLONG 36 +#define ENOSYS 38 +#define ELOOP 40 + +#if !__MESC__ +//extern char const *const sys_errlist[]; +extern char *sys_errlist[]; +extern int sys_nerr; +#endif // !__MESC__ + +#endif // ! SYSTEM_LIBC + +#endif // __MES_ERRNO_H diff --git a/sysa/mes-0.22/include/fcntl.h b/sysa/mes-0.22/include/fcntl.h new file mode 100644 index 0000000..bfb870d --- /dev/null +++ b/sysa/mes-0.22/include/fcntl.h @@ -0,0 +1,70 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + * Copyright © 2017 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ +#ifndef __MES_FCNTL_H +#define __MES_FCNTL_H 1 + +#if SYSTEM_LIBC +#ifndef _GNU_SOURCE +#define _GNU_SOURCE +#endif +#undef __MES_FCNTL_H +#include_next + +#else // ! SYSTEM_LIBC + +// *INDENT-OFF* +#if __linux__ +#define O_RDONLY 0 +#define O_WRONLY 1 +#define O_RDWR 2 +#define O_CREAT 0x40 +#define O_EXCL 0x80 +#define O_TRUNC 0x200 +#define O_APPEND 0x400 +#define O_DIRECTORY 0x10000 +#elif __GNU__ +#define O_RDONLY 1 +#define O_WRONLY 2 +#define O_RDWR 3 +#define O_CREAT 0x10 +#define O_APPEND 0x100 +#define O_TRUNC 0x10000 +#else +#error platform not supported +#endif +// *INDENT-ON* + +#define FD_CLOEXEC 1 + +#define F_DUPFD 0 +#define F_GETFD 1 +#define F_SETFD 2 +#define F_GETFL 3 +#define F_SETFL 4 + +#define creat(file_name, mode) open (file_name, O_WRONLY | O_CREAT | O_TRUNC, mode) +int dup (int old); +int dup2 (int old, int new); +int fcntl (int filedes, int command, ...); +int open (char const *s, int flags, ...); + +#endif // ! SYSTEM_LIBC + +#endif // __MES_FCNTL_H diff --git a/sysa/mes-0.22/include/features.h b/sysa/mes-0.22/include/features.h new file mode 100644 index 0000000..c1c161a --- /dev/null +++ b/sysa/mes-0.22/include/features.h @@ -0,0 +1,28 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + * Copyright © 2017 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ +#ifndef __MES_FEATURES_H +#define __MES_FEATURES_H 1 + +#if SYSTEM_LIBC +#undef __MES_FEATURES_H +#include_next +#endif // (SYSTEM_LIBC) + +#endif // __MES_FEATURES_H diff --git a/sysa/mes-0.22/include/float.h b/sysa/mes-0.22/include/float.h new file mode 100644 index 0000000..b5aeba3 --- /dev/null +++ b/sysa/mes-0.22/include/float.h @@ -0,0 +1,34 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + * Copyright © 2017 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ +#ifndef __MES_FLOAT_H +#define __MES_FLOAT_H 1 + +#if SYSTEM_LIBC +#undef __MES_FLOAT_H +#include_next +#else // ! SYSTEM_LIBC + +#define MIN_EXP -1021 +#define DBL_MIN_EXP -1021 +#define LDBL_MIN_EXP -1021 + +#endif // ! SYSTEM_LIBC + +#endif // __MES_FLOAT_H diff --git a/sysa/mes-0.22/include/getopt.h b/sysa/mes-0.22/include/getopt.h new file mode 100644 index 0000000..23d8693 --- /dev/null +++ b/sysa/mes-0.22/include/getopt.h @@ -0,0 +1,62 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + * Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc. + * Copyright © 2017,2018 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ +#ifndef __MES_GETOPT_H +#define __MES_GETOPT_H 1 + +#if SYSTEM_LIBC +#ifndef _GNU_SOURCE +#define _GNU_SOURCE +#endif +#undef __MES_GETOPT_H +#include_next + +#else // ! SYSTEM_LIBC +#include +int isdigit (int); +int isxdigit (int); + +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 *options); +int getopt_long (int argc, char *const *argv, char const *options, + struct option const *long_options, int *opt_index); +int getopt_long_only (int argc, char *const *argv, char const *options, + struct option const *long_options, int *opt_index); + +#endif // ! SYSTEM_LIBC + +#endif // __MES_GETOPT_H diff --git a/sysa/mes-0.22/include/gnu/hurd-types.h b/sysa/mes-0.22/include/gnu/hurd-types.h new file mode 100644 index 0000000..a156b64 --- /dev/null +++ b/sysa/mes-0.22/include/gnu/hurd-types.h @@ -0,0 +1,393 @@ +/* C declarations for Hurd server interfaces + Copyright (C) 1993, 1994, 1995, 1996, 1998, 1999, 2001, 2002, + 2010 Free Software Foundation, Inc. + +This file is part of the GNU Hurd. + +The GNU Hurd 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. + +The GNU Hurd 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 the GNU Hurd; see the file COPYING. If not, write to +the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ + +#ifndef _HURD_TYPES_H +#define _HURD_TYPES_H + +#ifndef _FILE_OFFSET_BITS +#define _FILE_OFFSET_BITS 32 +#endif + +#include /* For struct timespec. */ +#include /* For mach_port_t et al. */ +#include /* For mach_msg_id_t et al. */ +#include /* For pid_t and uid_t. */ + +/* A string identifying this release of the GNU Hurd. Our + interpretation of the term "release" is that it refers to a set of + server interface definitions. A "version" in Posix terminology is + a distribution of the Hurd; there may be more than one distribution + without changing the release number. */ +#define HURD_RELEASE "0.0" + + +/* Simple type declarations */ + +/* These types identify certain kinds of ports used by the Hurd. */ +typedef mach_port_t file_t; +typedef mach_port_t fsys_t; +typedef mach_port_t io_t; +typedef mach_port_t process_t; +typedef mach_port_t auth_t; +typedef mach_port_t socket_t; +typedef mach_port_t pf_t; /* Protocol family */ +typedef mach_port_t addr_port_t; +typedef mach_port_t startup_t; +typedef mach_port_t fs_notify_t; +typedef mach_port_t exec_startup_t; +typedef mach_port_t interrupt_t; +typedef mach_port_t proccoll_t; +typedef mach_port_t ctty_t; + +#include /* Defines `error_t'. */ + +/* These names exist only because of MiG deficiencies. + You should not use them in C source; use the normal C types instead. */ +typedef char *data_t; +typedef const char *const_data_t; +typedef char string_t [1024]; +typedef int *intarray_t; +typedef const int *const_intarray_t; +typedef int *fd_mask_t; +typedef const int *const_fd_mask_t; +typedef mach_port_t *portarray_t; +typedef const mach_port_t *const_portarray_t; +typedef pid_t *pidarray_t; +typedef const pid_t *const_pidarray_t; +typedef uid_t *idarray_t; +typedef const uid_t *const_idarray_t; +#if 0 +typedef __loff_t *off_array_t; +typedef const __loff_t *const_off_array_t; +#endif +typedef struct rusage rusage_t; +typedef struct flock flock_t; +typedef struct utsname utsname_t; +#if _FILE_OFFSET_BITS == 64 +typedef struct stat io_statbuf_t; +typedef struct statfs fsys_statfsbuf_t; +#else +typedef struct stat64 io_statbuf_t; +typedef struct statfs64 fsys_statfsbuf_t; +#endif +typedef struct timespec timespec_t; + + +/* Parameters and flags in RPC calls */ + +/* Many such parameters and flags are also defined in various libc + headers. */ + +/* Bits for flags in fs.defs:file_exec_paths and exec.defs:exec_* calls: */ +#define EXEC_NEWTASK 0x00000001 /* Create new task; kill old one. */ +#define EXEC_SECURE 0x00000002 /* Use secure values of portarray, etc. */ +#define EXEC_DEFAULTS 0x00000004 /* Use defaults for unspecified ports. */ +#define EXEC_SIGTRAP 0x00000008 /* Simulate SIGTRAP on startup. */ +/* This flag is passed through by the exec server but not examined by it. */ +#define EXEC_STACK_ARGS 0x00000010 /* Use arguments from stack, not RPC. */ + +/* Bits for flags in fs.defs:file_set_translator call: */ +#define FS_TRANS_FORCE 0x00000001 /* Must use translator(no sht circuit) */ +#define FS_TRANS_EXCL 0x00000002 /* Don't do it if already translated. */ +#define FS_TRANS_SET 0x00000004 /* Set or clear translator */ +#define FS_TRANS_ORPHAN 0x00000008 /* Orphan the active translator. */ + +/* Values for retry field in fs.defs:dir_lookup call: */ +enum retry_type +{ + FS_RETRY_NORMAL = 1, /* Retry normally if retry_name is not null. */ + FS_RETRY_REAUTH = 2, /* Retry after reauthenticating retry port. + Even if the retry name is null, a retry + is still necessary with this code after the + reauthentication is complete. */ + FS_RETRY_MAGICAL = 3, /* Retry string is magical. */ + /* "tty" means controlling tty; + + "fd/%u" means file descriptor N; + + "machtype/..." means replace `machtype' with the numbers in decimal + returned by the user's kernel as the cpu_type (N) and + cpu_subtype (M) (producing N/M/...) and then retry + as for FS_RETRY_NORMAL. + + "/..." means retry "...", but starting from the users root directory. + + "pid/..." means replace `pid' with the PID of the current process in %u + format and then retry as for FS_RETRY_NORMAL. + */ +}; +typedef enum retry_type retry_type; + +/* Types for fs_notify.defs:dir_changed call: */ +enum dir_changed_type +{ + DIR_CHANGED_NULL, /* Always sent first for sync. */ + DIR_CHANGED_NEW, /* Specified name has been added. */ + DIR_CHANGED_UNLINK, /* Specified name has been removed. */ + DIR_CHANGED_RENUMBER, /* Name has been the target of rename. */ +}; +typedef enum dir_changed_type dir_changed_type_t; + +/* Types for fs_notify.defs:file_changed call: */ +enum file_changed_type +{ + FILE_CHANGED_NULL, /* Always sent first for sync. */ + FILE_CHANGED_WRITE, /* File data has been written. */ + FILE_CHANGED_EXTEND, /* File has grown. */ + FILE_CHANGED_TRUNCATE, /* File has been truncated. */ + FILE_CHANGED_META, /* Stat information has changed, and none + of the previous three apply. Not sent + for changes in node times. */ +}; +typedef enum file_changed_type file_changed_type_t; + +/* Select types for io.defs:io_select call: */ +#define SELECT_READ 0x00000001 +#define SELECT_WRITE 0x00000002 +#define SELECT_URG 0x00000004 + +/* Flags for fsys.defs:fsys_goaway. Also, these flags are sent as the + oldtrans_flags in fs.defs:file_set_translator to describe how to + terminate the old translator. */ +#define FSYS_GOAWAY_NOWAIT 0x00000001 /* Return immediately. */ +#define FSYS_GOAWAY_NOSYNC 0x00000002 /* Don't update physical media. */ +#define FSYS_GOAWAY_FORCE 0x00000004 /* Go away despite current users. */ +#define FSYS_GOAWAY_UNLINK 0x00000008 /* Go away only if non-directory. */ +#define FSYS_GOAWAY_RECURSE 0x00000010 /* Shutdown children too. */ + +/* Types of ports the terminal driver can run on top of; + used in term.defs:term_get_bottom_type. */ +enum term_bottom_type +{ + TERM_ON_MACHDEV, + TERM_ON_HURDIO, + TERM_ON_MASTERPTY, +}; + +/* Types of storage, as returned by file_get_storage_info. + + STORAGE_DEVICE is a mach device_t (for random access devices) + STORAGE_HURD_FILE is a hurd file_t (as if a file were mapped) + STORAGE_TASK is a task_t (the storage is in the vm of the task) + STORAGE_MEMORY is a memory object port + STORAGE_ZERO is a fixed-size constant source of zeros + STORAGE_INTERLEAVE is a set of other storage types interleaved at a fixed + interval + STORAGE_CONCAT is a set of other storage types concatenated end-to-end + STORAGE_LAYER is a set of storage types, representing the same address + range; all will be written too, and will be read in turn until one + succeeds + STORAGE_REMAP is a layer on top of another store that remaps its blocks + STORAGE_COPY is a memory snapshot of another store + STORAGE_NETWORK means that the file is stored elsewhere on the + network; all the remaining fields contan type-specific information. + STORAGE_OTHER means none of these apply; and should be used when no + meaningful answer can be given + + The vectors returned by file_get_storage_info encode each of the above + (note that the first int is always the storage type). There are four: + ports, ints, offsets (off_t), and data (char); each type of store uses the + following entries in each vector: + + -type- -ports- -ints- -offsets- -data- -kids- + device DEVICE TY, FL, BS, NR, NL, ML NR * (OFFS, LEN) NL + ML - + file FILE TY, FL, BS, NR, NL, ML NR * (OFFS, LEN) NL + ML - + memory MEMOBJ TY, FL, BS, NR, NL, ML NR * (OFFS, LEN) NL + ML - + task TASK TY, FL, BS, NR, NL, ML NR * (OFFS, LEN) NL + ML - + (the data for the above is a name (incl '\0') and a misc data block) + null - TY, FL SIZE - - + (BS is 1) + ileave - TY, FL, IL, NC - - NC + (BS is the LCM of its children; SIZE is the minimum of theirs * IL) + concat - TY, FL, NC - - NC + (BS is the LCM of its children; SIZE is the sum of theirs) + layer - TY, FL, NC - - NC + (BS is the LCM of its children; SIZE is the minimum of theirs) + remap - TY, FL, NR NR * (OFFS, LEN) - 1 + (BS and SIZE are that of the child) + copy - TY, FL, SIZE - DATA - + (DATA is preceded by padding to the next page boundary, and is + SIZE bytes long itself) + + For ileave, concat, and layer, the children are encoded following the parent. + The first int must always be TY. + + key: TY = type code, FL = flags, BS = block size, NR = num runs, + NL = name len, ML = misc len, NC = num children, + IL = interleave (bytes), SIZE = Size of storage (blocks), + LEN = run length (blocks), OFFS = run offset (blocks), + + The NR * (OFFS, LEN) offsets for some of the types is the set of block + ranges in the underlying address space that, concatenated, make up the + contents of the storage -- for instance, doing file_get_storage_info on a + file may return storage of type STORAGE_DEVICE, and the accompanying block + ranges are the set of blocks on the given device that correspond to that + file. Any OFFS == -1 designates a hole in the address range. Note that + the total size (SIZE) for these types is the sum of their LEN's. + + The optional NAME returned by some types (if NL != 0) is a type specific + name for the same object referenced by the port also returned. E.g.: + device -- The mach device name + file -- The file name (unreliable, as the root may not be the same) + task -- The pid + Unless it is MACH_PORT_NULL, the port should generally be used instead of + trying to regenerate it from the associated name, which is intended more for + printing messages, etc. */ +enum file_storage_class +{ + STORAGE_OTHER, + STORAGE_DEVICE, + STORAGE_HURD_FILE, + STORAGE_NETWORK, + STORAGE_MEMORY, + STORAGE_TASK, + STORAGE_ZERO, + STORAGE_CONCAT, + STORAGE_INTERLEAVE, + STORAGE_LAYER, + STORAGE_REMAP, + STORAGE_COPY, +}; + +/* Flags for the flags word returned by some types . */ +#define STORAGE_MUTATED 0x00000001 /* data as stored is munged from file */ + +/* Data types */ + +#include +#include +#ifndef THREAD_SCHED_INFO +#include +#endif + +/* Flags sent in proc_getprocinfo request. */ +#define PI_FETCH_TASKINFO 0x0001 +#define PI_FETCH_TASKEVENTS 0x0020 +#define PI_FETCH_THREADS 0x0002 +#define PI_FETCH_THREAD_BASIC 0x0004 +#define PI_FETCH_THREAD_SCHED 0x0008 +#define PI_FETCH_THREAD_WAITS 0x0010 + +struct procinfo +{ + int state; + uid_t owner; + pid_t ppid; + pid_t pgrp; + pid_t session; + pid_t logincollection; + int exitstatus; + int sigcode; + + int nthreads; /* size of pi_threadinfos */ + + struct task_basic_info taskinfo; + struct task_events_info taskevents; +#ifdef TASK_SCHED_TIMESHARE_INFO + struct policy_timeshare_base timeshare_base_info; +#endif + struct + { + int died; /* this thread died in the middle of call */ + mach_msg_id_t rpc_block; /* thread is blocked on this RPC */ + struct thread_basic_info pis_bi; +#ifdef THREAD_SCHED_INFO + struct thread_sched_info pis_si; +#else + struct policy_infos pis_pi; +#endif + } threadinfos[0]; +}; +typedef int *procinfo_t; +typedef const int *const_procinfo_t; + +/* Bits in struct procinfo state: */ +#define PI_STOPPED 0x00000001 /* Proc server thinks is stopped. */ +#define PI_EXECED 0x00000002 /* Has called proc_exec. */ +#define PI_WAITING 0x00000004 /* Process is waiting for child to exit */ +#define PI_ORPHAN 0x00000008 /* Process group is orphaned. */ +#define PI_NOMSG 0x00000010 /* Process has no message port. */ +#define PI_SESSLD 0x00000020 /* Session leader. */ +#define PI_NOTOWNED 0x0000040 /* Process has no owner. */ +#define PI_NOPARENT 0x0000080 /* Hasn't identified a parent. */ +#define PI_ZOMBIE 0x00000100 /* Has no associated task. */ +#define PI_TRACED 0x00000200 /* Process is being traced */ +#define PI_GETMSG 0x00000400 /* Process is blocked in proc_getmsgport. */ +#define PI_LOGINLD 0x00000800 /* Process is leader of login collection */ + + +/* Conventions */ + + +/* st_fstype in struct stat and fsys_stb_type in fsys_statfsbuf is one of: */ +#define FSTYPE_UFS 0x00000000 /* 4.x BSD Fast File System */ +#define FSTYPE_NFS 0x00000001 /* Network File System ala Sun */ +#define FSTYPE_GFS 0x00000002 /* GNU file system */ +#define FSTYPE_LFS 0x00000003 /* Logging File System ala Sprite */ +#define FSTYPE_SYSV 0x00000004 /* Old U*x filesystem ala System V */ +#define FSTYPE_FTP 0x00000005 /* Transparent FTP */ +#define FSTYPE_TAR 0x00000006 /* Transparent TAR */ +#define FSTYPE_AR 0x00000007 /* Transparent AR */ +#define FSTYPE_CPIO 0x00000008 /* Transparent CPIO */ +#define FSTYPE_MSLOSS 0x00000009 /* MS-DOS */ +#define FSTYPE_CPM 0x0000000a /* CP/M */ +#define FSTYPE_HFS 0x0000000b /* Don't ask */ +#define FSTYPE_DTFS 0x0000000c /* used by desktop to provide more info */ +#define FSTYPE_GRFS 0x0000000d /* GNU Remote File System */ +#define FSTYPE_TERM 0x0000000e /* GNU Terminal driver */ +#define FSTYPE_DEV 0x0000000f /* GNU Special file server */ +#define FSTYPE_PROC 0x00000010 /* /proc filesystem ala Version 9 */ +#define FSTYPE_IFSOCK 0x00000011 /* PF_LOCAL socket naming point */ +#define FSTYPE_AFS 0x00000012 /* Andrew File System 3.xx */ +#define FSTYPE_DFS 0x00000013 /* Distributed File Sys (OSF) == AFS 4.xx */ +#define FSTYPE_PROC9 0x00000014 /* /proc filesystem ala Plan 9 */ +#define FSTYPE_SOCKET 0x00000015 /* io_t that isn't a file but a socket */ +#define FSTYPE_MISC 0x00000016 /* generic trivfs server */ +#define FSTYPE_EXT2FS 0x00000017 /* Linux filesystem by Remy Card */ +#define FSTYPE_HTTP 0x00000018 /* Transparent HTTP */ +#define FSTYPE_MEMFS 0x00000019 /* In-core filesystem */ +#define FSTYPE_ISO9660 0x0000001a /* ISO9660 */ + +/* Standard port assignments for file_exec_paths and exec_* */ +enum + { + INIT_PORT_CWDIR, + INIT_PORT_CRDIR, + INIT_PORT_AUTH, + INIT_PORT_PROC, + INIT_PORT_CTTYID, + /* If MACH_PORT_NULL is given for the bootstrap port, + the bootstrap port of the old task is used. */ + INIT_PORT_BOOTSTRAP, + INIT_PORT_MAX + }; + +/* Standard ints for file_exec_paths and exec_* */ +enum + { + INIT_UMASK, + INIT_SIGMASK, + INIT_SIGIGN, + INIT_SIGPENDING, + INIT_TRACEMASK, + INIT_INT_MAX, + }; + +#endif // _HURD_TYPES_H diff --git a/sysa/mes-0.22/include/gnu/hurd.h b/sysa/mes-0.22/include/gnu/hurd.h new file mode 100644 index 0000000..0d6a23f --- /dev/null +++ b/sysa/mes-0.22/include/gnu/hurd.h @@ -0,0 +1,84 @@ +/* + * GNU Mes --- Maxwell Equations of Software + * Copyright © 2019 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ + +#ifndef __MES_GNU_HURD_H +#define __MES_GNU_HURD_H + +#define _GNU_SOURCE 1 +#define __USE_GNU 1 + +#include +#include + +#ifndef _BITS_TYPES_H +#ifndef _LOFF_T +#define _LOFF_T +typedef off64_t loff_t; +#endif +#endif + +#include +#include +#include + +struct hurd_startup_data + { + int flags; + + mach_port_t *dtable; + mach_msg_type_number_t dtable_count; + + char *argp; + int arg_size; + + char *envp; + int env_size; + + mach_port_t *portarray; + mach_msg_type_number_t portarray_count; + + int *intarray; + mach_msg_type_number_t intarray_count; + + vm_address_t stack_base; + vm_size_t stack_count; + + vm_address_t phdr; + vm_size_t phdr_count; + + vm_address_t user_entry; + }; + +#define _HURD_DTABLE_MAX 1024 +extern mach_port_t _hurd_dtable[_HURD_DTABLE_MAX]; +extern int _hurd_dtable_count; +extern struct hurd_startup_data _hurd_startup_data; + +#define _HURD_ARGV_MAX 1000 +#define _HURD_ENVV_MAX 1000 +extern size_t __argc; +extern char *__argv[_HURD_ARGV_MAX]; +extern char *__envv[_HURD_ENVV_MAX]; + +mach_port_t fd_get (int filedes); +error_t fd_write (mach_port_t port, void const *buffer, size_t *size, loff_t offset); +error_t fd_read (mach_port_t port, void *buffer, size_t *size, loff_t offset); + +#endif // __MES_GNU_HURD_H diff --git a/sysa/mes-0.22/include/gnu/syscall.h b/sysa/mes-0.22/include/gnu/syscall.h new file mode 100644 index 0000000..8d20f9d --- /dev/null +++ b/sysa/mes-0.22/include/gnu/syscall.h @@ -0,0 +1,144 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + * Copyright © 2019 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ + +#ifndef __MES_GNU_SYSCALL_H +#define __MES_GNU_SYSCALL_H + +#define _GNU_SOURCE 1 +#define __USE_GNU 1 + +#include +#include +#include +#include +#include + +// mach/mach.defs +enum + { + SYS__task_terminate = 2008, + SYS__vm_allocate = 2021, + SYS__vm_statistics = 2030, + SYS__task_get_special_port = 2058, + }; + +// hurd/fsys.defs +enum + { + SYS__dir_lookup = 20018, + }; + +// hurd/io.defs +enum + { + SYS__io_write = 21000, + SYS__io_read, + }; + +// hurd/process.defs +enum + { + SYS__proc_mark_exit = 24025, + }; + +// hurd/startup.defs +enum + { + SYS__exec_startup_get_info = 30500, + }; + +extern mach_msg_type_t mach_msg_type_int32; +extern mach_msg_type_t mach_msg_type_int64; +extern mach_msg_type_long_t mach_msg_type_pointer; + +struct mach_msg +{ + mach_msg_header_t header; +}; + +struct mach_msg_1 +{ + mach_msg_header_t header; + mach_msg_type_t type_one; int one; +}; + +struct mach_msg_2 +{ + mach_msg_header_t header; + mach_msg_type_t type_one; int one; + mach_msg_type_t type_two; int two; +}; + +struct mach_msg_loff_int +{ + mach_msg_header_t header; + mach_msg_type_t type_one; loff_t one; + mach_msg_type_t type_two; int two; +}; + +struct mach_msg_startup_info +{ + mach_msg_header_t header; + mach_msg_type_t RetCodeType; + kern_return_t RetCode; + mach_msg_type_t user_entryType; + vm_address_t user_entry; + mach_msg_type_t phdrType; + vm_address_t phdr; + mach_msg_type_t phdr_sizeType; + vm_size_t phdr_size; + mach_msg_type_t stack_baseType; + vm_address_t stack_base; + mach_msg_type_t stack_sizeType; + vm_size_t stack_size; + mach_msg_type_t flagsType; + int flags; + mach_msg_type_long_t argvType; + char *argv; + mach_msg_type_long_t envpType; + char *envp; + mach_msg_type_long_t dtableType; + mach_port_t *dtable; + mach_msg_type_long_t portarrayType; + mach_port_t *portarray; + mach_msg_type_long_t intarrayType; + int *intarray; +}; + +kern_return_t __syscall (mach_port_t port, int sys_call); +kern_return_t __syscall2 (mach_port_t port, int sys_call, int one, int two); +kern_return_t __syscall_get (mach_port_t port, int sys_call, mach_msg_header_t *message, size_t size); +kern_return_t __syscall_put (mach_port_t port, int sys_call, mach_msg_header_t *message, size_t size); + +// mach.defs +kern_return_t __task_terminate (mach_port_t task); +kern_return_t __task_get_special_port (mach_port_t task, int which, mach_port_t *port); +kern_return_t __vm_allocate (mach_port_t task, vm_address_t *address, vm_size_t size, boolean_t anywhere); +kern_return_t __vm_statistics (mach_port_t task, vm_statistics_data_t *vm_stats); + +// process.defs +kern_return_t __proc_mark_exit (mach_port_t process, int one, int two); +kern_return_t __exec_startup_get_data (mach_port_t bootstrap, struct hurd_startup_data *data); + +// io.c +kern_return_t __io_write (io_t io_object, data_t data, mach_msg_type_number_t size, loff_t offset, vm_size_t *wrote); +kern_return_t __io_read (io_t io, data_t *data, mach_msg_type_number_t *read, loff_t offset, vm_size_t size); + +#endif // __MES_GNU_SYSCALL_H diff --git a/sysa/mes-0.22/include/grp.h b/sysa/mes-0.22/include/grp.h new file mode 100644 index 0000000..a67e522 --- /dev/null +++ b/sysa/mes-0.22/include/grp.h @@ -0,0 +1,45 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + * Copyright © 2019 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ +#ifndef __MES_GRP_H +#define __MES_GRP_H 1 + +#if SYSTEM_LIBC +#undef __MES_GRP_H +#include_next +#else // ! SYSTEM_LIBC + +#include + +struct group +{ + char *gr_name; + gid_t gr_gid; + char **gr_mem; +}; + +struct group *getgrent (void); +void endgrent (void); +void setgrent (void); +struct group *getgrgid (gid_t gid); +struct group *getgrnam (char const *name); + +#endif // ! SYSTEM_LIBC + +#endif // __MES_GRP_H diff --git a/sysa/mes-0.22/include/inttypes.h b/sysa/mes-0.22/include/inttypes.h new file mode 100644 index 0000000..5c56ad9 --- /dev/null +++ b/sysa/mes-0.22/include/inttypes.h @@ -0,0 +1,34 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + * Copyright © 2017 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ +#ifndef __MES_INTTYPES_H +#define __MES_INTTYPES_H 1 + +#if SYSTEM_LIBC +#ifndef _GNU_SOURCE +#define _GNU_SOURCE +#endif +#undef __MES_INTTYPES_H +#include_next +#else // ! SYSTEM_LIBC + +#include +#endif // ! SYSTEM_LIBC + +#endif // __MES_INTTYPES_H diff --git a/sysa/mes-0.22/include/libgen.h b/sysa/mes-0.22/include/libgen.h new file mode 100644 index 0000000..3e5aa19 --- /dev/null +++ b/sysa/mes-0.22/include/libgen.h @@ -0,0 +1,34 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + * Copyright © 2017 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ +#ifndef __MES_LIBGEN_H +#define __MES_LIBGEN_H 1 + +#if SYSTEM_LIBC +#ifndef _GNU_SOURCE +#define _GNU_SOURCE +#endif +#undef __MES_LIBGEN_H +#include_next + +#else // ! SYSTEM_LIBC +char *dirname (char *); +#endif // ! SYSTEM_LIBC + +#endif // __MES_LIBGEN_H diff --git a/sysa/mes-0.22/include/limits.h b/sysa/mes-0.22/include/limits.h new file mode 100644 index 0000000..9cbbf97 --- /dev/null +++ b/sysa/mes-0.22/include/limits.h @@ -0,0 +1,41 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + * Copyright © 2017,2018 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ +#ifndef __MES_LIMITS_H +#define __MES_LIMITS_H 1 + +#if SYSTEM_LIBC +#ifndef _GNU_SOURCE +#define _GNU_SOURCE +#endif +#undef __MES_LIMITS_H +#include_next + +#else // ! SYSTEM_LIBC + +#include + +#define MB_CUR_MAX 1 +#define NAME_MAX 255 +#define PATH_MAX 512 +#define _POSIX_OPEN_MAX 16 + +#endif // ! SYSTEM_LIBC + +#endif // __MES_LIMITS_H diff --git a/sysa/mes-0.22/include/linux/syscall.h b/sysa/mes-0.22/include/linux/syscall.h new file mode 100644 index 0000000..0af5fd7 --- /dev/null +++ b/sysa/mes-0.22/include/linux/syscall.h @@ -0,0 +1,31 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + * Copyright © 2016,2017,2018,2019 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ + +#ifndef __MES_SYSCALL_H +#define __MES_SYSCALL_H + +long _sys_call (long sys_call); +long _sys_call1 (long sys_call, long one); +long _sys_call2 (long sys_call, long one, long two); +long _sys_call3 (long sys_call, long one, long two, long three); +long _sys_call4 (long sys_call, long one, long two, long three, long four); +long _sys_call6 (long sys_call, long one, long two, long three, long four, long five, long six); + +#endif //__MES_SYSCALL_H diff --git a/sysa/mes-0.22/include/linux/x86/syscall.h b/sysa/mes-0.22/include/linux/x86/syscall.h new file mode 100644 index 0000000..e8de351 --- /dev/null +++ b/sysa/mes-0.22/include/linux/x86/syscall.h @@ -0,0 +1,91 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + * Copyright © 2017 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ +#ifndef __MES_LINUX_X86_SYSCALL_H +#define __MES_LINUX_X86_SYSCALL_H 1 + +// libc-mini +// #define SYS_exit 0x01 +// #define SYS_write 0x04 + +// libc +#define SYS_fork 0x02 +#define SYS_read 0x03 +#define SYS_open 0x05 +#define SYS_waitpid 0x07 +#define SYS_wait4 0x72 +#define SYS_execve 0x0b +#define SYS_chmod 0x0f +#define SYS_access 0x21 +#define SYS_brk 0x2d +#define SYS_ioctl 0x36 +#define SYS_fsync 0x76 + +// libc+tcc +#define SYS_close 0x06 +#define SYS_time 0x0d +#define SYS_lseek 0x13 +#define SYS_unlink 0x0a +#define SYS_rmdir 0x28 +#define SYS_gettimeofday 0x4e +#define SYS_stat 0x6a +#define SYS_getcwd 0xb7 + +// libc+gnu + +#define SYS_chdir 0x0c +#define SYS_link 0x09 +#define SYS_getpid 0x14 +#define SYS_getuid 0x18 +#define SYS_kill 0x25 +#define SYS_rename 0x26 +#define SYS_mkdir 0x27 +#define SYS_dup 0x29 +#define SYS_pipe 0x2a +#define SYS_getgid 0x2f +#define SYS_signal 0x30 +#define SYS_sigaction 0x43 +#define SYS_rt_sigaction 0xae +#define SYS_signal 0x30 +#define SYS_fcntl 0x37 +#define SYS_dup2 0x3f +#define SYS_getrusage 0x4d +#define SYS_lstat 0x6b +#define SYS_setitimer 0x68 +#define SYS_fstat 0x6c +#define SYS_nanosleep 0xa2 +#define SYS_getdents 0x8d +#define SYS_clock_gettime 0x109 + +// bash +#define SYS_setuid 0x17 +#define SYS_geteuid 0x31 +#define SYS_getegid 0x32 +#define SYS_setgid 0x3e +#define SYS_getppid 0x40 + +// make+POSIX +#define SYS_sigprocmask 0x7e + +// tar +#define SYS_symlink 0x53 +#define SYS_readlink 0x55 +#define SYS_mknod 0x0e + +#endif // __MES_LINUX_X86_SYSCALL_H diff --git a/sysa/mes-0.22/include/linux/x86_64/syscall.h b/sysa/mes-0.22/include/linux/x86_64/syscall.h new file mode 100644 index 0000000..36ef06b --- /dev/null +++ b/sysa/mes-0.22/include/linux/x86_64/syscall.h @@ -0,0 +1,88 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + * Copyright © 2018 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ +#ifndef __MES_LINUX_X86_64_SYSCALL_H +#define __MES_LINUX_X86_64_SYSCALL_H 1 + +// libc-mini +// #define SYS_write 0x01 +// #define SYS_exit 0x3c + +// libc +#define SYS_fork 0x39 +#define SYS_read 0x00 +#define SYS_open 0x02 +//#define SYS_waitpid +#define SYS_wait4 0x3d +#define SYS_execve 0x3b +#define SYS_chmod 0x5a +#define SYS_access 0x15 +#define SYS_brk 0x0c +#define SYS_ioctl 0x10 +#define SYS_fsync 0x4a + +// libc+tcc +#define SYS_close 0x03 +#define SYS_time 0xc9 +#define SYS_lseek 0x08 +#define SYS_unlink 0x57 +#define SYS_rmdir 0x54 +#define SYS_gettimeofday 0x60 +#define SYS_stat 0x04 +#define SYS_getcwd 0x4f + +// libc+gnu +#define SYS_chdir 0x50 +#define SYS_link 0x56 +#define SYS_getpid 0x27 +#define SYS_getuid 0x66 +#define SYS_kill 0x3e +#define SYS_rename 0x52 +#define SYS_mkdir 0x53 +#define SYS_dup 0x20 +#define SYS_pipe 0x16 +#define SYS_getgid 0x68 +#define SYS_rt_sigaction 0x0d +#define SYS_rt_sigreturn 0x0f +#define SYS_fcntl 0x48 +#define SYS_dup2 0x21 +#define SYS_getrusage 0x62 +#define SYS_lstat 0x06 +#define SYS_setitimer 0x26 +#define SYS_fstat 0x05 +#define SYS_nanosleep 0x33 +#define SYS_getdents 0x4e +#define SYS_clock_gettime 0xe4 + +// bash +#define SYS_setuid 0x69 +#define SYS_setgid 0x6a +#define SYS_geteuid 0x6b +#define SYS_getegid 0x6c +#define SYS_getppid 0x6e + +// make+SYSTEM_LIBC +#define SYS_rt_sigprocmask 0x0e + +// tar +#define SYS_symlink 0x58 +#define SYS_readlink 0x59 +#define SYS_mknod 0x85 + +#endif // __MES_LINUX_X86_64_SYSCALL_H diff --git a/sysa/mes-0.22/include/locale.h b/sysa/mes-0.22/include/locale.h new file mode 100644 index 0000000..44e58bd --- /dev/null +++ b/sysa/mes-0.22/include/locale.h @@ -0,0 +1,45 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + * Copyright © 2017,2018 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ +#ifndef __MES_LOCALE_H +#define __MES_LOCALE_H 1 + +#if SYSTEM_LIBC +#ifndef _GNU_SOURCE +#define _GNU_SOURCE +#endif +#undef __MES_LOCALE_H +#include_next + +#else // ! SYSTEM_LIBC + +// *INDENT-OFF* +#ifndef LC_ALL +#define LC_CTYPE 0 +#define LC_NUMERIC 1 +#define LC_COLLATE 3 +#define LC_ALL 6 +#endif +// *INDENT-ON* + +char *setlocale (int category, char const *locale); + +#endif // ! SYSTEM_LIBC + +#endif // __MES_LOCALE_H diff --git a/sysa/mes-0.22/include/mach/mach-init.h b/sysa/mes-0.22/include/mach/mach-init.h new file mode 100644 index 0000000..02916a7 --- /dev/null +++ b/sysa/mes-0.22/include/mach/mach-init.h @@ -0,0 +1,50 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + * Copyright © 1993-2016 Free Software Foundation, Inc. + * Copyright © 2019 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ + +/** Commentary: + Taken from GNU C Library + Declarations and macros for the basic Mach things set at startup. + */ + +#ifndef _MACH_INIT_H + +#define _MACH_INIT_H 1 + +#include + +/* Return the current task's task port. */ +extern mach_port_t mach_task_self (void); +extern mach_port_t mach_host_self (void); + +/* Kernel page size. */ +extern vm_size_t __vm_page_size; +extern vm_size_t vm_page_size; + +/* Round the address X up to a page boundary. */ +#define round_page(x) \ + ((((vm_offset_t) (x) + __vm_page_size - 1) / __vm_page_size) * \ + __vm_page_size) + +/* Truncate the address X down to a page boundary. */ +#define trunc_page(x) \ + ((((vm_offset_t) (x)) / __vm_page_size) * __vm_page_size) + +#endif /* mach_init.h */ diff --git a/sysa/mes-0.22/include/math.h b/sysa/mes-0.22/include/math.h new file mode 100644 index 0000000..2e2ca98 --- /dev/null +++ b/sysa/mes-0.22/include/math.h @@ -0,0 +1,43 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + * Copyright © 2017 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ +#ifndef __MES_MATH_H +#define __MES_MATH_H 1 + +#if SYSTEM_LIBC +#undef __MES_MATH_H +#include_next +#else // ! SYSTEM_LIBC + +double atan2 (double y, double x); +double ceil (double x); +double cos (double x); +double exp (double x); +double fabs (double number); +double floor (double x); +double ldexp (double value, int exponent); +double log (double x); +double modf (double value, double *integer_part); +double pow (double base, double power); +double sin (double x); +double sqrt (double x); + +#endif // ! SYSTEM_LIBC + +#endif // __MES_MATH_H diff --git a/sysa/mes-0.22/include/memory.h b/sysa/mes-0.22/include/memory.h new file mode 100644 index 0000000..43e6335 --- /dev/null +++ b/sysa/mes-0.22/include/memory.h @@ -0,0 +1,36 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + * Copyright © 2018 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ +#ifndef __MES_MEMORY_H +#define __MES_MEMORY_H 1 + +#if SYSTEM_LIBC +#ifndef _GNU_SOURCE +#define _GNU_SOURCE +#endif +#undef __MES_MEMORY_H +#include_next + +#else // ! SYSTEM_LIBC + +#include + +#endif // ! SYSTEM_LIBC + +#endif // __MES_MEMORY_H diff --git a/sysa/mes-0.22/include/mes/builtins.h b/sysa/mes-0.22/include/mes/builtins.h new file mode 100644 index 0000000..ddb4890 --- /dev/null +++ b/sysa/mes-0.22/include/mes/builtins.h @@ -0,0 +1,416 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + * Copyright © 2016,2017,2018,2019 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ + +#ifndef __MES_BUILTINS_H +#define __MES_BUILTINS_H + +// src/gc.mes +SCM gc_check (); +SCM gc (); +// src/hash.mes +SCM hashq (SCM x, SCM size); +SCM hash (SCM x, SCM size); +SCM hashq_get_handle (SCM table, SCM key, SCM dflt); +SCM hashq_ref (SCM table, SCM key, SCM dflt); +SCM hash_ref (SCM table, SCM key, SCM dflt); +SCM hashq_set_x (SCM table, SCM key, SCM value); +SCM hash_set_x (SCM table, SCM key, SCM value); +SCM hash_table_printer (SCM table); +SCM make_hash_table (SCM x); +// src/lib.mes +SCM procedure_name_ (SCM x); +SCM display_ (SCM x); +SCM display_error_ (SCM x); +SCM display_port_ (SCM x, SCM p); +SCM write_ (SCM x); +SCM write_error_ (SCM x); +SCM write_port_ (SCM x, SCM p); +SCM exit_ (SCM x); +SCM frame_printer (SCM frame); +SCM make_stack (SCM stack); +SCM stack_length (SCM stack); +SCM stack_ref (SCM stack, SCM index); +SCM xassq (SCM x, SCM a); +SCM memq (SCM x, SCM a); +SCM equal2_p (SCM a, SCM b); +SCM last_pair (SCM x); +SCM pair_p (SCM x); +// src/math.mes +SCM greater_p (SCM x); +SCM less_p (SCM x); +SCM is_p (SCM x); +SCM minus (SCM x); +SCM plus (SCM x); +SCM divide (SCM x); +SCM modulo (SCM a, SCM b); +SCM multiply (SCM x); +SCM logand (SCM x); +SCM logior (SCM x); +SCM lognot (SCM x); +SCM logxor (SCM x); +SCM ash (SCM n, SCM count); +// src/mes.mes +SCM make_cell_ (SCM type, SCM car, SCM cdr); +SCM type_ (SCM x); +SCM car_ (SCM x); +SCM cdr_ (SCM x); +SCM arity_ (SCM x); +SCM cons (SCM x, SCM y); +SCM car (SCM x); +SCM cdr (SCM x); +SCM list (SCM x); +SCM null_p (SCM x); +SCM eq_p (SCM x, SCM y); +SCM values (SCM x); +SCM acons (SCM key, SCM value, SCM alist); +SCM length (SCM x); +SCM error (SCM key, SCM x); +SCM append2 (SCM x, SCM y); +SCM append_reverse (SCM x, SCM y); +SCM reverse_x_ (SCM x, SCM t); +SCM pairlis (SCM x, SCM y, SCM a); +SCM call (SCM fn, SCM x); +SCM assq (SCM x, SCM a); +SCM assoc (SCM x, SCM a); +SCM set_car_x (SCM x, SCM e); +SCM set_cdr_x (SCM x, SCM e); +SCM set_env_x (SCM x, SCM e, SCM a); +SCM macro_get_handle (SCM name); +SCM add_formals (SCM formals, SCM x); +SCM eval_apply (); +SCM make_builtin_type (); +SCM make_builtin (SCM builtin_type, SCM name, SCM arity, SCM function); +SCM builtin_arity (SCM builtin); +SCM builtin_p (SCM x); +SCM builtin_printer (SCM builtin); +// CONSTANT cell_nil 1 +#define cell_nil 1 +// CONSTANT cell_f 2 +#define cell_f 2 +// CONSTANT cell_t 3 +#define cell_t 3 +// CONSTANT cell_dot 4 +#define cell_dot 4 +// CONSTANT cell_arrow 5 +#define cell_arrow 5 +// CONSTANT cell_undefined 6 +#define cell_undefined 6 +// CONSTANT cell_unspecified 7 +#define cell_unspecified 7 +// CONSTANT cell_closure 8 +#define cell_closure 8 +// CONSTANT cell_circular 9 +#define cell_circular 9 +// CONSTANT cell_begin 10 +#define cell_begin 10 +// CONSTANT cell_call_with_current_continuation 11 +#define cell_call_with_current_continuation 11 +// CONSTANT cell_vm_apply 12 +#define cell_vm_apply 12 +// CONSTANT cell_vm_apply2 13 +#define cell_vm_apply2 13 +// CONSTANT cell_vm_begin 14 +#define cell_vm_begin 14 +// CONSTANT cell_vm_begin_eval 15 +#define cell_vm_begin_eval 15 +// CONSTANT cell_vm_begin_expand 16 +#define cell_vm_begin_expand 16 +// CONSTANT cell_vm_begin_expand_eval 17 +#define cell_vm_begin_expand_eval 17 +// CONSTANT cell_vm_begin_expand_macro 18 +#define cell_vm_begin_expand_macro 18 +// CONSTANT cell_vm_begin_expand_primitive_load 19 +#define cell_vm_begin_expand_primitive_load 19 +// CONSTANT cell_vm_begin_primitive_load 20 +#define cell_vm_begin_primitive_load 20 +// CONSTANT cell_vm_begin_read_input_file 21 +#define cell_vm_begin_read_input_file 21 +// CONSTANT cell_vm_call_with_current_continuation2 22 +#define cell_vm_call_with_current_continuation2 22 +// CONSTANT cell_vm_call_with_values2 23 +#define cell_vm_call_with_values2 23 +// CONSTANT cell_vm_eval 24 +#define cell_vm_eval 24 +// CONSTANT cell_vm_eval2 25 +#define cell_vm_eval2 25 +// CONSTANT cell_vm_eval_check_func 26 +#define cell_vm_eval_check_func 26 +// CONSTANT cell_vm_eval_define 27 +#define cell_vm_eval_define 27 +// CONSTANT cell_vm_eval_macro_expand_eval 28 +#define cell_vm_eval_macro_expand_eval 28 +// CONSTANT cell_vm_eval_macro_expand_expand 29 +#define cell_vm_eval_macro_expand_expand 29 +// CONSTANT cell_vm_eval_pmatch_car 30 +#define cell_vm_eval_pmatch_car 30 +// CONSTANT cell_vm_eval_pmatch_cdr 31 +#define cell_vm_eval_pmatch_cdr 31 +// CONSTANT cell_vm_eval_set_x 32 +#define cell_vm_eval_set_x 32 +// CONSTANT cell_vm_evlis 33 +#define cell_vm_evlis 33 +// CONSTANT cell_vm_evlis2 34 +#define cell_vm_evlis2 34 +// CONSTANT cell_vm_evlis3 35 +#define cell_vm_evlis3 35 +// CONSTANT cell_vm_if 36 +#define cell_vm_if 36 +// CONSTANT cell_vm_if_expr 37 +#define cell_vm_if_expr 37 +// CONSTANT cell_vm_macro_expand 38 +#define cell_vm_macro_expand 38 +// CONSTANT cell_vm_macro_expand_car 39 +#define cell_vm_macro_expand_car 39 +// CONSTANT cell_vm_macro_expand_cdr 40 +#define cell_vm_macro_expand_cdr 40 +// CONSTANT cell_vm_macro_expand_define 41 +#define cell_vm_macro_expand_define 41 +// CONSTANT cell_vm_macro_expand_define_macro 42 +#define cell_vm_macro_expand_define_macro 42 +// CONSTANT cell_vm_macro_expand_lambda 43 +#define cell_vm_macro_expand_lambda 43 +// CONSTANT cell_vm_macro_expand_set_x 44 +#define cell_vm_macro_expand_set_x 44 +// CONSTANT cell_vm_return 45 +#define cell_vm_return 45 +// CONSTANT cell_symbol_dot 46 +#define cell_symbol_dot 46 +// CONSTANT cell_symbol_lambda 47 +#define cell_symbol_lambda 47 +// CONSTANT cell_symbol_begin 48 +#define cell_symbol_begin 48 +// CONSTANT cell_symbol_if 49 +#define cell_symbol_if 49 +// CONSTANT cell_symbol_quote 50 +#define cell_symbol_quote 50 +// CONSTANT cell_symbol_define 51 +#define cell_symbol_define 51 +// CONSTANT cell_symbol_define_macro 52 +#define cell_symbol_define_macro 52 +// CONSTANT cell_symbol_quasiquote 53 +#define cell_symbol_quasiquote 53 +// CONSTANT cell_symbol_unquote 54 +#define cell_symbol_unquote 54 +// CONSTANT cell_symbol_unquote_splicing 55 +#define cell_symbol_unquote_splicing 55 +// CONSTANT cell_symbol_syntax 56 +#define cell_symbol_syntax 56 +// CONSTANT cell_symbol_quasisyntax 57 +#define cell_symbol_quasisyntax 57 +// CONSTANT cell_symbol_unsyntax 58 +#define cell_symbol_unsyntax 58 +// CONSTANT cell_symbol_unsyntax_splicing 59 +#define cell_symbol_unsyntax_splicing 59 +// CONSTANT cell_symbol_set_x 60 +#define cell_symbol_set_x 60 +// CONSTANT cell_symbol_sc_expand 61 +#define cell_symbol_sc_expand 61 +// CONSTANT cell_symbol_macro_expand 62 +#define cell_symbol_macro_expand 62 +// CONSTANT cell_symbol_portable_macro_expand 63 +#define cell_symbol_portable_macro_expand 63 +// CONSTANT cell_symbol_sc_expander_alist 64 +#define cell_symbol_sc_expander_alist 64 +// CONSTANT cell_symbol_call_with_values 65 +#define cell_symbol_call_with_values 65 +// CONSTANT cell_symbol_call_with_current_continuation 66 +#define cell_symbol_call_with_current_continuation 66 +// CONSTANT cell_symbol_boot_module 67 +#define cell_symbol_boot_module 67 +// CONSTANT cell_symbol_current_module 68 +#define cell_symbol_current_module 68 +// CONSTANT cell_symbol_primitive_load 69 +#define cell_symbol_primitive_load 69 +// CONSTANT cell_symbol_read_input_file 70 +#define cell_symbol_read_input_file 70 +// CONSTANT cell_symbol_write 71 +#define cell_symbol_write 71 +// CONSTANT cell_symbol_display 72 +#define cell_symbol_display 72 +// CONSTANT cell_symbol_car 73 +#define cell_symbol_car 73 +// CONSTANT cell_symbol_cdr 74 +#define cell_symbol_cdr 74 +// CONSTANT cell_symbol_not_a_number 75 +#define cell_symbol_not_a_number 75 +// CONSTANT cell_symbol_not_a_pair 76 +#define cell_symbol_not_a_pair 76 +// CONSTANT cell_symbol_system_error 77 +#define cell_symbol_system_error 77 +// CONSTANT cell_symbol_throw 78 +#define cell_symbol_throw 78 +// CONSTANT cell_symbol_unbound_variable 79 +#define cell_symbol_unbound_variable 79 +// CONSTANT cell_symbol_wrong_number_of_args 80 +#define cell_symbol_wrong_number_of_args 80 +// CONSTANT cell_symbol_wrong_type_arg 81 +#define cell_symbol_wrong_type_arg 81 +// CONSTANT cell_symbol_buckets 82 +#define cell_symbol_buckets 82 +// CONSTANT cell_symbol_builtin 83 +#define cell_symbol_builtin 83 +// CONSTANT cell_symbol_frame 84 +#define cell_symbol_frame 84 +// CONSTANT cell_symbol_hashq_table 85 +#define cell_symbol_hashq_table 85 +// CONSTANT cell_symbol_module 86 +#define cell_symbol_module 86 +// CONSTANT cell_symbol_procedure 87 +#define cell_symbol_procedure 87 +// CONSTANT cell_symbol_record_type 88 +#define cell_symbol_record_type 88 +// CONSTANT cell_symbol_size 89 +#define cell_symbol_size 89 +// CONSTANT cell_symbol_stack 90 +#define cell_symbol_stack 90 +// CONSTANT cell_symbol_argv 91 +#define cell_symbol_argv 91 +// CONSTANT cell_symbol_mes_prefix 92 +#define cell_symbol_mes_prefix 92 +// CONSTANT cell_symbol_mes_version 93 +#define cell_symbol_mes_version 93 +// CONSTANT cell_symbol_internal_time_units_per_second 94 +#define cell_symbol_internal_time_units_per_second 94 +// CONSTANT cell_symbol_compiler 95 +#define cell_symbol_compiler 95 +// CONSTANT cell_symbol_arch 96 +#define cell_symbol_arch 96 +// CONSTANT cell_symbol_pmatch_car 97 +#define cell_symbol_pmatch_car 97 +// CONSTANT cell_symbol_pmatch_cdr 98 +#define cell_symbol_pmatch_cdr 98 +// CONSTANT cell_type_bytes 99 +#define cell_type_bytes 99 +// CONSTANT cell_type_char 100 +#define cell_type_char 100 +// CONSTANT cell_type_closure 101 +#define cell_type_closure 101 +// CONSTANT cell_type_continuation 102 +#define cell_type_continuation 102 +// CONSTANT cell_type_function 103 +#define cell_type_function 103 +// CONSTANT cell_type_keyword 104 +#define cell_type_keyword 104 +// CONSTANT cell_type_macro 105 +#define cell_type_macro 105 +// CONSTANT cell_type_number 106 +#define cell_type_number 106 +// CONSTANT cell_type_pair 107 +#define cell_type_pair 107 +// CONSTANT cell_type_port 108 +#define cell_type_port 108 +// CONSTANT cell_type_ref 109 +#define cell_type_ref 109 +// CONSTANT cell_type_special 110 +#define cell_type_special 110 +// CONSTANT cell_type_string 111 +#define cell_type_string 111 +// CONSTANT cell_type_struct 112 +#define cell_type_struct 112 +// CONSTANT cell_type_symbol 113 +#define cell_type_symbol 113 +// CONSTANT cell_type_values 114 +#define cell_type_values 114 +// CONSTANT cell_type_variable 115 +#define cell_type_variable 115 +// CONSTANT cell_type_vector 116 +#define cell_type_vector 116 +// CONSTANT cell_type_broken_heart 117 +#define cell_type_broken_heart 117 +// CONSTANT cell_symbol_test 118 +#define cell_symbol_test 118 +// src/module.mes +SCM make_module_type (); +SCM module_printer (SCM module); +SCM module_variable (SCM module, SCM name); +SCM module_ref (SCM module, SCM name); +SCM module_define_x (SCM module, SCM name, SCM value); +// src/posix.mes +SCM peek_byte (); +SCM read_byte (); +SCM unread_byte (SCM i); +SCM peek_char (); +SCM read_char (SCM port); +SCM unread_char (SCM i); +SCM write_char (SCM i); +SCM write_byte (SCM x); +SCM getenv_ (SCM s); +SCM setenv_ (SCM s, SCM v); +SCM access_p (SCM file_name, SCM mode); +SCM current_input_port (); +SCM open_input_file (SCM file_name); +SCM open_input_string (SCM string); +SCM set_current_input_port (SCM port); +SCM current_output_port (); +SCM current_error_port (); +SCM open_output_file (SCM x); +SCM set_current_output_port (SCM port); +SCM set_current_error_port (SCM port); +SCM force_output (SCM p); +SCM chmod_ (SCM file_name, SCM mode); +SCM isatty_p (SCM port); +SCM primitive_fork (); +SCM execl_ (SCM file_name, SCM args); +SCM waitpid_ (SCM pid, SCM options); +SCM current_time (); +SCM gettimeofday_ (); +SCM get_internal_run_time (); +SCM getcwd_ (); +SCM dup_ (SCM port); +SCM dup2_ (SCM old, SCM new); +SCM delete_file (SCM file_name); +// src/reader.mes +SCM read_input_file_env_ (SCM e, SCM a); +SCM read_input_file_env (SCM a); +SCM read_env (SCM a); +SCM reader_read_sexp (SCM c, SCM s, SCM a); +SCM reader_read_character (); +SCM reader_read_binary (); +SCM reader_read_octal (); +SCM reader_read_hex (); +SCM reader_read_string (); +// src/strings.mes +SCM string_equal_p (SCM a, SCM b); +SCM symbol_to_string (SCM symbol); +SCM symbol_to_keyword (SCM symbol); +SCM keyword_to_string (SCM keyword); +SCM string_to_symbol (SCM string); +SCM make_symbol (SCM string); +SCM string_to_list (SCM string); +SCM list_to_string (SCM list); +SCM read_string (SCM port); +SCM string_append (SCM x); +SCM string_length (SCM string); +SCM string_ref (SCM str, SCM k); +// src/struct.mes +SCM make_struct (SCM type, SCM fields, SCM printer); +SCM struct_length (SCM x); +SCM struct_ref (SCM x, SCM i); +SCM struct_set_x (SCM x, SCM i, SCM e); +// src/vector.mes +SCM make_vector_ (SCM n); +SCM vector_length (SCM x); +SCM vector_ref (SCM x, SCM i); +SCM vector_entry (SCM x); +SCM vector_set_x (SCM x, SCM i, SCM e); +SCM list_to_vector (SCM x); +SCM vector_to_list (SCM v); + +#endif //__MES_BUILTINS_H diff --git a/sysa/mes-0.22/include/mes/constants.h b/sysa/mes-0.22/include/mes/constants.h new file mode 100644 index 0000000..7606beb --- /dev/null +++ b/sysa/mes-0.22/include/mes/constants.h @@ -0,0 +1,324 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + * Copyright © 2016,2017,2018,2019 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ + +#ifndef __MES_CONSTANTS_H +#define __MES_CONSTANTS_H + +/* Symbols */ + +// CONSTANT cell_nil 1 +#define cell_nil 1 +// CONSTANT cell_f 2 +#define cell_f 2 +// CONSTANT cell_t 3 +#define cell_t 3 +// CONSTANT cell_dot 4 +#define cell_dot 4 +// CONSTANT cell_arrow 5 +#define cell_arrow 5 +// CONSTANT cell_undefined 6 +#define cell_undefined 6 +// CONSTANT cell_unspecified 7 +#define cell_unspecified 7 +// CONSTANT cell_closure 8 +#define cell_closure 8 +// CONSTANT cell_circular 9 +#define cell_circular 9 +// CONSTANT cell_begin 10 +#define cell_begin 10 +// CONSTANT cell_call_with_current_continuation 11 +#define cell_call_with_current_continuation 11 + +// CONSTANT cell_vm_apply 12 +#define cell_vm_apply 12 +// CONSTANT cell_vm_apply2 13 +#define cell_vm_apply2 13 +// CONSTANT cell_vm_begin 14 +#define cell_vm_begin 14 +// CONSTANT cell_vm_begin_eval 15 +#define cell_vm_begin_eval 15 +// CONSTANT cell_vm_begin_expand 16 +#define cell_vm_begin_expand 16 +// CONSTANT cell_vm_begin_expand_eval 17 +#define cell_vm_begin_expand_eval 17 +// CONSTANT cell_vm_begin_expand_macro 18 +#define cell_vm_begin_expand_macro 18 +// CONSTANT cell_vm_begin_expand_primitive_load 19 +#define cell_vm_begin_expand_primitive_load 19 +// CONSTANT cell_vm_begin_primitive_load 20 +#define cell_vm_begin_primitive_load 20 +// CONSTANT cell_vm_begin_read_input_file 21 +#define cell_vm_begin_read_input_file 21 +// CONSTANT cell_vm_call_with_current_continuation2 22 +#define cell_vm_call_with_current_continuation2 22 +// CONSTANT cell_vm_call_with_values2 23 +#define cell_vm_call_with_values2 23 +// CONSTANT cell_vm_eval 24 +#define cell_vm_eval 24 +// CONSTANT cell_vm_eval2 25 +#define cell_vm_eval2 25 +// CONSTANT cell_vm_eval_check_func 26 +#define cell_vm_eval_check_func 26 +// CONSTANT cell_vm_eval_define 27 +#define cell_vm_eval_define 27 +// CONSTANT cell_vm_eval_macro_expand_eval 28 +#define cell_vm_eval_macro_expand_eval 28 +// CONSTANT cell_vm_eval_macro_expand_expand 29 +#define cell_vm_eval_macro_expand_expand 29 +// CONSTANT cell_vm_eval_pmatch_car 30 +#define cell_vm_eval_pmatch_car 30 +// CONSTANT cell_vm_eval_pmatch_cdr 31 +#define cell_vm_eval_pmatch_cdr 31 +// CONSTANT cell_vm_eval_set_x 32 +#define cell_vm_eval_set_x 32 +// CONSTANT cell_vm_evlis 33 +#define cell_vm_evlis 33 +// CONSTANT cell_vm_evlis2 34 +#define cell_vm_evlis2 34 +// CONSTANT cell_vm_evlis3 35 +#define cell_vm_evlis3 35 +// CONSTANT cell_vm_if 36 +#define cell_vm_if 36 +// CONSTANT cell_vm_if_expr 37 +#define cell_vm_if_expr 37 +// CONSTANT cell_vm_macro_expand 38 +#define cell_vm_macro_expand 38 +// CONSTANT cell_vm_macro_expand_car 39 +#define cell_vm_macro_expand_car 39 +// CONSTANT cell_vm_macro_expand_cdr 40 +#define cell_vm_macro_expand_cdr 40 +// CONSTANT cell_vm_macro_expand_define 41 +#define cell_vm_macro_expand_define 41 +// CONSTANT cell_vm_macro_expand_define_macro 42 +#define cell_vm_macro_expand_define_macro 42 +// CONSTANT cell_vm_macro_expand_lambda 43 +#define cell_vm_macro_expand_lambda 43 +// CONSTANT cell_vm_macro_expand_set_x 44 +#define cell_vm_macro_expand_set_x 44 +// CONSTANT cell_vm_return 45 +#define cell_vm_return 45 + +// CONSTANT cell_symbol_dot 46 +#define cell_symbol_dot 46 +// CONSTANT cell_symbol_lambda 47 +#define cell_symbol_lambda 47 +// CONSTANT cell_symbol_begin 48 +#define cell_symbol_begin 48 +// CONSTANT cell_symbol_if 49 +#define cell_symbol_if 49 +// CONSTANT cell_symbol_quote 50 +#define cell_symbol_quote 50 +// CONSTANT cell_symbol_define 51 +#define cell_symbol_define 51 +// CONSTANT cell_symbol_define_macro 52 +#define cell_symbol_define_macro 52 + +// CONSTANT cell_symbol_quasiquote 53 +#define cell_symbol_quasiquote 53 +// CONSTANT cell_symbol_unquote 54 +#define cell_symbol_unquote 54 +// CONSTANT cell_symbol_unquote_splicing 55 +#define cell_symbol_unquote_splicing 55 +// CONSTANT cell_symbol_syntax 56 +#define cell_symbol_syntax 56 +// CONSTANT cell_symbol_quasisyntax 57 +#define cell_symbol_quasisyntax 57 +// CONSTANT cell_symbol_unsyntax 58 +#define cell_symbol_unsyntax 58 +// CONSTANT cell_symbol_unsyntax_splicing 59 +#define cell_symbol_unsyntax_splicing 59 + +// CONSTANT cell_symbol_set_x 60 +#define cell_symbol_set_x 60 + +// CONSTANT cell_symbol_sc_expand 61 +#define cell_symbol_sc_expand 61 +// CONSTANT cell_symbol_macro_expand 62 +#define cell_symbol_macro_expand 62 +// CONSTANT cell_symbol_portable_macro_expand 63 +#define cell_symbol_portable_macro_expand 63 +// CONSTANT cell_symbol_sc_expander_alist 64 +#define cell_symbol_sc_expander_alist 64 + +// CONSTANT cell_symbol_call_with_values 65 +#define cell_symbol_call_with_values 65 +// CONSTANT cell_symbol_call_with_current_continuation 66 +#define cell_symbol_call_with_current_continuation 66 +// CONSTANT cell_symbol_boot_module 67 +#define cell_symbol_boot_module 67 +// CONSTANT cell_symbol_current_module 68 +#define cell_symbol_current_module 68 +// CONSTANT cell_symbol_primitive_load 69 +#define cell_symbol_primitive_load 69 +// CONSTANT cell_symbol_read_input_file 70 +#define cell_symbol_read_input_file 70 +// CONSTANT cell_symbol_write 71 +#define cell_symbol_write 71 +// CONSTANT cell_symbol_display 72 +#define cell_symbol_display 72 + +// CONSTANT cell_symbol_car 73 +#define cell_symbol_car 73 +// CONSTANT cell_symbol_cdr 74 +#define cell_symbol_cdr 74 +// CONSTANT cell_symbol_not_a_number 75 +#define cell_symbol_not_a_number 75 +// CONSTANT cell_symbol_not_a_pair 76 +#define cell_symbol_not_a_pair 76 +// CONSTANT cell_symbol_system_error 77 +#define cell_symbol_system_error 77 +// CONSTANT cell_symbol_throw 78 +#define cell_symbol_throw 78 +// CONSTANT cell_symbol_unbound_variable 79 +#define cell_symbol_unbound_variable 79 +// CONSTANT cell_symbol_wrong_number_of_args 80 +#define cell_symbol_wrong_number_of_args 80 +// CONSTANT cell_symbol_wrong_type_arg 81 +#define cell_symbol_wrong_type_arg 81 + +// CONSTANT cell_symbol_buckets 82 +#define cell_symbol_buckets 82 +// CONSTANT cell_symbol_builtin 83 +#define cell_symbol_builtin 83 +// CONSTANT cell_symbol_frame 84 +#define cell_symbol_frame 84 +// CONSTANT cell_symbol_hashq_table 85 +#define cell_symbol_hashq_table 85 +// CONSTANT cell_symbol_module 86 +#define cell_symbol_module 86 +// CONSTANT cell_symbol_procedure 87 +#define cell_symbol_procedure 87 +// CONSTANT cell_symbol_record_type 88 +#define cell_symbol_record_type 88 +// CONSTANT cell_symbol_size 89 +#define cell_symbol_size 89 +// CONSTANT cell_symbol_stack 90 +#define cell_symbol_stack 90 + +// CONSTANT cell_symbol_argv 91 +#define cell_symbol_argv 91 +// CONSTANT cell_symbol_mes_datadir 92 +#define cell_symbol_mes_datadir 92 +// CONSTANT cell_symbol_mes_version 93 +#define cell_symbol_mes_version 93 + +// CONSTANT cell_symbol_internal_time_units_per_second 94 +#define cell_symbol_internal_time_units_per_second 94 +// CONSTANT cell_symbol_compiler 95 +#define cell_symbol_compiler 95 +// CONSTANT cell_symbol_arch 96 +#define cell_symbol_arch 96 +// CONSTANT cell_symbol_pmatch_car 97 +#define cell_symbol_pmatch_car 97 +// CONSTANT cell_symbol_pmatch_cdr 98 +#define cell_symbol_pmatch_cdr 98 + +// CONSTANT cell_type_bytes 99 +#define cell_type_bytes 99 +// CONSTANT cell_type_char 100 +#define cell_type_char 100 +// CONSTANT cell_type_closure 101 +#define cell_type_closure 101 +// CONSTANT cell_type_continuation 102 +#define cell_type_continuation 102 +// CONSTANT cell_type_function 103 +#define cell_type_function 103 +// CONSTANT cell_type_keyword 104 +#define cell_type_keyword 104 +// CONSTANT cell_type_macro 105 +#define cell_type_macro 105 +// CONSTANT cell_type_number 106 +#define cell_type_number 106 +// CONSTANT cell_type_pair 107 +#define cell_type_pair 107 +// CONSTANT cell_type_port 108 +#define cell_type_port 108 +// CONSTANT cell_type_ref 109 +#define cell_type_ref 109 +// CONSTANT cell_type_special 110 +#define cell_type_special 110 +// CONSTANT cell_type_string 111 +#define cell_type_string 111 +// CONSTANT cell_type_struct 112 +#define cell_type_struct 112 +// CONSTANT cell_type_symbol 113 +#define cell_type_symbol 113 +// CONSTANT cell_type_values 114 +#define cell_type_values 114 +// CONSTANT cell_type_variable 115 +#define cell_type_variable 115 +// CONSTANT cell_type_vector 116 +#define cell_type_vector 116 +// CONSTANT cell_type_broken_heart 117 +#define cell_type_broken_heart 117 + +// CONSTANT cell_test 118 +#define cell_test 118 + +/* Cell types */ + +// CONSTANT TBYTES 0 +#define TBYTES 0 +// CONSTANT TCHAR 1 +#define TCHAR 1 +// CONSTANT TCLOSURE 2 +#define TCLOSURE 2 +// CONSTANT TCONTINUATION 3 +#define TCONTINUATION 3 +// CONSTANT TKEYWORD 4 +#define TKEYWORD 4 +// CONSTANT TMACRO 5 +#define TMACRO 5 +// CONSTANT TNUMBER 6 +#define TNUMBER 6 +// CONSTANT TPAIR 7 +#define TPAIR 7 +// CONSTANT TPORT 8 +#define TPORT 8 +// CONSTANT TREF 9 +#define TREF 9 +// CONSTANT TSPECIAL 10 +#define TSPECIAL 10 +// CONSTANT TSTRING 11 +#define TSTRING 11 +// CONSTANT TSTRUCT 12 +#define TSTRUCT 12 +// CONSTANT TSYMBOL 13 +#define TSYMBOL 13 +// CONSTANT TVALUES 14 +#define TVALUES 14 +// CONSTANT TVARIABLE 15 +#define TVARIABLE 15 +// CONSTANT TVECTOR 16 +#define TVECTOR 16 +// CONSTANT TBROKEN_HEART 17 +#define TBROKEN_HEART 17 + +/* Struct types */ + +// CONSTANT STRUCT_TYPE 0 +#define STRUCT_TYPE 0 +// CONSTANT STRUCT_PRINTER 1 +#define STRUCT_PRINTER 1 + +#define FRAME_SIZE 5 +#define FRAME_PROCEDURE 4 + +#endif //__MES_CONSTANTS_H diff --git a/sysa/mes-0.22/include/mes/lib-mini.h b/sysa/mes-0.22/include/mes/lib-mini.h new file mode 100644 index 0000000..4cc8d96 --- /dev/null +++ b/sysa/mes-0.22/include/mes/lib-mini.h @@ -0,0 +1,98 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + * Copyright © 2016,2017,2018 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ + +#ifndef __MES_LIB_MINI_H +#define __MES_LIB_MINI_H + +#if HAVE_CONFIG_H +#include +#endif + +// CONSTANT STDIN 0 +#ifndef STDIN +#define STDIN 0 +#endif + +// CONSTANT STDOUT 1 +#ifndef STDOUT +#define STDOUT 1 +#endif + +// CONSTANT STDERR 2 +#ifndef STDERR +#define STDERR 2 +#endif + +char **environ; +int __stdin; +int __stdout; +int __stderr; + +int eputs (char const *s); +int puts (char const *s); +int oputs (char const *s); + +#if SYSTEM_LIBC + +#include +#include + +#else //!SYSTEM_LIBC + +#ifndef _SIZE_T +#define _SIZE_T +#ifndef __SIZE_T +#define __SIZE_T +#ifndef __MES_SIZE_T +#define __MES_SIZE_T +#undef size_t +typedef unsigned long size_t; +#endif +#endif +#endif + +#ifndef _SSIZE_T +#define _SSIZE_T +#ifndef __SSIZE_T +#define __SSIZE_T +#ifndef __MES_SSIZE_T +#define __MES_SSIZE_T +#undef ssize_t +#if __i386__ +typedef int ssize_t; +#else +typedef long ssize_t; +#endif +#endif +#endif +#endif + +#ifndef __MES_ERRNO_T +#define __MES_ERRNO_T 1 +typedef int error_t; +int errno; +#endif // !__MES_ERRNO_T + +size_t strlen (char const *s); +ssize_t _write (); +ssize_t write (int filedes, void const *buffer, size_t size); +#endif // !SYSTEM_LIBC + +#endif //__MES_LIB_MINI_H diff --git a/sysa/mes-0.22/include/mes/lib.h b/sysa/mes-0.22/include/mes/lib.h new file mode 100644 index 0000000..6b66107 --- /dev/null +++ b/sysa/mes-0.22/include/mes/lib.h @@ -0,0 +1,69 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + * Copyright © 2016,2017,2018,2019 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ + +#ifndef __MES_LIB_H +#define __MES_LIB_H + +#include + +int __mes_debug (); +void __ungetc_init (); +void __ungetc_clear (int filedes); +void __ungetc_set (int filedes, int c); +int __ungetc_p (int filedes); +double abtod (char const **p, int base); +long abtol (char const **p, int base); +char *dtoab (double number, int base, int signed_p); +char *itoa (int number); +char *ltoa (long number); +char *ltoab (long x, int base); +char *ntoab (long number, int base, int signed_p); +char *ultoa (unsigned long number); +char *utoa (unsigned number); +int eputc (int c); +int fdgetc (int fd); +char * fdgets (char *s, int count, int fd); +int fdputc (int c, int fd); +int fdputs (char const *s, int fd); +int fdungetc (int c, int fd); +char * _getcwd (char *buffer, size_t size); +int isnumber (int c, int base); +int mes_open (char const *file_name, int flags, int mask); +int _open2 (char const *file_name, int flags); +int _open3 (char const *file_name, int flags, int mask); +int oputc (int c); +int oputs (char const *s); +char *search_path (char const *file_name); +ssize_t _read (int fd, void *buffer, size_t size); + +extern char *__brk; +extern void (*__call_at_exit) (void); + +#define __FILEDES_MAX 512 + +#if !SYSTEM_LIBC +void __assert_fail (char *s); +ssize_t __buffered_read (int filedes, void *buffer, size_t size); +size_t __buffered_read_clear (int filedes); +void _exit (int code); +long brk (void *addr); +#endif // !SYSTEM_LIBC + +#endif //__MES_LIB_H diff --git a/sysa/mes-0.22/include/mes/macros.h b/sysa/mes-0.22/include/mes/macros.h new file mode 100644 index 0000000..86dd097 --- /dev/null +++ b/sysa/mes-0.22/include/mes/macros.h @@ -0,0 +1,80 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + * Copyright © 2016,2017,2018,2019 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ + +#ifndef __MES_MACROS_H +#define __MES_MACROS_H + +#define TYPE(x) g_cells[x].type +#define CAR(x) g_cells[x].car +#define CDR(x) g_cells[x].cdr + +#define NTYPE(x) g_news[x].type +#define NCAR(x) g_news[x].car +#define NCDR(x) g_news[x].cdr + +#define BYTES(x) g_cells[x].car +#define LENGTH(x) g_cells[x].car +#define REF(x) g_cells[x].car +#define START(x) (g_cells[x].car >> 16) +#define LEN(x) (g_cells[x].car & 0xffff) +#define VARIABLE(x) g_cells[x].car + +#define CLOSURE(x) g_cells[x].cdr +#define CONTINUATION(x) g_cells[x].cdr + +#define CBYTES(x) (char*)&g_cells[x].cdr +#define CSTRING_STRUCT(x) (char*)&g_cells[x.cdr].cdr + +#define MACRO(x) g_cells[x].car +#define NAME(x) g_cells[x].cdr +#define PORT(x) g_cells[x].car +#define STRING(x) g_cells[x].cdr +#define STRUCT(x) g_cells[x].cdr +#define VALUE(x) g_cells[x].cdr +#define VECTOR(x) g_cells[x].cdr + +#define NLENGTH(x) g_news[x].car +#define NCBYTES(x) (char*)&g_news[x].cdr +#define NVALUE(x) g_news[x].cdr +#define NSTRING(x) g_news[x].cdr +#define NVECTOR(x) g_news[x].cdr + +#define CSTRING(x) CBYTES (STRING (x)) + +#define MAKE_BYTES0(x) make_bytes (x, strlen (x)) +#define NAME_SYMBOL(symbol,name) {size_t s = strlen (name); CAR (symbol) = s; CDR (symbol) = make_bytes (name, s);} + +#define MAKE_CHAR(n) make_cell__ (TCHAR, 0, n) +#define MAKE_CONTINUATION(n) make_cell__ (TCONTINUATION, n, g_stack) +#define MAKE_NUMBER(n) make_cell__ (TNUMBER, 0, (long)n) +#define MAKE_REF(n) make_cell__ (TREF, n, 0) +#define MAKE_STRING0(x) make_string (x, strlen (x)) +#define MAKE_STRING_PORT(x) make_cell__ (TPORT, -length__ (g_ports) - 2, x) +#define MAKE_MACRO(name, x) make_cell__ (TMACRO, x, STRING (name)) + +#define CAAR(x) CAR (CAR (x)) +#define CADR(x) CAR (CDR (x)) +#define CDAR(x) CDR (CAR (x)) +#define CDDR(x) CDR (CDR (x)) +#define CADAR(x) CAR (CDR (CAR (x))) +#define CADDR(x) CAR (CDR (CDR (x))) +#define CDADAR(x) CAR (CDR (CAR (CDR (x)))) + +#endif //__MES_MACROS_H diff --git a/sysa/mes-0.22/include/mes/mes.h b/sysa/mes-0.22/include/mes/mes.h new file mode 100644 index 0000000..a9b6ba9 --- /dev/null +++ b/sysa/mes-0.22/include/mes/mes.h @@ -0,0 +1,106 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + * Copyright © 2016,2017,2018,2019 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ + +#ifndef __MES_MES_H +#define __MES_MES_H + +#include + +typedef long SCM; + +struct scm +{ + long type; + SCM car; + SCM cdr; +}; + +// mes +extern int g_debug; +extern char *g_buf; +extern SCM g_continuations; +extern SCM g_symbols; +extern SCM g_symbol_max; + +// a/env +extern SCM r0; +// param 1 +extern SCM r1; +// save 2 +extern SCM r2; +// continuation +extern SCM r3; +// current-module +extern SCM m0; +// macro +extern SCM g_macros; +extern SCM g_ports; + +// gc +extern long ARENA_SIZE; +extern long MAX_ARENA_SIZE; +extern long STACK_SIZE; +extern long JAM_SIZE; +extern long GC_SAFETY; +extern long MAX_STRING; +extern char *g_arena; +extern long g_free; +extern SCM g_stack; +extern SCM *g_stack_array; +extern struct scm *g_cells; +extern struct scm *g_news; + +SCM alloc (long n); +SCM apply (SCM f, SCM x, SCM a); +SCM apply_builtin (SCM fn, SCM x); +SCM cstring_to_list (char const *s); +SCM cstring_to_symbol (char const *s); +SCM display_ (SCM x); +SCM fdisplay_ (SCM, int, int); +SCM gc_init (); +SCM gc_peek_frame (); +SCM gc_pop_frame (); +SCM gc_push_frame (); +SCM init_time (SCM a); +SCM make_bytes (char const *s, size_t length); +SCM make_cell__ (long type, SCM car, SCM cdr); +SCM make_hash_table_ (long size); +SCM make_hashq_type (); +SCM make_initial_module (SCM a); +SCM make_string (char const *s, size_t length); +SCM make_vector__ (long k); +SCM read_input_file_env (SCM); +SCM string_equal_p (SCM a, SCM b); +SCM struct_ref_ (SCM x, long i); +SCM struct_set_x_ (SCM x, long i, SCM e); +SCM vector_ref_ (SCM x, long i); +SCM vector_set_x_ (SCM x, long i, SCM e); +int peekchar (); +int readchar (); +int unreadchar (); +long length__ (SCM x); +size_t bytes_cells (size_t length); +void assert_max_string (size_t i, char const *msg, char *string); + +#include "mes/builtins.h" +#include "mes/constants.h" +#include "mes/macros.h" + +#endif //__MES_MES_H diff --git a/sysa/mes-0.22/include/pwd.h b/sysa/mes-0.22/include/pwd.h new file mode 100644 index 0000000..992c45f --- /dev/null +++ b/sysa/mes-0.22/include/pwd.h @@ -0,0 +1,46 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + * Copyright © 2018 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ +#ifndef __MES_PWD_H +#define __MES_PWD_H 1 + +#if SYSTEM_LIBC +#undef __MES_PWD_H +#include_next +#else // ! SYSTEM_LIBC + +#include + +struct passwd +{ + char *pw_name; + char *pw_passwd; + uid_t pw_uid; + gid_t pw_gid; + char *pw_gecos; + char *pw_dir; + char *pw_shell; +}; + +struct passwd *getpwuid (); + + +#endif // ! SYSTEM_LIBC + +#endif // __MES_PWD_H diff --git a/sysa/mes-0.22/include/setjmp.h b/sysa/mes-0.22/include/setjmp.h new file mode 100644 index 0000000..512ea11 --- /dev/null +++ b/sysa/mes-0.22/include/setjmp.h @@ -0,0 +1,47 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + * Copyright © 2017 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ +#ifndef __MES_SETJMP_H +#define __MES_SETJMP_H 1 + +#if SYSTEM_LIBC +#undef __MES_SETJMP_H +#include_next +#else // ! SYSTEM_LIBC + +typedef struct +{ + long __bp; + long __pc; + long __sp; +} __jmp_buf; +typedef __jmp_buf jmp_buf[1]; + +#if __MESC__ +__jmp_buf buf[1]; +#else +jmp_buf buf; +#endif + +void longjmp (jmp_buf env, int val); +int setjmp (jmp_buf env); + +#endif // ! SYSTEM_LIBC + +#endif // __MES_SETJMP_H diff --git a/sysa/mes-0.22/include/signal.h b/sysa/mes-0.22/include/signal.h new file mode 100644 index 0000000..877b2d5 --- /dev/null +++ b/sysa/mes-0.22/include/signal.h @@ -0,0 +1,246 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + * Copyright © 2017 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ +#ifndef __MES_SIGNAL_H +#define __MES_SIGNAL_H 1 + +#if SYSTEM_LIBC +#undef __MES_SIGNAL_H +#include_next +#else //! SYSTEM_LIBC + +#define _NSIG 64 + +#define _SIGSET_NITEMS (_NSIG / (8 * sizeof(unsigned long))) + +typedef struct { + unsigned long items[_SIGSET_NITEMS]; +} sigset_t; +typedef long stack_t; + +#include + +// *INDENT-OFF* +#define NSIG 30 +#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_RESTORER 0x04000000 +#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; +// *INDENT-ON* + +#if __MESC__ +typedef long sighandler_t; +#else +typedef void (*sighandler_t) (int); +#endif + +struct sigaction +{ + union + { + sighandler_t sa_handler; + void (*sa_sigaction) (int signum, siginfo_t *, void *); + }; + unsigned long sa_flags; +#if __x86_64__ + long _foo0; +#endif + sigset_t sa_mask; +#if __x86_64__ + long _foo1[15]; +#endif + //unsigned long sa_flags; // x86? + void (*sa_restorer) (void); +}; + + +#define SIG_DFL ((sighandler_t)0) +#define SIG_IGN ((sighandler_t)1) +#define SIG_ERR ((sighandler_t)-1) + +#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 kill (pid_t pid, int signum); +int sigaction (int signum, struct sigaction const *act, struct sigaction *oldact); +int sigaddset (sigset_t * set, int signum); +#if __MESC__ +void *signal (int signum, void *action); +#else +sighandler_t signal (int signum, sighandler_t action); +#endif +int sigemptyset (sigset_t * set); +#ifndef SIG_BLOCK +#define SIG_BLOCK 0 +#define SIG_UNBLOCK 1 +#define SIG_SETMASK 2 +#endif +int sigprocmask (int how, sigset_t const *set, sigset_t * oldset); + +#endif //! SYSTEM_LIBC + +#endif // __MES_SIGNAL_H diff --git a/sysa/mes-0.22/include/stdarg.h b/sysa/mes-0.22/include/stdarg.h new file mode 100644 index 0000000..6a8fee6 --- /dev/null +++ b/sysa/mes-0.22/include/stdarg.h @@ -0,0 +1,55 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + * Copyright © 2017,2018,2019 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ +#ifndef __MES_STDARG_H +#define __MES_STDARG_H 1 + +#if SYSTEM_LIBC +#undef __MES_STDARG_H +#include_next + +#define va_arg8(ap, type) va_arg(ap, type) + +#else // ! SYSTEM_LIBC + +#include + +#if __GNUC__ && __x86_64__ +#define __FOO_VARARGS 1 +#endif + +typedef char *va_list; +#define va_start(ap, last) (void)((ap) = (char*)(&(last) + 1)) +#define va_arg(ap, type) (type)(((long*)((ap) = ((ap) + sizeof (void*))))[-1]) +#define va_align(ap, alignment) ((char*)((((unsigned long) (ap)) + (alignment) - 1) &~ ((alignment) - 1))) +#define va_arg8(ap, type) (type)(((double*)((ap) = (va_align((ap), 8) + sizeof(double))))[-1]) +#define va_end(ap) (void)((ap) = 0) +#define va_copy(dest, src) dest = src + +int vexec (char const *file_name, va_list ap); +int vfprintf (FILE * stream, char const *template, va_list ap); +int vfscanf (FILE * stream, char const *template, va_list ap); +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); +int vsscanf (char const *s, char const *template, va_list ap); + +#endif // ! SYSTEM_LIBC + +#endif // __MES_STDARG_H diff --git a/sysa/mes-0.22/include/stdbool.h b/sysa/mes-0.22/include/stdbool.h new file mode 100644 index 0000000..6ad84b6 --- /dev/null +++ b/sysa/mes-0.22/include/stdbool.h @@ -0,0 +1,36 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + * Copyright © 2017 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ +#ifndef __MES_STDBOOL_H +#define __MES_STDBOOL_H 1 + +#if SYSTEM_LIBC +#ifndef _GNU_SOURCE +#define _GNU_SOURCE +#endif +#undef __MES_STDBOOL_H +#include_next + +#else // ! SYSTEM_LIBC +typedef int bool; +#define false 0 +#define true 1 +#endif // ! SYSTEM_LIBC + +#endif // __MES_STDBOOL_H diff --git a/sysa/mes-0.22/include/stddef.h b/sysa/mes-0.22/include/stddef.h new file mode 100644 index 0000000..a597c9b --- /dev/null +++ b/sysa/mes-0.22/include/stddef.h @@ -0,0 +1,42 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + * Copyright © 2017 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ +#ifndef __MES_STDDEF_H +#define __MES_STDDEF_H 1 + +#if SYSTEM_LIBC +#undef __MES_STDDEF_H +#include_next +#else // ! SYSTEM_LIBC + +#include +#include +#include + +#ifndef offsetof +#if __MESC__ +#define offsetof(type, field) (&((type *)0)->field) +#else // !__MESC__ +#define offsetof(type, field) ((size_t)&((type *)0)->field) +#endif // !__MESC__ +#endif // offsetof + +#endif // ! SYSTEM_LIBC + +#endif // __MES_STDDEF_H diff --git a/sysa/mes-0.22/include/stdint.h b/sysa/mes-0.22/include/stdint.h new file mode 100644 index 0000000..8b8994e --- /dev/null +++ b/sysa/mes-0.22/include/stdint.h @@ -0,0 +1,108 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + * Copyright © 2017 Jan (janneke) Nieuwenhuizen + * Copyright © 2018 Peter De Wachter + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ +#ifndef __MES_STDINT_H +#define __MES_STDINT_H 1 + +#if SYSTEM_LIBC +#ifndef _GNU_SOURCE +#define _GNU_SOURCE +#endif +#undef __MES_STDINT_H +#include_next + +#else // ! SYSTEM_LIBC + +#undef unsigned +#undef uint8_t +#undef int8_t + +#undef uint16_t +#undef int16_t + +#undef uint32_t +#undef int32_t + +#undef uint64_t +#undef int64_t + +#undef uintptr_t +#undef intmax_t +#undef intptr_t +#undef uintmax_t +#undef ptrdiff_t + +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; + +typedef int intmax_t; +typedef unsigned uintmax_t; + +#include + +#define CHAR_BIT 8 +#define CHAR_MAX 255 +#define UCHAR_MAX 255 + +#define INT8_MAX 127 +#define INT8_MIN (-INT8_MAX-1) +#define UINT8_MAX 255 + +#define INT16_MAX 32767 +#define INT16_MIN (-INT16_MAX-1) +#define UINT16_MAX 65535 + +#define INT32_MAX 2147483647 +#define INT32_MIN (-INT32_MAX-1) +#define UINT32_MAX 4294967295U + +#define INT64_MAX 9223372036854775807LL +#define INT64_MIN (-INT64_MAX-1) +#define UINT64_MAX 18446744073709551615ULL + +#define INT_MIN -2147483648 +#define INT_MAX 2147483647 +#if __i386__ +#define LONG_MIN INT_MIN +#define LONG_MAX INT_MAX +#define UINT_MAX UINT32_MAX +#define ULONG_MAX UINT32_MAX +#define LLONG_MIN INT64_MIN +#define LLONG_MAX INT64_MAX +#define SIZE_MAX UINT32_MAX +#elif __x86_64__ +#define LONG_MIN INT64_MIN +#define LONG_MAX INT64_MAX +#define UINT_MAX UINT32_MAX +#define ULONG_MAX UINT64_MAX +#define LLONG_MIN INT64_MIN +#define LLONG_MAX INT64_MAX +#define SIZE_MAX UINT64_MAX +#endif + +#endif // ! SYSTEM_LIBC + +#endif // __MES_STDINT_H diff --git a/sysa/mes-0.22/include/stdio.h b/sysa/mes-0.22/include/stdio.h new file mode 100644 index 0000000..c8684e0 --- /dev/null +++ b/sysa/mes-0.22/include/stdio.h @@ -0,0 +1,94 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + * Copyright © 2016,2017 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ +#ifndef __MES_STDIO_H +#define __MES_STDIO_H 1 + +#include + +#if SYSTEM_LIBC +#ifndef _GNU_SOURCE +#define _GNU_SOURCE +#endif +#undef __MES_STDIO_H +#include_next + +#else // ! SYSTEM_LIBC + +#ifndef _IOFBF +#define _IOFBF 0 /* Fully buffered. */ +#define _IOLBF 1 /* Line buffered. */ +#define _IONBF 2 /* No buffering. */ +#endif + +#ifndef BUFSIZ +#define BUFSIZ 256 +#endif + +#ifndef L_tmpnam +#define L_tmpnam 100 +#endif + +#include + +#define stdin (FILE*)0 +#define stdout (FILE*)1 +#define stderr (FILE*)2 + +#define SEEK_SET 0 +#define SEEK_CUR 1 +#define SEEK_END 2 + +FILE *fdopen (int fd, char const *mode); +FILE *fopen (char const *file_name, char const *mode); +int eputc (int c); +int eputs (char const *s); +int fclose (FILE * stream); +int feof (FILE * stream); +int ferror (FILE * stream); +int fflush (FILE * stream); +int fgetc (FILE * stream); +char *fgets (char *s, int size, FILE * stream); +int fprintf (FILE * stream, char const *format, ...); +int fpurge (FILE * stream); +int fputc (int c, FILE * stream); +int fputs (char const *s, FILE * stream); +int fscanf (FILE * stream, char const *template, ...); +int fseek (FILE * stream, long offset, int whence); +int getc (FILE * stream); +int getchar (void); +char *getlogin (void); +int printf (char const *format, ...); +int putc (int c, FILE * stream); +int putchar (int c); +int puts (char const *s); +int remove (char const *file_name); +int setvbuf (FILE * stream, char *buf, int mode, size_t size); +int snprintf (char *str, size_t size, char const *format, ...); +int sprintf (char *str, char const *format, ...); +int sscanf (char const *str, char const *format, ...); +int ungetc (int c, FILE * stream); +long ftell (FILE * stream); +size_t fread (void *ptr, size_t size, size_t count, FILE * stream); +size_t freadahead (FILE * fp); +size_t fwrite (void const *ptr, size_t size, size_t count, FILE * stream); + +#endif // ! SYSTEM_LIBC + +#endif // __MES_STDIO_H diff --git a/sysa/mes-0.22/include/stdlib.h b/sysa/mes-0.22/include/stdlib.h new file mode 100644 index 0000000..592a387 --- /dev/null +++ b/sysa/mes-0.22/include/stdlib.h @@ -0,0 +1,69 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + * Copyright © 2017,2018,2019 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ +#ifndef __MES_STDLIB_H +#define __MES_STDLIB_H 1 + +#ifndef __MES_COMPARISON_FN_T +#define __MES_COMPARISON_FN_T +typedef int (*comparison_fn_t) (void const *, void const *); +#endif + +#if SYSTEM_LIBC +#ifndef _GNU_SOURCE +#define _GNU_SOURCE +#endif +#undef __MES_STDLIB_H +#include_next +#else // ! SYSTEM_LIBC + +#include +#include + +void abort (void); +double atof (char const *s); +int atoi (char const *s); +int atexit (void (*function) (void)); +void *calloc (size_t nmemb, size_t size); +void _exit (int status); +void exit (int status); +void free (void *ptr); +char *getenv (char const *s); +int setenv (char const *s, char const *v, int overwrite_p); +void unsetenv (char const *name); +void *malloc (size_t); +void qsort (void *base, size_t nmemb, size_t size, int (*compar) (void const *, void const *)); +int rand (void); +void *realloc (void *p, size_t size); +double strtod (char const *string, char **tailptr); +float strtof (char const *string, char **tailptr); +long double strtold (char const *string, char **tailptr); +long strtol (char const *string, char **tailptr, int base); +long long strtoll (char const *string, char **tailptr, int base); +unsigned long strtoul (char const *string, char **tailptr, int base); +unsigned long long strtoull (char const *string, char **tailptr, int base); + +#define EXIT_FAILURE 1 +#define EXIT_SUCCESS 0 + +void *bsearch (void const *key, void const *array, size_t count, size_t size, comparison_fn_t compare); + +#endif // ! SYSTEM_LIBC + +#endif // __MES_STDLIB_H diff --git a/sysa/mes-0.22/include/stdnoreturn.h b/sysa/mes-0.22/include/stdnoreturn.h new file mode 100644 index 0000000..1bc2278 --- /dev/null +++ b/sysa/mes-0.22/include/stdnoreturn.h @@ -0,0 +1,34 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + * Copyright © 2017 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ +#ifndef __MES_STDNORETURN_H +#define __MES_STDNORETURN_H 1 + +#if SYSTEM_LIBC +#ifndef _GNU_SOURCE +#define _GNU_SOURCE +#endif +#undef __MES_STDNORETURN_H +#include_next + +#else // ! SYSTEM_LIBC +// whut? +#endif // ! SYSTEM_LIBC + +#endif // __MES_STDNORETURN_H diff --git a/sysa/mes-0.22/include/string.h b/sysa/mes-0.22/include/string.h new file mode 100644 index 0000000..60b2887 --- /dev/null +++ b/sysa/mes-0.22/include/string.h @@ -0,0 +1,60 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + * Copyright © 2017 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ +#ifndef __MES_STRING_H +#define __MES_STRING_H 1 + +#if SYSTEM_LIBC +#ifndef _GNU_SOURCE +#define _GNU_SOURCE +#endif +#undef __MES_STRING_H +#include_next + +#else // ! SYSTEM_LIBC + +#include + +void *memchr (void const *block, int c, size_t size); +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); +void *memchr (void const *block, int c, size_t size); +int memcmp (void const *s1, void const *s2, size_t n); +void *memmem (void const *haystack, int haystack_len, void const *needle, int needle_len); +char *strcat (char *dest, char const *src); +char *strchr (char const *s, int c); +int strcasecmp (char const *s1, char const *s2); +int strcmp (char const *, char const *); +char *strcpy (char *dest, char const *src); +size_t strlen (char const *); +char *strncpy (char *to, char const *from, size_t size); +int strncmp (char const *, char const *, size_t); +char *strrchr (char const *s, int c); +char *strstr (char const *haystack, char const *needle); +char *strlwr (char *string); +char *strupr (char *string); + + +char *strerror (int errnum); +void perror (char const *message); + +#endif // ! SYSTEM_LIBC + +#endif // __MES_STRING_H diff --git a/sysa/mes-0.22/include/strings.h b/sysa/mes-0.22/include/strings.h new file mode 100644 index 0000000..04f94d6 --- /dev/null +++ b/sysa/mes-0.22/include/strings.h @@ -0,0 +1,28 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + * Copyright © 2017 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ +#ifndef __MES_STRINGS_H +#define __MES_STRINGS_H 1 + +#if SYSTEM_LIBC +#undef __MES_STRINGS_H +#include_next +#endif // (SYSTEM_LIBC) + +#endif // __MES_STRINGS_H diff --git a/sysa/mes-0.22/include/sys/cdefs.h b/sysa/mes-0.22/include/sys/cdefs.h new file mode 100644 index 0000000..26d1239 --- /dev/null +++ b/sysa/mes-0.22/include/sys/cdefs.h @@ -0,0 +1,28 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + * Copyright © 2017 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ +#ifndef __MES_SYS_CDEFS_H +#define __MES_SYS_CDEFS_H 1 + +#if SYSTEM_LIBC +#undef __MES_SYS_CDEFS_H +#include_next +#endif // (SYSTEM_LIBC) + +#endif // __MES_SYS_CDEFS_H diff --git a/sysa/mes-0.22/include/sys/dir.h b/sysa/mes-0.22/include/sys/dir.h new file mode 100644 index 0000000..8bb6042 --- /dev/null +++ b/sysa/mes-0.22/include/sys/dir.h @@ -0,0 +1,32 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + * Copyright © 2018 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ +#ifndef __MES_SYS_DIR_H +#define __MES_SYS_DIR_H 1 + +#if SYSTEM_LIBC +#undef __MES_SYS_DIR_H +#include_next + +#else // ! SYSTEM_LIBC + + +#endif // ! SYSTEM_LIBC + +#endif // __MES_SYS_DIR_H diff --git a/sysa/mes-0.22/include/sys/file.h b/sysa/mes-0.22/include/sys/file.h new file mode 100644 index 0000000..4f122c4 --- /dev/null +++ b/sysa/mes-0.22/include/sys/file.h @@ -0,0 +1,32 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + * Copyright © 2018 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ +#ifndef __MES_SYS_FILE_H +#define __MES_SYS_FILE_H 1 + +#if SYSTEM_LIBC +#undef __MES_SYS_FILE_H +#include_next + +#else // ! SYSTEM_LIBC + + +#endif // ! SYSTEM_LIBC + +#endif // __MES_SYS_FILE_H diff --git a/sysa/mes-0.22/include/sys/ioctl.h b/sysa/mes-0.22/include/sys/ioctl.h new file mode 100644 index 0000000..2650929 --- /dev/null +++ b/sysa/mes-0.22/include/sys/ioctl.h @@ -0,0 +1,36 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + * Copyright © 2018 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ +#ifndef __MES_SYS_IOCTL_H +#define __MES_SYS_IOCTL_H 1 + +#if SYSTEM_LIBC +#undef __MES_SYS_IOCTL_H +#include_next + +#else // ! SYSTEM_LIBC + +#define TCGETS 0x5401 +#define TCGETA 0x5405 +int ioctl (int fd, unsigned long request, ...); +int ioctl3 (int fd, unsigned long request, long data); + +#endif // ! SYSTEM_LIBC + +#endif // __MES_SYS_IOCTL_H diff --git a/sysa/mes-0.22/include/sys/mman.h b/sysa/mes-0.22/include/sys/mman.h new file mode 100644 index 0000000..9f696b0 --- /dev/null +++ b/sysa/mes-0.22/include/sys/mman.h @@ -0,0 +1,43 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + * Copyright © 2017 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ +#ifndef __MES_SYS_MMAN_H +#define __MES_SYS_MMAN_H 1 + +#if SYSTEM_LIBC +#undef __MES_SYS_MMAN_H +#include_next +#else // ! SYSTEM_LIBC + +#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 // ! SYSTEM_LIBC + +#endif // __MES_SYS_MMAN_H + diff --git a/sysa/mes-0.22/include/sys/param.h b/sysa/mes-0.22/include/sys/param.h new file mode 100644 index 0000000..6fe526f --- /dev/null +++ b/sysa/mes-0.22/include/sys/param.h @@ -0,0 +1,31 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + * Copyright © 2018 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ +#ifndef __MES_SYS_PARAM_H +#define __MES_SYS_PARAM_H 1 + +#if SYSTEM_LIBC +#undef __MES_SYS_PARAM_H +#include_next + +#else // ! SYSTEM_LIBC + +#endif // ! SYSTEM_LIBC + +#endif // __MES_SYS_PARAM_H diff --git a/sysa/mes-0.22/include/sys/resource.h b/sysa/mes-0.22/include/sys/resource.h new file mode 100644 index 0000000..dab45d1 --- /dev/null +++ b/sysa/mes-0.22/include/sys/resource.h @@ -0,0 +1,60 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + * Copyright © 2018 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ +#ifndef __MES_SYS_RESOURCE_H +#define __MES_SYS_RESOURCE_H 1 + +#if SYSTEM_LIBC +#undef __MES_SYS_RESOURCE_H +#include_next + +#else // ! SYSTEM_LIBC + +#include + +struct rusage +{ + struct timeval ru_utime; + struct timeval ru_stime; + long int ru_maxrss; + long int ru_ixrss; + long int ru_idrss; + long int ru_isrss; + long int ru_minflt; + long int ru_majflt; + long int ru_nswap; + long int ru_inblock; + long int ru_oublock; + long int ru_msgsnd; + long int ru_msgrcv; + long int ru_nsignals; + long int ru_nvcsw; + long int ru_nivcsw; +}; + +#define RUSAGE_SELF 0 +#define RUSAGE_CHILDREN -1 +#define RLIMIT_NOFILE 1024 +#define OPEN_MAX RLIMIT_NOFILE + +int getrusage (int processes, struct rusage *rusage); + +#endif // ! SYSTEM_LIBC + +#endif // __MES_SYS_RESOURCE_H diff --git a/sysa/mes-0.22/include/sys/select.h b/sysa/mes-0.22/include/sys/select.h new file mode 100644 index 0000000..420bd38 --- /dev/null +++ b/sysa/mes-0.22/include/sys/select.h @@ -0,0 +1,30 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + * Copyright © 2017 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ +#ifndef __MES_SYS_SELECT_H +#define __MES_SYS_SELECT_H 1 + +#if SYSTEM_LIBC +#undef __MES_SYS_SELECT_H +#include_next +#else //! SYSTEM_LIBC +typedef int fd_set; +#endif //! SYSTEM_LIBC + +#endif // __MES_SYS_SELECT_H diff --git a/sysa/mes-0.22/include/sys/stat.h b/sysa/mes-0.22/include/sys/stat.h new file mode 100644 index 0000000..891f31c --- /dev/null +++ b/sysa/mes-0.22/include/sys/stat.h @@ -0,0 +1,123 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + * Copyright © 2017 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ +#ifndef __MES_SYS_STAT_H +#define __MES_SYS_STAT_H 1lei + +#if SYSTEM_LIBC +#undef __MES_SYS_STAT_H +#include_next + +#else // ! SYSTEM_LIBC + +#include +#include + +#ifndef __MES_MODE_T +#define __MES_MODE_T +typedef int mode_t; +#endif + +// *INDENT-OFF* +#if __i386__ +struct stat +{ + unsigned long st_dev; + unsigned long st_ino; + unsigned short st_mode; + unsigned short st_nlink; + unsigned short st_uid; + unsigned short st_gid; + unsigned long st_rdev; + long st_size; /* Linux: unsigned long; glibc: off_t (i.e. signed) */ + unsigned long st_blksize; + unsigned long st_blocks; + time_t st_atime; /* Linux: unsigned long; glibc: time_t */ + unsigned long st_atime_usec; + time_t st_mtime; /* Linux: unsigned long; glibc: time_t */ + unsigned long st_mtime_usec; + time_t st_ctime; /* Linux: unsigned long; glibc: time_t */ + unsigned long st_ctime_usec; + unsigned long __foo0; + unsigned long __foo1; +}; +#elif __x86_64__ +struct stat +{ + unsigned long st_dev; + unsigned long st_ino; + unsigned int st_mode; + unsigned int st_nlink; + unsigned int st_uid; + unsigned int st_gid; + unsigned long st_rdev; + long st_size; + unsigned long st_blksize; + unsigned long st_blocks; + time_t st_atime; + unsigned long st_atime_usec; + time_t st_mtime; + unsigned long st_mtime_usec; + time_t st_ctime; + unsigned long st_ctime_usec; + unsigned long __foo0; + unsigned long __foo1; +}; +#endif +// *INDENT-ON* + +int chmod (char const *file_name, mode_t mode); +int fstat (int filedes, struct stat *buf); +int mkdir (char const *file_name, mode_t mode); +int mknod (char const *file_name, mode_t mode, dev_t dev); +int chown (char const *file_name, uid_t owner, gid_t group); +int rmdir (char const *file_name); +int stat (char const *file_name, struct stat *buf); + +#define S_IFIFO 0010000 +#define S_IFCHR 0020000 +#define S_IFDIR 0040000 +#define S_IFBLK 0060000 +#define S_IFREG 0100000 +#define S_IFLNK 0120000 +#define S_IFMT 0170000 + +#define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO) +#define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) +#define S_ISREG(m) (((m) & S_IFMT) == S_IFREG) + +#define S_IRWXU 00700 +#define S_IXUSR 00100 +#define S_IWUSR 00200 +#define S_IRUSR 00400 + +#define S_ISUID 0400 +#define S_ISGID 02000 +#define S_IXGRP 00010 +#define S_IXOTH 00001 +#define S_IRGRP 00040 +#define S_IROTH 00004 +#define S_IWGRP 00020 +#define S_IWOTH 00002 +#define S_IRWXG 00070 +#define S_IRWXO 00007 + +#endif // ! SYSTEM_LIBC + +#endif // __MES_SYS_STAT_H diff --git a/sysa/mes-0.22/include/sys/time.h b/sysa/mes-0.22/include/sys/time.h new file mode 100644 index 0000000..3a4dc2e --- /dev/null +++ b/sysa/mes-0.22/include/sys/time.h @@ -0,0 +1,56 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + * Copyright © 2017 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ +#ifndef __MES_SYS_TIME_H +#define __MES_SYS_TIME_H 1 + +#if SYSTEM_LIBC +#undef __MES_SYS_TIME_H +#include_next + +#else // ! SYSTEM_LIBC + +struct timeval +{ + long tv_sec; + long tv_usec; +}; + +struct timezone +{ + int tz_minuteswest; + int tz_dsttime; +}; + +struct itimerval +{ + struct timeval it_interval; + struct timeval it_value; +}; + +#define ITIMER_REAL 0 +#define ITIMER_VIRTUAL 1 +#define ITIMER_PROF 2 + +int gettimeofday (struct timeval *tv, struct timezone *tz); +int setitimer (int which, struct itimerval const *new, struct itimerval *old); + +#endif // ! SYSTEM_LIBC + +#endif // __MES_SYS_TIME_H diff --git a/sysa/mes-0.22/include/sys/timeb.h b/sysa/mes-0.22/include/sys/timeb.h new file mode 100644 index 0000000..13ec953 --- /dev/null +++ b/sysa/mes-0.22/include/sys/timeb.h @@ -0,0 +1,28 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + * Copyright © 2017 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ +#ifndef __MES_SYS_TIMEB_H +#define __MES_SYS_TIMEB_H 1 + +#if SYSTEM_LIBC +#undef __MES_SYS_TIMEB_H +#include_next +#endif // (SYSTEM_LIBC) + +#endif // __MES_SYS_TIMEB_H diff --git a/sysa/mes-0.22/include/sys/times.h b/sysa/mes-0.22/include/sys/times.h new file mode 100644 index 0000000..1b19d2f --- /dev/null +++ b/sysa/mes-0.22/include/sys/times.h @@ -0,0 +1,53 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + * Copyright © 2017 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ +#ifndef __MES_SYS_TIMES_H +#define __MES_SYS_TIMES_H 1 + +#if SYSTEM_LIBC +#undef __MES_SYS_TIMES_H +#include_next + +#else // ! SYSTEM_LIBC + +#ifndef __MES_CLOCK_T +#define __MES_CLOCK_T +#undef clock_t +typedef long clock_t; +#endif + +#ifndef CLOCKS_PER_SEC +#define CLOCKS_PER_SEC 1000000 +#endif + +#ifndef HZ +#define HZ 100 +#endif + +struct tms +{ + clock_t tms_utime; + clock_t tms_stime; + clock_t tms_cutime; + clock_t tms_cstime; +}; + +#endif // ! SYSTEM_LIBC + +#endif // __MES_SYS_TIMES_H diff --git a/sysa/mes-0.22/include/sys/types.h b/sysa/mes-0.22/include/sys/types.h new file mode 100644 index 0000000..a1b0726 --- /dev/null +++ b/sysa/mes-0.22/include/sys/types.h @@ -0,0 +1,152 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + * Copyright © 2017 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ +#ifndef __MES_SYS_TYPES_H +#define __MES_SYS_TYPES_H 1 + +#if SYSTEM_LIBC +#undef __MES_SYS_TYPES_H +#include_next +#else // ! SYSTEM_LIBC + +#include + +#ifndef __MESCCLIB__ +#define __MESCCLIB__ 15 +#endif + +#ifndef EOF +#define EOF -1 +#endif + +#ifndef NULL +#define NULL 0 +#endif + +#ifndef __MES_CLOCK_T +#define __MES_CLOCK_T +#undef clock_t +typedef long clock_t; +#endif + +#ifndef __MES_DEV_T +#define __MES_DEV_T +#undef dev_t +typedef long dev_t; +#endif + +#if !defined (__MES_FILE_T) && ! defined (_FILE_T) +#define __MES_FILE_T +#define _FILE_T +typedef long FILE; +#endif + +#ifndef __MES_GID_T +#define __MES_GID_T +#undef gid_t +typedef unsigned gid_t; +#endif + +#ifndef __MES_INO_T +#define __MES_INO_T +#undef ino_t +typedef unsigned long ino_t; +#endif + +#ifndef __MES_INO64_T +#define __MES_INO64_T +#undef ino64_t +typedef unsigned long long ino64_t; +#endif + +#if !defined (__MES_INTPTR_T) && !defined (__intptr_t_defined) +#define __MES_INTPTR_T +#define __intptr_t_defined +#undef intptr_t +typedef long intptr_t; +#undef uintptr_t +typedef unsigned long uintptr_t; +#endif + +#ifndef __MES_OFF_T +#define __MES_OFF_T +#undef off_t +typedef long off_t; +#endif + +#ifndef __MES_OFF64_T +#define __MES_OFF64_T +#undef off64_t +typedef unsigned long long off64_t; +#endif + +#ifndef __MES_PID_T +#define __MES_PID_T +#undef pid_t +typedef int pid_t; +#endif + +#ifndef __PTRDIFF_T +#define __PTRDIFF_T +#ifndef __MES_PTRDIFF_T +#define __MES_PTRDIFF_T +#undef ptrdiff_t +typedef long ptrdiff_t; +#endif +#endif + +#ifndef __MES_SIGVAL_T +#define __MES_SIGVAL_T +#undef clock_t +typedef long sigval_t; +#endif + +#ifndef __SIZE_T +#define __SIZE_T +#ifndef __MES_SIZE_T +#define __MES_SIZE_T +#undef size_t +typedef unsigned long size_t; +#endif +#endif + +#ifndef __MES_SSIZE_T +#define __MES_SSIZE_T +#undef ssize_t +typedef long ssize_t; +#endif + +#ifndef __MES_UID_T +#define __MES_UID_T +#undef uid_t +typedef unsigned uid_t; +#endif + +#ifndef __WCHAR_T +#define __WCHAR_T +#ifndef __MES_WCHAR_T +#define __MES_WCHAR_T +#undef wchar_t +typedef int wchar_t; +#endif +#endif + +#endif // ! SYSTEM_LIBC + +#endif // __MES_SYS_TYPES_H diff --git a/sysa/mes-0.22/include/sys/ucontext.h b/sysa/mes-0.22/include/sys/ucontext.h new file mode 100644 index 0000000..3cc761d --- /dev/null +++ b/sysa/mes-0.22/include/sys/ucontext.h @@ -0,0 +1,28 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + * Copyright © 2017 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ +#ifndef __MES_SYS_UCONTEXT_H +#define __MES_SYS_UCONTEXT_H 1 + +#if SYSTEM_LIBC +#undef __MES_SYS_UCONTEXT_H +#include_next +#endif // (SYSTEM_LIBC) + +#endif // __MES_SYS_UCONTEXT_H diff --git a/sysa/mes-0.22/include/sys/user.h b/sysa/mes-0.22/include/sys/user.h new file mode 100644 index 0000000..3e98434 --- /dev/null +++ b/sysa/mes-0.22/include/sys/user.h @@ -0,0 +1,111 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + * Copyright © 2018 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ +#ifndef __MES_SYS_USER_H +#define __MES_SYS_USER_H 1 + +#if SYSTEM_LIBC +#undef __MES_SYS_USER_H +#include_next + +#else // ! SYSTEM_LIBC + +/* These are the 32-bit x86 structures. */ +struct user_fpregs_struct +{ + long int cwd; + long int swd; + long int twd; + long int fip; + long int fcs; + long int foo; + long int fos; + long int st_space[20]; +}; + +struct user_fpxregs_struct +{ + unsigned short int cwd; + unsigned short int swd; + unsigned short int twd; + unsigned short int fop; + long int fip; + long int fcs; + long int foo; + long int fos; + long int mxcsr; + long int reserved; + long int st_space[32]; /* 8*16 bytes for each FP-reg = 128 bytes */ + long int xmm_space[32]; /* 8*16 bytes for each XMM-reg = 128 bytes */ + long int padding[56]; +}; + +struct user_regs_struct +{ + long int ebx; + long int ecx; + long int edx; + long int esi; + long int edi; + long int ebp; + long int eax; + long int xds; + long int xes; + long int xfs; + long int xgs; + long int orig_eax; + long int eip; + long int xcs; + long int eflags; + long int esp; + long int xss; +}; + +// *INDENT-OFF* +struct user +{ + struct user_regs_struct regs; + int u_fpvalid; + struct user_fpregs_struct i387; + unsigned long int u_tsize; + unsigned long int u_dsize; + unsigned long int u_ssize; + unsigned long int start_code; + unsigned long int start_stack; + long int signal; + int reserved; + struct user_regs_struct *u_ar0; + struct user_fpregs_struct *u_fpstate; + unsigned long int magic; + char u_comm [32]; + int u_debugreg [8]; +}; + +#define PAGE_SHIFT 12 +#define PAGE_SIZE (1UL << PAGE_SHIFT) +#define PAGE_MASK (~(PAGE_SIZE-1)) +#define NBPG PAGE_SIZE +#define UPAGES 1 +#define HOST_TEXT_START_ADDR (u.start_code) +#define HOST_STACK_END_ADDR (u.start_stack + u.u_ssize * NBPG) +// *INDENT-ON* + +#endif // ! SYSTEM_LIBC + +#endif // __MES_SYS_USER_H diff --git a/sysa/mes-0.22/include/sys/wait.h b/sysa/mes-0.22/include/sys/wait.h new file mode 100644 index 0000000..4cff86f --- /dev/null +++ b/sysa/mes-0.22/include/sys/wait.h @@ -0,0 +1,41 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + * Copyright © 2017,2018,2019 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ +#ifndef __MES_SYS_WAIT_H +#define __MES_SYS_WAIT_H 1 + +#if SYSTEM_LIBC +#undef __MES_SYS_WAIT_H +#include_next +#else // ! SYSTEM_LIBC + +#ifndef __MES_PID_T +#define __MES_PID_T +typedef int pid_t; +#endif + +#define WNOHANG 1 +#define W_EXITCODE(status, signal) ((status) << 8 | (signal)) + +pid_t waitpid (pid_t pid, int *status_ptr, int options); +pid_t wait (int *status_ptr); + +#endif // ! SYSTEM_LIBC + +#endif // __MES_SYS_WAIT_H diff --git a/sysa/mes-0.22/include/termio.h b/sysa/mes-0.22/include/termio.h new file mode 100644 index 0000000..af6c628 --- /dev/null +++ b/sysa/mes-0.22/include/termio.h @@ -0,0 +1,72 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + * Copyright © 2018 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ +#ifndef __MES_TERMIO_H +#define __MES_TERMIO_H 1 + +#if SYSTEM_LIBC +#ifndef _GNU_SOURCE +#define _GNU_SOURCE +#endif +#undef __MES_TERMIO_H +#include_next + +#else // ! SYSTEM_LIBC + +#define TIOCGWINSZ 0x5413 +#define TCGETA 0x5405 +#define TCSETAW 0x5407 + +#define VTIME 5 +#define VMIN 6 + +#define ISIG 0000001 +#define ICANON 0000002 +#define ECHO 0000010 +#define ECHOK 0000040 +#define ECHONL 0000100 + +#define ISTRIP 0000040 +#define INLCR 0000100 +#define ICRNL 0000400 + +#define CS8 0000060 +#define PARENB 0000400 + +struct winsize +{ + unsigned short ws_row; + unsigned short ws_col; + unsigned short ws_xpixel; + unsigned short ws_ypixel; +}; + +struct termio +{ + unsigned short c_iflag; + unsigned short c_oflag; + unsigned short c_cflag; + unsigned short c_lflag; + unsigned char c_line; + unsigned char c_cc[8]; +}; + +#endif // ! SYSTEM_LIBC + +#endif // __MES_TERMIO_H diff --git a/sysa/mes-0.22/include/time.h b/sysa/mes-0.22/include/time.h new file mode 100644 index 0000000..161d006 --- /dev/null +++ b/sysa/mes-0.22/include/time.h @@ -0,0 +1,68 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + * Copyright © 2017 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ +#ifndef __MES_TIME_H +#define __MES_TIME_H 1 + +#if SYSTEM_LIBC +#undef __MES_TIME_H +#include_next +#else // ! SYSTEM_LIBC + +#ifndef __MES_TIME_T +#define __MES_TIME_T 1 +typedef long int clockid_t; +typedef long int time_t; +#endif + +struct tm +{ + int tm_sec; + int tm_min; + int tm_hour; + int tm_mday; + int tm_mon; + int tm_year; + int tm_wday; + int tm_yday; + int tm_isdst; +}; + +#ifndef __MES_STRUCT_TIMESPEC +#define __MES_STRUCT_TIMESPEC + +struct timespec +{ + long tv_sec; + long tv_nsec; +}; + +#endif // __MES_STRUCT_TIMESPEC + +#define CLOCK_PROCESS_CPUTIME_ID 2 +int clock_gettime (clockid_t clk_id, struct timespec *tp); +struct tm *localtime (time_t const *timep); +struct tm *gmtime (time_t const *time); +time_t mktime (struct tm *broken_time); +int nanosleep (struct timespec const *requested_time, struct timespec const *remaining); +time_t time (time_t * tloc); + +#endif // ! SYSTEM_LIBC + +#endif // __MES_TIME_H diff --git a/sysa/mes-0.22/include/unistd.h b/sysa/mes-0.22/include/unistd.h new file mode 100644 index 0000000..8635372 --- /dev/null +++ b/sysa/mes-0.22/include/unistd.h @@ -0,0 +1,98 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + * Copyright © 2017,2018 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ +#ifndef __MES_UNISTD_H +#define __MES_UNISTD_H 1 + +#if SYSTEM_LIBC +#ifndef _GNU_SOURCE +#define _GNU_SOURCE +#endif +#undef __MES_UNISTD_H +#include_next + +#else // ! SYSTEM_LIBC + +#if defined (BOOTSTRAP_WITH_POSIX) +#define _POSIX_VERSION 199009L +#endif + +#include +#ifndef NULL +#define NULL 0 +#endif + +#ifndef STDIN_FILENO +#define STDIN_FILENO 0 +#define STDOUT_FILENO 1 +#define STDERR_FILENO 2 +#endif // STDIN_FILENO + +#ifndef STDIN_FILE_NO +#define STDIN_FILE_NO 0 +#define STDOUT_FILE_NO 1 +#define STDERR_FILE_NO 2 +#endif // STDIN_FILE_NO + +#ifndef R_OK +#define F_OK 0 +#define X_OK 1 +#define W_OK 2 +#define R_OK 4 +#endif + +int access (char const *s, int mode); +unsigned int alarm (unsigned int seconds); +int close (int fd); +int execv (char const *file_name, char *const argv[]); +int execl (char const *file_name, char const *arg, ...); +int execlp (char const *file_name, char const *arg, ...); +int execve (char const *file, char *const argv[], char *const env[]); +int execvp (char const *file, char *const argv[]); +int fork (void); +int fsync (int filedes); +char *getcwd (char *buf, size_t size); +uid_t getuid (void); +gid_t getgid (void); +int setgid (gid_t newgid); +int setuid (uid_t newuid); +uid_t geteuid (void); +gid_t getegid (void); +pid_t getpgrp (void); +pid_t getpid (void); +pid_t getppid (void); +int getpgid (pid_t pid); +int isatty (int fd); +int link (char const *old_name, char const *new_name); +off_t lseek (int fd, off_t offset, int whence); +ssize_t read (int fd, void *buffer, size_t size); +ssize_t readlink (char const *file_name, char *buffer, size_t size); +#if __SBRK_CHAR_PTRDIFF +/* xmalloc in binutils <= 2.10.1 uses this old prototype */ +char *sbrk (ptrdiff_t delta); +#else +void *sbrk (intptr_t delta); +#endif +int symlink (char const *old_name, char const *new_name); +int unlink (char const *file_name); +ssize_t write (int filedes, void const *buffer, size_t size); + +#endif // ! SYSTEM_LIBC + +#endif // __MES_UNISTD_H diff --git a/sysa/mes-0.22/lib/ctype/isalnum.c b/sysa/mes-0.22/lib/ctype/isalnum.c new file mode 100644 index 0000000..f7917ac --- /dev/null +++ b/sysa/mes-0.22/lib/ctype/isalnum.c @@ -0,0 +1,27 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + * Copyright © 2018 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ + +#include + +int +isalnum (int c) +{ + return isdigit (c) || isalpha (c); +} diff --git a/sysa/mes-0.22/lib/ctype/isalpha.c b/sysa/mes-0.22/lib/ctype/isalpha.c new file mode 100644 index 0000000..142a884 --- /dev/null +++ b/sysa/mes-0.22/lib/ctype/isalpha.c @@ -0,0 +1,27 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + * Copyright © 2018 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ + +#include + +int +isalpha (int c) +{ + return islower (c) || isupper (c); +} diff --git a/sysa/mes-0.22/lib/ctype/isascii.c b/sysa/mes-0.22/lib/ctype/isascii.c new file mode 100644 index 0000000..48fa8f8 --- /dev/null +++ b/sysa/mes-0.22/lib/ctype/isascii.c @@ -0,0 +1,27 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + * Copyright © 2018 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ + +#include + +int +isascii (int c) +{ + return c >= 0 && c <= 127; +} diff --git a/sysa/mes-0.22/lib/ctype/iscntrl.c b/sysa/mes-0.22/lib/ctype/iscntrl.c new file mode 100644 index 0000000..82d4c3d --- /dev/null +++ b/sysa/mes-0.22/lib/ctype/iscntrl.c @@ -0,0 +1,27 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + * Copyright © 2018 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ + +#include + +int +iscntrl (int c) +{ + return c >= 0 && c < 32; +} diff --git a/sysa/mes-0.22/lib/ctype/isdigit.c b/sysa/mes-0.22/lib/ctype/isdigit.c new file mode 100644 index 0000000..71798cc --- /dev/null +++ b/sysa/mes-0.22/lib/ctype/isdigit.c @@ -0,0 +1,27 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + * Copyright © 2016,2017,2018 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ + +#include + +int +isdigit (int c) +{ + return c >= '0' && c <= '9'; +} diff --git a/sysa/mes-0.22/lib/ctype/isgraph.c b/sysa/mes-0.22/lib/ctype/isgraph.c new file mode 100644 index 0000000..4d8458b --- /dev/null +++ b/sysa/mes-0.22/lib/ctype/isgraph.c @@ -0,0 +1,27 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + * Copyright © 2019 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ + +#include + +int +isgraph (int c) +{ + return c > 32 && c < 127; +} diff --git a/sysa/mes-0.22/lib/ctype/islower.c b/sysa/mes-0.22/lib/ctype/islower.c new file mode 100644 index 0000000..4a34e7d --- /dev/null +++ b/sysa/mes-0.22/lib/ctype/islower.c @@ -0,0 +1,27 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + * Copyright © 2017,2018 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ + +#include + +int +islower (int c) +{ + return c >= 'a' && c <= 'z'; +} diff --git a/sysa/mes-0.22/lib/ctype/isnumber.c b/sysa/mes-0.22/lib/ctype/isnumber.c new file mode 100644 index 0000000..4c37886 --- /dev/null +++ b/sysa/mes-0.22/lib/ctype/isnumber.c @@ -0,0 +1,34 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + * Copyright © 2016,2017,2018 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ + +#include + +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); +} diff --git a/sysa/mes-0.22/lib/ctype/isprint.c b/sysa/mes-0.22/lib/ctype/isprint.c new file mode 100644 index 0000000..b0b4be8 --- /dev/null +++ b/sysa/mes-0.22/lib/ctype/isprint.c @@ -0,0 +1,27 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + * Copyright © 2018 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ + +#include + +int +isprint (int c) +{ + return c >= 32 && c < 127; +} diff --git a/sysa/mes-0.22/lib/ctype/ispunct.c b/sysa/mes-0.22/lib/ctype/ispunct.c new file mode 100644 index 0000000..5266012 --- /dev/null +++ b/sysa/mes-0.22/lib/ctype/ispunct.c @@ -0,0 +1,27 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + * Copyright © 2018 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ + +#include + +int +ispunct (int c) +{ + return isprint (c) && !isspace (c) && !isalnum (c); +} diff --git a/sysa/mes-0.22/lib/ctype/isspace.c b/sysa/mes-0.22/lib/ctype/isspace.c new file mode 100644 index 0000000..50f6e33 --- /dev/null +++ b/sysa/mes-0.22/lib/ctype/isspace.c @@ -0,0 +1,27 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + * Copyright © 2016,2017,2018 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ + +#include + +int +isspace (int c) +{ + return (c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r' || c == ' '); +} diff --git a/sysa/mes-0.22/lib/ctype/isupper.c b/sysa/mes-0.22/lib/ctype/isupper.c new file mode 100644 index 0000000..7b702e3 --- /dev/null +++ b/sysa/mes-0.22/lib/ctype/isupper.c @@ -0,0 +1,27 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + * Copyright © 2017,2018 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ + +#include + +int +isupper (int c) +{ + return c >= 'A' && c <= 'Z'; +} diff --git a/sysa/mes-0.22/lib/ctype/isxdigit.c b/sysa/mes-0.22/lib/ctype/isxdigit.c new file mode 100644 index 0000000..13f7a66 --- /dev/null +++ b/sysa/mes-0.22/lib/ctype/isxdigit.c @@ -0,0 +1,28 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + * Copyright © 2016,2017,2018,2019 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ + +#include +#include + +int +isxdigit (int c) +{ + return isdigit (c) || (c >= 'a' && c <= 'f'); +} diff --git a/sysa/mes-0.22/lib/ctype/tolower.c b/sysa/mes-0.22/lib/ctype/tolower.c new file mode 100644 index 0000000..19fa82c --- /dev/null +++ b/sysa/mes-0.22/lib/ctype/tolower.c @@ -0,0 +1,29 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + * Copyright © 2017,2018 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ + +#include + +int +tolower (int c) +{ + if (isupper (c)) + return c + ('a' - 'A'); + return c; +} diff --git a/sysa/mes-0.22/lib/ctype/toupper.c b/sysa/mes-0.22/lib/ctype/toupper.c new file mode 100644 index 0000000..444bae2 --- /dev/null +++ b/sysa/mes-0.22/lib/ctype/toupper.c @@ -0,0 +1,29 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + * Copyright © 2017,2018 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ + +#include + +int +toupper (int c) +{ + if (islower (c)) + return c - ('a' - 'A'); + return c; +} diff --git a/sysa/mes-0.22/lib/dirent/__getdirentries.c b/sysa/mes-0.22/lib/dirent/__getdirentries.c new file mode 100644 index 0000000..16be95d --- /dev/null +++ b/sysa/mes-0.22/lib/dirent/__getdirentries.c @@ -0,0 +1,36 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + * Copyright (C) 1993 Free Software Foundation, Inc. + * Copyright © 2018,2019 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ + +// Taken from GNU C Library 1.06.4 + +#include +#include +#include +#include + +int +__getdirentries (int filedes, char *buffer, size_t nbytes, off_t * basep) +{ + if (basep) + *basep = lseek (filedes, (off_t) 0, SEEK_CUR); + + return read (filedes, buffer, nbytes); +} diff --git a/sysa/mes-0.22/lib/dirent/closedir.c b/sysa/mes-0.22/lib/dirent/closedir.c new file mode 100644 index 0000000..325e692 --- /dev/null +++ b/sysa/mes-0.22/lib/dirent/closedir.c @@ -0,0 +1,54 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + * Copyright (C) 1991, 1993, 1995, 1996, 1998 Free Software Foundation, Inc. + * Copyright © 2018 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ + +// Taken from GNU C Library 2.2.5 + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +/* Close the directory stream DIRP. + Return 0 if successful, -1 if not. */ +int +closedir (DIR * dirp) +{ + int filedes; + + if (dirp == NULL) + { + errno = EINVAL; + return -1; + } + + filedes = dirp->fd; + free (dirp); + + return close (filedes); +} diff --git a/sysa/mes-0.22/lib/dirent/opendir.c b/sysa/mes-0.22/lib/dirent/opendir.c new file mode 100644 index 0000000..f091605 --- /dev/null +++ b/sysa/mes-0.22/lib/dirent/opendir.c @@ -0,0 +1,82 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + * Copyright (C) 1991-1996,98,2000,2001 Free Software Foundation, Inc. + * Copyright © 2018 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ + +// Taken from GNU C Library 2.2.5 + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +/* Open a directory stream on NAME. */ +DIR * +opendir (char const *name) +{ + DIR *dirp; + struct stat statbuf; + int fd; + size_t allocation; + int save_errno; + + if (name[0] == '\0') + { + /* POSIX.1-1990 says an empty name gets ENOENT; + but `open' might like it fine. */ + errno = ENOENT; + return 0; + } + + fd = open (name, O_RDONLY | O_DIRECTORY); + if (fd < 0) + return 0; + + if (fstat (fd, &statbuf) < 0) + goto lose; + + if (fcntl (fd, F_SETFD, FD_CLOEXEC) < 0) + goto lose; + + allocation = statbuf.st_blksize; + + dirp = (DIR *) calloc (1, sizeof (DIR) + allocation); + if (!dirp) + lose: + { + save_errno = errno; + close (fd); + errno = save_errno; + return 0; + } + dirp->data = (char *) (dirp + 1); + dirp->allocation = allocation; + dirp->fd = fd; + + return dirp; +} diff --git a/sysa/mes-0.22/lib/dirent/readdir.c b/sysa/mes-0.22/lib/dirent/readdir.c new file mode 100644 index 0000000..2e340e2 --- /dev/null +++ b/sysa/mes-0.22/lib/dirent/readdir.c @@ -0,0 +1,88 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + * Copyright (C) 1991,92,93,94,95,96,97,99,2000 Free Software Foundation, Inc. + * Copyright © 2018 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ + +// Taken from GNU C Library 2.2.5 + +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +int getdents (int filedes, char *buffer, size_t nbytes); + +/* Read a directory entry from DIRP. */ +struct dirent * +readdir (DIR * dirp) +{ + struct dirent *dp; + int saved_errno = errno; + + do + { + size_t reclen; + + if (dirp->offset >= dirp->size) + { + /* We've emptied out our buffer. Refill it. */ + + size_t maxread; + ssize_t bytes; + + maxread = dirp->allocation; + +#if 0 + off_t base; + bytes = __getdirentries (dirp->fd, dirp->data, maxread, &base); +#else + bytes = getdents (dirp->fd, dirp->data, maxread); +#endif + if (bytes <= 0) + { + /* Don't modifiy errno when reaching EOF. */ + if (bytes == 0) + errno = saved_errno; + dp = 0; + break; + } + dirp->size = (size_t) bytes; + + /* Reset the offset into the buffer. */ + dirp->offset = 0; + } + + dp = (struct dirent *) &dirp->data[dirp->offset]; + + reclen = dp->d_reclen; + dirp->offset += reclen; + dirp->filepos = dp->d_off; + + /* Skip deleted files. */ + } + while (dp->d_ino == 0); + + return dp; +} diff --git a/sysa/mes-0.22/lib/freebsd/x86-mes-gcc/crt1.c b/sysa/mes-0.22/lib/freebsd/x86-mes-gcc/crt1.c new file mode 100644 index 0000000..a599804 --- /dev/null +++ b/sysa/mes-0.22/lib/freebsd/x86-mes-gcc/crt1.c @@ -0,0 +1,76 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + * Copyright © 2017,2018,2019 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ + +#include +//int main (int argc, char *argv[], char *envp[]); + +// *INDENT-OFF* +void +_start () +{ + asm ( + "mov $0,%%eax\n\t" + "mov %%eax,%0\n" + : "=r" (__stdin) + : //no inputs "" + ); + + asm ( + "mov $1,%%eax\n\t" + "mov %%eax,%0\n" + : "=r" (__stdout) + : //no inputs "" + ); + + asm ( + "mov $2,%%eax\n\t" + "mov %%eax,%0\n" + : "=r" (__stderr) + : //no inputs "" + ); + asm ( + "mov %%ebp,%%eax\n\t" + "add $4,%%eax\n\t" + "movzbl (%%eax),%%eax\n\t" + "add $3,%%eax\n\t" + "shl $2,%%eax\n\t" + "add %%ebp,%%eax\n\t" + "mov %%eax,%0\n\t" + "push %%eax\n\t" + : "=r" (environ) + : //no inputs "" + ); + asm ( + "mov %ebp,%eax\n\t" + "add $8,%eax\n\t" + "push %eax\n\t" + + "mov %ebp,%eax\n\t" + "add $4,%eax\n\t" + "movzbl (%eax),%eax\n\t" + "push %eax\n\t" + + "call main\n\t" + + "push %eax\n\t" + "call _exit\n\t" + "hlt \n\t" + ); +} diff --git a/sysa/mes-0.22/lib/freebsd/x86-mes-gcc/exit-42.S b/sysa/mes-0.22/lib/freebsd/x86-mes-gcc/exit-42.S new file mode 100644 index 0000000..503186d --- /dev/null +++ b/sysa/mes-0.22/lib/freebsd/x86-mes-gcc/exit-42.S @@ -0,0 +1,47 @@ +/* + * GNU Mes --- Maxwell Equations of Software + * Copyright © 2019 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ + +/** Commentary: */ + +/* Using gdb, esp. GUD in GNU Emacs is recommended +M-x gdb-display-disassembly-buffer +M-x gdb-display-io-buffer +set disassemble-next-line on +break _start +run +info registers +si +p/x $eax +RET +... +*/ + +/** Code: */ + +SYS_exit = 1 /* FreeBSD syscall: exit. */ + .globl _start /* Magic linker symbol: --entry-address. */ + + .text /* Program text. */ +_start: + mov $SYS_exit,%eax /* System call function: exit, in %eax. */ + push $42 /* Push first parameter: exit status. */ + push $00 /* Push ??. */ + int $0x80 /* Call system. */ + hlt /* Should not be reached. */ diff --git a/sysa/mes-0.22/lib/freebsd/x86-mes-gcc/hello-mes.S b/sysa/mes-0.22/lib/freebsd/x86-mes-gcc/hello-mes.S new file mode 100644 index 0000000..154babe --- /dev/null +++ b/sysa/mes-0.22/lib/freebsd/x86-mes-gcc/hello-mes.S @@ -0,0 +1,60 @@ +/* + * GNU Mes --- Maxwell Equations of Software + * Copyright © 2019 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ + +/** Commentary: */ + +/* Using gdb, esp. GUD in GNU Emacs is recommended +M-x gdb-display-disassembly-buffer +M-x gdb-display-io-buffer +set disassemble-next-line on +break _start +run +info registers +si +p/x $eax +RET +... +*/ + +/** Code: */ + +SYS_exit = 1 /* Linux syscalls. */ +SYS_write = 4 +stdout = 1 /* File discriptor */ + .globl _start /* Magic linker symbol: --entry-address. */ + + .text /* Program text. */ +_start: + mov $SYS_write,%eax /* System call function: write, in %eax. */ + push $(bye-hello) /* 3rd parameter: byte count. */ + push $hello /* 2nd parameter: address. */ + push $stdout /* 1st parameter: file descriptor. */ + push $0 /* ?? */ + int $0x80 /* Call system. */ + + mov $SYS_exit,%eax /* System call function: exit, in %eax. */ + push $0 /* 1st parameter: exit status. */ + push $0 /* ?? */ + int $0x80 /* Call system. */ + hlt /* Should not be reached. */ + + .data +hello: .ascii "Hello, GNU Mes!\n" +bye: .byte 0 diff --git a/sysa/mes-0.22/lib/freebsd/x86-mes-gcc/mini.c b/sysa/mes-0.22/lib/freebsd/x86-mes-gcc/mini.c new file mode 100644 index 0000000..7978ee2 --- /dev/null +++ b/sysa/mes-0.22/lib/freebsd/x86-mes-gcc/mini.c @@ -0,0 +1,64 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + * Copyright © 2016,2017,2019 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ + +#include "mes/lib-mini.h" + +#define SYS_exit "0x01" +#define SYS_write "0x04" + +// *INDENT-OFF* +void +_exit (int code) +{ + asm ( + "mov $"SYS_exit",%%eax\n\t" + "mov %0,%%ebx\n\t" + "push %%ebx\n\t" + "push %%ebx\n\t" + "int $0x80\n\t" + : // no outputs "=" (r) + : "rm" (code) + : "eax", "ebx" + ); + // not reached + _exit (0); +} + +ssize_t +_write (int filedes, void const *buffer, size_t size) +{ + long r; + asm ( + "mov $"SYS_write",%%eax\n\t" + "mov %3,%%edx\n\t" + "push %%edx\n\t" + "mov %2,%%ecx\n\t" + "push %%ecx\n\t" + "mov %1,%%ebx\n\t" + "push %%ebx\n\t" + "push %%ebx\n\t" + "int $0x80\n\t" + "mov %%eax,%0\n\t" + : "=r" (r) + : "rm" (filedes), "rm" (buffer), "rm" (size) + : "eax", "ebx", "ecx", "edx" + ); + return r; +} diff --git a/sysa/mes-0.22/lib/freebsd/x86-mes-mescc/crt1.c b/sysa/mes-0.22/lib/freebsd/x86-mes-mescc/crt1.c new file mode 100644 index 0000000..0e92ad3 --- /dev/null +++ b/sysa/mes-0.22/lib/freebsd/x86-mes-mescc/crt1.c @@ -0,0 +1,65 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + * Copyright © 2017,2018,2019 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ + +#include "mes/lib-mini.h" + +int main (int argc, char *argv[], char *envp[]); + +int +_start () +{ + asm ("mov____$i8,%eax !0"); + asm ("mov____%eax,0x32 &__stdin"); + + asm ("mov____$i8,%eax !1"); + asm ("mov____%eax,0x32 &__stdout"); + + asm ("mov____$i8,%eax !2"); + asm ("mov____%eax,0x32 &__stderr"); + + 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 &environ"); + asm ("push___%eax"); + + 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 ("push___%ebx"); + asm ("push___%ebx"); + asm ("int____$0x80"); + asm ("hlt"); +} diff --git a/sysa/mes-0.22/lib/freebsd/x86-mes-mescc/mini.c b/sysa/mes-0.22/lib/freebsd/x86-mes-mescc/mini.c new file mode 100644 index 0000000..7756a7a --- /dev/null +++ b/sysa/mes-0.22/lib/freebsd/x86-mes-mescc/mini.c @@ -0,0 +1,43 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + * Copyright © 2016,2017,2019 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ + +void +_exit () +{ + asm ("mov____$i32,%eax SYS_exit"); + asm ("mov____0x8(%ebp),%ebx !8"); + asm ("push___%ebx"); + asm ("push___%ebx"); + asm ("int____$0x80"); +} + +void +_write () +{ + asm ("mov____$i32,%eax SYS_write"); + asm ("mov____0x8(%ebp),%edx !16"); + asm ("push___%edx"); + asm ("mov____0x8(%ebp),%ecx !12"); + asm ("push___%ecx"); + asm ("mov____0x8(%ebp),%ebx !8"); + asm ("push___%ebx"); + asm ("push___%ebx"); + asm ("int____$0x80"); +} diff --git a/sysa/mes-0.22/lib/freebsd/x86-mes/elf32-0exit-42.hex2 b/sysa/mes-0.22/lib/freebsd/x86-mes/elf32-0exit-42.hex2 new file mode 100644 index 0000000..b00bc38 --- /dev/null +++ b/sysa/mes-0.22/lib/freebsd/x86-mes/elf32-0exit-42.hex2 @@ -0,0 +1,39 @@ +### GNU Mes --- Maxwell Equations of Software +### Copyright © 2017,2019 Jan (janneke) Nieuwenhuizen +### +### This file is part of GNU Mes. +### +### GNU Mes is free software; you can redistribute it and/or modify it +### under the terms of the GNU General Public License as published by +### the Free Software Foundation; either version 3 of the License, or (at +### your option) any later version. +### +### GNU Mes is distributed in the hope that it will be useful, but +### WITHOUT ANY WARRANTY; without even the implied warranty of +### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +### GNU General Public License for more details. +### +### You should have received a copy of the GNU General Public License +### along with GNU Mes. If not, see . + +### Commentary: + +# elf32-exit-42.hex2: `exit 42' for i686-freebsd written in hex2 assembly, +# for usage with elf32-0header.hex2. This produces a 112-byte binary +# (70 hex). Inspiration was taken from GNU Gcc output of exit-42.S. + +### Code: + +# DEFINE SYS_exit 1 + +# @60 +:ELF_text +b8 01 00 00 00 # mov SYS_exit,%eax +68 2a 00 00 00 # push $42 +68 00 00 00 00 # push $00 +cd 80 # int $0x80 +f4 # hlt + + 00 00 00 00 00 00 # align to @80 +00 00 00 00 00 00 00 00 +:ELF_end diff --git a/sysa/mes-0.22/lib/freebsd/x86-mes/elf32-0header.hex2 b/sysa/mes-0.22/lib/freebsd/x86-mes/elf32-0header.hex2 new file mode 100644 index 0000000..542fa55 --- /dev/null +++ b/sysa/mes-0.22/lib/freebsd/x86-mes/elf32-0header.hex2 @@ -0,0 +1,85 @@ +### Copyright (C) 2016 Jeremiah Orians +### Copyright (C) 2017,2019 Jan (janneke) Nieuwenhuizen +### +### This file is part of GNU Mes. +### +### GNU Mes is free software; you can redistribute it and/or modify it +### under the terms of the GNU General Public License as published by +### the Free Software Foundation; either version 3 of the License, or (at +### your option) any later version. +### +### GNU Mes is distributed in the hope that it will be useful, but +### WITHOUT ANY WARRANTY; without even the implied warranty of +### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +### GNU General Public License for more details. +### +### You should have received a copy of the GNU General Public License +### along with GNU Mes. If not, see . + +### Commentary: + +# elf32-0header.hex2: Simplest 32 bit elf header in hex2. Only a text +# segment, no data segment, no symbol tables. + +# stage0's hex2 format for x86 +# !