#include "defs.h" #include #include #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, "{", 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, "}", 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; }