FRIGN 7d3e9c6e88 Resolve escape characters in tr(1)
This is one aspect which I think has blown up the complexity of many
tr-implementations around today.
Instead of complicating the set-theory-based parser itself (he should
still be relying on one rune per char, not multirunes), I added a
preprocessor, which basically scans the code for upcoming '\'s, reads
what he finds, substitutes the real character onto '\'s index and shifts
the entire following array so there are no "holes".

What is left to reflect on is what to do with octal sequences.
I have a local implementation here, which works fine, but imho,
given tr is already so focused on UTF-8, we might as well ignore
POSIX at this point and rather implement the unicode UTF-8 code points,
which are way more contemporary and future-proof.

Reading in \uC3A4 as a an array of 0xC3 and 0xA4 is not the issue,
but I'm still struggling to find a way to turn it into a well-formed
byte sequence. Hit me with a mail if you have a simple solution for
that.
2015-01-15 11:01:52 +00:00
2015-01-10 17:00:01 +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-15 11:01:52 +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%