Index: /releases/0.99.0/SConstruct
===================================================================
--- /releases/0.99.0/SConstruct	(revision 241)
+++ /releases/0.99.0/SConstruct	(revision 242)
@@ -67,4 +67,12 @@
                "python3 pyregfi-distutils.py install | tee pyregfi3-install.log")
 
+# API documentation
+regfi_doc = env.Command('doc/devel/regfi/index.html', 
+                        Glob('lib/*.c')+Glob('include/*.h')+['doc/devel/Doxyfile.regfi'],
+                        'doxygen doc/devel/Doxyfile.regfi')
+pyregfi_doc = env.Command('doc/devel/pyregfi/index.html', 
+                          Glob('python/pyregfi/*.py')+['doc/devel/Doxyfile.pyregfi', regfi_doc],
+                          'doxygen doc/devel/Doxyfile.pyregfi')
+
 
 # User Friendly Targets
@@ -74,4 +82,5 @@
 env.Alias('bin', [reglookup_recover, reglookup])
 env.Alias('doc', [man_reglookup,man_reglookup_recover,man_reglookup_timeline])
+env.Alias('doc-devel', [regfi_doc, pyregfi_doc])
 env.Alias('install', install_items)
 
Index: /releases/0.99.0/include/regfi.h
===================================================================
--- /releases/0.99.0/include/regfi.h	(revision 241)
+++ /releases/0.99.0/include/regfi.h	(revision 242)
@@ -85,7 +85,7 @@
 #endif
 #ifdef REGFI_WIN32
-#define _EXPORT __declspec(dllexport)
+#define _EXPORT() __declspec(dllexport)
 #else
-#define _EXPORT __attribute__((visibility("default")))
+#define _EXPORT() __attribute__((visibility("default")))
 #endif
 
@@ -729,5 +729,5 @@
  * registry hive as well as file header (REGF block) data.  This structure 
  * also stores a list of warnings and error messages generated while parsing
- * the registry hive.  These can be tuned using @ref regfi_set_message_mask.  
+ * the registry hive.  These can be tuned using @ref regfi_log_set_mask.  
  * Messages may be retrieved using @ref regfi_log_get_str.
  *
@@ -880,4 +880,5 @@
 
 
+
 /** Returns the current regfi library version
  *
@@ -886,5 +887,5 @@
  * @ingroup regfiBase
  */
-_EXPORT
+_EXPORT()
 const char* regfi_version();
 
@@ -900,5 +901,5 @@
  * @ingroup regfiBase
  */
-_EXPORT
+_EXPORT()
 REGFI_FILE* regfi_alloc(int fd, REGFI_ENCODING output_encoding);
 
@@ -916,5 +917,5 @@
  * @ingroup regfiBase
  */
-_EXPORT
+_EXPORT()
 REGFI_FILE* regfi_alloc_cb(REGFI_RAW_FILE* file_cb,
 			   REGFI_ENCODING output_encoding);
@@ -927,5 +928,5 @@
  * @ingroup regfiBase
  */
-_EXPORT
+_EXPORT()
 void regfi_free(REGFI_FILE* file);
 
@@ -938,5 +939,5 @@
  * @ingroup regfiBase
  */
-_EXPORT
+_EXPORT()
 char* regfi_log_get_str();
 
@@ -968,5 +969,5 @@
  * @ingroup regfiBase
  */
-_EXPORT
+_EXPORT()
 bool regfi_log_set_mask(uint16_t mask);
 
@@ -979,5 +980,5 @@
  * @ingroup regfiBase
  */
-_EXPORT
+_EXPORT()
 const REGFI_NK*       regfi_get_rootkey(REGFI_FILE* file);
 
@@ -998,5 +999,5 @@
  * @ingroup regfiBase
  */
-_EXPORT
+_EXPORT()
 void regfi_free_record(REGFI_FILE* file, const void* record);
 
@@ -1019,5 +1020,5 @@
  * @ingroup regfiBase
  */
-_EXPORT
+_EXPORT()
 bool regfi_reference_record(REGFI_FILE* file, const void* record);
 
@@ -1034,5 +1035,5 @@
  * @ingroup regfiBase
  */
-_EXPORT
+_EXPORT()
 uint32_t regfi_fetch_num_subkeys(const REGFI_NK* key);
 
@@ -1049,5 +1050,5 @@
  * @ingroup regfiBase
  */
-_EXPORT
+_EXPORT()
 uint32_t regfi_fetch_num_values(const REGFI_NK* key);
 
@@ -1063,5 +1064,5 @@
  * @ingroup regfiBase
  */
