[net.sources] Window source #2 [of 0-7]: misc files

chris@umcp-cs.UUCP (07/01/83)

: Run this shell script with "sh" not "csh"
PATH=:/bin:/usr/bin:/usr/ucb
export PATH
all=FALSE
if [ $1x = -ax ]; then
	all=TRUE
fi
/bin/echo 'Extracting acursor.c'
sed 's/^X//' <<'//go.sysin dd *' >acursor.c
X#include "win.h"
X
X/* Copyright (c) 1983 University of Maryland Computer Science Department */
X
X/* Position the window cursor, absolute (buffer) */
XWAcursor (w, row, col)
Xregister Win *w;
Xregister row, col;
X{
X	register Buf *b = w -> w_textbuf;
X
X	if (row < 0)
X		row = 0;
X	else if (row >= b -> b_nrows - (w -> OYE - w -> IYE))
X		row = b -> b_nrows - (w -> OYE - w -> IYE) - 1;
X	if (col < 0)
X		col = 0;
X	else if (col >= b -> b_ncols - (w -> OXE - w -> IXE))
X		col = b -> b_ncols - (w -> OXE - w -> IXE) - 1;
X	row -= w -> w_bstart.row;
X	col -= w -> w_bstart.col;
X	if (row < 0) {
X		w -> w_bstart.row += row;
X		w -> w_cursor.row = 0;
X		MajorUpdate = 1;
X	}
X	else if (row < w -> IYE)
X		w -> w_cursor.row = row;
X	else {
X		w -> w_bstart.row += row - w -> IYE + 1;
X		w -> w_cursor.row = w -> IYE - 1;
X		MajorUpdate = 1;
X	}
X	if (col < 0) {
X		w -> w_bstart.col += col;
X		w -> w_cursor.col = 0;
X		MajorUpdate = 1;
X	}
X	else if (col < w -> IXE)
X		w -> w_cursor.col = col;
X	else {
X		w -> w_bstart.col += col - w -> IXE + 1;
X		w -> w_cursor.col = w -> IXE - 1;
X		MajorUpdate = 1;
X	}
X	WFixCursor (w);
X	if ((w -> w_status & WCURSOR) == 0)
X		w -> w_status |= WDUMP;
X	return 0;
X}
//go.sysin dd *
made=TRUE
if [ $made = TRUE ]; then
	/bin/chmod 644 acursor.c
	/bin/echo -n '	'; /bin/ls -ld acursor.c
fi
/bin/echo 'Extracting aprint.c'
sed 's/^X//' <<'//go.sysin dd *' >aprint.c
X#include "win.h"
X
X/* Copyright (c) 1983 University of Maryland Computer Science Department */
X
X/* Print C style string with mode m into window w at aux cursor */
X/* MODE m MAY HAVE "WBUF" BIT ON */
X/* PRINTS TO w->w_winbuf */
XWaputs (s, m, w)
Xregister char *s;
Xregister m;
Xregister Win *w;
X{
X	while (*s)
X		Waputc (*s++, m, w);
X	return 0;
X}
X
X/* Put a char into window w with mode m at aux cursor. */
X/* CHAR c REALLY GOES INTO w->w_winbuf AND IS NOT INTERPRETED */
X/* MODE m MAY HAVE "WBUF" BIT ON, CHAR c MAY HAVE HIGH BIT ON */
XWaputc (c, m, w)
Xregister c, m;
Xregister Win *w;
X{
X	w -> w_wcursor -> Mode =
X		(w -> w_wcursor -> Mode & ~(WBUF|MODEMASK)) |
X		(m & (WBUF|MODEMASK));
X	w -> w_wcursor -> Char = c;
X	if (w -> w_status & WHIDDEN)
X		w -> w_status |= WDUMP;
X	else
X		WDispPut (w, w -> w_auxcursor.row, w -> w_auxcursor.col, 0);
X	w -> w_wcursor++;
X	w -> w_auxcursor.col++;
X	if (w -> w_auxcursor.col >= w -> OXE) {
X		w -> w_auxcursor.col = 0;
X		w -> w_auxcursor.row++;
X		if (w -> w_auxcursor.row >= w -> OYE) {
X			w -> w_auxcursor.row = 0;
X			w -> w_wcursor = w -> w_winbuf;
X		}
X	}
X	return 0;
X}
//go.sysin dd *
made=TRUE
if [ $made = TRUE ]; then
	/bin/chmod 644 aprint.c
	/bin/echo -n '	'; /bin/ls -ld aprint.c
