st now runs on Linux, OpenBSD and FreeBSD. - st - Simple Terminal
       
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 6db6980e27bdde6f2d444dd3cdd7a46985fa84fc
 (DIR) parent c56332857145d1c6741d4f6c1bbc87dcc6c6ab97
 (HTM) 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:
         Makefile                            |       5 +++--
         config.mk                           |      13 +++++++------
         st.c                                |      27 ++++++++++++++-------------
       
       3 files changed, 24 insertions(+), 21 deletions(-)
       ---
 (DIR) 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
 (DIR) 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
 (DIR) 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
        tttynew(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");