diff options
author | phk <phk@FreeBSD.org> | 1996-09-10 19:50:23 +0000 |
---|---|---|
committer | phk <phk@FreeBSD.org> | 1996-09-10 19:50:23 +0000 |
commit | fe6f3f9eab66e55702832f3ef12d60a0038d3831 (patch) | |
tree | f337c4f7c7c8b59f9208f0b282a129c5dbb58c03 /usr.bin/fmt | |
parent | ccd8fb4fade2750d29484b1533af4b0cf6079582 (diff) | |
download | FreeBSD-src-fe6f3f9eab66e55702832f3ef12d60a0038d3831.zip FreeBSD-src-fe6f3f9eab66e55702832f3ef12d60a0038d3831.tar.gz |
Add -c flag to fmt to center lines.
Diffstat (limited to 'usr.bin/fmt')
-rw-r--r-- | usr.bin/fmt/fmt.1 | 6 | ||||
-rw-r--r-- | usr.bin/fmt/fmt.c | 27 |
2 files changed, 33 insertions, 0 deletions
diff --git a/usr.bin/fmt/fmt.1 b/usr.bin/fmt/fmt.1 index 4c76cc7..791939f 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 4bd1a7f..fdaceba 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) { /* |