Index: trunk/Ohana/src/opihi/cmd.data/queuepop.c
===================================================================
--- trunk/Ohana/src/opihi/cmd.data/queuepop.c	(revision 5995)
+++ trunk/Ohana/src/opihi/cmd.data/queuepop.c	(revision 6249)
@@ -3,7 +3,8 @@
 int queuepop (int argc, char **argv) {
   
-  int N;
+  int N, Key;
   char *var;
   char *line;
+  char *Value;
   Queue *queue;
 
@@ -15,6 +16,16 @@
   }
 
+  Key = -1;
+  if ((N = get_argument (argc, argv, "-key"))) {
+    remove_argument (N, &argc, argv);
+    Key = atoi (argv[N]);
+    remove_argument (N, &argc, argv);
+    Value = strcreate (argv[N]);
+    remove_argument (N, &argc, argv);
+  }
+
+
   if (argc != 2) {
-    fprintf (stderr, "USAGE: queuepop (queue) [-var variable]\n");
+    fprintf (stderr, "USAGE: queuepop (queue) [-var variable] [-key N value]\n");
     return (FALSE);
   }
@@ -27,14 +38,24 @@
   }
 
-  line = PopQueue (queue);
-  if (line == NULL) {
-    fprintf (stderr, "ERROR: queue %s is empty\n", argv[1]);
-    return (FALSE);
+  if (Key == -1) {
+      line = PopQueue (queue);
+  } else {
+      line = PopQueueMatch (queue, Key, Value);
   }
 
-  if (var == (char *) NULL) {
-    fprintf (stderr, "%s\n", line);
+  if (var == NULL) {
+      if (line == NULL) {
+	  fprintf (stderr, "queue %s is empty or match not found\n", argv[1]);
+	  return (FALSE);
+      } else {
+	  fprintf (stderr, "%s\n", line);
+	  return (TRUE);
+      }
+  }
+
+  if (line == NULL) {
+    set_str_variable (var, "NULL");
   } else {
-    set_str_variable (argv[2], line);
+    set_str_variable (var, line);
   }
 
