updated from upstream WPILib revision 3622

git-svn-id: https://robotics.mvla.net/svn/frc971/2013/trunk/src@4219 f308d9b7-e957-4cde-b6ac-9a88185e7312
diff --git a/aos/externals/WPILib/WPILib.a b/aos/externals/WPILib/WPILib.a
index 57584f3..27cc22f 100644
--- a/aos/externals/WPILib/WPILib.a
+++ b/aos/externals/WPILib/WPILib.a
Binary files differ
diff --git a/aos/externals/WPILib/WPILib/CANJaguar.cpp b/aos/externals/WPILib/WPILib/CANJaguar.cpp
index b0cc642..cf03370 100644
--- a/aos/externals/WPILib/WPILib/CANJaguar.cpp
+++ b/aos/externals/WPILib/WPILib/CANJaguar.cpp
@@ -43,16 +43,16 @@
 	if (StatusIsFatal())
 		return;
 	// 3330 was the first shipping RDK firmware version for the Jaguar
-	if (fwVer >= 3330 || fwVer < 92)
+	if (fwVer >= 3330 || fwVer < 101)
 	{
 		char buf[256];
 		if (fwVer < 3330)
 		{
-			snprintf(buf, 256, "Jag #%d firmware (%d) is too old (must be at least version 92 of the FIRST approved firmware)", m_deviceNumber, fwVer);
+			snprintf(buf, 256, "Jag #%d firmware (%d) is too old (must be at least version 101 of the FIRST approved firmware)", m_deviceNumber, fwVer);
 		}
 		else
 		{
-			snprintf(buf, 256, "Jag #%d firmware (%d) is not FIRST approved (must be at least version 92 of the FIRST approved firmware)", m_deviceNumber, fwVer);
+			snprintf(buf, 256, "Jag #%d firmware (%d) is not FIRST approved (must be at least version 101 of the FIRST approved firmware)", m_deviceNumber, fwVer);
 		}
 		wpi_setWPIErrorWithContext(JaguarVersionError, buf);
 		return;
diff --git a/aos/externals/WPILib/WPILib/Preferences.cpp b/aos/externals/WPILib/WPILib/Preferences.cpp
index c18df0b..e8c0109 100644
--- a/aos/externals/WPILib/WPILib/Preferences.cpp
+++ b/aos/externals/WPILib/WPILib/Preferences.cpp
@@ -44,9 +44,6 @@
 	m_readTask.Start((UINT32)this);
 	semTake(m_fileOpStarted, WAIT_FOREVER);
 
-	NetworkTable::GetTable(kTableName)->PutBoolean(kSaveField, false);
-	NetworkTable::GetTable(kTableName)->AddTableListener(this);
-
 	nUsageReporting::report(nUsageReporting::kResourceType_Preferences, 0);
 }
 
@@ -430,7 +427,7 @@
 			{
 				value = fgetc(file);
 			} while (value == ' ' || value == '\t');
