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.
2015-01-10 14:26:30 +00:00
2015-01-10 14:26:30 +00:00
2014-12-08 10:02:56 +00:00
2013-11-25 21:29:20 +00:00
2014-11-21 12:15:45 +00:00
2015-01-07 03:21:12 +00:00
2015-01-07 03:21:12 +00:00
2011-05-23 19:00:31 +01:00
2013-10-20 10:41:32 +01:00
2014-11-19 20:09:29 +00:00
2014-07-21 16:43:54 +01:00
2014-11-19 20:09:29 +00:00
2014-11-19 20:09:29 +00:00
2011-06-10 04:36:40 +01:00
2014-11-14 10:54:30 +00:00
2014-11-21 13:12:36 +00:00
2014-12-08 15:15:12 +00:00
2014-12-08 15:14:08 +00:00
2013-06-19 20:00:10 +02:00
2014-11-17 15:46:28 +00:00
2014-12-08 10:02:56 +00:00
2014-12-08 10:02:56 +00:00
2014-12-16 11:04:18 +00:00
2014-12-16 11:04:07 +00:00
2014-03-23 18:02:39 +00:00
2013-10-08 20:41:32 +01:00
2014-12-18 15:17:48 +00:00
2014-11-13 18:08:43 +00:00
2014-11-13 14:56:34 +00:00
2014-11-13 18:08:43 +00:00
2014-12-22 10:34:29 +00:00
2011-05-23 02:36:34 +01:00
2014-11-14 10:54:20 +00:00
2014-06-09 17:00:33 +01:00
2014-09-29 14:22:59 +01:00
2014-11-17 15:05:49 +00:00
2011-05-23 02:36:34 +01:00
2014-10-03 00:03:08 +01:00
2012-05-25 21:51:24 +01:00
2014-11-18 21:05:28 +00:00
2014-12-08 10:02:56 +00:00
2014-11-21 14:22:33 +00:00
2014-12-16 20:21:56 +00:00
2011-05-26 16:18:42 -01:00
2014-11-20 22:52:05 +00:00
2013-10-05 14:58:55 +01:00
2014-11-13 18:08:43 +00:00
2014-11-23 13:22:55 +00:00
2014-11-14 10:54:20 +00:00
2015-01-02 13:14:41 +00:00
2014-10-17 15:36:16 +01:00
2014-11-13 18:08:43 +00:00
2014-11-23 20:58:15 +00:00
2014-11-23 20:58:15 +00:00
2014-12-16 20:14:40 +00:00
2014-10-17 15:36:27 +01:00
2014-11-13 18:08:43 +00:00
2014-12-22 11:28:20 +00:00
2015-01-10 14:26:30 +00:00
2014-04-12 20:33:33 +01:00
2014-11-17 13:39:11 +00:00
2013-10-05 13:51:45 +01:00
2014-11-19 20:09:29 +00:00
2013-11-30 20:58:15 +00:00
2014-11-13 18:08:43 +00:00
2013-10-05 13:51:45 +01:00
2014-11-14 10:54:20 +00:00
2014-11-17 15:02:51 +00:00
2014-12-04 13:50:15 +00:00
2014-12-04 13:50:15 +00:00
2011-06-18 14:42:06 +01:00
2014-11-19 20:09:29 +00:00
2014-11-16 13:17:06 +00:00
2014-09-29 14:35:35 +01:00
2014-09-28 15:12:15 +01:00
2014-11-23 12:56:19 +00:00
2014-11-19 20:09:29 +00:00
2014-11-16 12:39:15 +00:00
2013-06-16 07:46:01 +02:00
2014-12-16 11:04:07 +00:00
2014-05-06 16:21:56 +01:00
2014-11-19 20:09:29 +00:00
2013-12-12 13:15:47 +00:00
2014-11-14 10:54:20 +00:00
2014-11-19 20:09:29 +00:00
2014-11-14 10:54:20 +00:00
2013-10-05 14:58:55 +01:00
2014-04-12 20:33:33 +01:00
2014-11-17 13:39:11 +00:00
2013-07-20 13:20:16 -04:00
2014-04-12 20:33:33 +01:00
2014-11-17 13:39:11 +00:00
2013-08-04 11:00:34 -04:00
2014-04-12 20:33:33 +01:00
2014-11-17 13:39:11 +00:00
2011-05-25 18:29:46 +01:00
2014-11-13 18:08:43 +00:00
2014-11-23 19:42:14 +00:00
2014-12-16 21:02:03 +00:00
2014-11-19 20:09:29 +00:00
2013-07-02 13:26:24 -04:00
2014-11-16 13:20:36 +00:00
2014-11-13 18:08:43 +00:00
2011-05-27 00:54:10 +01:00
2014-11-20 23:09:42 +00:00
2014-11-14 10:54:20 +00:00
2011-05-23 02:36:34 +01:00
2014-12-16 21:12:00 +00:00
2014-11-14 10:54:20 +00:00
2014-11-18 21:05:28 +00:00
2014-12-21 00:01:58 +00:00
2011-05-26 05:47:58 +01:00
2014-11-19 20:09:29 +00:00
2014-07-16 20:40:54 +01:00
2015-01-10 14:26:30 +00:00
2011-05-23 02:36:34 +01:00
2014-10-03 00:03:08 +01:00
2011-06-02 21:15:35 +01:00
2011-06-02 20:38:48 +01:00
2014-11-14 10:54:20 +00:00
2014-06-09 17:00:13 +01:00
2014-12-22 10:34:29 +00:00
2012-05-21 23:46:22 +00:00
2014-11-18 21:05:28 +00:00
2014-11-19 20:09:29 +00:00
2015-01-10 14:26:30 +00:00
2014-11-18 21:05:28 +00:00
2014-01-31 15:29:11 +00:00
2014-11-13 18:08:43 +00:00
2011-05-24 01:13:34 +01:00
2014-11-14 10:54:20 +00:00
2014-04-12 20:33:33 +01:00
2014-11-19 20:09:29 +00:00
2014-11-13 18:08:43 +00:00

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%