[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
|
---|