st now runs on Linux, OpenBSD and FreeBSD.
parent
c563328571
commit
6db6980e27
5
Makefile
5
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
|
||||
|
|
13
config.mk
13
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
|
||||
|
|
25
st.c
25
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");
|
||||
|
|
Reference in New Issue