Old UNIX V6 ed, lightly ported to modern systems. The old UNIX version of 'ed', the line editor. This is intended to be for academic interest more than anything and perhaps shouldn't be used for any serious editing of system files etc. You have been warned! :) The binary is named 'ed-v6' so as not to clobber gnu ed. There are some major differences between this and POSIX ed (see the notes at the end for more info.) NOTE: The linked sources are redistributed on github with no associated license. OPTIONS Build a 32 bit binary on x86_64 (Multilib needed): M32=yes Build a static binary (size is ~ 800k vs. ~ 18k for the dynamic): STATIC=yes DEVELOPER'S NOTES 1. compile with a K&R compiler (not even ansified); replacing =+ with += and using "=" for default assignment 2. assume 32-bits or better (ldiv and ldivr, increasing the sbrk to 4096) 3. use setjmp+longjmp instead of sysexit+reset 4. use lseek() instead of seek() (although still assumes 512 bytes) 5. copies the tempfilename to work on systems without writable strings 6. use SIG_IGN instead of the numeric value "1" 7. remove the goto errlab since that doesn't work in ANSI C 8. commented out getpid() in favor of a local copy 9. renamed unix() to run_unix() because some systems (at least some linux) annoyingly do a -Dunix=1 10. use sizeof(buf) instead of buf 11. renamed putchar() to putc() because gcc and clang generate errors if you create a function called putchar() with a different signature. 12. added a prototype for errfunc() because clang refuses to honor `-ansi` I've tried to keep these modifications as minimal as possible in an effort to preserve the editor that I learned unix on. `ed.c.orig` is included so you can verify how minimal my changes were. MAINTAINER'S NOTES Compilation: Added -D_XOPEN_SOURCE=500 to compile with fcntl.h in glibc-2.23. Manual page: If you are unfamiliar with ed then gnu ed has a very good info page. This is the closest I can find to the original man page: https://freebsd.org/cgi/man.cgi?query=ed&manpath=Unix+Seventh+Edition Among other things, there is no -p option, single , or ; will throw errors, no G//, and r does not support shell commands. H and h are also unsupported, so errors will lack any explanation. Using with rlwrap: This does work with rlwrap, however it repeats every command. This doesn't affect the functionality, but it can look quite confusing to have everything repeated.