# st

Unnamed repository; edit this file 'description' to name the repository.

| Log | Files | Refs | README | LICENSE

    commit 6db6980e27bdde6f2d444dd3cdd7a46985fa84fc
    parent c56332857145d1c6741d4f6c1bbc87dcc6c6ab97
    Author: Aurélien Aptel <aurelien.aptel@gmail.com>
    Date:   Sat, 28 Aug 2010 03:18:22 +0200

    st now runs on Linux, OpenBSD and FreeBSD.

    Diffstat:
    MMakefile | 5+++--
    Mconfig.mk | 13+++++++------
    Mst.c | 27++++++++++++++-------------

    3 files changed, 24 insertions(+), 21 deletions(-)
    diff --git a/Makefile b/Makefile
    @@ -10,6 +10,7 @@ all: options st

     options:
     	@echo st build options:
    +	@echo "SYSTEM   = ${SYSTEM}"
     	@echo "CFLAGS   = ${CFLAGS}"
     	@echo "LDFLAGS  = ${LDFLAGS}"
     	@echo "CC       = ${CC}"
    @@ -31,7 +32,7 @@ clean:
     dist: clean
     	@echo creating dist tarball
     	@mkdir -p st-${VERSION}
    -	@cp -R LICENSE Makefile README config.mk st.h ${SRC} st-${VERSION}
    +	@cp -R LICENSE Makefile README config.mk config.h st.info ${SRC} st-${VERSION}
     	@tar -cf st-${VERSION}.tar st-${VERSION}
     	@gzip st-${VERSION}.tar
     	@rm -rf st-${VERSION}
    @@ -41,7 +42,7 @@ install: all
     	@mkdir -p ${DESTDIR}${PREFIX}/bin
     	@cp -f st ${DESTDIR}${PREFIX}/bin
     	@chmod 755 ${DESTDIR}${PREFIX}/bin/st
    -	@tic st.info
    +	@tic -s st.info

     uninstall:
     	@echo removing executable file from ${DESTDIR}${PREFIX}/bin
    diff --git a/config.mk b/config.mk
    @@ -12,16 +12,17 @@ X11LIB = /usr/X11R6/lib

     # includes and libs
     INCS = -I. -I/usr/include -I${X11INC}
    -LIBS = -L/usr/lib -lc -L${X11LIB} -lX11
    +LIBS = -L/usr/lib -lc -L${X11LIB} -lX11 -lutil
    +
    +# uncomment your system #
    +#SYSTEM = -DLINUX
    +#SYSTEM = -DOPENBSD
    +#SYSTEM = -DFREEBSD

     # flags
    -CPPFLAGS = -DVERSION=\"${VERSION}\"
    +CPPFLAGS = -DVERSION=\"${VERSION}\" ${SYSTEM}
     CFLAGS = -std=c99 -pedantic -Wall -Os ${INCS} ${CPPFLAGS}
     LDFLAGS = -s ${LIBS}

    -# Solaris
    -#CFLAGS = -fast ${INCS} -DVERSION=\"${VERSION}\"
    -#LDFLAGS = ${LIBS}
    -
     # compiler and linker
     CC = cc
    diff --git a/st.c b/st.c
    @@ -20,6 +20,14 @@
     #include <X11/keysym.h>
     #include <X11/Xutil.h>

    +#if   defined(LINUX)
    + #include <pty.h>
    +#elif defined(OPENBSD)
    + #include <util.h>
    +#elif defined(FREEBSD)
    + #include <libutil.h>
    +#endif
    +
     /* Arbitrary sizes */
     #define ESC_TITLE_SIZ 256
     #define ESC_BUF_SIZ   256
    @@ -242,19 +250,12 @@ sigchld(int a) {
     void
     ttynew(void) {
     	int m, s;
    -	char *pts;
    -
    -	if((m = posix_openpt(O_RDWR | O_NOCTTY)) < 0)
    -		die("openpt failed: %s\n", SERRNO);
    -	if(grantpt(m) < 0)
    -		die("grantpt failed: %s\n", SERRNO);
    -	if(unlockpt(m) < 0)
    -		die("unlockpt failed: %s\n", SERRNO);
    -	if(!(pts = ptsname(m)))
    -		die("ptsname failed: %s\n", SERRNO);
    -	if((s = open(pts, O_RDWR | O_NOCTTY)) < 0)
    -		die("Couldn't open slave: %s\n", SERRNO);
    -	fcntl(s, F_SETFL, O_NDELAY);
    +
    +	/* seems to work fine on linux, openbsd and freebsd */
    +	struct winsize w = {term.row, term.col, 0, 0};
    +	if(openpty(&m, &s, NULL, NULL, &w) < 0)
    +		die("openpty failed: %s\n", SERRNO);
    +
     	switch(pid = fork()) {
     	case -1:
     		die("fork failed\n");