| 
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -37,7 +37,7 @@ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					enum { ATnone=0 , ATreverse=1 , ATunderline=2, ATbold=4 }; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					enum { CSup, CSdown, CSright, CSleft, CShide, CSdraw, CSwrap, CSsave, CSload }; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					enum { CRset=1, CRupdate=2 }; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					enum { TMwrap=1, TMinsert=2, TMaltcharset }; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					enum { TMwrap=1, TMinsert=2 }; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					enum { SCupdate, SCredraw }; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					typedef int Color; | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -154,6 +154,7 @@ void xdrawc(int, int, Glyph); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					void xinit(void); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					void xscroll(void); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					void cursor(int); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					/* Globals */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					DC dc; | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -201,7 +202,6 @@ sigchld(int a) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							exit(EXIT_FAILURE); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					void | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					ttynew(void) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						int m, s; | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -328,21 +328,19 @@ void | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					tscroll(void) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						Line temp = term.line[term.top]; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						int i; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						/* X stuff _before_ the line swapping (results in wrong line index) */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						xscroll(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						for(i = term.top; i < term.bot; i++) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							term.line[i] = term.line[i+1]; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						memset(temp, 0, sizeof(Glyph) * term.col); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						term.line[term.bot] = temp; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						xscroll();	   | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					void | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					tnewline(void) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						int y = term.c.y + 1; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						if(y > term.bot) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						if(y > term.bot) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							tscroll(), y = term.bot; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						tmoveto(0, y); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -476,6 +474,13 @@ tinsertblank(int n) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						tclearregion(src, term.c.y, dst, term.c.y); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					void | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					tsetlinestate(int n, int state) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						int i; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						for(i = 0; i < term.col; i++) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							term.line[n][i].state |= state; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					void | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					tinsertblankline (int n) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						int i; | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -497,10 +502,11 @@ tinsertblankline (int n) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							term.line[i-n] = blank; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							/* blank it */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							memset(blank, 0, term.col * sizeof(Glyph)); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							tsetlinestate(i, CRupdate); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							tsetlinestate(i-n, CRupdate); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					void | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					tdeleteline(int n) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						int i; | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -522,6 +528,8 @@ tdeleteline(int n) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							term.line[i+n] = blank; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							/* blank it */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							memset(blank, 0, term.col * sizeof(Glyph)); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							tsetlinestate(i, CRupdate); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							tsetlinestate(i-n, CRupdate); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -529,48 +537,48 @@ void | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					tsetattr(int *attr, int l) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						int i; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							for(i = 0; i < l; i++) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								switch(attr[i]) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								case 0: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									memset(&term.c.attr, 0, sizeof(term.c.attr)); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									term.c.attr.fg = DefaultFG; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									term.c.attr.bg = DefaultBG; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									break; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								case 1: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									term.c.attr.mode |= ATbold;	  | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									break; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								case 4:  | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									term.c.attr.mode |= ATunderline; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									break; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								case 7:  | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									term.c.attr.mode |= ATreverse;	 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									break; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								case 8: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									term.c.hidden = CShide; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									break; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								case 22:  | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									term.c.attr.mode &= ~ATbold;   | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									break; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								case 24:  | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									term.c.attr.mode &= ~ATunderline; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									break; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								case 27:  | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									term.c.attr.mode &= ~ATreverse;	  | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									break; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								case 39: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									term.c.attr.fg = DefaultFG; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									break; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								case 49: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									term.c.attr.fg = DefaultBG; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									break; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								default: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									if(BETWEEN(attr[i], 30, 37)) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
										term.c.attr.fg = attr[i] - 30; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									else if(BETWEEN(attr[i], 40, 47)) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
										term.c.attr.bg = attr[i] - 40; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									break; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						for(i = 0; i < l; i++) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							switch(attr[i]) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							case 0: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								memset(&term.c.attr, 0, sizeof(term.c.attr)); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								term.c.attr.fg = DefaultFG; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								term.c.attr.bg = DefaultBG; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								break; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							case 1: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								term.c.attr.mode |= ATbold;	  | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								break; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							case 4:  | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								term.c.attr.mode |= ATunderline; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								break; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							case 7:  | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								term.c.attr.mode |= ATreverse;	 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								break; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							case 8: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								term.c.hidden = CShide; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								break; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							case 22:  | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								term.c.attr.mode &= ~ATbold;   | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								break; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							case 24:  | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								term.c.attr.mode &= ~ATunderline; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								break; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							case 27:  | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								term.c.attr.mode &= ~ATreverse;	  | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								break; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							case 39: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								term.c.attr.fg = DefaultFG; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								break; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							case 49: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								term.c.attr.fg = DefaultBG; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								break; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							default: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								if(BETWEEN(attr[i], 30, 37)) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									term.c.attr.fg = attr[i] - 30; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								else if(BETWEEN(attr[i], 40, 47)) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									term.c.attr.bg = attr[i] - 40; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								break; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					void | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -588,9 +596,8 @@ tsetscroll(int t, int b) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						term.bot = b;	  | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					void | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					eschandle(void) {  | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					eschandle(void) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						switch(escseq.pre) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						default: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							goto unknown_seq; | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -846,7 +853,6 @@ xgetcol(const char *s) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						return color.pixel; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					void | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					xclear(int x1, int y1, int x2, int y2) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						XClearArea(xw.dis, xw.win,  | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -855,7 +861,6 @@ xclear(int x1, int y1, int x2, int y2) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								False); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					void | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					xscroll(void) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						int srcy = (term.top+1) * xw.ch; | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -867,9 +872,6 @@ xscroll(void) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						xclear(0, term.bot, term.col-1, term.bot); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					void | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					xinit(void) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						XGCValues values; | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -963,14 +965,15 @@ xcursor(int mode) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						/* remove the old cursor */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						if(term.line[oldy][oldx].state & CRset) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							xdrawc(oldx, oldy, term.line[oldy][oldx]); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						else xclear(oldx, oldy, oldx, oldy); /* XXX: maybe a bug */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						if(mode == CSdraw && !term.c.hidden) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						else  | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							xclear(oldx, oldy, oldx, oldy); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						/* draw the new one */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						if(mode == CSdraw) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							xdrawc(term.c.x, term.c.y, g); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							oldx = term.c.x, oldy = term.c.y; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					void | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					draw(int redraw_all) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						int x, y; | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -978,14 +981,18 @@ draw(int redraw_all) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						if(redraw_all) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							XClearWindow(xw.dis, xw.win); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						/* XXX: drawing could be optimised */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						for(y = 0; y < term.row; y++) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							for(x = 0; x < term.col; x++) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								changed = term.line[y][x].state & CRupdate; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								set = term.line[y][x].state & CRset; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								if((changed && set) || (redraw_all && set)) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								if(redraw_all || changed) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									term.line[y][x].state &= ~CRupdate; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									xdrawc(x, y, term.line[y][x]); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									if(set) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
										xdrawc(x, y, term.line[y][x]); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									else | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
										xclear(x, y, x, y); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						} | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
				
				 | 
				
					
  |