st now runs on Linux, OpenBSD and FreeBSD.
authorAurélien Aptel <aurelien.aptel@gmail.com>
Sat, 28 Aug 2010 01:18:22 +0000 (03:18 +0200)
committerAurélien Aptel <aurelien.aptel@gmail.com>
Sat, 28 Aug 2010 01:18:22 +0000 (03:18 +0200)
Makefile
config.mk
st.c

index 9ec8d21..ef3bf09 100644 (file)
--- 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
index 2827e98..216e7df 100644 (file)
--- 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
index 623ca29..9ca032f 100644 (file)
--- a/st.c
+++ b/st.c
 #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");