fi
/bin/echo 'Extracting aread.c'
sed 's/^X//' <<'//go.sysin dd *' >aread.c
X#include "win.h"
X
X/* Copyright (c) 1983 University of Maryland Computer Science Department */
X
X/* Return char from winbuf at aux cursor, advancing aux cursor */
X/* If charonly set returns only char (not mode<<NBPB | char) */
XWAread (w, charonly)
Xregister Win *w;
Xint charonly;
X{
X	int rv = charonly ? w -> w_wcursor -> Char : w -> w_wcursor -> ch_all;
X	w -> w_wcursor++;
X	w -> w_auxcursor.col++;
X	if (w -> w_auxcursor.col >= w -> OXE) {
X		w -> w_auxcursor.col = 0;
X		w -> w_auxcursor.row++;
X		if (w -> w_auxcursor.row >= w -> OYE) {
X			w -> w_auxcursor.row = 0;
X			w -> w_wcursor = w -> w_winbuf;
X		}
X	}
X	return rv;
X}
//go.sysin dd *
made=TRUE
if [ $made = TRUE ]; then
	/bin/chmod 644 aread.c
	/bin/echo -n '	'; /bin/ls -ld aread.c
fi
/bin/echo 'Extracting auxcursor.c'
sed 's/^X//' <<'//go.sysin dd *' >auxcursor.c
X#include "win.h"
X
X/* Copyright (c) 1983 University of Maryland Computer Science Department */
X
X/* Position the aux cursor */
XWauxcursor (w, row, col)
Xregister Win *w;
Xregister row, col;
X{
X	w -> w_auxcursor.row = Min (Max (row, 0), w -> OYE - 1);
X	w -> w_auxcursor.col = Min (Max (col, 0), w -> OXE - 1);
X	WFixCursor (w);
X	return 0;
X}
//go.sysin dd *
made=TRUE
if [ $made = TRUE ]; then
	/bin/chmod 644 auxcursor.c
	/bin/echo -n '	'; /bin/ls -ld auxcursor.c
fi
/bin/echo 'Extracting back.c'
sed 's/^X//' <<'//go.sysin dd *' >back.c
X#include "win.h"
X
X/* Copyright (c) 1983 University of Maryland Computer Science Department */
X
X/* Move window w to back (bottom), i.e., make it covered by all other
X   windows.  If hidden, remains hidden. */
XWback (w)
Xregister Win *w;
X{
X	register Win *p, *pp;
X
X	if (w -> w_next == 0)	/* Then already in back */
X		return 0;
X
X	/* Find the back window */
X	for (p = w; p -> w_next; p = p -> w_next)
X		;
X
X	/* Find the window just before w, and unlink w */
X	if (w == WinList)
X		WinList = w -> w_next;
X	else {
X		for (pp = WinList; pp -> w_next != w; pp = pp -> w_next)
X			;
X		pp -> w_next = w -> w_next;
X	}
X
X	/* Now link w in at end of window list */
X	w -> w_next = 0;
X	p -> w_next = w;
X
X	/* Recompute covering relationships if necessary */
X	if ((w -> w_status & WHIDDEN) || (w -> w_status & WCOVERING) == 0)
X		return 0;
X	WRemoveCoverList (w);	/* Unmark w */
X	WComputeCover (w);	/* Compute windows covering w */
X	return 0;
X}
//go.sysin dd *
made=TRUE
if [ $made = TRUE ]; then
	/bin/chmod 644 back.c
	/bin/echo -n '	'; /bin/ls -ld back.c
