static int print_macro (FILE *f, int maxchar, const char **macro)
{
- int c = **macro;
+ int c = (unsigned char) **macro;
int n = maxchar;
while (c)
{
if (!IsPrint(c))
{
- if (c >= ' ')
+ if (c >= ' ' && c != 127)
c = '?';
else if (n < 2)
c = 0;
break;
default:
fputc ('^', f);
- c += '@';
+ c = (c + '@') & 127;
break;
}
}
addch (c);
col++;
}
- else if (iscntrl (c) && c < '@')
+ else if (iscntrl (c) && (c < '@' || c == 127))
{
if ((c != '\r' && c !='\n') || (buf[ch+1] != '\n' && buf[ch+1] != '\0'))
{
}
addch ('^');
- addch (c + '@');
+ addch ((c + '@') & 127);
col += 2;
}
}
if (ISSPACE (c))
addch (c); /* unbreakable space */
else
- addch ('.');
+ addch ('?');
col++;
}
}