| [9] | 1 | Cawf - nroff-like text formatter
 | 
|---|
 | 2 | 
 | 
|---|
 | 3 | Cawf is a C version of awf, Henry Spencer's Amazingly Workable (text)
 | 
|---|
 | 4 | Formatter.  (Awf is written in awk and appears in comp.sources.unix,
 | 
|---|
 | 5 | Volume 23, Issue 27.)  Cawf and awf provide a usable subset of raw nroff
 | 
|---|
 | 6 | capabilities and the styles of the man(7), me(7) and ms(7) macro sets.
 | 
|---|
 | 7 | One of cawf's virtues is that it will run on PC clones under MS-DOS.  It
 | 
|---|
 | 8 | is also, like awf, totally independent of any licensed Unix source code.
 | 
|---|
 | 9 | 
 | 
|---|
 | 10 | This distribution contains complete source, make files for Unix and
 | 
|---|
 | 11 | MS-DOS, documentation (raw and formatted) and MS-DOS executables for cawf
 | 
|---|
 | 12 | and a companion output filters, bsfilt.
 | 
|---|
 | 13 | 
 | 
|---|
 | 14 | This is the fourth distribution of cawf.  Changes include:
 | 
|---|
 | 15 | 
 | 
|---|
 | 16 |         *  Some rudimentary output device support has been added, via a device
 | 
|---|
 | 17 |            configuration file.
 | 
|---|
 | 18 | 
 | 
|---|
 | 19 |         *  The code has been converted to use unsigned characters.
 | 
|---|
 | 20 | 
 | 
|---|
 | 21 |         *  An attempt has been made to make the code ANSI C compliant.
 | 
|---|
 | 22 | 
 | 
|---|
 | 23 |         *  The following bugs have been fixed:
 | 
|---|
 | 24 | 
 | 
|---|
 | 25 |                 A bug in the locating of the device file has been corrected,
 | 
|---|
 | 26 |                 so that the code performs as documented.
 | 
|---|
 | 27 | 
 | 
|---|
 | 28 |                 Null macro arguments are ignored.
 | 
|---|
 | 29 | 
 | 
|---|
 | 30 |                 Some unused arguments to local functions have been more
 | 
|---|
 | 31 |                 carefully type cast to avoid portability problems.
 | 
|---|
 | 32 | 
 | 
|---|
 | 33 |         *  The .fl and .rn requests are now supported.
 | 
|---|
 | 34 | 
 | 
|---|
 | 35 |         *  Limited support has been added for the non-break request control
 | 