fi
/bin/echo 'Extracting bclear.c'
sed 's/^X//' <<'//go.sysin dd *' >bclear.c
X#include "win.h"
X
X/* Copyright (c) 1983 University of Maryland Computer Science Department */
X
X/* Clear buffer (w->w_winbuf not involved) */
XWBclear (w, howto)
XWin *w;
Xint howto;
X{
X	register Buf *b = w -> w_textbuf;
X	register Ch *c, *end;
X	register blank = ' ' | (w -> w_mode << NBPB);
X
X	switch (howto) {
X	case 0:			/* cursor to end of buffer */
X	default:
X		c = b -> b_contents + b -> b_cursor.row * b -> b_ncols +
X			b -> b_cursor.col;
X		end = b -> b_contents + b -> b_nrows * b -> b_ncols;
X		break;
X	case 1:			/* Beginning of buffer to cursor */
X		c = b -> b_contents;
X		end = b -> b_contents + b -> b_cursor.row * b -> b_ncols +
X			b -> b_cursor.col;
X		break;
X	case 2:			/* Entire buffer */
X		c = b -> b_contents;
X		end = c + b -> b_nrows * b -> b_ncols;
X		break;
X	}
X	while (c < end)
X		c++ -> ch_all = blank;
X	b -> b_nmodw = -1;
X	return 0;
X}
//go.sysin dd *
made=TRUE
if [ $made = TRUE ]; then
	/bin/chmod 644 bclear.c
	/bin/echo -n '	'; /bin/ls -ld bclear.c
fi
/bin/echo 'Extracting bclearline.c'
sed 's/^X//' <<'//go.sysin dd *' >bclearline.c
X#include "win.h"
X
X/* Copyright (c) 1983 University of Maryland Computer Science Department */
X
X/* Clear one line of buffer (w->w_winbuf not involved) */
XWBclearline (w, howto)
XWin *w;
Xint howto;
X{
X	register Buf *b = w -> w_textbuf;
X	register Ch *c, *end;
X	register blank = ' ' | (w -> w_mode << NBPB);
X
X	c = b -> b_contents + b -> b_cursor.row * b -> b_ncols;
X	switch (howto) {
X	case 0:			/* Cursor to end of line */
X	default:
X		end = c + b -> b_ncols;
X		c += b -> b_cursor.col;
X		break;
X	case 1:			/* Beginning of line to cursor */
X		end = c + b -> b_cursor.col;
X		break;
X	case 2:			/* Entire line */
X		end = c + b -> b_ncols;
X		break;
X	}
X	while (c < end)
X		c++ -> ch_all = blank;
X	b -> b_nmodw = -1;
X	return 0;
X}
//go.sysin dd *
made=TRUE
if [ $made = TRUE ]; then
	/bin/chmod 644 bclearline.c
	/bin/echo -n '	'; /bin/ls -ld bclearline.c
fi
/bin/echo 'Extracting bcopy.c'
sed 's/^X//' <<'//go.sysin dd *' >bcopy.c
X/* Block copy from from to to, count bytes */
X
X/* Copyright (c) 1983 University of Maryland Computer Science Department */
X
X#ifdef VAX
X/* ARGSUSED */
Xbcopy (from, to, count)
Xchar *from, *to;
Xint count;
X{
X	asm("	movc3	12(ap),*4(ap),*8(ap)");
X}
X#else
Xbcopy (from, to, count)
Xregister char *from, *to;
Xregister count;
X{
X	while (--count>=0) *to++ = *from++;
X}
X#endif
//go.sysin dd *
made=TRUE
if [ $made = TRUE ]; then
	/bin/chmod 644 bcopy.c
	/bin/echo -n '	'; /bin/ls -ld bcopy.c
fi
/bin/echo 'Extracting bcursor.c'
sed 's/^X//' <<'//go.sysin dd *' >bcursor.c
X#include "win.h"
X
X/* Copyright (c) 1983 University of Maryland Computer Science Department */
X
X/* Set the buffer cursor */
XWBcursor (w, row, col)
XWin *w;
Xregister row, col;
X{
X	register Buf *b = w -> w_textbuf;
X
X	b -> b_cursor.row = Min (Max (row, 0), b -> b_nrows - 1);
X	b -> b_cursor.col = Min (Max (col, 0), b -> b_ncols - 1);
X	return 0;
X}
//go.sysin dd *
made=TRUE
if [ $made = TRUE ]; then
	/bin/chmod 644 bcursor.c
	/bin/echo -n '	'; /bin/ls -ld bcursor.c
