libcurses and dependencies taken from netbsd and brought into a portable shape (at least to musl or glibc)

Overview

netbsd-libcurses portable edition

this is a port of netbsd's curses library for usage on Linux systems (tested and developed on sabotage linux, based on musl libc). It should be possible to use on other POSIX platforms as well with minor changes.

it supports widechar (like the ncursesw build variant) and is close to being a 100% feature-complete drop-in replacement for ncurses.

to this date, there are only 3 implementations of the curses API:

  • the ubiquitous ncurses library, which is used on almost every UNIX system (Linux, Mac OS X, FreeBSD, OpenBSD and others).
  • netbsd curses, previously used on netbsd only.
  • pdcurses, targetting the windows terminal, SDL and X11 (unusable on UNIX terminals).

Why do we need an ncurses replacement ?

  • Competition is good.

  • Ncurses is one of the most used libraries in the linux ecosystem and therefore it's usually one of the first libraries built in a source-based distro. There's basically no way around it, unless you're building a single-purpose appliance.

  • Readability/Hacking. even though ncurses is free software, it is very hard to change its source code:

    • extremely complicated build process with several layers of preprocessing using tools like awk, sed and the output of the C preprocessor with reliance on implementation details, as shown by the recent breakage when distros updated to GCC 5.
    • heavy use of macros, making the code hard to read.
    • very much code (bloat).
  • Usability. the default configuration of ncurses is usually not what one wants, and it features several dozens of configure options to customize the build, for example making it split up in several smaller libraries, with or without widechar support, etc.

    this makes it hard to guess which files to link against and which headers to use when building a package against ncurses. -lncurses? -lncursesw -lterminfo -ltic? curses.h? ncurses/ncursesw.h? this filename chaos is often fixed in a distro-specific manner.

    to accomodate for this, ncurses ships its own config tool ncurses(w)5-config instead of a standardized pkg-config description file (disabled by default) to query the necessary CFLAGS and LDFLAGS. unfortunately like every other homebrewed pkg-config replacement, this config utility was designed without cross-compilation in mind, so many packages using ncurses and autoconf fail to cross-compile when unpatched.

  • Size and build time.

Table 1: Comparison between ncurses and netbsd curses

NCURSES NETBSD CURSES
Size of extracted source 15.8 MB 3.3 MB
Installed size 15.9 MB 1.3 MB
Installed size w/debuginfo 128.3 MB 19.9 MB
Build time (make -j2) 59 sec 9 sec
size of libncursesw.so 346 KB 150 KB
size of static linked nano 334 KB 288 KB

when scaling up to more build jobs, it is expected that netbsd curses fares a lot better since its Makefile is fully parallelizable, while ncurses spends a lot of time in a single process executing the configure script.

Differences from ncurses

  • the structures used differ. some programs access ncurses structure members directly, they must be patched to use a portable approach.
  • mouse handling is lacking. ncurses mouse handling routines are provided as no-op macros, so software using it builds without having to patch it.
  • some rarely used functions like vidputs() are missing. users must be patched.
  • the terminfo database is compiled (via tic) into a binary database in CDB format.
  • "only" 510 color pairs are supported.
  • some functionality like tgetent() lives in libterminfo rather than in libcurses. it may be necessary to add -lterminfo to LDFLAGS for packages using those functions.

TODO

  • installation of global terminfo db (rather than just a small built-in, handpicked set)

Compilation

netbsd-curses ships without a configure script, and requires GNU make. variables for compilation can be passed directly to make, or be saved into config.mak. recognized variables are:

  • CC - the C compiler
  • HOSTCC - the C compiler used for host programs when crosscompiling. if set, and different from CC, cross-compilation is assumed.
  • CFLAGS - flags for the compiler
  • CPPFLAGS - flags for the preprocessor
  • LDFLAGS - flags for the linker
  • PREFIX - filesystem prefix used for hardcoded paths and installation
  • DESTDIR - staging directory for installation

examples:

make CFLAGS="-Os -Wall -fPIC" PREFIX=/usr/local -j4 all install
make CFLAGS=-O2 LDFLAGS=-static PREFIX=/usr all-static install-static

example config.mak:

CFLAGS = -O3 -Wall
PREFIX = /usr
DESTDIR = foo

if you're using config.mak, you can just run make && make install and the variables will be picked up automatically.

the all and install Makefile targets will build/install all programs, shared and static libs, and headers. the all-static and install-static targets will build/install all programs, static libs, and headers. the all-dynamic and install-dynamic targets will build/install all programs shared libs, and headers.

