8322 nl: misleading-indentation
[unleashed/tickless.git] / usr / src / cmd / troff / tdef.h
blob3d989920c67f0be3b69c50b36971af7f2e2ec4b1
1 /*
2 * CDDL HEADER START
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License, Version 1.0 only
6 * (the "License"). You may not use this file except in compliance
7 * with the License.
9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10 * or http://www.opensolaris.org/os/licensing.
11 * See the License for the specific language governing permissions
12 * and limitations under the License.
14 * When distributing Covered Code, include this CDDL HEADER in each
15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16 * If applicable, add the following below this CDDL HEADER, with the
17 * fields enclosed by brackets "[]" replaced with your own identifying
18 * information: Portions Copyright [yyyy] [name of copyright owner]
20 * CDDL HEADER END
23 * Copyright 2003 Sun Microsystems, Inc. All rights reserved.
24 * Use is subject to license terms.
27 /* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */
28 /* All Rights Reserved */
31 * University Copyright- Copyright (c) 1982, 1986, 1988
32 * The Regents of the University of California
33 * All Rights Reserved
35 * University Acknowledgment- Portions of this document are derived from
36 * software developed by the University of California, Berkeley, and its
37 * contributors.
40 #pragma ident "%Z%%M% %I% %E% SMI"
42 /* starting values for typesetting parameters: */
44 #define PS 10 /* default point size */
45 #define FT 1 /* default font position */
46 #define ULFONT 2 /* default underline font */
47 #define BDFONT 3 /* default emboldening font */
48 #define BIFONT 4 /* default bold italic font */
49 #define LL (unsigned) 65*INCH/10 /* line length; 39picas=6.5in */
50 #define VS ((12*INCH)/72) /* initial vert space */
52 #ifdef NROFF
53 # define EM t.Em
54 # define HOR t.Adj
55 # define VERT t.Vert
56 # define INCH 240 /* increments per inch */
57 # define SPS INCH/10 /* space size */
58 # define SS INCH/10 /* " */
59 # define TRAILER 0
60 # define PO 0 /* page offset */
61 # define ASCII 1
62 # define PTID 1
63 # define LG 0
64 # define DTAB 0 /* set at 8 Ems at init time */
65 # define ICS 2*SPS
66 #endif
67 #ifndef NROFF /* TROFF */
68 /* Inch is set by ptinit() when troff started. */
69 /* all derived values set then too
71 # define INCH Inch /* troff resolution -- number of goobies/inch */
72 # define POINT (INCH/72) /* goobies per point (1/72 inch) */
73 # define HOR Hor /* horizontal resolution in goobies */
74 # define VERT Vert /* vertical resolution in goobies */
75 # define SPS (EM/3) /* space size */
76 # define SS 12 /* space size in 36ths of an em */
77 # define PO (INCH) /* page offset 1 inch */
78 /* # define EM (POINT * pts) */
79 #define EM (((long) INCH * pts + 36) / 72) /* don't lose significance */
80 #define EMPTS(pts) (((long) INCH * (pts) + 36) / 72)
81 # define ASCII 0
82 # define PTID 1
83 # define LG 1
84 # define DTAB (INCH/2)
85 # define ICS 3*SPS
86 #endif
88 /* These "characters" are used to encode various internal functions
89 * Some make use of the fact that most ascii characters between
90 * 0 and 040 don't have any graphic or other function.
91 * The few that do have a purpose (e.g., \n, \b, \t, ...
92 * are avoided by the ad hoc choices here.
93 * See ifilt[] in n1.c for others -- 1, 2, 3, 5, 6, 7, 010, 011, 012
96 #define LEADER 001
97 #define IMP 004 /* impossible char; glues things together */
98 #define TAB 011
99 #define RPT 014 /* next character is to be repeated many times */
100 #define CHARHT 015 /* size field sets character height */
101 #define SLANT 016 /* size field sets amount of slant */
102 #define DRAWFCN 017 /* next several chars describe arb drawing fcn */
103 /* line: 'l' dx dy char */
104 /* circle: 'c' r */
105 /* ellipse: 'e' rx ry */
106 /* arc: 'a' dx dy r */
107 /* wiggly line '~' x y x y ... */
108 #define DRAWLINE 'l'
109 #define DRAWCIRCLE 'c' /* circle */
110 #define DRAWELLIPSE 'e'
111 #define DRAWARC 'a' /* arbitrary arc */
112 #define DRAWSPLINE '~' /* quadratic B spline */
114 #define LEFT 020 /* \{ */
115 #define RIGHT 021 /* \} */
116 #define FILLER 022 /* \& and similar purposes */
117 #define XON 023 /* \X'...' starts here */
118 #define OHC 024 /* optional hyphenation character \% */
119 #define CONT 025 /* \c character */
120 #define PRESC 026 /* printable escape */
121 #define UNPAD 027 /* unpaddable blank */
122 #define XPAR 030 /* transparent mode indicator */
123 #define FLSS 031
124 #define WORDSP 032 /* paddable word space */
125 #define ESC 033
126 #define XOFF 034 /* \X'...' ends here */
128 #define iscontrol(n) (n==035 || n==036) /* used to test the next two */
129 #define HX 035 /* next character is value of \x'...' */
130 #define FONTPOS 036 /* position of font \f(XX encoded in top */
132 #define HYPHEN c_hyphen
133 #define EMDASH c_emdash /* \(em */
134 #define RULE c_rule /* \(ru */
135 #define MINUS c_minus /* minus sign on current font */
136 #define LIG_FI c_fi /* \(ff */
137 #define LIG_FL c_fl /* \(fl */
138 #define LIG_FF c_ff /* \(ff */
139 #define LIG_FFI c_ffi /* \(Fi */
140 #define LIG_FFL c_ffl /* \(Fl */
141 #define ACUTE c_acute /* acute accent \(aa */
142 #define GRAVE c_grave /* grave accent \(ga */
143 #define UNDERLINE c_under /* \(ul */
144 #define ROOTEN c_rooten /* root en \(rn */
145 #define BOXRULE c_boxrule /* box rule \(br */
146 #define LEFTHAND c_lefthand /* left hand for word overflow */
147 #define DAGGER c_dagger /* dagger for footnotes */
149 /* array sizes, and similar limits: */
151 #define NFONT 10 /* maximum number of fonts (including specials) */
152 #define EXTRAFONT 500 /* extra space for swapping a font */
153 #define NN 400 /* number registers */
154 #define NNAMES 15 /* predefined reg names */
155 #define NIF 15 /* if-else nesting */
156 #define NS 128 /* name buffer */
157 #define NTM 256 /* tm buffer */
158 #define NEV 3 /* environments */
159 #define EVLSZ 10 /* size of ev stack */
160 #define DSIZE 512 /* disk sector size in chars */
162 #define NM 500 /* requests + macros */
163 #define DELTA 1024 /* delta core bytes */
164 #define NHYP 10 /* max hyphens per word */
165 #define NHEX 128 /* byte size of exception word list */
166 #define NTAB 40 /* tab stops */
167 #define NSO 5 /* "so" depth */
168 #define NMF 5 /* number of -m flags */
169 #define WDSIZE 540 /* word buffer size */
170 #define LNSIZE 680 /* line buffer size */
171 #define NDI 5 /* number of diversions */
172 #define NCHARS 512 /* maximum size of troff character set */
173 #define NTRTAB NCHARS /* number of items in trtab[] */
174 #define NWIDCACHE NCHARS /* number of items in widcache */
175 #define NTRAP 20 /* number of traps */
176 #define NPN 20 /* numbers in "-o" */
177 #define FBUFSZ 256 /* field buf size words */
178 #define OBUFSZ 4096 /* bytes */
179 #define IBUFSZ 4096 /* bytes */
180 #define NC 1024 /* cbuf size words */
181 #define NOV 10 /* number of overstrike chars */
182 #define NPP 10 /* pads per field */
185 Internal character representation:
186 Internally, every character is carried around as
187 a 32 bit cookie, called a "tchar" (typedef long).
188 Bits are numbered 31..0 from left to right.
189 If bit 15 is 1, the character is motion, with
190 if bit 16 it's vertical motion
191 if bit 17 it's negative motion
192 If bit 15 is 0, the character is a real character.
193 if bit 31 zero motion
194 bits 30..24 size
195 bits 23..16 font
196 ifndef EUC
197 bit 8 absolute char number in 7..0
198 This implies at most 256-32 characters in a single font,
199 which is going to be a problem somewhere
200 else
201 bits 14,13 identifier for the colunm of print of character.
202 bits 12,11 multibyte position identifier
203 Currently, this applies only to nroff.
204 endif EUC
207 /* in the following, "L" should really be a tchar, but ... */
209 #define MOT (01L<<15) /* motion character indicator */
210 #define MOTV (07L<<15) /* clear for motion part */
211 #define VMOT (01L<<16) /* vert motion bit */
212 #define NMOT (01L<<17) /* negative motion indicator*/
213 #define MAXMOT 32767 /* bad way to write this!!! */
214 #define ismot(n) ((n) & MOT)
215 #define isvmot(n) ((n) & VMOT) /* must have tested MOT previously */
216 #define isnmot(n) ((n) & NMOT) /* ditto */
217 #define absmot(n) (unsigned)(0177777 & (n) & ~MOT) /* (short) is cheap mask */
219 #define ZBIT 0x80000000 /* (01L << 31) */ /* zero width char */
220 #define iszbit(n) ((n) & ZBIT)
221 #define ABSCHAR 0400 /* absolute char number in this font */
223 #define SMASK (0177L << 24)
224 #define FMASK (0377L << 16)
225 #define SFMASK (SMASK|FMASK) /* size and font in a tchar */
226 #define sbits(n) (unsigned)(((n) >> 24) & 0177)
227 #define fbits(n) (((n) >> 16) & 0377)
228 #define sfbits(n) (unsigned)(0177777 & (((n) & SFMASK) >> 16))
229 #define cbits(n) (unsigned)(0177777 & (n)) /* isolate bottom 16 bits */
230 #define absbits(n) (cbits(n) & ~ABSCHAR)
232 #define setsbits(n,s) n = (n & ~SMASK) | (tchar)(s) << 24
233 #define setfbits(n,f) n = (n & ~FMASK) | (tchar)(f) << 16
234 #define setsfbits(n,sf) n = (n & ~SFMASK) | (tchar)(sf) << 16
235 #define setcbits(n,c) n = (n & ~077777L | (c)) /* set character bits */
237 #define BYTEMASK 0377
238 #define BYTE 8
240 #define ischar(n) (((n) & ~BYTEMASK) == 0)
242 #ifdef EUC
243 #ifdef NROFF
244 #define CSMASK 0x6000 /* colunm of print identifier */
245 #define MBMASK 0x1c00 /* bits identifying position in a multibyte char */
246 #define MBMASK1 0x1800
247 #define FIRSTOFMB 0x1000
248 #define MIDDLEOFMB 0x0800
249 #define LASTOFMB 0x0400
250 #define BYTE_CHR 0x0000
251 #define cs(n) (((n) & CSMASK) >> 13) /* colum of print of character */
252 #define setcsbits(n,c) n = ((n & ~CSMASK) | ((c) << 13))
253 #define CHMASK (BYTEMASK | CSMASK | MBMASK)
254 #define ZWDELIM1 ZBIT | FIRSTOFMB | ' ' /* non-ASCII word delimiter 1 */
255 #define ZWDELIM2 ZBIT | MIDDLEOFMB | ' ' /* non-ASCII word delimiter 2 */
256 #define ZWDELIM(c) ((c) == 0) ? ' ' : ((c) == 1) ? ZWDELIM1 : ZWDELIM2
257 #endif /* NROFF */
258 #endif /* EUC */
260 #define ZONE 5 /* 5 hrs for EST */
261 #define TABMASK 037777
262 #define RTAB (unsigned) 0100000
263 #define CTAB 040000
265 #define TABBIT 02 /* bits in gchtab */
266 #define LDRBIT 04
267 #define FCBIT 010
269 #define PAIR(A,B) (A|(B<<BYTE))
271 #ifndef EUC
272 #define oput(c) if ((*obufp++ = (c)), obufp >= &obuf[OBUFSZ]) flusho(); else
273 #else
274 #ifndef NROFF
275 #define oput(c) if ((*obufp++ = (c)), obufp >= &obuf[OBUFSZ]) flusho(); else
276 #endif /* NROFF */
277 #define oput(c) if ((*obufp++ = cbits(c) & BYTEMASK), obufp >= &obuf[OBUFSZ]) flusho(); else
278 #endif /* EUC */
281 * "temp file" parameters. macros and strings
282 * are stored in an array of linked blocks,
283 * which may be in memory and an array called
284 * corebuf[], if INCORE is set during
285 * compilation, or otherwise in a file called trtmp$$.
287 * The numerology is delicate if filep is 16 bits:
288 #define BLK 128
289 #define NBLIST 512
290 * i.e., the product is 16 bits long.
292 * If filep is an unsigned long (and if your
293 * compiler will let you say that) then NBLIST
294 * can be a lot bigger. Of course that makes
295 * the file or core image a lot bigger too,
296 * and means you don't detect missing diversion
297 * terminations as quickly... .
298 * It also means that you may have trouble running
299 * on non-swapping systems, since the core image
300 * will be over 1Mb.
302 * BLK must be a power of 2
305 typedef unsigned int filep; /* this is good for 32 bit machines */
307 #define BLK 128 /* alloc block in tchars */
309 #ifdef SMALLER
310 # define NBLIST 512
311 #else
312 # define NBLIST 1024 /* allocation list. smallish machines use 512 */
313 /* machines with paging can use 2048 */
314 #endif
316 /* Other things are stored in the temp file or corebuf:
317 * a single block for .rd input, at offset RD_OFFSET
318 * NEV copies of the environment block, at offset ENV_OFFSET
320 * The existing implementation assumes very strongly that
321 * these are respectively NBLIST*BLK and 0.
325 #define RD_OFFSET (NBLIST * BLK)
326 #define ENV_OFFSET 0
327 #define ENV_BLK ((NEV * sizeof(env) / sizeof(tchar) + BLK-1) / BLK)
328 /* rounded up to even BLK */
330 typedef long tchar;
332 extern tchar getch(), getch0();
333 extern tchar rbf(), rbf0();
334 extern tchar mot(), hmot(), vmot();
335 extern tchar makem(), sethl();
336 extern tchar popi();
337 extern tchar getlg();
338 extern tchar xlss();
339 extern tchar setfield();
340 extern tchar setz();
341 extern tchar setch();
342 extern tchar setht(), setslant();
344 #define atoi(i) ((int) atoi0(i))
345 extern long atoi0();
347 extern int Inch, Hor, Vert, Unitwidth;
349 /* these characters are used as various signals or values
350 * in miscellaneous places.
351 * values are set in specnames in t10.c
354 extern int c_hyphen;
355 extern int c_emdash;
356 extern int c_rule;
357 extern int c_minus;
358 extern int c_fi;
359 extern int c_fl;
360 extern int c_ff;
361 extern int c_ffi;
362 extern int c_ffl;
363 extern int c_acute;
364 extern int c_grave;
365 extern int c_under;
366 extern int c_rooten;
367 extern int c_boxrule;
368 extern int c_lefthand;
369 extern int c_dagger;
372 * <widec.h> includes <stdio.h> which defines
373 * stderr. So undef it if it is already defined.
375 #ifdef stderr
376 # undef stderr
377 #endif
378 extern int stderr; /* this is NOT the stdio value! */
380 #ifdef DEBUG
381 extern int debug; /*debug flag*/
382 #define DB_MAC 01 /*print out macro calls*/
383 #define DB_ALLC 02 /*print out message from alloc()*/
384 #define DB_GETC 04 /*print out message from getch()*/
385 #define DB_LOOP 010 /*print out message before "Eileen's loop" fix*/
386 #endif /* DEBUG */
388 struct d { /* diversion */
389 filep op;
390 int dnl;
391 int dimac;
392 int ditrap;
393 int ditf;
394 int alss;
395 int blss;
396 int nls;
397 int mkline;
398 int maxl;
399 int hnl;
400 int curd;
403 struct s { /* stack frame */
404 int nargs;
405 struct s *pframe;
406 filep pip;
407 int pnchar;
408 tchar prchar;
409 int ppendt;
410 tchar pch;
411 tchar *lastpbp;
412 int mname;
415 extern struct contab {
416 unsigned short rq;
417 struct contab *link;
418 int (*f)();
419 unsigned mx;
420 } contab[NM];
422 extern struct numtab {
423 short r; /* name */
424 short fmt;
425 short inc;
426 int val;
427 struct numtab *link;
428 } numtab[NN];
430 #define PN 0
431 #define NL 1
432 #define YR 2
433 #define HP 3
434 #define CT 4
435 #define DN 5
436 #define MO 6
437 #define DY 7
438 #define DW 8
439 #define LN 9
440 #define DL 10
441 #define ST 11
442 #define SB 12
443 #define CD 13
444 #define PID 14
446 /* the infamous environment block */
448 #define ics env._ics
449 #define sps env._sps
450 #define spacesz env._spacesz
451 #define lss env._lss
452 #define lss1 env._lss1
453 #define ll env._ll
454 #define ll1 env._ll1
455 #define lt env._lt
456 #define lt1 env._lt1
457 #define ic env._ic
458 #define icf env._icf
459 #define chbits env._chbits
460 #define spbits env._spbits
461 #define nmbits env._nmbits
462 #define apts env._apts
463 #define apts1 env._apts1
464 #define pts env._pts
465 #define pts1 env._pts1
466 #define font env._font
467 #define font1 env._font1
468 #define ls env._ls
469 #define ls1 env._ls1
470 #define ad env._ad
471 #define nms env._nms
472 #define ndf env._ndf
473 #define fi env._fi
474 #define cc env._cc
475 #define c2 env._c2
476 #define ohc env._ohc
477 #define tdelim env._tdelim
478 #define hyf env._hyf
479 #define hyoff env._hyoff
480 #define un1 env._un1
481 #define tabc env._tabc
482 #define dotc env._dotc
483 #define adsp env._adsp
484 #define adrem env._adrem
485 #define lastl env._lastl
486 #define nel env._nel
487 #define admod env._admod
488 #define wordp env._wordp
489 #define spflg env._spflg
490 #define linep env._linep
491 #define wdend env._wdend
492 #define wdstart env._wdstart
493 #define wne env._wne
494 #define ne env._ne
495 #define nc env._nc
496 #define nb env._nb
497 #define lnmod env._lnmod
498 #define nwd env._nwd
499 #define nn env._nn
500 #define ni env._ni
501 #define ul env._ul
502 #define cu env._cu
503 #define ce env._ce
504 #define in env._in
505 #define in1 env._in1
506 #define un env._un
507 #define wch env._wch
508 #define pendt env._pendt
509 #define pendw env._pendw
510 #define pendnf env._pendnf
511 #define spread env._spread
512 #define it env._it
513 #define itmac env._itmac
514 #define lnsize env._lnsize
515 #define hyptr env._hyptr
516 #define tabtab env._tabtab
517 #define line env._line
518 #define word env._word
520 extern struct env {
521 int _ics;
522 int _sps;
523 int _spacesz;
524 int _lss;
525 int _lss1;
526 int _ll;
527 int _ll1;
528 int _lt;
529 int _lt1;
530 tchar _ic;
531 int _icf;
532 tchar _chbits;
533 tchar _spbits;
534 tchar _nmbits;
535 int _apts;
536 int _apts1;
537 int _pts;
538 int _pts1;
539 int _font;
540 int _font1;
541 int _ls;
542 int _ls1;
543 int _ad;
544 int _nms;
545 int _ndf;
546 int _fi;
547 int _cc;
548 int _c2;
549 int _ohc;
550 int _tdelim;
551 int _hyf;
552 int _hyoff;
553 int _un1;
554 int _tabc;
555 int _dotc;
556 int _adsp;
557 int _adrem;
558 int _lastl;
559 int _nel;
560 int _admod;
561 tchar *_wordp;
562 int _spflg;
563 tchar *_linep;
564 tchar *_wdend;
565 tchar *_wdstart;
566 int _wne;
567 int _ne;
568 int _nc;
569 int _nb;
570 int _lnmod;
571 int _nwd;
572 int _nn;
573 int _ni;
574 int _ul;
575 int _cu;
576 int _ce;
577 int _in;
578 int _in1;
579 int _un;
580 int _wch;
581 int _pendt;
582 tchar *_pendw;
583 int _pendnf;
584 int _spread;
585 int _it;
586 int _itmac;
587 int _lnsize;
588 tchar *_hyptr[NHYP];
589 int _tabtab[NTAB];
590 tchar _line[LNSIZE];
591 tchar _word[WDSIZE];
592 } env;