Index: trunk/Ohana/src/opihi/cmd.data/book.c
===================================================================
--- trunk/Ohana/src/opihi/cmd.data/book.c	(revision 11007)
+++ trunk/Ohana/src/opihi/cmd.data/book.c	(revision 11053)
@@ -2,4 +2,5 @@
 
 int book_list (int argc, char **argv);
+int book_init (int argc, char **argv);
 int book_create (int argc, char **argv);
 int book_delete (int argc, char **argv);
@@ -16,4 +17,5 @@
 static Command book_commands[] = {
   {"list",     book_list,     "list books"},
+  {"init",     book_init,     "initialize a book"},
   {"create",   book_create,   "create a book"},
   {"delete",   book_delete,   "delete a book"},
@@ -36,6 +38,7 @@
     gprint (GP_ERR, "USAGE: book (command)\n");
     gprint (GP_ERR, "    book list             			: list books\n");
-    gprint (GP_ERR, "    book create   (book)   		: create book (name)\n");
-    gprint (GP_ERR, "    book delete   (book)                   : delete book (name)\n");
+    gprint (GP_ERR, "    book init     (book)   		: removes all pages from book\n");
+    gprint (GP_ERR, "    book create   (book)   		: create a book\n");
+    gprint (GP_ERR, "    book delete   (book)                   : delete a book\n");
     gprint (GP_ERR, "    book getbook  (where)  		: get book name\n");
     gprint (GP_ERR, "    book listbook (book)    		: list a book\n");
Index: trunk/Ohana/src/opihi/cmd.data/book_commands.c
===================================================================
--- trunk/Ohana/src/opihi/cmd.data/book_commands.c	(revision 11007)
+++ trunk/Ohana/src/opihi/cmd.data/book_commands.c	(revision 11053)
@@ -2,5 +2,10 @@
 
 int book_list (int argc, char **argv) {
-    ListBooks();
+  if (argc != 1) {
+    gprint (GP_ERR, "USAGE: book list\n");
+    return FALSE;
+  }
+
+  ListBooks();
 }
 
@@ -36,4 +41,24 @@
 }
 
+int book_init (int argc, char **argv) {
+
+  int status;
+  Book *book;
+
+  if (argc != 2) {
+    gprint (GP_ERR, "USAGE: book init (book)\n");
+    return FALSE;
+  }
+
+  book = FindBook (argv[1]);
+  if (book != NULL) {
+      status = DeleteBook (book);
+      if (!status) abort ();
+  }
+
+  CreateBook (argv[1]);
+  return TRUE;
+}
+
 int book_listbook (int argc, char **argv) {
 
@@ -71,10 +96,12 @@
   if (argc != 2) {
     gprint (GP_ERR, "USAGE: book npages (book)\n");
-    return FALSE;
-  }
-
-  book = FindBook (argv[1]);
-  if (book == NULL) {
-    gprint (GP_ERR, "book %s not found\n", argv[1]);
+    FREE (varName);
+    return FALSE;
+  }
+
+  book = FindBook (argv[1]);
+  if (book == NULL) {
+    gprint (GP_ERR, "book %s not found\n", argv[1]);
+    FREE (varName);
     return FALSE;
   }
@@ -85,4 +112,5 @@
     gprint (GP_ERR, "%d pages\n", book[0].Npages);
   }
+  FREE (varName);
   return TRUE;
 }
@@ -103,4 +131,5 @@
   if (argc != 2) {
     gprint (GP_ERR, "USAGE: book getbook (where) [-var var]\n");
+    FREE (varName);
     return FALSE;
   }
@@ -110,4 +139,5 @@
   if (book == NULL) {
     gprint (GP_ERR, "book %s not found\n", argv[1]);
+    FREE (varName);
     return FALSE;
   }
@@ -118,4 +148,5 @@
     gprint (GP_ERR, "%s\n", book[0].name);
   }
+  FREE (varName);
   return TRUE;
 }
