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