| 
																	
																	
																		
																			
																		
																	
																	
																 | 
																@ -34,14 +34,16 @@ typedef struct { | 
															
														
														
													
														
															
																 | 
																 | 
																
 | 
																 | 
																 | 
																
 | 
															
														
														
													
														
															
																 | 
																 | 
																typedef struct Item Item; | 
																 | 
																 | 
																typedef struct Item Item; | 
															
														
														
													
														
															
																 | 
																 | 
																struct Item { | 
																 | 
																 | 
																struct Item { | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	char *text; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	Bool matched; | 
															
														
														
													
														
															
																 | 
																 | 
																	Item *next;		/* traverses all items */ | 
																 | 
																 | 
																	Item *next;		/* traverses all items */ | 
															
														
														
													
														
															
																 | 
																 | 
																	Item *left, *right;	/* traverses items matching current search pattern */ | 
																 | 
																 | 
																	Item *left, *right;	/* traverses items matching current search pattern */ | 
															
														
														
													
														
															
																 | 
																 | 
																	char *text; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																}; | 
																 | 
																 | 
																}; | 
															
														
														
													
														
															
																 | 
																 | 
																
 | 
																 | 
																 | 
																
 | 
															
														
														
													
														
															
																 | 
																 | 
																/* forward declarations */ | 
																 | 
																 | 
																/* forward declarations */ | 
															
														
														
													
														
															
																 | 
																 | 
																Item *appenditem(Item *i, Item *last); | 
																 | 
																 | 
																Item *appenditem(Item *i, Item *last); | 
															
														
														
													
														
															
																 | 
																 | 
																void calcoffsets(void); | 
																 | 
																 | 
																void calcoffsets(void); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																char *cistrstr(const char *s, const char *sub); | 
															
														
														
													
														
															
																 | 
																 | 
																void cleanup(void); | 
																 | 
																 | 
																void cleanup(void); | 
															
														
														
													
														
															
																 | 
																 | 
																void drawmenu(void); | 
																 | 
																 | 
																void drawmenu(void); | 
															
														
														
													
														
															
																 | 
																 | 
																void drawtext(const char *text, unsigned long col[ColLast]); | 
																 | 
																 | 
																void drawtext(const char *text, unsigned long col[ColLast]); | 
															
														
														
													
												
													
														
															
																| 
																	
																	
																	
																		
																			
																		
																	
																 | 
																@ -56,7 +58,6 @@ void match(char *pattern); | 
															
														
														
													
														
															
																 | 
																 | 
																void readstdin(void); | 
																 | 
																 | 
																void readstdin(void); | 
															
														
														
													
														
															
																 | 
																 | 
																void run(void); | 
																 | 
																 | 
																void run(void); | 
															
														
														
													
														
															
																 | 
																 | 
																void setup(int x, int y, int w); | 
																 | 
																 | 
																void setup(int x, int y, int w); | 
															
														
														
													
														
															
																 | 
																 | 
																char *cistrstr(const char *s, const char *sub); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																unsigned int textnw(const char *text, unsigned int len); | 
																 | 
																 | 
																unsigned int textnw(const char *text, unsigned int len); | 
															
														
														
													
														
															
																 | 
																 | 
																unsigned int textw(const char *text); | 
																 | 
																 | 
																unsigned int textw(const char *text); | 
															
														
														
													
														
															
																 | 
																 | 
																
 | 
																 | 
																 | 
																
 | 
															
														
														
													
												
													
														
															
																| 
																	
																		
																			
																		
																	
																	
																		
																			
																		
																	
																	
																 | 
																@ -130,6 +131,29 @@ calcoffsets(void) { | 
															
														
														
													
														
															
																 | 
																 | 
																	} | 
																 | 
																 | 
																	} | 
															
														
														
													
														
															
																 | 
																 | 
																} | 
																 | 
																 | 
																} | 
															
														
														
													
														
															
																 | 
																 | 
																
 | 
																 | 
																 | 
																
 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																char * | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																cistrstr(const char *s, const char *sub) { | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	int c, csub; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	unsigned int len; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																
 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	if(!sub) | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																		return (char *)s; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	if((c = *sub++) != 0) { | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																		c = tolower(c); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																		len = strlen(sub); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																		do { | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																			do { | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																				if((csub = *s++) == 0) | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																					return (NULL); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																			} | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																			while(tolower(csub) != c); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																		} | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																		while(strncasecmp(s, sub, len) != 0); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																		s--; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	} | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	return (char *)s; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																} | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																
 | 
															
														
														
													
														
															
																 | 
																 | 
																void | 
																 | 
																 | 
																void | 
															
														
														
													
														
															
																 | 
																 | 
																cleanup(void) { | 
																 | 
																 | 
																cleanup(void) { | 
															
														
														
													
														
															
																 | 
																 | 
																	Item *itm; | 
																 | 
																 | 
																	Item *itm; | 
															
														
														
													
												
													
														
															
																| 
																	
																		
																			
																		
																	
																	
																		
																			
																		
																	
																	
																 | 
																@ -505,8 +529,10 @@ match(char *pattern) { | 
															
														
														
													
														
															
																 | 
																 | 
																	item = j = NULL; | 
																 | 
																 | 
																	item = j = NULL; | 
															
														
														
													
														
															
																 | 
																 | 
																	nitem = 0; | 
																 | 
																 | 
																	nitem = 0; | 
															
														
														
													
														
															
																 | 
																 | 
																	for(i = allitems; i; i = i->next) | 
																 | 
																 | 
																	for(i = allitems; i; i = i->next) | 
															
														
														
													
														
															
																 | 
																 | 
																		if(!fstrncmp(pattern, i->text, plen) | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																				|| fstrstr(i->text, pattern)) | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																		if((i->matched = !fstrncmp(pattern, i->text, plen))) | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																			j = appenditem(i, j); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	for(i = allitems; i; i = i->next) | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																		if(!i->matched && fstrstr(i->text, pattern)) | 
															
														
														
													
														
															
																 | 
																 | 
																			j = appenditem(i, j); | 
																 | 
																 | 
																			j = appenditem(i, j); | 
															
														
														
													
														
															
																 | 
																 | 
																	curr = prev = next = sel = item; | 
																 | 
																 | 
																	curr = prev = next = sel = item; | 
															
														
														
													
														
															
																 | 
																 | 
																	calcoffsets(); | 
																 | 
																 | 
																	calcoffsets(); | 
															
														
														
													
												
													
														
															
																| 
																	
																		
																			
																		
																	
																	
																		
																			
																		
																	
																	
																 | 
																@ -587,6 +613,12 @@ setup(int x, int y, int w) { | 
															
														
														
													
														
															
																 | 
																 | 
																	wa.event_mask = ExposureMask | ButtonPressMask | KeyPressMask; | 
																 | 
																 | 
																	wa.event_mask = ExposureMask | ButtonPressMask | KeyPressMask; | 
															
														
														
													
														
															
																 | 
																 | 
																	mw = w ? w : DisplayWidth(dpy, screen); | 
																 | 
																 | 
																	mw = w ? w : DisplayWidth(dpy, screen); | 
															
														
														
													
														
															
																 | 
																 | 
																	mh = dc.font.height + 2; | 
																 | 
																 | 
																	mh = dc.font.height + 2; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	if(y < 0) { | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																		if(y == (int)(unsigned int)-1) | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																			y = DisplayHeight(dpy, screen) - mh; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																		else | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																			y = (-1 * y) - mh; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	} | 
															
														
														
													
														
															
																 | 
																 | 
																	win = XCreateWindow(dpy, root, x, y, mw, mh, 0, | 
																 | 
																 | 
																	win = XCreateWindow(dpy, root, x, y, mw, mh, 0, | 
															
														
														
													
														
															
																 | 
																 | 
																			DefaultDepth(dpy, screen), CopyFromParent, | 
																 | 
																 | 
																			DefaultDepth(dpy, screen), CopyFromParent, | 
															
														
														
													
														
															
																 | 
																 | 
																			DefaultVisual(dpy, screen), | 
																 | 
																 | 
																			DefaultVisual(dpy, screen), | 
															
														
														
													
												
													
														
															
																| 
																	
																	
																	
																		
																			
																		
																	
																 | 
																@ -611,29 +643,6 @@ setup(int x, int y, int w) { | 
															
														
														
													
														
															
																 | 
																 | 
																	XMapRaised(dpy, win); | 
																 | 
																 | 
																	XMapRaised(dpy, win); | 
															
														
														
													
														
															
																 | 
																 | 
																} | 
																 | 
																 | 
																} | 
															
														
														
													
														
															
																 | 
																 | 
																
 | 
																 | 
																 | 
																
 | 
															
														
														
													
														
															
																 | 
																 | 
																char * | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																cistrstr(const char *s, const char *sub) { | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																	int c, csub; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																	unsigned int len; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
 | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																	if(!sub) | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																		return (char *)s; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																	if((c = *sub++) != 0) { | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																		c = tolower(c); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																		len = strlen(sub); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																		do { | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																			do { | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																				if((csub = *s++) == 0) | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																					return (NULL); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																			} | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																			while(tolower(csub) != c); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																		} | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																		while(strncasecmp(s, sub, len) != 0); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																		s--; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																	} | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																	return (char *)s; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																} | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
 | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																unsigned int | 
																 | 
																 | 
																unsigned int | 
															
														
														
													
														
															
																 | 
																 | 
																textnw(const char *text, unsigned int len) { | 
																 | 
																 | 
																textnw(const char *text, unsigned int len) { | 
															
														
														
													
														
															
																 | 
																 | 
																	XRectangle r; | 
																 | 
																 | 
																	XRectangle r; | 
															
														
														
													
												
													
														
															
																| 
																	
																		
																			
																		
																	
																	
																		
																			
																		
																	
																	
																 | 
																@ -683,7 +692,12 @@ main(int argc, char *argv[]) { | 
															
														
														
													
														
															
																 | 
																 | 
																			if(++i < argc) x = atoi(argv[i]); | 
																 | 
																 | 
																			if(++i < argc) x = atoi(argv[i]); | 
															
														
														
													
														
															
																 | 
																 | 
																		} | 
																 | 
																 | 
																		} | 
															
														
														
													
														
															
																 | 
																 | 
																		else if(!strcmp(argv[i], "-y")) { | 
																 | 
																 | 
																		else if(!strcmp(argv[i], "-y")) { | 
															
														
														
													
														
															
																 | 
																 | 
																			if(++i < argc) y = atoi(argv[i]); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																			if(++i < argc) { | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																				if(!strcmp(argv[i], "-0")) | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																					y = (int)(unsigned int)-1; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																				else | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																					y = atoi(argv[i]); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																			} | 
															
														
														
													
														
															
																 | 
																 | 
																		} | 
																 | 
																 | 
																		} | 
															
														
														
													
														
															
																 | 
																 | 
																		else if(!strcmp(argv[i], "-w")) { | 
																 | 
																 | 
																		else if(!strcmp(argv[i], "-w")) { | 
															
														
														
													
														
															
																 | 
																 | 
																			if(++i < argc) w = atoi(argv[i]); | 
																 | 
																 | 
																			if(++i < argc) w = atoi(argv[i]); | 
															
														
														
													
												
													
														
															
																| 
																	
																		
																			
																		
																	
																	
																	
																 | 
																
  |