the all build can be sped up by putting -fPIC in CFLAGS. this has the effect that the same object files will be used for the dynamic and static libs; otherwise they will be compiled twice with different CFLAGS.

Compiled-in terminal database

support for about a dozen common TERMs is built-in already. if you need one that's not included, you can either add yours to libterminfo/genterms or make terminfo/terminfo.cdb and install the result to either $PREFIX/share/terminfo.cdb or $HOME/.terminfo.cdb.

Compiling software against netbsd-curses

the functionality that ncurses offers is usually (if not configured to split into several separate libs) available in a single libncurses library. netbsd-curses on the other hand has it always split into libcurses and libterminfo. this difference requires to give the build system a hint that it needs to link to both libcurses and libterminfo.

  • programs using pkg-config(1) automatically get the right options due to the supplied .pc files.

  • for autoconf based software (using a configure script) it is usually sufficient to invoke configure like this:

    LIBS="-lcurses -lterminfo" ./configure ...

  • for Makefile-only based build systems, it should be sufficient to add the libs to LDFLAGS:

    make LDFLAGS="-lcurses -lterminfo" ...

with these instructions it is easy to compile the majority of ncurses apps without problems against netbsd-curses.

a small percentage of apps written for ncurses poke at internals and need light patching:

if you have trouble compiling a specific package, first look at the sabotage linux build recipes. if you still can't get the package to compile, feel free to open an issue at the netbsd-curses issue tracker.

License

libcurses, tset and tput are (C) 1980-1994 "The Regents of the University of California" licensed under the 3-clause BSD license. Everything else is (C) 1999-2016 The NetBSD Foundation, Inc. and Contributors, licensed under the 2-clause BSD license. see COPYING for the full text, and in doubt, consult the copyright clauses in the respective .c files. Files without copyright clauses in the file header are explicitly released under the terms of the 2-clause BSD license as well.

APPENDIX A: Test Setup used for comparison in Table 1

All tests were done on a dual core x86_64 sabotage linux system, with the following features: installation of shared and static libs, headers, etc, i.e. make -j2 all install. ncurses and netbsd curses were both configured with support for widechars, and built-in terminfo database for a handful of terminals.

CFLAGS (optimized for size):
-g0 -fdata-sections -ffunction-sections -Os -fno-unwind-tables
-fno-asynchronous-unwind-tables -Wa,--noexecstack

LDFLAGS:
-s -Wl,--gc-sections -Wl,-z,relro,-z,now

netbsd curses was installed without manpages (ncurses: 1.1 MB) and terminfo database (ncurses: 6.4MB). the debug info build was created with -g3 and debuginfo stripped into external files via objcopy.

APPENDIX B: History of NetBSD curses

Thomas Dickey did a thorough investigation on the history of NetBSD curses.

