[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: terminfo and terminfow libraries
From: |
Stanislav Ievlev |
Subject: |
Re: terminfo and terminfow libraries |
Date: |
Fri, 30 Jan 2004 12:15:36 +0300 |
On Wed, Jan 28, 2004 at 08:16:20AM -0500, Thomas Dickey wrote:
> On Wed, 28 Jan 2004, Stanislav Ievlev wrote:
>
> > Hello, friends!
> >
> > Why ncurses needs two version of lowlevel terminfo library:
> > with widechar support and without widechar support?
> >
> > It's better for vendors to have single terminfo library, when this
> > library is used as a replacement of old termcap library.
>
> I suppose so (hadn't considered it). Will add to to-do list for 5.5
JFYI:
We (ALT) have made little research for this problem, 'cause we use tinfo
instead of termcap and can't wait for 5.5.
We try to use libtinfow as a single library both for libncurses and for
libncursesw.
We compare libtinfo and libtinfow for API/ABI (checking both compiled object
files, preprocessor results and assembler code). There are following results
below:
1.(not a problem) libtinfow added new symbol key_name
2.(not a problem) libtinfow added new functions _nc_unicode_locale() and
_nc_locale_breaks_acs().
Added code are little and will work both in wide-char and non-wide-char
versions.
--
if (_nc_unicode_locale() && _nc_locale_breaks_acs()) {
acs_chars = NULL;
ena_acs = NULL;
}
--
3. (problem). _nc_outch() functions use screen structure. This structure
is differ in unicode and non-unicode versions (different offsets for the common
fields):
--
...
/* recent versions of 'screen' have partially-working support for
* UTF-8, but do not permit ACS at the same time (see
* tty_update.c).
*/
#if USE_WIDEC_SUPPORT
bool _posix_locale;
bool _screen_acs_fix;
#endif
bool _cleanup; /* cleanup after int/quit signal
*/
int (*_outch)(int); /* output handler if not putc */
...
--
As a result we have different code , when some code work with _cleanup and
_outchar fields, because they have different offset in unicode and non-unicode
versions.
As I see this "#if", was added _only_ in 5.4 version. So we have a chance to
fix this problem, by replacing added elements to the end of structure.
If _posix_locale and _screen_acs_fix live at the end of struct, following
code in _nc_outch will same in unicode and non-unicode versions.
--
...
if (SP != 0
&& SP->_cleanup) {
...
--
Patch, we made for our distribution you can find in attach.
Results: after fixing of the problem #3 you can easy made single version
of the libtinfo both for unicode and non-unicode ncurses.
--
With best regards
Stanislav Ievlev
ncurses-5.3-alt-utf8-fix.patch
Description: Text document