wm (part 4 of 4) - Patches to Curses
sources-request at genrad.UUCP
sources-request at genrad.UUCP
Sun Aug 4 10:35:10 AEST 1985
Mod.sources: Volume 2, Issue 34
Submitted by: Tom Truscott <decvax!mcnc!rti-sel!trt>
#! /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:
# README.curses
# UPGRADE
# addch.c.pat
# clrtobot.c.pat
# cr_tty.c.pat
# curses.h.new
# deleteln.c.pat
# initscr.c.pat
# insertln.c.pat
# longname.c.new
# move.c.pat
# mvwin.c.pat
# newwin.c.pat
# overlay.c.pat
# printw.c.new
# refresh.c.pat
# tstp.c.new
# This archive created: Fri Aug 2 13:33:10 1985
export PATH; PATH=/bin:$PATH
echo shar: extracting "'README.curses'" '(1005 characters)'
if test -f 'README.curses'
then
echo shar: will not over-write existing file "'README.curses'"
else
sed 's/^X//' << \SHAR_EOF > 'README.curses'
XSAVE THIS KIT IF YOU WANT TO RUN THE 'WM' WINDOW MANAGER
4.2 BSD libcurses patch kit
Tom Truscott, mcnc!rti-sel!trt
Research Triangle Institute, NC
(919) 541-7005
This is a collection of patches
for the vanilla 4.2 BSD libcurses distribution.
It includes some bug fixes reported on Usenet,
some discovered locally, and some (but not all) of
the fixes in the UCSF User Software Engineering distribution ("Troll").
Tony Wassermann graciously permitted those to be included here.
It also includes some disgusting efficiency hacks.
To Install:
*) Unpack this shar file in an empty directory.
*) In 'UPGRADE', set the CURSRC variable to
the name of the *vanilla* 4.2 BSD libcurses sources.
*) Make sure you have the wonderful 'patch' program.
(If you do not, do the patches yourself!)
*) Run UPGRADE
*) 'make' to compile libcurses and libcurses_p
*) If you want to install this as the standard curses,
a) save the old curses.h and /usr/lib/libcur*
b) 'make install'
c) cp curses.h /usr/include
SHAR_EOF
if test 1005 -ne "`wc -c < 'README.curses'`"
then
echo shar: error transmitting "'README.curses'" '(should have been 1005 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'UPGRADE'" '(573 characters)'
if test -f 'UPGRADE'
then
echo shar: will not over-write existing file "'UPGRADE'"
else
sed 's/^X//' << \SHAR_EOF > 'UPGRADE'
#! /bin/sh
CURSRC=/usr/src/usr.lib/libcurses
echo 'Copying in the 4.2 BSD libcurses'
(cd $CURSRC; tar cf - .) | tar xvpf -
echo 'Replacing modules:'
for i in *.new
do
echo " $i"
mv `basename $i .new` `basename $i .new`.orig
cp $i `basename $i .new`
done
echo ' '
echo 'Patching modules:'
for i in *.pat
do
echo " $i"
patch `basename $i .pat` $i
done
echo ' '
echo 'Done'
echo 'To compile, "make"'
echo 'To install, "make install"'
echo '(But first save the old /usr/include/curses.h and /usr/lib/libcurs*)'
echo 'To clean up, "make clean; rm *.orig *.new *.pat"'
SHAR_EOF
if test 573 -ne "`wc -c < 'UPGRADE'`"
then
echo shar: error transmitting "'UPGRADE'" '(should have been 573 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'addch.c.pat'" '(1025 characters)'
if test -f 'addch.c.pat'
then
echo shar: will not over-write existing file "'addch.c.pat'"
else
sed 's/^X//' << \SHAR_EOF > 'addch.c.pat'
*** libcurses42/addch.c Thu Nov 17 11:03:10 1983
--- libcurses/addch.c Wed Jul 24 13:30:58 1985
***************
*** 19,22
# endif
! if (y >= win->_maxy || x >= win->_maxx || y < 0 || x < 0)
! return ERR;
switch (c) {
--- 19,25 -----
# endif
! #ifdef slowway
! /* These tests 'cannot happen'. What about win==NULL?! */
! if (y < 0 || y >= win->_maxy || x < 0 || x >= win->_maxx)
! return (ERR);
! #endif
switch (c) {
***************
*** 38,40
c |= _STANDOUT;
! set_ch(win, y, x, c, NULL);
for (wp = win->_nextp; wp != win; wp = wp->_nextp)
--- 41,55 -----
c |= _STANDOUT;
! #ifdef slowway
! set_ch(win, y, x, c, (WINDOW *)NULL);
! #else
! /* rti-sel!trt: efficiency hack */
! if (win->_y[y][x] != c) {
! if (win->_firstch[y] == _NOCHANGE)
! win->_firstch[y] = win->_lastch[y] = x;
! else if (x > win->_lastch[y])
! win->_lastch[y] = x;
! else if (x < win->_firstch[y])
! win->_firstch[y] = x;
! }
! #endif
for (wp = win->_nextp; wp != win; wp = wp->_nextp)
SHAR_EOF
if test 1025 -ne "`wc -c < 'addch.c.pat'`"
then
echo shar: error transmitting "'addch.c.pat'" '(should have been 1025 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'clrtobot.c.pat'" '(500 characters)'
if test -f 'clrtobot.c.pat'
then
echo shar: will not over-write existing file "'clrtobot.c.pat'"
else
sed 's/^X//' << \SHAR_EOF > 'clrtobot.c.pat'
*** libcurses42/clrtobot.c Thu Nov 17 11:03:12 1983
--- libcurses/clrtobot.c Wed Jul 24 13:29:44 1985
***************
*** 3,5
/*
! * This routine erases everything on the window.
*
--- 3,7 -----
/*
! * This routine erases from the current position
! * to the end of the window (inclusive).
! * The current position remains unchanged.
*
***************
*** 34,36
}
! win->_curx = win->_cury = 0;
}
--- 36,40 -----
}
! #ifdef wantamess
! win->_curx=win->_cury=0;
! #endif
}
SHAR_EOF
if test 500 -ne "`wc -c < 'clrtobot.c.pat'`"
then
echo shar: error transmitting "'clrtobot.c.pat'" '(should have been 500 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'cr_tty.c.pat'" '(339 characters)'
if test -f 'cr_tty.c.pat'
then
echo shar: will not over-write existing file "'cr_tty.c.pat'"
else
sed 's/^X//' << \SHAR_EOF > 'cr_tty.c.pat'
*** libcurses42/cr_tty.c Thu Nov 17 11:02:54 1983
--- libcurses/cr_tty.c Thu Mar 14 13:31:45 1985
***************
*** 96,98
PC = xPC ? xPC[0] : FALSE;
! aoftspace = tspace;
strcpy(ttytype, longname(genbuf, type));
--- 96,98 -----
PC = xPC ? xPC[0] : FALSE;
! /* aoftspace = tspace;*/
strcpy(ttytype, longname(genbuf, type));
SHAR_EOF
if test 339 -ne "`wc -c < 'cr_tty.c.pat'`"
then
echo shar: error transmitting "'cr_tty.c.pat'" '(should have been 339 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'curses.h.new'" '(4778 characters)'
if test -f 'curses.h.new'
then
echo shar: will not over-write existing file "'curses.h.new'"
else
sed 's/^X//' << \SHAR_EOF > 'curses.h.new'
/* @(#)curses.h 1.14 (Berkeley) 7/4/83 */
/* Dec 83 Corrections made at University of California, San Francisco */
# ifndef WINDOW
# include <stdio.h>
# include <sgtty.h>
# include <sys/ioctl.h>
# define bool char
# define reg register
# define TRUE (1)
# define FALSE (0)
# define ERR (0)
# define OK (1)
# define _ENDLINE 001
# define _FULLWIN 002
# define _SCROLLWIN 004
# define _FLUSH 010
# define _STANDOUT 0200
# define _NOCHANGE -1
# define _puts(s) tputs(s, 0, _putchar)
typedef struct sgttyb SGTTY;
/*
* Capabilities from termcap
*/
extern bool AM, BS, CA, DA, DB, EO, GT, HZ, IN, MI, MS, NC, OS, UL,
XN;
extern char *AL, *BC, *BT, *CD, *CE, *CL, *CM, *CR, *DC, *DL, *DM,
*DO, *ED, *EI, *HO, *IC, *IM, *IP, *LL, *MA, *ND, *NL,
*SE, *SF, *SO, *SR, *TA, *TE, *TI, *UC, *UE, *UP, *US,
*VB, *VE, *VS, PC;
/*
* From the tty modes...
*/
extern bool NONL, UPPERCASE, normtty, _pfast;
struct _win_st {
short _cury, _curx;
short _maxy, _maxx;
short _begy, _begx;
short _flags;
bool _clear;
bool _leave;
bool _scroll;
char **_y;
short *_firstch;
short *_lastch;
struct _win_st *_nextp, *_orig;
};
# define WINDOW struct _win_st
extern bool My_term, _echoit, _rawmode, _endwin;
extern char *Def_term, ttytype[];
extern int LINES, COLS, _tty_ch, _res_flg;
extern SGTTY _tty;
extern WINDOW *stdscr, *curscr;
/*
* Define VOID to stop lint from generating "null effect"
* comments.
*/
# ifdef lint
int __void__;
# define VOID(x) (__void__ = (int) (x))
# else
# define VOID(x) (x)
# endif
/*
* psuedo functions for standard screen
*/
# define addch(ch) VOID(waddch(stdscr, ch))
# define getch() VOID(wgetch(stdscr))
# define addstr(str) VOID(waddstr(stdscr, str))
# define getstr(str) VOID(wgetstr(stdscr, str))
# define move(y, x) VOID(wmove(stdscr, y, x))
# define clear() VOID(wclear(stdscr))
# define erase() VOID(werase(stdscr))
# define clrtobot() VOID(wclrtobot(stdscr))
# define clrtoeol() VOID(wclrtoeol(stdscr))
# define insertln() VOID(winsertln(stdscr))
# define deleteln() VOID(wdeleteln(stdscr))
# define refresh() VOID(wrefresh(stdscr))
# define inch() VOID(winch(stdscr))
# define insch(c) VOID(winsch(stdscr,c))
# define delch() VOID(wdelch(stdscr))
# define standout() VOID(wstandout(stdscr))
# define standend() VOID(wstandend(stdscr))
/*
* mv functions
*/
#define mvwaddch(win,y,x,ch) VOID(wmove(win,y,x)==ERR?ERR:waddch(win,ch))
#define mvwgetch(win,y,x) VOID(wmove(win,y,x)==ERR?ERR:wgetch(win))
#define mvwaddstr(win,y,x,str) VOID(wmove(win,y,x)==ERR?ERR:waddstr(win,str))
#define mvwgetstr(win,y,x,str) VOID(wmove(win,y,x)==ERR?ERR:wgetstr(win,str))
#define mvwinch(win,y,x) VOID(wmove(win,y,x) == ERR ? ERR : winch(win))
#define mvwdelch(win,y,x) VOID(wmove(win,y,x) == ERR ? ERR : wdelch(win))
#define mvwinsch(win,y,x,c) VOID(wmove(win,y,x) == ERR ? ERR:winsch(win,c))
#define mvaddch(y,x,ch) mvwaddch(stdscr,y,x,ch)
#define mvgetch(y,x) mvwgetch(stdscr,y,x)
#define mvaddstr(y,x,str) mvwaddstr(stdscr,y,x,str)
#define mvgetstr(y,x,str) mvwgetstr(stdscr,y,x,str)
#define mvinch(y,x) mvwinch(stdscr,y,x)
#define mvdelch(y,x) mvwdelch(stdscr,y,x)
#define mvinsch(y,x,c) mvwinsch(stdscr,y,x,c)
/*
* psuedo functions
*/
#define clearok(win,bf) (win->_clear = bf)
#define leaveok(win,bf) (win->_leave = bf)
#define scrollok(win,bf) (win->_scroll = bf)
#define flushok(win,bf) (bf ? (win->_flags |= _FLUSH):(win->_flags &= ~_FLUSH))
#define getyx(win,y,x) y = win->_cury, x = win->_curx
#define winch(win) (win->_y[win->_cury][win->_curx] & 0177)
#define raw() (_tty.sg_flags|=RAW, _pfast=_rawmode=TRUE, ioctl(_tty_ch,TIOCSETN,(char *)&_tty))
#define noraw() (_tty.sg_flags&=~RAW,_rawmode=FALSE,_pfast=!(_tty.sg_flags&CRMOD),ioctl(_tty_ch,TIOCSETN,(char *)&_tty))
#define crmode() (_tty.sg_flags |= CBREAK, _rawmode = TRUE, ioctl(_tty_ch,TIOCSETN,(char *)&_tty))
#define nocrmode() (_tty.sg_flags &= ~CBREAK,_rawmode=FALSE,ioctl(_tty_ch,TIOCSETN,(char *)&_tty))
#define echo() (_tty.sg_flags |= ECHO, _echoit = TRUE, ioctl(_tty_ch,TIOCSETN,(char *)&_tty))
#define noecho() (_tty.sg_flags &= ~ECHO, _echoit = FALSE, ioctl(_tty_ch,TIOCSETN,(char *)&_tty))
/* nl(), nonl() fixed by Mike Lilley and Mike Laman */
#define nl() (_tty.sg_flags |= CRMOD,_pfast = _tty.sg_flags&RAW,NONL=FALSE,ioctl(_tty_ch,TIOCSETN,(char *)&_tty))
#define nonl() (_tty.sg_flags &= ~CRMOD, _pfast = TRUE,NONL=TRUE, ioctl(_tty_ch,TIOCSETN,(char *)&_tty))
#define savetty() ((void)gtty(_tty_ch,&_tty), _res_flg = _tty.sg_flags)
#define resetty() (_tty.sg_flags = _res_flg, ioctl(_tty_ch,TIOCSETN,(char *)&_tty))
WINDOW *initscr(), *newwin(), *subwin();
char *longname(), *getcap();
/*
* Used to be in unctrl.h.
*/
#define unctrl(c) _unctrl[(c) & 0177]
extern char *_unctrl[];
# endif
SHAR_EOF
if test 4778 -ne "`wc -c < 'curses.h.new'`"
then
echo shar: error transmitting "'curses.h.new'" '(should have been 4778 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'deleteln.c.pat'" '(361 characters)'
if test -f 'deleteln.c.pat'
then
echo shar: will not over-write existing file "'deleteln.c.pat'"
else
sed 's/^X//' << \SHAR_EOF > 'deleteln.c.pat'
*** libcurses42/deleteln.c Thu Nov 17 11:02:56 1983
--- libcurses/deleteln.c Sat Jul 6 14:14:20 1985
***************
*** 24,25
win->_y[win->_maxy-1] = temp - win->_maxx;
}
--- 24,27 -----
win->_y[win->_maxy-1] = temp - win->_maxx;
+ win->_firstch[win->_maxy-1] = 0; /* Mike Laman (?) */
+ win->_lastch[win->_maxy-1] = win->_maxx -1; /* ditto */
}
SHAR_EOF
if test 361 -ne "`wc -c < 'deleteln.c.pat'`"
then
echo shar: error transmitting "'deleteln.c.pat'" '(should have been 361 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'initscr.c.pat'" '(485 characters)'
if test -f 'initscr.c.pat'
then
echo shar: will not over-write existing file "'initscr.c.pat'"
else
sed 's/^X//' << \SHAR_EOF > 'initscr.c.pat'
*** libcurses42/initscr.c Thu Nov 17 11:03:00 1983
--- libcurses/initscr.c Sun Jul 21 17:59:02 1985
***************
*** 15,16
reg char *sp;
int tstp();
--- 15,17 -----
reg char *sp;
+ int (*oldtstp)(); /* Ron Wessels, uthub.149, May 1984 */
int tstp();
***************
*** 41,43
# ifdef SIGTSTP
! signal(SIGTSTP, tstp);
# endif
--- 42,45 -----
# ifdef SIGTSTP
! if ((oldtstp = signal(SIGTSTP, tstp)) != SIG_DFL)
! (void) signal(SIGTSTP, oldtstp);
# endif
SHAR_EOF
if test 485 -ne "`wc -c < 'initscr.c.pat'`"
then
echo shar: error transmitting "'initscr.c.pat'" '(should have been 485 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'insertln.c.pat'" '(242 characters)'
if test -f 'insertln.c.pat'
then
echo shar: will not over-write existing file "'insertln.c.pat'"
else
sed 's/^X//' << \SHAR_EOF > 'insertln.c.pat'
*** libcurses42/insertln.c Thu Nov 17 11:03:01 1983
--- libcurses/insertln.c Sat Jul 6 14:12:54 1985
***************
*** 34,35
return ERR;
return OK;
--- 34,36 -----
return ERR;
+ touchwin(win); /* Mike Laman */
return OK;
SHAR_EOF
if test 242 -ne "`wc -c < 'insertln.c.pat'`"
then
echo shar: error transmitting "'insertln.c.pat'" '(should have been 242 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'longname.c.new'" '(855 characters)'
if test -f 'longname.c.new'
then
echo shar: will not over-write existing file "'longname.c.new'"
else
sed 's/^X//' << \SHAR_EOF > 'longname.c.new'
# define reg register
/*
* This routine fills in "def" with the long name of the terminal.
*
* 1/26/81 (Berkeley) @(#)longname.c 1.1
*
* 2/22/84 Corrections made at University of California, San Francisco.
* This correction makes a private copy of the longname. The original version
* simply patched a '\0' in the termcap buffer, preventing access to
* terminal capabilities at a later point.
* rti-sel!trt: note: this code is still broken wrt the documentation.
* It operates confusingly and usually gets the wrong answer.
*/
char *
longname(bp, def)
reg char *bp, *def; {
reg char *cp;
static char longcopy[30] ;
while (*bp && *bp != ':' && *bp != '|')
bp++;
if (*bp == '|') {
bp++;
cp = longcopy ;
while ((cp-longcopy)<29 && *bp && *bp != ':' && *bp != '|')
*cp++ = *bp++ ;
*cp = 0;
return longcopy;
}
return def;
}
SHAR_EOF
if test 855 -ne "`wc -c < 'longname.c.new'`"
then
echo shar: error transmitting "'longname.c.new'" '(should have been 855 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'move.c.pat'" '(312 characters)'
if test -f 'move.c.pat'
then
echo shar: will not over-write existing file "'move.c.pat'"
else
sed 's/^X//' << \SHAR_EOF > 'move.c.pat'
*** libcurses42/move.c Thu Nov 17 11:03:14 1983
--- libcurses/move.c Wed Jul 24 13:25:47 1985
***************
*** 14,15
# endif
if (x >= win->_maxx || y >= win->_maxy)
--- 14,19 -----
# endif
+ #ifndef wantamess
+ if (x < 0 || y < 0)
+ return(ERR);
+ #endif
if (x >= win->_maxx || y >= win->_maxy)
SHAR_EOF
if test 312 -ne "`wc -c < 'move.c.pat'`"
then
echo shar: error transmitting "'move.c.pat'" '(should have been 312 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'mvwin.c.pat'" '(309 characters)'
if test -f 'mvwin.c.pat'
then
echo shar: will not over-write existing file "'mvwin.c.pat'"
else
sed 's/^X//' << \SHAR_EOF > 'mvwin.c.pat'
*** libcurses42/mvwin.c Thu Nov 17 11:03:03 1983
--- libcurses/mvwin.c Wed May 30 22:23:12 1984
***************
*** 12,14
! if (by + win->_maxy > LINES || bx + win->_maxx > COLS)
return ERR;
--- 12,14 -----
! if (by + win->_maxy > LINES || bx + win->_maxx > COLS || by<0 || bx<0)
return ERR;
SHAR_EOF
if test 309 -ne "`wc -c < 'mvwin.c.pat'`"
then
echo shar: error transmitting "'mvwin.c.pat'" '(should have been 309 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'newwin.c.pat'" '(336 characters)'
if test -f 'newwin.c.pat'
then
echo shar: will not over-write existing file "'newwin.c.pat'"
else
sed 's/^X//' << \SHAR_EOF > 'newwin.c.pat'
*** libcurses42/newwin.c Thu Nov 17 11:03:02 1983
--- libcurses/newwin.c Wed Jul 24 13:27:23 1985
***************
*** 117,118
# ifdef DEBUG
--- 117,125 -----
+ #ifndef wantamess
+ if (by < 0 || bx < 0 || nl <= 0 || nc <= 0)
+ return(NULL);
+ if (by+nl > LINES || bx+nc > COLS)
+ return(NULL);
+ #endif
+
# ifdef DEBUG
SHAR_EOF
if test 336 -ne "`wc -c < 'newwin.c.pat'`"
then
echo shar: error transmitting "'newwin.c.pat'" '(should have been 336 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'overlay.c.pat'" '(413 characters)'
if test -f 'overlay.c.pat'
then
echo shar: will not over-write existing file "'overlay.c.pat'"
else
sed 's/^X//' << \SHAR_EOF > 'overlay.c.pat'
*** libcurses42/overlay.c Thu Nov 17 11:03:04 1983
--- libcurses/overlay.c Sat Jul 6 14:13:04 1985
***************
*** 24,26
endx = min(win1->_maxx, win2->_maxx) - win1->_begx - 1;
! for (y = starty; y < endy; y++) {
end = &win1->_y[y][endx];
--- 24,26 -----
endx = min(win1->_maxx, win2->_maxx) - win1->_begx - 1;
! for (y = starty; y <= endy; y++) { /* Mike Laman */
end = &win1->_y[y][endx];
SHAR_EOF
if test 413 -ne "`wc -c < 'overlay.c.pat'`"
then
echo shar: error transmitting "'overlay.c.pat'" '(should have been 413 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'printw.c.new'" '(1849 characters)'
if test -f 'printw.c.new'
then
echo shar: will not over-write existing file "'printw.c.new'"
else
sed 's/^X//' << \SHAR_EOF > 'printw.c.new'
/*
* printw and friends
*
* 1/26/81 (Berkeley) @(#)printw.c 1.1
*/
# include "curses.ext"
/*
* This routine implements a printf on the standard screen.
*
* Modified by David Owen, U.C.S.D. 10.5.83 to allow arbitrary
* length strings to "printw". In "sprintw" the error status is
* checked on return from the "doprnt" and if set, the
* call is repeated with a bigger buffer.
*/
printw(fmt, args)
char *fmt;
int args; {
return _sprintw(stdscr, fmt, &args);
}
/*
* This routine implements a printf on the given window.
*/
wprintw(win, fmt, args)
WINDOW *win;
char *fmt;
int args; {
return _sprintw(win, fmt, &args);
}
/*
* This routine actually executes the printf and adds it to the window
*
* This is really a modified version of "sprintf". As such,
* it assumes that sprintf interfaces with the other printf functions
* in a certain way. If this is not how your system works, you
* will have to modify this routine to use the interface that your
* "sprintf" uses.
*/
_sprintw(win, fmt, args)
WINDOW *win;
char *fmt;
int *args; {
FILE junk;
char buf[BUFSIZ],*bptr;
int count,res;
count = 0;
junk._flag = _IOWRT + _IOSTRG;
junk._ptr = buf;
junk._base = buf;
junk._cnt = BUFSIZ;
/*Make sure error flag set if ever "flsbuf" is called*/
junk._file = -1;
for(;;){
_doprnt(fmt, args, &junk);
putc('\0', &junk);
/*If there was a write error increase buffer and try again*/
if(junk._flag & _IOERR){
if(count)
free(bptr);
else
count = BUFSIZ;
count += BUFSIZ;
if((bptr = (char *)malloc(count)) == NULL){
fprintf(stderr,"sprintw:no malloc space\n");
return(-1);
}
junk._flag = _IOWRT + _IOSTRG;
junk._ptr = bptr;
junk._base = bptr;
junk._cnt = count;
junk._file = -1;
continue;
}
res = waddstr(win,junk._base);
if(count) free(bptr);
return(res);
}
}
SHAR_EOF
if test 1849 -ne "`wc -c < 'printw.c.new'`"
then
echo shar: error transmitting "'printw.c.new'" '(should have been 1849 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'refresh.c.pat'" '(4884 characters)'
if test -f 'refresh.c.pat'
then
echo shar: will not over-write existing file "'refresh.c.pat'"
else
sed 's/^X//' << \SHAR_EOF > 'refresh.c.pat'
*** libcurses42/refresh.c Thu Nov 17 11:03:06 1983
--- libcurses/refresh.c Tue Jul 30 23:16:01 1985
***************
*** 5,6
* 5/12/83 (Berkeley) @(#)refresh.c 1.8
*/
--- 5,14 -----
* 5/12/83 (Berkeley) @(#)refresh.c 1.8
+ *
+ * 2/28/84 Correction at UCSF:
+ * Take the terminal out of standout mode, before clear to end of line
+ * if it isn't safe to move in standout mode (termcap entry ms)
+ *
+ * 3/14/85 Corrections at RTI
+ * Fix problems reported on Usenet. Also, delete apparently
+ * useless (and harmful) code if _leave has been set.
*/
***************
*** 86,87
curscr->_curx = lx;
ly -= win->_begy;
--- 94,97 -----
curscr->_curx = lx;
+ #ifdef wantamess
+ /* rti-sel!trt: this code is completely bogus, yes? */
ly -= win->_begy;
***************
*** 94,95
win->_cury = win->_curx = 0;
}
--- 104,106 -----
win->_cury = win->_curx = 0;
+ #endif
}
***************
*** 118,119
reg int nlsp, clsp; /* last space in lines */
--- 129,131 -----
reg int nlsp, clsp; /* last space in lines */
+ static int glitchXN;
***************
*** 128,129
if (CE && !curwin) {
for (ce = &win->_y[wy][win->_maxx - 1]; *ce == ' '; ce--)
--- 140,142 -----
if (CE && !curwin) {
+ #ifdef slowway
for (ce = &win->_y[wy][win->_maxx - 1]; *ce == ' '; ce--)
***************
*** 132,133
nlsp = ce - win->_y[wy];
}
--- 145,149 -----
nlsp = ce - win->_y[wy];
+ #else
+ nlsp = -1;
+ #endif
}
***************
*** 139,140
if (*nsp != *csp) {
domvcur(ly, lx, y, wx + win->_begx);
--- 155,168 -----
if (*nsp != *csp) {
+ #ifndef wantamess
+ /* this is no guarantee, but seems to work */
+ if (glitchXN && wx && wx+win->_begx==COLS-1) {
+ domvcur(ly, lx, y, wx+win->_begx-1);
+ ly = y;
+ lx = wx+win->_begx-1;
+ glitchXN = 0;
+ continue;
+ }
+ glitchXN = 0;
+ #endif
+ #ifdef slowway
domvcur(ly, lx, y, wx + win->_begx);
***************
*** 145,147
lx = wx + win->_begx;
! while (*nsp != *csp && wx <= lch) {
if (ce != NULL && wx >= nlsp && *nsp == ' ') {
--- 173,212 -----
lx = wx + win->_begx;
! #else
! /* speed hacks to avoid domvcur in simple cases */
! clsp = wx + win->_begx; /* dirty use of clsp */
! if (ly == y) {
! if (lx == clsp)
! goto at_target;
! if (lx+1 == clsp && !curwin) {
! /* enter/exit standout mode as appropriate */
! if (SO && (csp[-1]&_STANDOUT) != (curscr->_flags&_STANDOUT)) {
! if (csp[-1] & _STANDOUT) {
! _puts(SO);
! curscr->_flags |= _STANDOUT;
! }
! else {
! _puts(SE);
! curscr->_flags &= ~_STANDOUT;
! }
! }
! putchar(csp[-1]&0177);
! lx++;
! goto at_target;
! }
! if (clsp == 0 && !(curscr->_flags&_STANDOUT)
! && !NC && (!CR || CR[1] == '\0')) {
! if (CR)
! putchar(*CR);
! else
! putchar('\r');
! lx = 0;
! goto at_target;
! }
! }
! domvcur(ly, lx, y, clsp);
! ly = y;
! lx = clsp;
! at_target:;
! #endif
! while (wx <= lch && *nsp != *csp) {
if (ce != NULL && wx >= nlsp && *nsp == ' ') {
***************
*** 147,148
if (ce != NULL && wx >= nlsp && *nsp == ' ') {
/*
--- 212,222 -----
if (ce != NULL && wx >= nlsp && *nsp == ' ') {
+ #ifndef slowway
+ if (nlsp < 0) {
+ for (nlsp = win->_maxx-1;
+ nlsp > 0 && win->_y[wy][nlsp]==' ';
+ nlsp--)
+ ;
+ continue; /* gotta recheck nlsp */
+ }
+ #endif
/*
***************
*** 163,164
# endif
_puts(CE);
--- 237,245 -----
# endif
+ /* if we shouldn't move in standout mode, CE may cause
+ problems too
+ */
+ if (curscr->_flags & _STANDOUT && !MS) {
+ _puts(SE);
+ curscr->_flags &= ~_STANDOUT;
+ }
_puts(CE);
***************
*** 226,228
else if (wx < lch)
! while (*nsp == *csp) {
nsp++;
--- 307,309 -----
else if (wx < lch)
! while (wx <= lch && *nsp == *csp) {
nsp++;
***************
*** 239,240
ret:
return OK;
--- 320,346 -----
ret:
+ #ifndef wantamess
+ /* rti-sel!trt: update cursor location on auto-wrap */
+ if (lx >= COLS) {
+ if (XN) { /* make this case like the usual one */
+ if (curscr->_flags & _STANDOUT && !MS) {
+ _puts(SE);
+ curscr->_flags &= ~_STANDOUT;
+ }
+ putchar('\r');
+ putchar('\n');
+ glitchXN++; /* next char must not be in col 80 */
+ }
+ lx = 0;
+ if (ly < LINES-1)
+ ly++;
+ else {
+ /* at this point the current screen scrolled up.
+ * scroll() is strange, so we simulate it by hand.
+ * Curses should probably not put anything in lower
+ * right corner of screen, and thus avoid this mess */
+ wmove(curscr, 0, 0); wdeleteln(curscr);
+ wmove(curscr, ly, lx);
+ }
+ }
+ #endif
return OK;
SHAR_EOF
if test 4884 -ne "`wc -c < 'refresh.c.pat'`"
then
echo shar: error transmitting "'refresh.c.pat'" '(should have been 4884 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'tstp.c.new'" '(841 characters)'
if test -f 'tstp.c.new'
then
echo shar: will not over-write existing file "'tstp.c.new'"
else
sed 's/^X//' << \SHAR_EOF > 'tstp.c.new'
# include <signal.h>
# include "curses.ext"
/*
* handle stop and start signals
*
* 6/25/83 (Berkeley) @(#)tstp.c 1.3
*/
tstp() {
# ifdef SIGTSTP
int ttyflags;
int omask;
# ifdef DEBUG
if (outf)
fflush(outf);
# endif
ttyflags = _tty.sg_flags; /* store curses state */
mvcur(0, COLS - 1, LINES - 1, 0);
endwin();
fflush(stdout);
/* reset signal handler so kill below stops us */
signal(SIGTSTP, SIG_DFL);
#define mask(s) (1 << ((s)-1))
omask = sigsetmask(sigblock(0) &~ mask(SIGTSTP));
kill(0, SIGTSTP);
/* pc stops here */
/* okay, we started up again. */
sigsetmask(omask);
signal(SIGTSTP, tstp);
savetty(); /* re-remember the virgin state */
_tty.sg_flags = ttyflags; /* restore special curses state */
ioctl(_tty_ch, TIOCSETN, &_tty);
_puts(TI); /* should we do VS too? */
wrefresh(curscr);
# endif SIGTSTP
}
SHAR_EOF
if test 841 -ne "`wc -c < 'tstp.c.new'`"
then
echo shar: error transmitting "'tstp.c.new'" '(should have been 841 characters)'
fi
fi # end of overwriting check
# End of shell archive
exit 0
More information about the Mod.sources
mailing list