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