fi
/bin/echo 'Extracting bdelchars.c'
sed 's/^X//' <<'//go.sysin dd *' >bdelchars.c
X#include "win.h"
X
X/* Copyright (c) 1983 University of Maryland Computer Science Department */
X
X/* Delete n chars from buffer at cursor */
XWBdelchars (w, n)
XWin *w;
Xint n;
X{
X	register Buf *b;
X	register Ch *cp, *ct, *start;
X	int blank;
X
X	if (n < 0)
X		return -1;
X	if (n == 0)
X		return 0;
X	b = w -> w_textbuf;
X	if (n + b -> b_cursor.col > b -> b_ncols)
X		n = b -> b_ncols - b -> b_cursor.col;
X	blank = ' ' | (w -> w_mode << NBPB);
X
X	ct = b -> b_contents + b -> b_cursor.row * b -> b_ncols;
X	start = ct + b -> b_cursor.col;
X	cp = start + n;
X	ct += b -> b_ncols;
X	while (cp > start)
X		(--ct) -> ch_all = (--cp) -> ch_all;
X	while (ct > start)
X		(--ct) -> ch_all = blank;
X	b -> b_nmodw = -1;
X	return 0;
X}
//go.sysin dd *
made=TRUE
if [ $made = TRUE ]; then
	/bin/chmod 644 bdelchars.c
	/bin/echo -n '	'; /bin/ls -ld bdelchars.c
fi
/bin/echo 'Extracting bdelcols.c'
sed 's/^X//' <<'//go.sysin dd *' >bdelcols.c
X#include "win.h"
X
X/* Copyright (c) 1983 University of Maryland Computer Science Department */
X
X/* Delete n columns from buffer at cursor */
XWBdelcols (w, n)
XWin *w;
Xint n;
X{
X	register Buf *b;
X	register Ch *cp, *ct;
X	register j;
X	int blank, i, nm;
X
X	if (n < 0)
X		return -1;
X	if (n == 0)
X		return 0;
X	blank = ' ' | (w -> w_mode << NBPB);
X	b = w -> w_textbuf;
X	if (n > b -> b_ncols - b -> b_cursor.col)
X		n = b -> b_ncols - b -> b_cursor.col;
X	nm = b -> b_ncols - b -> b_cursor.col - n;
X	ct = b -> b_contents + b -> b_cursor.col;
X	cp = ct + n;
X	for (i = 0; i < b -> b_nrows; i++) {
X		for (j = 0; j < nm; j++)
X			ct++ -> ch_all = cp++ -> ch_all;
X		cp += b -> b_ncols - j;
X		for (j = 0; j < n; j++)
X			ct++ -> ch_all = blank;
X		ct += b -> b_ncols - j - nm;
X	}
X	b -> b_nmodw = -1;
X	return 0;
X}
//go.sysin dd *
made=TRUE
if [ $made = TRUE ]; then
	/bin/chmod 644 bdelcols.c
	/bin/echo -n '	'; /bin/ls -ld bdelcols.c
fi
/bin/echo 'Extracting bdellines.c'
sed 's/^X//' <<'//go.sysin dd *' >bdellines.c
X#include "win.h"
X
X/* Copyright (c) 1983 University of Maryland Computer Science Department */
X
X/* Delete n lines from buffer at cursor */
XWBdellines (w, n)
XWin *w;
Xint n;
X{
X	register Buf *b;
X	register Ch *cp, *ct, *end;
X	int blank;
X
X	if (n < 0)
X		return -1;
X	if (n == 0)
X		return 0;
X	blank = ' ' | (w -> w_mode << NBPB);
X	b = w -> w_textbuf;
X	ct = b -> b_contents + b -> b_cursor.row * b -> b_ncols;
X	cp = ct + n * b -> b_ncols;
X	end = b -> b_contents + b -> b_nrows * b -> b_ncols;
X	while (cp < end)
X		ct++ -> ch_all = cp++ -> ch_all;
X	while (ct < end)
X		ct++ -> ch_all = blank;
X	b -> b_nmodw = -1;
X	return 0;
X}
//go.sysin dd *
made=TRUE
if [ $made = TRUE ]; then
	/bin/chmod 644 bdellines.c
	/bin/echo -n '	'; /bin/ls -ld bdellines.c