Comments
  • nnn with netbsd-curses

    nnn with netbsd-curses

    Hi,

    We are trying out nnn with netbsd-curses and musl libc.

    The performance results are just awesome!

    Seeing the issue https://github.com/jarun/nnn/issues/998 because of the following difference between ncursesw and netbsd-curses:

    In a case where ncursesw sends KEY_RESIZE (key value 410) twice, netbsd-curses sends a KEY_RESIZE (key value 512) followed by a NULL (key value 0) character.

    nnn uses the NULL key (^Space) for range selection leading into issues.

    Can you please take a look why the NULL key is sent after the KEY_RESIZE?

    Attached the debug logs from ncursesw and netbsd-curses. A diff would show the problem.

    Please let us know if you need some more details.

    nnndbg_ncurses.txt nnndbg_netbsd.txt

    opened by jarun 32
  • support for strfnames/strnames

    support for strfnames/strnames

    libtermkey requires strfnames/strnames, which are not currently available in netbsd-curses. The patch was created thanks to the help of Michael Forney.

    Best regards, Daniel

    diff -urN netbsd-curses.orig/libterminfo/names.awk netbsd-curses/libterminfo/names.awk
    --- netbsd-curses.orig/libterminfo/names.awk	Thu Jan  1 00:00:00 1970
    +++ netbsd-curses/libterminfo/names.awk	Mon Nov 26 15:26:54 2018
    @@ -0,0 +1,21 @@
    +/TICODE_[a-z]+,/ {
    +	names[++numnames] = substr($1, 8, length($1) - 8)
    +}
    +
    +/^#define t_[a-z]+(t)/ {
    +	fnames[++numfnames] = substr($2, 3, length($2) - 5)
    +}
    +
    +END {
    +	print "\nconst char *const strnames[] = {"
    +	for (i = 1; i <= numnames; ++i)
    +		print("\t\"" names[i] "\",")
    +	print "\t(void *)0"
    +	print "};"
    +
    +	print "\nconst char *const strfnames[] = {"
    +	for (i = 1; i <= numfnames; ++i)
    +		print("\t\"" fnames[i] "\",")
    +	print "\t(void *)0"
    +	print "};"
    +}
    diff -urN netbsd-curses.orig/libterminfo/term.h netbsd-curses/libterminfo/term.h
    --- netbsd-curses.orig/libterminfo/term.h	Mon Nov 26 15:17:58 2018
    +++ netbsd-curses/libterminfo/term.h	Mon Nov 26 15:26:00 2018
    @@ -1944,6 +1944,8 @@
     #endif
     
     extern TERMINAL *cur_term;
    +extern const char *const strfnames[];
    +extern const char *const strnames[];
     
     /* setup functions */
     int		setupterm(const char *, int, int *);
    diff -urN netbsd-curses.orig/GNUmakefile netbsd-curses/GNUmakefile
    --- netbsd-curses.orig/GNUmakefile	Mon Nov 26 16:06:47 2018
    +++ netbsd-curses/GNUmakefile	Mon Nov 26 16:08:49 2018
    @@ -67,6 +67,7 @@
     TI_SRCS+=libterminfo/compile.c libterminfo/hash.c
     TI_SRCS+=libterminfo/cdbr.c
     TI_SRCS+=libterminfo/mi_vector_hash.c
    +TI_SRCS+=libterminfo/names.c
     # Build in termcap emulation
     TI_SRCS+=libterminfo/termcap.c
     TI_LIBA=libterminfo/libterminfo.a
    @@ -74,6 +75,9 @@
     TI_OBJS=$(TI_SRCS:.c=.o)
     TI_LOBJS=$(TI_SRCS:.c=.lo)
     TI_MAN =$(sort $(wildcard libterminfo/*.3))
    +
    +libterminfo/names.c: libterminfo/term.h
    +	cat $^ | awk -f libterminfo/names.awk > [email protected]
     
     libterminfo/term.o: CPPFLAGS+=-DINSTALL_PREFIX=\"$(PREFIX)\"
     libterminfo/term.lo: CPPFLAGS+=-DINSTALL_PREFIX=\"$(PREFIX)\"
    diff -urN netbsd-curses.orig/libterminfo/GNUmakefile netbsd-curses/libterminfo/GNUmakefile
    --- netbsd-curses.orig/libterminfo/GNUmakefile	Mon Nov 26 15:17:58 2018
    +++ netbsd-curses/libterminfo/GNUmakefile	Mon Nov 26 15:23:01 2018
    @@ -12,6 +12,7 @@
     SRCS+=		compile.c hash.c
     SRCS+=		cdbr.c
     SRCS+=		mi_vector_hash.c
    +SRCS+=		names.c
     
     INCS=		term.h
     INCSDIR=	/usr/include
    @@ -99,6 +100,9 @@
     
     term.c: compiled_terms.c
     termcap.c: termcap_hash.c
    +
    +names.c: term.h
    +	cat $^ | awk -f names.awk > [email protected]
     
     libterminfo.a: $(OBJS)
     	ar cru [email protected] $^
    
    
    opened by dcegielka 14
  • Compile errors (with glibc)

    Compile errors (with glibc)

    • glibc 2.23.90 (gad1b6d8)
    • gcc 5.3.0 | clang 3.7.1
    • gmake 4.1

    Sorry if I'm being dumb here but there seems to be some issue on my system with how includes or conditional macros are defined, as when attempting to build by simply running make I get the following errors:

    cc -I../libterminfo -I.. -I. -Werror-implicit-function-declaration    -c -o tic.o tic.c
    In file included from /usr/include/sys/stat.h:36:0,
                     from tic.c:33:
    /usr/include/time.h:75:1: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘typedef’
     typedef __time_t time_t;
     ^
    /usr/include/time.h:76:1: error: unknown type name ‘__END_NAMESPACE_STD’
     __END_NAMESPACE_STD
     ^
    In file included from tic.c:33:0:
    /usr/include/sys/stat.h: In function ‘__USING_NAMESPACE_STD’:
    /usr/include/sys/stat.h:43:17: error: storage class specified for parameter ‘dev_t’
     typedef __dev_t dev_t;
                     ^
    /usr/include/sys/stat.h:48:17: error: storage class specified for parameter ‘gid_t’
     typedef __gid_t gid_t;
                     ^
    

    This continues for roughly 3000 lines before ending with:

    /usr/include/sys/stat.h:48:17: error: declaration for parameter ‘gid_t’ but no such parameter
     typedef __gid_t gid_t;
                     ^
    /usr/include/sys/stat.h:43:17: error: declaration for parameter ‘dev_t’ but no such parameter
     typedef __dev_t dev_t;
                     ^
    tic.c:627:1: error: expected ‘{’ at end of input
     }
     ^
    GNUmakefile:27: recipe for target 'tic.o' failed
    make: *** [tic.o] Error 1
    

    I don't expect it to really build with glibc but these kinds of errors seem like syntax rules are being broken and I'm not sure where.

    opened by Earnestly 14
  • 0.2.1 Build Failure

    0.2.1 Build Failure

    libcurses/slk.c: In function '__slk_set': libcurses/slk.c:488:10: error: implicit declaration of function 'wcwidth' [-Werror=implicit-function-declaration] len += wcwidth(wc);

    Last known successful build was 22acb33 so something between then and now may be the culprit.

    opened by githububub 6
  • Error compiling with ncurses installed.

    Error compiling with ncurses installed.

    Platform is latest Arch Linux, GCC, GNU crap, etc. Compiling with LDFLAGS=-static, PREFIX="".

    It fails with

    In file included from libterminfo/setupterm.c:41:0:
    /usr/include/curses.h:879:32: error: conflicting types for tparam
     extern NCURSES_EXPORT(char *) tparm (NCURSES_CONST char *, ...); /*special*/
    
    In file included from libterminfo/setupterm.c:41:0:
    ./libterminfo/term.h:1961:9: note: previous declaration of tparm was here
     char *  tparm(const char *, long, long, long, long, long, 
    

    (Apologies if there is a typo here and there -- I had to type it out manually from a box that doesn't have internet access :( )

    It seems to me as if GCC is selecting /usr/include/curses.h over ./curses/curses.h, but the compile options for that module start with -I./../curses, so that seems unlikely.

    opened by finnoleary 5
  • Provide a full generic static target

    Provide a full generic static target

    It could be a smart idea to provide a static-only target inside the GNUMakefile. The default install target can be easily modified with sed(1), but it does not seem to be a perenial solution (for maintainers for example).
    I was thinking about something like this:

    install-static: install-headers install-stalibs install-progs install-pcs
    

    This is a random (harmless) example (having a all-static could work too). Dunno if it's enough clean for you. I can provide a tiny patch (which is a better) if you agree with the request.

    Another question: do you plan to create a tag soon?

    opened by Ypnose 5
  • Issues compiling some packages

    Issues compiling some packages

    The first package that i couldn't compile(thanks to errors) is zsh shell. (and a little note i am a gentoo user, So i am using portage to install packages)

    I used this patch: http://ix.io/3uO5 Emerge build log: http://ix.io/3uO6 Emerge configure log: http://ix.io/3uO7

    opened by XDream8 4
  • Unable to build with gnu-efi (linker relocation fails)

    Unable to build with gnu-efi (linker relocation fails)

    Hello!

    I am interested in creating a UEFI application utilizing netbsd-curses. For this purpose, I attempted to build netbsd-curses against gnu-efi on a recent Debian GNU/Linux 11 testing/bullseye amd64 system. (gnu-efi is available as repository package)

    However, after adjusting CFLAGS and LDFLAGS accordingly, I found myself unable to successfully link ANY shared library from netbsd-curses. All object files seem to compile flawlessly. I confirmed this by changing parts of the GNUmakefile and forcing some components off, etc.

    All attempts to link terminate like this:

    cc -I. -I./libterminfo -DHAVE_WCHAR -DINSTALL_PREFIX="/usr" -DINSTALL_PREFIX="/usr" -I./tic -I/usr/include/efi -I/usr/include/efi/x86_64 -I/usr/include/efi/protocol -fno-stack-protector -fPIC -fshort-wchar -mno-red-zone -Wall -DEFI_FUNCTION_WRAPPER -O2 -c -o tic/hash.o tic/hash.c cc -nostdlib -znocombreloc -T /usr/lib/elf_x86_64_efi.lds -shared -Bsymbolic -L /usr/lib /usr/lib/crt0-efi-x86_64.o -lefi -lgnuefi tic/tic.o tic/cdbw.o tic/mi_vector_hash.o tic/compile.o tic/hash.o -o tic/tic /usr/bin/ld: /usr/lib/crt0-efi-x86_64.o: warning: relocation against ImageBase' in read-only section '.text' /usr/bin/ld: /usr/lib/crt0-efi-x86_64.o: relocation R_X86_64_PC32 against symbol 'ImageBase' can not be used when making a shared object; recompile with -fPIC /usr/bin/ld: final link failed: bad value collect2: error: ld returned 1 exit status make: *** [GNUmakefile:457: tic/tic] Error 1

    I build using the following command:

    #!/bin/bash EFIINCS="-I/usr/include/efi -I/usr/include/efi/x86_64 -I/usr/include/efi/protocol" LIB="/usr/lib" EFI_LDS="$LIB/elf_x86_64_efi.lds" EFI_CRT_OBJS="$LIB/crt0-efi-x86_64.o" LDFLAGS="-nostdlib -znocombreloc -T $EFI_LDS -shared -Bsymbolic -L $LIB $EFI_CRT_OBJS -lefi -lgnuefi" CFLAGS="$EFIINCS -fno-stack-protector -fPIC -fshort-wchar -mno-red-zone -Wall -DEFI_FUNCTION_WRAPPER -O2" make CFLAGS="$CFLAGS" LDFLAGS="$LDFLAGS" PREFIX=/usr all-dynamic

    From what I can see (I also attempted to force CFLAGS and LDFLAGS into every "CC" line the makefile), all files are built with -fpic. The gnu-efi crt0-efi-x86_64.o was also built with -fpic (to be sure, I also rebuilt it myself).

    Do you have any idea what might be causing this issue? If not, do you know an appropriate place where I could ask for help?

    Thank you very much! Cheers,

    schreiberstein

    opened by schreiberstein 4
  • Cannot seem to build static w/ specified lib && include paths

    Cannot seem to build static w/ specified lib && include paths

    Attempting a static build. I have a static binutils, musl-libc, and gcc targeted to that libc.

    My config.mak (aside, would be nice if build recognized config.mk as well ) looks like:

    PREFIX = /home/[me]/repos/toolbox/ins
    TARGET = x86_64-linux-musl
    CFLAGS=-O2 -I. -I${PREFIX}/${TARGET}/include -I./libcurses -I${PREFIX}/include -nostdinc
    LDFLAGS=-static -L${PREFIX}/lib -L${PREFIX}/${TARGET}/lib -nodefaultlibs
    CC=${TARGET}-gcc
    

    I then run "make all-static" but it doesn't seem to pull in the LDFLAGS and the build does not build nbperf statically:

    file src/netbsd-curses/nbperf/nbperf
    src/netbsd-curses/nbperf/nbperf: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), not stripped
    
    

    It is just after the nbperf build that I get the error which is ( with nbperf's called build command for context )

    x86_64-linux-musl-gcc  nbperf/nbperf.o nbperf/nbperf-bdz.o nbperf/nbperf-chm.o nbperf/nbperf-chm3.o nbperf/graph2.o nbperf/graph3.o nbperf/mi_vector_hash.o -o nbperf/nbperf
    Generating terminfo hash
    TERMINFODIR=./terminfo TOOL_AWK=awk TOOL_NBPERF=nbperf/nbperf TOOL_SED=sed TOOL_SORT=sort TOOL_TIC=tic/host_tic /bin/sh libterminfo/genhash libterminfo/term.h nbperf/nbperf > libterminfo/hash.c
    libterminfo/genhash: nbperf/nbperf: /lib/ld-musl-x86_64.so.1: bad ELF interpreter: No such file or directory
    make: *** [libterminfo/hash.c] Error 126
    

    Any ideas what could be going on? Also apologies if this is in the wrong place; didn't see anywhere else in the readme to submit a build issue.

    Thank you!

    opened by caryatid 4
  • Build Error: Assumed value of MB_LEN_MAX wrong

    Build Error: Assumed value of MB_LEN_MAX wrong

    Arch. netbsd-curses 0.0.4. Unable to complete the build process due to following error:

    In file included from /usr/include/stdlib.h:925:0, from libcurses/fileio.c:41: /usr/include/bits/stdlib.h: In function ‘wctomb’: /usr/include/bits/stdlib.h:90:3: error: #error "Assumed value of MB_LEN_MAX wrong"

    error "Assumed value of MB_LEN_MAX wrong"

    ^~~~~ cc -D_FORTIFY_SOURCE=2 -I. -I./libterminfo -DHAVE_WCHAR -I./libcurses -march=amdfam16 -O2 -pipe -fstack-protector-all -fomit-frame-pointer -Werror-implicit-function-declaration -c -o libcurses/getch.o libcurses/getch.c make: *** [GNUmakefile:399: libcurses/fileio.o] Error 1 make: *** Waiting for unfinished jobs.... ==> ERROR: A failure occurred in build(). Aborting...

    How to resolve?

    opened by githububub 4
  • __scanflike error on musl

    __scanflike error on musl

    Hi. I'm building tabs from nbase using Clang, and got this error which seems to be related to this ncurses:

    /usr/include/curses.h:721:43: error: expected function body after function declarator
    int      mvscanw(int, int, const char *, ...) __scanflike(3, 4);
                                                  ^
    /usr/include/curses.h:731:54: error: expected function body after function declarator
    int      mvwscanw(WINDOW *, int, int, const char *, ...) __scanflike(4, 5);
                                                             ^
    /usr/include/curses.h:763:31: error: expected function body after function declarator
    int      scanw(const char *, ...) __scanflike(1, 2);
                                      ^
    /usr/include/curses.h:786:50: error: expected function body after function declarator
    int      vw_scanw(WINDOW *, const char *, __va_list) __scanflike(2, 0);
                                                         ^
    /usr/include/curses.h:788:49: error: expected function body after function declarator
    int      vwscanw(WINDOW *, const char *, __va_list) __scanflike(2, 0);
                                                        ^
    /usr/include/curses.h:831:42: error: expected function body after function declarator
    int      wscanw(WINDOW *, const char *, ...) __scanflike(2, 3);
    

    A quick grep shows that function was defined in form.h, but adding it didn't solve the problem. And at you said in #46, there's a lot of mismatches growing between NetBSD's version and this version, maybe it caused the problem. What do I need to do make it work?

    opened by tch69 3
  • wchar_t / unicode support broken? - initscr breaking putwc

    wchar_t / unicode support broken? - initscr breaking putwc

    Hi,

    i've spent quite a bit of time trying to debug this issue and at this point i feel confident to say it might be a bug. If putwc is called with a valid codepoint (i've used 0xF6 for testing which should render as "ö") before initscr everything works as expected but anywhere after initscr non 7bit codepoints render as unknown characters (inverse color question marks) and as putwc is used by all functions printing wchar_t strings (for example waddwstr) this basically breaks unicode support. Locale settings (setlocale) don't seem to affect this at all (en_US.UTF-8, C or an invalid setting all result in the same behavior).

    Trying to track down the cause i've come to the conclusion that it seems to be related to tputs/ti_puts calls (adding macros to curses_private.h turning those into noops keeps putwc functional but obviously otherwise breaks rendering badly). Sadly i wasn't able to pin this to a certain call as it seems at least multiple (or even all of them?) result in putwc breaking. Any kind of hint or pointer on to how to get this working would be greatly appreciated.

    Testing was done on Devuan Ascii (a linux distribution pretty much identical to Debian 9.0 sans systemd). Curses version used is 0.3.2 release. I've also tried a handful of different terminal definitions which made no difference regarding putwc behavior (terminal used for most testing is sakura which is libvte based identifying as xterm-256color. Xterm (the application, not just the definition) gave the same results though.

    opened by 0xE70000000 19
  • Heavy namespace violations in curses.h

    Heavy namespace violations in curses.h

    curses.h is full of identifiers in the __-prefixed namespace, many of which are things that could easily clash with system headers. I saw a report of it failing to build on OSX that looked like it might have been related, and while I didn't see cause for that particular failure it prompted me to notice all these violations. I don't think any of them are essential/public API.

    opened by richfelker 2
  • Add toe utility

    Add toe utility

    toe - table of (terminfo) entries

    With no options, toe lists all available terminal types by primary name with descriptions. File arguments specify the directories to be scanned; if no such arguments are given, your default terminfo direc‐ tory is scanned. If you also specify the -h option, a directory header will be issued as each directory is entered.

    opened by tpimh 7
  • generate terminfo.5 manpage

    generate terminfo.5 manpage

    # Generate our man pages
    terminfo.5: genman terminfo.5.in term.h termcap_map.c
                    @echo "Generating terminfo man pages"
                    ${SCRIPT_ENV} ${HOST_SH} ${.ALLSRC} > ${.TARGET}
    
    CLEANFILES+=    terminfo.5
    
    man: terminfo.5 
    
    
    opened by rofl0r 0
Releases(v0.3.2)
  • v0.3.2(May 20, 2021)

    http://ftp.barfooze.de/pub/sabotage/tarballs/netbsd-curses-0.3.2.tar.xz

    sha512sum netbsd-curses-0.3.2.tar.xz 
    2f5604782599f07ee8c54bbf98fa7f8b1c13a26b3e194a4b4ac756f8b23448d1d3cb65223f39de304f34322b73deec6ccfa93cd4a606b2ed56308de730d6593e  netbsd-curses-0.3.2.tar.xz
    
    Source code(tar.gz)
    Source code(zip)
  • v0.3.1(Apr 2, 2019)

    http://ftp.barfooze.de/pub/sabotage/tarballs/netbsd-curses-0.3.1.tar.xz

    $ sha512sum netbsd-curses-0.3.1.tar.xz 
    bd65358b59299de6b9879022842c7cd4fcdc1449b6bf7db5870a5fe0ffcc873f68da2bcf6b27bc231a956797377d66f56177178dad14304f332aaf924482ca90  netbsd-curses-0.3.1.tar.xz
    
    Source code(tar.gz)
    Source code(zip)
  • v0.3.0(Mar 2, 2019)

    http://ftp.barfooze.de/pub/sabotage/tarballs/netbsd-curses-0.3.0.tar.xz

    $ sha512sum netbsd-curses-0.3.0.tar.xz 
    9994c1efc2d5ac7beda7e09c023cb48ffe5638a570f6cc073ff613af7a3b3d8dbebc17414111abf947a31a25eb7b96c135e0cbe9aa87065d3b26138131339859  netbsd-curses-0.3.0.tar.xz
    

    should build on freebsd, GNU/Linux and musl/Linux

    Source code(tar.gz)
    Source code(zip)
  • v0.2.2(Jun 29, 2018)

    $ sha512sum netbsd-curses-0.2.2.tar.xz 
    84287e522277ea988de3ff44b8163c1a781ee4a19f376020786ac6420871343e6cb45d4161ba42603ca2fa40d98f1c174adbd16072f47402d44ad144a2fe8d95  netbsd-curses-0.2.2.tar.xz
    

    http://ftp.barfooze.de/pub/sabotage/tarballs/netbsd-curses-0.2.2.tar.xz

    Source code(tar.gz)
    Source code(zip)
  • v0.2.1(Feb 21, 2017)

    $ sha512sum netbsd-curses-0.2.1.tar.xz ea60a2bb137d248496a1f9ea8a6014d3fd40ef6982a3130332543436a67e76d1f95644820605acd5174c113fc18e013ad27328e8e915081cfe8cd11c1c716aa4 netbsd-curses-0.2.1.tar.xz

    http://ftp.barfooze.de/pub/sabotage/tarballs/netbsd-curses-0.2.1.tar.xz

    Changelog:

    • fixes for C++ compat
    • imported upstream changes:
      • new immedok(), syncok(), is_term_resized, resize_term(), is_pad(), ripoffline(), slk_*()
      • bugfixes
      • updated terminfo db to 2017-01-28
    Source code(tar.gz)
    Source code(zip)
  • v0.2.0(Jan 2, 2017)

    sha512sum netbsd-curses-0.2.0.tar.xz 3c6a37b585c920a1de2b66363addcde6b3ab608099ffe94b6cb5ce59ad4c916dc0676a583ef55a34b7438f2e18afe18d44dac822281df385f1430b340af19a9a netbsd-curses-0.2.0.tar.xz

    get release from http://ftp.barfooze.de/pub/sabotage/tarballs/netbsd-curses-0.2.0.tar.xz since github doesnt let me attach tarballs anymore

    changelog:

    • fixed linux terminal terminfo descriptions messing up midnight commander output
    • add built-in support for dvtm 0.15 terminfo descriptions
    • imported netbsd upstream changes:
      • addition of has_key(), typeahead(), use_env(), is_leaveok(), is_keypad(), filter()
      • fix A_BOLD bug in standend()
      • fix positioning bug in _cursesi_addbyte() and _cursesi_addwchar()
      • fix off-by-one memcpy() in _ti_readterm()
    Source code(tar.gz)
    Source code(zip)
  • v0.1.1(Oct 2, 2016)

  • v0.1.0(Sep 19, 2016)

  • v0.0.4(Aug 10, 2016)

Owner
null
provide SFML Time utilities in pure C++20, no dependencies

SFML-Time-utilities-without-SFML provide SFML Time utilities in pure C++20, no dependencies Example int main() { Clock clock; Sleep(1000);

null 1 Apr 28, 2022
A small and portable INI file library with read/write support

minIni minIni is a portable and configurable library for reading and writing ".INI" files. At just below 900 lines of commented source code, minIni tr

Thiadmer Riemersma 287 Nov 22, 2022
Internet Key Exchange version 2 (IKEv2) daemon - portable version of OpenBSD iked

Portable OpenIKED This is a port of OpenBSD's OpenIKED to different Unix-like operating systems, including Linux, macOS and FreeBSD.

OpenIKED 26 Nov 25, 2022
PhysicsFS; a portable, flexible file i/o abstraction.

PhysicsFS; a portable, flexible file i/o abstraction.

Ryan C. Gordon 285 Dec 1, 2022
A toolchain for injecting custom code into Super Mario Galaxy 2.

Syati Syati is a custom code loader for Super Mario Galaxy 2. It is able to compile custom code and link to existing functions in the game to create o

shibbs 20 Mar 29, 2022
Whitee is a tiny compiler written in C++17, which translates SysY language into ARM-v7a assembly.

Whitee is a tiny compiler written in C++17, which translates SysY language into ARM-v7a assembly. Table of Contents Background Install Usage Ar

null 13 Sep 21, 2022
Translates binary information (images, fonts, shaders) into C++ source code.

Binary bakery ?? Translates binary files (images, fonts etc.) into C++ source code and gives access to that data at compile- or runtime. There are dif

Sebastian Werhausen 129 Oct 28, 2022
CommonMark parsing and rendering library and program in C

cmark cmark is the C reference implementation of CommonMark, a rationalized version of Markdown syntax with a spec. (For the JavaScript reference impl

CommonMark 1.4k Dec 1, 2022
Sqrt OS is a simulation of an OS scheduler and memory manager using different scheduling algorithms including Highest Priority First (non-preemptive), Shortest Remaining Time Next, and Round Robin.

A CPU scheduler determines an order for the execution of its scheduled processes; it decides which process will run according to a certain data structure that keeps track of the processes in the system and their status. A process, upon creation, has one of the three states: Running, Ready, Blocked (doing I/O, using other resources than CPU or waiting on unavailable resource).

Abdallah Hemdan 18 Apr 15, 2022
The lightweight and modern Map SDK for Android and iOS

Open Mobile Maps The lightweight and modern Map SDK for Android (6.0+) and iOS (10+) openmobilemaps.io Getting started Readme Android Readme iOS Featu

Open Mobile Maps 94 Nov 17, 2022
Indexes points and lines and generates map tiles to display them

Datamaps This is a tool for indexing large lists of geographic points or lines and dynamically generating map tiles from the index for display. Depend

Eric Fischer 329 Nov 22, 2022
A LKM rootkit targeting 4.x and 5.x kernel versions which opens a backdoor that can be used to spawn a reverse shell to a remote host and more.

Umbra Umbra (/ˈʌmbrə/) is an experimental LKM rootkit for kernels 4.x and 5.x (up to 5.7) which opens a network backdoor that spawns reverse shells to

Marcos S. Bajo 91 Nov 9, 2022
A cross-platform OpenXR capabilities explorer and runtime switcher with a CLI and GUI.

OpenXR Explorer OpenXR Explorer is a handy debug tool for OpenXR developers. It allows for easy switching between OpenXR runtimes, shows lists of the

Nick Klingensmith 150 Nov 24, 2022
Simple and lightweight pathname parser for C. This module helps to parse dirname, basename, filename and file extension .

Path Module For C File name and extension parsing functionality are removed because it's difficult to distinguish between a hidden dir (ex: .git) and

Prajwal Chapagain 3 Feb 25, 2022
Compile and execute C "scripts" in one go!

c "There isn't much that's special about C. That's one of the reasons why it's fast." I love C for its raw speed (although it does have its drawbacks)

Ryan Jacobs 2k Nov 22, 2022
A shebang-friendly script for "interpreting" single C99, C11, and C++ files, including rcfile support.

c99sh Basic Idea Control Files Shebang Tricks C++ C11 Credits Basic Idea A shebang-friendly script for "interpreting" single C99, C11, and C++ files,

Rhys Ulerich 101 Nov 12, 2022
A tool for use with clang to analyze #includes in C and C++ source files

Include What You Use For more in-depth documentation, see docs. Instructions for Users "Include what you use" means this: for every symbol (type, func

null 3.1k Nov 22, 2022
SMACK Software Verifier and Verification Toolchain

SMACK is both a modular software verification toolchain and a self-contained software verifier. It can be used to verify the assertions in its input p

null 391 Nov 27, 2022
CommonMark spec, with reference implementations in C and JavaScript

CommonMark CommonMark is a rationalized version of Markdown syntax, with a spec and BSD-licensed reference implementations in C and JavaScript. Try it

CommonMark 4.7k Nov 30, 2022