[net.sources.bugs] Bug in 'curse'

quiroz@rochester.UUCP (Cesar Quiroz) (04/19/85)

A minor problem with 'curse':  When it cannot find an ll entry for your
terminal, it blindly assumes you have a 24 line one.  However, it could 
get good information about the size of the screen by simply looking at 
LINES and COLS.  So, the shell archive at the end of this message 
provides the fixes both to the program and the man page.  I have added
two options, so you can query the number of lines/columns (and may be set
shell variables).  

Cesar

CUT HERE -----------------------------------------------------------------------
# This is a shell archive.  Remove anything before this line,
# then unpack it by saving it in a file and typing "sh file".
#
# Wrapped by seneca!quiroz on Fri Apr 19 16:19:01 EST 1985
# Contents:  FIXES diff.c diff.1
 
echo x - FIXES
sed 's/^@//' > "FIXES" <<'@//E*O*F FIXES//'
 
 DESCRIPTION:
                'curse' doesn't use the current size of the window
 when the -ll option cannot find a 'quick to last line' entry in the
 termcap.

 REPEAT-BY:     
                If you have a terminal which is NOT 24 lines tall and
 whose termcap entry doesn't contain the 'll' option, run:

 curse -ll

 You'll end up some weird place (column 0, line 23).

 FIX-BY:
                Use LINES and COLS, as defined by 'curses', in order
 to figure out your screen's size.  This allows for two easy options
 to get the numbers of lines and columns of your terminal, say in 
 shell variables:  

 lines=`curse -li`
 or
 set lines=`curse -li`

 diff.{c,1}  are ed(1) scripts for curse.c and curse.1 respectively.
 The two new options are -li and -co.
@//E*O*F FIXES//
chmod u=rw,g=rw,o=r FIXES
 
echo x - diff.c
sed 's/^@//' > "diff.c" <<'@//E*O*F diff.c//'
60c
			else move(0,LINES-1);
@.
57a
		else if ((c1 == 'l') && (c2 == 'i')) printf("%d",LINES);
@.
44a
		else if ((c1 == 'c') && (c2 == 'o')) printf("%d",COLS);
@.
28a
			printf("Numeric valued capabilities:\n");
			printf("li and co\n");
@.
@//E*O*F diff.c//
chmod u=rw,g=rw,o=r diff.c
 
echo x - diff.1
sed 's/^@//' > "diff.1" <<'@//E*O*F diff.1//'
16c
type variables are included.  In addition, two numeric options 
(-li and -co) are recognized, so you can adapt your work to any 
screen shape size.
@.
@//E*O*F diff.1//
chmod u=rw,g=rw,o=r diff.1
 
exit 0