@ -123,6 +123,7 @@ enum escape_state {  
															
														 
														
													
														
															
																 
																 
																	ESC_STR 	=  4 ,  /* DSC, OSC, PM, APC */   
																 
																 
																	ESC_STR 	=  4 ,  /* DSC, OSC, PM, APC */   
															
														 
														
													
														
															
																 
																 
																	ESC_ALTCHARSET  =  8 ,   
																 
																 
																	ESC_ALTCHARSET  =  8 ,   
															
														 
														
													
														
															
																 
																 
																	ESC_STR_END     =  16 ,  /* a final string was encountered */   
																 
																 
																	ESC_STR_END     =  16 ,  /* a final string was encountered */   
															
														 
														
													
														
															
																 
																 
																 
																 
																 
																	ESC_TEST        =  32 ,  /* Enter in test mode */   
															
														 
														
													
														
															
																 
																 
																} ;  
																 
																 
																} ;  
															
														 
														
													
														
															
																 
																 
																
  
																 
																 
																
  
															
														 
														
													
														
															
																 
																 
																enum  window_state  {  
																 
																 
																enum  window_state  {  
															
														 
														
													
												
													
														
															
																
																	
																		
																			 
																		 
																	
																	
																		
																			 
																		 
																	
																	
																 
																@ -289,7 +290,7 @@ static int tresize(int, int);  
															
														 
														
													
														
															
																 
																 
																static  void  tscrollup ( int ,  int ) ;  
																 
																 
																static  void  tscrollup ( int ,  int ) ;  
															
														 
														
													
														
															
																 
																 
																static  void  tscrolldown ( int ,  int ) ;  
																 
																 
																static  void  tscrolldown ( int ,  int ) ;  
															
														 
														
													
														
															
																 
																 
																static  void  tsetattr ( int * ,  int ) ;  
																 
																 
																static  void  tsetattr ( int * ,  int ) ;  
															
														 
														
													
														
															
																 
																 
																static  void  tsetchar ( char * ) ;  
																 
																 
																 
															
														 
														
													
														
															
																 
																 
																 
																 
																 
																static  void  tsetchar ( char   * ,  Glyph  * ,  int ,  int ) ;  
															
														 
														
													
														
															
																 
																 
																static  void  tsetscroll ( int ,  int ) ;  
																 
																 
																static  void  tsetscroll ( int ,  int ) ;  
															
														 
														
													
														
															
																 
																 
																static  void  tswapscreen ( void ) ;  
																 
																 
																static  void  tswapscreen ( void ) ;  
															
														 
														
													
														
															
																 
																 
																static  void  tsetdirt ( int ,  int ) ;  
																 
																 
																static  void  tsetdirt ( int ,  int ) ;  
															
														 
														
													
												
													
														
															
																
																	
																		
																			 
																		 
																	
																	
																		
																			 
																		 
																	
																	
																 
																@ -1182,7 +1183,7 @@ tmoveto(int x, int y) {  
															
														 
														
													
														
															
																 
																 
																}  
																 
																 
																}  
															
														 
														
													
														
															
																 
																 
																
  
																 
																 
																
  
															
														 
														
													
														
															
																 
																 
																void  
																 
																 
																void  
															
														 
														
													
														
															
																 
																 
																tsetchar ( char  * c )  {  
																 
																 
																 
															
														 
														
													
														
															
																 
																 
																 
																 
																 
																tsetchar ( char  * c ,  Glyph  * attr ,  int  x ,  int  y )  {  
															
														 
														
													
														
															
																 
																 
																	static  char  * vt100_0 [ 62 ]  =  {  /* 0x41 - 0x7e */   
																 
																 
																	static  char  * vt100_0 [ 62 ]  =  {  /* 0x41 - 0x7e */   
															
														 
														
													
														
															
																 
																 
																		" ↑ " ,  " ↓ " ,  " → " ,  " ← " ,  " █ " ,  " ▚ " ,  " ☃ " ,  /* A - G */   
																 
																 
																		" ↑ " ,  " ↓ " ,  " → " ,  " ← " ,  " █ " ,  " ▚ " ,  " ☃ " ,  /* A - G */   
															
														 
														
													
														
															
																 
																 
																		0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  /* H - O */   
																 
																 
																		0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  /* H - O */   
															
														 
														
													
												
													
														
															
																
																	
																	
																	
																		
																			 
																		 
																	
																 
																@ -1197,17 +1198,17 @@ tsetchar(char *c) {  
															
														 
														
													
														
															
																 
																 
																	/*   
																 
																 
																	/*   
															
														 
														
													
														
															
																 
																 
																	 *  The  table  is  proudly  stolen  from  rxvt .   
																 
																 
																	 *  The  table  is  proudly  stolen  from  rxvt .   
															
														 
														
													
														
															
																 
																 
																	 */   
																 
																 
																	 */   
															
														 
														
													
														
															
																 
																 
																	if ( term . c . attr . mode  &  ATTR_GFX )  {   
																 
																 
																 
															
														 
														
													
														
															
																 
																 
																 
																 
																 
																	if ( attr - > mode  &  ATTR_GFX )  {   
															
														 
														
													
														
															
																 
																 
																		if ( c [ 0 ]  > =  0x41  & &  c [ 0 ]  < =  0x7e   
																 
																 
																		if ( c [ 0 ]  > =  0x41  & &  c [ 0 ]  < =  0x7e   
															
														 
														
													
														
															
																 
																 
																				& &  vt100_0 [ c [ 0 ]  -  0x41 ] )  {   
																 
																 
																				& &  vt100_0 [ c [ 0 ]  -  0x41 ] )  {   
															
														 
														
													
														
															
																 
																 
																			c  =  vt100_0 [ c [ 0 ]  -  0x41 ] ;   
																 
																 
																			c  =  vt100_0 [ c [ 0 ]  -  0x41 ] ;   
															
														 
														
													
														
															
																 
																 
																		}   
																 
																 
																		}   
															
														 
														
													
														
															
																 
																 
																	}   
																 
																 
																	}   
															
														 
														
													
														
															
																 
																 
																
  
																 
																 
																
  
															
														 
														
													
														
															
																 
																 
																	term . dirty [ term . c . y ]  =  1 ;   
																 
																 
																 
															
														 
														
													
														
															
																 
																 
																	term . line [ term . c . y ] [ term . c . x ]  =  term . c . attr ;   
																 
																 
																 
															
														 
														
													
														
															
																 
																 
																	memcpy ( term . line [ term . c . y ] [ term . c . x ] . c ,  c ,  UTF_SIZ ) ;   
																 
																 
																 
															
														 
														
													
														
															
																 
																 
																	term . line [ term . c . y ] [ term . c . x ] . state  | =  GLYPH_SET ;   
																 
																 
																 
															
														 
														
													
														
															
																 
																 
																 
																 
																 
																	term . dirty [ y ]  =  1 ;   
															
														 
														
													
														
															
																 
																 
																 
																 
																 
																	term . line [ y ] [ x ]  =  * attr ;   
															
														 
														
													
														
															
																 
																 
																 
																 
																 
																	memcpy ( term . line [ y ] [ x ] . c ,  c ,  UTF_SIZ ) ;   
															
														 
														
													
														
															
																 
																 
																 
																 
																 
																	term . line [ y ] [ x ] . state  | =  GLYPH_SET ;   
															
														 
														
													
														
															
																 
																 
																}  
																 
																 
																}  
															
														 
														
													
														
															
																 
																 
																
  
																 
																 
																
  
															
														 
														
													
														
															
																 
																 
																void  
																 
																 
																void  
															
														 
														
													
												
													
														
															
																
																	
																		
																			 
																		 
																	
																	
																		
																			 
																		 
																	
																	
																 
																@ -1893,11 +1894,25 @@ tputc(char *c, int len) {  
															
														 
														
													
														
															
																 
																 
																				fprintf ( stderr ,  " esc unhandled charset: ESC ( %c \n " ,  ascii ) ;   
																 
																 
																				fprintf ( stderr ,  " esc unhandled charset: ESC ( %c \n " ,  ascii ) ;   
															
														 
														
													
														
															
																 
																 
																			}   
																 
																 
																			}   
															
														 
														
													
														
															
																 
																 
																			term . esc  =  0 ;   
																 
																 
																			term . esc  =  0 ;   
															
														 
														
													
														
															
																 
																 
																 
																 
																 
																		}  else  if ( term . esc  &  ESC_TEST )  {   
															
														 
														
													
														
															
																 
																 
																 
																 
																 
																			if ( ascii  = =  ' 8 ' )  {  /* DEC screen alignment test. */   
															
														 
														
													
														
															
																 
																 
																 
																 
																 
																				char  E [ UTF_SIZ ]  =  " E " ;   
															
														 
														
													
														
															
																 
																 
																 
																 
																 
																				int  x ,  y ;   
															
														 
														
													
														
															
																 
																 
																 
																 
																 
																
  
															
														 
														
													
														
															
																 
																 
																 
																 
																 
																				for ( x  =  0 ;  x  <  term . col ;  + + x )  {   
															
														 
														
													
														
															
																 
																 
																 
																 
																 
																					for ( y  =  0 ;  y  <  term . row ;  + + y )   
															
														 
														
													
														
															
																 
																 
																 
																 
																 
																						tsetchar ( E ,  & term . c . attr ,  x ,  y ) ;   
															
														 
														
													
														
															
																 
																 
																 
																 
																 
																				}   
															
														 
														
													
														
															
																 
																 
																 
																 
																 
																			}   
															
														 
														
													
														
															
																 
																 
																 
																 
																 
																			term . esc  =  0 ;   
															
														 
														
													
														
															
																 
																 
																		}  else  {   
																 
																 
																		}  else  {   
															
														 
														
													
														
															
																 
																 
																			switch ( ascii )  {   
																 
																 
																			switch ( ascii )  {   
															
														 
														
													
														
															
																 
																 
																			case  ' [ ' :   
																 
																 
																			case  ' [ ' :   
															
														 
														
													
														
															
																 
																 
																				term . esc  | =  ESC_CSI ;   
																 
																 
																				term . esc  | =  ESC_CSI ;   
															
														 
														
													
														
															
																 
																 
																				break ;   
																 
																 
																				break ;   
															
														 
														
													
														
															
																 
																 
																 
																 
																 
																			case  ' # ' :   
															
														 
														
													
														
															
																 
																 
																 
																 
																 
																				term . esc  | =  ESC_TEST ;   
															
														 
														
													
														
															
																 
																 
																 
																 
																 
																				break ;   
															
														 
														
													
														
															
																 
																 
																			case  ' P ' :  /* DCS -- Device Control String */   
																 
																 
																			case  ' P ' :  /* DCS -- Device Control String */   
															
														 
														
													
														
															
																 
																 
																			case  ' _ ' :  /* APC -- Application Program Command */   
																 
																 
																			case  ' _ ' :  /* APC -- Application Program Command */   
															
														 
														
													
														
															
																 
																 
																			case  ' ^ ' :  /* PM -- Privacy Message */   
																 
																 
																			case  ' ^ ' :  /* PM -- Privacy Message */   
															
														 
														
													
												
													
														
															
																
																	
																		
																			 
																		 
																	
																	
																		
																			 
																		 
																	
																	
																 
																@ -1988,7 +2003,7 @@ tputc(char *c, int len) {  
															
														 
														
													
														
															
																 
																 
																		sel . bx  =  - 1 ;   
																 
																 
																		sel . bx  =  - 1 ;   
															
														 
														
													
														
															
																 
																 
																	if ( IS_SET ( MODE_WRAP )  & &  term . c . state  &  CURSOR_WRAPNEXT )   
																 
																 
																	if ( IS_SET ( MODE_WRAP )  & &  term . c . state  &  CURSOR_WRAPNEXT )   
															
														 
														
													
														
															
																 
																 
																		tnewline ( 1 ) ;  /* always go to first col */   
																 
																 
																		tnewline ( 1 ) ;  /* always go to first col */   
															
														 
														
													
														
															
																 
																 
																	tsetchar ( c ) ;   
																 
																 
																 
															
														 
														
													
														
															
																 
																 
																 
																 
																 
																	tsetchar ( c ,  & term . c . attr ,  term . c . x ,  term . c . y ) ;   
															
														 
														
													
														
															
																 
																 
																	if ( term . c . x + 1  <  term . col )   
																 
																 
																	if ( term . c . x + 1  <  term . col )   
															
														 
														
													
														
															
																 
																 
																		tmoveto ( term . c . x + 1 ,  term . c . y ) ;   
																 
																 
																		tmoveto ( term . c . x + 1 ,  term . c . y ) ;   
															
														 
														
													
														
															
																 
																 
																	else   
																 
																 
																	else