-_EXPORT
+_EXPORT()
 const REGFI_CLASSNAME* regfi_fetch_classname(REGFI_FILE* file, 
 					     const REGFI_NK* key);
@@ -1077,5 +1078,5 @@
  * @ingroup regfiBase
  */
-_EXPORT
+_EXPORT()
 const REGFI_SK* regfi_fetch_sk(REGFI_FILE* file, const REGFI_NK* key);
 
@@ -1091,5 +1092,5 @@
  * @ingroup regfiBase
  */
-_EXPORT
+_EXPORT()
 const REGFI_DATA* regfi_fetch_data(REGFI_FILE* file,
 				   const REGFI_VK* value);
@@ -1110,5 +1111,5 @@
  * @ingroup regfiBase
  */
-_EXPORT
+_EXPORT()
 bool regfi_find_subkey(REGFI_FILE* file, const REGFI_NK* key, 
 		       const char* name, uint32_t* index);
@@ -1129,5 +1130,5 @@
  * @ingroup regfiBase
  */
-_EXPORT
+_EXPORT()
 bool regfi_find_value(REGFI_FILE* file, const REGFI_NK* key,
 		      const char* name, uint32_t* index);
@@ -1144,5 +1145,5 @@
  * @ingroup regfiBase
  */
-_EXPORT
+_EXPORT()
 const REGFI_NK* regfi_get_subkey(REGFI_FILE* file, const REGFI_NK* key, 
 				 uint32_t index);
@@ -1159,5 +1160,5 @@
  * @ingroup regfiBase
  */
-_EXPORT
+_EXPORT()
 const REGFI_VK* regfi_get_value(REGFI_FILE* file, const REGFI_NK* key, 
 				uint32_t index);
@@ -1174,5 +1175,5 @@
  * @ingroup regfiBase
  */
-_EXPORT
+_EXPORT()
 const REGFI_NK* regfi_get_parentkey(REGFI_FILE* file, const REGFI_NK* key);
 
@@ -1205,5 +1206,5 @@
  * @ingroup regfiIteratorLayer
  */
-_EXPORT
+_EXPORT()
 REGFI_ITERATOR* regfi_iterator_new(REGFI_FILE* file);
 
@@ -1217,5 +1218,5 @@
  * @ingroup regfiIteratorLayer
  */
-_EXPORT
+_EXPORT()
 void regfi_iterator_free(REGFI_ITERATOR* i);
 
@@ -1234,5 +1235,5 @@
  * @ingroup regfiIteratorLayer
  */
-_EXPORT
+_EXPORT()
 bool regfi_iterator_down(REGFI_ITERATOR* i);
 
@@ -1247,5 +1248,5 @@
  * @ingroup regfiIteratorLayer
  */
-_EXPORT
+_EXPORT()
 bool regfi_iterator_up(REGFI_ITERATOR* i);
 
@@ -1259,5 +1260,5 @@
  * @ingroup regfiIteratorLayer
  */
-_EXPORT
+_EXPORT()
 bool regfi_iterator_to_root(REGFI_ITERATOR* i);
 
@@ -1281,5 +1282,5 @@
  * @ingroup regfiIteratorLayer
  */
-_EXPORT
+_EXPORT()
 bool regfi_iterator_walk_path(REGFI_ITERATOR* i, const char** path);
 
@@ -1294,5 +1295,5 @@
  * @ingroup regfiIteratorLayer
  */
-_EXPORT
+_EXPORT()
 const REGFI_NK* regfi_iterator_cur_key(REGFI_ITERATOR* i);
 
@@ -1307,5 +1308,5 @@
  * @ingroup regfiIteratorLayer
  */
-_EXPORT
+_EXPORT()
 bool regfi_iterator_first_subkey(REGFI_ITERATOR* i);
 
@@ -1321,5 +1322,5 @@
  * @ingroup regfiIteratorLayer
  */
-_EXPORT
+_EXPORT()
 const REGFI_NK* regfi_iterator_cur_subkey(REGFI_ITERATOR* i);
 
@@ -1333,5 +1334,5 @@
  * @ingroup regfiIteratorLayer
  */
-_EXPORT
+_EXPORT()
 bool regfi_iterator_next_subkey(REGFI_ITERATOR* i);
 
@@ -1348,5 +1349,5 @@
  * @ingroup regfiIteratorLayer
  */
-_EXPORT
+_EXPORT()
 bool regfi_iterator_find_subkey(REGFI_ITERATOR* i, const char* name);
 
