X-Git-Url: https://git.distorted.org.uk/~mdw/sw-tools/blobdiff_plain/5636c0ce0820fb80e89dd88dd257e405f245e5bf..65eb98997977ba66bf96aff5e0cc8494ea03cdce:/src/pres_curses.c diff --git a/src/pres_curses.c b/src/pres_curses.c index 44770c6..a4f3b3f 100644 --- a/src/pres_curses.c +++ b/src/pres_curses.c @@ -1,6 +1,6 @@ /* -*-c-*- * - * $Id: pres_curses.c,v 1.3 1999/07/16 12:49:58 mdw Exp $ + * $Id$ * * Curses-based output presentation * @@ -26,20 +26,6 @@ * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -/*----- Revision history --------------------------------------------------* - * - * $Log: pres_curses.c,v $ - * Revision 1.3 1999/07/16 12:49:58 mdw - * Improve exit status display. New interface from `doto' project. - * - * Revision 1.2 1999/06/24 15:51:16 mdw - * Fix signal handlers so they don't corrupt `errno'. - * - * Revision 1.1.1.1 1999/06/02 16:53:35 mdw - * Initial import. - * - */ - /*----- Header files ------------------------------------------------------*/ #include "config.h" @@ -147,15 +133,17 @@ static void sig_cont(int s) /* --- @sig_winch@ --- */ -#ifdef HAVE_WRESIZE +#ifdef SIGWINCH static void sig_winch(int s) { - cwin *c; int e = errno; +#ifdef HAVE_WRESIZE + cwin *c; + endwin(); - refresh(); + wrefresh(curscr); sizes(); for (c = cwins; c; c = c->next) { mvwin(c->w, c->top, 0); @@ -165,6 +153,10 @@ static void sig_winch(int s) wnoutrefresh(c->s); } doupdate(); +#else + endwin(); + wrefresh(curscr); +#endif errno = e; } @@ -231,15 +223,14 @@ int curses_init(archcons *a) scrollok(c->w, TRUE); leaveok(c->w, TRUE); leaveok(c->s, TRUE); - wbkgdset(c->s, A_STANDOUT); - werase(c->s); + wbkgd(c->s, A_STANDOUT); mvwprintw(c->s, 0, 0, " %s [running]\n", c->e->arch); wnoutrefresh(c->w); wnoutrefresh(c->s); } doupdate(); -#ifdef HAVE_WRESIZE +#ifdef SIGWINCH signal(SIGWINCH, sig_winch); #endif #ifdef SIGTSTP @@ -268,8 +259,25 @@ fail_0: void curses_output(archent *e, const char *p, size_t sz) { cwin *c = e->pres; + int y, x; while (sz) { - waddch(c->w, *p); + switch (*p) { + case '\r': + getyx(c->w, y, x); + wmove(c->w, y, 0); + break; + case '\n': + getyx(c->w, y, x); + if (y < c->height - 1) + y++; + else + scroll(c->w); + wmove(c->w, y, 0); + break; + default: + waddch(c->w, *p); + break; + } p++; sz--; }