fi
/bin/echo 'Extracting binschars.c'
sed 's/^X//' <<'//go.sysin dd *' >binschars.c
X#include "win.h"
X
X/* Copyright (c) 1983 University of Maryland Computer Science Department */
X
X/* Insert n blanks in buffer at cursor */
XWBinschars (w, n)
XWin *w;
Xint n;
X{
X	register Buf *b;
X	register Ch *cp, *ct, *start;
X	int blank;
X
X	if (n < 0)
X		return -1;
X	if (n == 0)
X		return 0;
X	b = w -> w_textbuf;
X	if (n + b -> b_cursor.col > b -> b_ncols)
X		n = b -> b_ncols - b -> b_cursor.col;
X	blank = ' ' | (w -> w_mode << NBPB);
X
X	ct = b -> b_contents + b -> b_cursor.row * b -> b_ncols;
X	start = ct + b -> b_cursor.col;
X	cp = start + n;
X	ct += b -> b_ncols;
X	while (cp > start)
X		(--ct) -> ch_all = (--cp) -> ch_all;
X	while (ct > start)
X		(--ct) -> ch_all = blank;
X	b -> b_nmodw = -1;
X	return 0;
X}
//go.sysin dd *
made=TRUE
if [ $made = TRUE ]; then
	/bin/chmod 644 binschars.c
	/bin/echo -n '	'; /bin/ls -ld binschars.c
fi
/bin/echo 'Extracting binscols.c'
sed 's/^X//' <<'//go.sysin dd *' >binscols.c
X#include "win.h"
X
X/* Copyright (c) 1983 University of Maryland Computer Science Department */
X
X/* Insert n columns in buffer at cursor */
XWBinscols (w, n)
XWin *w;
Xint n;
X{
X	register Buf *b;
X	register Ch *cp, *ct;
X	register j;
X	int i, blank, nm;
X
X	if (n < 0)
X		return -1;
X	if (n == 0)
X		return 0;
X	b = w -> w_textbuf;
X	if (n > b -> b_ncols - b -> b_cursor.col)
X		n = b -> b_ncols - b -> b_cursor.col;
X	nm = b -> b_ncols - b -> b_cursor.col - n;
X	blank = ' ' | (w -> w_mode << NBPB);
X	ct = b -> b_contents + b -> b_ncols;
X	cp = ct - n;
X	for (i = 0; i < b -> b_nrows; i++) {
X		for (j = 0; j < nm; j++)
X			(--ct) -> ch_all = (--cp) -> ch_all;
X		cp += b -> b_ncols + j;
X		for (j = 0; j < n; j++)
X			(--ct) -> ch_all = blank;
X		ct += b -> b_ncols + j + nm;
X	}
X	b -> b_nmodw = -1;
X	return 0;
X}
//go.sysin dd *
made=TRUE
if [ $made = TRUE ]; then
	/bin/chmod 644 binscols.c
	/bin/echo -n '	'; /bin/ls -ld binscols.c
fi
/bin/echo 'Extracting binslines.c'
sed 's/^X//' <<'//go.sysin dd *' >binslines.c
X#include "win.h"
X
X/* Copyright (c) 1983 University of Maryland Computer Science Department */
X
X/* Insert n lines in buffer at buffer cursor */
XWBinslines (w, n)
XWin *w;
Xint n;
X{
X	register Buf *b;
X	register Ch *cp, *ct, *end;
X	int blank;
X
X	if (n < 0)
X		return -1;
X	if (n == 0)
X		return 0;
X	blank = ' ' | (w -> w_mode << NBPB);
X	b = w -> w_textbuf;
X	ct = b -> b_contents + b -> b_nrows * b -> b_ncols;
X	cp = ct - n * b -> b_ncols;
X	end = b -> b_contents + b -> b_cursor.row * b -> b_ncols;
X	while (cp > end)
X		(--ct) -> ch_all = (--cp) -> ch_all;
X	while (ct > end)
X		(--ct) -> ch_all = blank;
X	b -> b_nmodw = -1;
X	return 0;
X}
//go.sysin dd *
made=TRUE
if [ $made = TRUE ]; then
	/bin/chmod 644 binslines.c
	/bin/echo -n '	'; /bin/ls -ld binslines.c