@@ -1361,5 +1362,5 @@
  * @ingroup regfiIteratorLayer
  */
-_EXPORT
+_EXPORT()
 bool regfi_iterator_first_value(REGFI_ITERATOR* i);
 
@@ -1375,5 +1376,5 @@
  * @ingroup regfiIteratorLayer
  */
-_EXPORT
+_EXPORT()
 const REGFI_VK* regfi_iterator_cur_value(REGFI_ITERATOR* i);
 
@@ -1387,5 +1388,5 @@
  * @ingroup regfiIteratorLayer
  */
-_EXPORT
+_EXPORT()
 bool regfi_iterator_next_value(REGFI_ITERATOR* i);
 
@@ -1402,5 +1403,5 @@
  * @ingroup regfiIteratorLayer
  */
-_EXPORT
+_EXPORT()
 bool regfi_iterator_find_value(REGFI_ITERATOR* i, const char* name);
 
@@ -1418,5 +1419,5 @@
  * @ingroup regfiGlueLayer
  */
-_EXPORT
+_EXPORT()
 REGFI_NK* regfi_load_key(REGFI_FILE* file, uint32_t offset, 
                          REGFI_ENCODING output_encoding, 
@@ -1430,5 +1431,5 @@
  * @ingroup regfiGlueLayer
  */
-_EXPORT
+_EXPORT()
 REGFI_VK* regfi_load_value(REGFI_FILE* file, uint32_t offset, 
 			       REGFI_ENCODING output_encoding, 
@@ -1442,5 +1443,5 @@
  * @ingroup regfiGlueLayer
  */
-_EXPORT
+_EXPORT()
 REGFI_SUBKEY_LIST* regfi_load_subkeylist(REGFI_FILE* file, uint32_t offset,
 					 uint32_t num_keys, uint32_t max_size,
@@ -1454,5 +1455,5 @@
  * @ingroup regfiGlueLayer
  */
-_EXPORT
+_EXPORT()
 REGFI_VALUE_LIST* regfi_load_valuelist(REGFI_FILE* file, uint32_t offset, 
 				       uint32_t num_values, uint32_t max_size,
@@ -1467,5 +1468,5 @@
  * @ingroup regfiGlueLayer
  */
-_EXPORT
+_EXPORT()
 REGFI_BUFFER regfi_load_data(REGFI_FILE* file, uint32_t voffset,
 			     uint32_t length, bool data_in_offset,
@@ -1479,5 +1480,5 @@
  * @ingroup regfiGlueLayer
  */
-_EXPORT
+_EXPORT()
 REGFI_BUFFER regfi_load_big_data(REGFI_FILE* file, uint32_t offset, 
 				 uint32_t data_length,uint32_t cell_length,
@@ -1493,5 +1494,5 @@
  * @ingroup regfiGlueLayer
  */
-_EXPORT
+_EXPORT()
 bool regfi_interpret_data(REGFI_FILE* file, 
 			  REGFI_ENCODING string_encoding,
@@ -1508,5 +1509,5 @@
  * @ingroup regfiGlueLayer
  */
-_EXPORT
+_EXPORT()
 const REGFI_SK* regfi_load_sk(REGFI_FILE* file, uint32_t offset,
 				  bool strict);
@@ -1521,5 +1522,5 @@
  * @ingroup regfiGlueLayer
  */
-_EXPORT
+_EXPORT()
 const REGFI_HBIN* regfi_lookup_hbin(REGFI_FILE* file, uint32_t offset);
 
@@ -1532,8 +1533,8 @@
 /******************************************************************************/
 
-_EXPORT
+_EXPORT()
 REGFI_FILE* regfi_parse_regf(REGFI_RAW_FILE* file_cb, bool strict);
 
-_EXPORT
+_EXPORT()
 REGFI_HBIN* regfi_parse_hbin(REGFI_FILE* file, uint32_t offset, 
 			     bool strict);
@@ -1552,5 +1553,5 @@
  * @ingroup regfiParseLayer
  */
-_EXPORT
+_EXPORT()
 REGFI_NK* regfi_parse_nk(REGFI_FILE* file, uint32_t offset,
 			     uint32_t max_size, bool strict);
@@ -1563,5 +1564,5 @@
  * @ingroup regfiParseLayer
  */
-_EXPORT
+_EXPORT()
 REGFI_SUBKEY_LIST* regfi_parse_subkeylist(REGFI_FILE* file, uint32_t offset,
 					  uint32_t max_size, bool strict);
@@ -1574,5 +1575,5 @@
  * @ingroup regfiParseLayer
  */
-_EXPORT
+_EXPORT()
 REGFI_VK* regfi_parse_vk(REGFI_FILE* file, uint32_t offset, 
 			     uint32_t max_size, bool strict);
@@ -1585,5 +1586,5 @@
  * @ingroup regfiParseLayer
  */
-_EXPORT
+_EXPORT()
 REGFI_SK* regfi_parse_sk(REGFI_FILE* file, uint32_t offset, 
 			     uint32_t max_size, bool strict);
@@ -1599,5 +1600,5 @@
  * @ingroup regfiParseLayer
  */
-_EXPORT
+_EXPORT()
 range_list* regfi_parse_unalloc_cells(REGFI_FILE* file);
 
@@ -1609,5 +1610,5 @@
  * @ingroup regfiParseLayer
  */
-_EXPORT
+_EXPORT()
 bool regfi_parse_cell(REGFI_RAW_FILE* file_cb, uint32_t offset,
 		      uint8_t* hdr, uint32_t hdr_len,
@@ -1621,5 +1622,5 @@
  * @ingroup regfiParseLayer
  */
-_EXPORT
+_EXPORT()
 uint8_t* regfi_parse_classname(REGFI_FILE* file, uint32_t offset,
 			       uint16_t* name_length, 
@@ -1633,5 +1634,5 @@
  * @ingroup regfiParseLayer
  */
-_EXPORT
+_EXPORT()
 REGFI_BUFFER regfi_parse_data(REGFI_FILE* file, uint32_t offset,
 			      uint32_t length, bool strict);
@@ -1645,5 +1646,5 @@
  * @ingroup regfiParseLayer
  */
-_EXPORT
+_EXPORT()
 REGFI_BUFFER regfi_parse_little_data(REGFI_FILE* file, uint32_t voffset, 
 				     uint32_t length, bool strict);
@@ -1657,23 +1658,23 @@
 ssize_t               regfi_raw_read(REGFI_RAW_FILE* self, 
 				     void* buf, size_t count);
-_EXPORT
+_EXPORT()
 uint64_t              regfi_seek(REGFI_RAW_FILE* file_cb, 
 				 uint64_t offset, int whence);
-_EXPORT
+_EXPORT()
 uint32_t              regfi_read(REGFI_RAW_FILE* file_cb, 
 				 uint8_t* buf, uint32_t* length);
 
-_EXPORT
+_EXPORT()
 const char*           regfi_type_val2str(unsigned int val);
-_EXPORT
+_EXPORT()
 int                   regfi_type_str2val(const char* str);
 
-_EXPORT
+_EXPORT()
 char*                 regfi_get_sacl(WINSEC_DESC* sec_desc);
-_EXPORT
+_EXPORT()
 char*                 regfi_get_dacl(WINSEC_DESC* sec_desc);
-_EXPORT
+_EXPORT()
 char*                 regfi_get_owner(WINSEC_DESC* sec_desc);
-_EXPORT
+_EXPORT()
 char*                 regfi_get_group(WINSEC_DESC* sec_desc);
 
@@ -1688,5 +1689,5 @@
 REGFI_NK*             regfi_copy_nk(const REGFI_NK* nk);
 REGFI_VK*             regfi_copy_vk(const REGFI_VK* vk);
-_EXPORT
+_EXPORT()
 int32_t               regfi_calc_maxsize(REGFI_FILE* file, uint32_t offset);
 int32_t               regfi_conv_charset(const char* input_charset, 
@@ -1694,22 +1695,22 @@
 					 uint8_t* input, char* output, 
 					 uint32_t input_len, uint32_t output_max);
-_EXPORT
+_EXPORT()
 REGFI_DATA*           regfi_buffer_to_data(REGFI_BUFFER raw_data);
 
 /* XXX: move to base API and document */
-_EXPORT
+_EXPORT()
 void                  regfi_unix2nt_time(REGFI_NTTIME* nt, time_t t);
-_EXPORT
+_EXPORT()
 double                regfi_nt2unix_time(const REGFI_NTTIME* nt);
 
 
-_EXPORT
+_EXPORT()
 void regfi_interpret_keyname(REGFI_FILE* file, REGFI_NK* nk, 
 			     REGFI_ENCODING output_encoding, bool strict);
-_EXPORT
+_EXPORT()
 void regfi_interpret_valuename(REGFI_FILE* file, REGFI_VK* vk, 
 			       REGFI_ENCODING output_encoding, bool strict);
 
-_EXPORT
+_EXPORT()
 void regfi_init();
 
