From af7821da81932a990ecc64a6381a90f3d6eaf5d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20Ankarstr=C3=B6m?= Date: Mon, 12 Jul 2021 17:30:47 +0200 Subject: ce: Rewrite in C The `build' program is available at http://git.ankarstrom.se/build/ --- etc/ce | 28 ---------------------------- etc/ce.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 28 deletions(-) delete mode 100755 etc/ce create mode 100644 etc/ce.c (limited to 'etc') diff --git a/etc/ce b/etc/ce deleted file mode 100755 index c00d1bf..0000000 --- a/etc/ce +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/sh - -# ce -- center text - -usage() { echo usage: $0 [cols] 1>&2; exit 1; } - -[ $# -gt 1 ] && usage - -if [ $# -eq 1 ]; then - cols=${1#-} - [ "$cols" -gt 0 ] || usage - shift -else - cols=`tput cols` - [ "$cols" -le 80 ] || cols=80 -fi - -while read line; do - line=${line## } - line=${line%% } - len=`echo "$line" | wc -c` - max=$(((cols - len) / 2)) - i=0 - while [ $((i++)) -lt $max ]; do - printf ' ' - done - echo "$line" -done diff --git a/etc/ce.c b/etc/ce.c new file mode 100644 index 0000000..c8981bd --- /dev/null +++ b/etc/ce.c @@ -0,0 +1,44 @@ +/* + * ce -- center text + * $ cc -O2 -o ce ce.c + */ + +#include +#include +#include +#include +#include + +#define MAXBUF 255 + +int +main(int argc, char *argv[]) +{ + char *buf; + int cols, i, max; + + if(argc-1 > 1){ + fprintf(stderr, "usage: %s [cols]\n", argv[0]); + return 1; + } + cols = argv[1] ? atoi(argv[1]) : 80; + + if(!(buf = malloc(MAXBUF))) + err(1, "malloc"); + + while(fgets(buf, MAXBUF, stdin)){ + buf[strcspn(buf, "\n")] = 0; + + /* Remove leading and trailing whitespace. */ + for (; *buf; buf++) + if(!isspace(*buf)) break; + for (i = strlen(buf)-1; i >= 0; i--) + if(!isspace(buf[i])) break; + buf[i+1] = 0; + + /* Calculate number of spaces. */ + max = cols/2 + strlen(buf)/2; + + printf("%*s\n", max, buf); + } +} -- cgit v1.2.3