From 3f8da92bc857c1d7c3f9397facf2863914da82d0 Mon Sep 17 00:00:00 2001 From: Poul-Henning Kamp Date: Tue, 10 Sep 1996 19:50:23 +0000 Subject: [PATCH] Add -c flag to fmt to center lines. --- usr.bin/fmt/fmt.1 | 6 ++++++ usr.bin/fmt/fmt.c | 27 +++++++++++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/usr.bin/fmt/fmt.1 b/usr.bin/fmt/fmt.1 index 4c76cc750b06..791939fb0e1f 100644 --- a/usr.bin/fmt/fmt.1 +++ b/usr.bin/fmt/fmt.1 @@ -39,6 +39,7 @@ .Nd simple text formatter .Sh SYNOPSIS .Nm fmt +.Fl c .Oo .Ar goal .Op Ar maximum @@ -58,6 +59,11 @@ to 65 and the maximum to 75. The spacing at the beginning of the input lines is preserved in the output, as are blank lines and interword spacing. .Pp +.Fl c +instructs +.Nm fmt +to center the text. +.Pp .Nm Fmt is meant to format mail messages prior to sending, but may also be useful for other simple tasks. diff --git a/usr.bin/fmt/fmt.c b/usr.bin/fmt/fmt.c index 4bd1a7f76b27..fdaceba922ba 100644 --- a/usr.bin/fmt/fmt.c +++ b/usr.bin/fmt/fmt.c @@ -68,6 +68,7 @@ int max_length; /* Max line length in output */ int pfx; /* Current leading blank count */ int lineno; /* Current input line */ int mark; /* Last place we saw a head line */ +int center; char *malloc(); /* for lint . . . */ char *headnames[] = {"To", "Subject", "Cc", 0}; @@ -96,6 +97,11 @@ main(argc, argv) /* * LIZ@UOM 6/18/85 -- Check for goal and max length arguments */ + if (argc > 1 && !strcmp(argv[1], "-c")) { + center++; + argc--; + argv++; + } if (argc > 1 && (1 == (sscanf(argv[1], "%d", &number)))) { argv++; argc--; @@ -143,6 +149,27 @@ fmt(fi) #define CHUNKSIZE 1024 static int lbufsize = 0, cbufsize = 0; + if (center) { + linebuf = malloc(BUFSIZ); + while (1) { + cp = fgets(linebuf, BUFSIZ, fi); + if (!cp) + return; + while (*cp && isspace(*cp)) + cp++; + cp2 = cp + strlen(cp) - 1; + while (cp2 > cp && isspace(*cp2)) + cp2--; + if (cp == cp2) + putchar('\n'); + col = cp2 - cp; + for (c = 0; c < (goal_length-col)/2; c++) + putchar(' '); + while (cp <= cp2) + putchar(*cp++); + putchar('\n'); + } + } c = getc(fi); while (c != EOF) { /*