diff options
Diffstat (limited to 'lib/libncurses/lib_unctrl.c')
-rw-r--r-- | lib/libncurses/lib_unctrl.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/lib/libncurses/lib_unctrl.c b/lib/libncurses/lib_unctrl.c new file mode 100644 index 0000000..b0f10c2 --- /dev/null +++ b/lib/libncurses/lib_unctrl.c @@ -0,0 +1,32 @@ +#ifdef __FreeBSD__ +#include <ctype.h> +#endif +#include <unctrl.h> + +char * + unctrl(register unsigned char uch) +{ + static char buffer[3] = "^x"; + +#ifdef __FreeBSD__ + if (isprint(uch)) { +#else + if ((uch & 0x60) != 0 && uch != 0x7F) { +#endif + /* + * Printable character. Simply return the character as a one-character + * string. + */ + buffer[1] = uch; + return &buffer[1]; + } + uch &= ~0x80; + /* + * It is a control character. DEL is handled specially (^?). All others + * use ^x notation, where x is the character code for the control character + * with 0x40 ORed in. (Control-A becomes ^A etc.). + */ buffer[1] = (uch == 0x7F ? '?' : (uch | 0x40)); + + return buffer; + +} |