fi
/bin/echo 'Extracting border.c'
sed 's/^X//' <<'//go.sysin dd *' >border.c
X#include "win.h"
X
X/* Copyright (c) 1983 University of Maryland Computer Science Department */
X
X/* Border a window with specified chars */
XWborder (w, ulc, top, urc, left, right, llc, bottom, lrc)
Xregister Win *w;
X{
X	register Ch *c = w -> w_winbuf;
X	register i;
X
X	/* Make sure there's room at the edges for the border chars; if not,
X	   use setmargins to make 'em */
X	if (w -> IXO < 1 || w -> IXO + w -> IXE == w -> OXE ||
X	    w -> IYO < 1 || w -> IYO + w -> IYE == w -> OYE)
X		if (Wsetmargins (w, 1, 1, w -> OXE - 2, w -> OYE - 2))
X			return -1;
X
X	/* Upper left corner */
X	c -> Mode &= ~(MODEMASK|WBUF);
X	c -> Mode |= w -> w_mode;
X	c++ -> Char = ulc;
X
X	/* Top */
X	for (i = 0; i < w -> w_inside.xextent; i++) {
X		c -> Mode &= ~(MODEMASK|WBUF);
X		c -> Mode |= w -> w_mode;
X		c++ -> Char = top;
X	}
X
X	/* Upper right corner */
X	c -> Mode &= ~(MODEMASK|WBUF);
X	c -> Mode |= w -> w_mode;
X	c++ -> Char = urc;
X
X	/* Left and right sides */
X	for (i = 0; i < w -> w_inside.yextent; i++) {
X		c -> Mode &= ~(MODEMASK|WBUF);
X		c -> Mode |= w -> w_mode;
X		c -> Char = left;
X		c += w -> w_outside.xextent - 1;
X		c -> Mode &= ~(MODEMASK|WBUF);
X		c -> Mode |= w -> w_mode;
X		c++ -> Char = right;
X	}
X
X	/* Lower left corner */
X	c -> Mode &= ~(MODEMASK|WBUF);
X	c -> Mode |= w -> w_mode;
X	c++ -> Char = llc;
X
X	/* Bottom */
X	for (i = 0; i < w -> w_inside.xextent; i++) {
X		c -> Mode &= ~(MODEMASK|WBUF);
X		c -> Mode |= w -> w_mode;
X		c++ -> Char = bottom;
X	}
X
X	/* Lower right corner */
X	c -> Mode &= ~(MODEMASK|WBUF);
X	c -> Mode |= w -> w_mode;
X	c -> Char = lrc;
X	w -> w_status |= WDUMP|WBORDERED;
X	return 0;
X}
//go.sysin dd *
made=TRUE
if [ $made = TRUE ]; then
	/bin/chmod 644 border.c
	/bin/echo -n '	'; /bin/ls -ld border.c
fi
/bin/echo 'Extracting box.c'
sed 's/^X//' <<'//go.sysin dd *' >box.c
X#include "win.h"
X#include "display.h"
X
X/* Copyright (c) 1983 University of Maryland Computer Science Department */
X
X/* Create the box at the given coordinates, clipping to fit screen */
X
XWbox (xorg, yorg, xext, yext)
Xregister xorg, yorg, xext, yext;
X{
X	WBox.xorigin = Min (Max (xorg, 0), ScreenWidth - 1);
X	WBox.yorigin = Min (Max (yorg, 0), ScreenLength - 1);
X	WBox.xextent = xext > 1 ?
X		(xorg + xext < ScreenWidth ? xext : ScreenWidth - xorg) : 1;
X	WBox.yextent = yext > 1 ?
X		(yorg + yext < ScreenLength? yext : ScreenLength- yorg) : 1;
X	if (WBoxActive)
X		MajorUpdate = 1;
X	WBoxActive = 1;
X	return 0;
X}
//go.sysin dd *
made=TRUE
if [ $made = TRUE ]; then
	/bin/chmod 644 box.c
	/bin/echo -n '	'; /bin/ls -ld box.c
