Index: trunk/include/regfi.h
===================================================================
--- trunk/include/regfi.h	(revision 206)
+++ trunk/include/regfi.h	(revision 207)
@@ -963,4 +963,34 @@
 
 
+/** Retrieves number of subkeys referenced by this key.
+ *
+ * Number of subkeyss in key structure and subkey list structure could differ,
+ * so this provides a standard/sane way of determining the number.
+ *
+ * @param key  the key whose number of subkeys is desired
+ *
+ * @return Returns the number of subkeys referenced by this key.
+ *
+ * @ingroup regfiBase
+ */
+_EXPORT
+uint32_t regfi_fetch_num_subkeys(const REGFI_NK* key);
+
+
+/** Retrieves number of values referenced by this key.
+ *
+ * Number of values in key structure and value list structure could differ,
+ * so this provides a standard/sane way of determining the number.
+ *
+ * @param key  the key whose number of values is desired
+ *
+ * @return Returns the number of values referenced by this key.
+ *
+ * @ingroup regfiBase
+ */
+_EXPORT
+uint32_t regfi_fetch_num_values(const REGFI_NK* key);
+
+
 /** Retrieves classname for a given key.
  *
@@ -1004,4 +1034,73 @@
 const REGFI_DATA* regfi_fetch_data(REGFI_FILE* file,
 				   const REGFI_VK* value);
+
+
+/** Locates a specific subkey of a given key.
+ *
+ * @param file  the file from which key is derived
+ * @param key   the key whose subkey is desired
+ * @param name  name of the desired subkey
+ * @param index a return value: the index of the desired subkey.
+ *              undefined on error
+ *
+ * @return true if the subkey is found, false if an error occurred or if the
+ *         specified name could not be found. If an error occurs, messages
+ *         will be written explaining the issue. (See regfi_log_get_str.)
+ *
+ * @ingroup regfiBase
+ */
+_EXPORT
+bool regfi_find_subkey(REGFI_FILE* file, const REGFI_NK* key, 
+		       const char* name, uint32_t* index);
+
+
+/** Locates a specific value of a given key.
+ *
+ * @param file  the file from which key is derived
+ * @param key   the key whose value is desired
+ * @param name  name of the desired value
+ * @param index a return value: the index of the desired value.  
+ *              undefined on error
+ *
+ * @return true if the value is found, false if an error occurred or if the
+ *         specified name could not be found. If an error occurs, messages
+ *         will be written explaining the issue. (See regfi_log_get_str.)
+ *
+ * @ingroup regfiBase
+ */
+_EXPORT
+bool regfi_find_value(REGFI_FILE* file, const REGFI_NK* key,
+		      const char* name, uint32_t* index);
+
+
+/** Retrieves a specific subkey of a given key.
+ *
+ * @param file  the file from which key is derived
+ * @param key   the key whose subkey is desired
+ * @param index the index of the desired subkey
+ *
+ * @return the requested subkey or NULL on error.
+ *
+ * @ingroup regfiBase
+ */
+_EXPORT
+const REGFI_NK* regfi_get_subkey(REGFI_FILE* file, const REGFI_NK* key, 
+				 uint32_t index);
+
+
+/** Retrieves a specific value of a given key.
+ *
+ * @param file  the file from which key is derived
+ * @param key   the key whose value is desired
+ * @param index the index of the desired value
+ *
+ * @return the requested value or NULL on error.
+ *
+ * @ingroup regfiBase
+ */
+_EXPORT
+const REGFI_VK* regfi_get_value(REGFI_FILE* file, const REGFI_NK* key, 
+				uint32_t index);
+
 
 
@@ -1166,6 +1265,6 @@
 /** Searches for a subkey with a given name under the current key.
  *
- * @param i           the iterator
- * @param subkey_name subkey name to search for
+ * @param i     the iterator
+ * @param name  subkey name to search for
  *
  * @return True if such a subkey was found, false otherwise.  If a subkey is
@@ -1176,5 +1275,5 @@
  */
 _EXPORT
-bool regfi_iterator_find_subkey(REGFI_ITERATOR* i, const char* subkey_name);
+bool regfi_iterator_find_subkey(REGFI_ITERATOR* i, const char* name);
 
 
@@ -1220,6 +1319,6 @@
 /** Searches for a value with a given name under the current key.
  *
- * @param i          the iterator
- * @param value_name value name to search for
+ * @param i     the iterator
+ * @param name  value name to search for
  *
  * @return True if such a value was found, false otherwise.  If a value is 
@@ -1230,6 +1329,5 @@
  */
 _EXPORT
-bool regfi_iterator_find_value(REGFI_ITERATOR* i, 
-			       const char* value_name);
+bool regfi_iterator_find_value(REGFI_ITERATOR* i, const char* name);
 
 
