chris@umcp-cs.UUCP (07/03/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 cleanup.c' sed 's/^X//' <<'//go.sysin dd *' >cleanup.c X/* Initialize, suspend, resume, and exit routines */ X X/* Copyright (c) 1983 University of Maryland Computer Science Department */ X/* Original code copyright (c) 1981,1980 James Gosling */ X X/* ACT 11-Nov-1982 modified for window package */ X X#include "win.h" X#include "display.h" X#include <sys/ioctl.h> X#include <sgtty.h> X#include <stdio.h> X#include <signal.h> X Xstruct sgttyb WOld; /* The initial tty mode bits */ Xint WTtyFd; /* File descriptor for stty/gtty */ Xint (*sigset())(); Xextern Wexit (), Wsuspend (); X XWcleanup () { X if (SigMagic) { X sigignore (SIGTSTP); X sigignore (SIGINT); X } X if (W_tt.t_window) (*W_tt.t_window) (0); X (*W_tt.t_topos) (ScreenLength, 1); X (*W_tt.t_wipeline) (0, ScreenWidth); X (*W_tt.t_cleanup) (); X fflush (stdout); X ioctl (WTtyFd, TIOCSETN, &WOld); X if (SigMagic) { X sigset (SIGTSTP, SIG_DFL); X sigset (SIGINT, SIG_DFL); X } X WindowsActive = 0; X return 0; X} //go.sysin dd * made=TRUE if [ $made = TRUE ]; then /bin/chmod 644 cleanup.c /bin/echo -n ' '; /bin/ls -ld cleanup.c fi /bin/echo 'Extracting clear.c' sed 's/^X//' <<'//go.sysin dd *' >clear.c X#include "win.h" X X/* Copyright (c) 1983 University of Maryland Computer Science Department */ X X/* Clear inside of window w, and corresponding portion of text buffer */ XWclear (w, howto) Xregister Win *w; Xint howto; X{ X register Ch *cp, *bp; X register Buf *b = w -> w_textbuf; X register i, j; X int i2; X X switch (howto) { X case 0: /* Clear from cursor to end */ X default: X Wclearline (w, 0);/* Clr ln from cursor */ X cp = w -> w_winbuf + X (w -> w_cursor.row + 1 + w -> IYO) * w -> OXE + X w -> IXO; X bp = b -> b_contents + X (w->w_cursor.row+1+w->IYO+w->w_bstart.row)*b->b_ncols + X w -> w_bstart.col + w -> IXO; X i2 = w -> IYE - w -> w_cursor.row - 1; X break; X case 1: /* Clear from beginning to cursor */ X Wclearline (w, 1);/* Clr ln to cursor */ X cp = w -> w_winbuf + w -> IYO * w -> OXE + w -> IXO; X bp = b -> b_contents + X (w -> w_bstart.row + w -> IYO) * b -> b_ncols + X w -> w_bstart.col + w -> IXO; X i2 = w -> w_cursor.row; X break; X case 2: /* Clear all of window */ X cp = w -> w_winbuf + w -> IYO * w -> OXE + w -> IXO; X bp = b -> b_contents + X (w -> w_bstart.row + w -> IYO) * b -> b_ncols + X (w -> w_bstart.col + w -> IXO); X i2 = w -> IYE; X break; X } X for (i = 0; i < i2; i++) { X for (j = 0; j < w -> IXE; j++) { X cp -> Mode &= ~MODEMASK; X cp -> Mode |= WBUF; X cp++ -> Char = ' '; X bp++ -> ch_all = ' ' | (w -> w_mode << NBPB); X } X cp += w -> OXE - j; X bp += b -> b_ncols - j; X } X w -> w_status |= WDUMP; X b -> b_nmodw = -1; X} //go.sysin dd * made=TRUE if [ $made = TRUE ]; then /bin/chmod 644 clear.c /bin/echo -n ' '; /bin/ls -ld clear.c fi /bin/echo 'Extracting clearline.c' sed 's/^X//' <<'//go.sysin dd *' >clearline.c X#include "win.h" X X/* Copyright (c) 1983 University of Maryland Computer Science Department */ X X/* Clear cursor line of window and corresponding portion of buffer */ XWclearline (w, howto) Xregister Win *w; Xint howto; X{ X register Ch *cp, *bp; X register Buf *b = w -> w_textbuf; X register i, i2; X X cp = w -> w_winbuf + X (w -> w_cursor.row + w -> IYO) * w -> OXE + w -> IXO; X bp = b -> b_contents + X (w->w_cursor.row + w->IYO + w->w_bstart.row) * b->b_ncols + X w -> IXO + w -> w_bstart.col; X switch (howto) { X case 0: /* Cursor to end of line */ X default: X cp += w -> w_cursor.col; X bp += w -> w_cursor.col; X i2 = w -> IXE - w -> w_cursor.col; X break; X case 1: /* Cursor to begin. of line */ X i2 = w -> w_cursor.col; X break; X case 2: /* Entire line */ X i2 = w -> IXE; X break; X } X for (i = 0; i < i2; i++) { X cp -> Mode &= ~MODEMASK; X cp -> Mode |= WBUF; X cp++ -> Char = ' '; X bp++ -> ch_all = ' ' | (w -> w_mode << NBPB); X } X w -> w_status |= WDUMP; X b -> b_nmodw = -1; X} //go.sysin dd * made=TRUE if [ $made = TRUE ]; then /bin/chmod 644 clearline.c /bin/echo -n ' '; /bin/ls -ld clearline.c fi /bin/echo 'Extracting close.c' sed 's/^X//' <<'//go.sysin dd *' >close.c X#include "win.h" X X/* Copyright (c) 1983 University of Maryland Computer Science Department */ X X/* Close a window */ XWclose (w) Xregister Win *w; X{ X register Win *p; X X WErase (w); /* Clean it off screen */ X WRemoveCoverList (w); /* Uncover all other windows */ X X /* Unlink window & free space */ X X if (WinList == w) X WinList = w -> w_next; X else { X for (p = WinList; p -> w_next != w; p = p -> w_next) X ; X p -> w_next = w -> w_next; X } X free (w -> w_winbuf); X if (--(w -> w_textbuf -> b_nwins) <= 0) { X free (w -> w_textbuf -> b_contents); X free (w -> w_textbuf); X } X free (w); X if (w == CurWin) X CurWin = WinList; X return 0; X} //go.sysin dd * made=TRUE if [ $made = TRUE ]; then /bin/chmod 644 close.c /bin/echo -n ' '; /bin/ls -ld close.c fi /bin/echo 'Extracting closeall.c' sed 's/^X//' <<'//go.sysin dd *' >closeall.c X#include "win.h" X X/* Copyright (c) 1983 University of Maryland Computer Science Department */ X X/* Close all windows (for "resetting") */ XWcloseall () { X register Win *w; X X for (w = WinList; w; w = w -> w_next) X Wclose (w); X return 0; X} //go.sysin dd * made=TRUE if [ $made = TRUE ]; then /bin/chmod 644 closeall.c /bin/echo -n ' '; /bin/ls -ld closeall.c fi /bin/echo 'Extracting cover.c' sed 's/^X//' <<'//go.sysin dd *' >cover.c X#include "win.h" X X/* Copyright (c) 1983 University of Maryland Computer Science Department */ X X/* Routines dealing with cover information */ X X/* Compute all windows that w covers or that cover w; place them on the X appropriate list. */ XWComputeCover (w) Xregister Win *w; X{ X register Win *wp; X register after = 0; /* Initial windows cover w */ X X for (wp = WinList; wp; wp = wp -> w_next) { X if (wp == w) X after++;/* w covers remaining windows */ X if (wp == w || (wp -> w_status & WHIDDEN)) X continue; X X /* Do they overlap? */ X X if (w -> OXO + w -> OXE <= wp -> OXO) X continue; X if (w -> OYO + w -> OYE <= wp -> OYO) X continue; X if (w -> OXO >= wp -> OXO + wp -> OXE) X continue; X if (w -> OYO >= wp -> OYO + wp -> OYE) X continue; X X /* Yes, they overlap */ X X if (after) /* w covers wp */ X WDoCover (w, wp); X else /* wp covers w */ X WDoCover (wp, w); X } X} X X/* Window t covers window b. Update cover list and WINVIS bits. */ Xstatic XWDoCover (t, b) Xregister Win *t, *b; X{ X register i, j; X int i2, j2; X register Cov *c; X register Ch *cp; X X t -> w_status |= WCOVERING;/* This window is covering others */ X b -> w_status |= WCOVERED;/* This window is covered by others */ X for (c = WCovList; c; c = c -> c_next) { X if (c -> c_top == t && c -> c_bot == b) { X i = c -> c_area.xorigin; X j = c -> c_area.yorigin; X i2 = c -> c_area.xextent; X j2 = c -> c_area.yextent; X goto mark;/* ASSUMPTION: SAME INTERSECTION */ X } X } X X /* They didnt intersect before, but now they do */ X X c = (Cov *) malloc (sizeof (Cov)); X c -> c_top = t; X c -> c_bot = b; X c -> c_next = WCovList; X WCovList = c; X X /* Mark the chars in b that are covered by t */ X X i = Max (t -> OXO, b -> OXO); X j = Max (t -> OYO, b -> OYO); X i2 = Min (t -> OXO + t -> OXE, b -> OXO + b -> OXE) - i; X j2 = Min (t -> OYO + t -> OYE, b -> OYO + b -> OYE) - j; X i -= b -> OXO; X j -= b -> OYO; X X /* (i,j),(i+i2,j+j2) are the upper left and lower right corners of X the intersection of the two windows. Values are relative to b */ X X c -> c_area.xorigin = i; X c -> c_area.yorigin = j; X c -> c_area.xextent = i2; X c -> c_area.yextent = j2; X Xmark: X cp = b -> w_winbuf + j * b -> OXE + i; X for (j = 0; j < j2; j++) { X for (i = 0; i < i2; i++) X cp++ -> Mode |= WINVIS; X cp += b -> OXE - i; X } X} X X/* Remove all information about window w from the cover list. This also X un-invisbles all chars in w and all chars that w covered (which means that X cover info is recomputed for windows that w covered). */ XWRemoveCoverList (w) Xregister Win *w; X{ X register Cov *c, *cc; X char ostatus; X X if ((w -> w_status & (WCOVERED|WCOVERING)) == 0) X return; /* Nothing needs to be done */ X w -> w_status &= ~(WCOVERING|WCOVERED); X ostatus = w -> w_status; X w -> w_status |= WHIDDEN;/* Dont consider w in recomputations */ X for (c = WCovList; c; c = c -> c_next) { X if (c -> c_top == w) { X if (c == WCovList) X WCovList = c -> c_next; X else X cc -> c_next = c -> c_next; X c -> c_bot -> w_status &= ~WCOVERED; X WUnMarkCoverArea (c); X WComputeCover (c -> c_bot);/* Recompute excl. w */ X free (c); X } X else if (c -> c_bot == w) { X if (c == WCovList) X WCovList = c -> c_next; X else X cc -> c_next = c -> c_next; X/* c -> c_top -> w_status &= ~WCOVERING; */ X WUnMarkCoverArea (c); X free (c); X } X else X cc = c; X } X w -> w_status = ostatus; X} X X/* Unmark chars in c->c_bot which used to be covered by c->c_top */ X/* NOTE: CALL WComputeCover ON c->c_bot AFTERWARDS IF IT IS STILL AROUND */ Xstatic XWUnMarkCoverArea (c) Xregister Cov *c; X{ X register i, j; X int i2, j2; X register Ch *cp; X register Win *b = c -> c_bot; X X i2 = c -> c_area.yextent; X j2 = c -> c_area.xextent; X cp = b -> w_winbuf + c -> c_area.yorigin * b -> OXE + X c -> c_area.xorigin; X for (i = 0; i < i2; i++) { X for (j = 0; j < j2; j++) X cp++ -> Mode &= ~WINVIS; X cp += b -> OXE - j; X } X b -> w_status |= WDUMP; X} //go.sysin dd * made=TRUE if [ $made = TRUE ]; then /bin/chmod 644 cover.c /bin/echo -n ' '; /bin/ls -ld cover.c fi /bin/echo 'Extracting delchars.c' sed 's/^X//' <<'//go.sysin dd *' >delchars.c X#include "win.h" X X/* Copyright (c) 1983 University of Maryland Computer Science Department */ X X/* Delete n chars at cursor in window w */ XWdelchars (w, n) Xregister Win *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 X /* w->w_winbuf */ X ct = w -> w_winbuf + (w -> IYO + w -> w_cursor.row) * w -> OXE + X w -> IXO; X end = ct + w -> IXE; X ct += w -> w_cursor.col; X cp = ct + n; X while (cp < end) { X ct -> Char = cp -> Char; X ct -> Mode &= WINVIS; X ct++ -> Mode |= cp++ -> Mode & ~WINVIS; X } X while (ct < end) { X ct -> Char = ' '; X ct -> Mode &= WINVIS; X ct++ -> Mode |= WBUF; X } X /* w->w_textbuf */ X ct = b -> b_contents + X (w -> IYO + w -> w_bstart.row + w -> w_cursor.row) * b -> b_ncols + X w -> w_bstart.col + w -> IXO; X end = ct + w -> IXE; X ct += w -> w_cursor.col; X cp = ct + n; X while (cp < end) X ct++ -> ch_all = cp++ -> ch_all; X while (ct < end) X ct++ -> ch_all = blank; X w -> w_status |= WDUMP; X b -> b_nmodw = -1; X return 0; X} //go.sysin dd * made=TRUE if [ $made = TRUE ]; then /bin/chmod 644 delchars.c /bin/echo -n ' '; /bin/ls -ld delchars.c fi /bin/echo 'Extracting delcols.c' sed 's/^X//' <<'//go.sysin dd *' >delcols.c X#include "win.h" X X/* Copyright (c) 1983 University of Maryland Computer Science Department */ X X/* Delete n columns before cursor in window w */ XWdelcols (w, n) Xregister Win *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 if (n + w -> w_cursor.col > w -> IXE) X n = w -> IXE - w -> w_cursor.col; X blank = ' ' | (w -> w_mode << NBPB); X b = w -> w_textbuf; X nm = w -> IXE - n - w -> w_cursor.col; X X /* w->w_winbuf */ X ct = w -> w_winbuf + w -> IYO * w -> OXE + X w -> IXO + w -> w_cursor.col; X cp = ct + n; X for (i = 0; i < w -> IYE; i++) { X for (j = 0; j < nm; j++) { X ct -> Char = cp -> Char; X ct -> Mode &= WINVIS; X ct++ -> Mode |= cp++ -> Mode & ~WINVIS; X } X ct += w -> OXE - j; X cp += w -> OXE - j; X } X ct = w -> w_winbuf + w -> IYO * w -> OXE + X w -> IXO + w -> w_cursor.col + nm; X for (i = 0; i < w -> IYE; i++) { X for (j = 0; j < n; j++) { X ct -> Char = ' '; X ct -> Mode &= WINVIS; X ct++ -> Mode |= WBUF; X } X ct += w -> OXE - j; X } X /* w->w_textbuf */ X ct = b -> b_contents + X (w -> IYO + w -> w_bstart.row) * b -> b_ncols + X w -> IXO + w -> w_bstart.col + w -> w_cursor.col; X cp = ct + n; X for (i = 0; i < w -> IYE; i++) { X for (j = 0; j < nm; j++) X ct++ -> ch_all = cp++ -> ch_all; X ct += b -> b_ncols - j; X cp += b -> b_ncols - j; X } X ct = b -> b_contents + X (w -> IYO + w -> w_bstart.row) * b -> b_ncols + X w -> IXO + w -> w_bstart.col + w -> w_cursor.col + nm; X for (i = 0; i < w -> IYE; i++) { X for (j = 0; j < n; j++) X ct++ -> ch_all = blank; X ct += b -> b_ncols - j; X } X w -> w_status |= WDUMP; X b -> b_nmodw = -1; X return 0; X} //go.sysin dd * made=TRUE if [ $made = TRUE ]; then /bin/chmod 644 delcols.c /bin/echo -n ' '; /bin/ls -ld delcols.c fi /bin/echo 'Extracting dellines.c' sed 's/^X//' <<'//go.sysin dd *' >dellines.c X#include "win.h" X X/* Copyright (c) 1983 University of Maryland Computer Science Department */ X X/* Delete n lines at cursor in window w */ XWdellines (w, n) Xregister Win *w; Xint n; X{ X register Buf *b; X register Ch *cp, *ct; X register j; X int i, blank, nup; 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 + w -> w_cursor.row > w -> IYE) X n = w -> IYE - w -> w_cursor.row; X nup = w -> IYE - n - w -> w_cursor.row; X X /* w->w_winbuf */ X ct = w -> w_winbuf + X (w -> IYO + w -> w_cursor.row) * w -> OXE + w -> IXO; X cp = ct + n * w -> OXE; X for (i = 0; i < nup; i++) { X for (j = 0; j < w -> IXE; j++) { X ct -> Char = cp -> Char; X ct -> Mode &= WINVIS; X ct++ -> Mode |= cp++ -> Mode & ~WINVIS; X } X ct += w -> OXE - j; X cp += w -> OXE - j; X } X for (i = 0; i < n; i++) { X for (j = 0; j < w -> IXE; j++) { X ct -> Char = ' '; X ct -> Mode &= WINVIS; X ct++ -> Mode |= WBUF; X } X ct += w -> OXE - j; X } X /* w->w_textbuf */ X ct = b -> b_contents + X (w -> IYO + w->w_cursor.row + w->w_bstart.row) * b->b_ncols + X w -> IXO + w -> w_bstart.col; X cp = ct + n * b -> b_ncols; X for (i = 0; i < nup; i++) { X for (j = 0; j < w -> IXE; j++) X ct++ -> ch_all = cp++ -> ch_all; X ct += b -> b_ncols - j; X cp += b -> b_ncols - j; X } X for (i = 0; i < n; i++) { X for (j = 0; j < w -> IXE; j++) X ct++ -> ch_all = blank; X ct += b -> b_ncols - j; X } X w -> w_status |= WDUMP; X b -> b_nmodw = -1; X MajorUpdate = 1; X return 0; X} //go.sysin dd * made=TRUE if [ $made = TRUE ]; then /bin/chmod 644 dellines.c /bin/echo -n ' '; /bin/ls -ld dellines.c fi /bin/echo 'Extracting disp.c' sed 's/^X//' <<'//go.sysin dd *' >disp.c X/* Things having to do with putting windows on the (virtual) display */ X X/* Copyright (c) 1983 University of Maryland Computer Science Department */ X X#include "win.h" X#include "display.h" X#include <stdio.h> X#include <signal.h> X#include <sys/ioctl.h> X Xstatic TouchedDisp; /* True iff DispPut has been called */ X X/* Return the size of the screen */ XWscreensize (rows, cols) Xint *rows, *cols; X{ X *rows = ScreenLength; X *cols = ScreenWidth; X return 0; X} X X/* Refresh the display */ XWrefresh (SkipInputCheck) { X register Win *w; X register i; X static inrefresh; /* to avoid recursive refresh, which just X plain does not work! */ X X if (inrefresh) X return 0; X inrefresh++; X if (!WindowsActive) { X fprintf (stderr, "Bad call to Wrefresh() - windows not active\n"); X fflush (stderr); X inrefresh = 0; X return -1; X } X#ifdef FIONREAD X if (SkipInputCheck == 0 X && ioctl (0, FIONREAD, &InputPending) == 0 X && InputPending) { X inrefresh = 0; X return 0; /* Dont bother if input is pending */ X } X#endif FIONREAD X if (SigMagic) { X sighold (SIGTSTP); X sighold (SIGINT); X } X if (ScreenGarbaged || LastRedisplayPaused) { X for (i = 1; i <= ScreenLength; i++) X WDclearline (i); X for (w = WinList; w; w = w -> w_next) { X if ((w -> w_status & WHIDDEN) == 0) X WDoDump (w); X } X } X else { X i = TouchedDisp | WSetRealCursor | WBoxActive; X for (w = WinList; w; w = w -> w_next) { X if (w -> w_status & WHIDDEN) continue; X if (w -> w_status & WDUMP || w -> w_textbuf -> b_nmodw) X i++, WDoDump (w); X } X if (i == 0) /* Nothing changed */ X goto out; X } X TouchedDisp = WBoxActive; X if (WBoxActive) X WBoxToggle (); X WDUpdateScreen (MajorUpdate, SkipInputCheck); X if (WBoxActive) X WBoxToggle (); Xout: X MajorUpdate = 0; X inrefresh = 0; X if (SigMagic) { X sigrelse (SIGTSTP); X sigrelse (SIGINT); X } X fflush (stdout); X return 0; X} X X/* Write contents of window w to virtual screen */ Xstatic XWDoDump (w) Xregister Win *w; X{ X register Ch *wt, *ww; X register i, j; X register Buf *b = w -> w_textbuf; X X wt = b -> b_contents + w -> w_bstart.row * b -> b_ncols + X w -> w_bstart.col; X ww = w -> w_winbuf; X for (i = 1; i <= w -> OYE; i++) { X WDsetpos (w -> OYO + i, w -> OXO + 1); X for (j = 0; j < w -> OXE; j++) { X if (ww -> Mode & WINVIS) X dspskip (1); X else if (ww -> Mode & WBUF) X dsputc (wt -> Char, wt -> Mode ^ ww -> Mode); X else X dsputc (ww -> Char, ww -> Mode); X wt++, ww++; X } X wt += b -> b_ncols - /* w -> OXE */ j; X } X if ((w -> w_status & WCURSOR) == 0) {/* Put up a cursor */ X i = w -> IYO + w -> w_cursor.row; X j = w -> IXO + w -> w_cursor.col; X if (((w -> w_winbuf + i * w -> OXE + j) -> Mode & WINVIS) == 0) { X WDsetpos (w -> OYO + i + 1, w -> OXO + j + 1); X dspxor (WBLINK|WINVERSE); X } X } X w -> w_status &= ~WDUMP; X if (b -> b_nmodw == -1) X b -> b_nmodw = b -> b_nwins - 1; X else if (b -> b_nmodw) X b -> b_nmodw--; X} X X/* Put up the character at position row, col, possibly with cursor */ X/* row, col should already have w -> IYE, w -> IXE added if needed */ XWDispPut (w, row, col, curs) Xregister Win *w; Xregister row, col, curs; X{ X register Ch *p; X X if (w -> w_status & WHIDDEN) X return; X p = w -> w_winbuf + row * w -> OXE + col; X if (p -> Mode & WINVIS) X return; X WDsetpos (row + w -> OYO + 1, col + w -> OXO + 1); X curs = curs ? WBLINK|WINVERSE : 0; X if (p -> Mode & WBUF) { X register Buf *b; X curs ^= p -> Mode; X b = w -> w_textbuf; X p = b -> b_contents + (w -> w_bstart.row + row) * b -> b_ncols + X w -> w_bstart.col + col; X } X dsputc (p -> Char, p -> Mode ^ curs); X TouchedDisp++; X} X X/* THIS FUNCTION COULD BE SUBSUMED BY THE LastRedisplayPaused VARIABLE */ X/* Erase visible portions of window w from display */ XWErase (w) Xregister Win *w; X{ X register Ch *wp; X register i, j; X X if (w -> w_status & WHIDDEN)/* No need to erase */ X return; X wp = w -> w_winbuf; X for (i = 1; i <= w -> OYE; i++) { X WDsetpos (w -> OYO + i, w -> OXO + 1); X for (j = 0; j < w -> OXE; j++) { X if (wp++ -> Mode & WINVIS) X dspskip (1); X else X dsputc (' ', 0); X } X } X TouchedDisp++; X} X X/* Toggle the box on the virtual display (write it if it's not there, remove X it if it is). */ Xstatic XWBoxToggle () { X register i, j; X X WDsetpos (j = WBox.yorigin + 1, WBox.xorigin + 1); X for (i = 0; i < WBox.xextent; i++) X dspxor (WINVERSE); X for (i = 2; i < WBox.yextent; i++) { X WDsetpos (++j, WBox.xorigin + 1); X dspxor (WINVERSE); X if (WBox.xextent > 1) { X dspskip (WBox.xextent - 2); X dspxor (WINVERSE); X } X } X if (WBox.yextent > 1) { X WDsetpos (++j, WBox.xorigin + 1); X for (i = 0; i < WBox.xextent; i++) X dspxor (WINVERSE); X } X} //go.sysin dd * made=TRUE if [ $made = TRUE ]; then /bin/chmod 644 disp.c /bin/echo -n ' '; /bin/ls -ld disp.c fi -- UUCP: {seismo,allegra,brl-bmd}!umcp-cs!chris CSNet: chris@umcp-cs ARPA: chris.umcp-cs@UDel-Relay