-
+			
 			if (value == '\n' || value == ';')
 			{
 				if (value == '\n')
@@ -501,7 +498,7 @@
 				{
 					m_keys.push_back(name);
 					m_values.insert(std::pair<std::string, std::string>(name, value));
-					//NetworkTable::GetTable(kTableName)->PutString(name, value);
+					NetworkTable::GetTable(kTableName)->PutString(name, value);
 
 					if (!comment.empty())
 					{
@@ -525,6 +522,9 @@
 
 	if (!comment.empty())
 		m_endComment = comment;
+	
+	NetworkTable::GetTable(kTableName)->PutBoolean(kSaveField, false);
+	NetworkTable::GetTable(kTableName)->AddTableListener(this);
 }
 
 /**
diff --git a/aos/externals/WPILib/WPILib/networktables/NetworkTable.cpp b/aos/externals/WPILib/WPILib/networktables/NetworkTable.cpp
index 36ba63d..78dd4a4 100644
--- a/aos/externals/WPILib/WPILib/networktables/NetworkTable.cpp
+++ b/aos/externals/WPILib/WPILib/networktables/NetworkTable.cpp
@@ -53,7 +53,7 @@
 
 void NetworkTable::SetClientMode(){
 	CheckInit();
-	mode = &NetworkTableMode::Server;
+	mode = &NetworkTableMode::Client;
 }
 
 void NetworkTable::SetServerMode(){
diff --git a/aos/externals/WPILib/WPILib/networktables2/AbstractNetworkTableEntryStore.cpp b/aos/externals/WPILib/WPILib/networktables2/AbstractNetworkTableEntryStore.cpp
index 86088ac..c502432 100644
--- a/aos/externals/WPILib/WPILib/networktables2/AbstractNetworkTableEntryStore.cpp
+++ b/aos/externals/WPILib/WPILib/networktables2/AbstractNetworkTableEntryStore.cpp
@@ -9,7 +9,8 @@
 #include "networktables2/TableKeyExistsWithDifferentTypeException.h"
 #include <map>
 #include <vector>
-
+#include <iostream>
+#include <stdio.h>
 
 	AbstractNetworkTableEntryStore::AbstractNetworkTableEntryStore(TableListenerManager& lstnManager): 
 			listenerManager(lstnManager){
@@ -32,14 +33,23 @@
 	NetworkTableEntry* AbstractNetworkTableEntryStore::GetEntry(std::string& name){
 		{ 
 			Synchronized sync(LOCK);
-			return namedEntries[name];//TODO check for not existing
+			std::map<std::string, NetworkTableEntry*>::iterator value_itr = namedEntries.find(name);
+			if(value_itr != namedEntries.end()) {
+				return value_itr->second;
+			}
+			return NULL;
 		}
 	}
 	
 	NetworkTableEntry* AbstractNetworkTableEntryStore::GetEntry(EntryId entryId){
 		{ 
 			Synchronized sync(LOCK);
-			return idEntries[entryId];//TODO check for not existing
+			
+			std::map<EntryId, NetworkTableEntry*>::iterator value_itr = idEntries.find(entryId);
+			if(value_itr != idEntries.end()) {
+				return value_itr->second;
+			}
+			return NULL;
 		}
 	}
 	
@@ -112,8 +122,8 @@
 			Synchronized sync(LOCK);
 			std::map<std::string, NetworkTableEntry*>::iterator index = namedEntries.find(name);
 			NetworkTableEntry* tableEntry;
-			if(index == namedEntries.end() || namedEntries[name]==NULL)//if the name does not exist in the current entries
-			  {//TODO why doesn't find correctly detect that the entry does not exist
+			if(index == namedEntries.end())//if the name does not exist in the current entries
+			  {
 				tableEntry = new NetworkTableEntry(name, type, value);
 				if(addEntry(tableEntry))
 				{
@@ -123,7 +133,7 @@
 			}
 			else
 			{
-				tableEntry = namedEntries[name];
+				tableEntry = index->second;
 				if(tableEntry->GetType()->id != type->id){
 					throw TableKeyExistsWithDifferentTypeException(name, tableEntry->GetType());
 				}
@@ -155,7 +165,7 @@
 			NetworkTableEntry* tableEntry;
 			if(addEntry(entry)){
 				if(itr != namedEntries.end()){
-					tableEntry = namedEntries[entry->name];
+					tableEntry = itr->second;
 				}
 				else{
 					tableEntry = entry;
@@ -190,8 +200,8 @@
 			std::map<std::string, NetworkTableEntry*>::iterator itr;
 			for(itr = namedEntries.begin(); itr != namedEntries.end(); itr++)
 			{
-				NetworkTableEntry* entry = namedEntries[(*itr).first];//this may seem odd, but its so we get the address of the list element, rather than the copy stored in the itr
-				listener->ValueChanged(table, (*itr).first, entry->GetValue(), true);
+				NetworkTableEntry* entry = itr->second;
+				listener->ValueChanged(table, itr->first, entry->GetValue(), true);
 			}
 		}
 	}
diff --git a/aos/externals/WPILib/WPILib/networktables2/stream/SocketServerStreamProvider.cpp b/aos/externals/WPILib/WPILib/networktables2/stream/SocketServerStreamProvider.cpp
index 8450cda..b4bbc00 100644
--- a/aos/externals/WPILib/WPILib/networktables2/stream/SocketServerStreamProvider.cpp
+++ b/aos/externals/WPILib/WPILib/networktables2/stream/SocketServerStreamProvider.cpp
@@ -111,8 +111,8 @@
 				if (connectedSocket == ERROR)
 					return NULL;
 				
-				int on = 1;
-				setsockopt(connectedSocket, IPPROTO_TCP, TCP_NODELAY, (char *)&on, sizeof(on));
+				//int on = 1;
+				//setsockopt(connectedSocket, IPPROTO_TCP, TCP_NODELAY, (char *)&on, sizeof(on));
 				
 				return new FDIOStream(connectedSocket);
 			}
diff --git a/aos/externals/WPILib/WPILib/networktables2/stream/SocketStreamFactory.cpp b/aos/externals/WPILib/WPILib/networktables2/stream/SocketStreamFactory.cpp
index c3ac85c..1033998 100644
--- a/aos/externals/WPILib/WPILib/networktables2/stream/SocketStreamFactory.cpp
+++ b/aos/externals/WPILib/WPILib/networktables2/stream/SocketStreamFactory.cpp
@@ -59,8 +59,8 @@
     	return NULL;
     }//TODO close fd if an error occured
 
-	int on = 1;
-	setsockopt(sockfd, IPPROTO_TCP, TCP_NODELAY, (char *)&on, sizeof(on));
+	//int on = 1;
+	//setsockopt(sockfd, IPPROTO_TCP, TCP_NODELAY, (char *)&on, sizeof(on));
 
 	return new FDIOStream(sockfd);
 #endif