| File: | src/usr.bin/deroff/deroff.c |
| Warning: | line 1471, column 4 Value stored to 'hit' is never read |
Press '?' to see keyboard shortcuts
Keyboard shortcuts:
| 1 | /* $OpenBSD: deroff.c,v 1.15 2016/09/04 15:29:21 tb Exp $ */ |
| 2 | |
| 3 | /*- |
| 4 | * Copyright (c) 1988, 1993 |
| 5 | * The Regents of the University of California. All rights reserved. |
| 6 | * |
| 7 | * Redistribution and use in source and binary forms, with or without |
| 8 | * modification, are permitted provided that the following conditions |
| 9 | * are met: |
| 10 | * 1. Redistributions of source code must retain the above copyright |
| 11 | * notice, this list of conditions and the following disclaimer. |
| 12 | * 2. Redistributions in binary form must reproduce the above copyright |
| 13 | * notice, this list of conditions and the following disclaimer in the |
| 14 | * documentation and/or other materials provided with the distribution. |
| 15 | * 3. Neither the name of the University nor the names of its contributors |
| 16 | * may be used to endorse or promote products derived from this software |
| 17 | * without specific prior written permission. |
| 18 | * |
| 19 | * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND |
| 20 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
| 21 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
| 22 | * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE |
| 23 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
| 24 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
| 25 | * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
| 26 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
| 27 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
| 28 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
| 29 | * SUCH DAMAGE. |
| 30 | */ |
| 31 | /* |
| 32 | * Copyright (C) Caldera International Inc. 2001-2002. |
| 33 | * All rights reserved. |
| 34 | * |
| 35 | * Redistribution and use in source and binary forms, with or without |
| 36 | * modification, are permitted provided that the following conditions |
| 37 | * are met: |
| 38 | * 1. Redistributions of source code and documentation must retain the above |
| 39 | * copyright notice, this list of conditions and the following disclaimer. |
| 40 | * 2. Redistributions in binary form must reproduce the above copyright |
| 41 | * notice, this list of conditions and the following disclaimer in the |
| 42 | * documentation and/or other materials provided with the distribution. |
| 43 | * 3. All advertising materials mentioning features or use of this software |
| 44 | * must display the following acknowledgement: |
| 45 | * This product includes software developed or owned by Caldera |
| 46 | * International, Inc. |
| 47 | * 4. Neither the name of Caldera International, Inc. nor the names of other |
| 48 | * contributors may be used to endorse or promote products derived from |
| 49 | * this software without specific prior written permission. |
| 50 | * |
| 51 | * USE OF THE SOFTWARE PROVIDED FOR UNDER THIS LICENSE BY CALDERA |
| 52 | * INTERNATIONAL, INC. AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR |
| 53 | * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
| 54 | * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
| 55 | * IN NO EVENT SHALL CALDERA INTERNATIONAL, INC. BE LIABLE FOR ANY DIRECT, |
| 56 | * INDIRECT INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
| 57 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR |
| 58 | * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
| 59 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, |
| 60 | * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING |
| 61 | * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
| 62 | * POSSIBILITY OF SUCH DAMAGE. |
| 63 | */ |
| 64 | |
| 65 | #include <err.h> |
| 66 | #include <limits.h> |
| 67 | #include <stdio.h> |
| 68 | #include <stdlib.h> |
| 69 | #include <string.h> |
| 70 | #include <unistd.h> |
| 71 | |
| 72 | /* |
| 73 | * Deroff command -- strip troff, eqn, and Tbl sequences from |
| 74 | * a file. Has two flags argument, -w, to cause output one word per line |
| 75 | * rather than in the original format. |
| 76 | * -mm (or -ms) causes the corresponding macro's to be interpreted |
| 77 | * so that just sentences are output |
| 78 | * -ml also gets rid of lists. |
| 79 | * Deroff follows .so and .nx commands, removes contents of macro |
| 80 | * definitions, equations (both .EQ ... .EN and $...$), |
| 81 | * Tbl command sequences, and Troff backslash constructions. |
| 82 | * |
| 83 | * All input is through the Cget macro; |
| 84 | * the most recently read character is in c. |
| 85 | * |
| 86 | * Modified by Robert Henry to process -me and -man macros. |
| 87 | */ |
| 88 | |
| 89 | #define Cget( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget(infile ) : (int)(*(infile)->_p++)) : (getc)(infile))) == (-1) ? eof () : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) ( (c=getc(infile)(!__isthreaded ? (--(infile)->_r < 0 ? __srget(infile) : (int)(*(infile)->_p++)) : (getc)(infile))) == EOF(-1) ? eof() : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) |
| 90 | #define C1get( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget(infile ) : (int)(*(infile)->_p++)) : (getc)(infile))) == (-1) ? eof () : c) ( (c=getc(infile)(!__isthreaded ? (--(infile)->_r < 0 ? __srget(infile) : (int)(*(infile)->_p++)) : (getc)(infile))) == EOF(-1) ? eof() : c) |
| 91 | |
| 92 | #ifdef DEBUG |
| 93 | # define C( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget(infile ) : (int)(*(infile)->_p++)) : (getc)(infile))) == (-1) ? eof () : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) _C() |
| 94 | # define C1( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget(infile ) : (int)(*(infile)->_p++)) : (getc)(infile))) == (-1) ? eof () : c) _C1() |
| 95 | #else /* not DEBUG */ |
| 96 | # define C( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget(infile ) : (int)(*(infile)->_p++)) : (getc)(infile))) == (-1) ? eof () : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) Cget( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget(infile ) : (int)(*(infile)->_p++)) : (getc)(infile))) == (-1) ? eof () : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) |
| 97 | # define C1( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget(infile ) : (int)(*(infile)->_p++)) : (getc)(infile))) == (-1) ? eof () : c) C1get( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget(infile ) : (int)(*(infile)->_p++)) : (getc)(infile))) == (-1) ? eof () : c) |
| 98 | #endif /* not DEBUG */ |
| 99 | |
| 100 | #define SKIPwhile (( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget (infile) : (int)(*(infile)->_p++)) : (getc)(infile))) == ( -1) ? eof() : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) != '\n') while (C( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget(infile ) : (int)(*(infile)->_p++)) : (getc)(infile))) == (-1) ? eof () : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) != '\n') |
| 101 | #define SKIP_TO_COMwhile (( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget (infile) : (int)(*(infile)->_p++)) : (getc)(infile))) == ( -1) ? eof() : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) != '\n'); while (( (c=(!__isthreaded ? (--(infile)-> _r < 0 ? __srget(infile) : (int)(*(infile)->_p++)) : (getc )(infile))) == (-1) ? eof() : ((c==ldelim)&&(filesp== files) ? skeqn() : c) ) != '\n'); pc=c; while (( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget(infile) : (int)(*(infile )->_p++)) : (getc)(infile))) == (-1) ? eof() : ((c==ldelim )&&(filesp==files) ? skeqn() : c) ) != '.' || pc != '\n' || ( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget (infile) : (int)(*(infile)->_p++)) : (getc)(infile))) == ( -1) ? eof() : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) > 'Z')pc=c SKIPwhile (( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget (infile) : (int)(*(infile)->_p++)) : (getc)(infile))) == ( -1) ? eof() : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) != '\n'); SKIPwhile (( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget (infile) : (int)(*(infile)->_p++)) : (getc)(infile))) == ( -1) ? eof() : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) != '\n'); pc=c; while (C( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget(infile ) : (int)(*(infile)->_p++)) : (getc)(infile))) == (-1) ? eof () : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) != '.' || pc != '\n' || C( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget(infile ) : (int)(*(infile)->_p++)) : (getc)(infile))) == (-1) ? eof () : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) > 'Z')pc=c |
| 102 | |
| 103 | #define YES1 1 |
| 104 | #define NO0 0 |
| 105 | #define MS0 0 /* -ms */ |
| 106 | #define MM1 1 /* -mm */ |
| 107 | #define ME2 2 /* -me */ |
| 108 | #define MA3 3 /* -man */ |
| 109 | |
| 110 | #ifdef DEBUG |
| 111 | char *mactab[] = { "-ms", "-mm", "-me", "-ma" }; |
| 112 | #endif /* DEBUG */ |
| 113 | |
| 114 | #define ONE1 1 |
| 115 | #define TWO2 2 |
| 116 | |
| 117 | #define NOCHAR-2 -2 |
| 118 | #define SPECIAL0 0 |
| 119 | #define APOS1 1 |
| 120 | #define PUNCT2 2 |
| 121 | #define DIGIT3 3 |
| 122 | #define LETTER4 4 |
| 123 | |
| 124 | #define MAXFILES20 20 |
| 125 | |
| 126 | int iflag; |
| 127 | int wordflag; |
| 128 | int msflag; /* processing a source written using a mac package */ |
| 129 | int mac; /* which package */ |
| 130 | int disp; |
| 131 | int parag; |
| 132 | int inmacro; |
| 133 | int intable; |
| 134 | int keepblock; /* keep blocks of text; normally false when msflag */ |
| 135 | |
| 136 | char chars[128]; /* SPECIAL, PUNCT, APOS, DIGIT, or LETTER */ |
| 137 | |
| 138 | char line[LINE_MAX2048]; |
| 139 | char *lp; |
| 140 | |
| 141 | int c; |
| 142 | int pc; |
| 143 | int ldelim; |
| 144 | int rdelim; |
| 145 | |
| 146 | char fname[PATH_MAX1024]; |
| 147 | FILE *files[MAXFILES20]; |
| 148 | FILE **filesp; |
| 149 | FILE *infile; |
| 150 | |
| 151 | int argc; |
| 152 | char **argv; |
| 153 | |
| 154 | /* |
| 155 | * Macro processing |
| 156 | * |
| 157 | * Macro table definitions |
| 158 | */ |
| 159 | typedef int pacmac; /* compressed macro name */ |
| 160 | int argconcat = 0; /* concat arguments together (-me only) */ |
| 161 | |
| 162 | #define tomac(c1, c2)((((c1) & 0xFF) << 8) | ((c2) & 0xFF)) ((((c1) & 0xFF) << 8) | ((c2) & 0xFF)) |
| 163 | #define frommac(src, c1, c2)(((c1)=((src)>>8)&0xFF),((c2) =(src)&0xFF)) (((c1)=((src)>>8)&0xFF),((c2) =(src)&0xFF)) |
| 164 | |
| 165 | struct mactab{ |
| 166 | int condition; |
| 167 | pacmac macname; |
| 168 | int (*func)(); /* XXX - args */ |
| 169 | }; |
| 170 | |
| 171 | struct mactab troffmactab[]; |
| 172 | struct mactab ppmactab[]; |
| 173 | struct mactab msmactab[]; |
| 174 | struct mactab mmmactab[]; |
| 175 | struct mactab memactab[]; |
| 176 | struct mactab manmactab[]; |
| 177 | |
| 178 | /* |
| 179 | * Macro table initialization |
| 180 | */ |
| 181 | #define M(cond, c1, c2, func){cond, ((((c1) & 0xFF) << 8) | ((c2) & 0xFF)), func } {cond, tomac(c1, c2)((((c1) & 0xFF) << 8) | ((c2) & 0xFF)), func} |
| 182 | |
| 183 | /* |
| 184 | * Flags for matching conditions other than |
| 185 | * the macro name |
| 186 | */ |
| 187 | #define NONE0 0 |
| 188 | #define FNEST1 1 /* no nested files */ |
| 189 | #define NOMAC2 2 /* no macro */ |
| 190 | #define MAC3 3 /* macro */ |
| 191 | #define PARAG4 4 /* in a paragraph */ |
| 192 | #define MSF5 5 /* msflag is on */ |
| 193 | #define NBLK6 6 /* set if no blocks to be kept */ |
| 194 | |
| 195 | /* |
| 196 | * Return codes from macro minions, determine where to jump, |
| 197 | * how to repeat/reprocess text |
| 198 | */ |
| 199 | #define COMX1 1 /* goto comx */ |
| 200 | #define COM2 2 /* goto com */ |
| 201 | |
| 202 | int skeqn(void); |
| 203 | int eof(void); |
| 204 | int _C1(void); |
| 205 | int _C(void); |
| 206 | int EQ(void); |
| 207 | int domacro(void); |
| 208 | int PS(void); |
| 209 | int skip(void); |
| 210 | int intbl(void); |
| 211 | int outtbl(void); |
| 212 | int so(void); |
| 213 | int nx(void); |
| 214 | int skiptocom(void); |
| 215 | int PP(pacmac); |
| 216 | int AU(void); |
| 217 | int SH(pacmac); |
| 218 | int UX(void); |
| 219 | int MMHU(pacmac); |
| 220 | int mesnblock(pacmac); |
| 221 | int mssnblock(pacmac); |
| 222 | int nf(void); |
| 223 | int ce(void); |
| 224 | int meip(pacmac); |
| 225 | int mepp(pacmac); |
| 226 | int mesh(pacmac); |
| 227 | int mefont(pacmac); |
| 228 | int manfont(pacmac); |
| 229 | int manpp(pacmac); |
| 230 | int macsort(const void *, const void *); |
| 231 | int sizetab(struct mactab *); |
| 232 | void getfname(void); |
| 233 | void textline(char *, int); |
| 234 | void work(void); |
| 235 | void regline(void (*)(char *, int), int); |
| 236 | void macro(void); |
| 237 | void tbl(void); |
| 238 | void stbl(void); |
| 239 | void eqn(void); |
| 240 | void backsl(void); |
| 241 | void sce(void); |
| 242 | void refer(int); |
| 243 | void inpic(void); |
| 244 | void msputmac(char *, int); |
| 245 | void msputwords(int); |
| 246 | void meputmac(char *, int); |
| 247 | void meputwords(int); |
| 248 | void noblock(char, char); |
| 249 | void defcomline(pacmac); |
| 250 | void comline(void); |
| 251 | void buildtab(struct mactab **, int *); |
| 252 | FILE *opn(char *); |
| 253 | struct mactab *macfill(struct mactab *, struct mactab *); |
| 254 | __dead__attribute__((__noreturn__)) void usage(void); |
| 255 | |
| 256 | int |
| 257 | main(int ac, char **av) |
| 258 | { |
| 259 | int i, ch; |
| 260 | int errflg = 0; |
| 261 | int kflag = NO0; |
| 262 | |
| 263 | if (pledge("stdio rpath", NULL((void *)0)) == -1) |
| 264 | err(1, "pledge"); |
| 265 | |
| 266 | iflag = NO0; |
| 267 | wordflag = NO0; |
| 268 | msflag = NO0; |
| 269 | mac = ME2; |
| 270 | disp = NO0; |
| 271 | parag = NO0; |
| 272 | inmacro = NO0; |
| 273 | intable = NO0; |
| 274 | ldelim = NOCHAR-2; |
| 275 | rdelim = NOCHAR-2; |
| 276 | keepblock = YES1; |
| 277 | |
| 278 | while ((ch = getopt(ac, av, "ikpwm:")) != -1) { |
| 279 | switch (ch) { |
| 280 | case 'i': |
| 281 | iflag = YES1; |
| 282 | break; |
| 283 | case 'k': |
| 284 | kflag = YES1; |
| 285 | break; |
| 286 | case 'm': |
| 287 | msflag = YES1; |
| 288 | keepblock = NO0; |
| 289 | switch (optarg[0]) { |
| 290 | case 'm': |
| 291 | mac = MM1; |
| 292 | break; |
| 293 | case 's': |
| 294 | mac = MS0; |
| 295 | break; |
| 296 | case 'e': |
| 297 | mac = ME2; |
| 298 | break; |
| 299 | case 'a': |
| 300 | mac = MA3; |
| 301 | break; |
| 302 | case 'l': |
| 303 | disp = YES1; |
| 304 | break; |
| 305 | default: |
| 306 | errflg = 1; |
| 307 | break; |
| 308 | } |
| 309 | if (optarg[1] != '\0') |
| 310 | errflg = 1; |
| 311 | break; |
| 312 | case 'p': |
| 313 | parag = YES1; |
| 314 | break; |
| 315 | case 'w': |
| 316 | wordflag = YES1; |
| 317 | kflag = YES1; |
| 318 | break; |
| 319 | default: |
| 320 | errflg = 1; |
| 321 | } |
| 322 | } |
| 323 | argc = ac - optind; |
| 324 | argv = av + optind; |
| 325 | |
| 326 | if (kflag) |
| 327 | keepblock = YES1; |
| 328 | if (errflg) |
| 329 | usage(); |
| 330 | |
| 331 | #ifdef DEBUG |
| 332 | printf("msflag = %d, mac = %s, keepblock = %d, disp = %d\n", |
| 333 | msflag, mactab[mac], keepblock, disp); |
| 334 | #endif /* DEBUG */ |
| 335 | if (argc == 0) { |
| 336 | infile = stdin(&__sF[0]); |
| 337 | } else { |
| 338 | infile = opn(argv[0]); |
| 339 | --argc; |
| 340 | ++argv; |
| 341 | } |
| 342 | files[0] = infile; |
| 343 | filesp = &files[0]; |
| 344 | |
| 345 | for (i = 'a'; i <= 'z'; ++i) |
| 346 | chars[i] = LETTER4; |
| 347 | for (i = 'A'; i <= 'Z'; ++i) |
| 348 | chars[i] = LETTER4; |
| 349 | for (i = '0'; i <= '9'; ++i) |
| 350 | chars[i] = DIGIT3; |
| 351 | chars['\''] = APOS1; |
| 352 | chars['&'] = APOS1; |
| 353 | chars['.'] = PUNCT2; |
| 354 | chars[','] = PUNCT2; |
| 355 | chars[';'] = PUNCT2; |
| 356 | chars['?'] = PUNCT2; |
| 357 | chars[':'] = PUNCT2; |
| 358 | work(); |
| 359 | exit(0); |
| 360 | } |
| 361 | |
| 362 | int |
| 363 | skeqn(void) |
| 364 | { |
| 365 | |
| 366 | while ((c = getc(infile)(!__isthreaded ? (--(infile)->_r < 0 ? __srget(infile) : (int)(*(infile)->_p++)) : (getc)(infile))) != rdelim) { |
| 367 | if (c == EOF(-1)) |
| 368 | c = eof(); |
| 369 | else if (c == '"') { |
| 370 | while ((c = getc(infile)(!__isthreaded ? (--(infile)->_r < 0 ? __srget(infile) : (int)(*(infile)->_p++)) : (getc)(infile))) != '"') { |
| 371 | if (c == EOF(-1) || |
| 372 | (c == '\\' && (c = getc(infile)(!__isthreaded ? (--(infile)->_r < 0 ? __srget(infile) : (int)(*(infile)->_p++)) : (getc)(infile))) == EOF(-1))) |
| 373 | c = eof(); |
| 374 | } |
| 375 | } |
| 376 | } |
| 377 | if (msflag) |
| 378 | return((c = 'x')); |
| 379 | return((c = ' ')); |
| 380 | } |
| 381 | |
| 382 | FILE * |
| 383 | opn(char *p) |
| 384 | { |
| 385 | FILE *fd; |
| 386 | |
| 387 | if ((fd = fopen(p, "r")) == NULL((void *)0)) |
| 388 | err(1, "fopen %s", p); |
| 389 | |
| 390 | return(fd); |
| 391 | } |
| 392 | |
| 393 | int |
| 394 | eof(void) |
| 395 | { |
| 396 | |
| 397 | if (infile != stdin(&__sF[0])) |
| 398 | fclose(infile); |
| 399 | if (filesp > files) |
| 400 | infile = *--filesp; |
| 401 | else if (argc > 0) { |
| 402 | infile = opn(argv[0]); |
| 403 | --argc; |
| 404 | ++argv; |
| 405 | } else |
| 406 | exit(0); |
| 407 | return(C( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget(infile ) : (int)(*(infile)->_p++)) : (getc)(infile))) == (-1) ? eof () : ((c==ldelim)&&(filesp==files) ? skeqn() : c) )); |
| 408 | } |
| 409 | |
| 410 | void |
| 411 | getfname(void) |
| 412 | { |
| 413 | char *p; |
| 414 | struct chain { |
| 415 | struct chain *nextp; |
| 416 | char *datap; |
| 417 | } *q; |
| 418 | static struct chain *namechain= NULL((void *)0); |
| 419 | |
| 420 | while (C( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget(infile ) : (int)(*(infile)->_p++)) : (getc)(infile))) == (-1) ? eof () : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) == ' ') |
| 421 | ; /* nothing */ |
| 422 | |
| 423 | for (p = fname ; p - fname < sizeof(fname) && (*p = c) != '\n' && |
| 424 | c != ' ' && c != '\t' && c != '\\'; ++p) |
| 425 | C( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget(infile ) : (int)(*(infile)->_p++)) : (getc)(infile))) == (-1) ? eof () : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ); |
| 426 | *p = '\0'; |
| 427 | while (c != '\n') |
| 428 | C( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget(infile ) : (int)(*(infile)->_p++)) : (getc)(infile))) == (-1) ? eof () : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ); |
| 429 | |
| 430 | /* see if this name has already been used */ |
| 431 | for (q = namechain ; q; q = q->nextp) |
| 432 | if (strcmp(fname, q->datap) == 0) { |
| 433 | fname[0] = '\0'; |
| 434 | return; |
| 435 | } |
| 436 | |
| 437 | q = malloc(sizeof(struct chain)); |
| 438 | if (q == NULL((void *)0)) |
| 439 | err(1, NULL((void *)0)); |
| 440 | q->nextp = namechain; |
| 441 | q->datap = strdup(fname); |
| 442 | if (q->datap == NULL((void *)0)) |
| 443 | err(1, NULL((void *)0)); |
| 444 | namechain = q; |
| 445 | } |
| 446 | |
| 447 | /*ARGSUSED*/ |
| 448 | void |
| 449 | textline(char *str, int constant) |
| 450 | { |
| 451 | |
| 452 | if (wordflag) { |
| 453 | msputwords(0); |
| 454 | return; |
| 455 | } |
| 456 | puts(str); |
| 457 | } |
| 458 | |
| 459 | void |
| 460 | work(void) |
| 461 | { |
| 462 | |
| 463 | for (;;) { |
| 464 | C( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget(infile ) : (int)(*(infile)->_p++)) : (getc)(infile))) == (-1) ? eof () : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ); |
| 465 | #ifdef FULLDEBUG |
| 466 | printf("Starting work with `%c'\n", c); |
| 467 | #endif /* FULLDEBUG */ |
| 468 | if (c == '.' || c == '\'') |
| 469 | comline(); |
| 470 | else |
| 471 | regline(textline, TWO2); |
| 472 | } |
| 473 | } |
| 474 | |
| 475 | void |
| 476 | regline(void (*pfunc)(char *, int), int constant) |
| 477 | { |
| 478 | |
| 479 | line[0] = c; |
| 480 | lp = line; |
| 481 | while (lp - line < sizeof(line)) { |
| 482 | if (c == '\\') { |
| 483 | *lp = ' '; |
| 484 | backsl(); |
| 485 | } |
| 486 | if (c == '\n') |
| 487 | break; |
| 488 | if (intable && c == 'T') { |
| 489 | *++lp = C( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget(infile ) : (int)(*(infile)->_p++)) : (getc)(infile))) == (-1) ? eof () : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ); |
| 490 | if (c == '{' || c == '}') { |
| 491 | lp[-1] = ' '; |
| 492 | *lp = C( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget(infile ) : (int)(*(infile)->_p++)) : (getc)(infile))) == (-1) ? eof () : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ); |
| 493 | } |
| 494 | } else { |
| 495 | *++lp = C( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget(infile ) : (int)(*(infile)->_p++)) : (getc)(infile))) == (-1) ? eof () : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ); |
| 496 | } |
| 497 | } |
| 498 | *lp = '\0'; |
| 499 | |
| 500 | if (line[0] != '\0') |
| 501 | (*pfunc)(line, constant); |
| 502 | } |
| 503 | |
| 504 | void |
| 505 | macro(void) |
| 506 | { |
| 507 | |
| 508 | if (msflag) { |
| 509 | do { |
| 510 | SKIPwhile (( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget (infile) : (int)(*(infile)->_p++)) : (getc)(infile))) == ( -1) ? eof() : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) != '\n'); |
| 511 | } while (C( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget(infile ) : (int)(*(infile)->_p++)) : (getc)(infile))) == (-1) ? eof () : ((c==ldelim)&&(filesp==files) ? skeqn() : c) )!='.' || C( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget(infile ) : (int)(*(infile)->_p++)) : (getc)(infile))) == (-1) ? eof () : ((c==ldelim)&&(filesp==files) ? skeqn() : c) )!='.' || C( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget(infile ) : (int)(*(infile)->_p++)) : (getc)(infile))) == (-1) ? eof () : ((c==ldelim)&&(filesp==files) ? skeqn() : c) )=='.'); /* look for .. */ |
| 512 | if (c != '\n') |
| 513 | SKIPwhile (( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget (infile) : (int)(*(infile)->_p++)) : (getc)(infile))) == ( -1) ? eof() : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) != '\n'); |
| 514 | return; |
| 515 | } |
| 516 | SKIPwhile (( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget (infile) : (int)(*(infile)->_p++)) : (getc)(infile))) == ( -1) ? eof() : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) != '\n'); |
| 517 | inmacro = YES1; |
| 518 | } |
| 519 | |
| 520 | void |
| 521 | tbl(void) |
| 522 | { |
| 523 | |
| 524 | while (C( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget(infile ) : (int)(*(infile)->_p++)) : (getc)(infile))) == (-1) ? eof () : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) != '.') |
| 525 | ; /* nothing */ |
| 526 | SKIPwhile (( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget (infile) : (int)(*(infile)->_p++)) : (getc)(infile))) == ( -1) ? eof() : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) != '\n'); |
| 527 | intable = YES1; |
| 528 | } |
| 529 | |
| 530 | void |
| 531 | stbl(void) |
| 532 | { |
| 533 | |
| 534 | while (C( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget(infile ) : (int)(*(infile)->_p++)) : (getc)(infile))) == (-1) ? eof () : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) != '.') |
| 535 | ; /* nothing */ |
| 536 | SKIP_TO_COMwhile (( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget (infile) : (int)(*(infile)->_p++)) : (getc)(infile))) == ( -1) ? eof() : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) != '\n'); while (( (c=(!__isthreaded ? (--(infile)-> _r < 0 ? __srget(infile) : (int)(*(infile)->_p++)) : (getc )(infile))) == (-1) ? eof() : ((c==ldelim)&&(filesp== files) ? skeqn() : c) ) != '\n'); pc=c; while (( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget(infile) : (int)(*(infile )->_p++)) : (getc)(infile))) == (-1) ? eof() : ((c==ldelim )&&(filesp==files) ? skeqn() : c) ) != '.' || pc != '\n' || ( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget (infile) : (int)(*(infile)->_p++)) : (getc)(infile))) == ( -1) ? eof() : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) > 'Z')pc=c; |
| 537 | if (c != 'T' || C( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget(infile ) : (int)(*(infile)->_p++)) : (getc)(infile))) == (-1) ? eof () : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) != 'E') { |
| 538 | SKIPwhile (( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget (infile) : (int)(*(infile)->_p++)) : (getc)(infile))) == ( -1) ? eof() : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) != '\n'); |
| 539 | pc = c; |
| 540 | while (C( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget(infile ) : (int)(*(infile)->_p++)) : (getc)(infile))) == (-1) ? eof () : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) != '.' || pc != '\n' || C( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget(infile ) : (int)(*(infile)->_p++)) : (getc)(infile))) == (-1) ? eof () : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) != 'T' || C( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget(infile ) : (int)(*(infile)->_p++)) : (getc)(infile))) == (-1) ? eof () : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) != 'E') |
| 541 | pc = c; |
| 542 | } |
| 543 | } |
| 544 | |
| 545 | void |
| 546 | eqn(void) |
| 547 | { |
| 548 | int c1, c2; |
| 549 | int dflg; |
| 550 | char last; |
| 551 | |
| 552 | last=0; |
| 553 | dflg = 1; |
| 554 | SKIPwhile (( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget (infile) : (int)(*(infile)->_p++)) : (getc)(infile))) == ( -1) ? eof() : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) != '\n'); |
| 555 | |
| 556 | for (;;) { |
| 557 | if (C1( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget(infile ) : (int)(*(infile)->_p++)) : (getc)(infile))) == (-1) ? eof () : c) == '.' || c == '\'') { |
| 558 | while (C1( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget(infile ) : (int)(*(infile)->_p++)) : (getc)(infile))) == (-1) ? eof () : c) == ' ' || c == '\t') |
| 559 | ; |
| 560 | if (c == 'E' && C1( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget(infile ) : (int)(*(infile)->_p++)) : (getc)(infile))) == (-1) ? eof () : c) == 'N') { |
| 561 | SKIPwhile (( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget (infile) : (int)(*(infile)->_p++)) : (getc)(infile))) == ( -1) ? eof() : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) != '\n'); |
| 562 | if (msflag && dflg) { |
| 563 | putchar('x')(!__isthreaded ? __sputc('x', (&__sF[1])) : (putc)('x', ( &__sF[1]))); |
| 564 | putchar(' ')(!__isthreaded ? __sputc(' ', (&__sF[1])) : (putc)(' ', ( &__sF[1]))); |
| 565 | if (last) { |
| 566 | putchar(last)(!__isthreaded ? __sputc(last, (&__sF[1])) : (putc)(last, (&__sF[1]))); |
| 567 | putchar('\n')(!__isthreaded ? __sputc('\n', (&__sF[1])) : (putc)('\n', (&__sF[1]))); |
| 568 | } |
| 569 | } |
| 570 | return; |
| 571 | } |
| 572 | } else if (c == 'd') { |
| 573 | /* look for delim */ |
| 574 | if (C1( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget(infile ) : (int)(*(infile)->_p++)) : (getc)(infile))) == (-1) ? eof () : c) == 'e' && C1( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget(infile ) : (int)(*(infile)->_p++)) : (getc)(infile))) == (-1) ? eof () : c) == 'l') |
| 575 | if (C1( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget(infile ) : (int)(*(infile)->_p++)) : (getc)(infile))) == (-1) ? eof () : c) == 'i' && C1( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget(infile ) : (int)(*(infile)->_p++)) : (getc)(infile))) == (-1) ? eof () : c) == 'm') { |
| 576 | while (C1( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget(infile ) : (int)(*(infile)->_p++)) : (getc)(infile))) == (-1) ? eof () : c) == ' ') |
| 577 | ; /* nothing */ |
| 578 | |
| 579 | if ((c1 = c) == '\n' || |
| 580 | (c2 = C1( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget(infile ) : (int)(*(infile)->_p++)) : (getc)(infile))) == (-1) ? eof () : c)) == '\n' || |
| 581 | (c1 == 'o' && c2 == 'f' && C1( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget(infile ) : (int)(*(infile)->_p++)) : (getc)(infile))) == (-1) ? eof () : c)=='f')) { |
| 582 | ldelim = NOCHAR-2; |
| 583 | rdelim = NOCHAR-2; |
| 584 | } else { |
| 585 | ldelim = c1; |
| 586 | rdelim = c2; |
| 587 | } |
| 588 | } |
| 589 | dflg = 0; |
| 590 | } |
| 591 | |
| 592 | if (c != '\n') |
| 593 | while (C1( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget(infile ) : (int)(*(infile)->_p++)) : (getc)(infile))) == (-1) ? eof () : c) != '\n') { |
| 594 | if (chars[c] == PUNCT2) |
| 595 | last = c; |
| 596 | else if (c != ' ') |
| 597 | last = 0; |
| 598 | } |
| 599 | } |
| 600 | } |
| 601 | |
| 602 | /* skip over a complete backslash construction */ |
| 603 | void |
| 604 | backsl(void) |
| 605 | { |
| 606 | int bdelim; |
| 607 | |
| 608 | sw: |
| 609 | switch (C( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget(infile ) : (int)(*(infile)->_p++)) : (getc)(infile))) == (-1) ? eof () : ((c==ldelim)&&(filesp==files) ? skeqn() : c) )) { |
| 610 | case '"': |
| 611 | SKIPwhile (( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget (infile) : (int)(*(infile)->_p++)) : (getc)(infile))) == ( -1) ? eof() : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) != '\n'); |
| 612 | return; |
| 613 | |
| 614 | case 's': |
| 615 | if (C( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget(infile ) : (int)(*(infile)->_p++)) : (getc)(infile))) == (-1) ? eof () : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) == '\\') |
| 616 | backsl(); |
| 617 | else { |
| 618 | while (C( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget(infile ) : (int)(*(infile)->_p++)) : (getc)(infile))) == (-1) ? eof () : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) >= '0' && c <= '9') |
| 619 | ; /* nothing */ |
| 620 | ungetc(c, infile); |
| 621 | c = '0'; |
| 622 | } |
| 623 | --lp; |
| 624 | return; |
| 625 | |
| 626 | case 'f': |
| 627 | case 'n': |
| 628 | case '*': |
| 629 | if (C( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget(infile ) : (int)(*(infile)->_p++)) : (getc)(infile))) == (-1) ? eof () : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) != '(') |
| 630 | return; |
| 631 | |
| 632 | case '(': |
| 633 | if (msflag) { |
| 634 | if (C( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget(infile ) : (int)(*(infile)->_p++)) : (getc)(infile))) == (-1) ? eof () : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) == 'e') { |
| 635 | if (C( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget(infile ) : (int)(*(infile)->_p++)) : (getc)(infile))) == (-1) ? eof () : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) == 'm') { |
| 636 | *lp = '-'; |
| 637 | return; |
| 638 | } |
| 639 | } |
| 640 | else if (c != '\n') |
| 641 | C( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget(infile ) : (int)(*(infile)->_p++)) : (getc)(infile))) == (-1) ? eof () : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ); |
| 642 | return; |
| 643 | } |
| 644 | if (C( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget(infile ) : (int)(*(infile)->_p++)) : (getc)(infile))) == (-1) ? eof () : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) != '\n') |
| 645 | C( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget(infile ) : (int)(*(infile)->_p++)) : (getc)(infile))) == (-1) ? eof () : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ); |
| 646 | return; |
| 647 | |
| 648 | case '$': |
| 649 | C( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget(infile ) : (int)(*(infile)->_p++)) : (getc)(infile))) == (-1) ? eof () : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ); /* discard argument number */ |
| 650 | return; |
| 651 | |
| 652 | case 'b': |
| 653 | case 'x': |
| 654 | case 'v': |
| 655 | case 'h': |
| 656 | case 'w': |
| 657 | case 'o': |
| 658 | case 'l': |
| 659 | case 'L': |
| 660 | if ((bdelim = C( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget(infile ) : (int)(*(infile)->_p++)) : (getc)(infile))) == (-1) ? eof () : ((c==ldelim)&&(filesp==files) ? skeqn() : c) )) == '\n') |
| 661 | return; |
| 662 | while (C( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget(infile ) : (int)(*(infile)->_p++)) : (getc)(infile))) == (-1) ? eof () : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) != '\n' && c != bdelim) |
| 663 | if (c == '\\') |
| 664 | backsl(); |
| 665 | return; |
| 666 | |
| 667 | case '\\': |
| 668 | if (inmacro) |
| 669 | goto sw; |
| 670 | |
| 671 | default: |
| 672 | return; |
| 673 | } |
| 674 | } |
| 675 | |
| 676 | void |
| 677 | sce(void) |
| 678 | { |
| 679 | char *ap; |
| 680 | int n, i; |
| 681 | char a[10]; |
| 682 | |
| 683 | for (ap = a; C( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget(infile ) : (int)(*(infile)->_p++)) : (getc)(infile))) == (-1) ? eof () : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) != '\n'; ap++) { |
| 684 | *ap = c; |
| 685 | if (ap == &a[9]) { |
| 686 | SKIPwhile (( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget (infile) : (int)(*(infile)->_p++)) : (getc)(infile))) == ( -1) ? eof() : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) != '\n'); |
| 687 | ap = a; |
| 688 | break; |
| 689 | } |
| 690 | } |
| 691 | if (ap != a) |
| 692 | n = atoi(a); |
| 693 | else |
| 694 | n = 1; |
| 695 | for (i = 0; i < n;) { |
| 696 | if (C( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget(infile ) : (int)(*(infile)->_p++)) : (getc)(infile))) == (-1) ? eof () : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) == '.') { |
| 697 | if (C( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget(infile ) : (int)(*(infile)->_p++)) : (getc)(infile))) == (-1) ? eof () : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) == 'c') { |
| 698 | if (C( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget(infile ) : (int)(*(infile)->_p++)) : (getc)(infile))) == (-1) ? eof () : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) == 'e') { |
| 699 | while (C( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget(infile ) : (int)(*(infile)->_p++)) : (getc)(infile))) == (-1) ? eof () : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) == ' ') |
| 700 | ; /* nothing */ |
| 701 | if (c == '0') { |
| 702 | SKIPwhile (( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget (infile) : (int)(*(infile)->_p++)) : (getc)(infile))) == ( -1) ? eof() : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) != '\n'); |
| 703 | break; |
| 704 | } else |
| 705 | SKIPwhile (( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget (infile) : (int)(*(infile)->_p++)) : (getc)(infile))) == ( -1) ? eof() : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) != '\n'); |
| 706 | } |
| 707 | else |
| 708 | SKIPwhile (( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget (infile) : (int)(*(infile)->_p++)) : (getc)(infile))) == ( -1) ? eof() : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) != '\n'); |
| 709 | } else if (c == 'P' || C( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget(infile ) : (int)(*(infile)->_p++)) : (getc)(infile))) == (-1) ? eof () : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) == 'P') { |
| 710 | if (c != '\n') |
| 711 | SKIPwhile (( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget (infile) : (int)(*(infile)->_p++)) : (getc)(infile))) == ( -1) ? eof() : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) != '\n'); |
| 712 | break; |
| 713 | } else if (c != '\n') |
| 714 | SKIPwhile (( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget (infile) : (int)(*(infile)->_p++)) : (getc)(infile))) == ( -1) ? eof() : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) != '\n'); |
| 715 | } else { |
| 716 | SKIPwhile (( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget (infile) : (int)(*(infile)->_p++)) : (getc)(infile))) == ( -1) ? eof() : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) != '\n'); |
| 717 | i++; |
| 718 | } |
| 719 | } |
| 720 | } |
| 721 | |
| 722 | void |
| 723 | refer(int c1) |
| 724 | { |
| 725 | int c2; |
| 726 | |
| 727 | if (c1 != '\n') |
| 728 | SKIPwhile (( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget (infile) : (int)(*(infile)->_p++)) : (getc)(infile))) == ( -1) ? eof() : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) != '\n'); |
| 729 | |
| 730 | for (c2 = -1;;) { |
| 731 | if (C( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget(infile ) : (int)(*(infile)->_p++)) : (getc)(infile))) == (-1) ? eof () : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) != '.') |
| 732 | SKIPwhile (( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget (infile) : (int)(*(infile)->_p++)) : (getc)(infile))) == ( -1) ? eof() : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) != '\n'); |
| 733 | else { |
| 734 | if (C( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget(infile ) : (int)(*(infile)->_p++)) : (getc)(infile))) == (-1) ? eof () : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) != ']') |
| 735 | SKIPwhile (( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget (infile) : (int)(*(infile)->_p++)) : (getc)(infile))) == ( -1) ? eof() : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) != '\n'); |
| 736 | else { |
| 737 | while (C( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget(infile ) : (int)(*(infile)->_p++)) : (getc)(infile))) == (-1) ? eof () : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) != '\n') |
| 738 | c2 = c; |
| 739 | if (c2 != -1 && chars[c2] == PUNCT2) |
| 740 | putchar(c2)(!__isthreaded ? __sputc(c2, (&__sF[1])) : (putc)(c2, (& __sF[1]))); |
| 741 | return; |
| 742 | } |
| 743 | } |
| 744 | } |
| 745 | } |
| 746 | |
| 747 | void |
| 748 | inpic(void) |
| 749 | { |
| 750 | int c1; |
| 751 | char *p1, *ep; |
| 752 | |
| 753 | SKIPwhile (( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget (infile) : (int)(*(infile)->_p++)) : (getc)(infile))) == ( -1) ? eof() : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) != '\n'); |
| 754 | p1 = line; |
| 755 | ep = line + sizeof(line) - 1; |
| 756 | c = '\n'; |
| 757 | for (;;) { |
| 758 | c1 = c; |
| 759 | if (C( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget(infile ) : (int)(*(infile)->_p++)) : (getc)(infile))) == (-1) ? eof () : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) == '.' && c1 == '\n') { |
| 760 | if (C( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget(infile ) : (int)(*(infile)->_p++)) : (getc)(infile))) == (-1) ? eof () : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) != 'P') { |
| 761 | if (c == '\n') |
| 762 | continue; |
| 763 | else { |
| 764 | SKIPwhile (( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget (infile) : (int)(*(infile)->_p++)) : (getc)(infile))) == ( -1) ? eof() : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) != '\n'); |
| 765 | c = '\n'; |
| 766 | continue; |
| 767 | } |
| 768 | } |
| 769 | if (C( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget(infile ) : (int)(*(infile)->_p++)) : (getc)(infile))) == (-1) ? eof () : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) != 'E') { |
| 770 | if (c == '\n') |
| 771 | continue; |
| 772 | else { |
| 773 | SKIPwhile (( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget (infile) : (int)(*(infile)->_p++)) : (getc)(infile))) == ( -1) ? eof() : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) != '\n'); |
| 774 | c = '\n'; |
| 775 | continue; |
| 776 | } |
| 777 | } |
| 778 | SKIPwhile (( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget (infile) : (int)(*(infile)->_p++)) : (getc)(infile))) == ( -1) ? eof() : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) != '\n'); |
| 779 | return; |
| 780 | } |
| 781 | else if (c == '\"') { |
| 782 | while (C( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget(infile ) : (int)(*(infile)->_p++)) : (getc)(infile))) == (-1) ? eof () : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) != '\"') { |
| 783 | if (c == '\\') { |
| 784 | if (C( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget(infile ) : (int)(*(infile)->_p++)) : (getc)(infile))) == (-1) ? eof () : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) == '\"') |
| 785 | continue; |
| 786 | ungetc(c, infile); |
| 787 | backsl(); |
| 788 | } else if (p1 + 1 >= ep) { |
| 789 | errx(1, ".PS length exceeds limit"); |
| 790 | } else { |
| 791 | *p1++ = c; |
| 792 | } |
| 793 | } |
| 794 | *p1++ = ' '; |
| 795 | } |
| 796 | else if (c == '\n' && p1 != line) { |
| 797 | *p1 = '\0'; |
| 798 | if (wordflag) |
| 799 | msputwords(NO0); |
| 800 | else { |
| 801 | puts(line); |
| 802 | putchar('\n')(!__isthreaded ? __sputc('\n', (&__sF[1])) : (putc)('\n', (&__sF[1]))); |
| 803 | } |
| 804 | p1 = line; |
| 805 | } |
| 806 | } |
| 807 | } |
| 808 | |
| 809 | #ifdef DEBUG |
| 810 | int |
| 811 | _C1(void) |
| 812 | { |
| 813 | |
| 814 | return(C1get( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget(infile ) : (int)(*(infile)->_p++)) : (getc)(infile))) == (-1) ? eof () : c)); |
| 815 | } |
| 816 | |
| 817 | int |
| 818 | _C(void) |
| 819 | { |
| 820 | |
| 821 | return(Cget( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget(infile ) : (int)(*(infile)->_p++)) : (getc)(infile))) == (-1) ? eof () : ((c==ldelim)&&(filesp==files) ? skeqn() : c) )); |
| 822 | } |
| 823 | #endif /* DEBUG */ |
| 824 | |
| 825 | /* |
| 826 | * Put out a macro line, using ms and mm conventions. |
| 827 | */ |
| 828 | void |
| 829 | msputmac(char *s, int constant) |
| 830 | { |
| 831 | char *t; |
| 832 | int found; |
| 833 | int last; |
| 834 | |
| 835 | last = 0; |
| 836 | found = 0; |
| 837 | if (wordflag) { |
| 838 | msputwords(YES1); |
| 839 | return; |
| 840 | } |
| 841 | while (*s) { |
| 842 | while (*s == ' ' || *s == '\t') |
| 843 | putchar(*s++)(!__isthreaded ? __sputc(*s++, (&__sF[1])) : (putc)(*s++, (&__sF[1]))); |
| 844 | for (t = s ; *t != ' ' && *t != '\t' && *t != '\0' ; ++t) |
| 845 | ; /* nothing */ |
| 846 | if (*s == '\"') |
| 847 | s++; |
| 848 | if (t > s + constant && chars[(unsigned char)s[0]] == LETTER4 && |
| 849 | chars[(unsigned char)s[1]] == LETTER4) { |
| 850 | while (s < t) |
| 851 | if (*s == '\"') |
| 852 | s++; |
| 853 | else |
| 854 | putchar(*s++)(!__isthreaded ? __sputc(*s++, (&__sF[1])) : (putc)(*s++, (&__sF[1]))); |
| 855 | last = *(t-1); |
| 856 | found++; |
| 857 | } else if (found && chars[(unsigned char)s[0]] == PUNCT2 && |
| 858 | s[1] == '\0') { |
| 859 | putchar(*s++)(!__isthreaded ? __sputc(*s++, (&__sF[1])) : (putc)(*s++, (&__sF[1]))); |
| 860 | } else { |
| 861 | last = *(t - 1); |
| 862 | s = t; |
| 863 | } |
| 864 | } |
| 865 | putchar('\n')(!__isthreaded ? __sputc('\n', (&__sF[1])) : (putc)('\n', (&__sF[1]))); |
| 866 | if (msflag && chars[last] == PUNCT2) { |
| 867 | putchar(last)(!__isthreaded ? __sputc(last, (&__sF[1])) : (putc)(last, (&__sF[1]))); |
| 868 | putchar('\n')(!__isthreaded ? __sputc('\n', (&__sF[1])) : (putc)('\n', (&__sF[1]))); |
| 869 | } |
| 870 | } |
| 871 | |
| 872 | /* |
| 873 | * put out words (for the -w option) with ms and mm conventions |
| 874 | */ |
| 875 | void |
| 876 | msputwords(int macline) |
| 877 | { |
| 878 | char *p, *p1; |
| 879 | int i, nlet; |
| 880 | |
| 881 | for (p1 = line;;) { |
| 882 | /* |
| 883 | * skip initial specials ampersands and apostrophes |
| 884 | */ |
| 885 | while (chars[(unsigned char)*p1] < DIGIT3) |
| 886 | if (*p1++ == '\0') |
| 887 | return; |
| 888 | nlet = 0; |
| 889 | for (p = p1 ; (i = chars[(unsigned char)*p]) != SPECIAL0 ; ++p) |
| 890 | if (i == LETTER4) |
| 891 | ++nlet; |
| 892 | |
| 893 | if (nlet > 1 && chars[(unsigned char)p1[0]] == LETTER4) { |
| 894 | /* |
| 895 | * delete trailing ampersands and apostrophes |
| 896 | */ |
| 897 | while ((i = chars[(unsigned char)p[-1]]) == PUNCT2 || |
| 898 | i == APOS1 ) |
| 899 | --p; |
| 900 | while (p1 < p) |
| 901 | putchar(*p1++)(!__isthreaded ? __sputc(*p1++, (&__sF[1])) : (putc)(*p1++ , (&__sF[1]))); |
| 902 | putchar('\n')(!__isthreaded ? __sputc('\n', (&__sF[1])) : (putc)('\n', (&__sF[1]))); |
| 903 | } else { |
| 904 | p1 = p; |
| 905 | } |
| 906 | } |
| 907 | } |
| 908 | |
| 909 | /* |
| 910 | * put out a macro using the me conventions |
| 911 | */ |
| 912 | #define SKIPBLANK(cp)while (*cp == ' ' || *cp == '\t') { cp++; } while (*cp == ' ' || *cp == '\t') { cp++; } |
| 913 | #define SKIPNONBLANK(cp)while (*cp !=' ' && *cp !='\cp' && *cp !='\0' ) { cp++; } while (*cp !=' ' && *cp !='\cp' && *cp !='\0') { cp++; } |
| 914 | |
| 915 | void |
| 916 | meputmac(char *cp, int constant) |
| 917 | { |
| 918 | char *np; |
| 919 | int found; |
| 920 | int argno; |
| 921 | int last; |
| 922 | int inquote; |
| 923 | |
| 924 | last = 0; |
| 925 | found = 0; |
| 926 | if (wordflag) { |
| 927 | meputwords(YES1); |
| 928 | return; |
| 929 | } |
| 930 | for (argno = 0; *cp; argno++) { |
| 931 | SKIPBLANK(cp)while (*cp == ' ' || *cp == '\t') { cp++; }; |
| 932 | inquote = (*cp == '"'); |
| 933 | if (inquote) |
| 934 | cp++; |
| 935 | for (np = cp; *np; np++) { |
| 936 | switch (*np) { |
| 937 | case '\n': |
| 938 | case '\0': |
| 939 | break; |
| 940 | |
| 941 | case '\t': |
| 942 | case ' ': |
| 943 | if (inquote) |
| 944 | continue; |
| 945 | else |
| 946 | goto endarg; |
| 947 | |
| 948 | case '"': |
| 949 | if (inquote && np[1] == '"') { |
| 950 | memmove(np, np + 1, strlen(np)); |
| 951 | np++; |
| 952 | continue; |
| 953 | } else { |
| 954 | *np = ' '; /* bye bye " */ |
| 955 | goto endarg; |
| 956 | } |
| 957 | |
| 958 | default: |
| 959 | continue; |
| 960 | } |
| 961 | } |
| 962 | endarg: ; |
| 963 | /* |
| 964 | * cp points at the first char in the arg |
| 965 | * np points one beyond the last char in the arg |
| 966 | */ |
| 967 | if ((argconcat == 0) || (argconcat != argno)) |
| 968 | putchar(' ')(!__isthreaded ? __sputc(' ', (&__sF[1])) : (putc)(' ', ( &__sF[1]))); |
| 969 | #ifdef FULLDEBUG |
| 970 | { |
| 971 | char *p; |
| 972 | printf("[%d,%d: ", argno, np - cp); |
| 973 | for (p = cp; p < np; p++) { |
| 974 | putchar(*p)(!__isthreaded ? __sputc(*p, (&__sF[1])) : (putc)(*p, (& __sF[1]))); |
| 975 | } |
| 976 | printf("]"); |
| 977 | } |
| 978 | #endif /* FULLDEBUG */ |
| 979 | /* |
| 980 | * Determine if the argument merits being printed |
| 981 | * |
| 982 | * constant is the cut off point below which something |
| 983 | * is not a word. |
| 984 | */ |
| 985 | if (((np - cp) > constant) && |
| 986 | (inquote || (chars[(unsigned char)cp[0]] == LETTER4))) { |
| 987 | for (cp = cp; cp < np; cp++) |
| 988 | putchar(*cp)(!__isthreaded ? __sputc(*cp, (&__sF[1])) : (putc)(*cp, ( &__sF[1]))); |
| 989 | last = np[-1]; |
| 990 | found++; |
| 991 | } else if (found && (np - cp == 1) && |
| 992 | chars[(unsigned char)*cp] == PUNCT2) { |
| 993 | putchar(*cp)(!__isthreaded ? __sputc(*cp, (&__sF[1])) : (putc)(*cp, ( &__sF[1]))); |
| 994 | } else { |
| 995 | last = np[-1]; |
| 996 | } |
| 997 | cp = np; |
| 998 | } |
| 999 | if (msflag && chars[last] == PUNCT2) |
| 1000 | putchar(last)(!__isthreaded ? __sputc(last, (&__sF[1])) : (putc)(last, (&__sF[1]))); |
| 1001 | putchar('\n')(!__isthreaded ? __sputc('\n', (&__sF[1])) : (putc)('\n', (&__sF[1]))); |
| 1002 | } |
| 1003 | |
| 1004 | /* |
| 1005 | * put out words (for the -w option) with ms and mm conventions |
| 1006 | */ |
| 1007 | void |
| 1008 | meputwords(int macline) |
| 1009 | { |
| 1010 | |
| 1011 | msputwords(macline); |
| 1012 | } |
| 1013 | |
| 1014 | /* |
| 1015 | * |
| 1016 | * Skip over a nested set of macros |
| 1017 | * |
| 1018 | * Possible arguments to noblock are: |
| 1019 | * |
| 1020 | * fi end of unfilled text |
| 1021 | * PE pic ending |
| 1022 | * DE display ending |
| 1023 | * |
| 1024 | * for ms and mm only: |
| 1025 | * KE keep ending |
| 1026 | * |
| 1027 | * NE undocumented match to NS (for mm?) |
| 1028 | * LE mm only: matches RL or *L (for lists) |
| 1029 | * |
| 1030 | * for me: |
| 1031 | * ([lqbzcdf] |
| 1032 | */ |
| 1033 | void |
| 1034 | noblock(char a1, char a2) |
| 1035 | { |
| 1036 | int c1,c2; |
| 1037 | int eqnf; |
| 1038 | int lct; |
| 1039 | |
| 1040 | lct = 0; |
| 1041 | eqnf = 1; |
| 1042 | SKIPwhile (( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget (infile) : (int)(*(infile)->_p++)) : (getc)(infile))) == ( -1) ? eof() : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) != '\n'); |
| 1043 | for (;;) { |
| 1044 | while (C( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget(infile ) : (int)(*(infile)->_p++)) : (getc)(infile))) == (-1) ? eof () : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) != '.') |
| 1045 | if (c == '\n') |
| 1046 | continue; |
| 1047 | else |
| 1048 | SKIPwhile (( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget (infile) : (int)(*(infile)->_p++)) : (getc)(infile))) == ( -1) ? eof() : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) != '\n'); |
| 1049 | if ((c1 = C( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget(infile ) : (int)(*(infile)->_p++)) : (getc)(infile))) == (-1) ? eof () : ((c==ldelim)&&(filesp==files) ? skeqn() : c) )) == '\n') |
| 1050 | continue; |
| 1051 | if ((c2 = C( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget(infile ) : (int)(*(infile)->_p++)) : (getc)(infile))) == (-1) ? eof () : ((c==ldelim)&&(filesp==files) ? skeqn() : c) )) == '\n') |
| 1052 | continue; |
| 1053 | if (c1 == a1 && c2 == a2) { |
| 1054 | SKIPwhile (( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget (infile) : (int)(*(infile)->_p++)) : (getc)(infile))) == ( -1) ? eof() : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) != '\n'); |
| 1055 | if (lct != 0) { |
| 1056 | lct--; |
| 1057 | continue; |
| 1058 | } |
| 1059 | if (eqnf) |
| 1060 | putchar('.')(!__isthreaded ? __sputc('.', (&__sF[1])) : (putc)('.', ( &__sF[1]))); |
| 1061 | putchar('\n')(!__isthreaded ? __sputc('\n', (&__sF[1])) : (putc)('\n', (&__sF[1]))); |
| 1062 | return; |
| 1063 | } else if (a1 == 'L' && c2 == 'L') { |
| 1064 | lct++; |
| 1065 | SKIPwhile (( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget (infile) : (int)(*(infile)->_p++)) : (getc)(infile))) == ( -1) ? eof() : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) != '\n'); |
| 1066 | } |
| 1067 | /* |
| 1068 | * equations (EQ) nested within a display |
| 1069 | */ |
| 1070 | else if (c1 == 'E' && c2 == 'Q') { |
| 1071 | if ((mac == ME2 && a1 == ')') |
| 1072 | || (mac != ME2 && a1 == 'D')) { |
| 1073 | eqn(); |
| 1074 | eqnf=0; |
| 1075 | } |
| 1076 | } |
| 1077 | /* |
| 1078 | * turning on filling is done by the paragraphing |
| 1079 | * macros |
| 1080 | */ |
| 1081 | else if (a1 == 'f') { /* .fi */ |
| 1082 | if ((mac == ME2 && (c2 == 'h' || c2 == 'p')) |
| 1083 | || (mac != ME2 && (c1 == 'P' || c2 == 'P'))) { |
| 1084 | SKIPwhile (( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget (infile) : (int)(*(infile)->_p++)) : (getc)(infile))) == ( -1) ? eof() : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) != '\n'); |
| 1085 | return; |
| 1086 | } |
| 1087 | } else { |
| 1088 | SKIPwhile (( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget (infile) : (int)(*(infile)->_p++)) : (getc)(infile))) == ( -1) ? eof() : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) != '\n'); |
| 1089 | } |
| 1090 | } |
| 1091 | } |
| 1092 | |
| 1093 | int |
| 1094 | EQ(void) |
| 1095 | { |
| 1096 | |
| 1097 | eqn(); |
| 1098 | return(0); |
| 1099 | } |
| 1100 | |
| 1101 | int |
| 1102 | domacro(void) |
| 1103 | { |
| 1104 | |
| 1105 | macro(); |
| 1106 | return(0); |
| 1107 | } |
| 1108 | |
| 1109 | int |
| 1110 | PS(void) |
| 1111 | { |
| 1112 | |
| 1113 | for (C( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget(infile ) : (int)(*(infile)->_p++)) : (getc)(infile))) == (-1) ? eof () : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ); c == ' ' || c == '\t'; C( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget(infile ) : (int)(*(infile)->_p++)) : (getc)(infile))) == (-1) ? eof () : ((c==ldelim)&&(filesp==files) ? skeqn() : c) )) |
| 1114 | ; /* nothing */ |
| 1115 | |
| 1116 | if (c == '<') { /* ".PS < file" -- don't expect a .PE */ |
| 1117 | SKIPwhile (( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget (infile) : (int)(*(infile)->_p++)) : (getc)(infile))) == ( -1) ? eof() : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) != '\n'); |
| 1118 | return(0); |
| 1119 | } |
| 1120 | if (!msflag) |
| 1121 | inpic(); |
| 1122 | else |
| 1123 | noblock('P', 'E'); |
| 1124 | return(0); |
| 1125 | } |
| 1126 | |
| 1127 | int |
| 1128 | skip(void) |
| 1129 | { |
| 1130 | |
| 1131 | SKIPwhile (( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget (infile) : (int)(*(infile)->_p++)) : (getc)(infile))) == ( -1) ? eof() : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) != '\n'); |
| 1132 | return(0); |
| 1133 | } |
| 1134 | |
| 1135 | int |
| 1136 | intbl(void) |
| 1137 | { |
| 1138 | |
| 1139 | if (msflag) |
| 1140 | stbl(); |
| 1141 | else |
| 1142 | tbl(); |
| 1143 | return(0); |
| 1144 | } |
| 1145 | |
| 1146 | int |
| 1147 | outtbl(void) |
| 1148 | { |
| 1149 | |
| 1150 | intable = NO0; |
| 1151 | return(0); |
| 1152 | } |
| 1153 | |
| 1154 | int |
| 1155 | so(void) |
| 1156 | { |
| 1157 | |
| 1158 | if (!iflag) { |
| 1159 | getfname(); |
| 1160 | if (fname[0]) { |
| 1161 | if (++filesp - &files[0] > MAXFILES20) |
| 1162 | err(1, "too many nested files (max %d)", |
| 1163 | MAXFILES20); |
| 1164 | infile = *filesp = opn(fname); |
| 1165 | } |
| 1166 | } |
| 1167 | return(0); |
| 1168 | } |
| 1169 | |
| 1170 | int |
| 1171 | nx(void) |
| 1172 | { |
| 1173 | |
| 1174 | if (!iflag) { |
| 1175 | getfname(); |
| 1176 | if (fname[0] == '\0') |
| 1177 | exit(0); |
| 1178 | if (infile != stdin(&__sF[0])) |
| 1179 | fclose(infile); |
| 1180 | infile = *filesp = opn(fname); |
| 1181 | } |
| 1182 | return(0); |
| 1183 | } |
| 1184 | |
| 1185 | int |
| 1186 | skiptocom(void) |
| 1187 | { |
| 1188 | |
| 1189 | SKIP_TO_COMwhile (( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget (infile) : (int)(*(infile)->_p++)) : (getc)(infile))) == ( -1) ? eof() : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) != '\n'); while (( (c=(!__isthreaded ? (--(infile)-> _r < 0 ? __srget(infile) : (int)(*(infile)->_p++)) : (getc )(infile))) == (-1) ? eof() : ((c==ldelim)&&(filesp== files) ? skeqn() : c) ) != '\n'); pc=c; while (( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget(infile) : (int)(*(infile )->_p++)) : (getc)(infile))) == (-1) ? eof() : ((c==ldelim )&&(filesp==files) ? skeqn() : c) ) != '.' || pc != '\n' || ( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget (infile) : (int)(*(infile)->_p++)) : (getc)(infile))) == ( -1) ? eof() : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) > 'Z')pc=c; |
| 1190 | return(COMX1); |
| 1191 | } |
| 1192 | |
| 1193 | int |
| 1194 | PP(pacmac c12) |
| 1195 | { |
| 1196 | int c1, c2; |
| 1197 | |
| 1198 | frommac(c12, c1, c2)(((c1)=((c12)>>8)&0xFF),((c2) =(c12)&0xFF)); |
| 1199 | printf(".%c%c", c1, c2); |
| 1200 | while (C( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget(infile ) : (int)(*(infile)->_p++)) : (getc)(infile))) == (-1) ? eof () : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) != '\n') |
| 1201 | putchar(c)(!__isthreaded ? __sputc(c, (&__sF[1])) : (putc)(c, (& __sF[1]))); |
| 1202 | putchar('\n')(!__isthreaded ? __sputc('\n', (&__sF[1])) : (putc)('\n', (&__sF[1]))); |
| 1203 | return(0); |
| 1204 | } |
| 1205 | |
| 1206 | int |
| 1207 | AU(void) |
| 1208 | { |
| 1209 | |
| 1210 | if (mac == MM1) |
| 1211 | return(0); |
| 1212 | SKIP_TO_COMwhile (( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget (infile) : (int)(*(infile)->_p++)) : (getc)(infile))) == ( -1) ? eof() : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) != '\n'); while (( (c=(!__isthreaded ? (--(infile)-> _r < 0 ? __srget(infile) : (int)(*(infile)->_p++)) : (getc )(infile))) == (-1) ? eof() : ((c==ldelim)&&(filesp== files) ? skeqn() : c) ) != '\n'); pc=c; while (( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget(infile) : (int)(*(infile )->_p++)) : (getc)(infile))) == (-1) ? eof() : ((c==ldelim )&&(filesp==files) ? skeqn() : c) ) != '.' || pc != '\n' || ( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget (infile) : (int)(*(infile)->_p++)) : (getc)(infile))) == ( -1) ? eof() : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) > 'Z')pc=c; |
| 1213 | return(COMX1); |
| 1214 | } |
| 1215 | |
| 1216 | int |
| 1217 | SH(pacmac c12) |
| 1218 | { |
| 1219 | int c1, c2; |
| 1220 | |
| 1221 | frommac(c12, c1, c2)(((c1)=((c12)>>8)&0xFF),((c2) =(c12)&0xFF)); |
| 1222 | |
| 1223 | if (parag) { |
| 1224 | printf(".%c%c", c1, c2); |
| 1225 | while (C( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget(infile ) : (int)(*(infile)->_p++)) : (getc)(infile))) == (-1) ? eof () : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) != '\n') |
| 1226 | putchar(c)(!__isthreaded ? __sputc(c, (&__sF[1])) : (putc)(c, (& __sF[1]))); |
| 1227 | putchar(c)(!__isthreaded ? __sputc(c, (&__sF[1])) : (putc)(c, (& __sF[1]))); |
| 1228 | putchar('!')(!__isthreaded ? __sputc('!', (&__sF[1])) : (putc)('!', ( &__sF[1]))); |
| 1229 | for (;;) { |
| 1230 | while (C( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget(infile ) : (int)(*(infile)->_p++)) : (getc)(infile))) == (-1) ? eof () : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) != '\n') |
| 1231 | putchar(c)(!__isthreaded ? __sputc(c, (&__sF[1])) : (putc)(c, (& __sF[1]))); |
| 1232 | putchar('\n')(!__isthreaded ? __sputc('\n', (&__sF[1])) : (putc)('\n', (&__sF[1]))); |
| 1233 | if (C( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget(infile ) : (int)(*(infile)->_p++)) : (getc)(infile))) == (-1) ? eof () : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) == '.') |
| 1234 | return(COM2); |
| 1235 | putchar('!')(!__isthreaded ? __sputc('!', (&__sF[1])) : (putc)('!', ( &__sF[1]))); |
| 1236 | putchar(c)(!__isthreaded ? __sputc(c, (&__sF[1])) : (putc)(c, (& __sF[1]))); |
| 1237 | } |
| 1238 | /*NOTREACHED*/ |
| 1239 | } else { |
| 1240 | SKIP_TO_COMwhile (( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget (infile) : (int)(*(infile)->_p++)) : (getc)(infile))) == ( -1) ? eof() : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) != '\n'); while (( (c=(!__isthreaded ? (--(infile)-> _r < 0 ? __srget(infile) : (int)(*(infile)->_p++)) : (getc )(infile))) == (-1) ? eof() : ((c==ldelim)&&(filesp== files) ? skeqn() : c) ) != '\n'); pc=c; while (( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget(infile) : (int)(*(infile )->_p++)) : (getc)(infile))) == (-1) ? eof() : ((c==ldelim )&&(filesp==files) ? skeqn() : c) ) != '.' || pc != '\n' || ( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget (infile) : (int)(*(infile)->_p++)) : (getc)(infile))) == ( -1) ? eof() : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) > 'Z')pc=c; |
| 1241 | return(COMX1); |
| 1242 | } |
| 1243 | } |
| 1244 | |
| 1245 | int |
| 1246 | UX(void) |
| 1247 | { |
| 1248 | |
| 1249 | if (wordflag) |
| 1250 | printf("UNIX\n"); |
| 1251 | else |
| 1252 | printf("UNIX "); |
| 1253 | return(0); |
| 1254 | } |
| 1255 | |
| 1256 | int |
| 1257 | MMHU(pacmac c12) |
| 1258 | { |
| 1259 | int c1, c2; |
| 1260 | |
| 1261 | frommac(c12, c1, c2)(((c1)=((c12)>>8)&0xFF),((c2) =(c12)&0xFF)); |
| 1262 | if (parag) { |
| 1263 | printf(".%c%c", c1, c2); |
| 1264 | while (C( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget(infile ) : (int)(*(infile)->_p++)) : (getc)(infile))) == (-1) ? eof () : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) != '\n') |
| 1265 | putchar(c)(!__isthreaded ? __sputc(c, (&__sF[1])) : (putc)(c, (& __sF[1]))); |
| 1266 | putchar('\n')(!__isthreaded ? __sputc('\n', (&__sF[1])) : (putc)('\n', (&__sF[1]))); |
| 1267 | } else { |
| 1268 | SKIPwhile (( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget (infile) : (int)(*(infile)->_p++)) : (getc)(infile))) == ( -1) ? eof() : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) != '\n'); |
| 1269 | } |
| 1270 | return(0); |
| 1271 | } |
| 1272 | |
| 1273 | int |
| 1274 | mesnblock(pacmac c12) |
| 1275 | { |
| 1276 | int c1, c2; |
| 1277 | |
| 1278 | frommac(c12, c1, c2)(((c1)=((c12)>>8)&0xFF),((c2) =(c12)&0xFF)); |
| 1279 | noblock(')', c2); |
| 1280 | return(0); |
| 1281 | } |
| 1282 | |
| 1283 | int |
| 1284 | mssnblock(pacmac c12) |
| 1285 | { |
| 1286 | int c1, c2; |
| 1287 | |
| 1288 | frommac(c12, c1, c2)(((c1)=((c12)>>8)&0xFF),((c2) =(c12)&0xFF)); |
| 1289 | noblock(c1, 'E'); |
| 1290 | return(0); |
| 1291 | } |
| 1292 | |
| 1293 | int |
| 1294 | nf(void) |
| 1295 | { |
| 1296 | |
| 1297 | noblock('f', 'i'); |
| 1298 | return(0); |
| 1299 | } |
| 1300 | |
| 1301 | int |
| 1302 | ce(void) |
| 1303 | { |
| 1304 | |
| 1305 | sce(); |
| 1306 | return(0); |
| 1307 | } |
| 1308 | |
| 1309 | int |
| 1310 | meip(pacmac c12) |
| 1311 | { |
| 1312 | |
| 1313 | if (parag) |
| 1314 | mepp(c12); |
| 1315 | else if (wordflag) /* save the tag */ |
| 1316 | regline(meputmac, ONE1); |
| 1317 | else |
| 1318 | SKIPwhile (( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget (infile) : (int)(*(infile)->_p++)) : (getc)(infile))) == ( -1) ? eof() : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) != '\n'); |
| 1319 | return(0); |
| 1320 | } |
| 1321 | |
| 1322 | /* |
| 1323 | * only called for -me .pp or .sh, when parag is on |
| 1324 | */ |
| 1325 | int |
| 1326 | mepp(pacmac c12) |
| 1327 | { |
| 1328 | |
| 1329 | PP(c12); /* eats the line */ |
| 1330 | return(0); |
| 1331 | } |
| 1332 | |
| 1333 | /* |
| 1334 | * Start of a section heading; output the section name if doing words |
| 1335 | */ |
| 1336 | int |
| 1337 | mesh(pacmac c12) |
| 1338 | { |
| 1339 | |
| 1340 | if (parag) |
| 1341 | mepp(c12); |
| 1342 | else if (wordflag) |
| 1343 | defcomline(c12); |
| 1344 | else |
| 1345 | SKIPwhile (( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget (infile) : (int)(*(infile)->_p++)) : (getc)(infile))) == ( -1) ? eof() : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) != '\n'); |
| 1346 | return(0); |
| 1347 | } |
| 1348 | |
| 1349 | /* |
| 1350 | * process a font setting |
| 1351 | */ |
| 1352 | int |
| 1353 | mefont(pacmac c12) |
| 1354 | { |
| 1355 | |
| 1356 | argconcat = 1; |
| 1357 | defcomline(c12); |
| 1358 | argconcat = 0; |
| 1359 | return(0); |
| 1360 | } |
| 1361 | |
| 1362 | int |
| 1363 | manfont(pacmac c12) |
| 1364 | { |
| 1365 | |
| 1366 | return(mefont(c12)); |
| 1367 | } |
| 1368 | |
| 1369 | int |
| 1370 | manpp(pacmac c12) |
| 1371 | { |
| 1372 | |
| 1373 | return(mepp(c12)); |
| 1374 | } |
| 1375 | |
| 1376 | void |
| 1377 | defcomline(pacmac c12) |
| 1378 | { |
| 1379 | int c1, c2; |
| 1380 | |
| 1381 | frommac(c12, c1, c2)(((c1)=((c12)>>8)&0xFF),((c2) =(c12)&0xFF)); |
| 1382 | if (msflag && mac == MM1 && c2 == 'L') { |
| 1383 | if (disp || c1 == 'R') { |
| 1384 | noblock('L', 'E'); |
| 1385 | } else { |
| 1386 | SKIPwhile (( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget (infile) : (int)(*(infile)->_p++)) : (getc)(infile))) == ( -1) ? eof() : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) != '\n'); |
| 1387 | putchar('.')(!__isthreaded ? __sputc('.', (&__sF[1])) : (putc)('.', ( &__sF[1]))); |
| 1388 | } |
| 1389 | } |
| 1390 | else if (c1 == '.' && c2 == '.') { |
| 1391 | if (msflag) { |
| 1392 | SKIPwhile (( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget (infile) : (int)(*(infile)->_p++)) : (getc)(infile))) == ( -1) ? eof() : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) != '\n'); |
| 1393 | return; |
| 1394 | } |
| 1395 | while (C( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget(infile ) : (int)(*(infile)->_p++)) : (getc)(infile))) == (-1) ? eof () : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) == '.') |
| 1396 | /*VOID*/; |
| 1397 | } |
| 1398 | ++inmacro; |
| 1399 | /* |
| 1400 | * Process the arguments to the macro |
| 1401 | */ |
| 1402 | switch (mac) { |
| 1403 | default: |
| 1404 | case MM1: |
| 1405 | case MS0: |
| 1406 | if (c1 <= 'Z' && msflag) |
| 1407 | regline(msputmac, ONE1); |
| 1408 | else |
| 1409 | regline(msputmac, TWO2); |
| 1410 | break; |
| 1411 | case ME2: |
| 1412 | regline(meputmac, ONE1); |
| 1413 | break; |
| 1414 | } |
| 1415 | --inmacro; |
| 1416 | } |
| 1417 | |
| 1418 | void |
| 1419 | comline(void) |
| 1420 | { |
| 1421 | int c1; |
| 1422 | int c2; |
| 1423 | pacmac c12; |
| 1424 | int mid; |
| 1425 | int lb, ub; |
| 1426 | int hit; |
| 1427 | static int tabsize = 0; |
| 1428 | static struct mactab *mactab = NULL((void *)0); |
| 1429 | struct mactab *mp; |
| 1430 | |
| 1431 | if (mactab == 0) |
| 1432 | buildtab(&mactab, &tabsize); |
| 1433 | com: |
| 1434 | while (C( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget(infile ) : (int)(*(infile)->_p++)) : (getc)(infile))) == (-1) ? eof () : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) == ' ' || c == '\t') |
| 1435 | ; |
| 1436 | comx: |
| 1437 | if ((c1 = c) == '\n') |
| 1438 | return; |
| 1439 | c2 = C( (c=(!__isthreaded ? (--(infile)->_r < 0 ? __srget(infile ) : (int)(*(infile)->_p++)) : (getc)(infile))) == (-1) ? eof () : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ); |
| 1440 | if (c1 == '.' && c2 != '.') |
| 1441 | inmacro = NO0; |
| 1442 | if (msflag && c1 == '[') { |
| 1443 | refer(c2); |
| 1444 | return; |
| 1445 | } |
| 1446 | if (parag && mac==MM1 && c1 == 'P' && c2 == '\n') { |
| 1447 | printf(".P\n"); |
| 1448 | return; |
| 1449 | } |
| 1450 | if (c2 == '\n') |
| 1451 | return; |
| 1452 | /* |
| 1453 | * Single letter macro |
| 1454 | */ |
| 1455 | if (mac == ME2 && (c2 == ' ' || c2 == '\t') ) |
| 1456 | c2 = ' '; |
| 1457 | c12 = tomac(c1, c2)((((c1) & 0xFF) << 8) | ((c2) & 0xFF)); |
| 1458 | /* |
| 1459 | * binary search through the table of macros |
| 1460 | */ |
| 1461 | lb = 0; |
| 1462 | ub = tabsize - 1; |
| 1463 | while (lb <= ub) { |
| 1464 | mid = (ub + lb) / 2; |
| 1465 | mp = &mactab[mid]; |
| 1466 | if (mp->macname < c12) |
| 1467 | lb = mid + 1; |
| 1468 | else if (mp->macname > c12) |
| 1469 | ub = mid - 1; |
| 1470 | else { |
| 1471 | hit = 1; |
Value stored to 'hit' is never read | |
| 1472 | #ifdef FULLDEBUG |
| 1473 | printf("preliminary hit macro %c%c ", c1, c2); |
| 1474 | #endif /* FULLDEBUG */ |
| 1475 | switch (mp->condition) { |
| 1476 | case NONE0: |
| 1477 | hit = YES1; |
| 1478 | break; |
| 1479 | case FNEST1: |
| 1480 | hit = (filesp == files); |
| 1481 | break; |
| 1482 | case NOMAC2: |
| 1483 | hit = !inmacro; |
| 1484 | break; |
| 1485 | case MAC3: |
| 1486 | hit = inmacro; |
| 1487 | break; |
| 1488 | case PARAG4: |
| 1489 | hit = parag; |
| 1490 | break; |
| 1491 | case NBLK6: |
| 1492 | hit = !keepblock; |
| 1493 | break; |
| 1494 | default: |
| 1495 | hit = 0; |
| 1496 | } |
| 1497 | |
| 1498 | if (hit) { |
| 1499 | #ifdef FULLDEBUG |
| 1500 | printf("MATCH\n"); |
| 1501 | #endif /* FULLDEBUG */ |
| 1502 | switch ((*(mp->func))(c12)) { |
| 1503 | default: |
| 1504 | return; |
| 1505 | case COMX1: |
| 1506 | goto comx; |
| 1507 | case COM2: |
| 1508 | goto com; |
| 1509 | } |
| 1510 | } |
| 1511 | #ifdef FULLDEBUG |
| 1512 | printf("FAIL\n"); |
| 1513 | #endif /* FULLDEBUG */ |
| 1514 | break; |
| 1515 | } |
| 1516 | } |
| 1517 | defcomline(c12); |
| 1518 | } |
| 1519 | |
| 1520 | int |
| 1521 | macsort(const void *p1, const void *p2) |
| 1522 | { |
| 1523 | struct mactab *t1 = (struct mactab *)p1; |
| 1524 | struct mactab *t2 = (struct mactab *)p2; |
| 1525 | |
| 1526 | return(t1->macname - t2->macname); |
| 1527 | } |
| 1528 | |
| 1529 | int |
| 1530 | sizetab(struct mactab *mp) |
| 1531 | { |
| 1532 | int i; |
| 1533 | |
| 1534 | i = 0; |
| 1535 | if (mp) { |
| 1536 | for (; mp->macname; mp++, i++) |
| 1537 | /*VOID*/ ; |
| 1538 | } |
| 1539 | return(i); |
| 1540 | } |
| 1541 | |
| 1542 | struct mactab * |
| 1543 | macfill(struct mactab *dst, struct mactab *src) |
| 1544 | { |
| 1545 | |
| 1546 | if (src) { |
| 1547 | while (src->macname) |
| 1548 | *dst++ = *src++; |
| 1549 | } |
| 1550 | return(dst); |
| 1551 | } |
| 1552 | |
| 1553 | __dead__attribute__((__noreturn__)) void |
| 1554 | usage(void) |
| 1555 | { |
| 1556 | extern char *__progname; |
| 1557 | |
| 1558 | fprintf(stderr(&__sF[2]), "usage: %s [-ikpw] [-m a | e | l | m | s] [file ...]\n", __progname); |
| 1559 | exit(1); |
| 1560 | } |
| 1561 | |
| 1562 | void |
| 1563 | buildtab(struct mactab **r_back, int *r_size) |
| 1564 | { |
| 1565 | int size; |
| 1566 | struct mactab *p, *p1, *p2; |
| 1567 | struct mactab *back; |
| 1568 | |
| 1569 | size = sizetab(troffmactab) + sizetab(ppmactab); |
| 1570 | p1 = p2 = NULL((void *)0); |
| 1571 | if (msflag) { |
| 1572 | switch (mac) { |
| 1573 | case ME2: |
| 1574 | p1 = memactab; |
| 1575 | break; |
| 1576 | case MM1: |
| 1577 | p1 = msmactab; |
| 1578 | p2 = mmmactab; |
| 1579 | break; |
| 1580 | case MS0: |
| 1581 | p1 = msmactab; |
| 1582 | break; |
| 1583 | case MA3: |
| 1584 | p1 = manmactab; |
| 1585 | break; |
| 1586 | default: |
| 1587 | break; |
| 1588 | } |
| 1589 | } |
| 1590 | size += sizetab(p1); |
| 1591 | size += sizetab(p2); |
| 1592 | back = calloc(size+2, sizeof(struct mactab)); |
| 1593 | if (back == NULL((void *)0)) |
| 1594 | err(1, NULL((void *)0)); |
| 1595 | |
| 1596 | p = macfill(back, troffmactab); |
| 1597 | p = macfill(p, ppmactab); |
| 1598 | p = macfill(p, p1); |
| 1599 | p = macfill(p, p2); |
| 1600 | |
| 1601 | qsort(back, size, sizeof(struct mactab), macsort); |
| 1602 | *r_size = size; |
| 1603 | *r_back = back; |
| 1604 | } |
| 1605 | |
| 1606 | /* |
| 1607 | * troff commands |
| 1608 | */ |
| 1609 | struct mactab troffmactab[] = { |
| 1610 | M(NONE, '\\','"', skip){0, (((('\\') & 0xFF) << 8) | (('"') & 0xFF)), skip }, /* comment */ |
| 1611 | M(NOMAC, 'd','e', domacro){2, (((('d') & 0xFF) << 8) | (('e') & 0xFF)), domacro }, /* define */ |
| 1612 | M(NOMAC, 'i','g', domacro){2, (((('i') & 0xFF) << 8) | (('g') & 0xFF)), domacro }, /* ignore till .. */ |
| 1613 | M(NOMAC, 'a','m', domacro){2, (((('a') & 0xFF) << 8) | (('m') & 0xFF)), domacro }, /* append macro */ |
| 1614 | M(NBLK, 'n','f', nf){6, (((('n') & 0xFF) << 8) | (('f') & 0xFF)), nf }, /* filled */ |
| 1615 | M(NBLK, 'c','e', ce){6, (((('c') & 0xFF) << 8) | (('e') & 0xFF)), ce }, /* centered */ |
| 1616 | |
| 1617 | M(NONE, 's','o', so){0, (((('s') & 0xFF) << 8) | (('o') & 0xFF)), so }, /* source a file */ |
| 1618 | M(NONE, 'n','x', nx){0, (((('n') & 0xFF) << 8) | (('x') & 0xFF)), nx }, /* go to next file */ |
| 1619 | |
| 1620 | M(NONE, 't','m', skip){0, (((('t') & 0xFF) << 8) | (('m') & 0xFF)), skip }, /* print string on tty */ |
| 1621 | M(NONE, 'h','w', skip){0, (((('h') & 0xFF) << 8) | (('w') & 0xFF)), skip }, /* exception hyphen words */ |
| 1622 | M(NONE, 0,0, 0){0, ((((0) & 0xFF) << 8) | ((0) & 0xFF)), 0} |
| 1623 | }; |
| 1624 | |
| 1625 | /* |
| 1626 | * Preprocessor output |
| 1627 | */ |
| 1628 | struct mactab ppmactab[] = { |
| 1629 | M(FNEST, 'E','Q', EQ){1, (((('E') & 0xFF) << 8) | (('Q') & 0xFF)), EQ }, /* equation starting */ |
| 1630 | M(FNEST, 'T','S', intbl){1, (((('T') & 0xFF) << 8) | (('S') & 0xFF)), intbl }, /* table starting */ |
| 1631 | M(FNEST, 'T','C', intbl){1, (((('T') & 0xFF) << 8) | (('C') & 0xFF)), intbl }, /* alternative table? */ |
| 1632 | M(FNEST, 'T','&', intbl){1, (((('T') & 0xFF) << 8) | (('&') & 0xFF) ), intbl}, /* table reformatting */ |
| 1633 | M(NONE, 'T','E', outtbl){0, (((('T') & 0xFF) << 8) | (('E') & 0xFF)), outtbl },/* table ending */ |
| 1634 | M(NONE, 'P','S', PS){0, (((('P') & 0xFF) << 8) | (('S') & 0xFF)), PS }, /* picture starting */ |
| 1635 | M(NONE, 0,0, 0){0, ((((0) & 0xFF) << 8) | ((0) & 0xFF)), 0} |
| 1636 | }; |
| 1637 | |
| 1638 | /* |
| 1639 | * Particular to ms and mm |
| 1640 | */ |
| 1641 | struct mactab msmactab[] = { |
| 1642 | M(NONE, 'T','L', skiptocom){0, (((('T') & 0xFF) << 8) | (('L') & 0xFF)), skiptocom }, /* title follows */ |
| 1643 | M(NONE, 'F','S', skiptocom){0, (((('F') & 0xFF) << 8) | (('S') & 0xFF)), skiptocom }, /* start footnote */ |
| 1644 | M(NONE, 'O','K', skiptocom){0, (((('O') & 0xFF) << 8) | (('K') & 0xFF)), skiptocom }, /* Other kws */ |
| 1645 | |
| 1646 | M(NONE, 'N','R', skip){0, (((('N') & 0xFF) << 8) | (('R') & 0xFF)), skip }, /* undocumented */ |
| 1647 | M(NONE, 'N','D', skip){0, (((('N') & 0xFF) << 8) | (('D') & 0xFF)), skip }, /* use supplied date */ |
| 1648 | |
| 1649 | M(PARAG, 'P','P', PP){4, (((('P') & 0xFF) << 8) | (('P') & 0xFF)), PP }, /* begin parag */ |
| 1650 | M(PARAG, 'I','P', PP){4, (((('I') & 0xFF) << 8) | (('P') & 0xFF)), PP }, /* begin indent parag, tag x */ |
| 1651 | M(PARAG, 'L','P', PP){4, (((('L') & 0xFF) << 8) | (('P') & 0xFF)), PP }, /* left blocked parag */ |
| 1652 | |
| 1653 | M(NONE, 'A','U', AU){0, (((('A') & 0xFF) << 8) | (('U') & 0xFF)), AU }, /* author */ |
| 1654 | M(NONE, 'A','I', AU){0, (((('A') & 0xFF) << 8) | (('I') & 0xFF)), AU }, /* authors institution */ |
| 1655 | |
| 1656 | M(NONE, 'S','H', SH){0, (((('S') & 0xFF) << 8) | (('H') & 0xFF)), SH }, /* section heading */ |
| 1657 | M(NONE, 'S','N', SH){0, (((('S') & 0xFF) << 8) | (('N') & 0xFF)), SH }, /* undocumented */ |
| 1658 | M(NONE, 'U','X', UX){0, (((('U') & 0xFF) << 8) | (('X') & 0xFF)), UX }, /* unix */ |
| 1659 | |
| 1660 | M(NBLK, 'D','S', mssnblock){6, (((('D') & 0xFF) << 8) | (('S') & 0xFF)), mssnblock }, /* start display text */ |
| 1661 | M(NBLK, 'K','S', mssnblock){6, (((('K') & 0xFF) << 8) | (('S') & 0xFF)), mssnblock }, /* start keep */ |
| 1662 | M(NBLK, 'K','F', mssnblock){6, (((('K') & 0xFF) << 8) | (('F') & 0xFF)), mssnblock }, /* start float keep */ |
| 1663 | M(NONE, 0,0, 0){0, ((((0) & 0xFF) << 8) | ((0) & 0xFF)), 0} |
| 1664 | }; |
| 1665 | |
| 1666 | struct mactab mmmactab[] = { |
| 1667 | M(NONE, 'H',' ', MMHU){0, (((('H') & 0xFF) << 8) | ((' ') & 0xFF)), MMHU }, /* -mm ? */ |
| 1668 | M(NONE, 'H','U', MMHU){0, (((('H') & 0xFF) << 8) | (('U') & 0xFF)), MMHU }, /* -mm ? */ |
| 1669 | M(PARAG, 'P',' ', PP){4, (((('P') & 0xFF) << 8) | ((' ') & 0xFF)), PP }, /* paragraph for -mm */ |
| 1670 | M(NBLK, 'N','S', mssnblock){6, (((('N') & 0xFF) << 8) | (('S') & 0xFF)), mssnblock }, /* undocumented */ |
| 1671 | M(NONE, 0,0, 0){0, ((((0) & 0xFF) << 8) | ((0) & 0xFF)), 0} |
| 1672 | }; |
| 1673 | |
| 1674 | struct mactab memactab[] = { |
| 1675 | M(PARAG, 'p','p', mepp){4, (((('p') & 0xFF) << 8) | (('p') & 0xFF)), mepp }, |
| 1676 | M(PARAG, 'l','p', mepp){4, (((('l') & 0xFF) << 8) | (('p') & 0xFF)), mepp }, |
| 1677 | M(PARAG, 'n','p', mepp){4, (((('n') & 0xFF) << 8) | (('p') & 0xFF)), mepp }, |
| 1678 | M(NONE, 'i','p', meip){0, (((('i') & 0xFF) << 8) | (('p') & 0xFF)), meip }, |
| 1679 | |
| 1680 | M(NONE, 's','h', mesh){0, (((('s') & 0xFF) << 8) | (('h') & 0xFF)), mesh }, |
| 1681 | M(NONE, 'u','h', mesh){0, (((('u') & 0xFF) << 8) | (('h') & 0xFF)), mesh }, |
| 1682 | |
| 1683 | M(NBLK, '(','l', mesnblock){6, (((('(') & 0xFF) << 8) | (('l') & 0xFF)), mesnblock }, |
| 1684 | M(NBLK, '(','q', mesnblock){6, (((('(') & 0xFF) << 8) | (('q') & 0xFF)), mesnblock }, |
| 1685 | M(NBLK, '(','b', mesnblock){6, (((('(') & 0xFF) << 8) | (('b') & 0xFF)), mesnblock }, |
| 1686 | M(NBLK, '(','z', mesnblock){6, (((('(') & 0xFF) << 8) | (('z') & 0xFF)), mesnblock }, |
| 1687 | M(NBLK, '(','c', mesnblock){6, (((('(') & 0xFF) << 8) | (('c') & 0xFF)), mesnblock }, |
| 1688 | |
| 1689 | M(NBLK, '(','d', mesnblock){6, (((('(') & 0xFF) << 8) | (('d') & 0xFF)), mesnblock }, |
| 1690 | M(NBLK, '(','f', mesnblock){6, (((('(') & 0xFF) << 8) | (('f') & 0xFF)), mesnblock }, |
| 1691 | M(NBLK, '(','x', mesnblock){6, (((('(') & 0xFF) << 8) | (('x') & 0xFF)), mesnblock }, |
| 1692 | |
| 1693 | M(NONE, 'r',' ', mefont){0, (((('r') & 0xFF) << 8) | ((' ') & 0xFF)), mefont }, |
| 1694 | M(NONE, 'i',' ', mefont){0, (((('i') & 0xFF) << 8) | ((' ') & 0xFF)), mefont }, |
| 1695 | M(NONE, 'b',' ', mefont){0, (((('b') & 0xFF) << 8) | ((' ') & 0xFF)), mefont }, |
| 1696 | M(NONE, 'u',' ', mefont){0, (((('u') & 0xFF) << 8) | ((' ') & 0xFF)), mefont }, |
| 1697 | M(NONE, 'q',' ', mefont){0, (((('q') & 0xFF) << 8) | ((' ') & 0xFF)), mefont }, |
| 1698 | M(NONE, 'r','b', mefont){0, (((('r') & 0xFF) << 8) | (('b') & 0xFF)), mefont }, |
| 1699 | M(NONE, 'b','i', mefont){0, (((('b') & 0xFF) << 8) | (('i') & 0xFF)), mefont }, |
| 1700 | M(NONE, 'b','x', mefont){0, (((('b') & 0xFF) << 8) | (('x') & 0xFF)), mefont }, |
| 1701 | M(NONE, 0,0, 0){0, ((((0) & 0xFF) << 8) | ((0) & 0xFF)), 0} |
| 1702 | }; |
| 1703 | |
| 1704 | struct mactab manmactab[] = { |
| 1705 | M(PARAG, 'B','I', manfont){4, (((('B') & 0xFF) << 8) | (('I') & 0xFF)), manfont }, |
| 1706 | M(PARAG, 'B','R', manfont){4, (((('B') & 0xFF) << 8) | (('R') & 0xFF)), manfont }, |
| 1707 | M(PARAG, 'I','B', manfont){4, (((('I') & 0xFF) << 8) | (('B') & 0xFF)), manfont }, |
| 1708 | M(PARAG, 'I','R', manfont){4, (((('I') & 0xFF) << 8) | (('R') & 0xFF)), manfont }, |
| 1709 | M(PARAG, 'R','B', manfont){4, (((('R') & 0xFF) << 8) | (('B') & 0xFF)), manfont }, |
| 1710 | M(PARAG, 'R','I', manfont){4, (((('R') & 0xFF) << 8) | (('I') & 0xFF)), manfont }, |
| 1711 | |
| 1712 | M(PARAG, 'P','P', manpp){4, (((('P') & 0xFF) << 8) | (('P') & 0xFF)), manpp }, |
| 1713 | M(PARAG, 'L','P', manpp){4, (((('L') & 0xFF) << 8) | (('P') & 0xFF)), manpp }, |
| 1714 | M(PARAG, 'H','P', manpp){4, (((('H') & 0xFF) << 8) | (('P') & 0xFF)), manpp }, |
| 1715 | M(NONE, 0,0, 0){0, ((((0) & 0xFF) << 8) | ((0) & 0xFF)), 0} |
| 1716 | }; |