@@ -159,10 +190,14 @@
     gprint (GP_ERR, "USAGE: book delpage (book) (page)\n");
     gprint (GP_ERR, "USAGE: book delpage (book) -key name value\n");
-    return FALSE;
-  }
-
-  book = FindBook (argv[1]);
-  if (book == NULL) {
-    gprint (GP_ERR, "book %s not found\n", argv[1]);
+    FREE (Key);
+    FREE (Value);
+    return FALSE;
+  }
+
+  book = FindBook (argv[1]);
+  if (book == NULL) {
+    gprint (GP_ERR, "book %s not found\n", argv[1]);
+    FREE (Key);
+    FREE (Value);
     return FALSE;
   }
@@ -178,4 +213,6 @@
       }
     }
+    FREE (Key);
+    FREE (Value);
     return TRUE;
   }
@@ -184,8 +221,12 @@
   if (page == NULL) {
     gprint (GP_ERR, "page %s in book %s not found\n", argv[2], argv[1]);
+    FREE (Key);
+    FREE (Value);
     return FALSE;
   }
 
   DeletePage (book, page);
+  FREE (Key);
+  FREE (Value);
   return TRUE;
 }
@@ -220,5 +261,5 @@
 
   int where, N;
-  char *varName, *keyName, *keyValue;
+  char *pageName, *varName, *keyName, *keyValue;
   Book *book;
   Page *page;
@@ -231,5 +272,5 @@
   }
 
-  keyName = NULL;
+  keyValue = keyName = NULL;
   if ((N = get_argument (argc, argv, "-key"))) {
     remove_argument (N, &argc, argv);
@@ -242,4 +283,7 @@
   if (argc != 3) {
     gprint (GP_ERR, "USAGE: book getpage (book) (where) [-var var] [-key key value]\n");
+    FREE (varName);
+    FREE (keyName);
+    FREE (keyValue);
     return FALSE;
   }
@@ -250,4 +294,7 @@
   if (book == NULL) {
     gprint (GP_ERR, "book %s not found\n", argv[1]);
+    FREE (varName);
+    FREE (keyName);
+    FREE (keyValue);
     return FALSE;
   }
@@ -259,13 +306,18 @@
   }
   if (page == NULL) {
-    gprint (GP_ERR, "page %s in book %s not found\n", argv[2], argv[1]);
-    return FALSE;
+    pageName = strcreate ("NULL");
+  } else {
+    pageName = strcreate (page[0].name);
   }
 
   if (varName) {
-    set_str_variable (varName, page[0].name);
-  } else {
-    gprint (GP_ERR, "%s\n", page[0].name);
-  }
+    set_str_variable (varName, pageName);
+  } else {
+    gprint (GP_ERR, "%s\n", pageName);
+  }
+  FREE (pageName);
+  FREE (varName);
+  FREE (keyName);
+  FREE (keyValue);
   return TRUE;
 }
@@ -313,10 +365,12 @@
   if (argc != 4) {
     gprint (GP_ERR, "USAGE: book newword (book) (page) (word)\n");
-    return FALSE;
-  }
-
-  book = FindBook (argv[1]);
-  if (book == NULL) {
-    gprint (GP_ERR, "book %s not found\n", argv[1]);
+    FREE (varName);
+    return FALSE;
+  }
+
+  book = FindBook (argv[1]);
+  if (book == NULL) {
+    gprint (GP_ERR, "book %s not found\n", argv[1]);
+    FREE (varName);
     return FALSE;
   }
@@ -325,4 +379,5 @@
   if (page == NULL) {
     gprint (GP_ERR, "page %s in book %s not found\n", argv[2], argv[1]);
+    FREE (varName);
     return FALSE;
   }
@@ -331,4 +386,5 @@
   if (value == NULL) {
     gprint (GP_ERR, "value %s on page %s in book %s not found\n", argv[3], argv[2], argv[1]);
+    FREE (varName);
     return FALSE;
   }
@@ -340,4 +396,5 @@
   }
     
-  return TRUE;
-}
+  FREE (varName);
+  return TRUE;
+}