fi
/bin/echo 'Extracting boxfind.c'
sed 's/^X//' <<'//go.sysin dd *' >boxfind.c
X#include "win.h"
X
X/* Copyright (c) 1983 University of Maryland Computer Science Department */
X
X/* Find the first which window the box is "in" (on) and make it the current
X   one [note: box considered to be a point at its origin] */
XWin *
XWboxfind ()
X{
X	register Win *w;
X
X	for (w = WinList; w; w = w -> w_next) {
X		if (w -> w_status & WHIDDEN) continue;
X		if (w -> OXO <= WBox.xorigin &&
X			w -> OYO <= WBox.yorigin &&
X			w -> OXO + w -> OXE > WBox.xorigin &&
X			w -> OYO + w -> OYE > WBox.yorigin)
X				return CurWin = w;
X	}
X	return 0;
X}
//go.sysin dd *
made=TRUE
if [ $made = TRUE ]; then
	/bin/chmod 644 boxfind.c
	/bin/echo -n '	'; /bin/ls -ld boxfind.c
fi
/bin/echo 'Extracting bprint.c'
sed 's/^X//' <<'//go.sysin dd *' >bprint.c
X#include "window.h"
X
X/* Copyright (c) 1983 University of Maryland Computer Science Department */
X
X/* Print C style string to buffer */
XWBputs (s, w)
Xregister char *s;
Xregister Win *w;
X{
X	while (*s)
X		WBputc (*s++, w);
X	return 0;
X}
X
X/* Put a char into buffer */
XWBputc (c, w)
Xregister c;
Xregister Win *w;
X{
X	register Buf *b = w -> w_textbuf;
X	register Ch *cp;
X
X	switch (c &= 0x7f) {
X	case '\n':		/* Newline */
Xnl:
X		b -> b_cursor.row++;
X		if (b -> b_cursor.row >= b -> b_ncols)
X			WBscroll (w, 1);
X		if (w -> w_status & WNEWLINE)
X			goto cr;
X		break;
X	case '\r':		/* Carriage return */
X		if (w -> w_status & WNEWLINE)
X			goto nl;
Xcr:
X		b -> b_cursor.col = 0;
X		break;
X	case '\b':		/* Backspace */
X		if (b -> b_cursor.col)
X			b -> b_cursor.col--;
X		break;
X	case '\t':		/* Tab */
X		c = (b -> b_cursor.col / 8 + 1) * 8;
X		if (c < b -> b_ncols)
X			b -> b_cursor.col = c;
X		break;
X	case '\7':		/* Bell */
X		Ding ();
X		break;
X	default:
X		if (c < 0x20 || c == 0x7f)/* Control char or DEL */
X			break;
X		cp = b -> b_contents + b -> b_cursor.row * b -> b_ncols +
X			b -> b_cursor.col++;
X		cp -> Mode &= ~MODEMASK;/* Clear mode bits */
X		cp -> ch_all = c | (w -> w_mode << NBPB);
X		if (b -> b_cursor.col >= b -> b_ncols)
X			if (w -> w_status & WWRAPOFF)
X				b -> b_cursor.col--;
X			else {
X				b -> b_cursor.col = 0;
X				b -> b_cursor.row++;
X				if (b -> b_cursor.row >= b -> b_nrows)
X					WBscroll (w, 1);
X			}
X		b -> b_nmodw = -1;
X		break;
X	}
X	return 0;
X}
//go.sysin dd *
made=TRUE
if [ $made = TRUE ]; then
	/bin/chmod 644 bprint.c
	/bin/echo -n '	'; /bin/ls -ld bprint.c
