264 lines
9.4 KiB
Text
264 lines
9.4 KiB
Text
Cawf - nroff-like text formatter
|
|
|
|
Cawf is a C version of awf, Henry Spencer's Amazingly Workable (text)
|
|
Formatter. (Awf is written in awk and appears in comp.sources.unix,
|
|
Volume 23, Issue 27.) Cawf and awf provide a usable subset of raw nroff
|
|
capabilities and the styles of the man(7), me(7) and ms(7) macro sets.
|
|
One of cawf's virtues is that it will run on PC clones under MS-DOS. It
|
|
is also, like awf, totally independent of any licensed Unix source code.
|
|
|
|
This distribution contains complete source, make files for Unix and
|
|
MS-DOS, documentation (raw and formatted) and MS-DOS executables for cawf
|
|
and a companion output filters, bsfilt.
|
|
|
|
This is the fourth distribution of cawf. Changes include:
|
|
|
|
* Some rudimentary output device support has been added, via a device
|
|
configuration file.
|
|
|
|
* The code has been converted to use unsigned characters.
|
|
|
|
* An attempt has been made to make the code ANSI C compliant.
|
|
|
|
* The following bugs have been fixed:
|
|
|
|
A bug in the locating of the device file has been corrected,
|
|
so that the code performs as documented.
|
|
|
|
Null macro arguments are ignored.
|
|
|
|
Some unused arguments to local functions have been more
|
|
carefully type cast to avoid portability problems.
|
|
|
|
* The .fl and .rn requests are now supported.
|
|
|
|
* Limited support has been added for the non-break request control
|
|
character, the acute accent (').
|
|
|
|
* Argument count conditionals -- operating on \n(.$ -- may now use
|
|
the >= and <= operators in addition to [<=>].
|
|
|
|
* Macros may be terminated with "..", ".", "''" or "'".
|
|
|
|
* String interpolation is performed if it is specified at the start
|
|
of the .ds request argument.
|
|
|
|
* The .tr request has been enhanced to handle named characters and
|
|
string interpolation.
|
|
|
|
* The SS macro is now included in man.mac.
|
|
|
|
* The cawf version number is now displayed in the help output.
|
|
|
|
* A limited -me macro set is included in me.mac.
|
|
|
|
Changes to cawf to run under Minix:
|
|
|
|
* The DOS binaries and make files have been removed.
|
|
|
|
* Tabs stops changed from per 5 to per 8.
|
|
|
|
* Bold and underline as it should be in device.cf.
|
|
|
|
* Added .SB and .TA to man.mac.
|
|
|
|
* Numerous prototypes added.
|
|
|
|
|
|
CONTENTS
|
|
--------
|
|
|
|
This Minix distribution of cawf includes:
|
|
|
|
README this file
|
|
*.c and *.h source files to build cawf and bsfilt (bsfilt
|
|
removes Backspaces from cawf output)
|
|
bsfilt.1 nroff source for the bsfilt manual page
|
|
cawf.1 nroff source for the cawf manual page
|
|
common initialization file for CAWFLIB library
|
|
device.cf output device configuration file for CAWFLIB
|
|
library
|
|
dumb.dev device description file for CAWFLIB library
|
|
Makefile Unix-style make file
|
|
man.mac man(7) macros for CAWFLIB library
|
|
me.mac me(7) macros for CAWFLIB library
|
|
ms.mac ms(7) macros for CAWFLIB library
|
|
diffs Minix patches
|
|
#ifdef PUTTING_IT_ON_THE_NET
|
|
cawf
|
|
bsfilt binaries compiled under Minix-PC 1.5 using the ACK
|
|
ANSI C compiler using software floating point
|
|
#endif
|
|
|
|
|
|
LIBRARY
|
|
-------
|
|
|
|
To use cawf, you must select a location for the CAWFLIB library files. The
|
|
distributed cawf binary expects to find them in /usr/local/lib/cawf but you
|
|
can alter that with the CAWFLIB environment variable, or you can change the
|
|
CAWFLIB #define in cawf.h and rebuild cawf from the sources.
|
|
|
|
CAWFLIB contains a minimum of six files:
|
|
|
|
common common raw nroff commands to get cawf started
|
|
dumb.dev a set of character definitions for a plain, "dumb"
|
|
ASCII device - e. g., the console display, a CRT or
|
|
a basic line printer
|
|
device.cf the output device configuration file
|
|
man.mac the man(7) macros
|
|
me.mac the me(7) macros
|
|
ms.mac the ms(7) macros
|
|
|
|
You may want to add your own macro files to the library. Just name them
|
|
"m[your-name].mac", following the usual nroff naming convention for macro
|
|
files.
|
|
|
|
If you have fancy output devices with special character specifications, you
|
|
may want to generate new *.dev files for them. Follow the format of dumb.dev
|
|
in making new character specifications. To define characters for a new
|
|
device, select a name prefix for it and create a file in CAWFLIB with the
|
|
name "<prefix>.dev". To use the new file, set the TERM environment variable
|
|
to <prefix> - e. g., when I test cawf on Unix, I need a vt100.dev, because
|
|
my TERM environment variable value is usually vt100. All I do is make
|
|
vt100.dev a symbolic link to dumb.dev. Even that isn't even necessary,
|
|
because cawf will use dumb.dev if it can't find TERM.dev.
|
|
|
|
In addition to the character specifications possible through the *.dev files,
|
|
cawf provides one-time font selection and bold or italic face support for
|
|
output devices via its -d and -f options. Cawf can be directed to issue
|
|
specific device codes for bold and italic characters, and one font can be
|
|
specified for the entire document. Cawf has some built-in output device
|
|
support, and addition support is contained in the device configuration file,
|
|
device.cf. Additional devices may be defined in device.cf.
|
|
|
|
It is not necessary to generate a new *.dev file for each output device
|
|
definition. Only when you need special character definitions do you need to
|
|
create a *.dev file. The dumb.dev file is adequate for most devices you
|
|
define in device.cf.
|
|
|
|
|
|
SOURCES
|
|
-------
|
|
|
|
The Unix make file has some definitions that help tune it to the local
|
|
Unix environment:
|
|
|
|
CAWFLIB is a string that can be used in lieu of changes
|
|
to cawf.h's CWFLIB #define.
|
|
|
|
MALLOCH is a string that should be defined when a UNIX
|
|
environment has a <malloc.h>, unless it also has a
|
|
<stdlib.h> with protoypes for malloc() and its
|
|
relatives. In the latter case, you should define
|
|
STDLIB, but you don't need to define MALLOCH.
|
|
|
|
STDLIB indicates that standard library function prototype
|
|
definitions may be found in <stdlib.h>.
|
|
|
|
STDLIB must be defined for MS-DOS Quick C.
|
|
|
|
If STDLIB is not defined, the cawf sources try to
|
|
define their own library function return values.
|
|
|
|
__STR__ The definition of this string must be deleted when
|
|
using the xlc 1.2 compiler on the RISC/System 6000
|
|
under AIX 3.2. Put
|
|
|
|
-U__STR__
|
|
|
|
in the Makefile DEFS string. This must be done
|
|
because the xlc 1.2 compiler does not correctly inline
|
|
string functions when compiling pass3.c.
|
|
|
|
UNIX switches the build environment to Unix. You may also
|
|
have to decide about MALLOCH, STDLIB, __STR__ and USG
|
|
when you define UNIX.
|
|
|
|
Do not define UNIX for MS-DOS Quick-C; do define
|
|
STDLIB.
|
|
|
|
USG adjusts for System V. (UNIX must also be defined.)
|
|
|
|
You may also need to define USG to select the proper
|
|
header file for string function prototypes. If UNIX
|
|
and USG are defined, "proto.h" selects <string.h>;
|
|
if only UNIX, <strings.h>. Cawf needs the more
|
|
complete set of definitions, including strchr() and
|
|
strrchr(). If <string.h> #includes <strings.h>, as
|
|
is sometimes the case, define only UNIX.
|
|
|
|
I have built and tested cawf in the UNIX context under AIX 3.2 (see the
|
|
note above on __STR__), BSD4.3-Tahoe, Sequent DYNIX, ETAV (SYSV 3.0),
|
|
NeXTStep 3.0, SunOS 4.1.1 and Ultrix 2.2. If you build under another Unix
|
|
variant, you may have to adjust the source code, header files and Makefile
|
|
to fit. Check the Makefile first for hints.
|
|
|
|
|
|
ANSI C COMPLIANCE
|
|
-----------------
|
|
|
|
Some effort has been devoted to making the cawf sources ANSI C compliant.
|
|
The header file proto.h contains function prototypes that enable ANSI C
|
|
argument checking. The state of definition of the __STDC__ symbol is used
|
|
to select options that depend on strict adherence to the ANSI C standard --
|
|
e.g., the need for the isascii() test before islower() or isupper(). If
|
|
your ANSI compiler doesn't define this variable when it's acting in strict
|
|
ANSI C mode, you may have to define it in the Makefile.
|
|
|
|
|
|
MS-DOS CONSIDERATIONS
|
|
---------------------
|
|
|
|
The MS-DOS version of cawf was created to run under the KornShell of the
|
|
Mortis Kern Systems Toolkit. One ramification of using MKS' ksh is that it
|
|
supports the separate standard error and standard output streams. Hence,
|
|
cawf blithely distributes its error messages to the standard error file, and
|
|
assumes the user's shell is capable of separating them from standard output.
|
|
|
|
If you don't use the MKS KornShell, but do want to separate the output
|
|
streams, you'll have to modify the cawf source code. As a rudimentary aid,
|
|
cawf uses a separate stream pointer, Efs, for writing error output, but sets
|
|
it to stderr. You can change that process to open a separate error file and
|
|
set Efs to point to it.
|
|
|
|
|
|
COPYRIGHTS AND CREDITS
|
|
----------------------
|
|
|
|
The sources are copyrighted, but freely distributable under usual terms -
|
|
retention of credit, etc.
|
|
|
|
Please acknowledge:
|
|
|
|
AT&T for their public-domain release of getopt(3) at the 1985
|
|
UNIFORUM conference;
|
|
|
|
Chet Creider, Bob Hardy and Ted Campbell for their contributions
|
|
to font filtering;
|
|
|
|
Henry Spencer for awf and his regular expression package;
|
|
|
|
Andy Tanenbaum for his help in ANSI C compliance, including his
|
|
ansi.h header file from Minix.
|
|
|
|
Henry says about awf, "I can't believe I really wrote this." Those are
|
|
my sentiments exactly about cawf, but I also understand that necessity
|
|
sometimes forces us to do what we would prefer to avoid.
|
|
|
|
|
|
BUGS AND ENHANCEMENTS
|
|
---------------------
|
|
|
|
I'll be glad to hear about bugs and needs for enhancements, but make no
|
|
promises about delivering fixes or upgrades in response.
|
|
|
|
Vic Abell <abe@cc.purdue.edu>
|
|
24 November 1992
|
|
|
|
|
|
MINIX SPECIFIC TINKERING
|
|
------------------------
|
|
|
|
Kees J. Bot <kjb@cs.vu.nl>
|
|
26 November 1992
|