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