1#include "defs.h"
2
3#ifndef NULL
4#define NULL	((void *) 0)
5#endif
6
7int nroff = 1;
8
9#define NROFF (-666)
10#define TROFF (-667)
11
12STRDEF *chardef, *strdef, *defdef;
13INTDEF *intdef;
14
15static INTDEF standardint[] = {
16    { V('n',' '), NROFF, 0, NULL },
17    { V('t',' '), TROFF, 0, NULL },
18    { V('o',' '), 1,     0, NULL },
19    { V('e',' '), 0,     0, NULL },
20    { V('.','l'), 70,    0, NULL },
21    { V('.','$'), 0,     0, NULL },
22    { V('.','A'), NROFF, 0, NULL },
23    { V('.','T'), TROFF, 0, NULL },
24    { V('.','V'), 1,     0, NULL }, /* the me package tests for this */
25    { 0, 0, 0, NULL } };
26
27static STRDEF standardstring[] = {
28    { V('R',' '), 1, "®", NULL },
29    { V('l','q'), 2, "``", NULL },
30    { V('r','q'), 2, "''", NULL },
31    { 0, 0, NULL, NULL}
32};
33
34
35static STRDEF standardchar[] = {
36    { V('*','*'), 1, "*", NULL  },	/* math star */
37    { V('*','A'), 1, "A", NULL  },
38    { V('*','B'), 1, "B", NULL  },
39    { V('*','C'), 2, "Xi", NULL  },
40    { V('*','D'), 5, "Delta", NULL  },
41    { V('*','E'), 1, "E", NULL  },
42    { V('*','F'), 3, "Phi", NULL  },
43    { V('*','G'), 5, "Gamma", NULL  },
44    { V('*','H'), 5, "Theta", NULL  },
45    { V('*','I'), 1, "I", NULL  },
46    { V('*','K'), 1, "K", NULL  },
47    { V('*','L'), 6, "Lambda", NULL  },
48    { V('*','M'), 1, "M", NULL  },
49    { V('*','N'), 1, "N", NULL  },
50    { V('*','O'), 1, "O", NULL  },
51    { V('*','P'), 2, "Pi", NULL  },
52    { V('*','Q'), 3, "Psi", NULL  },
53    { V('*','R'), 1, "P", NULL  },
54    { V('*','S'), 5, "Sigma", NULL  },
55    { V('*','T'), 1, "T", NULL  },
56    { V('*','U'), 1, "Y", NULL  },
57    { V('*','W'), 5, "Omega", NULL  },
58    { V('*','X'), 1, "X", NULL  },
59    { V('*','Y'), 1, "H", NULL  },
60    { V('*','Z'), 1, "Z", NULL  },
61    { V('*','a'), 5, "alpha", NULL },
62    { V('*','b'), 4, "beta", NULL },
63    { V('*','c'), 2, "xi", NULL },
64    { V('*','d'), 5, "delta", NULL },
65    { V('*','e'), 7, "epsilon", NULL },
66    { V('*','f'), 3, "phi", NULL },
67    { V('*','g'), 5, "gamma", NULL },
68    { V('*','h'), 5, "theta", NULL },
69    { V('*','i'), 4, "iota", NULL },
70    { V('*','k'), 5, "kappa", NULL },
71    { V('*','l'), 6, "lambda", NULL },
72    { V('*','m'), 1, "µ", NULL  },
73    { V('*','n'), 2, "nu", NULL },
74    { V('*','o'), 1, "o", NULL },
75    { V('*','p'), 2, "pi", NULL },
76    { V('*','q'), 3, "psi", NULL },
77    { V('*','r'), 3, "rho", NULL },
78    { V('*','s'), 5, "sigma", NULL },
79    { V('*','t'), 3, "tau", NULL },
80    { V('*','u'), 7, "upsilon", NULL },
81    { V('*','w'), 5, "omega", NULL },
82    { V('*','x'), 3, "chi", NULL },
83    { V('*','y'), 3, "eta", NULL },
84    { V('*','z'), 4, "zeta", NULL },
85    { V('+','-'), 1, "±", NULL  },
86    { V('1','2'), 1, "½", NULL  },
87    { V('1','4'), 1, "¼", NULL  },
88    { V('3','4'), 1, "¾", NULL  },
89    { V('F','i'), 3, "ffi", NULL  },
90    { V('F','l'), 3, "ffl", NULL  },
91    { V('a','a'), 1, "´", NULL  },
92    { V('a','p'), 1, "~", NULL  },
93    { V('b','r'), 1, "|", NULL  },
94    { V('b','u'), 1, "*", NULL  }, 	/* bullet */
95    { V('b','v'), 1, "|", NULL  },
96    { V('c','i'), 1, "o", NULL  }, 	/* circle */
97    { V('c','o'), 1, "©", NULL  },
98    { V('c','t'), 1, "¢", NULL  },
99    { V('d','e'), 1, "°", NULL  },
100    { V('d','g'), 1, "+", NULL  }, 	/* dagger */
101    { V('d','i'), 1, "÷", NULL  },
102    { V('e','m'), 3, "---", NULL  }, 	/* em dash */
103    { V('e','n'), 1, "-", NULL }, 	/* en dash */
104    { V('e','q'), 1, "=", NULL  },
105    { V('e','s'), 1, "Ø", NULL  },
106    { V('f','f'), 2, "ff", NULL  },
107    { V('f','i'), 2, "fi", NULL  },
108    { V('f','l'), 2, "fl", NULL  },
109    { V('f','m'), 1, "´", NULL  },
110    { V('g','a'), 1, "`", NULL  },
111    { V('h','y'), 1, "-", NULL  },
112    { V('l','c'), 2, "|¯", NULL  },
113    { V('i','f'), 8, "Infinity", NULL }, /* infinity sign */
114    { V('i','s'), 8, "Integral", NULL }, /* integral sign */
115    { V('l','f'), 2, "|_", NULL  },
116    { V('l','k'), 1, "<FONT SIZE=\"+2\">{</FONT>", NULL  },
117    { V('m','i'), 1, "-", NULL  },
118    { V('m','u'), 1, "&#215;", NULL  },
119    { V('n','o'), 1, "&#172;", NULL  },
120    { V('o','r'), 1, "|", NULL  },
121    { V('p','d'), 1, "d", NULL }, 	/* partial derivative */
122    { V('p','l'), 1, "+", NULL  },
123    { V('r','c'), 2, "&#175;|", NULL  },
124    { V('r','f'), 2, "_|", NULL  },
125    { V('r','g'), 1, "&#174;", NULL  },
126    { V('r','k'), 1, "<FONT SIZE=\"+2\">}</FONT>", NULL  },
127    { V('r','n'), 1, "&#175;", NULL  },
128    { V('r','u'), 1, "_", NULL  },
129    { V('s','c'), 1, "&#167;", NULL  },
130    { V('s','l'), 1, "/", NULL  },
131    { V('s','q'), 2, "[]", NULL  },
132    { V('t','s'), 1, "s", NULL }, 	/* should be terminal sigma */
133    { V('u','l'), 1, "_", NULL  },
134    { V('>','='), 1, "&gt;", NULL },
135    { V('<','='), 1, "&lt;", NULL },
136    { 0, 0, NULL, NULL  }
137};
138
139void stdinit(void) {
140    STRDEF *stdf;
141    int i;
142
143    stdf = &standardchar[0];
144    i = 0;
145    while (stdf->nr) {
146	if (stdf->st) stdf->st = xstrdup(stdf->st);
147	stdf->next = &standardchar[i];
148	stdf = stdf->next;
149	i++;
150    }
151    chardef=&standardchar[0];
152
153    stdf=&standardstring[0];
154    i=0;
155    while (stdf->nr) {
156	 /* waste a little memory, and make a copy, to avoid
157	    the segfault when we free non-malloced memory */
158	if (stdf->st) stdf->st = xstrdup(stdf->st);
159	stdf->next = &standardstring[i];
160	stdf = stdf->next;
161	i++;
162    }
163    strdef=&standardstring[0];
164
165    intdef=&standardint[0];
166    i=0;
167    while (intdef->nr) {
168	if (intdef->nr == NROFF) intdef->nr = nroff; else
169	if (intdef->nr == TROFF) intdef->nr = !nroff;
170	intdef->next = &standardint[i];
171	intdef = intdef->next;
172	i++;
173    }
174    intdef = &standardint[0];
175    defdef = NULL;
176}
177