[net.micro.att] Changing window sizes on the 7300

richmon@astrovax.UUCP (Michael Richmond) (07/16/85)

  I quickly discovered that if I changed the size of a UNIX-running
window on my 7300, programs such as vi would not realize that anything
was different and editing was basically impossible. It turns out that
vi looks at the $TERMCAP shell variable for its information, but there are
several other environment variables that also keep track of the window size.
So I wrote a little C program to find out how big a window is, and a shell
script which puts the values found by the C program into the proper places
in the environment. To make it work, do the following:

  1. extract the files 'fix' and 'w_fix.c' from the end of this message
     by following the instructions.

  2. compile 'w_fix.c' like so:
        cc w_fix.c -ltam -ltermcap -o w_fix
     and put it somewhere in your path, in the same directory as 'fix'.

  3. whenever you change a window's shape or size, type
        . fix
     from the shell. It should take about two seconds to run.

  It has worked for me, and seems so useful that I thought I'd post it
(here, because it is only useful for 7300 owners). Let me know if there
are any problems.



# 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 richmon on Tue Jul 16 14:46:37 EDT 1985
# Contents:  fix w_fix.c
 
echo x - fix
sed 's/^\@//' > "fix" <<'\@//E*O*F fix//'
w_fix 2>&1 /dev/null
LINES=`cat height`
WNHEIGHT=LINES
COLUMNS=`cat width`
WNWIDTH=WNWIDTH
export LINES WNHEIGHT COLUMNS WNWIDTH
echo $TERMCAP | sed -e s/li#[0-9]\*/li#$LINES/ | sed -e s/co#[0-9]\*/co#$COLUMNS/ > foo
TERMCAP=`cat foo`
export TERMCAP
/bin/rm foo height width
\@//E*O*F fix//
chmod u=rwx,g=rx,o=rx fix
 
echo x - w_fix.c
sed 's/^\@//' > "w_fix.c" <<'\@//E*O*F w_fix.c//'
#include <stdio.h>
#include <tam.h>

main()
{
	short win;
	WSTAT wstatp;
	FILE *f_height, *f_width, *fopen();

	winit();
	win = 0;
	if ((f_height = fopen("height", "w")) == NULL) {
		fprintf(stderr, "Can't open height - aborting\n");
		exit(-1);
	}
	if ((f_width = fopen("width", "w")) == NULL) {
		fprintf(stderr, "Can't open width - aborting\n");
		exit(-1);
	}
	wgetstat(win, &wstatp);
	fprintf(f_height, "%d", wstatp.height);
	fprintf(f_width, "%d", wstatp.width);
	wexit();
}

\@//E*O*F w_fix.c//
chmod u=rw,g=r,o=r w_fix.c
 
exit 0

########### CUT OUT THIS LINE AND ANY THAT FOLLOW ##################

-- 
Michael Richmond			Princeton University, Astrophysics

{allegra,akgua,burl,cbosgd,decvax,ihnp4,noao,princeton,vax135}!astrovax!richmon