FRIGN fc886aa144 Implement od(1) v-flag
If this flag is not given, od(1) automatically replaces duplicate
adjacent lines with an '*' for each reoccurence.
If this flag is set, thus, no such filtering occurs.

In this case this would mean having to somehow keep the last printed
line in some backbuffer, building the next line and then doing the
necessary comparisons. This basically means that we duplicate the
functionality provided with uniq(1).

So instead of

$ od -t a > dump

you'd rather do

$ od -t a | uniq -f 1 -c > dump

Skipping the first field is necessary, as the addresses obviously differ.

Now, I was thinking hard why this flag even exists. If POSIX mandated
to add the address before the asterisk, so we know the offset of duplicate
occurrences, this would make sense. However, this is not the case.

Using uniq(1) also gives nicer output:
~ $ echo "111111111111111111111111111111111111111111111111" | od -t a -v | uniq -f 1 -c
      3 0000000   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1
      1 0000060  nl
      1 0000061

in comparison to

$ echo "111111111111111111111111111111111111111111111111" | od -t a
0000000   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1
*
0000060  nl
0000061

Before working on od(1), I didn't even know it would filter out
duplicate adjacent lines like that. This is also a matter of
predictability.

Concluding, the v-flag is implicitly set and users urged to just
use the existing tools provided by the system.
I don't think we would break scripts either. Firstly, it's rather
unlikely to have duplicate lines exactly matching the line-length of
od(1). Secondly, even if a script did that specifically, in the worst
case there would be a counting error or something.

Given od(1) is mostly used interactively, we can safely assume this
feature is for the benefit of the users.

Ditch this legacy POSIX crap!
 Please enter the commit message for your changes. Lines starting
2015-09-30 19:44:10 +01:00
2015-02-23 20:36:47 +01:00
2015-07-10 16:45:52 +02:00
2015-03-27 17:25:22 +01:00
2015-03-27 17:25:22 +01:00
2015-03-27 17:25:22 +01:00
2015-05-26 16:41:43 +01:00
2015-03-27 17:25:22 +01:00
2015-04-20 11:12:40 +01:00
2015-03-27 17:25:22 +01:00
2015-04-20 11:12:40 +01:00
2015-03-27 17:25:22 +01:00
2015-04-20 11:12:40 +01:00
2015-01-31 23:54:51 +01:00
2015-03-27 17:25:22 +01:00
2015-03-27 17:25:22 +01:00
2015-05-26 16:41:43 +01:00
2015-03-08 19:49:59 +01:00
2015-05-26 16:41:43 +01:00
2015-03-27 17:25:22 +01:00
2014-11-17 15:46:28 +00:00
2015-09-03 19:17:59 +01:00
2015-03-27 17:25:22 +01:00
2015-02-06 15:43:23 +01:00
2015-03-27 14:49:48 +01:00
2015-03-27 17:25:22 +01:00
2015-08-04 12:08:13 +01:00
2015-03-27 17:25:22 +01:00
2015-03-27 17:25:22 +01:00
2015-03-27 17:25:22 +01:00
2015-04-29 22:25:03 +01:00
2015-03-27 17:25:22 +01:00
2015-03-27 17:25:22 +01:00
2015-03-27 17:25:22 +01:00
2015-05-26 16:41:43 +01:00
2015-03-27 17:25:22 +01:00
2015-05-26 16:41:43 +01:00
2015-03-27 17:25:22 +01:00
2014-10-03 00:03:08 +01:00
2015-03-27 17:25:22 +01:00
2015-05-26 16:41:43 +01:00
2015-04-20 11:12:40 +01:00
2015-03-27 17:25:22 +01:00
2015-05-26 16:41:43 +01:00
2015-03-27 17:25:22 +01:00
2015-05-26 16:41:43 +01:00
2015-02-28 21:22:55 +01:00
2015-05-05 10:53:42 +01:00
2015-07-23 11:51:05 +01:00
2015-03-27 17:25:22 +01:00
2015-03-27 17:25:22 +01:00
2015-03-27 17:25:22 +01:00
2015-06-07 09:09:42 +01:00
2015-03-27 17:25:22 +01:00
2015-03-27 17:25:22 +01:00
2015-03-27 17:25:22 +01:00
2015-09-30 19:44:10 +01:00
2015-09-30 19:44:10 +01:00
2015-05-26 16:41:43 +01:00
2015-03-27 17:25:22 +01:00
2015-04-20 18:04:08 +01:00
2015-03-27 17:25:22 +01:00
2015-03-02 17:25:29 +01:00
2015-05-10 12:58:38 +01:00
2015-05-10 12:58:38 +01:00
2015-03-27 17:25:22 +01:00
2015-04-20 11:12:40 +01:00
2015-03-27 17:25:22 +01:00
2015-03-27 17:25:22 +01:00
2015-05-26 16:41:43 +01:00
2015-03-27 17:25:22 +01:00
2015-09-30 19:44:10 +01:00
2015-09-30 19:44:10 +01:00
2015-03-27 17:25:22 +01:00
2015-05-26 16:41:43 +01:00
2015-02-01 00:23:38 +01:00
2015-03-27 17:25:22 +01:00
2015-06-22 20:03:55 +01:00
2015-03-27 17:25:22 +01:00
2014-11-16 12:39:15 +00:00
2015-03-20 22:14:31 +01:00
2015-06-04 23:54:09 +01:00
2015-09-30 19:44:10 +01:00
2015-03-27 17:25:22 +01:00
2015-03-17 22:15:09 +01:00
2015-03-27 17:25:22 +01:00
2015-04-20 11:12:40 +01:00
2015-03-27 17:25:22 +01:00
2015-03-02 16:24:08 +01:00
2015-08-14 13:11:16 +01:00
2015-09-30 19:44:10 +01:00
2015-03-20 16:05:31 +01:00
2015-02-01 00:47:32 +01:00
2015-05-26 16:41:43 +01:00
2013-07-20 13:20:16 -04:00
2015-05-26 16:41:43 +01:00
2013-08-04 11:00:34 -04:00
2015-05-26 16:41:43 +01:00
2015-03-27 17:25:22 +01:00
2015-03-22 23:39:48 +01:00
2015-08-04 12:08:13 +01:00
2015-03-27 17:25:22 +01:00
2015-05-26 16:41:43 +01:00
2015-02-08 22:17:21 +01:00
2015-05-26 16:41:43 +01:00
2015-03-27 17:25:22 +01:00
2015-05-26 16:41:43 +01:00
2015-02-08 22:08:14 +01:00
2015-03-27 17:25:22 +01:00
2015-03-27 17:25:22 +01:00
2015-05-26 16:41:43 +01:00
2015-03-27 17:25:22 +01:00
2015-03-17 23:35:11 +01:00
2015-03-27 17:25:22 +01:00
2015-03-27 17:25:22 +01:00
2015-03-27 17:25:22 +01:00
2015-05-26 16:41:43 +01:00
2015-03-27 17:25:22 +01:00
2014-10-03 00:03:08 +01:00
2015-03-27 17:25:22 +01:00
2015-03-27 17:25:22 +01:00
2015-04-21 18:00:47 +01:00
2015-03-27 17:25:22 +01:00
2015-05-26 16:41:43 +01:00
2015-03-27 17:25:22 +01:00
2015-05-26 16:41:43 +01:00
2015-03-27 17:25:22 +01:00
2015-09-30 19:44:10 +01:00
2015-03-27 17:25:22 +01:00
2015-05-26 16:41:43 +01:00
2015-03-27 17:25:22 +01:00
2015-05-26 16:41:43 +01:00
2015-03-27 17:25:22 +01:00
2015-05-26 16:41:43 +01:00
2015-04-27 19:33:57 +01:00
2015-04-27 19:33:57 +01:00
2015-03-27 17:25:22 +01:00
2015-05-26 16:41:43 +01: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:

