<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -36,12 +36,14 @@ DBIRecord := Object clone do(
 		self _map := Map clone
 	)
 
+	//doc DBIRecord with(aMap) Returns a new DBIRecord instance for the given value map.
 	with := method(aMap,
 		obj := self clone
 		obj _map := aMap
 		obj
 	)
 
+	//doc DBIRecord forward Private method that implements getting and setting values.
 	forward := method(
 		m := call message
 </diff>
      <filename>addons/DBI/io/DBIRecord.io</filename>
    </modified>
    <modified>
      <diff>@@ -80,17 +80,15 @@ void IoDBI_free(IoDBI *self)
 
 IoObject *IoDBI_version(IoDBI *self, IoObject *locals, IoMessage *m)
 {
-	/*#io
-	docSlot(&quot;version&quot;, &quot;Return string version of libdbi being used&quot;)
-	*/
+	//doc DBI version Return string version of libdbi being used.
+	
 	return IOSYMBOL(dbi_version());
 }
 
 IoObject *IoDBI_init(IoDBI *self, IoObject *locals, IoMessage *m)
 {
-	/*#io
-	docSlot(&quot;init&quot;, &quot;Initialize the DBI environment with the default driver path&quot;)
-	*/
+	//doc DBI init Initialize the DBI environment with the default driver path.
+	
 	DATA(self)-&gt;driverCount = dbi_initialize(NULL);
 	if (DATA(self)-&gt;driverCount == -1)
 	{
@@ -107,9 +105,8 @@ IoObject *IoDBI_init(IoDBI *self, IoObject *locals, IoMessage *m)
 IoObject *IoDBI_initWithDriversPath(IoDBI *self, IoObject *locals,
 			IoMessage *m)
 {
-	/*#io
-	docSlot(&quot;initWithDriversPath&quot;, &quot;Initialize the DBI environment with the
-	specified libdbi driver path&quot;)
+	/*doc DBI initWithDriversPath 
+	Initialize the DBI environment with the specified libdbi driver path.
 	*/
 	IoObject *dir = IoMessage_locals_valueArgAt_(m, locals, 0);
 
@@ -137,8 +134,8 @@ IoObject *IoDBI_initWithDriversPath(IoDBI *self, IoObject *locals,
 
 IoObject *IoDBI_drivers(IoDBI *self, IoObject *locals, IoMessage *m)
 {
-	/*#io
-	docSlot(&quot;drivers&quot;, &quot;Get a list of drivers and it's associated information:
+	/*doc DBI drivers
+	Get a list of drivers and it's associated information:
 
 	&lt;ol&gt;
 		&lt;li&gt;name&lt;/li&gt;
@@ -148,7 +145,7 @@ IoObject *IoDBI_drivers(IoDBI *self, IoObject *locals, IoMessage *m)
 		&lt;li&gt;date compiled&lt;/li&gt;
 		&lt;li&gt;maintainer&lt;/li&gt;
 		&lt;li&gt;url&lt;/li&gt;
-	&lt;/ol&gt;&quot;)
+	&lt;/ol&gt;
 	*/
 	IoList *list = IOREF(IoList_new(IOSTATE));
 	dbi_driver driver = NULL;
@@ -172,9 +169,8 @@ IoObject *IoDBI_drivers(IoDBI *self, IoObject *locals, IoMessage *m)
 
 IoObject *IoDBI_with(IoDBI *self, IoObject *locals, IoMessage *m)
 {
-	/*#io
-		docSlot(&quot;with(driverName)&quot;, &quot;Get a new connection with the given driver&quot;)
-	*/
+	//doc DBI with(driverName) Get a new connection with the given driver.
+	
 	IoObject *name = IoMessage_locals_valueArgAt_(m, locals, 0);
 	if (!ISSYMBOL(name))
 	{</diff>
      <filename>addons/DBI/source/IoDBI.c</filename>
    </modified>
    <modified>
      <diff>@@ -93,19 +93,16 @@ IoDBIConn *IoDBIConn_new(void *state, dbi_conn conn)
 
 IoObject *IoDBIConn_driver(IoDBIConn *self, IoObject *locals, IoMessage *m)
 {
-	/*#io
-	docSlot(&quot;driver&quot;, &quot;Return database driver name.&quot;)
-	*/
+	//doc DBIConn driver Return database driver name.
+	
 	dbi_driver d = dbi_conn_get_driver(DATA(self)-&gt;conn);
 	return IOSYMBOL(dbi_driver_get_name(d));
 }
 
 IoObject *IoDBIConn_optionPut(IoDBIConn *self, IoObject *locals, IoMessage *m)
 {
-	/*#io
-	docSlot(&quot;optionPut(key,value)&quot;, &quot;Add an option key, value pair to the
-connection.&quot;)
-	*/
+	//doc DBIConn optionPut(key,value) Add an option key, value pair to the connection.
+
 	IoObject *key = IoMessage_locals_valueArgAt_(m, locals, 0);
 	IoObject *val = IoMessage_locals_valueArgAt_(m, locals, 1);
 
@@ -135,9 +132,8 @@ connection.&quot;)
 
 IoObject *IoDBIConn_option(IoDBIConn *self, IoObject *locals, IoMessage *m)
 {
-	/*#io
-	docSlot(&quot;option(key)&quot;, &quot;Retrieve an option value for the connection.&quot;)
-	*/
+	//doc DBIConn option(key) Retrieve an option value for the connection.
+	
 	IoObject *key = IoMessage_locals_valueArgAt_(m, locals, 0);
 	if (!ISSYMBOL(key))
 	{
@@ -153,9 +149,8 @@ IoObject *IoDBIConn_option(IoDBIConn *self, IoObject *locals, IoMessage *m)
 IoObject *IoDBIConn_options(IoDBIConn *self, IoObject *locals,
 			IoMessage *m)
 {
-	/*#io
-	docSlot(&quot;options&quot;, &quot;Retrieve an option list of the connection.&quot;)
-	*/
+	//doc DBIConn options Retrieve an option list of the connection.
+	
 	IoList *list = IOREF(IoList_new(IOSTATE));
 	const char *option = NULL;
 
@@ -170,9 +165,8 @@ IoObject *IoDBIConn_options(IoDBIConn *self, IoObject *locals,
 IoObject *IoDBIConn_optionsClear(IoDBIConn *self, IoObject *locals,
 			IoMessage *m)
 {
-	/*#io
-	docSlot(&quot;optionsClear&quot;, &quot;Clear all options associated with the connection&quot;)
-	*/
+	//doc DBIConn optionsClear Clear all options associated with the connection
+	
 	dbi_conn_clear_options(DATA(self)-&gt;conn);
 	return IONIL(self);
 }
@@ -180,11 +174,10 @@ IoObject *IoDBIConn_optionsClear(IoDBIConn *self, IoObject *locals,
 IoObject *IoDBIConn_optionClear(IoDBIConn *self, IoObject *locals,
 			IoMessage *m)
 {
-	/*#io
-	docSlot(&quot;optionClear(key)&quot;, &quot;Clear a specific option associated with the
-connection&quot;)
-	*/
+	//doc DBIConn optionClear(key) Clear a specific option associated with the connection.
+
 	IoObject *key = IoMessage_locals_valueArgAt_(m, locals, 0);
+	
 	if (!ISSYMBOL(key))
 	{
 		IoState_error_(IOSTATE, m,
@@ -199,9 +192,8 @@ connection&quot;)
 
 IoObject *IoDBIConn_connect(IoDBIConn *self, IoObject *locals, IoMessage *m)
 {
-	/*#io
-	docSlot(&quot;connect&quot;, &quot;Connect to the database server&quot;)
-	*/
+	//doc DBIConn connect Connect to the database server.
+	
 	if (0 != dbi_conn_connect(DATA(self)-&gt;conn))
 	{
 		ReportDBIError(DATA(self)-&gt;conn, IOSTATE, m);
@@ -212,9 +204,8 @@ IoObject *IoDBIConn_connect(IoDBIConn *self, IoObject *locals, IoMessage *m)
 
 IoObject *IoDBIConn_close(IoDBIConn *self, IoObject *locals, IoMessage *m)
 {
-	/*#io
-	docSlot(&quot;close&quot;, &quot;Close the connection to the database&quot;)
-	*/
+	//doc DBIConn close Close the connection to the database.
+	
 	if (DATA(self)-&gt;conn) dbi_conn_close(DATA(self)-&gt;conn);
 	DATA(self)-&gt;conn = NULL;
 	return IONIL(self);
@@ -222,19 +213,20 @@ IoObject *IoDBIConn_close(IoDBIConn *self, IoObject *locals, IoMessage *m)
 
 IoObject *IoDBIConn_ping(IoDBIConn *self, IoObject *locals, IoMessage *m)
 {
-	/*#io
-	docSlot(&quot;ping&quot;, &quot;Ping the database to see if it's alive. Will return
-true if it is, otherwise false.&quot;)
+	/*doc DBIConn ping 
+	Ping the database to see if it's alive. 
+	Will return true if it is, otherwise false.
 	*/
+	
 	return IOBOOL(self, dbi_conn_ping(DATA(self)-&gt;conn) == 1);
 }
 
 IoObject *IoDBIConn_quote(IoDBIConn *self, IoObject *locals, IoMessage *m)
 {
-	/*#io
-	docSlot(&quot;quote(value)&quot;, &quot;Quote a string value according to the database
-server's specifications&quot;)
+	/*doc DBIConn quote(value)
+	Quote a string value according to the database server's specifications.
 	*/
+	
 	char *value = NULL, *v2;
 	size_t newLen;
 	IoObject *ret;
@@ -268,13 +260,14 @@ server's specifications&quot;)
 
 IoObject *IoDBIConn_query(IoDBIConn *self, IoObject *locals, IoMessage *m)
 {
-	/*#io
-	docSlot(&quot;query(sql_query)&quot;, &quot;Perform a database query returning a DBIResult
-object&quot;)
+	/*doc DBIConn query(sql_query)
+	Perform a database query returning a DBIResult object.
 	*/
+	
 	dbi_result result;
 
 	IoObject *sql = IoMessage_locals_valueArgAt_(m, locals, 0);
+	
 	if (!ISSYMBOL(sql))
 	{
 		IoState_error_(IOSTATE, m,
@@ -283,9 +276,11 @@ object&quot;)
 	}
 
 	result = dbi_conn_query(DATA(self)-&gt;conn, CSTRING(sql));
+	
 	if (result == NULL)
 	{
 		const char *error;
+		
 		int errorCode = dbi_conn_error(DATA(self)-&gt;conn, &amp;error);
 
 		IoState_error_(IOSTATE, m, &quot;Could not perform query '%s' &quot;
@@ -297,10 +292,11 @@ object&quot;)
 
 IoObject *IoDBIConn_execute(IoDBIConn *self, IoObject *locals, IoMessage *m)
 {
-	/*#io
-	docSlot(&quot;execute(sql_query)&quot;, &quot;Perform a database query that expects no
-results. Returns the number of rows affected.&quot;)
+	/*doc DBIConn execute(sql_query)
+	Perform a database query that expects no results. 
+	Returns the number of rows affected.
 	*/
+	
 	dbi_result result;
 	unsigned long long affectedRows = 0;
 
@@ -332,10 +328,12 @@ results. Returns the number of rows affected.&quot;)
 IoObject *IoDBIConn_lastSequence(IoDBIConn *self, IoObject *locals,
 			IoMessage *m)
 {
-	/*#io
-	docSlot(&quot;sequenceLast([name])&quot;, &quot;Return the last inserted sequence value.&quot;)
+	/*doc DBIConn sequenceLast([name])
+	Return the last inserted sequence value.
 	*/
+	
 	char *name = NULL;
+	
 	if (IoMessage_argCount(m) == 1)
 	{
 		IoObject *nameArg = IoMessage_locals_valueArgAt_(m, locals, 0);
@@ -357,11 +355,12 @@ IoObject *IoDBIConn_lastSequence(IoDBIConn *self, IoObject *locals,
 IoObject *IoDBIConn_nextSequence(IoDBIConn *self, IoObject *locals,
 			IoMessage *m)
 {
-	/*#io
-	docSlot(&quot;sequenceNext([name])&quot;, &quot;Return the next sequence that will be used
-during an INSERT query&quot;)
+	/*doc DBIConn sequenceNext([name])
+	Return the next sequence that will be used during an INSERT query.
 	*/
+	
 	char *name = NULL;
+	
 	if (IoMessage_argCount(m) == 1)
 	{
 		IoObject *nameArg = IoMessage_locals_valueArgAt_(m, locals, 0);</diff>
      <filename>addons/DBI/source/IoDBIConn.c</filename>
    </modified>
    <modified>
      <diff>@@ -1,11 +1,7 @@
-/*#io
-DBIResult ioDoc(
-	docCopyright(&quot;Jeremy Cowgar&quot;, 2006)
-	docLicense(&quot;BSD revised&quot;)
-	docCategory(&quot;Databases&quot;)
-	docObject(&quot;DBIResult&quot;)
-	docDescription(&quot;A DBI Result created by a call to DBIConn query.&quot;)
-*/
+//metadoc DBIResult copyright Jeremy Cowgar, 2006
+//metadoc DBIResult license BSD revised
+//metadoc DBIResult category Databases
+//metadoc DBIResult description A DBI Result created by a call to DBIConn query.
 
 #include &quot;IoMessage.h&quot;
 #include &quot;IoState.h&quot;
@@ -141,18 +137,16 @@ IoObject *IoDBIResult_rowToMap_(void *state, IoDBIResult *self,
 IoObject *IoDBIResult_size(IoDBIResult *self, IoObject *locals,
 			IoMessage *m)
 {
-	/*#io
-	docSlot(&quot;size&quot;, &quot;Returns the number of rows available&quot;)
-	*/
+	//doc DBIResult size Returns the number of rows available.
+
 	return IONUMBER(dbi_result_get_numrows(DATA(self)-&gt;result));
 }
 
 IoObject *IoDBIResult_fields(IoDBIResult *self, IoObject *locals,
 			IoMessage *m)
 {
-	/*#io
-	docSlot(&quot;fields&quot;, &quot;Returns a list of field names in the result&quot;)
-	*/
+	//doc DBIResult fields Returns a list of field names in the result.
+
 	int idx;
 	IoList *list = IOREF(IoList_new(IOSTATE));
 
@@ -168,9 +162,8 @@ IoObject *IoDBIResult_fields(IoDBIResult *self, IoObject *locals,
 IoObject *IoDBIResult_first(IoDBIResult *self, IoObject *locals,
 			IoMessage *m)
 {
-	/*#io
-	docSlot(&quot;first&quot;, &quot;Move the cursor to the first record&quot;)
-	*/
+	//doc DBIResult first Move the cursor to the first record.
+	
 	if (1 != dbi_result_first_row(DATA(self)-&gt;result))
 	{
 		ReportDBIError(DATA(self)-&gt;conn, IOSTATE, m);
@@ -182,9 +175,8 @@ IoObject *IoDBIResult_first(IoDBIResult *self, IoObject *locals,
 IoObject *IoDBIResult_previous(IoDBIResult *self, IoObject *locals,
 			IoMessage *m)
 {
-	/*#io
-	docSlot(&quot;previous&quot;, &quot;Move the cursor to the previous record&quot;)
-	*/
+	//doc DBIResult previous Move the cursor to the previous record.
+	
 	if (1 != dbi_result_prev_row(DATA(self)-&gt;result))
 	{
 		ReportDBIError(DATA(self)-&gt;conn, IOSTATE, m);
@@ -196,9 +188,8 @@ IoObject *IoDBIResult_previous(IoDBIResult *self, IoObject *locals,
 IoObject *IoDBIResult_next(IoDBIResult *self, IoObject *locals,
 			IoMessage *m)
 {
-	/*#io
-	docSlot(&quot;next&quot;, &quot;Move the cursor to the next record.&quot;)
-	*/
+	//doc DBIResult next Move the cursor to the next record.
+	
 	dbi_result res = DATA(self)-&gt;result;
 
 	if (0 == dbi_result_next_row(res))
@@ -213,9 +204,8 @@ IoObject *IoDBIResult_next(IoDBIResult *self, IoObject *locals,
 IoObject *IoDBIResult_last(IoDBIResult *self, IoObject *locals,
 			IoMessage *m)
 {
-	/*#io
-	docSlot(&quot;last&quot;, &quot;Move the cursor to the last record&quot;)
-	*/
+	//doc DBIResult last Move the cursor to the last record.
+	
 	dbi_result res = DATA(self)-&gt;result;
 
 	if (0 == dbi_result_last_row(res))
@@ -230,9 +220,8 @@ IoObject *IoDBIResult_last(IoDBIResult *self, IoObject *locals,
 IoObject *IoDBIResult_seek(IoDBIResult *self, IoObject *locals,
 			IoMessage *m)
 {
-	/*#io
-	docSlot(&quot;seek(row_number)&quot;, &quot;Move the cursor to the nth record&quot;)
-	*/
+	//doc DBIResult seek(row_number) Move the cursor to the nth record.
+
 	long rowIdx;
 	dbi_result res = DATA(self)-&gt;result;
 	IoObject *row = IoMessage_locals_valueArgAt_(m, locals, 0);
@@ -245,11 +234,12 @@ IoObject *IoDBIResult_seek(IoDBIResult *self, IoObject *locals,
 	}
 
 	rowIdx = IoNumber_asLong(row);
+	
 	if (1 != dbi_result_seek_row(res, rowIdx))
 	{
 		const char *error;
-		int errorCode = dbi_conn_error(DATA(self)-&gt;conn,
-					&amp;error);
+		
+		int errorCode = dbi_conn_error(DATA(self)-&gt;conn, &amp;error);
 
 		if (errorCode == 0)
 		{
@@ -265,12 +255,10 @@ IoObject *IoDBIResult_seek(IoDBIResult *self, IoObject *locals,
 	return IOBOOL(self, 1);
 }
 
-IoObject *IoDBIResult_position(
-		IoDBIResult *self, IoObject *locals, IoMessage *m)
+IoObject *IoDBIResult_position(IoDBIResult *self, IoObject *locals, IoMessage *m)
 {
-	/*#io
-	docSlot(&quot;position&quot;, &quot;Return the current row's position (or index).&quot;)
-	*/
+	//doc DBIResult position Return the current row's position (or index).
+
 	unsigned long long rowNum = dbi_result_get_currow(DATA(self)-&gt;result);
 
 	if (0 == rowNum)
@@ -283,9 +271,9 @@ IoObject *IoDBIResult_position(
 
 IoObject *IoDBIResult_at(IoDBIResult *self, IoObject *locals, IoMessage *m)
 {
-	/*#io
-	docSlot(&quot;at(index_or_name)&quot;, &quot;Return the contents of the given field. The
-parameter can be a field index or a field name.&quot;)
+	/*doc DBIResult at(index_or_name)
+	 Returns the contents of the given field. 
+	 The parameter can be a field index or a field name.
 	*/
 	unsigned int idx = 0;
 	dbi_result res = DATA(self)-&gt;result;
@@ -316,11 +304,11 @@ parameter can be a field index or a field name.&quot;)
 IoObject *IoDBIResult_populate(IoDBIResult *self, IoObject *locals,
 			IoMessage *m)
 {
-	/*#io
-	docSlot(&quot;populate(object)&quot;, &quot;Populate a decendent of DBIRecord with the
-current record's contents. See `DBIRecord' for further explanation and an
-example.&quot;)
+	/*doc DBIResult populate(object)
+	Populates a decendent of DBIRecord with the current record's contents. 
+	See `DBIRecord' for further explanation and an example.
 	*/
+	
 	dbi_result res = DATA(self)-&gt;result;
 	IoObject *baseObject = IoMessage_locals_valueArgAt_(m, locals, 0);
 	IoObject *o = IOCLONE(baseObject);
@@ -335,10 +323,9 @@ example.&quot;)
 IoObject *IoDBIResult_foreach(IoDBIResult *self, IoObject *locals,
 			IoMessage *m)
 {
-	/*#io
-	docSlot(&quot;foreach([Object], value, message)&quot;, &quot;&quot;&quot;Loops over the records in the
-result starting at either the first result (if the cursor has never been
-moved) or it's current location if moved. i.e.
+/*doc DBIResult foreach([Object], value, message)
+Loops over the records in the result starting at either the first result 
+(if the cursor has never been moved) or it's current location if moved. i.e.
 
 &lt;pre&gt;
 r := conn query(&quot;SELECT * FROM people&quot;)
@@ -360,8 +347,8 @@ The above would start at the record #4, not at the beginning.
 The optional Object parameter would cause a decendent of DBIRecord to be
 populate instead of the index being set. This allows for advanced
 functionality. Please see `DBIRecord' for further information and an example.
-&quot;&quot;&quot;)
-	*/
+*/
+	
 	dbi_result res = DATA(self)-&gt;result;
 	IoObject *result = IONIL(self);
 	IoMessage *doMessage;
@@ -442,11 +429,12 @@ done:
 
 IoObject *IoDBIResult_done(IoDBIResult *self, IoObject *locals, IoMessage *m)
 {
-	/*#io
-	docSlot(&quot;done&quot;, &quot;Close and free the result. This &lt;b&gt;must&lt;/b&gt; be called on
+	/*doc DBIResult done
+	Close and free the result. This &lt;b&gt;must&lt;/b&gt; be called on
 each result. Failure to do so will cause memory leaks and open queries with
-the database server.&quot;)
+the database server.
 	*/
+	
 	if (0 != dbi_result_free(DATA(self)-&gt;result))
 	{
 		ReportDBIError(DATA(self)-&gt;conn, IOSTATE, m);</diff>
      <filename>addons/DBI/source/IoDBIResult.c</filename>
    </modified>
    <modified>
      <diff>@@ -5,7 +5,7 @@ Directory fileNamedOrNil := method(path,
 	if(f exists, f, nil)
 )
 
-Directory setCurrentWorkingDirectory(launchPath)
+Directory setCurrentWorkingDirectory(System launchPath)
 
 project := Project clone
 args := System args clone</diff>
      <filename>build.io</filename>
    </modified>
    <modified>
      <diff>@@ -59,8 +59,10 @@
 &lt;/td&gt;&lt;td valign=top&gt;
 &lt;div class=indexSection&gt;&lt;a href=&quot;#Curses&quot;&gt;Curses&lt;/a&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;
 &lt;div class=indexSection&gt;&lt;a href=&quot;#DBI&quot;&gt;DBI&lt;/a&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;
+&lt;div class=indexItem&gt;&lt;a href=&quot;#DBI&quot;&gt;DBI&lt;/a&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;
 &lt;div class=indexItem&gt;&lt;a href=&quot;#DBIConn&quot;&gt;DBIConn&lt;/a&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;
 &lt;div class=indexItem&gt;&lt;a href=&quot;#DBIRecord&quot;&gt;DBIRecord&lt;/a&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;
+&lt;div class=indexItem&gt;&lt;a href=&quot;#DBIResult&quot;&gt;DBIResult&lt;/a&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;
 &lt;div class=indexSection&gt;&lt;a href=&quot;#Fnmatch&quot;&gt;Fnmatch&lt;/a&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;
 &lt;div class=indexSection&gt;&lt;a href=&quot;#Font&quot;&gt;Font&lt;/a&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;
 &lt;div class=indexSection&gt;&lt;a href=&quot;#GLFW&quot;&gt;GLFW&lt;/a&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;
@@ -93,8 +95,8 @@
 &lt;div class=indexSection&gt;&lt;a href=&quot;#PortAudio&quot;&gt;PortAudio&lt;/a&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;
 &lt;div class=indexItem&gt;&lt;a href=&quot;#AudioDevice&quot;&gt;AudioDevice&lt;/a&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;
 &lt;div class=indexItem&gt;&lt;a href=&quot;#AudioMixer&quot;&gt;AudioMixer&lt;/a&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;
-&lt;div class=indexSection&gt;&lt;a href=&quot;#Postgres&quot;&gt;Postgres&lt;/a&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;
 &lt;/td&gt;&lt;td valign=top&gt;
+&lt;div class=indexSection&gt;&lt;a href=&quot;#Postgres&quot;&gt;Postgres&lt;/a&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;
 &lt;div class=indexSection&gt;&lt;a href=&quot;#Python&quot;&gt;Python&lt;/a&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;
 &lt;div class=indexSection&gt;&lt;a href=&quot;#QDBM&quot;&gt;QDBM&lt;/a&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;
 &lt;div class=indexSection&gt;&lt;a href=&quot;#Random&quot;&gt;Random&lt;/a&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;
@@ -2075,6 +2077,49 @@ Returns the cursor y position.
 &lt;/div&gt;
 &lt;/div&gt;
 &lt;hr align=left&gt;
+&lt;h2&gt;&lt;a name=&quot;DBI&quot;&gt;&lt;/a&gt;DBI&lt;/h2&gt;
+&lt;div class=indent&gt;
+&lt;b&gt;Module:&lt;/b&gt; DBI&lt;br&gt;
+&lt;div class=slots&gt;
+&lt;h3&gt;Slot Index&lt;/h3&gt;
+&lt;div class=slotIndex&gt;
+&lt;a href=&quot;#DBI-drivers&quot;&gt;drivers&lt;/a&gt;&lt;br&gt;
+&lt;a href=&quot;#DBI-initWithDriversPath&quot;&gt;initWithDriversPath&lt;/a&gt;&lt;br&gt;
+&lt;a href=&quot;#DBI-version&quot;&gt;version&lt;/a&gt;&lt;br&gt;
+&lt;a href=&quot;#DBI-with&quot;&gt;with()&lt;/a&gt;&lt;br&gt;
+&lt;/div&gt;
+&lt;p&gt;
+&lt;h3&gt;Slots&lt;/h3&gt;
+&lt;p&gt;
+&lt;a name=&quot;DBI-drivers&quot;&gt;&lt;/a&gt;&lt;b&gt;drivers&lt;/b&gt;&lt;p&gt;
+&lt;div class=slotDescription&gt;
+Get a list of drivers and it's associated information:
+
+	&lt;ol&gt;
+		&lt;li&gt;name&lt;/li&gt;
+		&lt;li&gt;description&lt;/li&gt;
+		&lt;li&gt;filename&lt;/li&gt;
+		&lt;li&gt;version&lt;/li&gt;
+		&lt;li&gt;date compiled&lt;/li&gt;
+		&lt;li&gt;maintainer&lt;/li&gt;
+		&lt;li&gt;url&lt;/li&gt;
+	&lt;/ol&gt;
+&lt;/div&gt;
+&lt;a name=&quot;DBI-initWithDriversPath&quot;&gt;&lt;/a&gt;&lt;b&gt;initWithDriversPath&lt;/b&gt;&lt;p&gt;
+&lt;div class=slotDescription&gt;
+Initialize the DBI environment with the specified libdbi driver path.
+&lt;/div&gt;
+&lt;a name=&quot;DBI-version&quot;&gt;&lt;/a&gt;&lt;b&gt;version&lt;/b&gt;&lt;p&gt;
+&lt;div class=slotDescription&gt;
+Return string version of libdbi being used.
+&lt;/div&gt;
+&lt;a name=&quot;DBI-with&quot;&gt;&lt;/a&gt;&lt;b&gt;with(driverName)&lt;/b&gt;&lt;p&gt;
+&lt;div class=slotDescription&gt;
+Get a new connection with the given driver.
+&lt;/div&gt;
+&lt;/div&gt;
+&lt;/div&gt;
+&lt;hr align=left&gt;
 &lt;h2&gt;&lt;a name=&quot;DBIConn&quot;&gt;&lt;/a&gt;DBIConn&lt;/h2&gt;
 &lt;div class=indent&gt;
 &lt;b&gt;Module:&lt;/b&gt; DBI&lt;br&gt;
@@ -2088,11 +2133,71 @@ An object that represents a DBI Connection.
 &lt;div class=slots&gt;
 &lt;h3&gt;Slot Index&lt;/h3&gt;
 &lt;div class=slotIndex&gt;
+&lt;a href=&quot;#DBIConn-close&quot;&gt;close&lt;/a&gt;&lt;br&gt;
+&lt;a href=&quot;#DBIConn-connect&quot;&gt;connect&lt;/a&gt;&lt;br&gt;
+&lt;a href=&quot;#DBIConn-driver&quot;&gt;driver&lt;/a&gt;&lt;br&gt;
+&lt;a href=&quot;#DBIConn-execute&quot;&gt;execute()&lt;/a&gt;&lt;br&gt;
+&lt;a href=&quot;#DBIConn-option&quot;&gt;option()&lt;/a&gt;&lt;br&gt;
+&lt;a href=&quot;#DBIConn-optionClear&quot;&gt;optionClear()&lt;/a&gt;&lt;br&gt;
+&lt;a href=&quot;#DBIConn-optionPut&quot;&gt;optionPut()&lt;/a&gt;&lt;br&gt;
+&lt;a href=&quot;#DBIConn-options&quot;&gt;options&lt;/a&gt;&lt;br&gt;
+&lt;a href=&quot;#DBIConn-optionsClear&quot;&gt;optionsClear&lt;/a&gt;&lt;br&gt;
+&lt;a href=&quot;#DBIConn-ping&quot;&gt;ping&lt;/a&gt;&lt;br&gt;
+&lt;a href=&quot;#DBIConn-query&quot;&gt;query()&lt;/a&gt;&lt;br&gt;
 &lt;a href=&quot;#DBIConn-queryOne&quot;&gt;queryOne()&lt;/a&gt;&lt;br&gt;
+&lt;a href=&quot;#DBIConn-quote&quot;&gt;quote()&lt;/a&gt;&lt;br&gt;
+&lt;a href=&quot;#DBIConn-sequenceLast&quot;&gt;sequenceLast()&lt;/a&gt;&lt;br&gt;
+&lt;a href=&quot;#DBIConn-sequenceNext&quot;&gt;sequenceNext()&lt;/a&gt;&lt;br&gt;
 &lt;/div&gt;
 &lt;p&gt;
 &lt;h3&gt;Slots&lt;/h3&gt;
 &lt;p&gt;
+&lt;a name=&quot;DBIConn-close&quot;&gt;&lt;/a&gt;&lt;b&gt;close&lt;/b&gt;&lt;p&gt;
+&lt;div class=slotDescription&gt;
+Close the connection to the database.
+&lt;/div&gt;
+&lt;a name=&quot;DBIConn-connect&quot;&gt;&lt;/a&gt;&lt;b&gt;connect&lt;/b&gt;&lt;p&gt;
+&lt;div class=slotDescription&gt;
+Connect to the database server.
+&lt;/div&gt;
+&lt;a name=&quot;DBIConn-driver&quot;&gt;&lt;/a&gt;&lt;b&gt;driver&lt;/b&gt;&lt;p&gt;
+&lt;div class=slotDescription&gt;
+Return database driver name.
+&lt;/div&gt;
+&lt;a name=&quot;DBIConn-execute&quot;&gt;&lt;/a&gt;&lt;b&gt;execute(sql_query)&lt;/b&gt;&lt;p&gt;
+&lt;div class=slotDescription&gt;
+Perform a database query that expects no results. 
+	Returns the number of rows affected.
+&lt;/div&gt;
+&lt;a name=&quot;DBIConn-option&quot;&gt;&lt;/a&gt;&lt;b&gt;option(key)&lt;/b&gt;&lt;p&gt;
+&lt;div class=slotDescription&gt;
+Retrieve an option value for the connection.
+&lt;/div&gt;
+&lt;a name=&quot;DBIConn-optionClear&quot;&gt;&lt;/a&gt;&lt;b&gt;optionClear(key)&lt;/b&gt;&lt;p&gt;
+&lt;div class=slotDescription&gt;
+Clear a specific option associated with the connection.
+&lt;/div&gt;
+&lt;a name=&quot;DBIConn-optionPut&quot;&gt;&lt;/a&gt;&lt;b&gt;optionPut(key,value)&lt;/b&gt;&lt;p&gt;
+&lt;div class=slotDescription&gt;
+Add an option key, value pair to the connection.
+&lt;/div&gt;
+&lt;a name=&quot;DBIConn-options&quot;&gt;&lt;/a&gt;&lt;b&gt;options&lt;/b&gt;&lt;p&gt;
+&lt;div class=slotDescription&gt;
+Retrieve an option list of the connection.
+&lt;/div&gt;
+&lt;a name=&quot;DBIConn-optionsClear&quot;&gt;&lt;/a&gt;&lt;b&gt;optionsClear&lt;/b&gt;&lt;p&gt;
+&lt;div class=slotDescription&gt;
+Clear all options associated with the connection
+&lt;/div&gt;
+&lt;a name=&quot;DBIConn-ping&quot;&gt;&lt;/a&gt;&lt;b&gt;ping&lt;/b&gt;&lt;p&gt;
+&lt;div class=slotDescription&gt;
+Ping the database to see if it's alive. 
+	Will return true if it is, otherwise false.
+&lt;/div&gt;
+&lt;a name=&quot;DBIConn-query&quot;&gt;&lt;/a&gt;&lt;b&gt;query(sql_query)&lt;/b&gt;&lt;p&gt;
+&lt;div class=slotDescription&gt;
+Perform a database query returning a DBIResult object.
+&lt;/div&gt;
 &lt;a name=&quot;DBIConn-queryOne&quot;&gt;&lt;/a&gt;&lt;b&gt;queryOne([object], sql)&lt;/b&gt;&lt;p&gt;
 &lt;div class=slotDescription&gt;
 Perform a query and return the first
@@ -2101,6 +2206,18 @@ Perform a query and return the first
 	If [object] is supplied, the object is populated with the contents of the
 	result, the result is marked done and the object is returned.
 &lt;/div&gt;
+&lt;a name=&quot;DBIConn-quote&quot;&gt;&lt;/a&gt;&lt;b&gt;quote(value)&lt;/b&gt;&lt;p&gt;
+&lt;div class=slotDescription&gt;
+Quote a string value according to the database server's specifications.
+&lt;/div&gt;
+&lt;a name=&quot;DBIConn-sequenceLast&quot;&gt;&lt;/a&gt;&lt;b&gt;sequenceLast([name])&lt;/b&gt;&lt;p&gt;
+&lt;div class=slotDescription&gt;
+Return the last inserted sequence value.
+&lt;/div&gt;
+&lt;a name=&quot;DBIConn-sequenceNext&quot;&gt;&lt;/a&gt;&lt;b&gt;sequenceNext([name])&lt;/b&gt;&lt;p&gt;
+&lt;div class=slotDescription&gt;
+Return the next sequence that will be used during an INSERT query.
+&lt;/div&gt;
 &lt;/div&gt;
 &lt;/div&gt;
 &lt;hr align=left&gt;
@@ -2142,10 +2259,128 @@ to setFirstName &lt;i&gt;only&lt;/i&gt; updates the objects representation of firstName.
 &lt;div class=slots&gt;
 &lt;h3&gt;Slot Index&lt;/h3&gt;
 &lt;div class=slotIndex&gt;
+&lt;a href=&quot;#DBIRecord-forward&quot;&gt;forward&lt;/a&gt;&lt;br&gt;
+&lt;a href=&quot;#DBIRecord-with&quot;&gt;with()&lt;/a&gt;&lt;br&gt;
 &lt;/div&gt;
 &lt;p&gt;
 &lt;h3&gt;Slots&lt;/h3&gt;
 &lt;p&gt;
+&lt;font color=#888&gt;
+&lt;a name=&quot;DBIRecord-forward&quot;&gt;&lt;/a&gt;&lt;b&gt;forward&lt;/b&gt;&lt;p&gt;
+&lt;div class=slotDescription&gt;
+Private method that implements getting and setting values.
+&lt;/font&gt;
+&lt;/div&gt;
+&lt;a name=&quot;DBIRecord-with&quot;&gt;&lt;/a&gt;&lt;b&gt;with(aMap)&lt;/b&gt;&lt;p&gt;
+&lt;div class=slotDescription&gt;
+Returns a new DBIRecord instance for the given value map.
+&lt;/div&gt;
+&lt;/div&gt;
+&lt;/div&gt;
+&lt;hr align=left&gt;
+&lt;h2&gt;&lt;a name=&quot;DBIResult&quot;&gt;&lt;/a&gt;DBIResult&lt;/h2&gt;
+&lt;div class=indent&gt;
+&lt;b&gt;Module:&lt;/b&gt; DBI&lt;br&gt;
+&lt;b&gt;Category:&lt;/b&gt; Databases
+&lt;br&gt;
+&lt;h3&gt;Description&lt;/h3&gt;
+&lt;div class=protoDescription&gt;
+A DBI Result created by a call to DBIConn query.
+
+&lt;/div&gt;
+&lt;div class=slots&gt;
+&lt;h3&gt;Slot Index&lt;/h3&gt;
+&lt;div class=slotIndex&gt;
+&lt;a href=&quot;#DBIResult-at&quot;&gt;at()&lt;/a&gt;&lt;br&gt;
+&lt;a href=&quot;#DBIResult-done&quot;&gt;done&lt;/a&gt;&lt;br&gt;
+&lt;a href=&quot;#DBIResult-fields&quot;&gt;fields&lt;/a&gt;&lt;br&gt;
+&lt;a href=&quot;#DBIResult-first&quot;&gt;first&lt;/a&gt;&lt;br&gt;
+&lt;a href=&quot;#DBIResult-foreach&quot;&gt;foreach()&lt;/a&gt;&lt;br&gt;
+&lt;a href=&quot;#DBIResult-last&quot;&gt;last&lt;/a&gt;&lt;br&gt;
+&lt;a href=&quot;#DBIResult-next&quot;&gt;next&lt;/a&gt;&lt;br&gt;
+&lt;a href=&quot;#DBIResult-populate&quot;&gt;populate()&lt;/a&gt;&lt;br&gt;
+&lt;a href=&quot;#DBIResult-position&quot;&gt;position&lt;/a&gt;&lt;br&gt;
+&lt;a href=&quot;#DBIResult-previous&quot;&gt;previous&lt;/a&gt;&lt;br&gt;
+&lt;a href=&quot;#DBIResult-seek&quot;&gt;seek()&lt;/a&gt;&lt;br&gt;
+&lt;a href=&quot;#DBIResult-size&quot;&gt;size&lt;/a&gt;&lt;br&gt;
+&lt;/div&gt;
+&lt;p&gt;
+&lt;h3&gt;Slots&lt;/h3&gt;
+&lt;p&gt;
+&lt;a name=&quot;DBIResult-at&quot;&gt;&lt;/a&gt;&lt;b&gt;at(index_or_name)&lt;/b&gt;&lt;p&gt;
+&lt;div class=slotDescription&gt;
+Returns the contents of the given field. 
+	 The parameter can be a field index or a field name.
+&lt;/div&gt;
+&lt;a name=&quot;DBIResult-done&quot;&gt;&lt;/a&gt;&lt;b&gt;done&lt;/b&gt;&lt;p&gt;
+&lt;div class=slotDescription&gt;
+Close and free the result. This &lt;b&gt;must&lt;/b&gt; be called on
+each result. Failure to do so will cause memory leaks and open queries with
+the database server.
+&lt;/div&gt;
+&lt;a name=&quot;DBIResult-fields&quot;&gt;&lt;/a&gt;&lt;b&gt;fields&lt;/b&gt;&lt;p&gt;
+&lt;div class=slotDescription&gt;
+Returns a list of field names in the result.
+&lt;/div&gt;
+&lt;a name=&quot;DBIResult-first&quot;&gt;&lt;/a&gt;&lt;b&gt;first&lt;/b&gt;&lt;p&gt;
+&lt;div class=slotDescription&gt;
+Move the cursor to the first record.
+&lt;/div&gt;
+&lt;a name=&quot;DBIResult-foreach&quot;&gt;&lt;/a&gt;&lt;b&gt;foreach([Object], value, message)&lt;/b&gt;&lt;p&gt;
+&lt;div class=slotDescription&gt;
+Loops over the records in the result starting at either the first result 
+(if the cursor has never been moved) or it's current location if moved. i.e.
+
+&lt;pre&gt;
+r := conn query(&quot;SELECT * FROM people&quot;)
+r foreach(r, r at(1))
+&lt;/pre&gt;
+
+The above would start at the first row, however, you can move around in the
+result set and then foreach would pickup where you left off, for instance, say
+you wanted to skip the first three rows:
+
+&lt;pre&gt;
+r := conn query(&quot;SELECT * FROM people&quot;)
+r seek(4)
+r foreach(r, r at (1))
+&lt;/pre&gt;
+
+The above would start at the record #4, not at the beginning.
+
+The optional Object parameter would cause a decendent of DBIRecord to be
+populate instead of the index being set. This allows for advanced
+functionality. Please see `DBIRecord' for further information and an example.
+&lt;/div&gt;
+&lt;a name=&quot;DBIResult-last&quot;&gt;&lt;/a&gt;&lt;b&gt;last&lt;/b&gt;&lt;p&gt;
+&lt;div class=slotDescription&gt;
+Move the cursor to the last record.
+&lt;/div&gt;
+&lt;a name=&quot;DBIResult-next&quot;&gt;&lt;/a&gt;&lt;b&gt;next&lt;/b&gt;&lt;p&gt;
+&lt;div class=slotDescription&gt;
+Move the cursor to the next record.
+&lt;/div&gt;
+&lt;a name=&quot;DBIResult-populate&quot;&gt;&lt;/a&gt;&lt;b&gt;populate(object)&lt;/b&gt;&lt;p&gt;
+&lt;div class=slotDescription&gt;
+Populates a decendent of DBIRecord with the current record's contents. 
+	See `DBIRecord' for further explanation and an example.
+&lt;/div&gt;
+&lt;a name=&quot;DBIResult-position&quot;&gt;&lt;/a&gt;&lt;b&gt;position&lt;/b&gt;&lt;p&gt;
+&lt;div class=slotDescription&gt;
+Return the current row's position (or index).
+&lt;/div&gt;
+&lt;a name=&quot;DBIResult-previous&quot;&gt;&lt;/a&gt;&lt;b&gt;previous&lt;/b&gt;&lt;p&gt;
+&lt;div class=slotDescription&gt;
+Move the cursor to the previous record.
+&lt;/div&gt;
+&lt;a name=&quot;DBIResult-seek&quot;&gt;&lt;/a&gt;&lt;b&gt;seek(row_number)&lt;/b&gt;&lt;p&gt;
+&lt;div class=slotDescription&gt;
+Move the cursor to the nth record.
+&lt;/div&gt;
+&lt;a name=&quot;DBIResult-size&quot;&gt;&lt;/a&gt;&lt;b&gt;size&lt;/b&gt;&lt;p&gt;
+&lt;div class=slotDescription&gt;
+Returns the number of rows available.
+&lt;/div&gt;
 &lt;/div&gt;
 &lt;/div&gt;
 &lt;hr align=left&gt;
@@ -14684,6 +14919,7 @@ Reopens an already open log session. This is useful if you wish to
 &lt;a href=&quot;#System-getOptions&quot;&gt;getOptions()&lt;/a&gt;&lt;br&gt;
 &lt;a href=&quot;#System-installPrefix&quot;&gt;installPrefix&lt;/a&gt;&lt;br&gt;
 &lt;a href=&quot;#System-ioPath&quot;&gt;ioPath&lt;/a&gt;&lt;br&gt;
+&lt;a href=&quot;#System-launchPath&quot;&gt;launchPath&lt;/a&gt;&lt;br&gt;
 &lt;a href=&quot;#System-launchScript&quot;&gt;launchScript&lt;/a&gt;&lt;br&gt;
 &lt;a href=&quot;#System-maxRecycledObjects&quot;&gt;maxRecycledObjects&lt;/a&gt;&lt;br&gt;
 &lt;a href=&quot;#System-platform&quot;&gt;platform&lt;/a&gt;&lt;br&gt;
@@ -14753,6 +14989,10 @@ Returns the root path where io was install. The default is /usr/local.
 &lt;div class=slotDescription&gt;
 Returns the path of io installation. The default is $INSTALL_PREFIX/lib/io.
 &lt;/div&gt;
+&lt;a name=&quot;System-launchPath&quot;&gt;&lt;/a&gt;&lt;b&gt;launchPath&lt;/b&gt;&lt;p&gt;
+&lt;div class=slotDescription&gt;
+&lt;div class=error&gt;undocumented&lt;/div&gt;
+&lt;/div&gt;
 &lt;a name=&quot;System-launchScript&quot;&gt;&lt;/a&gt;&lt;b&gt;launchScript&lt;/b&gt;&lt;p&gt;
 &lt;div class=slotDescription&gt;
 Returns the path of the io file run on the command line. Returns nil if no file was run.</diff>
      <filename>docs/IoReference.html</filename>
    </modified>
    <modified>
      <diff>@@ -529,6 +529,9 @@
 		AA86C21C0B60520000495786 /* IoVMInit.c in Sources */ = {isa = PBXBuildFile; fileRef = AA86BF8C0B6051FF00495786 /* IoVMInit.c */; };
 		AA86C21D0B60520000495786 /* IoWeakLink.c in Sources */ = {isa = PBXBuildFile; fileRef = AA86BF8D0B6051FF00495786 /* IoWeakLink.c */; };
 		AA86C21E0B60520000495786 /* IoWeakLink.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = AA86BF8E0B6051FF00495786 /* IoWeakLink.h */; };
+		AA9150E30D5B30EB00CBBF14 /* IoDBI.c in Sources */ = {isa = PBXBuildFile; fileRef = AA9150DD0D5B30EB00CBBF14 /* IoDBI.c */; };
+		AA9150E40D5B30EB00CBBF14 /* IoDBIConn.c in Sources */ = {isa = PBXBuildFile; fileRef = AA9150DF0D5B30EB00CBBF14 /* IoDBIConn.c */; };
+		AA9150E50D5B30EB00CBBF14 /* IoDBIResult.c in Sources */ = {isa = PBXBuildFile; fileRef = AA9150E10D5B30EB00CBBF14 /* IoDBIResult.c */; };
 		AABA460B0B6DB7CD00446661 /* UArray_character.c in Sources */ = {isa = PBXBuildFile; fileRef = AABA46030B6DB7CC00446661 /* UArray_character.c */; };
 		AABA460C0B6DB7CD00446661 /* UArray_character.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = AABA46040B6DB7CC00446661 /* UArray_character.h */; };
 		AABA460D0B6DB7CD00446661 /* UArray_math.c in Sources */ = {isa = PBXBuildFile; fileRef = AABA46050B6DB7CC00446661 /* UArray_math.c */; };
@@ -1376,6 +1379,14 @@
 		AA86BF8C0B6051FF00495786 /* IoVMInit.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = IoVMInit.c; sourceTree = &quot;&lt;group&gt;&quot;; };
 		AA86BF8D0B6051FF00495786 /* IoWeakLink.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = IoWeakLink.c; sourceTree = &quot;&lt;group&gt;&quot;; };
 		AA86BF8E0B6051FF00495786 /* IoWeakLink.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = IoWeakLink.h; sourceTree = &quot;&lt;group&gt;&quot;; };
+		AA9150D20D5B30EB00CBBF14 /* DBIConn.io */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = DBIConn.io; sourceTree = &quot;&lt;group&gt;&quot;; };
+		AA9150D30D5B30EB00CBBF14 /* DBIRecord.io */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = DBIRecord.io; sourceTree = &quot;&lt;group&gt;&quot;; };
+		AA9150DD0D5B30EB00CBBF14 /* IoDBI.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = IoDBI.c; sourceTree = &quot;&lt;group&gt;&quot;; };
+		AA9150DE0D5B30EB00CBBF14 /* IoDBI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IoDBI.h; sourceTree = &quot;&lt;group&gt;&quot;; };
+		AA9150DF0D5B30EB00CBBF14 /* IoDBIConn.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = IoDBIConn.c; sourceTree = &quot;&lt;group&gt;&quot;; };
+		AA9150E00D5B30EB00CBBF14 /* IoDBIConn.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IoDBIConn.h; sourceTree = &quot;&lt;group&gt;&quot;; };
+		AA9150E10D5B30EB00CBBF14 /* IoDBIResult.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = IoDBIResult.c; sourceTree = &quot;&lt;group&gt;&quot;; };
+		AA9150E20D5B30EB00CBBF14 /* IoDBIResult.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IoDBIResult.h; sourceTree = &quot;&lt;group&gt;&quot;; };
 		AABA46030B6DB7CC00446661 /* UArray_character.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = UArray_character.c; sourceTree = &quot;&lt;group&gt;&quot;; };
 		AABA46040B6DB7CC00446661 /* UArray_character.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = UArray_character.h; sourceTree = &quot;&lt;group&gt;&quot;; };
 		AABA46050B6DB7CC00446661 /* UArray_math.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = UArray_math.c; sourceTree = &quot;&lt;group&gt;&quot;; };
@@ -1504,6 +1515,7 @@
 				AA7D583A0B60123900D7DEA9 /* ContinuedFraction */,
 				AA7D584C0B60123900D7DEA9 /* Contracts */,
 				AA7D585F0B60123900D7DEA9 /* Curses */,
+				AA9150CC0D5B30EB00CBBF14 /* DBI */,
 				AA7D588F0B60123900D7DEA9 /* Flux */,
 				AA7D5C6E0B60123B00D7DEA9 /* Fnmatch */,
 				AA7D5C850B60123B00D7DEA9 /* Font */,
@@ -2969,6 +2981,37 @@
 			path = source;
 			sourceTree = &quot;&lt;group&gt;&quot;;
 		};
+		AA9150CC0D5B30EB00CBBF14 /* DBI */ = {
+			isa = PBXGroup;
+			children = (
+				AA9150D10D5B30EB00CBBF14 /* io */,
+				AA9150DC0D5B30EB00CBBF14 /* source */,
+			);
+			path = DBI;
+			sourceTree = &quot;&lt;group&gt;&quot;;
+		};
+		AA9150D10D5B30EB00CBBF14 /* io */ = {
+			isa = PBXGroup;
+			children = (
+				AA9150D20D5B30EB00CBBF14 /* DBIConn.io */,
+				AA9150D30D5B30EB00CBBF14 /* DBIRecord.io */,
+			);
+			path = io;
+			sourceTree = &quot;&lt;group&gt;&quot;;
+		};
+		AA9150DC0D5B30EB00CBBF14 /* source */ = {
+			isa = PBXGroup;
+			children = (
+				AA9150DD0D5B30EB00CBBF14 /* IoDBI.c */,
+				AA9150DE0D5B30EB00CBBF14 /* IoDBI.h */,
+				AA9150DF0D5B30EB00CBBF14 /* IoDBIConn.c */,
+				AA9150E00D5B30EB00CBBF14 /* IoDBIConn.h */,
+				AA9150E10D5B30EB00CBBF14 /* IoDBIResult.c */,
+				AA9150E20D5B30EB00CBBF14 /* IoDBIResult.h */,
+			);
+			path = source;
+			sourceTree = &quot;&lt;group&gt;&quot;;
+		};
 		C6A0FF2B0290797F04C91782 /* Documentation */ = {
 			isa = PBXGroup;
 			children = (
@@ -3254,6 +3297,9 @@
 				AA6ABF950BA8012F0049770F /* mandlebrot.c in Sources */,
 				AA6ABFE30BA8D27E0049770F /* IoSeq_vector.c in Sources */,
 				AABFA2B90D59800D00FE7A84 /* Image.c in Sources */,
+				AA9150E30D5B30EB00CBBF14 /* IoDBI.c in Sources */,
+				AA9150E40D5B30EB00CBBF14 /* IoDBIConn.c in Sources */,
+				AA9150E50D5B30EB00CBBF14 /* IoDBIResult.c in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};</diff>
      <filename>extras/osx/osx.xcodeproj/project.pbxproj</filename>
    </modified>
    <modified>
      <diff>@@ -344,7 +344,7 @@
 		fRef = AA7D61BC0B60123E00D7DEA9 /* IoDNS.c */;
 		name = &quot;IoDNS.c: 29&quot;;
 		rLen = 0;
-		rLoc = 586;
+		rLoc = 621;
 		rType = 0;
 		vrLen = 938;
 		vrLoc = 0;
@@ -354,7 +354,7 @@
 		fRef = AA7D61BC0B60123E00D7DEA9 /* IoDNS.c */;
 		name = &quot;IoDNS.c: 29&quot;;
 		rLen = 0;
-		rLoc = 586;
+		rLoc = 621;
 		rType = 0;
 		vrLen = 938;
 		vrLoc = 0;
@@ -1183,9 +1183,9 @@
 	};
 	AA7D57D60B60123800D7DEA9 /* IoAVCodec.c */ = {
 		uiCtxt = {
-			sepNavIntBoundsRect = &quot;{{0, 0}, {1128, 9952}}&quot;;
-			sepNavSelRange = &quot;{8810, 0}&quot;;
-			sepNavVisRange = &quot;{8302, 1194}&quot;;
+			sepNavIntBoundsRect = &quot;{{0, 0}, {880, 9840}}&quot;;
+			sepNavSelRange = &quot;{8700, 0}&quot;;
+			sepNavVisRange = &quot;{8212, 840}&quot;;
 			sepNavVisRect = &quot;{{0, 6984}, {923, 374}}&quot;;
 		};
 	};
@@ -1308,9 +1308,9 @@
 	};
 	AA7D5CA40B60123B00D7DEA9 /* IoFont.c */ = {
 		uiCtxt = {
-			sepNavIntBoundsRect = &quot;{{0, 0}, {3608, 4832}}&quot;;
-			sepNavSelRange = &quot;{984, 0}&quot;;
-			sepNavVisRange = &quot;{0, 1009}&quot;;
+			sepNavIntBoundsRect = &quot;{{0, 0}, {3608, 4848}}&quot;;
+			sepNavSelRange = &quot;{6101, 0}&quot;;
+			sepNavVisRange = &quot;{5426, 1150}&quot;;
 			sepNavVisRect = &quot;{{0, 591}, {933, 232}}&quot;;
 		};
 	};
@@ -1414,9 +1414,9 @@
 	};
 	AA7D5D5B0B60123B00D7DEA9 /* IoLinker.c */ = {
 		uiCtxt = {
-			sepNavIntBoundsRect = &quot;{{0, 0}, {845, 1696}}&quot;;
-			sepNavSelRange = &quot;{48, 0}&quot;;
-			sepNavVisRange = &quot;{0, 428}&quot;;
+			sepNavIntBoundsRect = &quot;{{0, 0}, {1024, 1696}}&quot;;
+			sepNavSelRange = &quot;{2754, 0}&quot;;
+			sepNavVisRange = &quot;{2021, 1002}&quot;;
 			sepNavVisRect = &quot;{{0, 689}, {1281, 957}}&quot;;
 			sepNavWindowFrame = &quot;{{893, 414}, {1296, 1015}}&quot;;
 		};
@@ -1917,9 +1917,9 @@
 	};
 	AA7D60830B60123D00D7DEA9 /* IoRandom.c */ = {
 		uiCtxt = {
-			sepNavIntBoundsRect = &quot;{{0, 0}, {845, 3280}}&quot;;
-			sepNavSelRange = &quot;{2860, 4}&quot;;
-			sepNavVisRange = &quot;{2563, 651}&quot;;
+			sepNavIntBoundsRect = &quot;{{0, 0}, {796, 3184}}&quot;;
+			sepNavSelRange = &quot;{2704, 0}&quot;;
+			sepNavVisRange = &quot;{2493, 920}&quot;;
 			sepNavVisRect = &quot;{{0, 633}, {896, 726}}&quot;;
 		};
 	};
@@ -1954,9 +1954,9 @@
 	};
 	AA7D60CA0B60123E00D7DEA9 /* IoSampleRateConverter.c */ = {
 		uiCtxt = {
-			sepNavIntBoundsRect = &quot;{{0, 0}, {845, 3552}}&quot;;
-			sepNavSelRange = &quot;{186, 0}&quot;;
-			sepNavVisRange = &quot;{0, 781}&quot;;
+			sepNavIntBoundsRect = &quot;{{0, 0}, {808, 3616}}&quot;;
+			sepNavSelRange = &quot;{4276, 0}&quot;;
+			sepNavVisRange = &quot;{3461, 1078}&quot;;
 			sepNavVisRect = &quot;{{0, 283}, {933, 232}}&quot;;
 		};
 	};
@@ -2045,16 +2045,16 @@
 	};
 	AA7D61BC0B60123E00D7DEA9 /* IoDNS.c */ = {
 		uiCtxt = {
-			sepNavIntBoundsRect = &quot;{{0, 0}, {845, 7200}}&quot;;
-			sepNavSelRange = &quot;{177, 0}&quot;;
-			sepNavVisRange = &quot;{0, 440}&quot;;
+			sepNavIntBoundsRect = &quot;{{0, 0}, {840, 7120}}&quot;;
+			sepNavSelRange = &quot;{111, 0}&quot;;
+			sepNavVisRange = &quot;{0, 676}&quot;;
 			sepNavVisRect = &quot;{{0, 0}, {923, 1074}}&quot;;
 		};
 	};
 	AA7D61BD0B60123E00D7DEA9 /* IoDNS.h */ = {
 		uiCtxt = {
-			sepNavIntBoundsRect = &quot;{{0, 0}, {845, 357}}&quot;;
-			sepNavSelRange = &quot;{0, 0}&quot;;
+			sepNavIntBoundsRect = &quot;{{0, 0}, {816, 565}}&quot;;
+			sepNavSelRange = &quot;{161, 8}&quot;;
 			sepNavVisRange = &quot;{0, 571}&quot;;
 		};
 	};
@@ -2286,9 +2286,9 @@
 	};
 	AA7D62B20B60123F00D7DEA9 /* IoUUID.c */ = {
 		uiCtxt = {
-			sepNavIntBoundsRect = &quot;{{0, 0}, {845, 1760}}&quot;;
-			sepNavSelRange = &quot;{51, 0}&quot;;
-			sepNavVisRange = &quot;{0, 306}&quot;;
+			sepNavIntBoundsRect = &quot;{{0, 0}, {796, 1760}}&quot;;
+			sepNavSelRange = &quot;{185, 0}&quot;;
+			sepNavVisRange = &quot;{541, 778}&quot;;
 			sepNavVisRect = &quot;{{0, 145}, {776, 285}}&quot;;
 		};
 	};
@@ -2322,6 +2322,13 @@
 			sepNavVisRect = &quot;{{0, 1753}, {989, 725}}&quot;;
 		};
 	};
+	AA7D6B7F0B6012F600D7DEA9 /* AppleSensors.c */ = {
+		uiCtxt = {
+			sepNavIntBoundsRect = &quot;{{0, 0}, {896, 2608}}&quot;;
+			sepNavSelRange = &quot;{0, 0}&quot;;
+			sepNavVisRange = &quot;{0, 1024}&quot;;
+		};
+	};
 	AA7D6B810B6012F600D7DEA9 /* IoAppleExtrasInit.c */ = {
 		uiCtxt = {
 			sepNavIntBoundsRect = &quot;{{0, 0}, {933, 232}}&quot;;
@@ -2331,9 +2338,9 @@
 	};
 	AA7D6B820B6012F600D7DEA9 /* IoAppleSensors.c */ = {
 		uiCtxt = {
-			sepNavIntBoundsRect = &quot;{{0, 0}, {845, 2352}}&quot;;
-			sepNavSelRange = &quot;{359, 0}&quot;;
-			sepNavVisRange = &quot;{0, 613}&quot;;
+			sepNavIntBoundsRect = &quot;{{0, 0}, {808, 2608}}&quot;;
+			sepNavSelRange = &quot;{265, 0}&quot;;
+			sepNavVisRange = &quot;{0, 984}&quot;;
 			sepNavVisRect = &quot;{{0, 1832}, {1106, 778}}&quot;;
 		};
 	};
@@ -2512,9 +2519,9 @@
 	};
 	AA86BF320B6051FF00495786 /* IoCall.c */ = {
 		uiCtxt = {
-			sepNavIntBoundsRect = &quot;{{0, 0}, {845, 3696}}&quot;;
-			sepNavSelRange = &quot;{3496, 0}&quot;;
-			sepNavVisRange = &quot;{3226, 471}&quot;;
+			sepNavIntBoundsRect = &quot;{{0, 0}, {796, 3680}}&quot;;
+			sepNavSelRange = &quot;{4309, 0}&quot;;
+			sepNavVisRange = &quot;{3948, 882}&quot;;
 			sepNavVisRect = &quot;{{0, 168}, {776, 285}}&quot;;
 		};
 	};
@@ -2535,9 +2542,9 @@
 	};
 	AA86BF360B6051FF00495786 /* IoCollector.c */ = {
 		uiCtxt = {
-			sepNavIntBoundsRect = &quot;{{0, 0}, {3432, 2448}}&quot;;
-			sepNavSelRange = &quot;{1234, 0}&quot;;
-			sepNavVisRange = &quot;{612, 957}&quot;;
+			sepNavIntBoundsRect = &quot;{{0, 0}, {796, 2816}}&quot;;
+			sepNavSelRange = &quot;{178, 0}&quot;;
+			sepNavVisRange = &quot;{0, 1373}&quot;;
 		};
 	};
 	AA86BF370B6051FF00495786 /* IoCollector.h */ = {
@@ -2701,9 +2708,9 @@
 	};
 	AA86BF590B6051FF00495786 /* IoNumber.c */ = {
 		uiCtxt = {
-			sepNavIntBoundsRect = &quot;{{0, 0}, {845, 20448}}&quot;;
-			sepNavSelRange = &quot;{11379, 0}&quot;;
-			sepNavVisRange = &quot;{11020, 523}&quot;;
+			sepNavIntBoundsRect = &quot;{{0, 0}, {824, 19920}}&quot;;
+			sepNavSelRange = &quot;{20660, 0}&quot;;
+			sepNavVisRange = &quot;{20333, 1033}&quot;;
 			sepNavVisRect = &quot;{{0, 0}, {896, 726}}&quot;;
 		};
 	};
@@ -2770,8 +2777,9 @@
 	};
 	AA86BF680B6051FF00495786 /* IoSeq.c */ = {
 		uiCtxt = {
-			sepNavIntBoundsRect = &quot;{{0, 0}, {1084, 7164}}&quot;;
-			sepNavSelRange = &quot;{6792, 0}&quot;;
+			sepNavIntBoundsRect = &quot;{{0, 0}, {796, 6560}}&quot;;
+			sepNavSelRange = &quot;{122, 0}&quot;;
+			sepNavVisRange = &quot;{0, 720}&quot;;
 			sepNavVisRect = &quot;{{0, 5039}, {1084, 757}}&quot;;
 		};
 	};
@@ -2785,9 +2793,9 @@
 	};
 	AA86BF6A0B6051FF00495786 /* IoSeq_immutable.c */ = {
 		uiCtxt = {
-			sepNavIntBoundsRect = &quot;{{0, 0}, {872, 21392}}&quot;;
-			sepNavSelRange = &quot;{16426, 0}&quot;;
-			sepNavVisRange = &quot;{16108, 1075}&quot;;
+			sepNavIntBoundsRect = &quot;{{0, 0}, {896, 21616}}&quot;;
+			sepNavSelRange = &quot;{20335, 0}&quot;;
+			sepNavVisRange = &quot;{19732, 854}&quot;;
 			sepNavVisRect = &quot;{{0, 959}, {1084, 757}}&quot;;
 		};
 	};
@@ -2807,9 +2815,9 @@
 	};
 	AA86BF6D0B6051FF00495786 /* IoSeq_mutable.c */ = {
 		uiCtxt = {
-			sepNavIntBoundsRect = &quot;{{0, 0}, {1664, 18848}}&quot;;
-			sepNavSelRange = &quot;{28550, 6}&quot;;
-			sepNavVisRange = &quot;{28247, 631}&quot;;
+			sepNavIntBoundsRect = &quot;{{0, 0}, {1664, 18448}}&quot;;
+			sepNavSelRange = &quot;{28480, 0}&quot;;
+			sepNavVisRange = &quot;{28106, 958}&quot;;
 			sepNavVisRect = &quot;{{0, 6698}, {669, 544}}&quot;;
 		};
 	};
@@ -2894,9 +2902,9 @@
 	};
 	AA86BF820B6051FF00495786 /* IoSystem.c */ = {
 		uiCtxt = {
-			sepNavIntBoundsRect = &quot;{{0, 0}, {845, 8352}}&quot;;
-			sepNavSelRange = &quot;{28, 21}&quot;;
-			sepNavVisRange = &quot;{0, 483}&quot;;
+			sepNavIntBoundsRect = &quot;{{0, 0}, {796, 8896}}&quot;;
+			sepNavSelRange = &quot;{185, 0}&quot;;
+			sepNavVisRange = &quot;{0, 676}&quot;;
 		};
 	};
 	AA86BF830B6051FF00495786 /* IoSystem.h */ = {
@@ -3464,7 +3472,7 @@
 		isa = PBXTextBookmark;
 		fRef = AA86BF6A0B6051FF00495786 /* IoSeq_immutable.c */;
 		name = &quot;IoSeq_immutable.c: 651&quot;;
-		rLen = 473;
+		rLen = 469;
 		rLoc = 16427;
 		rType = 0;
 		vrLen = 730;
@@ -3551,7 +3559,7 @@
 		isa = PBXTextBookmark;
 		fRef = AA86BF6A0B6051FF00495786 /* IoSeq_immutable.c */;
 		name = &quot;IoSeq_immutable.c: 651&quot;;
-		rLen = 473;
+		rLen = 469;
 		rLoc = 16427;
 		rType = 0;
 		vrLen = 730;
@@ -5111,9 +5119,9 @@
 		fRef = AA7D60830B60123D00D7DEA9 /* IoRandom.c */;
 		name = &quot;IoRandom.c: 199&quot;;
 		rLen = 0;
-		rLoc = 4672;
+		rLoc = 4744;
 		rType = 0;
-		vrLen = 672;
+		vrLen = 669;
 		vrLoc = 4370;
 	};
 	AAED88090D51826800C067F4 /* PBXTextBookmark */ = {
@@ -5121,9 +5129,9 @@
 		fRef = AA7D60830B60123D00D7DEA9 /* IoRandom.c */;
 		name = &quot;IoRandom.c: 199&quot;;
 		rLen = 0;
-		rLoc = 4672;
+		rLoc = 4744;
 		rType = 0;
-		vrLen = 672;
+		vrLen = 669;
 		vrLoc = 4370;
 	};
 	AAED88E80D51FA8A00C067F4 /* PBXTextBookmark */ = {</diff>
      <filename>extras/osx/osx.xcodeproj/steve.pbxuser</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>ad0e9f888b15b8bfbf9c9639a2549309b8d35f8d</id>
    </parent>
  </parents>
  <author>
    <name>Steve Dekorte</name>
    <email>steve@StevesLaptop.local</email>
  </author>
  <url>http://github.com/stevedekorte/io/commit/ae0d695ed1d5a3db3b37206ef5900dcec9790d58</url>
  <id>ae0d695ed1d5a3db3b37206ef5900dcec9790d58</id>
  <committed-date>2008-02-07T04:46:21-08:00</committed-date>
  <authored-date>2008-02-07T04:46:21-08:00</authored-date>
  <message>launchPath fix for build.io and DBI doc updates</message>
  <tree>358a2923dfaa653df0285c194243def5db44c9d2</tree>
  <committer>
    <name>Steve Dekorte</name>
    <email>steve@StevesLaptop.local</email>
  </committer>
</commit>
