350
#include "defs.h"
#include <ctype.h>
#include <string.h>
#ifndef NULL
#define NULL ((void *) 0)
#endif
int nroff = 1;
#define NROFF (-666)
#define TROFF (-667)
STRDEF *chardef, *strdef;
LONGSTRDEF *defdef;
INTDEF *intdef;
static INTDEF standardint[] = {
{ V('n',' '), NROFF, 0, NULL },
{ V('t',' '), TROFF, 0, NULL },
{ V('o',' '), 1, 0, NULL },
{ V('e',' '), 0, 0, NULL },
{ V('.','l'), 70, 0, NULL },
{ V('.','$'), 0, 0, NULL },
{ V('.','A'), NROFF, 0, NULL },
{ V('.','T'), TROFF, 0, NULL },
{ V('.','V'), 1, 0, NULL }, /* the me package tests for this */
{ 0, 0, 0, NULL } };
static STRDEF standardstring[] = {
{ V('<','='), 2, "<=", NULL }, /* less equal */
{ V('>','='), 2, ">=;", NULL }, /* greather equal */
{ V('A','m'), 1, "&", NULL }, /* infinity */
{ V('B','a'), 1, "|", NULL }, /* vartical bar */
{ V('G','e'), 2, ">=;", NULL }, /* greather equal */
{ V('G','t'), 1, ">", NULL }, /* greather than */
{ V('I','f'), 1, "∞", NULL }, /* infinity */
{ V('L','e'), 2, "<=", NULL }, /* less equal */
{ V('L','q'), 1, "“", NULL }, /* left double quote */
{ V('L','t'), 1, "<", NULL }, /* less than */
{ V('N','a'), 3, "NaN", NULL }, /* not a number */
{ V('N','e'), 2, "!=", NULL }, /* not equal */
{ V('P','i'), 2, "Pi", NULL }, /* pi */
{ V('P','m'), 1, "±", NULL }, /* plus minus */
{ V('R',' '), 1, "®", NULL },
{ V('R','q'), 1, "”", NULL }, /* right double quote */
{ V('a','a'), 1, "'", NULL }, /* accute accent */
{ V('g','a'), 1, "`", NULL }, /* grave accent */
{ V('l','q'), 2, "``", NULL },
{ V('q',' '), 1, """, NULL }, /* straight double quote */
{ V('r','q'), 2, "''", NULL },
{ V('u','a'), 1, "^", NULL }, /* upwards arrow */
{ 0, 0, NULL, NULL}
};
static STRDEF standardchar[] = {
{ V('*','*'), 1, "*", NULL }, /* math star */
{ V('*','A'), 1, "Α", NULL },
{ V('*','B'), 1, "Β", NULL },
{ V('*','C'), 1, "Ξ", NULL },
{ V('*','D'), 1, "Δ", NULL },
{ V('*','E'), 1, "Ε", NULL },
{ V('*','F'), 1, "Φ", NULL },
{ V('*','G'), 1, "Γ", NULL },
{ V('*','H'), 1, "Θ", NULL },
{ V('*','I'), 1, "Ι", NULL },
{ V('*','K'), 1, "Κ", NULL },
{ V('*','L'), 1, "Λ", NULL },
{ V('*','M'), 1, "Μ", NULL },
{ V('*','N'), 1, "Ν", NULL },
{ V('*','O'), 1, "Ο", NULL },
{ V('*','P'), 1, "Π", NULL },
{ V('*','Q'), 1, "Ψ", NULL },
{ V('*','R'), 1, "Ρ", NULL },
{ V('*','S'), 1, "Σ", NULL },
{ V('*','T'), 1, "Τ", NULL },
{ V('*','U'), 1, "Υ", NULL },
{ V('*','W'), 1, "Ω", NULL },
{ V('*','X'), 1, "Χ", NULL },
{ V('*','Y'), 1, "Η", NULL },
{ V('*','Z'), 1, "Ζ", NULL },
{ V('*','a'), 1, "α", NULL },
{ V('*','b'), 1, "β", NULL },
{ V('*','c'), 1, "ξ", NULL },
{ V('*','d'), 1, "δ", NULL },
{ V('*','e'), 1, "ε", NULL },
{ V('*','f'), 1, "φ", NULL },
{ V('*','g'), 1, "γ", NULL },
{ V('*','h'), 1, "θ", NULL },
{ V('*','i'), 1, "ι", NULL },
{ V('*','k'), 1, "κ", NULL },
{ V('*','l'), 1, "λ", NULL },
{ V('*','m'), 1, "μ", NULL },
{ V('*','n'), 1, "ν", NULL },
{ V('*','o'), 1, "ο", NULL },
{ V('*','p'), 1, "π", NULL },
{ V('*','q'), 1, "ψ", NULL },
{ V('*','r'), 1, "ρ", NULL },
{ V('*','s'), 1, "σ", NULL },
{ V('*','t'), 1, "τ", NULL },
{ V('*','u'), 1, "υ", NULL },
{ V('*','w'), 1, "ω", NULL },
{ V('*','x'), 1, "χ", NULL },
{ V('*','y'), 1, "η", NULL },
{ V('*','z'), 1, "ζ", NULL },
{ V('\'','A'), 1, "Á", NULL },
{ V('\'','E'), 1, "É", NULL },
{ V('\'','I'), 1, "Í", NULL },
{ V('\'','O'), 1, "Ó", NULL },
{ V('\'','U'), 1, "Ú", NULL },
{ V('\'','Y'), 1, "Ý", NULL },
{ V('\'','a'), 1, "á", NULL },
{ V('\'','e'), 1, "é", NULL },
{ V('\'','i'), 1, "í", NULL },
{ V('\'','o'), 1, "ó", NULL },
{ V('\'','u'), 1, "ú", NULL },
{ V('\'','y'), 1, "ý", NULL },
{ V('!','='), 1, "≠", NULL },
{ V('%','0'), 1, "‰", NULL },
{ V('+','-'), 1, "±", NULL },
{ V(',','C'), 1, "Ç", NULL },
{ V(',','c'), 1, "ç", NULL },
{ V('-','>'), 1, "→", NULL },
{ V('-','D'), 1, "Ð", NULL },
{ V('.','i'), 1, "ı", NULL },
{ V('/','L'), 1, "Ł", NULL },
{ V('/','O'), 1, "Ø", NULL },
{ V('/','l'), 1, "ł", NULL },
{ V('/','o'), 1, "ø", NULL },
{ V('1','2'), 1, "½", NULL },
{ V('1','4'), 1, "¼", NULL },
{ V('3','4'), 1, "¾", NULL },
{ V(':','A'), 1, "Ä", NULL },
{ V(':','E'), 1, "Ë", NULL },
{ V(':','I'), 1, "Ï", NULL },
{ V(':','O'), 1, "Ö", NULL },
{ V(':','U'), 1, "Ü", NULL },
{ V(':','a'), 1, "ä", NULL },
{ V(':','e'), 1, "ë", NULL },
{ V(':','i'), 1, "ï", NULL },
{ V(':','o'), 1, "ö", NULL },
{ V(':','u'), 1, "ü", NULL },
{ V(':','y'), 1, "ÿ", NULL },
{ V('<','-'), 1, "←", NULL },
{ V('<','='), 1, "≤", NULL },
{ V('<','>'), 1, "↔", NULL },
{ V('=','='), 1, "≡", NULL },
{ V('=','~'), 1, "≅", NULL },
{ V('>','='), 1, "≥", NULL },
{ V('A','E'), 1, "Æ", NULL },
{ V('A','h'), 1, "&alepfsym;", NULL },
{ V('C','R'), 1, "␍", NULL },
{ V('C','s'), 1, "¤", NULL },
{ V('D','o'), 1, "$", NULL },
{ V('E','u'), 1, "€", NULL },
{ V('F','c'), 1, "»", NULL },
{ V('F','i'), 3, "ffi", NULL },
{ V('F','l'), 3, "ffl", NULL },
{ V('F','o'), 1, "«", NULL },
{ V('O','E'), 1, "Œ", NULL },
{ V('P','o'), 1, "£", NULL },
{ V('S','1'), 1, "¹", NULL },
{ V('S','2'), 1, "²", NULL },
{ V('S','3'), 1, "³", NULL },
{ V('S','d'), 1, "ð", NULL },
{ V('T','P'), 1, "Þ", NULL },
{ V('T','p'), 1, "þ", NULL },
{ V('Y','e'), 1, "¥", NULL },
{ V('^','A'), 1, "Â", NULL },
{ V('^','E'), 1, "Ê", NULL },
{ V('^','I'), 1, "Î", NULL },
{ V('^','O'), 1, "Ô", NULL },
{ V('^','U'), 1, "Û", NULL },
{ V('^','a'), 1, "â", NULL },
{ V('^','e'), 1, "ê", NULL },
{ V('^','i'), 1, "î", NULL },
{ V('^','o'), 1, "ô", NULL },
{ V('^','u'), 1, "û", NULL },
{ V('`','A'), 1, "À", NULL },
{ V('`','E'), 1, "È", NULL },
{ V('`','I'), 1, "Ì", NULL },
{ V('`','O'), 1, "Ò", NULL },
{ V('`','U'), 1, "Ù", NULL },
{ V('`','a'), 1, "à", NULL },
{ V('`','e'), 1, "è", NULL },
{ V('`','i'), 1, "ì", NULL },
{ V('`','o'), 1, "ò", NULL },
{ V('`','u'), 1, "ù", NULL },
{ V('a','a'), 1, "´", NULL },
{ V('a','e'), 1, "æ", NULL },
{ V('a','p'), 1, "≈", NULL },
{ V('a','q'), 1, "'", NULL },
{ V('a','t'), 1, "@", NULL },
{ V('a','~'), 1, "~", NULL },
{ V('b','a'), 1, "|", NULL },
{ V('b','b'), 1, "|", NULL },
{ V('b','r'), 1, "|", NULL },
{ V('b','r'), 1, "|", NULL },
{ V('b','u'), 1, "•", NULL },
{ V('b','v'), 1, "|", NULL },
{ V('c','*'), 1, "⊗", NULL },
{ V('c','+'), 1, "⊕", NULL },
{ V('c','i'), 1, "○", NULL },
{ V('c','o'), 1, "©", NULL },
{ V('c','q'), 1, "'", NULL },
{ V('c','t'), 1, "¢", NULL },
{ V('d','A'), 1, "⇓", NULL },
{ V('d','a'), 1, "↓", NULL },
{ V('d','d'), 1, "=", NULL },
{ V('d','e'), 1, "°", NULL },
{ V('d','g'), 1, "-", NULL },
{ V('d','i'), 1, "÷", NULL },
{ V('d','q'), 1, """, NULL },
{ V('e','m'), 3, "---", NULL }, /* em dash */
{ V('e','n'), 1, "-", NULL }, /* en dash */
{ V('e','q'), 1, "=", NULL },
{ V('e','s'), 1, "Ø", NULL },
{ V('e','u'), 1, "€", NULL },
{ V('f','/'), 1, "⁄", NULL },
{ V('f','c'), 1, "›", NULL },
{ V('f','f'), 2, "ff", NULL },
{ V('f','i'), 2, "fi", NULL },
{ V('f','l'), 2, "fl", NULL },
{ V('f','m'), 1, "´", NULL },
{ V('f','o'), 1, "‹", NULL },
{ V('g','a'), 1, "`", NULL },
{ V('h','A'), 1, "⇔", NULL },
{ V('h','y'), 1, "-", NULL },
{ V('i','f'), 1, "∞", NULL },
{ V('i','s'), 8, "Integral", NULL }, /* integral sign */
{ V('l','A'), 1, "⇐", NULL },
{ V('l','B'), 1, "[", NULL },
{ V('l','C'), 1, "{", NULL },
{ V('l','a'), 1, "<", NULL },
{ V('l','b'), 1, "[", NULL },
{ V('l','c'), 2, "|¯", NULL },
{ V('l','f'), 2, "|_", NULL },
{ V('l','h'), 1, "☚", NULL },
{ V('l','k'), 1, "<FONT SIZE=\"+2\">{</FONT>", NULL },
{ V('l','q'), 1, "\"", NULL },
{ V('l','z'), 1, "◊", NULL },
{ V('m','c'), 1, "µ", NULL },
{ V('m','i'), 1, "-", NULL },
{ V('m','u'), 1, "×", NULL },
{ V('n','o'), 1, "¬", NULL },
{ V('o','A'), 1, "Å", NULL },
{ V('o','a'), 1, "å", NULL },
{ V('o','e'), 1, "œ", NULL },
{ V('o','q'), 1, "'", NULL },
{ V('o','r'), 1, "|", NULL },
{ V('p','d'), 1, "d", NULL }, /* partial derivative */
{ V('p','l'), 1, "+", NULL },
{ V('p','s'), 1, "¶", NULL },
{ V('r','!'), 1, "¡", NULL },
{ V('r','?'), 1, "¿", NULL },
{ V('r','A'), 1, "⇒", NULL },
{ V('r','B'), 1, "]", NULL },
{ V('r','C'), 1, "}", NULL },
{ V('r','a'), 1, ">", NULL },
{ V('r','c'), 2, "¯|", NULL },
{ V('r','f'), 2, "_|", NULL },
{ V('r','g'), 1, "®", NULL },
{ V('r','h'), 1, "☛", NULL },
{ V('r','k'), 1, "<FONT SIZE=\"+2\">}</FONT>", NULL },
{ V('r','n'), 1, "¯", NULL },
{ V('r','q'), 1, "\"", NULL },
{ V('r','s'), 1, "\\", NULL },
{ V('r','u'), 1, "_", NULL },
{ V('s','c'), 1, "§", NULL },
{ V('s','h'), 1, "#", NULL },
{ V('s','l'), 1, "/", NULL },
{ V('s','q'), 1, "□", NULL },
{ V('s','s'), 1, "ß", NULL },
{ V('t','f'), 1, "∴", NULL },
{ V('t','i'), 1, "~", NULL },
{ V('t','m'), 1, "™", NULL },
{ V('t','s'), 1, "s", NULL }, /* should be terminal sigma */
{ V('u','A'), 1, "⇑", NULL },
{ V('u','a'), 1, "↑", NULL },
{ V('u','l'), 1, "_", NULL },
{ V('~','A'), 1, "Ã", NULL },
{ V('~','N'), 1, "Ñ", NULL },
{ V('~','O'), 1, "Õ", NULL },
{ V('~','a'), 1, "ã", NULL },
{ V('~','n'), 1, "ñ", NULL },
{ V('~','o'), 1, "õ", NULL },
{ 0, 0, NULL, NULL }
};
void stdinit(void) {
STRDEF *stdf;
int i;
stdf = &standardchar[0];
i = 0;
while (stdf->nr) {
if (stdf->st) stdf->st = xstrdup(stdf->st);
stdf->next = &standardchar[i];
stdf = stdf->next;
i++;
}
chardef=&standardchar[0];
stdf=&standardstring[0];
i=0;
while (stdf->nr) {
/* waste a little memory, and make a copy, to avoid
the segfault when we free non-malloced memory */
if (stdf->st) stdf->st = xstrdup(stdf->st);
stdf->next = &standardstring[i];
stdf = stdf->next;
i++;
}
strdef=&standardstring[0];
intdef=&standardint[0];
i=0;
while (intdef->nr) {
if (intdef->nr == NROFF) intdef->nr = nroff; else
if (intdef->nr == TROFF) intdef->nr = !nroff;
intdef->next = &standardint[i];
intdef = intdef->next;
i++;
}
intdef = &standardint[0];
defdef = NULL;
}
LONGSTRDEF* find_longstrdef(LONGSTRDEF * head, int nr, char * longname, char ** out_longname)
{
char *p, c;
LONGSTRDEF *de;
p = longname;
while (p && !isspace(*p)) p++;
c = *p;
*p = 0;
de = head;
while (de && (de->nr != nr || (de->longname && strcmp(longname, de->longname))))
de = de->next;
if (out_longname)
*out_longname = de ? de->longname : xstrdup(longname);
*p = c;
return de;
}