'#'  -> UTF-8 support, '=' -> Implicit UTF-8 support, '*' -> Finished,
'|'  -> Audited,       'o' -> POSIX 2013 compliant,   'x' -> Non-POSIX,
'()' -> Petty flag

     UTILITY     MISSING
     -------     -------
=*|o basename    .
=*|o cal         .
=*|o cat         .
=*|o chgrp       .
=*|o chmod       .
=*|o chown       .
=*|x chroot      .
=*|o cksum       .
=*|o cmp         .
#*|x cols        .
=*|o comm        .
=*|o cp          (-i)
=*|x cron        .
#*|o cut         .
=*|o date        .
=*|o dirname     .
=*|o du          .
=*|o echo        .
=*|o env         .
#*|o expand      .
#*|o expr        .
=*|o false       .
=    find        .
#*|o fold        .
=* o grep        .
=*|o head        .
=*|x hostname    .
=* o join        .
=*|o kill        .
=*|o link        .
=*|o ln          .
=*|o logger      .
=*|o logname     .
#* o ls          (-C, -k, -m, -p, -s, -x)
=*|x md5sum      .
=*|o mkdir       .
=*|o mkfifo      .
=*|x mktemp      .
=*|o mv          (-i)
=*|o nice        .
#*|o nl          .
=*|o nohup       .
     od          -t
#*|o paste       .
=*|x printenv    .
#*|o printf      .
=*|o pwd         .
=*|x readlink    .
=*|o renice      .
=*|o rm          (-i)
=*|o rmdir       .
#    sed         .
=*|x seq         .
=*|x setsid      .
=*|x sha1sum     .
=*|x sha256sum   .
=*|x sha512sum   .
=*|o sleep       .
#*|o sort        (-d, -f, -i)
=*|o split       .
=*|x sponge      .
#*|o strings     .
=*|x sync        .
=*|o tail        .
=*|x tar         .
=*|o tee         .
=*|o test        .
=* x tftp        .
=*|o time        .
=*|o touch       .
#*|o tr          .
=*|o true        .
=*|o tty         .
=*|o uname       .
#*|o unexpand    .
=*|o uniq        .
=*|o unlink      .
=*|o uudecode    .
=*|o uuencode    .
#*|o wc          .
=*|x which       .
=*|o xargs       (-p)
=*|x 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
--------

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 or run: make sbase-box-install

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%