From: Markus Armbruster Date: Sat, 4 Jun 2005 13:03:16 +0000 (+0000) Subject: (getsose): Port from obsolete termcap to terminfo. The old code X-Git-Tag: v4.2.21~71 X-Git-Url: http://git.pond.sub.org/?p=empserver;a=commitdiff_plain;h=fbf9f15bbbb1239852c55321305fc62e8b659393 (getsose): Port from obsolete termcap to terminfo. The old code manually stripped off padding, which is evil. The new code does nothing when the stdout is not connected to a terminal. (SO, smso, SE, rmso): Rename, static linkage. (putso, putse): New. (screen): Use it. --- diff --git a/src/client/misc.h b/src/client/misc.h index be2faa03c..d124c81e5 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 1d420a294..911b8a1cc 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 0d61e978b..50ffec164 100644 --- a/src/client/termlib.c +++ b/src/client/termlib.c @@ -32,63 +32,46 @@ * Steve McClure, 1998 */ -#include -#include -#include -#include -#include "misc.h" +#ifndef _WIN32 -#if !defined(_WIN32) +#include +#include +#include #include -#endif - -char *SO = 0; -char *SE = 0; +#include "misc.h" -int tgetent(char *, char *); +static char *smso = 0; +static char *rmso = 0; -static void -parsedelay(char *r) +void +getsose(void) { - char *s, *t; + int err; - s = r; - while (isdigit(*s) || (*s == '*') || (*s == '.')) { - s++; - } - for (t = r; *s != 0; (s++, t++)) { - *t = *s; + if (!isatty(fileno(stdout))) + return; + + if (setupterm(NULL, fileno(stdout), &err) != OK) { + fprintf(stderr, "Can't setup terminal, check environment variable TERM\n"); + return; } - *t = 0; + + smso = tigetstr("smso"); + rmso = tigetstr("rmso"); } void -getsose(void) +putso(void) { -#ifndef _WIN32 - extern char *tgetstr(char *, char **); - char *cp; - char *term; - static char tbuf[1024]; - static char cbuf[20]; + if (smso) + putp(smso); +} - memset(cbuf, 0, 20); - term = getenv("TERM"); - if (term == 0) { - fprintf(stderr, "warning: no TERM environment variable\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 +void +putse(void) +{ + if (rmso) + putp(rmso); } + +#endif /* !_WIN32 */