| 
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -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"); | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
				
				 | 
				
					
  |