fi
/bin/echo 'Extracting bread.c'
sed 's/^X//' <<'//go.sysin dd *' >bread.c
X#include "win.h"
X
X/* Copyright (c) 1983 University of Maryland Computer Science Department */
X
X/* Return char from buffer at buffer cursor, and advance cursor */
X/* If charonly set returns only char, otherwise mode<<NBPB | char */
XWBread (w, charonly)
XWin *w;
X{
X	register Buf *b = w -> w_textbuf;
X	register Ch *c;
X	int rv;
X
X	c = b -> b_contents + b -> b_cursor.row * b -> b_ncols +
X		b -> b_cursor.col;
X	rv = charonly ? c -> Char : c -> ch_all;
X	b -> b_cursor.col++;
X	if (b -> b_cursor.col >= b -> b_ncols) {
X		b -> b_cursor.col = 0;
X		b -> b_cursor.row++;
X		if (b -> b_cursor.row >= b -> b_nrows)
X			b -> b_cursor.row = 0;
X	}
X	return rv;
X}
//go.sysin dd *
made=TRUE
if [ $made = TRUE ]; then
	/bin/chmod 644 bread.c
	/bin/echo -n '	'; /bin/ls -ld bread.c
fi
/bin/echo 'Extracting bscroll.c'
sed 's/^X//' <<'//go.sysin dd *' >bscroll.c
X#include "win.h"
X
X/* Copyright (c) 1983 University of Maryland Computer Science Department */
X
X/* Relative scroll buffer w->w_textbuf by rows */
X/* NOTE THAT THIS ALWAYS LOSES rows LINES OF TEXT */
XWBscroll (w, rows)
Xregister Win *w;
Xregister rows;
X{
X    register Buf *b = w -> w_textbuf;
X    register Ch *cp, *ct;
X
X    if (rows < 0) {		/* Open lines at top */
X	cp = b -> b_contents + (b -> b_nrows + rows) * b -> b_ncols;
X	ct = b -> b_contents + b -> b_nrows * b -> b_ncols;
X	while (cp > b -> b_contents)
X	    (--ct) -> ch_all = (--cp) -> ch_all;
X	while (ct > b -> b_contents)
X	    (--ct) -> ch_all = ' ' | (w -> w_mode << NBPB);
X    }
X    else if (rows > 0) {	/* Open lines at bottom */
X	register Ch *end;
X	ct = b -> b_contents;
X	cp = b -> b_contents + rows * b -> b_ncols;
X	end = b -> b_contents + b -> b_nrows * b -> b_ncols;
X	while (cp < end)
X	    ct++ -> ch_all = cp++ -> ch_all;
X	while (ct < end)
X	    ct++ -> ch_all = ' ' | (w -> w_mode << NBPB);
X    }
X    else
X	return 0;
X    b -> b_cursor.row -= rows;
X    if (b -> b_cursor.row < 0)
X	b -> b_cursor.row = 0;
X    else if (b -> b_cursor.row >= b -> b_nrows)
X	b -> b_cursor.row = b -> b_nrows - 1;
X    b -> b_nmodw = -1;
X    MajorUpdate = 1;
X    return 0;
X}
//go.sysin dd *
made=TRUE
if [ $made = TRUE ]; then
	/bin/chmod 644 bscroll.c
	/bin/echo -n '	'; /bin/ls -ld bscroll.c
fi
/bin/echo 'Extracting btowcursor.c'
sed 's/^X//' <<'//go.sysin dd *' >btowcursor.c
X#include "win.h"
X
X/* Copyright (c) 1983 University of Maryland Computer Science Department */
X
X/* Tie the buffer cursor to the (current) window cursor */
XWBtoWcursor (w)
Xregister Win *w;
X{
X	register Buf *b = w -> w_textbuf;
X
X	b -> b_cursor.row = w -> w_cursor.row + w -> IYO + w -> w_bstart.row;
X	b -> b_cursor.col = w -> w_cursor.col + w -> IXO + w -> w_bstart.col;
X}
//go.sysin dd *
made=TRUE
if [ $made = TRUE ]; then
	/bin/chmod 644 btowcursor.c
	/bin/echo -n '	'; /bin/ls -ld btowcursor.c
fi
-- 
UUCP:	{seismo,allegra,brl-bmd}!umcp-cs!chris
CSNet:	chris@umcp-cs
ARPA:	chris.umcp-cs@UDel-Relay