- print "\tif (table == 0)"
- print "\t\ttable = typeCalloc(char *, 256);"
- print "\tif (table == 0)"
- print "\t\treturn keyname(256);"
+ print " /* create and cache result as needed */"
+ print " if (MyTable[c] == 0) {"
+ print " int cc = c;"
+ print " char *p = name;"
+ print "#define P_LIMIT (sizeof(name) - (size_t) (p - name))"
+ print " if (cc >= 128 && m_prefix) {"
+ print " _nc_STRCPY(p, \"M-\", P_LIMIT);"
+ print " p += 2;"
+ print " cc -= 128;"
+ print " }"
+ print " if (cc < 32)"
+ print " _nc_SPRINTF(p, _nc_SLIMIT(P_LIMIT) \"^%c\", cc + '@');"
+ print " else if (cc == 127)"
+ print " _nc_STRCPY(p, \"^?\", P_LIMIT);"
+ print " else"
+ print " _nc_SPRINTF(p, _nc_SLIMIT(P_LIMIT) \"%c\", cc);"
+ print " MyTable[c] = strdup(name);"
+ print " }"
+ print " result = MyTable[c];"
+ print " }"
+ print "#if NCURSES_EXT_FUNCS && NCURSES_XNAMES"
+ print " } else if (result == 0 && HasTerminal(sp)) {"
+ print " int j, k;"
+ print " char * bound;"
+ print " TERMTYPE2 *tp = &TerminalType(TerminalOf(sp));"
+ print " unsigned save_trace = _nc_tracing;"