Index: /trunk/Ohana/src/opihi/cmd.basic/list.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.basic/list.c	(revision 40652)
+++ /trunk/Ohana/src/opihi/cmd.basic/list.c	(revision 40653)
@@ -8,4 +8,5 @@
 int GlobToList (char *listname, char *Glob, int EXCEL_STYLE);
 int CommandToList (char *listname, char *Command, int EXCEL_STYLE);
+int FileToList (char *listname, char *Filename, int EXCEL_STYLE);
 
 int list (int argc, char **argv) {
@@ -31,4 +32,11 @@
     remove_argument (N, &argc, argv);
     Glob = strcreate (argv[N]);
+    remove_argument (N, &argc, argv);
+  }
+
+  char *Filename = NULL;
+  if ((N = get_argument (argc, argv, "-file"))) {
+    remove_argument (N, &argc, argv);
+    Filename = strcreate (argv[N]);
     remove_argument (N, &argc, argv);
   }
@@ -80,4 +88,13 @@
     }
     int status = GlobToList (argv[1], Glob, EXCEL_STYLE); // <-- generate the list
+    return status;
+  }
+
+  if (Filename) {
+    if (argc != 2) {
+      gprint (GP_ERR, "USAGE: list (root) -file (filename)\n");
+      return (FALSE);
+    }
+    int status = FileToList (argv[1], Filename, EXCEL_STYLE); // <-- generate the list
     return status;
   }
@@ -384,4 +401,25 @@
 }
 
+int FileToList (char *listname, char *Filename, int EXCEL_STYLE) {
+
+  char line[MAX_LINE_LENGTH], varname[MAX_LINE_LENGTH];
+
+  FILE *f = fopen (Filename, "r");
+  if (!f) {
+    gprint (GP_ERR, "cannot open file %s for list\n", Filename);
+    return FALSE;
+  }
+
+  int Nline = 0;
+  while (scan_line_maxlen (f, line, MAX_LINE_LENGTH) != EOF) {
+    set_list_varname (varname, listname, Nline, EXCEL_STYLE);
+    set_str_variable (varname, line);
+    Nline ++;
+  }
+  snprintf (varname, MAX_LINE_LENGTH, "%s:n", listname);
+  set_int_variable (varname, Nline);
+  return TRUE;
+}
+
 int SplitByCharToList (int argc, char **argv, int EXCEL_STYLE) {
 
