bammi@dsrgsun.ces.cwru.edu (Jwahar R. Bammi) (11/28/88)
#!/bin/sh
# This is a shell archive, meaning:
# 1. Remove everything above the #!/bin/sh line.
# 2. Save the resulting text in a file.
# 3. Execute the file with /bin/sh (not csh) to create the files:
# longname.c
# move.c
# mvprintw.c
# mvscanw.c
# mvwin.c
# newwin.c
# overlay.c
# overwrite.c
# printw.c
# putchar.c
# refresh.c
# scanw.c
# scroll.c
# standout.c
# toucholap.c
# touchwin.c
# tstp.c
# unctrl.c
# This archive created: Thu Oct 27 21:16:05 1988
# By: Jwahar R. Bammi(Case Western Reserve University)
# Uucp: {decvax,sun,att}!cwjcc!dsrgsun!bammi
# Csnet: bammi@dsrgsun.ces.CWRU.edu
# Arpa: bammi@dsrgsun.ces.CWRU.edu
#
export PATH; PATH=/bin:$PATH
echo shar: extracting "'longname.c'" '(657 characters)'
if test -f 'longname.c'
then
echo shar: over-writing existing file "'longname.c'"
fi
sed 's/^X//' << \SHAR_EOF > 'longname.c'
X/*
X * Copyright 1980 Kenneth C. R. C. Arnold and The Regents of the
X * University of California. Permission is granted to freely
X * distribute curses and its documentation provided that this
X * notice is left intact.
X */
X
X#ifndef lint
Xstatic char sccsid[] = "@(#)longname.c 5.1 (Berkeley) 6/7/85";
X#endif not lint
X
X# define reg register
X
X/*
X * This routine fills in "def" with the long name of the terminal.
X *
X */
Xchar *
Xlongname(bp, def)
Xreg char *bp, *def; {
X
X reg char *cp;
X
X while (*bp && *bp != ':' && *bp != '|')
X bp++;
X if (*bp == '|') {
X bp++;
X cp = def;
X while (*bp && *bp != ':' && *bp != '|')
X *cp++ = *bp++;
X *cp = 0;
X }
X return def;
X}
SHAR_EOF
if test 657 -ne "`wc -c 'longname.c'`"
then
echo shar: error transmitting "'longname.c'" '(should have been 657 characters)'
fi
echo shar: extracting "'move.c'" '(655 characters)'
if test -f 'move.c'
then
echo shar: over-writing existing file "'move.c'"
fi
sed 's/^X//' << \SHAR_EOF > 'move.c'
X/*
X * Copyright 1980 Kenneth C. R. C. Arnold and The Regents of the
X * University of California. Permission is granted to freely
X * distribute curses and its documentation provided that this
X * notice is left intact.
X */
X
X#ifndef lint
Xstatic char sccsid[] = "@(#)move.c 5.2 (Berkeley) 10/8/85";
X#endif not lint
X
X# include "curses.ext"
X
X/*
X * This routine moves the cursor to the given point
X *
X */
Xwmove(win, y, x)
Xreg WINDOW *win;
Xreg int y, x; {
X
X# ifdef DEBUG
X fprintf(outf, "MOVE to (%d, %d)\n", y, x);
X# endif
X if (x < 0 || y < 0)
X return ERR;
X if (x >= win->_maxx || y >= win->_maxy)
X return ERR;
X win->_curx = x;
X win->_cury = y;
X return OK;
X}
SHAR_EOF
if test 655 -ne "`wc -c 'move.c'`"
then
echo shar: error transmitting "'move.c'" '(should have been 655 characters)'
fi
echo shar: extracting "'mvprintw.c'" '(1256 characters)'
if test -f 'mvprintw.c'
then
echo shar: over-writing existing file "'mvprintw.c'"
fi
sed 's/^X//' << \SHAR_EOF > 'mvprintw.c'
X/*
X * Copyright 1980 Kenneth C. R. C. Arnold and The Regents of the
X * University of California. Permission is granted to freely
X * distribute curses and its documentation provided that this
X * notice is left intact.
X */
X
X/*
X * Implementation using varargs and vsprintf by John Gilmore.
X * My changes are in the public domain.
X */
X
X#ifndef lint
Xstatic char sccsid[] = "@(#)mvprintw.c 5.1 (Berkeley) 6/7/85";
X#endif not lint
X
X# include "curses.ext"
X# include <varargs.h>
X
X/*
X * implement the mvprintw commands. Due to the variable number of
X * arguments, they cannot be macros. Sigh....
X *
X */
Xmvprintw(va_alist)
Xva_dcl {
X int y, x;
X va_list args;
X WINDOW *win;
X char *fmt;
X int ret;
X
X va_start(args);
X y = va_arg(args, int);
X x = va_arg(args, int);
X if (move(y, x) != OK) {
X va_end(args);
X return ERR;
X }
X
X fmt = va_arg(args, char *);
X
X ret = _sprintw(stdscr, fmt, &args);
X va_end(args);
X return ret;
X}
X
Xmvwprintw(va_alist)
Xva_dcl {
X int y, x;
X va_list args;
X WINDOW *win;
X char *fmt;
X int ret;
X
X va_start(args);
X win = va_arg(args, WINDOW *);
X y = va_arg(args, int);
X x = va_arg(args, int);
X if (wmove(win, y, x) != OK) {
X va_end(args);
X return ERR;
X }
X
X fmt = va_arg(args, char *);
X
X ret = _sprintw(win, fmt, &args);
X va_end(args);
X return ret;
X}
SHAR_EOF
if test 1256 -ne "`wc -c 'mvprintw.c'`"
then
echo shar: error transmitting "'mvprintw.c'" '(should have been 1256 characters)'
fi
echo shar: extracting "'mvscanw.c'" '(758 characters)'
if test -f 'mvscanw.c'
then
echo shar: over-writing existing file "'mvscanw.c'"
fi
sed 's/^X//' << \SHAR_EOF > 'mvscanw.c'
X/*
X * Copyright 1980 Kenneth C. R. C. Arnold and The Regents of the
X * University of California. Permission is granted to freely
X * distribute curses and its documentation provided that this
X * notice is left intact.
X */
X
X#ifndef lint
Xstatic char sccsid[] = "@(#)mvscanw.c 5.1 (Berkeley) 6/7/85";
X#endif not lint
X
X# include "curses.ext"
X
X/*
X * implement the mvscanw commands. Due to the variable number of
X * arguments, they cannot be macros. Another sigh....
X *
X */
X
Xmvscanw(y, x, fmt, args)
Xreg int y, x;
Xchar *fmt;
Xint args; {
X
X return move(y, x) == OK ? _sscans(stdscr, fmt, &args) : ERR;
X}
X
Xmvwscanw(win, y, x, fmt, args)
Xreg WINDOW *win;
Xreg int y, x;
Xchar *fmt;
Xint args; {
X
X return wmove(win, y, x) == OK ? _sscans(win, fmt, &args) : ERR;
X}
SHAR_EOF
if test 758 -ne "`wc -c 'mvscanw.c'`"
then
echo shar: error transmitting "'mvscanw.c'" '(should have been 758 characters)'
fi
echo shar: extracting "'mvwin.c'" '(1054 characters)'
if test -f 'mvwin.c'
then
echo shar: over-writing existing file "'mvwin.c'"
fi
sed 's/^X//' << \SHAR_EOF > 'mvwin.c'
X/*
X * Copyright 1980 Kenneth C. R. C. Arnold and The Regents of the
X * University of California. Permission is granted to freely
X * distribute curses and its documentation provided that this
X * notice is left intact.
X */
X
X#ifndef lint
Xstatic char sccsid[] = "@(#)mvwin.c 5.1 (Berkeley) 6/7/85";
X#endif not lint
X
X# include "curses.ext"
X
X/*
X * relocate the starting position of a window
X *
X */
X
Xmvwin(win, by, bx)
Xreg WINDOW *win;
Xreg int by, bx; {
X
X register WINDOW *orig;
X register int dy, dx;
X
X if (by + win->_maxy > LINES || bx + win->_maxx > COLS)
X return ERR;
X dy = by - win->_begy;
X dx = bx - win->_begx;
X orig = win->_orig;
X if (orig == NULL) {
X orig = win;
X do {
X win->_begy += dy;
X win->_begx += dx;
X _swflags_(win);
X win = win->_nextp;
X } while (win != orig);
X }
X else {
X if (by < orig->_begy || win->_maxy + dy > orig->_maxy)
X return ERR;
X if (bx < orig->_begx || win->_maxx + dx > orig->_maxx)
X return ERR;
X win->_begy = by;
X win->_begx = bx;
X _swflags_(win);
X _set_subwin_(orig, win);
X }
X touchwin(win);
X return OK;
X}
SHAR_EOF
if test 1054 -ne "`wc -c 'mvwin.c'`"
then
echo shar: error transmitting "'mvwin.c'" '(should have been 1054 characters)'
fi
echo shar: extracting "'newwin.c'" '(4709 characters)'
if test -f 'newwin.c'
then
echo shar: over-writing existing file "'newwin.c'"
fi
sed 's/^X//' << \SHAR_EOF > 'newwin.c'
X/*
X * Copyright 1980 Kenneth C. R. C. Arnold and The Regents of the
X * University of California. Permission is granted to freely
X * distribute curses and its documentation provided that this
X * notice is left intact.
X */
X
X#ifndef lint
Xstatic char sccsid[] = "@(#)newwin.c 5.1 (Berkeley) 6/7/85";
X#endif not lint
X
X/*
X * allocate space for and set up defaults for a new window
X *
X */
X
X# include "curses.ext"
X
Xchar *malloc();
X
X# define SMALLOC (short *) malloc
X
Xstatic WINDOW *makenew();
X
X# undef nl /* don't need it here, and it interferes */
X
XWINDOW *
Xnewwin(num_lines, num_cols, begy, begx)
Xint num_lines, num_cols, begy, begx;
X{
X reg WINDOW *win;
X reg char *sp;
X reg int i, by, bx, nl, nc;
X reg int j;
X
X by = begy;
X bx = begx;
X nl = num_lines;
X nc = num_cols;
X
X if (nl == 0)
X nl = LINES - by;
X if (nc == 0)
X nc = COLS - bx;
X if ((win = makenew(nl, nc, by, bx)) == NULL)
X return ERR;
X if ((win->_firstch = SMALLOC(nl * sizeof win->_firstch[0])) == NULL) {
X free(win->_y);
X free(win);
X return NULL;
X }
X if ((win->_lastch = SMALLOC(nl * sizeof win->_lastch[0])) == NULL) {
X free(win->_y);
X free(win->_firstch);
X free(win);
X return NULL;
X }
X win->_nextp = win;
X for (i = 0; i < nl; i++) {
X win->_firstch[i] = _NOCHANGE;
X win->_lastch[i] = _NOCHANGE;
X }
X for (i = 0; i < nl; i++)
X if ((win->_y[i] = malloc(nc * sizeof win->_y[0])) == NULL) {
X for (j = 0; j < i; j++)
X free(win->_y[j]);
X free(win->_firstch);
X free(win->_lastch);
X free(win->_y);
X free(win);
X return ERR;
X }
X else
X for (sp = win->_y[i]; sp < win->_y[i] + nc; )
X *sp++ = ' ';
X win->_ch_off = 0;
X# ifdef DEBUG
X fprintf(outf, "NEWWIN: win->_ch_off = %d\n", win->_ch_off);
X# endif
X return win;
X}
X
XWINDOW *
Xsubwin(orig, num_lines, num_cols, begy, begx)
Xreg WINDOW *orig;
Xint num_lines, num_cols, begy, begx;
X{
X reg int i;
X reg WINDOW *win;
X reg int by, bx, nl, nc;
X
X by = begy;
X bx = begx;
X nl = num_lines;
X nc = num_cols;
X
X /*
X * make sure window fits inside the original one
X */
X# ifdef DEBUG
X fprintf(outf, "SUBWIN(%0.2o, %d, %d, %d, %d)\n", orig, nl, nc, by, bx);
X# endif
X if (by < orig->_begy || bx < orig->_begx
X || by + nl > orig->_maxy + orig->_begy
X || bx + nc > orig->_maxx + orig->_begx)
X return ERR;
X if (nl == 0)
X nl = orig->_maxy + orig->_begy - by;
X if (nc == 0)
X nc = orig->_maxx + orig->_begx - bx;
X if ((win = makenew(nl, nc, by, bx)) == NULL)
X return ERR;
X win->_nextp = orig->_nextp;
X orig->_nextp = win;
X win->_orig = orig;
X _set_subwin_(orig, win);
X return win;
X}
X
X/*
X * this code is shared with mvwin()
X */
X_set_subwin_(orig, win)
Xregister WINDOW *orig, *win;
X{
X register int i, j, k;
X
X j = win->_begy - orig->_begy;
X k = win->_begx - orig->_begx;
X win->_ch_off = k;
X# ifdef DEBUG
X fprintf(outf, "_SET_SUBWIN_: win->_ch_off = %d\n", win->_ch_off);
X# endif
X win->_firstch = &orig->_firstch[j];
X win->_lastch = &orig->_lastch[j];
X for (i = 0; i < win->_maxy; i++, j++)
X win->_y[i] = &orig->_y[j][k];
X
X}
X
X/*
X * This routine sets up a window buffer and returns a pointer to it.
X */
Xstatic WINDOW *
Xmakenew(num_lines, num_cols, begy, begx)
Xint num_lines, num_cols, begy, begx; {
X
X reg int i;
X reg WINDOW *win;
X reg int by, bx, nl, nc;
X
X by = begy;
X bx = begx;
X nl = num_lines;
X nc = num_cols;
X
X# ifdef DEBUG
X fprintf(outf, "MAKENEW(%d, %d, %d, %d)\n", nl, nc, by, bx);
X# endif
X if ((win = (WINDOW *) malloc(sizeof *win)) == NULL)
X return NULL;
X# ifdef DEBUG
X fprintf(outf, "MAKENEW: nl = %d\n", nl);
X# endif
X if ((win->_y = (char **) malloc(nl * sizeof win->_y[0])) == NULL) {
X free(win);
X return NULL;
X }
X# ifdef DEBUG
X fprintf(outf, "MAKENEW: nc = %d\n", nc);
X# endif
X win->_cury = win->_curx = 0;
X win->_clear = FALSE;
X win->_maxy = nl;
X win->_maxx = nc;
X win->_begy = by;
X win->_begx = bx;
X win->_flags = 0;
X win->_scroll = win->_leave = FALSE;
X _swflags_(win);
X# ifdef DEBUG
X fprintf(outf, "MAKENEW: win->_clear = %d\n", win->_clear);
X fprintf(outf, "MAKENEW: win->_leave = %d\n", win->_leave);
X fprintf(outf, "MAKENEW: win->_scroll = %d\n", win->_scroll);
X fprintf(outf, "MAKENEW: win->_flags = %0.2o\n", win->_flags);
X fprintf(outf, "MAKENEW: win->_maxy = %d\n", win->_maxy);
X fprintf(outf, "MAKENEW: win->_maxx = %d\n", win->_maxx);
X fprintf(outf, "MAKENEW: win->_begy = %d\n", win->_begy);
X fprintf(outf, "MAKENEW: win->_begx = %d\n", win->_begx);
X# endif
X return win;
X}
X
X_swflags_(win)
Xregister WINDOW *win;
X{
X win->_flags &= ~(_ENDLINE|_FULLLINE|_FULLWIN|_SCROLLWIN);
X if (win->_begx + win->_maxx == COLS) {
X win->_flags |= _ENDLINE;
X if (win->_begx == 0) {
X if (AL && DL)
X win->_flags |= _FULLLINE;
X if (win->_maxy == LINES && win->_begy == 0)
X win->_flags |= _FULLWIN;
X }
X if (win->_begy + win->_maxy == LINES)
X win->_flags |= _SCROLLWIN;
X }
X}
SHAR_EOF
if test 4709 -ne "`wc -c 'newwin.c'`"
then
echo shar: error transmitting "'newwin.c'" '(should have been 4709 characters)'
fi
echo shar: extracting "'overlay.c'" '(1625 characters)'
if test -f 'overlay.c'
then
echo shar: over-writing existing file "'overlay.c'"
fi
sed 's/^X//' << \SHAR_EOF > 'overlay.c'
X/*
X * Copyright 1980 Kenneth C. R. C. Arnold and The Regents of the
X * University of California. Permission is granted to freely
X * distribute curses and its documentation provided that this
X * notice is left intact.
X */
X
X#ifndef lint
Xstatic char sccsid[] = "@(#)overlay.c 5.2 (Berkeley) 2/12/86";
X#endif not lint
X
X# include "curses.ext"
X# include <ctype.h>
X
X# define min(a,b) (a < b ? a : b)
X# define max(a,b) (a > b ? a : b)
X
X/*
X * This routine writes win1 on win2 non-destructively.
X *
X */
Xoverlay(win1, win2)
Xreg WINDOW *win1, *win2; {
X
X reg char *sp, *end;
X reg int x, y, endy, endx, starty, startx;
X reg int y1,y2;
X
X# ifdef DEBUG
X fprintf(outf, "OVERLAY(%0.2o, %0.2o);\n", win1, win2);
X# endif
X starty = max(win1->_begy, win2->_begy);
X startx = max(win1->_begx, win2->_begx);
X endy = min(win1->_maxy + win1->_begy, win2->_maxy + win2->_begx);
X endx = min(win1->_maxx + win1->_begx, win2->_maxx + win2->_begx);
X# ifdef DEBUG
X fprintf(outf, "OVERLAY:from (%d,%d) to (%d,%d)\n", starty, startx, endy, endx);
X# endif
X if (starty >= endy || startx >= endx)
X return;
X x = endx - startx;
X for (y = starty; y < endy; y++) {
X bcopy(&win1->_y[y - win1->_begy][startx - win1->_begx],
X &win2->_y[y - win2->_begy][startx - win2->_begx], x);
X touchline(win2, y, startx - win2->_begx, endx - win2->_begx);
X }
X y1 = starty - win1->_begy;
X y2 = starty - win2->_begy;
X for (y = starty; y < endy; y++, y1++, y2++) {
X end = &win1->_y[y1][endx - win1->_begx];
X x = startx - win2->_begx;
X for (sp = &win1->_y[y1][startx - win1->_begx]; sp < end; sp++) {
X if (!isspace(*sp))
X mvwaddch(win2, y2, x, *sp);
X x++;
X }
X }
X}
SHAR_EOF
if test 1625 -ne "`wc -c 'overlay.c'`"
then
echo shar: error transmitting "'overlay.c'" '(should have been 1625 characters)'
fi
echo shar: extracting "'overwrite.c'" '(1301 characters)'
if test -f 'overwrite.c'
then
echo shar: over-writing existing file "'overwrite.c'"
fi
sed 's/^X//' << \SHAR_EOF > 'overwrite.c'
X/*
X * Copyright 1980 Kenneth C. R. C. Arnold and The Regents of the
X * University of California. Permission is granted to freely
X * distribute curses and its documentation provided that this
X * notice is left intact.
X */
X
X#ifndef lint
Xstatic char sccsid[] = "@(#)overwrite.c 5.1 (Berkeley) 6/7/85";
X#endif not lint
X
X# include "curses.ext"
X# include <ctype.h>
X
X# define min(a,b) (a < b ? a : b)
X# define max(a,b) (a > b ? a : b)
X
X/*
X * This routine writes win1 on win2 destructively.
X *
X */
Xoverwrite(win1, win2)
Xreg WINDOW *win1, *win2; {
X
X reg char *sp, *end;
X reg int x, y, endy, endx, starty, startx;
X
X# ifdef DEBUG
X fprintf(outf, "OVERWRITE(%0.2o, %0.2o);\n", win1, win2);
X# endif
X starty = max(win1->_begy, win2->_begy);
X startx = max(win1->_begx, win2->_begx);
X endy = min(win1->_maxy + win1->_begy, win2->_maxy + win2->_begx);
X endx = min(win1->_maxx + win1->_begx, win2->_maxx + win2->_begx);
X if (starty >= endy || startx >= endx)
X return;
X# ifdef DEBUG
X fprintf(outf, "OVERWRITE:from (%d,%d) to (%d,%d)\n", starty, startx, endy, endx);
X# endif
X x = endx - startx;
X for (y = starty; y < endy; y++) {
X bcopy(&win1->_y[y - win1->_begy][startx - win1->_begx],
X &win2->_y[y - win2->_begy][startx - win2->_begx], x);
X touchline(win2, y, startx - win2->_begx, endx - win2->_begx);
X }
X}
SHAR_EOF
if test 1301 -ne "`wc -c 'overwrite.c'`"
then
echo shar: error transmitting "'overwrite.c'" '(should have been 1301 characters)'
fi
echo shar: extracting "'printw.c'" '(1307 characters)'
if test -f 'printw.c'
then
echo shar: over-writing existing file "'printw.c'"
fi
sed 's/^X//' << \SHAR_EOF > 'printw.c'
X/*
X * Copyright 1980 Kenneth C. R. C. Arnold and The Regents of the
X * University of California. Permission is granted to freely
X * distribute curses and its documentation provided that this
X * notice is left intact.
X */
X
X/*
X * Implementation using varargs and vsprintf by John Gilmore.
X * My changes are in the public domain.
X */
X
X#ifndef lint
Xstatic char sccsid[] = "@(#)printw.c 5.1 (Berkeley) 6/7/85";
X#endif not lint
X
X/*
X * printw and friends
X *
X */
X
X# include "curses.ext"
X# include <varargs.h>
X
X/*
X * This routine implements a printf on the standard screen.
X */
Xint
Xprintw(va_alist)
Xva_dcl {
X va_list args;
X char *fmt;
X int ret;
X
X va_start(args);
X fmt = va_arg(args, char *);
X
X ret = _sprintw(stdscr, fmt, &args);
X va_end(args);
X return ret;
X}
X
X/*
X * This routine implements a printf on the given window.
X */
Xint
Xwprintw(va_alist)
Xva_dcl {
X va_list args;
X WINDOW *win;
X char *fmt;
X int ret;
X
X va_start(args);
X win = va_arg(args, WINDOW *);
X fmt = va_arg(args, char *);
X
X ret = _sprintw(win, fmt, &args);
X va_end(args);
X return ret;
X}
X
X/*
X * This routine actually executes the printf and adds it to the window
X */
Xint
X_sprintw(win, fmt, args)
XWINDOW *win;
Xchar *fmt;
Xva_list *args;
X{
X char buf[512]; /* Bogus, but what are we to do? */
X
X (void) sprintf(buf, fmt, *args);
X return waddstr(win, buf);
X}
SHAR_EOF
if test 1307 -ne "`wc -c 'printw.c'`"
then
echo shar: error transmitting "'printw.c'" '(should have been 1307 characters)'
fi
echo shar: extracting "'putchar.c'" '(451 characters)'
if test -f 'putchar.c'
then
echo shar: over-writing existing file "'putchar.c'"
fi
sed 's/^X//' << \SHAR_EOF > 'putchar.c'
X/*
X * Copyright 1980 Kenneth C. R. C. Arnold and The Regents of the
X * University of California. Permission is granted to freely
X * distribute curses and its documentation provided that this
X * notice is left intact.
X */
X
X#ifndef lint
Xstatic char sccsid[] = "@(#)putchar.c 5.1 (Berkeley) 6/7/85";
X#endif not lint
X
X# include "curses.ext"
X
Xchar
X_putchar(c)
Xreg char c; {
X
X putchar(c);
X#ifdef DEBUG
X fprintf(outf, "_PUTCHAR(%s)\n", unctrl(c));
X#endif
X}
SHAR_EOF
if test 451 -ne "`wc -c 'putchar.c'`"
then
echo shar: error transmitting "'putchar.c'" '(should have been 451 characters)'
fi
echo shar: extracting "'refresh.c'" '(6276 characters)'
if test -f 'refresh.c'
then
echo shar: over-writing existing file "'refresh.c'"
fi
sed 's/^X//' << \SHAR_EOF > 'refresh.c'
X/*
X * Copyright 1980 Kenneth C. R. C. Arnold and The Regents of the
X * University of California. Permission is granted to freely
X * distribute curses and its documentation provided that this
X * notice is left intact.
X */
X
X#ifndef lint
Xstatic char sccsid[] = "@(#)refresh.c 5.1 (Berkeley) 6/7/85";
X#endif not lint
X
X/*
X * make the current screen look like "win" over the area coverd by
X * win.
X */
X
X# include "curses.ext"
X
X# ifdef DEBUG
X# define STATIC
X# else
X# define STATIC static
X# endif
X
XSTATIC short ly, lx;
X
XSTATIC bool curwin;
X
XWINDOW *_win = NULL;
X
Xwrefresh(win)
Xreg WINDOW *win;
X{
X reg short wy;
X reg int retval;
X reg WINDOW *orig;
X
X /*
X * make sure were in visual state
X */
X if (_endwin) {
X _puts(VS);
X _puts(TI);
X _endwin = FALSE;
X }
X
X /*
X * initialize loop parameters
X */
X
X ly = curscr->_cury;
X lx = curscr->_curx;
X wy = 0;
X _win = win;
X curwin = (win == curscr);
X
X if (win->_clear || curscr->_clear || curwin) {
X if ((win->_flags & _FULLWIN) || curscr->_clear) {
X _puts(CL);
X ly = 0;
X lx = 0;
X if (!curwin) {
X curscr->_clear = FALSE;
X curscr->_cury = 0;
X curscr->_curx = 0;
X werase(curscr);
X }
X touchwin(win);
X }
X win->_clear = FALSE;
X }
X if (!CA) {
X if (win->_curx != 0)
X _putchar('\n');
X if (!curwin)
X werase(curscr);
X }
X# ifdef DEBUG
X fprintf(outf, "REFRESH(%0.2o): curwin = %d\n", win, curwin);
X fprintf(outf, "REFRESH:\n\tfirstch\tlastch\n");
X# endif
X for (wy = 0; wy < win->_maxy; wy++) {
X# ifdef DEBUG
X fprintf(outf, "%d\t%d\t%d\n", wy, win->_firstch[wy],
X win->_lastch[wy]);
X# endif
X if (win->_firstch[wy] != _NOCHANGE)
X if (makech(win, wy) == ERR)
X return ERR;
X else {
X if (win->_firstch[wy] >= win->_ch_off)
X win->_firstch[wy] = win->_maxx +
X win->_ch_off;
X if (win->_lastch[wy] < win->_maxx +
X win->_ch_off)
X win->_lastch[wy] = win->_ch_off;
X if (win->_lastch[wy] < win->_firstch[wy])
X win->_firstch[wy] = _NOCHANGE;
X }
X# ifdef DEBUG
X fprintf(outf, "\t%d\t%d\n", win->_firstch[wy],
X win->_lastch[wy]);
X# endif
X }
X
X if (win == curscr)
X domvcur(ly, lx, win->_cury, win->_curx);
X else {
X if (win->_leave) {
X curscr->_cury = ly;
X curscr->_curx = lx;
X ly -= win->_begy;
X lx -= win->_begx;
X if (ly >= 0 && ly < win->_maxy && lx >= 0 &&
X lx < win->_maxx) {
X win->_cury = ly;
X win->_curx = lx;
X }
X else
X win->_cury = win->_curx = 0;
X }
X else {
X domvcur(ly, lx, win->_cury + win->_begy,
X win->_curx + win->_begx);
X curscr->_cury = win->_cury + win->_begy;
X curscr->_curx = win->_curx + win->_begx;
X }
X }
X retval = OK;
Xret:
X _win = NULL;
X fflush(stdout);
X return retval;
X}
X
X/*
X * make a change on the screen
X */
XSTATIC
Xmakech(win, wy)
Xreg WINDOW *win;
Xshort wy;
X{
X reg char *nsp, *csp, *ce;
X reg short wx, lch, y;
X reg int nlsp, clsp; /* last space in lines */
X
X wx = win->_firstch[wy] - win->_ch_off;
X if (wx >= win->_maxx)
X return OK;
X else if (wx < 0)
X wx = 0;
X lch = win->_lastch[wy] - win->_ch_off;
X if (lch < 0)
X return OK;
X else if (lch >= win->_maxx)
X lch = win->_maxx - 1;;
X y = wy + win->_begy;
X
X if (curwin)
X csp = " ";
X else
X csp = &curscr->_y[wy + win->_begy][wx + win->_begx];
X
X nsp = &win->_y[wy][wx];
X if (CE && !curwin) {
X for (ce = &win->_y[wy][win->_maxx - 1]; *ce == ' '; ce--)
X if (ce <= win->_y[wy])
X break;
X nlsp = ce - win->_y[wy];
X }
X
X if (!curwin)
X ce = CE;
X else
X ce = NULL;
X
X while (wx <= lch) {
X if (*nsp != *csp) {
X domvcur(ly, lx, y, wx + win->_begx);
X# ifdef DEBUG
X fprintf(outf, "MAKECH: 1: wx = %d, lx = %d\n", wx, lx);
X# endif
X ly = y;
X lx = wx + win->_begx;
X while (*nsp != *csp && wx <= lch) {
X if (ce != NULL && wx >= nlsp && *nsp == ' ') {
X /*
X * check for clear to end-of-line
X */
X ce = &curscr->_y[ly][COLS - 1];
X while (*ce == ' ')
X if (ce-- <= csp)
X break;
X clsp = ce - curscr->_y[ly] - win->_begx;
X# ifdef DEBUG
X fprintf(outf, "MAKECH: clsp = %d, nlsp = %d\n", clsp, nlsp);
X# endif
X if (clsp - nlsp >= strlen(CE)
X && clsp < win->_maxx) {
X# ifdef DEBUG
X fprintf(outf, "MAKECH: using CE\n");
X# endif
X _puts(CE);
X lx = wx + win->_begx;
X while (wx++ <= clsp)
X *csp++ = ' ';
X return OK;
X }
X ce = NULL;
X }
X /*
X * enter/exit standout mode as appropriate
X */
X if (SO && (*nsp&_STANDOUT) != (curscr->_flags&_STANDOUT)) {
X if (*nsp & _STANDOUT) {
X _puts(SO);
X curscr->_flags |= _STANDOUT;
X }
X else {
X _puts(SE);
X curscr->_flags &= ~_STANDOUT;
X }
X }
X wx++;
X if (wx >= win->_maxx && wy == win->_maxy - 1)
X if (win->_scroll) {
X if ((curscr->_flags&_STANDOUT) &&
X (win->_flags & _ENDLINE))
X if (!MS) {
X _puts(SE);
X curscr->_flags &= ~_STANDOUT;
X }
X if (!curwin)
X _putchar((*csp = *nsp) & 0177);
X else
X _putchar(*nsp & 0177);
X if (win->_flags&_FULLWIN && !curwin)
X scroll(curscr);
X ly = win->_begy+win->_cury;
X lx = win->_begx+win->_curx;
X return OK;
X }
X else if (win->_flags&_SCROLLWIN) {
X lx = --wx;
X return ERR;
X }
X if (!curwin)
X _putchar((*csp++ = *nsp) & 0177);
X else
X _putchar(*nsp & 0177);
X# ifdef FULLDEBUG
X fprintf(outf,
X "MAKECH:putchar(%c)\n", *nsp & 0177);
X# endif
X if (UC && (*nsp & _STANDOUT)) {
X _putchar('\b');
X _puts(UC);
X }
X nsp++;
X }
X# ifdef DEBUG
X fprintf(outf, "MAKECH: 2: wx = %d, lx = %d\n", wx, lx);
X# endif
X if (lx == wx + win->_begx) /* if no change */
X break;
X lx = wx + win->_begx;
X if (lx >= COLS && AM) {
X lx = 0;
X ly++;
X /*
X * xn glitch: chomps a newline after auto-wrap.
X * we just feed it now and forget about it.
X */
X if (XN) {
X _putchar('\n');
X _putchar('\r');
X }
X }
X }
X else if (wx <= lch)
X while (*nsp == *csp && wx <= lch) {
X nsp++;
X if (!curwin)
X csp++;
X ++wx;
X }
X else
X break;
X# ifdef DEBUG
X fprintf(outf, "MAKECH: 3: wx = %d, lx = %d\n", wx, lx);
X# endif
X }
X return OK;
X}
X
X/*
X * perform a mvcur, leaving standout mode if necessary
X */
XSTATIC
Xdomvcur(oy, ox, ny, nx)
Xint oy, ox, ny, nx; {
X
X if (curscr->_flags & _STANDOUT && !MS) {
X _puts(SE);
X curscr->_flags &= ~_STANDOUT;
X }
X mvcur(oy, ox, ny, nx);
X}
SHAR_EOF
if test 6276 -ne "`wc -c 'refresh.c'`"
then
echo shar: error transmitting "'refresh.c'" '(should have been 6276 characters)'
fi
echo shar: extracting "'scanw.c'" '(1309 characters)'
if test -f 'scanw.c'
then
echo shar: over-writing existing file "'scanw.c'"
fi
sed 's/^X//' << \SHAR_EOF > 'scanw.c'
X/*
X * Copyright 1980 Kenneth C. R. C. Arnold and The Regents of the
X * University of California. Permission is granted to freely
X * distribute curses and its documentation provided that this
X * notice is left intact.
X */
X
X#ifndef lint
Xstatic char sccsid[] = "@(#)scanw.c 5.1 (Berkeley) 6/7/85";
X#endif not lint
X
X/*
X * scanw and friends
X *
X */
X
X# include "curses.ext"
X
X/*
X * This routine implements a scanf on the standard screen.
X */
Xscanw(fmt, args)
Xchar *fmt;
X#ifdef __GNUC__
Xlong args; {
X#else
Xint args; {
X#endif
X
X
X return _sscans(stdscr, fmt, &args);
X}
X/*
X * This routine implements a scanf on the given window.
X */
Xwscanw(win, fmt, args)
XWINDOW *win;
Xchar *fmt;
X#ifdef __GNUC__
Xlong args; {
X#else
Xint args; {
X#endif
X
X return _sscans(win, fmt, &args);
X}
X/*
X * This routine actually executes the scanf from the window.
X *
X * This is really a modified version of "sscanf". As such,
X * it assumes that sscanf interfaces with the other scanf functions
X * in a certain way. If this is not how your system works, you
X * will have to modify this routine to use the interface that your
X * "sscanf" uses.
X */
X_sscans(win, fmt, args)
XWINDOW *win;
Xchar *fmt;
X#ifdef __GNUC__
Xlong *args;
X#else
Xint *args;
X#endif
X{
X char buf[256];
X if (wgetstr(win, buf) == ERR)
X return ERR;
X return _doscanf(1, buf, fmt, args);
X}
SHAR_EOF
if test 1309 -ne "`wc -c 'scanw.c'`"
then
echo shar: error transmitting "'scanw.c'" '(should have been 1309 characters)'
fi
echo shar: extracting "'scroll.c'" '(774 characters)'
if test -f 'scroll.c'
then
echo shar: over-writing existing file "'scroll.c'"
fi
sed 's/^X//' << \SHAR_EOF > 'scroll.c'
X/*
X * Copyright 1980 Kenneth C. R. C. Arnold and The Regents of the
X * University of California. Permission is granted to freely
X * distribute curses and its documentation provided that this
X * notice is left intact.
X */
X
X#ifndef lint
Xstatic char sccsid[] = "@(#)scroll.c 5.1 (Berkeley) 6/7/85";
X#endif not lint
X
X# include "curses.ext"
X
X/*
X * This routine scrolls the window up a line.
X *
X */
Xscroll(win)
Xregister WINDOW *win;
X{
X register int oy, ox;
X
X# ifdef DEBUG
X fprintf(outf, "SCROLL(%0.2o)\n", win);
X# endif
X
X if (!win->_scroll)
X return ERR;
X
X getyx(win, oy, ox);
X wmove(win, 0, 0);
X wdeleteln(win);
X wmove(win, oy, ox);
X
X if (win == curscr) {
X _putchar('\n');
X if (!NONL)
X win->_curx = 0;
X# ifdef DEBUG
X fprintf(outf, "SCROLL: win == curscr\n");
X# endif
X }
X}
SHAR_EOF
if test 774 -ne "`wc -c 'scroll.c'`"
then
echo shar: error transmitting "'scroll.c'" '(should have been 774 characters)'
fi
echo shar: extracting "'standout.c'" '(728 characters)'
if test -f 'standout.c'
then
echo shar: over-writing existing file "'standout.c'"
fi
sed 's/^X//' << \SHAR_EOF > 'standout.c'
X/*
X * Copyright 1980 Kenneth C. R. C. Arnold and The Regents of the
X * University of California. Permission is granted to freely
X * distribute curses and its documentation provided that this
X * notice is left intact.
X */
X
X#ifndef lint
Xstatic char sccsid[] = "@(#)standout.c 5.1 (Berkeley) 6/7/85";
X#endif not lint
X
X/*
X * routines dealing with entering and exiting standout mode
X *
X */
X
X# include "curses.ext"
X
X/*
X * enter standout mode
X */
Xchar *
Xwstandout(win)
Xreg WINDOW *win;
X{
X if (!SO && !UC)
X return FALSE;
X
X win->_flags |= _STANDOUT;
X return (SO ? SO : UC);
X}
X
X/*
X * exit standout mode
X */
Xchar *
Xwstandend(win)
Xreg WINDOW *win;
X{
X if (!SO && !UC)
X return FALSE;
X
X win->_flags &= ~_STANDOUT;
X return (SE ? SE : UC);
X}
SHAR_EOF
if test 728 -ne "`wc -c 'standout.c'`"
then
echo shar: error transmitting "'standout.c'" '(should have been 728 characters)'
fi
echo shar: extracting "'toucholap.c'" '(1475 characters)'
if test -f 'toucholap.c'
then
echo shar: over-writing existing file "'toucholap.c'"
fi
sed 's/^X//' << \SHAR_EOF > 'toucholap.c'
X/*
X * Copyright 1980 Kenneth C. R. C. Arnold and The Regents of the
X * University of California. Permission is granted to freely
X * distribute curses and its documentation provided that this
X * notice is left intact.
X */
X
X#ifndef lint
Xstatic char sccsid[] = "@(#)toucholap.c 5.1 (Berkeley) 6/7/85";
X#endif not lint
X
X# include "curses.ext"
X
X# define min(a,b) (a < b ? a : b)
X# define max(a,b) (a > b ? a : b)
X
X/*
X * Touch, on win2, the part that overlaps with win1.
X *
X */
Xtouchoverlap(win1, win2)
Xreg WINDOW *win1, *win2; {
X
X reg int x, y, endy, endx, starty, startx;
X
X# ifdef DEBUG
X fprintf(outf, "TOUCHOVERLAP(%0.2o, %0.2o);\n", win1, win2);
X# endif
X starty = max(win1->_begy, win2->_begy);
X startx = max(win1->_begx, win2->_begx);
X endy = min(win1->_maxy + win1->_begy, win2->_maxy + win2->_begx);
X endx = min(win1->_maxx + win1->_begx, win2->_maxx + win2->_begx);
X# ifdef DEBUG
X fprintf(outf, "TOUCHOVERLAP:from (%d,%d) to (%d,%d)\n", starty, startx, endy, endx);
X fprintf(outf, "TOUCHOVERLAP:win1 (%d,%d) to (%d,%d)\n", win1->_begy, win1->_begx, win1->_begy + win1->_maxy, win1->_begx + win1->_maxx);
X fprintf(outf, "TOUCHOVERLAP:win2 (%d,%d) to (%d,%d)\n", win2->_begy, win2->_begx, win2->_begy + win2->_maxy, win2->_begx + win2->_maxx);
X# endif
X if (starty >= endy || startx >= endx)
X return;
X starty -= win2->_begy;
X startx -= win2->_begx;
X endy -= win2->_begy;
X endx -= win2->_begx;
X endx--;
X for (y = starty; y < endy; y++)
X touchline(win2, y, startx, endx);
X}
SHAR_EOF
if test 1475 -ne "`wc -c 'toucholap.c'`"
then
echo shar: error transmitting "'toucholap.c'" '(should have been 1475 characters)'
fi
echo shar: extracting "'touchwin.c'" '(1265 characters)'
if test -f 'touchwin.c'
then
echo shar: over-writing existing file "'touchwin.c'"
fi
sed 's/^X//' << \SHAR_EOF > 'touchwin.c'
X/*
X * Copyright 1980 Kenneth C. R. C. Arnold and The Regents of the
X * University of California. Permission is granted to freely
X * distribute curses and its documentation provided that this
X * notice is left intact.
X */
X
X#ifndef lint
Xstatic char sccsid[] = "@(#)touchwin.c 5.1 (Berkeley) 6/7/85";
X#endif not lint
X
X# include "curses.ext"
X
X/*
X * make it look like the whole window has been changed.
X *
X */
Xtouchwin(win)
Xregister WINDOW *win;
X{
X register int y, maxy;
X
X# ifdef DEBUG
X fprintf(outf, "TOUCHWIN(%0.2o)\n", win);
X# endif
X maxy = win->_maxy;
X for (y = 0; y < maxy; y++)
X touchline(win, y, 0, win->_maxx - 1);
X}
X
X/*
X * touch a given line
X */
Xtouchline(win, y, sx, ex)
Xregister WINDOW *win;
Xregister int y, sx, ex;
X{
X# ifdef DEBUG
X fprintf(outf, "TOUCHLINE(%0.2o, %d, %d, %d)\n", win, y, sx, ex);
X fprintf(outf, "TOUCHLINE:first = %d, last = %d\n", win->_firstch[y], win->_lastch[y]);
X# endif
X sx += win->_ch_off;
X ex += win->_ch_off;
X if (win->_firstch[y] == _NOCHANGE) {
X win->_firstch[y] = sx;
X win->_lastch[y] = ex;
X }
X else {
X if (win->_firstch[y] > sx)
X win->_firstch[y] = sx;
X if (win->_lastch[y] < ex)
X win->_lastch[y] = ex;
X }
X# ifdef DEBUG
X fprintf(outf, "TOUCHLINE:first = %d, last = %d\n", win->_firstch[y], win->_lastch[y]);
X# endif
X}
SHAR_EOF
if test 1265 -ne "`wc -c 'touchwin.c'`"
then
echo shar: error transmitting "'touchwin.c'" '(should have been 1265 characters)'
fi
echo shar: extracting "'tstp.c'" '(915 characters)'
if test -f 'tstp.c'
then
echo shar: over-writing existing file "'tstp.c'"
fi
sed 's/^X//' << \SHAR_EOF > 'tstp.c'
X/*
X * Copyright 1980 Kenneth C. R. C. Arnold and The Regents of the
X * University of California. Permission is granted to freely
X * distribute curses and its documentation provided that this
X * notice is left intact.
X */
X
X#ifndef lint
Xstatic char sccsid[] = "@(#)tstp.c 5.1 (Berkeley) 6/7/85";
X#endif not lint
X
X# include <signal.h>
X
X# include "curses.ext"
X
X/*
X * handle stop and start signals
X *
X * @(#)tstp.c 5.1 (Berkeley) 6/7/85
X */
Xtstp() {
X
X# ifdef SIGTSTP
X
X SGTTY tty;
X int omask;
X# ifdef DEBUG
X if (outf)
X fflush(outf);
X# endif
X tty = _tty;
X mvcur(0, COLS - 1, LINES - 1, 0);
X endwin();
X fflush(stdout);
X /* reset signal handler so kill below stops us */
X signal(SIGTSTP, SIG_DFL);
X#define mask(s) (1 << ((s)-1))
X omask = sigsetmask(sigblock(0) &~ mask(SIGTSTP));
X kill(0, SIGTSTP);
X sigblock(mask(SIGTSTP));
X signal(SIGTSTP, tstp);
X _tty = tty;
X stty(_tty_ch, &_tty);
X wrefresh(curscr);
X# endif SIGTSTP
X}
SHAR_EOF
if test 915 -ne "`wc -c 'tstp.c'`"
then
echo shar: error transmitting "'tstp.c'" '(should have been 915 characters)'
fi
echo shar: extracting "'unctrl.c'" '(1134 characters)'
if test -f 'unctrl.c'
then
echo shar: over-writing existing file "'unctrl.c'"
fi
sed 's/^X//' << \SHAR_EOF > 'unctrl.c'
X/*
X * Copyright 1980 Kenneth C. R. C. Arnold and The Regents of the
X * University of California. Permission is granted to freely
X * distribute curses and its documentation provided that this
X * notice is left intact.
X */
X
X#ifndef lint
Xstatic char sccsid[] = "@(#)unctrl.c 5.1 (Berkeley) 6/7/85";
X#endif not lint
X
X/*
X * define unctrl codes for each character
X *
X */
X
X/* LINTLIBRARY */
Xchar *_unctrl[] = { /* unctrl codes for ttys */
X "^@", "^A", "^B", "^C", "^D", "^E", "^F", "^G", "^H", "^I", "^J", "^K",
X "^L", "^M", "^N", "^O", "^P", "^Q", "^R", "^S", "^T", "^U", "^V", "^W",
X "^X", "^Y", "^Z", "^[", "^\\", "^]", "^~", "^_",
X " ", "!", "\"", "#", "$", "%", "&", "'", "(", ")", "*", "+", ",", "-",
X ".", "/", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", ":", ";",
X "<", "=", ">", "?", "@", "A", "B", "C", "D", "E", "F", "G", "H", "I",
X "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W",
X "X", "Y", "Z", "[", "\\", "]", "^", "_", "`", "a", "b", "c", "d", "e",
X "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s",
X "t", "u", "v", "w", "x", "y", "z", "{", "|", "}", "~", "^?"
X};
SHAR_EOF
if test 1134 -ne "`wc -c 'unctrl.c'`"
then
echo shar: error transmitting "'unctrl.c'" '(should have been 1134 characters)'
fi
# End of shell archive
exit 0
usenet: {decvax,sun}!cwjcc!dsrgsun!bammi jwahar r. bammi
csnet: bammi@dsrgsun.ces.CWRU.edu
arpa: bammi@dsrgsun.ces.CWRU.edu
compuServe: 71515,155