+/* append buf into text */
+static int
+append(char *text, char *buf, size_t textsize, size_t buflen)
+{
+ size_t textlen;
+
+ textlen = strlen(text);
+ if (iscntrl(*buf))
+ return 0;
+ if (textlen + buflen > textsize - 1)
+ return 0;
+ if (buflen < 1)
+ return 0;
+ memcpy(text + textlen, buf, buflen);
+ text[textlen + buflen] = '\0';
+ return 1;
+}
+
+/* get item in menu matching text */
+static struct Item *
+matchitem(struct Menu *menu, char *text)
+{
+ struct Item *item;
+ char *s;
+ size_t textlen;
+
+ textlen = strlen(text);
+ for (item = menu->list; item; item = item->next)
+ for (s = item->label; s && *s; s++)
+ if (strncasecmp(s, text, textlen) == 0)
+ return item;
+ return NULL;
+}
+