sbase

suckless unix tools
git clone git://git.2f30.org/sbase.git
Log | Files | Refs | README | LICENSE

commit 198c45ee6df158f678b39c119424ba2b80619952
parent 93043beec9aa39c1f908f025849f50c3cc4a0ea2
Author: FRIGN <dev@frign.de>
Date:   Fri Jun  5 00:27:14 +0200

Remove col(1)

Where should I start? It's a rather irrelevant tool and broken as is.
We'll re-add it as soon as the code has been fixed by the original
author.
Until then, better keep it out or some kids get hurt.

Diffstat:
Makefile | 1-
README | 1-
col.1 | 70----------------------------------------------------------------------
col.c | 225-------------------------------------------------------------------------------
4 files changed, 0 insertions(+), 297 deletions(-)
diff --git a/Makefile b/Makefile @@ -83,7 +83,6 @@ BIN =\ cksum\ cmp\ cols\ - col\ comm\ cp\ cron\ diff --git a/README b/README @@ -22,7 +22,6 @@ The following tools are implemented: =*|o cksum . =*|o cmp . #*|x cols . -#*|x col . =*|o comm . =*|o cp (-i) =*|x cron . diff --git a/col.1 b/col.1 @@ -1,70 +0,0 @@ -.Dd March 22, 2014 -.Dt COL 1 -.Os sbase -.Sh NAME -.Nm col -.Nd filter reverse line-feeds -.Sh SYPNOSIS -.Nm -.Op Fl bfpx -.Op Fl l Ar num -.Sh DESCRIPTION -.Nm -filters all reverse (and half reverse) line feeds, -as produced by -.Xr nroff 1 -with .2C, -.Xr ms 6 -or -.Xr tbl 1 . -The recognized control sequences are: -.Bl -tag -width Ds -.It ESC-7 -Reverse line-feed -.It ESC-8 -Reverse half-line-feed -.It ESC-9 -Forward half-line-feed -.It VT -Vertical-tab -.It SP -Space -.It TAB -Horizontal tab -.It RETURN -Carriage return -.It NL -New line -.El -.Pp -All other control codes and escape sequences are removed. -.Nm -converts all spaces to tabs. -.Sh OPTIONS -.Bl -tag -width Ds -.It Fl p -Print unknown escape sequences. -.It Fl b -Do not print backspaces and instead only print the last -character written to each column position. -.It Fl f -Allow forward half line feeds in the output. -.It Fl x -Do not convert spaces to tabs. -.It Fl l Ar num -Buffer -.Ar num -lines in memory. By default, 128 lines are buffered. -.El -.Sh SEE ALSO -.Xr nroff 1 , -.Xr tbl 1 , -.Xr ms 6 -.Sh BUGS -.Nm -only buffers up to 128 lines with up to 800 bytes per line -if the line-number hasn't been set differently with the -.Op Fl l -flag. -When the number of lines is bigger, the buffer is flushed and -reverse line feeds can not operate on the flushed lines. diff --git a/col.c b/col.c @@ -1,225 +0,0 @@ -/* See LICENSE file for copyright and license details. */ -#include <limits.h> -#include <stdio.h> -#include <stdint.h> -#include <stdlib.h> -#include <string.h> - -#include "utf.h" -#include "util.h" - -#define NLINES 128 -#define NCOLS 800 - -static Rune **buf; - -static int backspace, notabs, halfline, escape; -static size_t nline, ncol, nchar, nspaces, maxline, bs, pagesize = NLINES; - -static void -flush(void) -{ - Rune c; - size_t i, j; - - for (i = 0; i < maxline; ++i) { - for (j = 0; j < NCOLS && (c = buf[i][j]); ++j) - efputrune(&c, stdout, "<stdout>"); - putchar('\n'); - } - bs = nchar = nline = ncol = 0; -} - -static void -forward(size_t n) -{ - size_t lim; - - for (lim = ncol + n; ncol != lim && nchar < NCOLS - 1; ++nchar) { - switch (buf[nline][nchar]) { - case '\b': - --ncol; - break; - case '\0': - buf[nline][nchar] = ' '; - /* FALLTHROUGH */ - default: - ++ncol; - break; - } - } -} - -static void -linefeed(int up, int rcarriage) -{ - size_t oncol = ncol; - - nspaces = 0; - if (up > 0) { - if (nline == pagesize - 1) { - flush(); - } else { - if (++nline > maxline) - maxline = nline; - } - } else if (nline > 0) { - --nline; - } - bs = 0; - if (rcarriage) { - forward(oncol); - nchar = ncol = 0; - } -} - -static void -newchar(Rune c) -{ - Rune *cp; - - forward(nspaces); - nspaces = 0; - - switch (c) { - case ' ': - forward(1); - break; - case '\r': - nchar = ncol = 0; - break; - case '\t': - forward(8 - ncol % 8); - break; - case '\b': - if (ncol > 0) - --ncol; - if (nchar > 0) - --nchar; - bs = 1; - break; - default: - cp = &buf[nline][nchar]; - if (*cp && *cp != ' ' && bs && !backspace && nchar != NCOLS - 3) { - memmove(cp + 3, cp + 1, (NCOLS - nchar - 2) * sizeof(*cp)); - cp[1] = '\b'; - nchar += 2; - } - if (nchar != NCOLS - 1) { - for (cp = buf[nline]; cp < &buf[nline][nchar]; ++cp) { - if (*cp == '\0') - *cp = ' '; - } - buf[nline][nchar++] = c; - ++ncol; - } - bs = 0; - } -} - -static void -col(void) -{ - Rune r; - int ret; - - while (efgetrune(&r, stdin, "<stdin>")) { - switch (r) { - case '\x1b': - ret = efgetrune(&r, stdin, "<stdin>"); - switch (r) { - case '8': /* reverse half-line-feed */ - case '7': /* reverse line-feed */ - linefeed(-1, 0); - continue; - case '9': /* forward half-line-feed */ - if (halfline) - break; - linefeed(1, 0); - continue; - } - if (!escape) - continue; - newchar('\x1b'); - if (ret) - newchar(r); - break; - case '\v': - linefeed(-1, 0); - break; - case ' ': - if (!notabs) { - if (++nspaces != 8) - continue; - r = '\t'; - nspaces = 0; - } - /* FALLTHROUGH */ - case '\r': - case '\b': - case '\t': - newchar(r); - break; - case '\n': - linefeed(1, 1); - break; - default: - if (!iscntrlrune(r)) - newchar(r); - break; - } - } -} - -static void -allocbuf(void) -{ - Rune **bp; - - buf = ereallocarray(NULL, pagesize, sizeof(*buf)); - for (bp = buf; bp < buf + pagesize; ++bp) - *bp = ereallocarray(NULL, NCOLS, sizeof(**buf)); -} - -static void -usage(void) -{ - eprintf("usage: %s [-pbfx] [-l num]\n", argv0); -} - -int -main(int argc, char *argv[]) -{ - int ret = 0; - - ARGBEGIN { - case 'b': - backspace = 1; - break; - case 'f': - halfline = 1; - break; - case 'l': - pagesize = estrtonum(EARGF(usage()), 1, MIN(SIZE_MAX, LLONG_MAX)); - break; - case 'p': - escape = 1; - break; - case 'x': - notabs = 1; - break; - default: - usage(); - } ARGEND; - - if (argc) - usage(); - - allocbuf(); - col(); - flush(); - - ret |= fshut(stdin, "<stdin>") | fshut(stdout, "<stdout>"); - - return ret; -}