| 
						
						
						
					 | 
				
				 | 
				
					@ -1,178 +0,0 @@ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					/* See LICENSE for licence details. */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					#define _XOPEN_SOURCE | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					#include <ctype.h> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					#include <errno.h> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					#include <fcntl.h> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					#include <locale.h> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					#include <stdarg.h> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					#include <stdio.h> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					#include <stdlib.h> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					#include <string.h> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					#include <signal.h> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					#include <sys/ioctl.h> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					#include <sys/select.h> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					#include <sys/stat.h> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					#include <sys/types.h> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					#include <sys/wait.h> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					#include <unistd.h> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					#include <X11/Xlib.h> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					#include <X11/keysym.h> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					#include <X11/Xutil.h> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					/* special keys */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					#define KEYDELETE "\033[3~" | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					#define KEYHOME   "\033[1~" | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					#define KEYEND    "\033[4~" | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					#define KEYPREV   "\033[5~" | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					#define KEYNEXT   "\033[6~" | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					#define TNAME "st" | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					#define SHELL "/bin/bash" | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					#define TAB    8 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					#define FONT "fixed" | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					#define BORDER 3 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					#define LINESPACE 1 /* additional pixel between each line */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					/* Default colors */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					#define DefaultFG 7 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					#define DefaultBG 0 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					#define DefaultCS 1 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					#define BellCol   DefaultFG /* visual bell color */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					static char* colorname[] = { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						"black", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						"red", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						"green", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						"yellow", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						"blue", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						"magenta", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						"cyan", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						"white", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					}; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					/* Arbitrary sizes */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					#define ESCSIZ 256 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					#define ESCARG 16 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					#define SERRNO strerror(errno) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					#define MIN(a, b)  ((a) < (b) ? (a) : (b)) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					#define MAX(a, b)  ((a) < (b) ? (b) : (a)) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					#define LEN(a)     (sizeof(a) / sizeof(a[0])) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					#define DEFAULT(a, b)     (a) = (a) ? (a) : (b)     | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					#define BETWEEN(x, a, b)  ((a) <= (x) && (x) <= (b)) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					#define LIMIT(x, a, b)    (x) = (x) < (a) ? (a) : (x) > (b) ? (b) : (x) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					enum { ATnone=0 , ATreverse=1 , ATunderline=2, ATbold=4 }; /* Attribute */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					enum { CSup, CSdown, CSright, CSleft, CShide, CSdraw, CSwrap, CSsave, CSload }; /* Cursor */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					enum { CRset=1 , CRupdate=2 }; /* Character state */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					enum { TMwrap=1 , TMinsert=2, TMaltcharset }; /* Terminal mode */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					enum { SCupdate, SCredraw }; /* screen draw mode */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					typedef int Color; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					typedef struct { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						char c;     /* character code  */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						char mode;  /* attribute flags */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						Color fg;   /* foreground      */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						Color bg;   /* background      */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						char state; /* state flag      */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					} Glyph; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					typedef Glyph* Line; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					typedef struct { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						Glyph attr;  /* current char attributes */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						char hidden; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						int x; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						int y; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					} TCursor; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					/* Escape sequence structs */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					typedef struct { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						char buf[ESCSIZ+1]; /* raw string */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						int len;            /* raw string length */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						/* ESC <pre> [[ [<priv>] <arg> [;]] <mode>] */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						char pre;            | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						char priv; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						int arg[ESCARG+1]; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						int narg;           /* nb of args */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						char mode; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					} Escseq; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					/* Internal representation of the screen */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					typedef struct { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						int row;    /* nb row */   | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						int col;    /* nb col */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						Line* line; /* screen */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						TCursor c;  /* cursor */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						int top;    /* top    scroll limit */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						int bot;    /* bottom scroll limit */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						int mode;   /* terminal mode */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					} Term; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					/* Purely graphic info */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					typedef struct { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						Display* dis; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						Window win; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						int scr; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						int w;  /* window width  */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						int h;  /* window height */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						int ch; /* char height */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						int cw; /* char width  */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					} XWindow;  | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					/* Drawing Context */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					typedef struct { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						unsigned long col[LEN(colorname)]; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						XFontStruct* font; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						GC gc; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					} DC; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					void die(const char *errstr, ...); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					void draw(int); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					void execsh(void); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					void sigchld(int); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					void kpress(XKeyEvent *); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					void resize(XEvent *); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					void run(void); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					int escaddc(char); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					int escfinal(char); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					void escdump(void); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					void eschandle(void); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					void escparse(void); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					void escreset(void); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					void tclearregion(int, int, int, int); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					void tcpos(int); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					void tcursor(int); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					void tdeletechar(int); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					void tdeleteline(int); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					void tdump(void); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					void tinsertblank(int); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					void tinsertblankline(int); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					void tmoveto(int, int); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					void tnew(int, int); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					void tnewline(void); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					void tputc(char); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					void tputs(char*, int); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					void tresize(int, int); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					void tscroll(void); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					void tsetattr(int*, int); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					void tsetchar(char); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					void tsetscroll(int, int); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					void ttynew(void); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					void ttyread(void); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					void ttyresize(int, int); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					void ttywrite(char *, size_t); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					unsigned long xgetcol(const char *); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					void xclear(int, int, int, int); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					void xcursor(int); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					void xdrawc(int, int, Glyph); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					void xinit(void); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					void xscroll(void); |