*BSD News Article 52075


Return to BSD News archive

Path: euryale.cc.adfa.oz.au!newshost.anu.edu.au!harbinger.cc.monash.edu.au!simtel!news.sprintlink.net!in2.uu.net!news1.digital.com!nntp-hub2.barrnet.net!nntp-hub.barrnet.net!inet-nntp-gw-1.us.oracle.com!news.caldera.com!park.uvsc.edu!usenet
From: Terry Lambert <terry@cs.weber.edu>
Newsgroups: comp.unix.bsd.freebsd.misc
Subject: Re: Q: Writing to lower right of console
Date: 2 Oct 1995 19:41:12 GMT
Organization: Utah Valley State College, Orem, Utah
Lines: 73
Message-ID: <44pf8o$ap@park.uvsc.edu>
References: <DFrvI6.8ro@wuschel.ibb.schwaben.com>
NNTP-Posting-Host: hecate.artisoft.com

uz@wuschel.ibb.schwaben.com (Ullrich von Bassewitz) wrote:
]
] I'm trying to port a program from linux to freebsd. Until now there is only
] one problem:
] 
] If I write to the last char of the screen (the char in the lower right
] corner), a scroll happens and my last line goes one line up, the first
] line vanishes.
] 
] My program is screen oriented, it has a menu line as the first and a status
] line as the last line of the screen. You can imagine, what happens if the
] screen scrolls one line up when writing the status line...
] 
] I know, that this is not really a freebsd problem, many terminals may have
] this too (the Linux console and xterm windows under X don't have it).
] With a special terminal, I can tell people, that my program will
] not support this terminal - but telling people that the console is not
] suppported would be a very unpopular approach :-)

To support the terminals that do this:

1)	look for the "xn" flag in the termcap entry using the
	tgetflag() routine.
2a)	If the flag is set, use the current code.  The "xnwrap"
	flag means that the cursor wraps BEFORE character 81
	instead of AFTER character 80.  This is also called
	"delayed wrap".
2b)	If the flag is not set, then you will need to do the
	following to write the last character position (SCO Xenix
	and all Televideo sequence terminals -- like the Wyse-50,
	the most popular one of all time -- terminals do not have
	the xn flag set);
	i)	Rememeber the second to last character.
	ii)	write the last character in the second to
		last character position.
	iiia)	use "insert character mode" to insert the
		second to last character in the correct
		position.  This will force the last character
		to the right, and put it into the correct
		position as well.
	iiib)	if the terminal does not support "insert
		character mode", but supports "inseert character"
		as an operation, then insert a character before
		the second to last character.  This will force
		the correct character into the last postion.
		Then write the second to last character.
	iiic)	if the terminal does not support either
		"insert character mode" or "insert character",
		then use "insert line" instead.
	iiid)	if the terminal does not support any of "insert
		character mode", "insert character", or "insert
		line", then use a scroll region to implement
		insert line.
	iiie)	if the terminal does not support any of "insert
		character mode", "insert character". "insert line",
		or scroll regions, then omit drawing the last
		character position entirely.

Note that curses will implement these workarounds for you
automatically: you should be using curses (I may be mistaken about
curses knowing about using a scoll region to do an insert line;
I seem to rememebr vi being stupid about this on real VT100's).


All of the above are instances of a well known programming
technique, the techinical name of which is "brute force".  8-).


                                        Terry Lambert
                                        terry@cs.weber.edu
---
Any opinions in this posting are my own and not those of my present
or previous employers.