Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 23 Feb 2023 21:20:10 +0000
From:      Frank Leonhardt <freebsd-doc@fjl.co.uk>
To:        questions@freebsd.org
Subject:   Re: Cursing the tput utility - the penguin strikes again
Message-ID:  <2c582ca1-9f61-a894-b3c6-c91e696fd3cf@fjl.co.uk>
In-Reply-To: <20230223202622.GA4604@prl-debianold-64.jexium-island.net>
References:  <974a81c2-a92d-7f94-5f96-869bddfe21f3@fjl.co.uk> <Y/fJGCedB3Fk17xa@rain.cave> <20230223202622.GA4604@prl-debianold-64.jexium-island.net>

next in thread | previous in thread | raw e-mail | index | archive | help
On 23/02/2023 20:26, Thomas Dickey wrote:
> On Thu, Feb 23, 2023 at 03:14:16PM -0500, Kurt Hackenberg wrote:
>> On Thu, Feb 23, 2023 at 04:45:21PM +0000, Frank Leonhardt wrote:
>>
>>> So there's a tput utility for controlling the terminal in BSD.
>> ...
>>> Well use the tcap utility on non-BSD platforms and it suddenly doesn't
>>> work. It turns out that the penguinistas thought using the "Cap Name"
>>> instead of the "TCap Code" was a good idea. Some of the codes are the
>>> same, some are not. In fact most are not.
>> The trouble is those are two different mechanisms, based on two different
>> file formats, that do the same thing.
>>
>> The two file formats are "termcap" and "terminfo", both from the default
>> names of the system files that use them. Manual section 5 has pages about
>> both. They're similar, but different enough to be incompatible.
>>
>> The "TCap codes" are the names used in termcap format; the "Capnames" are
>> the names used in terminfo format. (A "cap" is a terminal "capability".)
>>
>> I think termcap came first, and then somebody invented terminfo as an
>> improvement or a reimplementation of the same idea. I think termcap came
>> from Berkeley Unix -- maybe invented for vi -- so FreeBSD more or less
>> stayed with it. Maybe terminfo came from Bell Labs; I think Linux prefers
>> it.
> most do (FreeBSD's userland is an exception)
>
> It's actually ncurses (and terminfo) underneath the facade.
>
> related -
>
> https://invisible-island.net/ncurses/tctest.html
>> This is pointlessly incompatible, the result of haphazard evolution, and
>> kind of a mess. It's all about 40 years old.
>>
>> The library functions that use those terminal descriptions were in the
>> library "curses" (from "cursor"), long ago superseded by "ncurses" (new
>> curses). Probably the program tput uses the library ncurses. You 
>> might want
>> to look at that library; maybe there's a compatibility layer. Or, as 
>> Daniel
>> Tameling suggested, maybe there are two different version of ncurses.
> just one -
>
> https://invisible-island.net/ncurses/ncurses.faq.html#platform-portable
>
> (but reading the FreeBSD sources would tell more)

The info you and Kurt have posted chimes with what I believe too. I 
started with System V ;-)

It's pretty clear that BSD has stuck with termcap where tput is 
concerned. Linux has broken this by using terminfo names instead. BSD 
presumably didn't, for compatibility.  I accept no excuses for breaking 
things unless it's absolutely necessary - so anyone reading this has 
been warned!

I'm pretty sure (but don't quote me) that termcap came from the BSD side 
(I don't remember it on other Unix systems); terminfo was supposed to 
include printer control codes as well, and I think it was there on SunOS 
(also BSD. Hmm)

Unless anything comes up I can see two solutions - a compatibility 
wrapper for shell scripts or, perhaps, modifying BSD tput to accept both 
versions of the attribute name. Something to think about...

Thanks, Frank.







Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?2c582ca1-9f61-a894-b3c6-c91e696fd3cf>