|---|
 | 36 |            character, the acute accent (').
 | 
|---|
 | 37 | 
 | 
|---|
 | 38 |         *  Argument count conditionals -- operating on \n(.$ -- may now use
 | 
|---|
 | 39 |            the >= and <= operators in addition to [<=>].
 | 
|---|
 | 40 | 
 | 
|---|
 | 41 |         *  Macros may be terminated with "..", ".", "''" or "'".
 | 
|---|
 | 42 | 
 | 
|---|
 | 43 |         *  String interpolation is performed if it is specified at the start
 | 
|---|
 | 44 |            of the .ds request argument.
 | 
|---|
 | 45 | 
 | 
|---|
 | 46 |         *  The .tr request has been enhanced to handle named characters and
 | 
|---|
 | 47 |            string interpolation.
 | 
|---|
 | 48 | 
 | 
|---|
 | 49 |         *  The SS macro is now included in man.mac.
 | 
|---|
 | 50 | 
 | 
|---|
 | 51 |         *  The cawf version number is now displayed in the help output.
 | 
|---|
 | 52 | 
 | 
|---|
 | 53 |         *  A limited -me macro set is included in me.mac.
 | 
|---|
 | 54 | 
 | 
|---|
 | 55 | Changes to cawf to run under Minix:
 | 
|---|
 | 56 | 
 | 
|---|
 | 57 |         *  The DOS binaries and make files have been removed.
 | 
|---|
 | 58 |  
 | 
|---|
 | 59 |         *  Tabs stops changed from per 5 to per 8.
 | 
|---|
 | 60 | 
 | 
|---|
 | 61 |         *  Bold and underline as it should be in device.cf.
 | 
|---|
 | 62 | 
 | 
|---|
 | 63 |         *  Added .SB and .TA to man.mac.
 | 
|---|
 | 64 | 
 | 
|---|
 | 65 |         *  Numerous prototypes added.
 | 
|---|
 | 66 | 
 | 
|---|
 | 67 | 
 | 
|---|
 | 68 | CONTENTS
 | 
|---|
 | 69 | --------
 | 
|---|
 | 70 | 
 | 
|---|
 | 71 | This Minix distribution of cawf includes:
 | 
|---|
 | 72 | 
 | 
|---|
 | 73 |         README              this file
 | 
|---|
 | 74 |         *.c and *.h         source files to build cawf and bsfilt (bsfilt
 | 
|---|
 | 75 |                             removes Backspaces from cawf output)
 | 
|---|
 | 76 |         bsfilt.1            nroff source for the bsfilt manual page
 | 
|---|
 | 77 |         cawf.1              nroff source for the cawf manual page
 | 
|---|
 | 78 |         common              initialization file for CAWFLIB library
 | 
|---|
 | 79 |         device.cf           output device configuration file for CAWFLIB
 | 
|---|
 | 80 |                             library
 | 
|---|
 | 81 |         dumb.dev            device description file for CAWFLIB library
 | 
|---|
 | 82 |         Makefile            Unix-style make file
 | 
|---|
 | 83 |         man.mac             man(7) macros for CAWFLIB library
 | 
|---|
 | 84 |         me.mac              me(7) macros for CAWFLIB library
 | 
|---|
 | 85 |         ms.mac              ms(7) macros for CAWFLIB library
 | 
|---|
 | 86 |         diffs               Minix patches
 | 
|---|
 | 87 | #ifdef PUTTING_IT_ON_THE_NET
 | 
|---|
 | 88 |         cawf
 | 
|---|
 | 89 |         bsfilt              binaries compiled under Minix-PC 1.5 using the ACK
 | 
|---|
 | 90 |                             ANSI C compiler using software floating point
 | 
|---|
 | 91 | #endif
 | 
|---|
 | 92 | 
 | 
|---|
 | 93 | 
 | 
|---|
 | 94 | LIBRARY
 | 
|---|
 | 95 | -------
 | 
|---|
 | 96 | 
 | 
|---|
 | 97 | To use cawf, you must select a location for the CAWFLIB library files.  The
 | 
|---|
 | 98 | distributed cawf binary expects to find them in /usr/local/lib/cawf but you
 | 
|---|
 | 99 | can alter that with the CAWFLIB environment variable, or you can change the
 | 
|---|
 | 100 | CAWFLIB #define in cawf.h and rebuild cawf from the sources.
 | 
|---|
 | 101 | 
 | 
|---|
 | 102 | CAWFLIB contains a minimum of six files:
 | 
|---|
 | 103 | 
 | 
|---|
 | 104 |         common          common raw nroff commands to get cawf started
 | 
|---|
 | 105 |         dumb.dev        a set of character definitions for a plain, "dumb"
 | 
|---|
 | 106 |                         ASCII device - e. g., the console display, a CRT or
 | 
|---|
 | 107 |                         a basic line printer
 | 
|---|
 | 108 |         device.cf       the output device configuration file
 | 
|---|
 | 109 |         man.mac         the man(7) macros
 | 
|---|
 | 110 |         me.mac          the me(7) macros
 | 
|---|
 | 111 |         ms.mac          the ms(7) macros
 | 
|---|
 | 112 | 
 | 
|---|
 | 113 | You may want to add your own macro files to the library.  Just name them
 | 
|---|
 | 114 | "m[your-name].mac", following the usual nroff naming convention for macro
 | 
|---|
 | 115 | files.
 | 
|---|
 | 116 | 
 | 
|---|
 | 117 | If you have fancy output devices with special character specifications, you
 | 
|---|
 | 118 | may want to generate new *.dev files for them.  Follow the format of dumb.dev
 | 
|---|
 | 119 | in making new character specifications.  To define characters for a new
 | 
|---|
 | 120 | device, select a name prefix for it and create a file in CAWFLIB with the
 | 
|---|
 | 121 | name "<prefix>.dev".  To use the new file, set the TERM environment variable
 | 
|---|
 | 122 | to <prefix> - e. g., when I test cawf on Unix, I need a vt100.dev, because
 | 
|---|
 | 123 | my TERM environment variable value is usually vt100.  All I do is make
 | 
|---|
 | 124 | vt100.dev a symbolic link to dumb.dev.  Even that isn't even necessary,
 | 
|---|
 | 125 | because cawf will use dumb.dev if it can't find TERM.dev.
 | 
|---|
 | 126 | 
 | 
|---|
 | 127 | In addition to the character specifications possible through the *.dev files,
 | 
|---|
 | 128 | cawf provides one-time font selection and bold or italic face support for
 | 
|---|
 | 129 | output devices via its -d and -f options.  Cawf can be directed to issue
 | 
|---|
 | 130 | specific device codes for bold and italic characters, and one font can be
 | 
|---|
 | 131 | specified for the entire document.  Cawf has some built-in output device
 | 
|---|
 | 132 | support, and addition support is contained in the device configuration file,
 | 
|---|
 | 133 | device.cf.  Additional devices may be defined in device.cf.
 | 
|---|
 | 134 | 
 | 
|---|
 | 135 | It is not necessary to generate a new *.dev file for each output device
 | 
|---|
 | 136 | definition.  Only when you need special character definitions do you need to
 | 
|---|
 | 137 | create a *.dev file.  The dumb.dev file is adequate for most devices you 
 | 
|---|
 | 138 | define in device.cf.
 | 
|---|
 | 139 | 
 | 
|---|
 | 140 | 
 | 
|---|
 | 141 | SOURCES
 | 
|---|
 | 142 | -------
 | 
|---|
 | 143 | 
 | 
|---|
 | 144 | The Unix make file has some definitions that help tune it to the local
 | 
|---|
 | 145 | Unix environment:
 | 
|---|
 | 146 | 
 | 
|---|
 | 147 |         CAWFLIB         is a string that can be used in lieu of changes
 | 
|---|
 | 148 |                         to cawf.h's CWFLIB #define.
 | 
|---|
 | 149 | 
 | 
|---|
 | 150 |         MALLOCH         is a string that should be defined when a UNIX
 | 
|---|
 | 151 |                         environment has a <malloc.h>, unless it also has a
 | 
|---|
 | 152 |                         <stdlib.h> with protoypes for malloc() and its
 | 
|---|
 | 153 |                         relatives.  In the latter case, you should define
 | 
|---|
 | 154 |                         STDLIB, but you don't need to define MALLOCH.
 | 
|---|
 | 155 | 
 | 
|---|
 | 156 |         STDLIB          indicates that standard library function prototype
 | 
|---|
 | 157 |                         definitions may be found in <stdlib.h>.
 | 
|---|
 | 158 | 
 | 
|---|
 | 159 |                         STDLIB must be defined for MS-DOS Quick C.
 | 
|---|
 | 160 | 
 | 
|---|
 | 161 |                         If STDLIB is not defined, the cawf sources try to
 | 
|---|
 | 162 |                         define their own library function return values.
 | 
|---|
 | 163 | 
 | 
|---|
 | 164 |         __STR__         The definition of this string must be deleted when
 | 
|---|
 | 165 |                         using the xlc 1.2 compiler on the RISC/System 6000
 | 
|---|
 | 166 |                         under AIX 3.2.  Put
 | 
|---|
 | 167 | 
 | 
|---|
 | 168 |                                 -U__STR__
 | 
|---|
 | 169 | 
 | 
|---|
 | 170 |                         in the Makefile DEFS string.  This must be done
 | 
|---|
 | 171 |                         because the xlc 1.2 compiler does not correctly inline
 | 
|---|
 | 172 |                         string functions when compiling pass3.c.
 | 
|---|
 | 173 | 
 | 
|---|
 | 174 |         UNIX            switches the build environment to Unix.  You may also
 | 
|---|
 | 175 |                         have to decide about MALLOCH, STDLIB, __STR__ and USG
 | 
|---|
 | 176 |                         when you define UNIX.
 | 
|---|
 | 177 | 
 | 
|---|
 | 178 |                         Do not define UNIX for MS-DOS Quick-C; do define
 | 
|---|
 | 179 |                         STDLIB.
 | 
|---|
 | 180 | 
 | 
|---|
 | 181 |         USG             adjusts for System V.  (UNIX must also be defined.)
 | 
|---|
 | 182 | 
 | 
|---|
 | 183 |                         You may also need to define USG to select the proper
 | 
|---|
 | 184 |                         header file for string function prototypes.  If UNIX
 | 
|---|
 | 185 |                         and USG are defined, "proto.h" selects <string.h>;
 | 
|---|
 | 186 |                         if only UNIX, <strings.h>.  Cawf needs the more
 | 
|---|
 | 187 |                         complete set of definitions, including strchr() and
 | 
|---|
 | 188 |                         strrchr().  If <string.h> #includes <strings.h>, as
 | 
|---|
 | 189 |                         is sometimes the case, define only UNIX.
 | 
|---|
 | 190 | 
 | 
|---|
 | 191 | I have built and tested cawf in the UNIX context under AIX 3.2 (see the
 | 
|---|
 | 192 | note above on __STR__), BSD4.3-Tahoe, Sequent DYNIX, ETAV (SYSV 3.0),
 | 
|---|
 | 193 | NeXTStep 3.0, SunOS 4.1.1 and Ultrix 2.2.  If you build under another Unix
 | 
|---|
 | 194 | variant, you may have to adjust the source code, header files and Makefile
 | 
|---|
 | 195 | to fit.  Check the Makefile first for hints.
 | 
|---|
 | 196 | 
 | 
|---|
 | 197 | 
 | 
|---|
 | 198 | ANSI C COMPLIANCE
 | 
|---|
 | 199 | -----------------
 | 
|---|
 | 200 | 
 | 
|---|
 | 201 | Some effort has been devoted to making the cawf sources ANSI C compliant.
 | 
|---|
 | 202 | The header file proto.h contains function prototypes that enable ANSI C
 | 
|---|
 | 203 | argument checking.  The state of definition of the __STDC__ symbol is used
 | 
|---|
 | 204 | to select options that depend on strict adherence to the ANSI C standard --
 | 
|---|
 | 205 | e.g., the need for the isascii() test before islower() or isupper().  If
 | 
|---|
 | 206 | your ANSI compiler doesn't define this variable when it's acting in strict
 | 
|---|
 | 207 | ANSI C mode, you may have to define it in the Makefile.
 | 
|---|
 | 208 | 
 | 
|---|
 | 209 | 
 | 
|---|
 | 210 | MS-DOS CONSIDERATIONS
 | 
|---|
 | 211 | ---------------------
 | 
|---|
 | 212 | 
 | 
|---|
 | 213 | The MS-DOS version of cawf was created to run under the KornShell of the
 | 
|---|
 | 214 | Mortis Kern Systems Toolkit.  One ramification of using MKS' ksh is that it
 | 
|---|
 | 215 | supports the separate standard error and standard output streams.  Hence,
 | 
|---|
 | 216 | cawf blithely distributes its error messages to the standard error file, and
 | 
|---|
 | 217 | assumes the user's shell is capable of separating them from standard output.
 | 
|---|
 | 218 | 
 | 
|---|
 | 219 | If you don't use the MKS KornShell, but do want to separate the output
 | 
|---|
 | 220 | streams, you'll have to modify the cawf source code.  As a rudimentary aid,
 | 
|---|
 | 221 | cawf uses a separate stream pointer, Efs, for writing error output, but sets
 | 
|---|
 | 222 | it to stderr.  You can change that process to open a separate error file and
 | 
|---|
 | 223 | set Efs to point to it.
 | 
|---|
 | 224 | 
 | 
|---|
 | 225 | 
 | 
|---|
 | 226 | COPYRIGHTS AND CREDITS
 | 
|---|
 | 227 | ----------------------
 | 
|---|
 | 228 | 
 | 
|---|
 | 229 | The sources are copyrighted, but freely distributable under usual terms -
 | 
|---|
 | 230 | retention of credit, etc.
 | 
|---|
 | 231 | 
 | 
|---|
 | 232 | Please acknowledge:
 | 
|---|
 | 233 | 
 | 
|---|
 | 234 |         AT&T for their public-domain release of getopt(3) at the 1985
 | 
|---|
 | 235 |         UNIFORUM conference;
 | 
|---|
 | 236 | 
 | 
|---|
 | 237 |         Chet Creider, Bob Hardy and Ted Campbell for their contributions
 | 
|---|
 | 238 |         to font filtering;
 | 
|---|
 | 239 | 
 | 
|---|
 | 240 |         Henry Spencer for awf and his regular expression package;
 | 
|---|
 | 241 | 
 | 
|---|
 | 242 |         Andy Tanenbaum for his help in ANSI C compliance, including his
 | 
|---|
 | 243 |         ansi.h header file from Minix.
 | 
|---|
 | 244 | 
 | 
|---|
 | 245 | Henry says about awf, "I can't believe I really wrote this."  Those are
 | 
|---|
 | 246 | my sentiments exactly about cawf, but I also understand that necessity
 | 
|---|
 | 247 | sometimes forces us to do what we would prefer to avoid.
 | 
|---|
 | 248 | 
 | 
|---|
 | 249 | 
 | 
|---|
 | 250 | BUGS AND ENHANCEMENTS
 | 
|---|
 | 251 | ---------------------
 | 
|---|
 | 252 | 
 | 
|---|
 | 253 | I'll be glad to hear about bugs and needs for enhancements, but make no
 | 
|---|
 | 254 | promises about delivering fixes or upgrades in response.
 | 
|---|
 | 255 | 
 | 
|---|
 | 256 | Vic Abell <abe@cc.purdue.edu>
 | 
|---|
 | 257 | 24 November 1992
 | 
|---|
 | 258 | 
 | 
|---|
 | 259 | 
 | 
|---|
 | 260 | MINIX SPECIFIC TINKERING
 | 
|---|
 | 261 | ------------------------
 | 
|---|
 | 262 | 
 | 
|---|
 | 263 | Kees J. Bot <kjb@cs.vu.nl>
 | 
|---|
 | 264 | 26 November 1992
 | 
|---|