diff --git a/src/client/misc.h b/src/client/misc.h index be2faa03..d124c81e 100644 --- a/src/client/misc.h +++ b/src/client/misc.h @@ -61,7 +61,15 @@ extern char *SE; HANDLE hStdIn; #endif +#ifdef _WIN32 +#define getsose() ((void)0) +#define putso() ((void)0) +#define putse() ((void)0) +#else void getsose(void); +void putso(void); +void putse(void); +#endif int recvline(int s, char *buf); int expect(int s, int match, char *buf); int handleintr(int); diff --git a/src/client/servcmd.c b/src/client/servcmd.c index 1d420a29..911b8a1c 100644 --- a/src/client/servcmd.c +++ b/src/client/servcmd.c @@ -341,21 +341,16 @@ screen(char *buf) while ((c = *buf++)) { if (eight_bit_clean) { - if (c == 14) { - if (SO) - fputs(SO, stdout); - } - else if (c == 15) { - if (SE) - fputs(SE, stdout); - } - else putchar(c); + if (c == 14) + putso(); + else if (c == 15) + putse(); + else + putchar(c); } else if (c & 0x80) { - if (SO) - fputs(SO, stdout); + putso(); putchar(c & 0x7f); - if (SE) - fputs(SE, stdout); + putse(); } else putchar(c); } diff --git a/src/client/termlib.c b/src/client/termlib.c index 0d61e978..50ffec16 100644 --- a/src/client/termlib.c +++ b/src/client/termlib.c @@ -32,63 +32,46 @@ * Steve McClure, 1998 */ +#ifndef _WIN32 + +#include #include -#include -#include -#include +#include +#include #include "misc.h" -#if !defined(_WIN32) -#include -#endif - -char *SO = 0; -char *SE = 0; - -int tgetent(char *, char *); - -static void -parsedelay(char *r) -{ - char *s, *t; - - s = r; - while (isdigit(*s) || (*s == '*') || (*s == '.')) { - s++; - } - for (t = r; *s != 0; (s++, t++)) { - *t = *s; - } - *t = 0; -} +static char *smso = 0; +static char *rmso = 0; void getsose(void) { -#ifndef _WIN32 - extern char *tgetstr(char *, char **); - char *cp; - char *term; - static char tbuf[1024]; - static char cbuf[20]; + int err; - memset(cbuf, 0, 20); - term = getenv("TERM"); - if (term == 0) { - fprintf(stderr, "warning: no TERM environment variable\n"); + if (!isatty(fileno(stdout))) + return; + + if (setupterm(NULL, fileno(stdout), &err) != OK) { + fprintf(stderr, "Can't setup terminal, check environment variable TERM\n"); return; } - tgetent(tbuf, term); - cp = cbuf; - SO = tgetstr("so", &cp); - SE = tgetstr("se", &cp); - if (SO == 0) { - SO = tgetstr("us", &cp); - SE = tgetstr("ue", &cp); - } - if (SO != 0) { - parsedelay(SO); - parsedelay(SE); - } -#endif + + smso = tigetstr("smso"); + rmso = tigetstr("rmso"); } + +void +putso(void) +{ + if (smso) + putp(smso); +} + +void +putse(void) +{ + if (rmso) + putp(rmso); +} + +#endif /* !_WIN32 */