FRIGN
a582cb8a2f
Rewrite tr(1) in a sane way
tr(1) always used to be a saddening part of sbase, which was inherently broken and crufted. But to be fair, the POSIX-standard doesn't make it very simple. Given the current version was unfixable and broken by design, I sat down and rewrote tr(1) very close to the concept of set theory and the POSIX-standard with a few exceptions: - UTF-8: not allowed in POSIX, but in my opinion a must. This finally allows you to work with UTF-8 streams without problems or unexpected behaviour. - Equivalence classes: Left out, even GNU coreutils ignore them and depending on LC_COLLATE, which sucks. - Character classes: No experiments or environment-variable-trickery. Just plain definitions derived from the POSIX- standard, working as expected. I tested this thoroughly, but expect problems to show up in some way given the wide range of input this program has to handle. The only thing left on the TODO is to add support for literal expressions ('\n', '\t', '\001', ...) and probably rethinking the way [_*n] is unnecessarily restricted to string2.
sbase - suckless unix tools =========================== sbase is a collection of unix tools that are inherently portable across UNIX and UNIX-like systems. The following tools are implemented: UTILITY POSIX 2008 COMPLIANT MISSING OPTIONS ------- -------------------- --------------- basename cal cat yes none chgrp chmod chown chroot cksum cmp cols comm cp cron cut date dirname du echo env expand expr false fold grep head hostname kill yes none link ln logger yes logname ls md5sum mkdir mkfifo mktemp mv nice nl nohup paste printenv printf pwd readlink renice rm rmdir sleep setsid sort split sponge strings sync tail tar tee test touch tr true tty uudecode uuencode uname unexpand uniq unlink seq sha1sum sha256sum sha512sum wc xargs yes The complement of sbase is ubase[1] which is Linux-specific and provides all the non-portable tools. Together they are intended to form a base system similar to busybox but much smaller and suckless. Building -------- You need GNU make to build sbase on OpenBSD. To build sbase, simply type make. You may have to fiddle with config.mk depending on your system. You can also build sbase-box, which generates a single binary containing all the required tools. You can then symlink the individual tools to sbase-box. Ideally you will want to statically link sbase. If you are on Linux we recommend using musl-libc[2]. Portability ----------- sbase has been compiled on a variety of different operating systems, including Linux, *BSD, OSX, Haiku, Solaris, SCO OpenServer and others. Various combinations of operating systems and architectures have also been built. You can build sbase with gcc, clang, tcc, nwcc and pcc. [1] http://git.suckless.org/ubase/ [2] http://www.musl-libc.org/
Description
Languages
C
79.5%
Roff
16%
Shell
1.9%
Awk
1.3%
Makefile
1.3%