@ -164,7 +164,7 @@ typedef struct {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						int  col ; 	/* nb col */   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						Line *  line ; 	/* screen */   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						Line *  alt ; 	/* alternate screen */   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						bool *  dirty ;   /* dirtyness of lines */   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						bool *  dirty ; 	 /* dirtyness of lines */   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						TCursor  c ; 	/* cursor */   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						int  top ; 	/* top    scroll limit */   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						int  bot ; 	/* bottom scroll limit */   
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				
					@ -172,6 +172,7 @@ typedef struct {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						int  esc ; 	/* escape state flags */   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						char  title [ ESC_TITLE_SIZ ] ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						int  titlelen ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						bool  * tabs ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					}  Term ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					/* Purely graphic info */  
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				
					@ -847,12 +848,16 @@ tcursor(int mode) {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					void  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					treset ( void )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						unsigned  i ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						term . c  =  ( TCursor ) { {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							. mode  =  ATTR_NULL ,   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							. fg  =  DefaultFG ,   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							. bg  =  DefaultBG   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						} ,  . x  =  0 ,  . y  =  0 ,  . state  =  CURSOR_DEFAULT } ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						memset ( term . tabs ,  0 ,  term . col  *  sizeof ( * term . tabs ) ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						for  ( i  =  TAB ;  i  <  term . col ;  i  + =  TAB )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							term . tabs [ i ]  =  1 ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						term . top  =  0 ,  term . bot  =  term . row  -  1 ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						term . mode  =  MODE_WRAP ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						tclearregion ( 0 ,  0 ,  term . col - 1 ,  term . row - 1 ) ;   
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				
					@ -865,12 +870,14 @@ tnew(int col, int row) {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						term . line  =  malloc ( term . row  *  sizeof ( Line ) ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						term . alt   =  malloc ( term . row  *  sizeof ( Line ) ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						term . dirty  =  malloc ( term . row  *  sizeof ( * term . dirty ) ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						term . tabs  =  malloc ( term . col  *  sizeof ( * term . tabs ) ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						for ( row  =  0 ;  row  <  term . row ;  row + + )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							term . line [ row ]  =  malloc ( term . col  *  sizeof ( Glyph ) ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							term . alt  [ row ]  =  malloc ( term . col  *  sizeof ( Glyph ) ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							term . dirty [ row ]  =  0 ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						}   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						memset ( term . tabs ,  0 ,  term . col  *  sizeof ( * term . tabs ) ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						/* setup screen */   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						treset ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					}  
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				
					@ -1588,6 +1595,7 @@ tresize(int col, int row) {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						term . line  =  realloc ( term . line ,  row  *  sizeof ( Line ) ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						term . alt   =  realloc ( term . alt ,   row  *  sizeof ( Line ) ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						term . dirty  =  realloc ( term . dirty ,  row  *  sizeof ( * term . dirty ) ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						term . tabs  =  realloc ( term . tabs ,  col  *  sizeof ( * term . tabs ) ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						/* resize each row to new width, zero-pad if needed */   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						for ( i  =  0 ;  i  <  minrow ;  i + + )  {   
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				
					@ -1606,7 +1614,15 @@ tresize(int col, int row) {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							term . line [ i ]  =  calloc ( col ,  sizeof ( Glyph ) ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							term . alt  [ i ]  =  calloc ( col ,  sizeof ( Glyph ) ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						}   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						if  ( col  >  term . col )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							bool  * bp  =  term . tabs  +  term . col ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							memset ( bp ,  0 ,  sizeof ( * term . tabs )  *  ( col  -  term . col ) ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							while  ( - - bp  >  term . tabs  & &  ! * bp )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
								/* nothing */  ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							for  ( bp  + =  TAB ;  bp  <  term . tabs  +  col ;  bp  + =  TAB )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
								* bp  =  1 ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						}   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						/* update terminal size */   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						term . col  =  col ,  term . row  =  row ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						/* make use of the LIMIT in tmoveto */