rem: ft_cvt_char(FT_OLD_fmt, FT_NEW_fmt, c);
add: c = ft_cvt_char(FT_OLD_fmt, FT_NEW_fmt, c);
context: static int rc_read_old (const char *const buf, RCF_t *rc) {   unsigned u;   const char *cp;   unsigned c_show = 0;   int badchar = 0; // allow a limited number of duplicates and junk   char scoreboard[256];   memset(scoreboard, '\0', sizeof scoreboard);   cp = buf+2;  // skip the "\n\n" we stuck at the beginning   u = 0;   for (;;) {      if (u+1 >= sizeof rc->win[0].fieldscur) return -1;      int c = *cp++;      if (c == '\0') return -2;      if (c == '\n') break;      if (c & ~0x7f) return -3;      if (~c & 0x20) c_show |= 1 << (c & 0x1f);  // 0x20 means lowercase means hidden      if (scoreboard[c|0xe0u]) badchar++; // duplicates not allowed      scoreboard[c|0xe0u]++;      if (c == '|') continue; // Rik's top ships with a garbage character      if (c == '[') c = 'Y';    // Rik's top ships with 3x of "#C"      if (c == '{') c = 'y';    // another one... and '}' to please Jim's editor      if (c == 'N') c = 'n';    // usage differs, so turn this off      if (c == 'Q') c = 'q';    // usage differs, so turn this off      if (c == 'R') c = 'r';    // usage differs, so turn this off      ft_cvt_char(FT_OLD_fmt, FT_NEW_fmt, c);      if (!c) return -4;     // error value      if (c == '.') return -5; // error value      if (scoreboard[c&0x1fu]) badchar++; // duplicates not allowed      scoreboard[c&0x1fu]++;      rc->win[0].fieldscur[u++] = c;   }   rc->win[0].fieldscur[u++] = '\0';   if (u < 21) return -6;  // catch junk, not good files (had 23 chars in one)   if (u > 33) return -7;  // catch junk, not good files (had 29 chars in one)// fprintf(stderr,"badchar: %d\n",badchar); sleep(2);   if (badchar > 3) return -8;          // too much junk   if (!c_show) return -9;              // nothing was shown#if 0   // Due to Rik blindly accepting damem's broken patches, procps-2.0.10   // has 3 ("three"!!!) instances of "#C", "LC", or "CPU". Fix that here.   // Some people are maintainers, and others are human patchbots.   // The 'y' and 'Y' above have become 'j' and 'J' after translation.   if (scoreboard['j' & 0x1fu] > 1) {   // more than one "#C" column      int letter;      char *fields = rc->win[0].fieldscur;      char *tmp = strchr(fields, 'J');      if (tmp) {         *tmp = '.';                    // save one by hiding it         letter = 'J';      } else {         tmp = strchr(fields, 'j');         *tmp = '.';         letter = 'j';      }      while ((tmp = strchr(fields, 'J'))) *tmp='j'; // cannonicalize it      while ((tmp = strchr(fields, 'j'))) {         char *dst = tmp;         char *src = tmp + 1;         int n = strlen(src) + 1;         memmove(dst, src, n);      }      tmp = strchr(fields, '.');        // find back saved spot      *tmp = letter;   }#endif   // rest of file is optional, but better look right if it exists   if (!*cp) return 12;   if (*cp < '2' || *cp > '9') return -13; // stupid, and why isn't '1' valid?   rc->delay_time = *cp - '0';   memset(scoreboard, '\0', sizeof(scoreboard));   for (;;) {      int c = *++cp & 0xffu;    // protect scoreboard[] from negative char      if (!c) return -14;       // not OK to hit EOL w/o '\n'      if (c == '\n') break;      switch (c) {         case ' ':         case '.':         case '0' ... '9':            return -15;                     // not supposed to have digits here//       case 's':                          // mostly for global rcfile//          rc->mode_secure = 1;//          break;         case 'S':            rc->win[0].winflags |= Show_CTIMES;            break;         case 'c':            rc->win[0].winflags |= Show_CMDLIN;            break;         case 'i':            rc->win[0].winflags &= ~Show_IDLEPS;            break;         case 'H':                          // 'H' = show threads (yea, sure)            //rc->win[0].winflags |= ;            break;         case 'm':            rc->win[0].winflags &= ~View_MEMORY;            break;         case 'l':            rc->win[0].winflags &= ~View_LOADAV;            break;         case 't':            rc->win[0].winflags &= ~View_STATES;            break;         case 'I':            rc->mode_irixps = 0;            break;         case 'M':            c = 0; // for scoreboard            rc->win[0].sortindx = P_MEM;            break;         case 'P':            c = 0; // for scoreboard            rc->win[0].sortindx = P_CPU;            break;         case 'A':            c = 0; // for scoreboard            rc->win[0].sortindx = P_PID;    // was by start_time (non-display)            break;         case 'T':            c = 0; // for scoreboard            rc->win[0].sortindx = P_TM2;            break;         case 'N':            c = 0; // for scoreboard            rc->win[0].sortindx = P_PID;            break;         default:            // just ignore it, except for the scoreboard of course            break;      }      if (scoreboard[c]) return -16;        // duplicates not allowed      scoreboard[c] = 1;   }   return 17;}