menu.c
changeset 7 49e2fc9fb94f
parent 6 e0cefb3981c8
child 9 d567f430a81d
equal deleted inserted replaced
6:e0cefb3981c8 7:49e2fc9fb94f
    32 static Window root;
    32 static Window root;
    33 static Window win;
    33 static Window win;
    34 static XRectangle rect;
    34 static XRectangle rect;
    35 static Bool done = False;
    35 static Bool done = False;
    36 
    36 
    37 static Item *allitem = 0;	/* first of all items */
    37 static Item *allitem = NULL;	/* first of all items */
    38 static Item *item = 0;	/* first of pattern matching items */
    38 static Item *item = NULL;	/* first of pattern matching items */
    39 static Item *sel = 0;
    39 static Item *sel = NULL;
    40 static Item *nextoff = 0;
    40 static Item *nextoff = NULL;
    41 static Item *prevoff = 0;
    41 static Item *prevoff = NULL;
    42 static Item *curroff = 0;
    42 static Item *curroff = NULL;
    43 
    43 
    44 static int screen;
    44 static int screen;
    45 static char *title = 0;
    45 static char *title = NULL;
    46 static char text[4096];
    46 static char text[4096];
    47 static int ret = 0;
    47 static int ret = 0;
    48 static int nitem = 0;
    48 static int nitem = 0;
    49 static unsigned int cmdw = 0;
    49 static unsigned int cmdw = 0;
    50 static unsigned int twidth = 0;
    50 static unsigned int twidth = 0;
   105 	if(!title || *pattern)
   105 	if(!title || *pattern)
   106 		cmdw = cwidth;
   106 		cmdw = cwidth;
   107 	else
   107 	else
   108 		cmdw = twidth;
   108 		cmdw = twidth;
   109 
   109 
   110 	item = j = 0;
   110 	item = j = NULL;
   111 	nitem = 0;
   111 	nitem = 0;
   112 
   112 
   113 	for(i = allitem; i; i=i->next)
   113 	for(i = allitem; i; i=i->next)
   114 		if(!plen || !strncmp(pattern, i->text, plen)) {
   114 		if(!plen || !strncmp(pattern, i->text, plen)) {
   115 			if(!j)
   115 			if(!j)
   116 				item = i;
   116 				item = i;
   117 			else
   117 			else
   118 				j->right = i;
   118 				j->right = i;
   119 			i->left = j;
   119 			i->left = j;
   120 			i->right = 0;
   120 			i->right = NULL;
   121 			j = i;
   121 			j = i;
   122 			nitem++;
   122 			nitem++;
   123 		}
   123 		}
   124 	for(i = allitem; i; i=i->next)
   124 	for(i = allitem; i; i=i->next)
   125 		if(plen && strncmp(pattern, i->text, plen)
   125 		if(plen && strncmp(pattern, i->text, plen)
   127 			if(!j)
   127 			if(!j)
   128 				item = i;
   128 				item = i;
   129 			else
   129 			else
   130 				j->right = i;
   130 				j->right = i;
   131 			i->left = j;
   131 			i->left = j;
   132 			i->right = 0;
   132 			i->right = NULL;
   133 			j = i;
   133 			j = i;
   134 			nitem++;
   134 			nitem++;
   135 		}
   135 		}
   136 
   136 
   137 	curroff = prevoff = nextoff = sel = item;
   137 	curroff = prevoff = nextoff = sel = item;
   317 }
   317 }
   318 
   318 
   319 static char *
   319 static char *
   320 read_allitems()
   320 read_allitems()
   321 {
   321 {
   322 	static char *maxname = 0;
   322 	static char *maxname = NULL;
   323 	char *p, buf[1024];
   323 	char *p, buf[1024];
   324 	unsigned int len = 0, max = 0;
   324 	unsigned int len = 0, max = 0;
   325 	Item *i, *new;
   325 	Item *i, *new;
   326 
   326 
   327 	i = 0;
   327 	i = 0;
   334 			maxname = p;
   334 			maxname = p;
   335 			max = len;
   335 			max = len;
   336 		}
   336 		}
   337 
   337 
   338 		new = emalloc(sizeof(Item));
   338 		new = emalloc(sizeof(Item));
   339 		new->next = new->left = new->right = 0;
   339 		new->next = new->left = new->right = NULL;
   340 		new->text = p;
   340 		new->text = p;
   341 		if(!i)
   341 		if(!i)
   342 			allitem = new;
   342 			allitem = new;
   343 		else 
   343 		else 
   344 			i->next = new;
   344 			i->next = new;