- print " if (result == 0 && (c >= 0 && c < 256)) {"
- print " if (table == 0)"
- print " table = typeCalloc(char *, 256);"
- print " if (table != 0) {"
- print " if (table[c] == 0) {"
- print " p = name;"
- print " if (c >= 128) {"
- print " strcpy(p, \"M-\");"
+ print " if (result == 0 && (c >= 0 && c < SIZEOF_TABLE)) {"
+ print " if (MyTable == 0)"
+ print " MyTable = typeCalloc(char *, SIZEOF_TABLE);"
+ print ""
+ print " if (MyTable != 0) {"
+ print " int m_prefix = (sp == 0 || sp->_use_meta);"
+ print ""
+ print " /* if sense of meta() changed, discard cached data */"
+ print " if (MyInit != (m_prefix + 1)) {"
+ print " MyInit = m_prefix + 1;"
+ print " for (i = 0; i < SIZEOF_TABLE; ++i) {"
+ print " if (MyTable[i]) {"
+ print " FreeAndNull(MyTable[i]);"
+ print " }"
+ print " }"
+ print " }"
+ print ""
+ 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);"