diff -Naur '--exclude=.svn' tango_726a.org/lib/cpp/server/deviceclass.cpp tango_726a/lib/cpp/server/deviceclass.cpp
--- tango_726a.org/lib/cpp/server/deviceclass.cpp	2011-06-22 13:12:10.581770005 +0200
+++ tango_726a/lib/cpp/server/deviceclass.cpp	2011-10-21 11:20:49.613103410 +0200
@@ -24,12 +24,12 @@
 // it under the terms of the GNU Lesser General Public License as published by
 // the Free Software Foundation, either version 3 of the License, or
 // (at your option) any later version.
-// 
+//
 // Tango is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 // GNU Lesser General Public License for more details.
-// 
+//
 // You should have received a copy of the GNU Lesser General Public License
 // along with Tango.  If not, see <http://www.gnu.org/licenses/>.
 //
@@ -217,8 +217,8 @@
 //+----------------------------------------------------------------------------
 //
 // method :		DeviceClass::DeviceClass(string &s)
-// 
-// description :	DeviceClass constructor. Protected method which will 
+//
+// description :	DeviceClass constructor. Protected method which will
 //			be called automatically by the compiler.
 //
 //-----------------------------------------------------------------------------
@@ -231,15 +231,15 @@
 //
 
 	ext = new DeviceClassExt;
-	
+
 //
 // Create the associated DbClass object
 //
 
 	db_class = new DbClass(name,Tango::Util::instance()->get_database());
-		
+
 //
-// initialise command_list with State, Status and Init 
+// initialise command_list with State, Status and Init
 //
 
 	try
@@ -264,9 +264,9 @@
 //
 // Retrieve basic class resource
 //
-	
+
 	get_class_system_resource();
-	
+
 //
 // Create the multi class attribute object
 //
@@ -278,13 +278,13 @@
 //
 
 	type = DescNotSet;
-			
+
 }
 
 //+----------------------------------------------------------------------------
 //
 // method :		DeviceClass::get_class_system_resource(string &s)
-// 
+//
 // description :	Method to retrieve some basic class resource(s)
 //			The resource to be retrived are :
 //				- The class doc URL
@@ -303,7 +303,7 @@
 	{
 		Database *db = tg->get_database();
 		DbData db_data;
-		
+
 		db_data.push_back(DbDatum("doc_url"));
 		db_data.push_back(DbDatum("cvs_tag"));
 		db_data.push_back(DbDatum("cvs_location"));
@@ -322,22 +322,22 @@
 					o.str(),
 					(const char *)"DeviceClass::get_class_system_resource");
 		}
-		
+
 		if (db_data[1].is_empty() == false)
 			db_data[1] >> ext->cvs_tag;
 		if (db_data[2].is_empty() == false)
 			db_data[2] >> ext->cvs_location;
-		
+
 //
 // Init allowed commands vector (in lowercase letters)
 //
-			
+
 		if (db_data[3].is_empty() == false)
 		{
 			db_data[3] >> allowed_cmds;
 			for_each(allowed_cmds.begin(),allowed_cmds.end(),lower_cmd_name);
 		}
-					
+
 		if (db_data[0].is_empty() == true)
 		{
 			cout4 << "doc_url property for class " << name << " is not defined in database" << endl;
@@ -346,15 +346,15 @@
 				db->get_class_property("Default",db_data,tg->get_db_cache());
 			}
 			catch (Tango::DevFailed &)
-			{			
+			{
 				TangoSys_OMemStream o;
 				o << "Database error while trying to retrieve properties for class " << name.c_str() << ends;
-					
+
 				Except::throw_exception((const char *)"API_DatabaseAccess",
 							o.str(),
 							(const char *)"DeviceClass::get_class_system_resource");
-			}			
-			
+			}
+
 			if (db_data[0].is_empty() == true)
 			{
 				doc_url = DefaultDocUrl;
@@ -364,22 +364,22 @@
 		}
 		else
 			db_data[0] >> doc_url;
-		
+
 	}
 	else
 	{
 		doc_url = DefaultDocUrl;
-	}	
+	}
 }
 
 //+----------------------------------------------------------------------------
 //
 // method : 		DeviceClass::set_memorized_values()
-// 
+//
 // description : 	Write the memorized attribute with the value
 //			stored in database
 //
-// in :			all : Flag set to true if memorized values must be 
+// in :			all : Flag set to true if memorized values must be
 //			      applied to all class devices
 //			idx : Index of the device in the device_list vector
 //			      of the device for which memorized values must
@@ -390,15 +390,15 @@
 void DeviceClass::set_memorized_values(bool all,long idx,bool from_init)
 {
 	cout4 << "Entering DeviceClass::set_memorized_values() method" << endl;
-	
+
 	short sh;
 	Tango::DevVarShortArray sh_seq(1);
 	sh_seq.length(1);
-						
+
 	Tango::DevLong lg;
 	Tango::DevVarLongArray lg_seq(1);
 	lg_seq.length(1);
-		
+
 	double db;
 	Tango::DevVarDoubleArray db_seq(1);
 	db_seq.length(1);
@@ -410,11 +410,11 @@
 	float fl;
 	Tango::DevVarFloatArray fl_seq(1);
 	fl_seq.length(1);
-						
+
 	Tango::DevBoolean boo;
 	Tango::DevVarBooleanArray boo_seq(1);
 	boo_seq.length(1);
-		
+
 	Tango::DevUShort ush;
 	Tango::DevVarUShortArray ush_seq(1);
 	ush_seq.length(1);
@@ -422,7 +422,19 @@
 	Tango::DevUChar uch;
 	Tango::DevVarCharArray uch_seq(1);
 	uch_seq.length(1);
-		
+
+	Tango::DevULong ulg;
+	Tango::DevVarULongArray ulg_seq(1);
+	ulg_seq.length(1);
+
+	Tango::DevLong64 lg64;
+	Tango::DevVarLong64Array lg64_seq(1);
+	lg64_seq.length(1);
+
+	Tango::DevULong64 ulg64;
+	Tango::DevVarULong64Array ulg64_seq(1);
+	ulg64_seq.length(1);
+
 //
 // Set loop start and stop limits
 //
@@ -438,7 +450,7 @@
 		start = idx;
 		stop = idx + 1;
 	}
-								
+
 	for (unsigned long i = start;i < stop;i++)
 	{
 
@@ -449,20 +461,20 @@
 
 		if (device_list[i]->get_dev_idl_version() < 3)
 			continue;
-				
+
 //
 // Get list of device writable attributes
 //
 
 		AttributeValueList att_val(10);
 		vector<long> &att_list = device_list[i]->get_device_attr()->get_w_attr_list();
-		
+
 		long nb_wr = 0;
 		for (unsigned long j = 0;j < att_list.size();j++)
 		{
-						
+
 			WAttribute &att = device_list[i]->get_device_attr()->get_w_attr_by_ind(att_list[j]);
-			
+
 			if (att.is_memorized() == true)
 			{
 
@@ -471,7 +483,7 @@
 				{
 					nb_wr++;
 					att_val.length(nb_wr);
-							
+
 //
 // In order to not send
 // a new time the already memorized value into db, mark it as not memorized
@@ -479,7 +491,7 @@
 //
 
 					att.set_memorized(false);
-					
+
 //
 // The memorized value gotten from db is a string, we need to convert this string
 // to its real type before inserting it into an Any
@@ -488,7 +500,7 @@
 					TangoSys_MemStream str;
 					if (from_init == false)
 						str << mem_value << ends;
-					
+
 					try
 					{
 						switch (att.get_data_type())
@@ -502,7 +514,7 @@
 							}
 							else
 								att.get_write_value(sh);
-							
+
 							sh_seq[0] = sh;
 							att_val[nb_wr - 1].value <<= sh_seq;
 							break;
@@ -516,7 +528,7 @@
 							}
 							else
 								att.get_write_value(lg);
-								
+
 							lg_seq[0] = lg;
 							att_val[nb_wr - 1].value <<= lg_seq;
 							break;
@@ -530,7 +542,7 @@
 							}
 							else
 								att.get_write_value(db);
-							
+
 							db_seq[0] = db;
 							att_val[nb_wr - 1].value <<= db_seq;
 							break;
@@ -539,7 +551,7 @@
 							if (from_init == false)
 							{
 								att.set_write_value(mem_value);
-							
+
 								str_seq[0] = CORBA::string_dup(mem_value.c_str());
 							}
 							else
@@ -559,7 +571,7 @@
 							}
 							else
 								att.get_write_value(fl);
-								
+
 							fl_seq[0] = fl;
 							att_val[nb_wr - 1].value <<= fl_seq;
 							break;
@@ -583,7 +595,7 @@
 							}
 							else
 								att.get_write_value(boo);
-							
+
 							boo_seq[0] = boo;
 							att_val[nb_wr - 1].value <<= boo_seq;
 							break;
@@ -597,7 +609,7 @@
 							}
 							else
 								att.get_write_value(ush);
-								
+
 							ush_seq[0] = ush;
 							att_val[nb_wr - 1].value <<= ush_seq;
 							break;
@@ -611,61 +623,103 @@
 							}
 							else
 								att.get_write_value(uch);
-								
+
 							uch_seq[0] = uch;
 							att_val[nb_wr - 1].value <<= uch_seq;
 							break;
+
+						case Tango::DEV_ULONG:
+							if (from_init == false)
+							{
+								if (!(str >> ulg))
+									throw_mem_value(device_list[i],att);
+								att.set_write_value(ulg);
+							}
+							else
+								att.get_write_value(ulg);
+
+							ulg_seq[0] = ulg;
+							att_val[nb_wr - 1].value <<= ulg_seq;
+							break;
+
+						case Tango::DEV_LONG64:
+							if (from_init == false)
+							{
+								if (!(str >> lg64))
+									throw_mem_value(device_list[i],att);
+								att.set_write_value(lg64);
+							}
+							else
+								att.get_write_value(lg64);
+
+							lg64_seq[0] = lg64;
+							att_val[nb_wr - 1].value <<= lg64_seq;
+							break;
+
+						case Tango::DEV_ULONG64:
+							if (from_init == false)
+							{
+								if (!(str >> ulg64))
+									throw_mem_value(device_list[i],att);
+								att.set_write_value(ulg64);
+							}
+							else
+								att.get_write_value(ulg64);
+
+							ulg64_seq[0] = ulg64;
+							att_val[nb_wr - 1].value <<= ulg64_seq;
+							break;
 						}
 
-//						
+//
 // Check the initialisation flag for memorized attributes.
 // The the flag is false, do not add the element to the att_val
 // vector. This avoids a call to write the memorozied value to the attribute.
 //
-					
+
 					if ( att.is_memorized_init() == false )
-						{
+                    {
 						nb_wr--;
 						att_val.length(nb_wr);
 						// reset memorized flag
 						att.set_memorized(true);
-						}
+                    }
 					else
-						{
+                    {
 //
 // Init the AttributeValue structure
 //
-					
+
 						att_val[nb_wr - 1].name = CORBA::string_dup(att.get_name().c_str());
 						att_val[nb_wr - 1].dim_x = 1;
-						att_val[nb_wr - 1].dim_y = 0;						
+						att_val[nb_wr - 1].dim_y = 0;
 						att_val[nb_wr - 1].quality = Tango::ATTR_VALID;
 						}
 					}
-						
+
 					catch (Tango::DevFailed &e)
 					{
 						cout3 << "Cannot configure setpoint value for memorized attribute " << att.get_name() << endl;
 						Tango::Except::print_exception(e);
-						
+
 						nb_wr--;
 						att_val.length(nb_wr);
 						// reset memorized flag
 						att.set_memorized(true);
-					}						
+					}
 				}
 			}
 		}
-			
-																	
+
+
 		if (nb_wr != 0)
 		{
-		
+
 //
 // Write attribute values. Re-throw exception if any but reset memorized flags before the
 // re-throw.
 //
-			
+
 			try
 			{
 				cout4 << "Writing data for " << att_val.length() << " attribute(s) for device " << device_list[i]->get_name() << endl;
@@ -686,7 +740,7 @@
 			catch (Tango::MultiDevFailed &e)
 			{
 				cout3 << "Cannot write setpoint(s) value for memorized attribute(s) " << device_list[i]->get_name() << endl;
-				
+
 				Tango::NamedDevFailedList e_list (e, device_list[i]->get_name(), (const char *)"DeviceClass::set_memorized_values()",
 					       			(const char *)"API_AttributeFailed");
 				Tango::Except::print_exception(e_list);
@@ -700,7 +754,7 @@
 				//	       			(const char *)"DeviceClass::set_memorized_values()",
 				//	       			(const char *)"API_AttributeFailed");
 			}
-						
+
 //
 // Reset memorized flags
 //
@@ -714,13 +768,13 @@
 	}
 
 	cout4 << "Leaving DeviceClass::set_memorized_values() method" << endl;
-	
+
 }
 
 //+----------------------------------------------------------------------------
 //
 // method : 		DeviceClass::throw_mem_value()
-// 
+//
 // description : 	Write the memorized attribute with the value
 //			stored in database
 //
@@ -729,13 +783,13 @@
 void DeviceClass::throw_mem_value(DeviceImpl *dev,Attribute &att)
 {
 	TangoSys_OMemStream o;
-	
+
 	o << "Memorized value for attribute ";
 	o << att.get_name();
 	o << " (device ";
 	o << dev->get_name();
 	o << ") is in an incorrect format !" << ends;
-	
+
 	Except::throw_exception((const char *)"API_AttrWrongMemValue",
 				o.str(),
 				(const char *)"DeviceClass::set_memorized_values");
@@ -744,7 +798,7 @@
 //+----------------------------------------------------------------------------
 //
 // method : 		DeviceClass::~DeviceClass(string &s)
-// 
+//
 // description :	DeviceClass destructor.
 //
 //-----------------------------------------------------------------------------
@@ -758,7 +812,7 @@
 //
 
 	delete db_class;
-		
+
 //
 // Destroy the device list
 //
@@ -771,8 +825,8 @@
 
 		unsigned long nb_dev = device_list.size();
 		for (i = 0;i < nb_dev;i++)
-		{	
-				
+		{
+
 //
 // Clear vectors used to memorize info used to clean db
 // in case of devices with dyn attr removed during device
@@ -787,21 +841,21 @@
 //
 // Delete device
 //
-					
+
 			delete_dev(0,tg,r_poa);
-					
+
 //
 // Clean-up db (dyn attribute)
 //
-					
+
 
 			if (tg->get_polled_dyn_attr_names().size() != 0)
-				tg->clean_attr_polled_prop();			
+				tg->clean_attr_polled_prop();
 			if (tg->get_all_dyn_attr_names().size() != 0)
 				tg->clean_dyn_attr_prop();
 
 			vector<DeviceImpl *>::iterator it = device_list.begin();
-			device_list.erase(it);		
+			device_list.erase(it);
 		}
 		device_list.clear();
 		CORBA::release(r_poa);
@@ -820,27 +874,27 @@
 //
 
 	delete class_attr;
-		
+
 //
 // Unregister the class from signal handler
 //
 
 	DServerSignal::instance()->unregister_class_signal(this);
-	
+
 //
 // Delete the class extension object
 //
 
 	delete ext;
-	
-	cout4 << "Leaving DeviceClass destructor for class " << name << endl;	
+
+	cout4 << "Leaving DeviceClass destructor for class " << name << endl;
 }
 
 
 //+----------------------------------------------------------------------------
 //
 // method : 		DeviceClass::delete_dev()
-// 
+//
 // description :	delete a device from the class device list
 //
 //-----------------------------------------------------------------------------
@@ -859,7 +913,7 @@
 	{
 		device_list[idx]->stop_polling(false);
 	}
-	
+
 //
 // Deactivate the CORBA object
 //
@@ -869,7 +923,7 @@
 
 	if (exported_device == true)
 		r_poa->deactivate_object(device_list[idx]->get_obj_id().in());
-			
+
 //
 // Remove the servant.
 // For C++ device, this will be automatically done by the POA when the last executing call
@@ -882,14 +936,14 @@
 		dev_3->delete_dev();
 	}
 
-	cout4 << "Leaving DeviceClass delete_dev" << endl;	
+	cout4 << "Leaving DeviceClass delete_dev" << endl;
 }
 
 
 //+-------------------------------------------------------------------------
 //
 // method :		DeviceClass::register_signal
-// 
+//
 // description :	Method to register a class on a signal. When the
 //			signal is sent to the process, the signal_handler
 //			method of this class will be executed
@@ -905,7 +959,7 @@
 	cout4 << "DeviceClass::register_signal() arrived for signal " << signo << endl;
 
 	DServerSignal::instance()->register_class_signal(signo,this);
-		
+
 	cout4 << "Leaving DeviceClass::register_signal method()" << endl;
 }
 #else
@@ -914,7 +968,7 @@
 	cout4 << "DeviceClass::register_signal() arrived for signal " << signo << endl;
 
 	DServerSignal::instance()->register_class_signal(signo,handler,this);
-		
+
 	cout4 << "Leaving DeviceClass::register_signal method()" << endl;
 }
 #endif
@@ -922,7 +976,7 @@
 //+-------------------------------------------------------------------------
 //
 // method :		DeviceClass::unregister_signal
-// 
+//
 // description :	Method to unregister a class on a signal.
 //
 // in : 		signo : The signal number
@@ -935,14 +989,14 @@
 	cout4 << "DeviceClass::unregister_signal() arrived for signal " << signo << endl;
 
 	DServerSignal::instance()->unregister_class_signal(signo,this);
-		
+
 	cout4 << "Leaving DeviceClass::unregister_signal method()" << endl;
 }
 
 //+-------------------------------------------------------------------------
 //
 // method :		DeviceClass::signal_handler
-// 
+//
 // description :	This is the signal handler for the class. This method
 //			is defined as virtual and therefore, can be redefined
 //			by DS programmers in their own classes derived from
@@ -955,7 +1009,7 @@
 void DeviceClass::signal_handler(long signo)
 {
 	cout4 << "DeviceClass::signal_handler() arrived for signal " << signo << endl;
-	
+
 	cout4 << "Leaving DeviceClass::signal_handler method()" << endl;
 }
 
@@ -963,8 +1017,8 @@
 //+-------------------------------------------------------------------------
 //
 // method :		DeviceClass::export_device()
-// 
-// description :	This method exports a device to the outside world. 
+//
+// description :	This method exports a device to the outside world.
 //			This is done by sending its CORBA network parameter
 //			(mainly the IOR) to the Tango database
 //
@@ -982,11 +1036,11 @@
 	cout4 << "DeviceClass::export_device() arrived" << endl;
 
 	Device_var d;
-		
+
 	if ((Tango::Util::_UseDb == true) && (Tango::Util::_FileDb == false))
 	{
-			
-// 
+
+//
 // Activate the CORBA object incarnated by the dev C++ object
 // Also call _remove_ref to give POA the full ownership of servant
 //
@@ -1020,11 +1074,11 @@
 	}
 	else
 	{
-	
+
 //
 // For server started without db usage (Mostly the database server). In this case,
 // it is necessary to create our own CORBA object id and to bind it into the
-// OOC Boot Manager for access through a stringified object reference 
+// OOC Boot Manager for access through a stringified object reference
 // constructed using the corbaloc style
 // The API will try to connect to device using lower case letters.
 // Register device in POA with lower case letters
@@ -1050,13 +1104,13 @@
 						o.str(),
 						(const char *)"DeviceClass::export_device");
 		}
-		
+
 		d = dev->_this();
-		dev->set_obj_id(id);		
+		dev->set_obj_id(id);
 		dev->set_d_var(Tango::Device::_duplicate(d));
-		dev->_remove_ref();	
+		dev->_remove_ref();
 	}
-			
+
 //
 // Prepare sent parameters and allocate mem for them
 //
@@ -1064,13 +1118,13 @@
 	if ((Tango::Util::_UseDb == true) && (Tango::Util::_FileDb == false))
 	{
 		Tango::Util *tg = Tango::Util::instance();
-		CORBA::ORB_ptr orb_ptr = tg->get_orb(); 
-		
+		CORBA::ORB_ptr orb_ptr = tg->get_orb();
+
 		char *s = orb_ptr->object_to_string(d);
 		string ior_string(s);
 
 		Tango::DbDevExportInfo exp;
-			
+
 		exp.name = dev->get_name();
 		exp.ior = ior_string;
 		exp.host = tg->get_host_name();
@@ -1082,7 +1136,7 @@
 // We are still in the server starting phase. Therefore, the db timeout is still high (13 sec the 07/01/2011)
 // with 3 retries in case of timeout
 //
-		
+
 		try
 		{
 			tg->get_database()->export_device(exp);
@@ -1094,17 +1148,17 @@
 			CORBA::string_free(s);
 			throw;
 		}
-		
+
 		CORBA::release(orb_ptr);
 		CORBA::string_free(s);
 	}
-	
+
 //
 // Set the DeviceImpl exported flag to true
 //
 
 	dev->set_exported_flag(true);
-			
+
 	cout4 << "Leaving DeviceClass::export_device method()" << endl;
 }
 
@@ -1112,7 +1166,7 @@
 //+----------------------------------------------------------------------------
 //
 // method :		DeviceClass::command_handler(string &s)
-// 
+//
 // description :	Command handler which is called by Device
 //			when a command is received. It will check
 //			to see if the command is implemented. If
@@ -1125,16 +1179,16 @@
 //-----------------------------------------------------------------------------
 
 CORBA::Any *DeviceClass::command_handler(DeviceImpl *device,string &command,const CORBA::Any &in_any)
-{	
+{
 	CORBA::Any *ret = NULL;
 	vector<Command *>::iterator i_cmd;
-	
+
 	string command_lower(command);
 
 	cout4 << "Entering DeviceClass::command_handler() method" << endl;
 
 	transform(command_lower.begin(),command_lower.end(),command_lower.begin(),::tolower);
-	
+
 	for (i_cmd = command_list.begin();i_cmd < command_list.end();++i_cmd)
 	{
 		if ((*i_cmd)->get_lower_name() == command_lower)
@@ -1170,20 +1224,20 @@
 
 	if (i_cmd == command_list.end())
 	{
-	
+
 		cout3 << "DeviceClass::command_handler(): command " << command << " not found" << endl;
 
 
 		Command *def_cmd = get_default_command();
 		if (def_cmd != NULL)
 		{
-		
+
 //
 // Set name in default command object
 //
 
 			def_cmd->set_name(command);
-					
+
 //
 // Call the always executed method
 //
@@ -1202,7 +1256,7 @@
 						o.str(),
 						(const char *)"DeviceClass::command_handler");
 			}
-	
+
 //
 // Execute command
 //
@@ -1212,9 +1266,9 @@
 		}
 		else
 		{
-		
-					
-//		
+
+
+//
 // Throw an exception to client
 //
 
@@ -1226,8 +1280,8 @@
 					      (const char *)"DeviceClass::command_handler");
 		}
 	}
-	
-	cout4 << "Leaving DeviceClass::command_handler() method" << endl;	
+
+	cout4 << "Leaving DeviceClass::command_handler() method" << endl;
 	return ret;
 }
 
@@ -1235,7 +1289,7 @@
 //+----------------------------------------------------------------------------
 //
 // method :		DeviceClass::add_wiz_dev_prop()
-// 
+//
 // description :	Method to add a device property definition for the
 //			device  wizard
 //
@@ -1254,7 +1308,7 @@
 
 	string name_low = p_name;
 	transform(name_low.begin(),name_low.end(),name_low.begin(),::tolower);
-	
+
 //
 // Check that this property is not already in the vector
 //
@@ -1267,7 +1321,7 @@
 		if (tmp_name == name_low)
 			break;
 	}
-	
+
 	if (ite != wiz_dev_prop.end())
 	{
 		TangoSys_OMemStream o;
@@ -1277,7 +1331,7 @@
 					o.str(),
 					(const char *)"DeviceClass::add_wiz_dev_prop");
 	}
-	
+
 //
 // Insert data in vector
 //
@@ -1299,7 +1353,7 @@
 //+----------------------------------------------------------------------------
 //
 // method :		DeviceClass::add_wiz_class_prop()
-// 
+//
 // description :	Method to add a class property definition for the
 //			device  wizard
 //
@@ -1317,7 +1371,7 @@
 
 	string name_low = p_name;
 	transform(name_low.begin(),name_low.end(),name_low.begin(),::tolower);
-	
+
 //
 // Check that this property is not already in the vector
 //
@@ -1340,7 +1394,7 @@
 					o.str(),
 					(const char *)"DeviceClass::add_wiz_dev_prop");
 	}
-	
+
 //
 // Insert data in vector
 //
@@ -1360,7 +1414,7 @@
 //+----------------------------------------------------------------------------
 //
 // method :		DeviceClass::device_destroyer
-// 
+//
 // description :	Method to remove and delete a device from the running devices
 //					belonging to the Tango class
 //
@@ -1370,27 +1424,27 @@
 
 void DeviceClass::device_destroyer(const string &dev_name)
 {
-	
+
 //
 // Check that the class know this device
 //
-  
-  	unsigned long k;				
+
+  	unsigned long k;
   	for (k = 0;k < device_list.size();k++)
   	{
   		if (device_list[k]->get_name() == dev_name)
   			break;
   	}
-  
+
   	if (k == device_list.size())
   	{
 		TangoSys_OMemStream o;
 		o << "Device " << dev_name << " not in Tango class device list!" << ends;
-		
+
   		Tango::Except::throw_exception((const char *)"API_CantDestroyDevice",o.str(),
   					       (const char *)"DeviceClass::device_destroyer");
   	}
-	
+
 //
 // Check if the device is polled
 // If yes, ask polling thread to stop polling it
@@ -1400,20 +1454,20 @@
 	{
 		device_list[k]->stop_polling();
 	}
-	
-			
+
+
 //
 // Delete the device
 //
- 
+
 	Tango::Util *tg = Tango::Util::instance();
-	 			
+
 	PortableServer::POA_ptr r_poa = tg->get_poa();
 	delete_dev(k,tg,r_poa);
 	vector<DeviceImpl *>::iterator it = device_list.begin();
 	it += k;
 	device_list.erase(it);
-	CORBA::release(r_poa);  	  				
+	CORBA::release(r_poa);
 }
 
 void DeviceClass::device_destroyer(const char *dev_name)
@@ -1425,8 +1479,8 @@
 //+----------------------------------------------------------------------------
 //
 // method :		DeviceClass::is_command_allowed
-// 
-// description :	Method to check if a command is allowed even if the device 
+//
+// description :	Method to check if a command is allowed even if the device
 //					is locked by another client. It follows the definition
 //					of the Tango control access system to define what is an
 //					allowed command
@@ -1438,14 +1492,14 @@
 bool DeviceClass::is_command_allowed(const char *cmd)
 {
 	bool ret = true;
-	
+
 	string tmp_cmd(cmd);
 	transform(tmp_cmd.begin(),tmp_cmd.end(),tmp_cmd.begin(),::tolower);
 
 	vector<string>::iterator pos = find(allowed_cmds.begin(),allowed_cmds.end(),tmp_cmd);
 	if (pos == allowed_cmds.end())
 		ret = false;
-	
+
 	return ret;
 }
 
diff -Naur '--exclude=.svn' tango_726a.org/lib/cpp/server/w_attribute.cpp tango_726a/lib/cpp/server/w_attribute.cpp
--- tango_726a.org/lib/cpp/server/w_attribute.cpp	2011-06-22 13:12:10.593770005 +0200
+++ tango_726a/lib/cpp/server/w_attribute.cpp	2011-10-21 11:24:05.965103251 +0200
@@ -25,12 +25,12 @@
 // it under the terms of the GNU Lesser General Public License as published by
 // the Free Software Foundation, either version 3 of the License, or
 // (at your option) any later version.
-// 
+//
 // Tango is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 // GNU Lesser General Public License for more details.
-// 
+//
 // You should have received a copy of the GNU Lesser General Public License
 // along with Tango.  If not, see <http://www.gnu.org/licenses/>.
 //
@@ -208,8 +208,8 @@
 //+-------------------------------------------------------------------------
 //
 // method : 		WAttribute::WAttribute
-// 
-// description : 	constructor for the WAttribute class from the 
+//
+// description : 	constructor for the WAttribute class from the
 //			attribute property vector, its type and the device
 //			name
 //
@@ -231,11 +231,11 @@
 
 	w_ext = new WAttributeExt();
 
-	
+
 //
 // Init some data
 //
-	
+
 	short_val = old_short_val = 0;
 	long_val = old_long_val = 0;
 	double_val = old_double_val = 0.0;
@@ -253,7 +253,7 @@
 	encoded_val.encoded_format = CORBA::string_dup("Not initialised");
 	old_encoded_val.encoded_data.length(0);
 	old_encoded_val.encoded_format = CORBA::string_dup("Not initialised");
-	
+
 	short_array_val.length(1);
 	short_array_val[0] = 0;
 	long_array_val.length(1);
@@ -278,8 +278,8 @@
 	w_ext->ulong64_array_val[0] = 0;
 	w_ext->state_array_val.length(1);
 	w_ext->state_array_val[0] = Tango::UNKNOWN;
-	
-				
+
+
 	short_ptr = &short_val;
 	w_dim_x = 1;
 	w_dim_y = 0;
@@ -288,10 +288,10 @@
 //
 // Init memorized field and eventually get the memorized value
 //
-	
+
 	set_memorized(tmp_attr.get_memorized());
 	set_memorized_init(tmp_attr.get_memorized_init());
-	
+
 	if (is_memorized() == true)
 	{
 		try
@@ -308,8 +308,8 @@
 //+-------------------------------------------------------------------------
 //
 // method : 		WAttribute::~WAttribute
-// 
-// description : 	destructor for the WAttribute class 
+//
+// description : 	destructor for the WAttribute class
 //
 //--------------------------------------------------------------------------
 
@@ -326,7 +326,7 @@
 //+-------------------------------------------------------------------------
 //
 // method : 		WAttribute::set_rvalue
-// 
+//
 // description : 	This method is used when a Writable attribute is
 //			set to set the value in the Attribute class. This
 //			is necessary for the read_attribute CORBA operation
@@ -347,63 +347,77 @@
 		else
 			set_value(const_cast<DevShort *>(short_array_val.get_buffer()),w_dim_x,w_dim_y,false);
 		break;
-		
+
 	case Tango::DEV_LONG:
 		if (data_format == Tango::SCALAR)
 			set_value(&long_val,1,0,false);
 		else
 			set_value(const_cast<DevLong *>(long_array_val.get_buffer()),w_dim_x,w_dim_y,false);
 		break;
-		
+
 	case Tango::DEV_LONG64:
 		if (data_format == Tango::SCALAR)
 			set_value(&w_ext->long64_val,1,0,false);
 		else
 			set_value(const_cast<DevLong64 *>(w_ext->long64_array_val.get_buffer()),w_dim_x,w_dim_y,false);
 		break;
-				
+
 	case Tango::DEV_DOUBLE:
 		if (data_format == Tango::SCALAR)
 			set_value(&double_val,1,0,false);
 		else
 			set_value(const_cast<DevDouble *>(double_array_val.get_buffer()),w_dim_x,w_dim_y,false);
 		break;
-		
+
 	case Tango::DEV_STRING:
 		if (data_format == Tango::SCALAR)
 			set_value(&str_val,1,0,false);
 		else
 			set_value(const_cast<DevString *>(str_array_val.get_buffer()),w_dim_x,w_dim_y,false);
 		break;
-		
+
 	case Tango::DEV_FLOAT:
 		if (data_format == Tango::SCALAR)
 			set_value(&float_val,1,0,false);
 		else
 			set_value(const_cast<DevFloat *>(float_array_val.get_buffer()),w_dim_x,w_dim_y,false);
 		break;
-		
+
 	case Tango::DEV_BOOLEAN:
 		if (data_format == Tango::SCALAR)
 			set_value(&boolean_val,1,0,false);
 		else
 			set_value(const_cast<DevBoolean *>(boolean_array_val.get_buffer()),w_dim_x,w_dim_y,false);
 		break;
-				
+
 	case Tango::DEV_USHORT:
 		if (data_format == Tango::SCALAR)
 			set_value(&ushort_val,1,0,false);
 		else
 			set_value(const_cast<DevUShort *>(ushort_array_val.get_buffer()),w_dim_x,w_dim_y,false);
 		break;
-		
+
 	case Tango::DEV_UCHAR:
 		if (data_format == Tango::SCALAR)
 			set_value(&uchar_val,1,0,false);
 		else
 			set_value(const_cast<DevUChar *>(uchar_array_val.get_buffer()),w_dim_x,w_dim_y,false);
 		break;
-		
+
+	case Tango::DEV_ULONG:
+		if (data_format == Tango::SCALAR)
+			set_value(&w_ext->ulong_val,1,0,false);
+		else
+			set_value(const_cast<DevULong *>(w_ext->ulong_array_val.get_buffer()),w_dim_x,w_dim_y,false);
+		break;
+
+	case Tango::DEV_ULONG64:
+		if (data_format == Tango::SCALAR)
+			set_value(&w_ext->ulong64_val,1,0,false);
+		else
+			set_value(const_cast<DevULong64 *>(w_ext->ulong64_array_val.get_buffer()),w_dim_x,w_dim_y,false);
+		break;
+
 	case Tango::DEV_ENCODED:
 		set_value(&encoded_val,1,0,false);
 		break;
@@ -413,7 +427,7 @@
 //+-------------------------------------------------------------------------
 //
 // method : 		WAttribute::check_written_value
-// 
+//
 // description : 	Check the value sent by the caller and copy incoming data
 //					for SCALAR attribute only
 //
@@ -425,11 +439,11 @@
 {
 	CORBA::ULong nb_data;
 	unsigned long i;
-	
+
 	switch (data_type)
 	{
 	case Tango::DEV_SHORT :
-	
+
 //
 // Check data type inside the any and data number
 //
@@ -438,7 +452,7 @@
 		if ((any >>= sh_ptr) == false)
 		{
 			TangoSys_OMemStream o;
-	
+
 			o << "Incompatible attribute type, expected type is : Tango::DevVarShortArray (even for single value)" << ends;
 			Except::throw_exception((const char *)"API_IncompatibleAttrDataType",
 					      o.str(),
@@ -460,11 +474,11 @@
 			{
 				Except::throw_exception((const char *)"API_AttrIncorrectDataNumber",
 					        (const char *)"Incorrect data number",
-					        (const char *)"WAttribute::check_written_value()");			
+					        (const char *)"WAttribute::check_written_value()");
 			}
 		}
-		
-		
+
+
 //
 // Check the incoming value against min or max_value if needed
 //
@@ -476,7 +490,7 @@
 				if ((*sh_ptr)[i] < min_value.sh)
 				{
 					TangoSys_OMemStream o;
-	
+
 					o << "Set value for attribute " << name;
 					o << " is below the minimum authorized (at least element " << i << ")" << ends;
 					Except::throw_exception((const char *)"API_WAttrOutsideLimit",
@@ -492,7 +506,7 @@
 				if ((*sh_ptr)[i] > max_value.sh)
 				{
 					TangoSys_OMemStream o;
-	
+
 					o << "Set value for attribute " << name;
 					o << " is above the maximum authorized (at least element " << i << ")" << ends;
 					Except::throw_exception((const char *)"API_WAttrOutsideLimit",
@@ -505,7 +519,7 @@
 		short_ptr = sh_ptr->get_buffer();
 		if (data_format == Tango::SCALAR)
 		{
-			old_short_val = short_val;		
+			old_short_val = short_val;
 			short_val = (*sh_ptr)[0];
 			w_dim_x = 1;
 			w_dim_y = 0;
@@ -515,11 +529,11 @@
 			w_dim_x = x;
 			w_dim_y = y;
 		}
-		
+
 		break;
-		
+
 	case Tango::DEV_LONG :
-	
+
 //
 // Check data type inside the any
 //
@@ -550,10 +564,10 @@
 			{
 				Except::throw_exception((const char *)"API_AttrIncorrectDataNumber",
 					        (const char *)"Incorrect data number",
-					        (const char *)"WAttribute::check_written_value()");			
+					        (const char *)"WAttribute::check_written_value()");
 			}
 		}
-		
+
 //
 // Check the incoming value
 //
@@ -565,7 +579,7 @@
 				if ((*lg_ptr)[i] < min_value.lg)
 				{
 					TangoSys_OMemStream o;
-	
+
 					o << "Set value for attribute " << name;
 					o << " is below the minimum authorized (at least element " << i << ")" << ends;
 					Except::throw_exception((const char *)"API_WAttrOutsideLimit",
@@ -581,7 +595,7 @@
 				if ((*lg_ptr)[i] > max_value.lg)
 				{
 					TangoSys_OMemStream o;
-	
+
 					o << "Set value for attribute " << name;
 					o << " is above the maximum authorized (at least element " << i << ")" << ends;
 					Except::throw_exception((const char *)"API_WAttrOutsideLimit",
@@ -594,7 +608,7 @@
 		long_ptr = lg_ptr->get_buffer();
 		if (data_format == Tango::SCALAR)
 		{
-			old_long_val = long_val;		
+			old_long_val = long_val;
 			long_val = (*lg_ptr)[0];
 			w_dim_x = 1;
 			w_dim_y = 0;
@@ -606,10 +620,10 @@
 		}
 
 		break;
-		
-		
+
+
 	case Tango::DEV_LONG64 :
-	
+
 //
 // Check data type inside the any
 //
@@ -640,10 +654,10 @@
 			{
 				Except::throw_exception((const char *)"API_AttrIncorrectDataNumber",
 					        (const char *)"Incorrect data number",
-					        (const char *)"WAttribute::check_written_value()");			
+					        (const char *)"WAttribute::check_written_value()");
 			}
 		}
-		
+
 //
 // Check the incoming value
 //
@@ -655,7 +669,7 @@
 				if ((*lg64_ptr)[i] < min_value.lg64)
 				{
 					TangoSys_OMemStream o;
-	
+
 					o << "Set value for attribute " << name;
 					o << " is below the minimum authorized (at least element " << i << ")" << ends;
 					Except::throw_exception((const char *)"API_WAttrOutsideLimit",
@@ -671,7 +685,7 @@
 				if ((*lg64_ptr)[i] > max_value.lg64)
 				{
 					TangoSys_OMemStream o;
-	
+
 					o << "Set value for attribute " << name;
 					o << " is above the maximum authorized (at least element " << i << ")" << ends;
 					Except::throw_exception((const char *)"API_WAttrOutsideLimit",
@@ -684,7 +698,7 @@
 		w_ext->long64_ptr = lg64_ptr->get_buffer();
 		if (data_format == Tango::SCALAR)
 		{
-			w_ext->old_long64_val = w_ext->long64_val;		
+			w_ext->old_long64_val = w_ext->long64_val;
 			w_ext->long64_val = (*lg64_ptr)[0];
 			w_dim_x = 1;
 			w_dim_y = 0;
@@ -696,9 +710,9 @@
 		}
 
 		break;
-		
+
 	case Tango::DEV_DOUBLE :
-	
+
 //
 // Check data type inside the any
 //
@@ -707,7 +721,7 @@
 		if ((any >>= db_ptr) == false)
 		{
 			TangoSys_OMemStream o;
-	
+
 			o << "Incompatible attribute type, expected type is : Tango::DevVarDoubleArray (even for single value)" << ends;
 			Except::throw_exception((const char *)"API_IncompatibleAttrDataType",
 					      o.str(),
@@ -729,10 +743,10 @@
 			{
 				Except::throw_exception((const char *)"API_AttrIncorrectDataNumber",
 					        (const char *)"Incorrect data number",
-					        (const char *)"WAttribute::check_written_value()");			
+					        (const char *)"WAttribute::check_written_value()");
 			}
 		}
-				
+
 //
 // Check the incoming value
 //
@@ -744,7 +758,7 @@
 				if ((*db_ptr)[i] < min_value.db)
 				{
 					TangoSys_OMemStream o;
-	
+
 					o << "Set value for attribute " << name;
 					o << " is below the minimum authorized (at least element " << i << ")" << ends;
 					Except::throw_exception((const char *)"API_WAttrOutsideLimit",
@@ -760,7 +774,7 @@
 				if ((*db_ptr)[i] > max_value.db)
 				{
 					TangoSys_OMemStream o;
-	
+
 					o << "Set value for attribute " << name;
 					o << " is above the maximum authorized (at least element " << i << ")" << ends;
 					Except::throw_exception((const char *)"API_WAttrOutsideLimit",
@@ -768,12 +782,12 @@
 						      (const char *)"WAttribute::check_written_value()");
 				}
 			}
-		}		
+		}
 
 		double_ptr = db_ptr->get_buffer();
 		if (data_format == Tango::SCALAR)
 		{
-			old_double_val = double_val;		
+			old_double_val = double_val;
 			double_val = (*db_ptr)[0];
 			w_dim_x = 1;
 			w_dim_y = 0;
@@ -784,7 +798,7 @@
 			w_dim_y = y;
 		}
 		break;
-		
+
 	case Tango::DEV_STRING :
 
 //
@@ -795,7 +809,7 @@
 		if ((any >>= string_ptr) == false)
 		{
 			TangoSys_OMemStream o;
-	
+
 			o << "Incompatible attribute type, expected type is : Tango::DevVarStringArray (even for single value)" << ends;
 			Except::throw_exception((const char *)"API_IncompatibleAttrDataType",
 					      o.str(),
@@ -817,7 +831,7 @@
 			{
 				Except::throw_exception((const char *)"API_AttrIncorrectDataNumber",
 					        (const char *)"Incorrect data number",
-					        (const char *)"WAttribute::check_written_value()");			
+					        (const char *)"WAttribute::check_written_value()");
 			}
 		}
 
@@ -828,7 +842,7 @@
 			CORBA::string_free(old_str_val);
 			old_str_val = CORBA::string_dup(str_val);
 			CORBA::string_free(str_val);
-			
+
 			str_val = CORBA::string_dup((*string_ptr)[0]);
 			w_dim_x = 1;
 			w_dim_y = 0;
@@ -837,11 +851,11 @@
 		{
 			w_dim_x = x;
 			w_dim_y = y;
-		}			
+		}
 		break;
-		
+
 	case Tango::DEV_FLOAT :
-	
+
 //
 // Check data type inside the any
 //
@@ -850,7 +864,7 @@
 		if ((any >>= fl_ptr) == false)
 		{
 			TangoSys_OMemStream o;
-	
+
 			o << "Incompatible attribute type, expected type is : Tango::DevVarFloatArray (even for single value)" << ends;
 			Except::throw_exception((const char *)"API_IncompatibleAttrDataType",
 					      o.str(),
@@ -872,10 +886,10 @@
 			{
 				Except::throw_exception((const char *)"API_AttrIncorrectDataNumber",
 					        (const char *)"Incorrect data number",
-					        (const char *)"WAttribute::check_written_value()");			
+					        (const char *)"WAttribute::check_written_value()");
 			}
 		}
-				
+
 //
 // Check the incoming value
 //
@@ -887,7 +901,7 @@
 				if ((*fl_ptr)[i] < min_value.fl)
 				{
 					TangoSys_OMemStream o;
-	
+
 					o << "Set value for attribute " << name;
 					o << " is below the minimum authorized (at least element " << i << ")" << ends;
 					Except::throw_exception((const char *)"API_WAttrOutsideLimit",
@@ -903,7 +917,7 @@
 				if ((*fl_ptr)[i] > max_value.fl)
 				{
 					TangoSys_OMemStream o;
-	
+
 					o << "Set value for attribute " << name;
 					o << " is above the maximum authorized (at least element " << i << ")" << ends;
 					Except::throw_exception((const char *)"API_WAttrOutsideLimit",
@@ -911,12 +925,12 @@
 						      (const char *)"WAttribute::check_written_value()");
 				}
 			}
-		}		
+		}
 
 		float_ptr = fl_ptr->get_buffer();
 		if (data_format == Tango::SCALAR)
 		{
-			old_float_val = float_val;		
+			old_float_val = float_val;
 			float_val = (*fl_ptr)[0];
 			w_dim_x = 1;
 			w_dim_y = 0;
@@ -927,9 +941,9 @@
 			w_dim_y = y;
 		}
 		break;
-		
+
 	case Tango::DEV_USHORT :
-	
+
 //
 // Check data type inside the any
 //
@@ -938,7 +952,7 @@
 		if ((any >>= ush_ptr) == false)
 		{
 			TangoSys_OMemStream o;
-	
+
 			o << "Incompatible attribute type, expected type is : Tango::DevVarUShortArray (even for single value)" << ends;
 			Except::throw_exception((const char *)"API_IncompatibleAttrDataType",
 					      o.str(),
@@ -960,10 +974,10 @@
 			{
 				Except::throw_exception((const char *)"API_AttrIncorrectDataNumber",
 					        (const char *)"Incorrect data number",
-					        (const char *)"WAttribute::check_written_value()");			
+					        (const char *)"WAttribute::check_written_value()");
 			}
 		}
-				
+
 //
 // Check the incoming value
 //
@@ -975,7 +989,7 @@
 				if ((*ush_ptr)[i] < min_value.ush)
 				{
 					TangoSys_OMemStream o;
-	
+
 					o << "Set value for attribute " << name;
 					o << " is below the minimum authorized (at least element " << i << ")" << ends;
 					Except::throw_exception((const char *)"API_WAttrOutsideLimit",
@@ -991,7 +1005,7 @@
 				if ((*ush_ptr)[i] > max_value.ush)
 				{
 					TangoSys_OMemStream o;
-	
+
 					o << "Set value for attribute " << name;
 					o << " is above the maximum authorized (at least element " << i << ")" << ends;
 					Except::throw_exception((const char *)"API_WAttrOutsideLimit",
@@ -999,12 +1013,12 @@
 						      (const char *)"WAttribute::check_written_value()");
 				}
 			}
-		}		
+		}
 
 		ushort_ptr = ush_ptr->get_buffer();
 		if (data_format == Tango::SCALAR)
 		{
-			old_ushort_val = ushort_val;		
+			old_ushort_val = ushort_val;
 			ushort_val = (*ush_ptr)[0];
 			w_dim_x = 1;
 			w_dim_y = 0;
@@ -1015,9 +1029,9 @@
 			w_dim_y = y;
 		}
 		break;
-		
+
 	case Tango::DEV_UCHAR :
-	
+
 //
 // Check data type inside the any
 //
@@ -1026,7 +1040,7 @@
 		if ((any >>= uch_ptr) == false)
 		{
 			TangoSys_OMemStream o;
-	
+
 			o << "Incompatible attribute type, expected type is : Tango::DevVarCharArray (even for single value)" << ends;
 			Except::throw_exception((const char *)"API_IncompatibleAttrDataType",
 					      o.str(),
@@ -1048,10 +1062,10 @@
 			{
 				Except::throw_exception((const char *)"API_AttrIncorrectDataNumber",
 					        (const char *)"Incorrect data number",
-					        (const char *)"WAttribute::check_written_value()");			
+					        (const char *)"WAttribute::check_written_value()");
 			}
 		}
-				
+
 //
 // Check the incoming value
 //
@@ -1063,7 +1077,7 @@
 				if ((*uch_ptr)[i] < min_value.uch)
 				{
 					TangoSys_OMemStream o;
-	
+
 					o << "Set value for attribute " << name;
 					o << " is below the minimum authorized (at least element " << i << ")" << ends;
 					Except::throw_exception((const char *)"API_WAttrOutsideLimit",
@@ -1079,7 +1093,7 @@
 				if ((*uch_ptr)[i] > max_value.uch)
 				{
 					TangoSys_OMemStream o;
-	
+
 					o << "Set value for attribute " << name;
 					o << " is above the maximum authorized (at least element " << i << ")" << ends;
 					Except::throw_exception((const char *)"API_WAttrOutsideLimit",
@@ -1087,12 +1101,12 @@
 						      (const char *)"WAttribute::check_written_value()");
 				}
 			}
-		}		
+		}
 
 		uchar_ptr = uch_ptr->get_buffer();
 		if (data_format == Tango::SCALAR)
 		{
-			old_uchar_val = uchar_val;		
+			old_uchar_val = uchar_val;
 			uchar_val = (*uch_ptr)[0];
 			w_dim_x = 1;
 			w_dim_y = 0;
@@ -1103,9 +1117,187 @@
 			w_dim_y = y;
 		}
 		break;
-		
+
+	case Tango::DEV_ULONG :
+
+//
+// Check data type inside the any
+//
+
+		const Tango::DevVarULongArray *ulo_ptr;
+		if ((any >>= ulo_ptr) == false)
+		{
+			TangoSys_OMemStream o;
+
+			o << "Incompatible attribute type, expected type is : Tango::DevVarULongArray (even for single value)" << ends;
+			Except::throw_exception((const char *)"API_IncompatibleAttrDataType",
+					      o.str(),
+					      (const char *)"WAttribute::check_written_value()");
+		}
+		nb_data = ulo_ptr->length();
+		if (y == 0)
+		{
+			if (nb_data != x)
+			{
+				Except::throw_exception((const char *)"API_AttrIncorrectDataNumber",
+					        (const char *)"Incorrect data number",
+					        (const char *)"WAttribute::check_written_value()");
+			}
+		}
+		else
+		{
+			if (nb_data != (x * y))
+			{
+				Except::throw_exception((const char *)"API_AttrIncorrectDataNumber",
+					        (const char *)"Incorrect data number",
+					        (const char *)"WAttribute::check_written_value()");
+			}
+		}
+
+//
+// Check the incoming value
+//
+
+		if (check_min_value == true)
+		{
+			for (i = 0;i < nb_data;i++)
+			{
+				if ((*ulo_ptr)[i] < min_value.ulg)
+				{
+					TangoSys_OMemStream o;
+
+					o << "Set value for attribute " << name;
+					o << " is below the minimum authorized (at least element " << i << ")" << ends;
+					Except::throw_exception((const char *)"API_WAttrOutsideLimit",
+						      o.str(),
+						      (const char *)"WAttribute::check_written_value()");
+				}
+			}
+		}
+		if (check_max_value == true)
+		{
+			for (i = 0;i < nb_data;i++)
+			{
+				if ((*ulo_ptr)[i] > max_value.ulg)
+				{
+					TangoSys_OMemStream o;
+
+					o << "Set value for attribute " << name;
+					o << " is above the maximum authorized (at least element " << i << ")" << ends;
+					Except::throw_exception((const char *)"API_WAttrOutsideLimit",
+						      o.str(),
+						      (const char *)"WAttribute::check_written_value()");
+				}
+			}
+		}
+
+		w_ext->ulong_ptr = ulo_ptr->get_buffer();
+		if (data_format == Tango::SCALAR)
+		{
+			w_ext->old_ulong_val = w_ext->ulong_val;
+			w_ext->ulong_val = (*ulo_ptr)[0];
+			w_dim_x = 1;
+			w_dim_y = 0;
+		}
+		else
+		{
+			w_dim_x = x;
+			w_dim_y = y;
+		}
+		break;
+
+	case Tango::DEV_ULONG64 :
+
+//
+// Check data type inside the any
+//
+
+		const Tango::DevVarULong64Array *ulg64_ptr;
+		if ((any >>= ulg64_ptr) == false)
+		{
+			TangoSys_OMemStream o;
+
+			o << "Incompatible attribute type, expected type is : Tango::DevVarULong64Array (even for single value)" << ends;
+			Except::throw_exception((const char *)"API_IncompatibleAttrDataType",
+					      o.str(),
+					      (const char *)"WAttribute::check_written_value()");
+		}
+		nb_data = ulg64_ptr->length();
+		if (y == 0)
+		{
+			if (nb_data != x)
+			{
+				Except::throw_exception((const char *)"API_AttrIncorrectDataNumber",
+					        (const char *)"Incorrect data number",
+					        (const char *)"WAttribute::check_written_value()");
+			}
+		}
+		else
+		{
+			if (nb_data != (x * y))
+			{
+				Except::throw_exception((const char *)"API_AttrIncorrectDataNumber",
+					        (const char *)"Incorrect data number",
+					        (const char *)"WAttribute::check_written_value()");
+			}
+		}
+
+//
+// Check the incoming value
+//
+
+		if (check_min_value == true)
+		{
+			for (i = 0;i < nb_data;i++)
+			{
+				if ((*ulg64_ptr)[i] < min_value.ulg64)
+				{
+					TangoSys_OMemStream o;
+
+					o << "Set value for attribute " << name;
+					o << " is below the minimum authorized (at least element " << i << ")" << ends;
+					Except::throw_exception((const char *)"API_WAttrOutsideLimit",
+						      o.str(),
+						      (const char *)"WAttribute::check_written_value()");
+				}
+			}
+		}
+		if (check_max_value == true)
+		{
+			for (i = 0;i < nb_data;i++)
+			{
+				if ((*ulg64_ptr)[i] > max_value.ulg64)
+				{
+					TangoSys_OMemStream o;
+
+					o << "Set value for attribute " << name;
+					o << " is above the maximum authorized (at least element " << i << ")" << ends;
+					Except::throw_exception((const char *)"API_WAttrOutsideLimit",
+						      o.str(),
+						      (const char *)"WAttribute::check_written_value()");
+				}
+			}
+		}
+
+		w_ext->ulong64_ptr = ulg64_ptr->get_buffer();
+		if (data_format == Tango::SCALAR)
+		{
+			w_ext->old_ulong64_val = w_ext->ulong64_val;
+			w_ext->ulong64_val = (*ulg64_ptr)[0];
+			w_dim_x = 1;
+			w_dim_y = 0;
+		}
+		else
+		{
+			w_dim_x = x;
+			w_dim_y = y;
+		}
+
+		break;
+
+
 	case Tango::DEV_BOOLEAN :
-	
+
 //
 // Check data type inside the any
 //
@@ -1114,7 +1306,7 @@
 		if ((any >>= boo_ptr) == false)
 		{
 			TangoSys_OMemStream o;
-	
+
 			o << "Incompatible attribute type, expected type is : Tango::DevVarBooleanArray (even for single value)" << ends;
 			Except::throw_exception((const char *)"API_IncompatibleAttrDataType",
 					      o.str(),
@@ -1136,14 +1328,14 @@
 			{
 				Except::throw_exception((const char *)"API_AttrIncorrectDataNumber",
 					        (const char *)"Incorrect data number",
-					        (const char *)"WAttribute::check_written_value()");			
+					        (const char *)"WAttribute::check_written_value()");
 			}
-		}	
+		}
 
 		boolean_ptr = boo_ptr->get_buffer();
 		if (data_format == Tango::SCALAR)
 		{
-			old_boolean_val = boolean_val;		
+			old_boolean_val = boolean_val;
 			boolean_val = (*boo_ptr)[0];
 			w_dim_x = 1;
 			w_dim_y = 0;
@@ -1166,7 +1358,7 @@
 	{
 	case Tango::DEV_SHORT :
 		{
-	
+
 //
 // Check data type inside the union and data number
 //
@@ -1198,11 +1390,11 @@
 				{
 					Except::throw_exception((const char *)"API_AttrIncorrectDataNumber",
 					        	(const char *)"Incorrect data number",
-					        	(const char *)"WAttribute::check_written_value()");			
+					        	(const char *)"WAttribute::check_written_value()");
 				}
 			}
-		
-		
+
+
 //
 // Check the incoming value against min or max_value if needed
 //
@@ -1243,7 +1435,7 @@
 			short_ptr = sh_seq.get_buffer();
 			if (data_format == Tango::SCALAR)
 			{
-				old_short_val = short_val;		
+				old_short_val = short_val;
 				short_val = sh_seq[0];
 				w_dim_x = 1;
 				w_dim_y = 0;
@@ -1257,7 +1449,7 @@
 		break;
 
 	case Tango::DEV_LONG :
-		{	
+		{
 //
 // Check data type inside the union
 //
@@ -1288,10 +1480,10 @@
 				{
 					Except::throw_exception((const char *)"API_AttrIncorrectDataNumber",
 					        	(const char *)"Incorrect data number",
-					        	(const char *)"WAttribute::check_written_value()");			
+					        	(const char *)"WAttribute::check_written_value()");
 				}
 			}
-		
+
 //
 // Check the incoming value
 //
@@ -1332,7 +1524,7 @@
 			long_ptr = lg_seq.get_buffer();
 			if (data_format == Tango::SCALAR)
 			{
-				old_long_val = long_val;		
+				old_long_val = long_val;
 				long_val = lg_seq[0];
 				w_dim_x = 1;
 				w_dim_y = 0;
@@ -1344,10 +1536,10 @@
 			}
 		}
 		break;
-		
-		
+
+
 	case Tango::DEV_LONG64 :
-		{	
+		{
 //
 // Check data type inside the union
 //
@@ -1378,10 +1570,10 @@
 				{
 					Except::throw_exception((const char *)"API_AttrIncorrectDataNumber",
 					        	(const char *)"Incorrect data number",
-					        	(const char *)"WAttribute::check_written_value()");			
+					        	(const char *)"WAttribute::check_written_value()");
 				}
 			}
-		
+
 //
 // Check the incoming value
 //
@@ -1422,7 +1614,7 @@
 			w_ext->long64_ptr = lg64_seq.get_buffer();
 			if (data_format == Tango::SCALAR)
 			{
-				w_ext->old_long64_val = w_ext->long64_val;		
+				w_ext->old_long64_val = w_ext->long64_val;
 				w_ext->long64_val = lg64_seq[0];
 				w_dim_x = 1;
 				w_dim_y = 0;
@@ -1434,9 +1626,9 @@
 			}
 		}
 		break;
-		
+
 	case Tango::DEV_DOUBLE :
-		{	
+		{
 //
 // Check data type inside the union
 //
@@ -1467,10 +1659,10 @@
 				{
 					Except::throw_exception((const char *)"API_AttrIncorrectDataNumber",
 					        	(const char *)"Incorrect data number",
-					        	(const char *)"WAttribute::check_written_value()");			
+					        	(const char *)"WAttribute::check_written_value()");
 				}
 			}
-				
+
 //
 // Check the incoming value
 //
@@ -1506,12 +1698,12 @@
 						    	  (const char *)"WAttribute::check_written_value()");
 					}
 				}
-			}		
+			}
 
 			double_ptr = db_seq.get_buffer();
 			if (data_format == Tango::SCALAR)
 			{
-				old_double_val = double_val;		
+				old_double_val = double_val;
 				double_val = db_seq[0];
 				w_dim_x = 1;
 				w_dim_y = 0;
@@ -1523,7 +1715,7 @@
 			}
 		}
 		break;
-		
+
 	case Tango::DEV_STRING :
 		{
 //
@@ -1556,7 +1748,7 @@
 				{
 					Except::throw_exception((const char *)"API_AttrIncorrectDataNumber",
 					        	(const char *)"Incorrect data number",
-					        	(const char *)"WAttribute::check_written_value()");			
+					        	(const char *)"WAttribute::check_written_value()");
 				}
 			}
 
@@ -1577,11 +1769,11 @@
 				w_dim_x = x;
 				w_dim_y = y;
 			}
-		}		
+		}
 		break;
-		
+
 	case Tango::DEV_FLOAT :
-		{	
+		{
 //
 // Check data type inside the union
 //
@@ -1612,10 +1804,10 @@
 				{
 					Except::throw_exception((const char *)"API_AttrIncorrectDataNumber",
 					        	(const char *)"Incorrect data number",
-					        	(const char *)"WAttribute::check_written_value()");			
+					        	(const char *)"WAttribute::check_written_value()");
 				}
 			}
-				
+
 //
 // Check the incoming value
 //
@@ -1651,12 +1843,12 @@
 						    	  (const char *)"WAttribute::check_written_value()");
 					}
 				}
-			}		
+			}
 
 			float_ptr = fl_seq.get_buffer();
 			if (data_format == Tango::SCALAR)
 			{
-				old_float_val = float_val;		
+				old_float_val = float_val;
 				float_val = fl_seq[0];
 				w_dim_x = 1;
 				w_dim_y = 0;
@@ -1668,9 +1860,9 @@
 			}
 		}
 		break;
-		
+
 	case Tango::DEV_USHORT :
-		{	
+		{
 //
 // Check data type inside the union
 //
@@ -1701,10 +1893,10 @@
 				{
 					Except::throw_exception((const char *)"API_AttrIncorrectDataNumber",
 					        	(const char *)"Incorrect data number",
-					        	(const char *)"WAttribute::check_written_value()");			
+					        	(const char *)"WAttribute::check_written_value()");
 				}
 			}
-				
+
 //
 // Check the incoming value
 //
@@ -1740,12 +1932,12 @@
 						    	  (const char *)"WAttribute::check_written_value()");
 					}
 				}
-			}		
+			}
 
 			ushort_ptr = ush_seq.get_buffer();
 			if (data_format == Tango::SCALAR)
 			{
-				old_ushort_val = ushort_val;		
+				old_ushort_val = ushort_val;
 				ushort_val = ush_seq[0];
 				w_dim_x = 1;
 				w_dim_y = 0;
@@ -1757,9 +1949,9 @@
 			}
 		}
 		break;
-		
+
 	case Tango::DEV_UCHAR :
-		{	
+		{
 //
 // Check data type inside the union
 //
@@ -1790,10 +1982,10 @@
 				{
 					Except::throw_exception((const char *)"API_AttrIncorrectDataNumber",
 					        	(const char *)"Incorrect data number",
-					        	(const char *)"WAttribute::check_written_value()");			
+					        	(const char *)"WAttribute::check_written_value()");
 				}
 			}
-				
+
 //
 // Check the incoming value
 //
@@ -1829,12 +2021,12 @@
 						    	  (const char *)"WAttribute::check_written_value()");
 					}
 				}
-			}		
+			}
 
 			uchar_ptr = uch_seq.get_buffer();
 			if (data_format == Tango::SCALAR)
 			{
-				old_uchar_val = uchar_val;		
+				old_uchar_val = uchar_val;
 				uchar_val = uch_seq[0];
 				w_dim_x = 1;
 				w_dim_y = 0;
@@ -1846,9 +2038,9 @@
 			}
 		}
 		break;
-		
+
 	case Tango::DEV_ULONG :
-		{	
+		{
 //
 // Check data type inside the union
 //
@@ -1879,10 +2071,10 @@
 				{
 					Except::throw_exception((const char *)"API_AttrIncorrectDataNumber",
 					        	(const char *)"Incorrect data number",
-					        	(const char *)"WAttribute::check_written_value()");			
+					        	(const char *)"WAttribute::check_written_value()");
 				}
 			}
-				
+
 //
 // Check the incoming value
 //
@@ -1918,12 +2110,12 @@
 						    	  (const char *)"WAttribute::check_written_value()");
 					}
 				}
-			}		
+			}
 
 			w_ext->ulong_ptr = ulo_seq.get_buffer();
 			if (data_format == Tango::SCALAR)
 			{
-				w_ext->old_ulong_val = w_ext->ulong_val;		
+				w_ext->old_ulong_val = w_ext->ulong_val;
 				w_ext->ulong_val = ulo_seq[0];
 				w_dim_x = 1;
 				w_dim_y = 0;
@@ -1935,9 +2127,9 @@
 			}
 		}
 		break;
-		
+
 	case Tango::DEV_ULONG64 :
-		{	
+		{
 //
 // Check data type inside the union
 //
@@ -1968,10 +2160,10 @@
 				{
 					Except::throw_exception((const char *)"API_AttrIncorrectDataNumber",
 					        	(const char *)"Incorrect data number",
-					        	(const char *)"WAttribute::check_written_value()");			
+					        	(const char *)"WAttribute::check_written_value()");
 				}
 			}
-				
+
 //
 // Check the incoming value
 //
@@ -2007,12 +2199,12 @@
 						    	  (const char *)"WAttribute::check_written_value()");
 					}
 				}
-			}		
+			}
 
 			w_ext->ulong64_ptr = ulo64_seq.get_buffer();
 			if (data_format == Tango::SCALAR)
 			{
-				w_ext->old_ulong64_val = w_ext->ulong64_val;		
+				w_ext->old_ulong64_val = w_ext->ulong64_val;
 				w_ext->ulong64_val = ulo64_seq[0];
 				w_dim_x = 1;
 				w_dim_y = 0;
@@ -2024,9 +2216,9 @@
 			}
 		}
 		break;
-		
+
 	case Tango::DEV_STATE :
-		{	
+		{
 //
 // Check data type inside the union
 //
@@ -2057,10 +2249,10 @@
 				{
 					Except::throw_exception((const char *)"API_AttrIncorrectDataNumber",
 					        	(const char *)"Incorrect data number",
-					        	(const char *)"WAttribute::check_written_value()");			
+					        	(const char *)"WAttribute::check_written_value()");
 				}
 			}
-				
+
 //
 // Check the incoming value
 //
@@ -2096,12 +2288,12 @@
 						    	  (const char *)"WAttribute::check_written_value()");
 					}
 				}
-			}		
+			}
 
 			w_ext->state_ptr = sta_seq.get_buffer();
 			if (data_format == Tango::SCALAR)
 			{
-				w_ext->old_dev_state_val = w_ext->dev_state_val;		
+				w_ext->old_dev_state_val = w_ext->dev_state_val;
 				w_ext->dev_state_val = sta_seq[0];
 				w_dim_x = 1;
 				w_dim_y = 0;
@@ -2113,9 +2305,9 @@
 			}
 		}
 		break;
-		
+
 	case Tango::DEV_BOOLEAN :
-		{	
+		{
 //
 // Check data type inside the union
 //
@@ -2146,14 +2338,14 @@
 				{
 					Except::throw_exception((const char *)"API_AttrIncorrectDataNumber",
 					        	(const char *)"Incorrect data number",
-					        	(const char *)"WAttribute::check_written_value()");			
+					        	(const char *)"WAttribute::check_written_value()");
 				}
-			}	
+			}
 
 			boolean_ptr = boo_seq.get_buffer();
 			if (data_format == Tango::SCALAR)
 			{
-				old_boolean_val = boolean_val;		
+				old_boolean_val = boolean_val;
 				boolean_val = boo_seq[0];
 				w_dim_x = 1;
 				w_dim_y = 0;
@@ -2165,9 +2357,9 @@
 			}
 		}
 		break;
-		
+
 	case Tango::DEV_ENCODED :
-		{	
+		{
 			if (att_union._d() != ATT_ENCODED)
 			{
 				TangoSys_OMemStream o;
@@ -2195,10 +2387,10 @@
 				{
 					Except::throw_exception((const char *)"API_AttrIncorrectDataNumber",
 					        		(const char *)"Incorrect data number",
-					        		(const char *)"WAttribute::check_written_value()");			
+					        		(const char *)"WAttribute::check_written_value()");
 				}
 			}
-		
+
 //
 // Check the incoming value against min or max_value if needed
 //
@@ -2248,7 +2440,7 @@
 			encoded_ptr = enc_seq.get_buffer();
 			if (data_format == Tango::SCALAR)
 			{
-				old_encoded_val = encoded_val;		
+				old_encoded_val = encoded_val;
 				encoded_val = enc_seq[0];
 				w_dim_x = 1;
 				w_dim_y = 0;
@@ -2261,13 +2453,13 @@
 		}
 		break;
 	}
-		
+
 }
 
 //+-------------------------------------------------------------------------
 //
 // method : 		WAttribute::get_write_value_length
-// 
+//
 // description : 	Returm to the caller the length of the new value to
 //			be written into the attribute
 //
@@ -2276,14 +2468,14 @@
 long WAttribute::get_write_value_length()
 {
 	long ret_val;
-	
+
 	if (data_format == Tango::SCALAR)
 		ret_val = 1;
 	else if (data_format == Tango::SPECTRUM)
 		ret_val = w_dim_x;
 	else
 		ret_val = w_dim_x * w_dim_y;
-	
+
 	return ret_val;
 }
 
@@ -2291,9 +2483,9 @@
 //+-------------------------------------------------------------------------
 //
 // method : 		WAttribute::set_write_value() methods
-// 
+//
 // description : 	Set the attribute internal value.
-//			There are different methods according to the 
+//			There are different methods according to the
 //			attribute data type and the attribute type (scalar,
 //       spectrum or image)
 //
@@ -2312,13 +2504,13 @@
 
 	check_written_value(tmp_any,1,0);
 	copy_data(tmp_any);
-	set_user_set_write_value(true);	
+	set_user_set_write_value(true);
 }
 
 void WAttribute::set_write_value(Tango::DevShort *val, long x, long y)
 {
 	long nb_data;
-	
+
 	if (y == 0)
 		nb_data = x;
 	else
@@ -2364,7 +2556,7 @@
 void WAttribute::set_write_value(Tango::DevLong *val, long x, long y)
 {
 	long nb_data;
-	
+
 	if (y == 0)
 		nb_data = x;
 	else
@@ -2382,7 +2574,7 @@
 void WAttribute::set_write_value(vector<Tango::DevLong> &val, long x, long y)
 {
 	Tango::DevVarLongArray tmp_seq(val.size(),val.size(),&val[0],false);
-		
+
 	CORBA::Any 	tmp_any;
 	tmp_any <<= tmp_seq;
 
@@ -2399,8 +2591,8 @@
 	tmp_seq.length(1);
 	tmp_seq[0] = val;
 
-	CORBA::Any tmp_any;		
-	tmp_any <<= tmp_seq;	
+	CORBA::Any tmp_any;
+	tmp_any <<= tmp_seq;
 	check_written_value(tmp_any,1,0);
 	copy_data(tmp_any);
 	set_user_set_write_value(true);
@@ -2409,7 +2601,7 @@
 void WAttribute::set_write_value(Tango::DevLong64 *val, long x, long y)
 {
 	long nb_data;
-	
+
 	if (y == 0)
 		nb_data = x;
 	else
@@ -2418,7 +2610,7 @@
 	Tango::DevVarLong64Array tmp_seq(nb_data, nb_data, val, false);
 
 	CORBA::Any 	tmp_any;
-	tmp_any <<= tmp_seq;	
+	tmp_any <<= tmp_seq;
 	check_written_value(tmp_any, x, y);
 	copy_data(tmp_any);
 	set_user_set_write_value(true);
@@ -2427,8 +2619,8 @@
 void WAttribute::set_write_value(vector<Tango::DevLong64> &val, long x, long y)
 {
 	Tango::DevVarLong64Array tmp_seq(val.size(),val.size(),&val[0],false);
-		
-	CORBA::Any 	tmp_any;		
+
+	CORBA::Any 	tmp_any;
 	tmp_any <<= tmp_seq;
 	check_written_value(tmp_any, x, y);
 	copy_data(tmp_any);
@@ -2453,7 +2645,7 @@
 void WAttribute::set_write_value(Tango::DevDouble *val, long x, long y)
 {
 	long nb_data;
-	
+
 	if (y == 0)
 		nb_data = x;
 	else
@@ -2472,11 +2664,11 @@
 {
 	CORBA::Any 	tmp_any;
 	Tango::DevVarDoubleArray tmp_seq(val.size(),val.size(),&val[0],false);
-		
+
 	tmp_any <<= tmp_seq;
 	check_written_value(tmp_any, x, y);
 	copy_data(tmp_any);
-	set_user_set_write_value(true);	
+	set_user_set_write_value(true);
 }
 
 // DevString:
@@ -2510,7 +2702,7 @@
 void WAttribute::set_write_value(Tango::DevString *val, long x, long y)
 {
 	long nb_data;
-	
+
 	if (y == 0)
 		nb_data = x;
 	else
@@ -2519,22 +2711,22 @@
 	Tango::DevVarStringArray tmp_seq(nb_data,nb_data,val,false);
 
 	CORBA::Any tmp_any;
-	tmp_any <<= tmp_seq;	
+	tmp_any <<= tmp_seq;
 	check_written_value(tmp_any, x, y);
 	copy_data(tmp_any);
-	set_user_set_write_value(true);	
+	set_user_set_write_value(true);
 }
 
 void WAttribute::set_write_value(vector<string> &val, long x, long y)
 {
 	Tango::DevVarStringArray tmp_seq;
 	tmp_seq << val;
-		
+
 	CORBA::Any tmp_any;
 	tmp_any <<= tmp_seq;
 	check_written_value(tmp_any, x, y);
 	copy_data(tmp_any);
-	set_user_set_write_value(true);	
+	set_user_set_write_value(true);
 }
 
 // DevFloat:
@@ -2555,7 +2747,7 @@
 void WAttribute::set_write_value(Tango::DevFloat *val, long x, long y)
 {
 	long nb_data;
-	
+
 	if (y == 0)
 		nb_data = x;
 	else
@@ -2566,18 +2758,18 @@
 	tmp_any <<= tmp_seq;
 	check_written_value(tmp_any, x, y);
 	copy_data(tmp_any);
-	set_user_set_write_value(true);	
+	set_user_set_write_value(true);
 }
 
 void WAttribute::set_write_value(vector<Tango::DevFloat> &val, long x, long y)
 {
 	Tango::DevVarFloatArray tmp_seq(val.size(),val.size(),&val[0],false);
-		
+
 	CORBA::Any tmp_any;
-	tmp_any <<= tmp_seq;	
+	tmp_any <<= tmp_seq;
 	check_written_value(tmp_any, x, y);
 	copy_data(tmp_any);
-	set_user_set_write_value(true);		
+	set_user_set_write_value(true);
 }
 
 // DevBoolean:
@@ -2598,7 +2790,7 @@
 void WAttribute::set_write_value(Tango::DevBoolean *val, long x, long y)
 {
 	long nb_data;
-	
+
 	if (y == 0)
 		nb_data = x;
 	else
@@ -2607,22 +2799,22 @@
 	Tango::DevVarBooleanArray tmp_seq(nb_data,nb_data,val,false);
 
 	CORBA::Any tmp_any;
-	tmp_any <<= tmp_seq;	
+	tmp_any <<= tmp_seq;
 	check_written_value(tmp_any, x, y);
 	copy_data(tmp_any);
-	set_user_set_write_value(true);	
+	set_user_set_write_value(true);
 }
 
 void WAttribute::set_write_value(vector<Tango::DevBoolean> &val, long x, long y)
 {
 	Tango::DevVarBooleanArray tmp_seq;
 	tmp_seq << val;
-		
+
 	CORBA::Any tmp_any;
 	tmp_any <<= tmp_seq;
 	check_written_value(tmp_any, x, y);
 	copy_data(tmp_any);
-	set_user_set_write_value(true);	
+	set_user_set_write_value(true);
 }
 
 // DevUShort:
@@ -2634,16 +2826,16 @@
 	tmp_seq[0] = val;
 
 	CORBA::Any tmp_any;
-	tmp_any <<= tmp_seq;	
+	tmp_any <<= tmp_seq;
 	check_written_value(tmp_any,1,0);
 	copy_data(tmp_any);
-	set_user_set_write_value(true);	
+	set_user_set_write_value(true);
 }
 
 void WAttribute::set_write_value(Tango::DevUShort *val, long x, long y)
 {
 	long nb_data;
-	
+
 	if (y == 0)
 		nb_data = x;
 	else
@@ -2662,7 +2854,7 @@
 {
 	Tango::DevVarUShortArray tmp_seq(val.size(),val.size(),&val[0],false);
 
-	CORBA::Any tmp_any;		
+	CORBA::Any tmp_any;
 	tmp_any <<= tmp_seq;
 	check_written_value(tmp_any, x, y);
 	copy_data(tmp_any);
@@ -2687,7 +2879,7 @@
 void WAttribute::set_write_value(Tango::DevUChar *val, long x, long y)
 {
 	long nb_data;
-	
+
 	if (y == 0)
 		nb_data = x;
 	else
@@ -2705,12 +2897,12 @@
 void WAttribute::set_write_value(vector<Tango::DevUChar> &val, long x, long y)
 {
 	Tango::DevVarUCharArray tmp_seq(val.size(),val.size(),&val[0],false);
-		
+
 	CORBA::Any tmp_any;
-	tmp_any <<= tmp_seq;	
+	tmp_any <<= tmp_seq;
 	check_written_value(tmp_any, x, y);
 	copy_data(tmp_any);
-	set_user_set_write_value(true);	
+	set_user_set_write_value(true);
 }
 
 // DevULong:
@@ -2731,7 +2923,7 @@
 void WAttribute::set_write_value(Tango::DevULong *val, long x, long y)
 {
 	long nb_data;
-	
+
 	if (y == 0)
 		nb_data = x;
 	else
@@ -2740,7 +2932,7 @@
 	Tango::DevVarULongArray tmp_seq(nb_data,nb_data,val,false);
 
 	CORBA::Any tmp_any;
-	tmp_any <<= tmp_seq;	
+	tmp_any <<= tmp_seq;
 	check_written_value(tmp_any, x, y);
 	copy_data(tmp_any);
 	set_user_set_write_value(true);
@@ -2749,7 +2941,7 @@
 void WAttribute::set_write_value(vector<Tango::DevULong> &val, long x, long y)
 {
 	Tango::DevVarULongArray tmp_seq(val.size(),val.size(),&val[0],false);
-		
+
 	CORBA::Any tmp_any;
 	tmp_any <<= tmp_seq;
 	check_written_value(tmp_any, x, y);
@@ -2766,7 +2958,7 @@
 	tmp_seq[0] = val;
 
 	CORBA::Any tmp_any;
-	tmp_any <<= tmp_seq;	
+	tmp_any <<= tmp_seq;
 	check_written_value(tmp_any,1,0);
 	copy_data(tmp_any);
 	set_user_set_write_value(true);
@@ -2775,7 +2967,7 @@
 void WAttribute::set_write_value(Tango::DevULong64 *val, long x, long y)
 {
 	long nb_data;
-	
+
 	if (y == 0)
 		nb_data = x;
 	else
@@ -2787,13 +2979,13 @@
 	tmp_any <<= tmp_seq;
 	check_written_value(tmp_any, x, y);
 	copy_data(tmp_any);
-	set_user_set_write_value(true);	
+	set_user_set_write_value(true);
 }
 
 void WAttribute::set_write_value(vector<Tango::DevULong64> &val, long x, long y)
 {
 	Tango::DevVarULong64Array tmp_seq(val.size(),val.size(),&val[0],false);
-		
+
 	CORBA::Any tmp_any;
 	tmp_any <<= tmp_seq;
 	check_written_value(tmp_any, x, y);
@@ -2810,7 +3002,7 @@
 	tmp_seq[0] = val;
 
 	CORBA::Any tmp_any;
-	tmp_any <<= tmp_seq;	
+	tmp_any <<= tmp_seq;
 	check_written_value(tmp_any,1,0);
 	copy_data(tmp_any);
 	set_user_set_write_value(true);
@@ -2819,7 +3011,7 @@
 void WAttribute::set_write_value(Tango::DevState *val, long x, long y)
 {
 	long nb_data;
-	
+
 	if (y == 0)
 		nb_data = x;
 	else
@@ -2831,14 +3023,14 @@
 	tmp_any <<= tmp_seq;
 	check_written_value(tmp_any, x, y);
 	copy_data(tmp_any);
-	set_user_set_write_value(true);	
+	set_user_set_write_value(true);
 }
 
 void WAttribute::set_write_value(vector<Tango::DevState> &val, long x, long y)
 {
 	Tango::DevVarStateArray tmp_seq(val.size(),val.size(),&val[0],false);
 
-	CORBA::Any tmp_any;		
+	CORBA::Any tmp_any;
 	tmp_any <<= tmp_seq;
 	check_written_value(tmp_any, x, y);
 	copy_data(tmp_any);
@@ -2862,7 +3054,7 @@
 //+-------------------------------------------------------------------------
 //
 // method : 		WAttribute::rollback
-// 
+//
 // description : 	Reset the internal data to its value before the
 //			set_write_value method was applied (Useful in case of
 //			error in the set_write_value method)
@@ -2876,48 +3068,48 @@
 	case Tango::DEV_SHORT :
 		short_val = old_short_val;
 		break;
-		
+
 	case Tango::DEV_LONG :
 		long_val = old_long_val;
 		break;
-		
+
 	case Tango::DEV_LONG64 :
 		w_ext->long64_val = w_ext->old_long64_val;
 		break;
-		
+
 	case Tango::DEV_DOUBLE :
 		double_val = old_double_val;
 		break;
-		
+
 	case Tango::DEV_STRING :
 		CORBA::string_free(str_val);
 		str_val = CORBA::string_dup(old_str_val);
 		break;
-		
+
 	case Tango::DEV_FLOAT :
 		float_val = old_float_val;
 		break;
-		
+
 	case Tango::DEV_BOOLEAN :
 		boolean_val = old_boolean_val;
 		break;
-		
+
 	case Tango::DEV_USHORT :
 		double_val = old_double_val;
 		break;
-		
+
 	case Tango::DEV_UCHAR :
 		CORBA::string_free(str_val);
 		break;
-		
+
 	case Tango::DEV_ULONG :
 		w_ext->ulong_val = w_ext->old_ulong_val;
 		break;
-		
+
 	case Tango::DEV_ULONG64 :
 		w_ext->ulong64_val = w_ext->old_ulong64_val;
 		break;
-		
+
 	case Tango::DEV_STATE :
 		w_ext->dev_state_val = w_ext->old_dev_state_val;
 		break;
@@ -2927,7 +3119,7 @@
 //+-------------------------------------------------------------------------
 //
 // method : 		WAttribute::copy_data
-// 
+//
 // description : 	Copy data into the attribute object in order to return
 //			them in case of a read on this attribute
 //
@@ -2936,141 +3128,141 @@
 //--------------------------------------------------------------------------
 
 void WAttribute::copy_data(const CORBA::Any &any)
-{	
+{
 	switch (data_type)
 	{
 	case Tango::DEV_SHORT :
 		const Tango::DevVarShortArray *sh_ptr;
-		any >>= sh_ptr;	
-		short_array_val = *sh_ptr;	
+		any >>= sh_ptr;
+		short_array_val = *sh_ptr;
 		break;
-		
+
 	case Tango::DEV_LONG :
 		const Tango::DevVarLongArray *lo_ptr;
 		any >>= lo_ptr;
-		long_array_val = *lo_ptr;	
+		long_array_val = *lo_ptr;
 		break;
-		
+
 	case Tango::DEV_LONG64 :
 		const Tango::DevVarLong64Array *lo64_ptr;
 		any >>= lo64_ptr;
-		w_ext->long64_array_val = *lo64_ptr;	
+		w_ext->long64_array_val = *lo64_ptr;
 		break;
-		
+
 	case Tango::DEV_DOUBLE :
 		const Tango::DevVarDoubleArray *db_ptr;
 		any >>= db_ptr;
-		double_array_val = *db_ptr;	
+		double_array_val = *db_ptr;
 		break;
 
 	case Tango::DEV_STRING :
 		const Tango::DevVarStringArray *tmp_str_ptr;
 		any >>= tmp_str_ptr;
-		str_array_val = *tmp_str_ptr;	
+		str_array_val = *tmp_str_ptr;
 		break;
-		
+
 	case Tango::DEV_FLOAT :
 		const Tango::DevVarFloatArray *fl_ptr;
 		any >>= fl_ptr;
-		float_array_val = *fl_ptr;	
+		float_array_val = *fl_ptr;
 		break;
-		
+
 	case Tango::DEV_BOOLEAN :
 		const Tango::DevVarBooleanArray *boo_ptr;
 		any >>= boo_ptr;
-		boolean_array_val = *boo_ptr;	
+		boolean_array_val = *boo_ptr;
 		break;
-		
+
 	case Tango::DEV_USHORT :
 		const Tango::DevVarUShortArray *ush_ptr;
 		any >>= ush_ptr;
-		ushort_array_val = *ush_ptr;	
+		ushort_array_val = *ush_ptr;
 		break;
 
 	case Tango::DEV_UCHAR :
 		const Tango::DevVarCharArray *uch_ptr;
 		any >>= uch_ptr;
-		uchar_array_val = *uch_ptr;	
+		uchar_array_val = *uch_ptr;
 		break;
-		
+
 	case Tango::DEV_ULONG :
 		const Tango::DevVarULongArray *ulo_ptr;
 		any >>= ulo_ptr;
-		w_ext->ulong_array_val = *ulo_ptr;	
+		w_ext->ulong_array_val = *ulo_ptr;
 		break;
-		
+
 	case Tango::DEV_ULONG64 :
 		const Tango::DevVarULong64Array *ulo64_ptr;
 		any >>= ulo64_ptr;
-		w_ext->ulong64_array_val = *ulo64_ptr;	
+		w_ext->ulong64_array_val = *ulo64_ptr;
 		break;
-		
+
 	case Tango::DEV_STATE :
 		const Tango::DevVarStateArray *sta_ptr;
 		any >>= sta_ptr;
-		w_ext->state_array_val = *sta_ptr;	
-		break;			
+		w_ext->state_array_val = *sta_ptr;
+		break;
 	}
 }
 
 
 void WAttribute::copy_data(const Tango::AttrValUnion &the_union)
-{	
+{
 	switch (data_type)
 	{
 	case Tango::DEV_SHORT :
-		short_array_val = the_union.short_att_value();	
+		short_array_val = the_union.short_att_value();
 		break;
-		
+
 	case Tango::DEV_LONG :
-		long_array_val = the_union.long_att_value();	
+		long_array_val = the_union.long_att_value();
 		break;
-		
+
 	case Tango::DEV_LONG64 :
-		w_ext->long64_array_val = the_union.long64_att_value();	
+		w_ext->long64_array_val = the_union.long64_att_value();
 		break;
-		
+
 	case Tango::DEV_DOUBLE :
-		double_array_val = the_union.double_att_value();	
+		double_array_val = the_union.double_att_value();
 		break;
 
 	case Tango::DEV_STRING :
-		str_array_val = the_union.string_att_value();	
+		str_array_val = the_union.string_att_value();
 		break;
-		
+
 	case Tango::DEV_FLOAT :
-		float_array_val = the_union.float_att_value();	
+		float_array_val = the_union.float_att_value();
 		break;
-		
+
 	case Tango::DEV_BOOLEAN :
-		boolean_array_val = the_union.bool_att_value();	
+		boolean_array_val = the_union.bool_att_value();
 		break;
-		
+
 	case Tango::DEV_USHORT :
-		ushort_array_val = the_union.ushort_att_value();	
+		ushort_array_val = the_union.ushort_att_value();
 		break;
 
 	case Tango::DEV_UCHAR :
-		uchar_array_val = the_union.uchar_att_value();	
+		uchar_array_val = the_union.uchar_att_value();
 		break;
-		
+
 	case Tango::DEV_ULONG :
-		w_ext->ulong_array_val = the_union.ulong_att_value();	
+		w_ext->ulong_array_val = the_union.ulong_att_value();
 		break;
-		
+
 	case Tango::DEV_ULONG64 :
-		w_ext->ulong64_array_val = the_union.ulong64_att_value();	
+		w_ext->ulong64_array_val = the_union.ulong64_att_value();
 		break;
-		
+
 	case Tango::DEV_STATE :
-		w_ext->state_array_val = the_union.state_att_value();	
-		break;			
+		w_ext->state_array_val = the_union.state_att_value();
+		break;
 	}
 }
 //+-------------------------------------------------------------------------
 //
 // method : 		WAttribute::set_written_date
-// 
+//
 // description : 	Memorized when the attribute is written
 //
 //--------------------------------------------------------------------------
@@ -3083,7 +3275,7 @@
 
 	write_date.tv_sec = (CORBA::Long)t.time;
 	write_date.tv_usec = (CORBA::Long)(t.millitm * 1000);
-#else	
+#else
 	struct timezone tz;
 	struct timeval tv;
 	gettimeofday(&tv,&tz);
@@ -3096,9 +3288,9 @@
 //+-------------------------------------------------------------------------
 //
 // method : 		WAttribute::check_rds_alarm
-// 
+//
 // description : 	Check if the attribute is in read different from set
-//			alarm. 
+//			alarm.
 //
 // This method returns true if the attribute has a read too different than the
 // the last set value. Otherwise, returns false.
@@ -3115,7 +3307,7 @@
 
 	if (write_date.tv_sec == 0)
 		return false;
-			
+
 //
 // First, check if it is necessary to check attribute value
 // Give some time to the device to change its output
@@ -3128,14 +3320,14 @@
 
 	tv.tv_sec = (CORBA::Long)t.time;
 	tv.tv_usec = (CORBA::Long)(t.millitm * 1000);
-#else	
+#else
 	struct timezone tz;
 	gettimeofday(&tv,&tz);
 #endif
 
 	long time_diff;
 	COMPUTE_TIME_DIFF(time_diff,write_date,tv);
-	
+
 	if (time_diff >= delta_t)
 	{
 
@@ -3144,7 +3336,7 @@
 //
 
 		long nb_written,nb_read,nb_data,i;
-		
+
 		switch (data_type)
 		{
 		case Tango::DEV_SHORT:
@@ -3163,7 +3355,7 @@
 				}
 			}
 			break;
-			
+
 		case Tango::DEV_LONG:
 			nb_written = long_array_val.length();
 			nb_read = (data_format == Tango::SCALAR) ? 1 : value.lg_seq->length();
@@ -3180,7 +3372,7 @@
 				}
 			}
 			break;
-			
+
 		case Tango::DEV_LONG64:
 			nb_written = w_ext->long64_array_val.length();
 			nb_read = (data_format == Tango::SCALAR) ? 1 : value.lg64_seq->length();
@@ -3188,13 +3380,13 @@
 			for (i = 0;i < nb_data;i++)
 			{
 				DevLong64 delta = (data_format == Tango::SCALAR) ? w_ext->long64_array_val[0] - get_tmp_scalar_long64()[0] : w_ext->long64_array_val[i] - (*value.lg64_seq)[i];
-				
+
 				DevLong64 abs_delta;
 				if (delta < 0)
 					abs_delta = -delta;
 				else
 					abs_delta = delta;
-					
+
 				if (abs_delta >= delta_val.lg64)
 				{
 					quality = Tango::ATTR_ALARM;
@@ -3204,7 +3396,7 @@
 				}
 			}
 			break;
-			
+
 		case Tango::DEV_DOUBLE:
 			nb_written = double_array_val.length();
 			nb_read = (data_format == Tango::SCALAR) ? 1 : value.db_seq->length();
@@ -3226,7 +3418,7 @@
 						// send an alarm if only read or set value are NAN
 						if ( !(_isnan(double_array_val[0]) && _isnan(tmp_db[0])) )
 						{
-#endif						
+#endif
 							quality = Tango::ATTR_ALARM;
 							alarm.set(rds);
 							ret = true;
@@ -3256,8 +3448,8 @@
 						}
 					}
 				}
-				
-				
+
+
 				double delta = (data_format == Tango::SCALAR) ? double_array_val[0] - tmp_db[0] : double_array_val[i] - (*value.db_seq)[i];
 				if (fabs(delta) >= delta_val.db)
 				{
@@ -3268,7 +3460,7 @@
 				}
 			}
 			break;
-			
+
 		case Tango::DEV_FLOAT:
 			nb_written = float_array_val.length();
 			nb_read = (data_format == Tango::SCALAR) ? 1 : value.fl_seq->length();
@@ -3320,7 +3512,7 @@
 						}
 					}
 				}
-				
+
 				float delta = (data_format == Tango::SCALAR) ? float_array_val[0] - tmp_fl[0] : float_array_val[i] - (*value.fl_seq)[i];
 #if ((defined __SUNPRO_CC) || (defined _TG_WINDOWS_) || (defined GCC_SOLARIS))
 				double delta_d = (double)delta;
@@ -3336,7 +3528,7 @@
 				}
 			}
 			break;
-			
+
 		case Tango::DEV_USHORT:
 			nb_written = ushort_array_val.length();
 			nb_read = (data_format == Tango::SCALAR) ? 1 : value.ush_seq->length();
@@ -3353,7 +3545,7 @@
 				}
 			}
 			break;
-			
+
 		case Tango::DEV_UCHAR:
 			nb_written = uchar_array_val.length();
 			nb_read = (data_format == Tango::SCALAR) ? 1 : value.cha_seq->length();
@@ -3370,7 +3562,7 @@
 				}
 			}
 			break;
-			
+
 		case Tango::DEV_ULONG:
 			nb_written = w_ext->ulong_array_val.length();
 			nb_read = (data_format == Tango::SCALAR) ? 1 : value.ulg_seq->length();
@@ -3387,7 +3579,7 @@
 				}
 			}
 			break;
-			
+
 		case Tango::DEV_ULONG64:
 			nb_written = w_ext->ulong64_array_val.length();
 			nb_read = (data_format == Tango::SCALAR) ? 1 : value.ulg64_seq->length();
@@ -3395,13 +3587,13 @@
 			for (i = 0;i < nb_data;i++)
 			{
 				DevLong64 delta = (data_format == Tango::SCALAR) ? w_ext->ulong64_array_val[0] - get_tmp_scalar_ulong64()[0] : w_ext->ulong64_array_val[i] - (*value.ulg64_seq)[i];
-				
+
 				DevULong64 abs_delta;
 				if (delta < 0)
 					abs_delta = -delta;
 				else
 					abs_delta = delta;
-					
+
 				if (abs_delta >= delta_val.ulg64)
 				{
 					quality = Tango::ATTR_ALARM;
@@ -3411,7 +3603,7 @@
 				}
 			}
 			break;
-			
+
 		case Tango::DEV_ENCODED:
 			nb_written = ::strlen(encoded_val.encoded_format.in());
 			nb_read = ::strlen((*value.enc_seq)[0].encoded_format.in());
@@ -3429,7 +3621,7 @@
 				ret = true;
 				break;
 			}
-			
+
 			nb_written = encoded_val.encoded_data.length();
 			nb_read = (*value.enc_seq)[0].encoded_data.length();
 			nb_data = (nb_written > nb_read) ? nb_read : nb_written;
@@ -3447,16 +3639,16 @@
 			break;
 		}
 	}
-	
+
 	return ret;
 }
 
 //+-------------------------------------------------------------------------
 //
 // method : 		WAttribute::get_min_value
-// 
+//
 // description : 	Get the attribute min_value ar throws an exception if
-//			the attribute does not have a minimum value set 
+//			the attribute does not have a minimum value set
 //
 //--------------------------------------------------------------------------
 
@@ -3468,7 +3660,7 @@
 				      (const char *)"Incompatible attribute type, expected type is : Tango::DevShort",
 				      (const char *)"WAttribute::get_min_value()");
 	}
-	
+
 	if (check_min_value == false)
 	{
 		Except::throw_exception((const char *)"API_AttrNotAllowed",
@@ -3486,7 +3678,7 @@
 				      (const char *)"Incompatible attribute type, expected type is : Tango::DevLong",
 				      (const char *)"WAttribute::get_min_value()");
 	}
-	
+
 	if (check_min_value == false)
 	{
 		Except::throw_exception((const char *)"API_AttrNotAllowed",
@@ -3504,7 +3696,7 @@
 				      (const char *)"Incompatible attribute type, expected type is : Tango::DevLong64",
 				      (const char *)"WAttribute::get_min_value()");
 	}
-	
+
 	if (check_min_value == false)
 	{
 		Except::throw_exception((const char *)"API_AttrNotAllowed",
@@ -3522,7 +3714,7 @@
 				      (const char *)"Incompatible attribute type, expected type is : Tango::DevDouble",
 				      (const char *)"WAttribute::get_min_value()");
 	}
-	
+
 	if (check_min_value == false)
 	{
 		Except::throw_exception((const char *)"API_AttrNotAllowed",
@@ -3540,7 +3732,7 @@
 				      (const char *)"Incompatible attribute type, expected type is : Tango::DevFloat",
 				      (const char *)"WAttribute::get_min_value()");
 	}
-	
+
 	if (check_min_value == false)
 	{
 		Except::throw_exception((const char *)"API_AttrNotAllowed",
@@ -3558,7 +3750,7 @@
 				      (const char *)"Incompatible attribute type, expected type is : Tango::DevUShort",
 				      (const char *)"WAttribute::get_min_value()");
 	}
-	
+
 	if (check_min_value == false)
 	{
 		Except::throw_exception((const char *)"API_AttrNotAllowed",
@@ -3576,7 +3768,7 @@
 				      (const char *)"Incompatible attribute type, expected type is : Tango::DevUChar",
 				      (const char *)"WAttribute::get_min_value()");
 	}
-	
+
 	if (check_min_value == false)
 	{
 		Except::throw_exception((const char *)"API_AttrNotAllowed",
@@ -3594,7 +3786,7 @@
 				      (const char *)"Incompatible attribute type, expected type is : Tango::DevULong",
 				      (const char *)"WAttribute::get_min_value()");
 	}
-	
+
 	if (check_min_value == false)
 	{
 		Except::throw_exception((const char *)"API_AttrNotAllowed",
@@ -3612,7 +3804,7 @@
 				      (const char *)"Incompatible attribute type, expected type is : Tango::DevUChar",
 				      (const char *)"WAttribute::get_min_value()");
 	}
-	
+
 	if (check_min_value == false)
 	{
 		Except::throw_exception((const char *)"API_AttrNotAllowed",
@@ -3625,9 +3817,9 @@
 //+-------------------------------------------------------------------------
 //
 // method : 		WAttribute::get_max_value
-// 
+//
 // description : 	Get the attribute max_value ar throws an exception if
-//			the attribute does not have a maximum value set 
+//			the attribute does not have a maximum value set
 //
 //--------------------------------------------------------------------------
 
@@ -3639,7 +3831,7 @@
 				      (const char *)"Incompatible attribute type, expected type is : Tango::DevShort",
 				      (const char *)"WAttribute::get_max_value()");
 	}
-	
+
 	if (check_max_value == false)
 	{
 		Except::throw_exception((const char *)"API_AttrNotAllowed",
@@ -3657,7 +3849,7 @@
 				      (const char *)"Incompatible attribute type, expected type is : Tango::DevLong",
 				      (const char *)"WAttribute::get_max_value()");
 	}
-	
+
 	if (check_max_value == false)
 	{
 		Except::throw_exception((const char *)"API_AttrNotAllowed",
@@ -3675,7 +3867,7 @@
 				      (const char *)"Incompatible attribute type, expected type is : Tango::DevLong64",
 				      (const char *)"WAttribute::get_max_value()");
 	}
-	
+
 	if (check_max_value == false)
 	{
 		Except::throw_exception((const char *)"API_AttrNotAllowed",
@@ -3693,7 +3885,7 @@
 				      (const char *)"Incompatible attribute type, expected type is : Tango::DevDouble",
 				      (const char *)"WAttribute::get_max_value()");
 	}
-	
+
 	if (check_max_value == false)
 	{
 		Except::throw_exception((const char *)"API_AttrNotAllowed",
@@ -3711,7 +3903,7 @@
 				      (const char *)"Incompatible attribute type, expected type is : Tango::DevFloat",
 				      (const char *)"WAttribute::get_max_value()");
 	}
-	
+
 	if (check_max_value == false)
 	{
 		Except::throw_exception((const char *)"API_AttrNotAllowed",
@@ -3729,7 +3921,7 @@
 				      (const char *)"Incompatible attribute type, expected type is : Tango::DevUShort",
 				      (const char *)"WAttribute::get_max_value()");
 	}
-	
+
 	if (check_max_value == false)
 	{
 		Except::throw_exception((const char *)"API_AttrNotAllowed",
@@ -3747,7 +3939,7 @@
 				      (const char *)"Incompatible attribute type, expected type is : Tango::DevUChar",
 				      (const char *)"WAttribute::get_max_value()");
 	}
-	
+
 	if (check_max_value == false)
 	{
 		Except::throw_exception((const char *)"API_AttrNotAllowed",
@@ -3765,7 +3957,7 @@
 				      (const char *)"Incompatible attribute type, expected type is : Tango::DevULong",
 				      (const char *)"WAttribute::get_max_value()");
 	}
-	
+
 	if (check_max_value == false)
 	{
 		Except::throw_exception((const char *)"API_AttrNotAllowed",
@@ -3783,7 +3975,7 @@
 				      (const char *)"Incompatible attribute type, expected type is : Tango::DevULong64",
 				      (const char *)"WAttribute::get_max_value()");
 	}
-	
+
 	if (check_max_value == false)
 	{
 		Except::throw_exception((const char *)"API_AttrNotAllowed",
@@ -3795,7 +3987,7 @@
 //+-------------------------------------------------------------------------
 //
 // method : 		WAttribute::set_max_value
-// 
+//
 // description : 	Set the attribute max_value
 //
 //--------------------------------------------------------------------------
@@ -3815,14 +4007,14 @@
 
 	TangoMonitor &mon1 = get_att_device()->get_att_conf_monitor();
 	AutoTangoMonitor sync1(&mon1);
-						
+
 //
 // Store the new value locally
 //
 
 	double old_max = max_value.db;
 	max_value.db = new_val;
-	
+
 //
 // Then, update database
 //
@@ -3847,7 +4039,7 @@
 	TangoSys_MemStream str;
 	str << new_val;
 	max_value_str = str.str();
-	
+
 //
 // Push a att conf event
 //
@@ -3863,21 +4055,21 @@
 				      (const char *)"Incompatible attribute type, expected type is : Tango::DevShort",
 				      (const char *)"WAttribute::set_max_value()");
 	}
-	
+
 //
 // Get the monitor protecting device att config
 //
 
 	TangoMonitor &mon1 = get_att_device()->get_att_conf_monitor();
 	AutoTangoMonitor sync1(&mon1);
-						
+
 //
 // Store the new value locally
 //
 
 	short old_max = max_value.sh;
 	max_value.sh = new_val;
-	
+
 //
 // Then, update database
 //
@@ -3894,7 +4086,7 @@
 			throw;
 		}
 	}
-	
+
 //
 // Store new value as a string
 //
@@ -3902,7 +4094,7 @@
 	TangoSys_MemStream str;
 	str << new_val;
 	max_value_str = str.str();
-	
+
 //
 // Push a att conf event
 //
@@ -3918,21 +4110,21 @@
 				      (const char *)"Incompatible attribute type, expected type is : Tango::DevLong",
 				      (const char *)"WAttribute::set_max_value()");
 	}
-	
+
 //
 // Get the monitor protecting device att config
 //
 
 	TangoMonitor &mon1 = get_att_device()->get_att_conf_monitor();
 	AutoTangoMonitor sync1(&mon1);
-						
+
 //
 // Store the new value locally
 //
 
 	long old_max = max_value.lg;
 	max_value.lg = new_val;
-	
+
 //
 // Then, update database
 //
@@ -3949,7 +4141,7 @@
 			throw;
 		}
 	}
-	
+
 //
 // Store new value as a string
 //
@@ -3957,7 +4149,7 @@
 	TangoSys_MemStream str;
 	str << new_val;
 	max_value_str = str.str();
-	
+
 //
 // Push a att conf event
 //
@@ -3973,21 +4165,21 @@
 				      (const char *)"Incompatible attribute type, expected type is : Tango::DevLong64",
 				      (const char *)"WAttribute::set_max_value()");
 	}
-	
+
 //
 // Get the monitor protecting device att config
 //
 
 	TangoMonitor &mon1 = get_att_device()->get_att_conf_monitor();
 	AutoTangoMonitor sync1(&mon1);
-						
+
 //
 // Store the new value locally
 //
 
 	DevLong64 old_max = max_value.lg64;
 	max_value.lg64 = new_val;
-	
+
 //
 // Then, update database
 //
@@ -4004,7 +4196,7 @@
 			throw;
 		}
 	}
-	
+
 //
 // Store new value as a string
 //
@@ -4012,7 +4204,7 @@
 	TangoSys_MemStream str;
 	str << new_val;
 	max_value_str = str.str();
-	
+
 //
 // Push a att conf event
 //
@@ -4029,21 +4221,21 @@
 				      (const char *)"Incompatible attribute type, expected type is : Tango::DevFloat",
 				      (const char *)"WAttribute::set_max_value()");
 	}
-	
+
 //
 // Get the monitor protecting device att config
 //
 
 	TangoMonitor &mon1 = get_att_device()->get_att_conf_monitor();
 	AutoTangoMonitor sync1(&mon1);
-						
+
 //
 // Store the new value locally
 //
 
 	float old_max = max_value.fl;
 	max_value.fl = new_val;
-	
+
 //
 // Then, update database
 //
@@ -4060,7 +4252,7 @@
 			throw;
 		}
 	}
-	
+
 //
 // Store new value as a string
 //
@@ -4068,7 +4260,7 @@
 	TangoSys_MemStream str;
 	str << new_val;
 	max_value_str = str.str();
-	
+
 //
 // Push a att conf event
 //
@@ -4084,21 +4276,21 @@
 				      (const char *)"Incompatible attribute type, expected type is : Tango::DevUShort",
 				      (const char *)"WAttribute::set_max_value()");
 	}
-	
+
 //
 // Get the monitor protecting device att config
 //
 
 	TangoMonitor &mon1 = get_att_device()->get_att_conf_monitor();
 	AutoTangoMonitor sync1(&mon1);
-						
+
 //
 // Store the new value locally
 //
 
 	unsigned short old_max = max_value.ush;
 	max_value.ush = new_val;
-	
+
 //
 // Then, update database
 //
@@ -4115,7 +4307,7 @@
 			throw;
 		}
 	}
-	
+
 //
 // Store new value as a string
 //
@@ -4123,7 +4315,7 @@
 	TangoSys_MemStream str;
 	str << new_val;
 	max_value_str = str.str();
-	
+
 //
 // Push a att conf event
 //
@@ -4140,21 +4332,21 @@
 				      (const char *)"Incompatible attribute type, expected type is : Tango::DevUChar",
 				      (const char *)"WAttribute::set_max_value()");
 	}
-	
+
 //
 // Get the monitor protecting device att config
 //
 
 	TangoMonitor &mon1 = get_att_device()->get_att_conf_monitor();
 	AutoTangoMonitor sync1(&mon1);
-						
+
 //
 // Store the new value locally
 //
 
 	unsigned char old_max = max_value.uch;
 	max_value.uch = new_val;
-	
+
 //
 // Then, update database
 //
@@ -4179,7 +4371,7 @@
 	TangoSys_MemStream str;
 	str << new_val;
 	max_value_str = str.str();
-	
+
 //
 // Push a att conf event
 //
@@ -4195,21 +4387,21 @@
 				      (const char *)"Incompatible attribute type, expected type is : Tango::DevULong",
 				      (const char *)"WAttribute::set_max_value()");
 	}
-	
+
 //
 // Get the monitor protecting device att config
 //
 
 	TangoMonitor &mon1 = get_att_device()->get_att_conf_monitor();
 	AutoTangoMonitor sync1(&mon1);
-						
+
 //
 // Store the new value locally
 //
 
 	DevULong old_max = max_value.ulg;
 	max_value.ulg = new_val;
-	
+
 //
 // Then, update database
 //
@@ -4234,7 +4426,7 @@
 	TangoSys_MemStream str;
 	str << new_val;
 	max_value_str = str.str();
-	
+
 //
 // Push a att conf event
 //
@@ -4250,21 +4442,21 @@
 				      (const char *)"Incompatible attribute type, expected type is : Tango::DevULong64",
 				      (const char *)"WAttribute::set_max_value()");
 	}
-	
+
 //
 // Get the monitor protecting device att config
 //
 
 	TangoMonitor &mon1 = get_att_device()->get_att_conf_monitor();
 	AutoTangoMonitor sync1(&mon1);
-						
+
 //
 // Store the new value locally
 //
 
 	DevULong64 old_max = max_value.ulg64;
 	max_value.ulg64 = new_val;
-	
+
 //
 // Then, update database
 //
@@ -4281,7 +4473,7 @@
 			throw;
 		}
 	}
-	
+
 //
 // Store new value as a string
 //
@@ -4289,7 +4481,7 @@
 	TangoSys_MemStream str;
 	str << new_val;
 	max_value_str = str.str();
-	
+
 //
 // Push a att conf event
 //
@@ -4300,8 +4492,8 @@
 //+-------------------------------------------------------------------------
 //
 // method : 		WAttribute::set_min_value
-// 
-// description : 	Set the attribute min_value 
+//
+// description : 	Set the attribute min_value
 //
 //--------------------------------------------------------------------------
 
@@ -4320,14 +4512,14 @@
 
 	TangoMonitor &mon1 = get_att_device()->get_att_conf_monitor();
 	AutoTangoMonitor sync1(&mon1);
-						
+
 //
 // Store the new value locally
 //
 
 	double old_min = min_value.db;
 	min_value.db = new_val;
-	
+
 //
 // Then, update database
 //
@@ -4352,7 +4544,7 @@
 	TangoSys_MemStream str;
 	str << new_val;
 	min_value_str = str.str();
-	
+
 //
 // Push a att conf event
 //
@@ -4368,21 +4560,21 @@
 				      (const char *)"Incompatible attribute type, expected type is : Tango::DevShort",
 				      (const char *)"WAttribute::set_min_value()");
 	}
-	
+
 //
 // Get the monitor protecting device att config
 //
 
 	TangoMonitor &mon1 = get_att_device()->get_att_conf_monitor();
 	AutoTangoMonitor sync1(&mon1);
-						
+
 //
 // Store the new value locally
 //
 
 	short old_min = min_value.sh;
 	min_value.sh = new_val;
-	
+
 //
 // Then, update database
 //
@@ -4399,7 +4591,7 @@
 			throw;
 		}
 	}
-	
+
 //
 // Store new value as a string
 //
@@ -4407,7 +4599,7 @@
 	TangoSys_MemStream str;
 	str << new_val;
 	min_value_str = str.str();
-	
+
 //
 // Push a att conf event
 //
@@ -4423,21 +4615,21 @@
 				      (const char *)"Incompatible attribute type, expected type is : Tango::DevLong",
 				      (const char *)"WAttribute::set_min_value()");
 	}
-	
+
 //
 // Get the monitor protecting device att config
 //
 
 	TangoMonitor &mon1 = get_att_device()->get_att_conf_monitor();
 	AutoTangoMonitor sync1(&mon1);
-						
+
 //
 // Store the new value locally
 //
 
 	DevLong old_min = min_value.lg;
 	min_value.lg = new_val;
-	
+
 //
 // Then, update database
 //
@@ -4454,7 +4646,7 @@
 			throw;
 		}
 	}
-	
+
 //
 // Store new value as a string
 //
@@ -4462,7 +4654,7 @@
 	TangoSys_MemStream str;
 	str << new_val;
 	min_value_str = str.str();
-	
+
 //
 // Push a att conf event
 //
@@ -4478,21 +4670,21 @@
 				      (const char *)"Incompatible attribute type, expected type is : Tango::DevLong64",
 				      (const char *)"WAttribute::set_min_value()");
 	}
-	
+
 //
 // Get the monitor protecting device att config
 //
 
 	TangoMonitor &mon1 = get_att_device()->get_att_conf_monitor();
 	AutoTangoMonitor sync1(&mon1);
-						
+
 //
 // Store the new value locally
 //
 
 	DevLong64 old_min = min_value.lg64;
 	min_value.lg64 = new_val;
-	
+
 //
 // Then, update database
 //
@@ -4509,7 +4701,7 @@
 			throw;
 		}
 	}
-	
+
 //
 // Store new value as a string
 //
@@ -4517,7 +4709,7 @@
 	TangoSys_MemStream str;
 	str << new_val;
 	min_value_str = str.str();
-	
+
 //
 // Push a att conf event
 //
@@ -4533,21 +4725,21 @@
 				      (const char *)"Incompatible attribute type, expected type is : Tango::DevFloat",
 				      (const char *)"WAttribute::set_min_value()");
 	}
-	
+
 //
 // Get the monitor protecting device att config
 //
 
 	TangoMonitor &mon1 = get_att_device()->get_att_conf_monitor();
 	AutoTangoMonitor sync1(&mon1);
-						
+
 //
 // Store the new value locally
 //
 
 	float old_min = min_value.fl;
 	min_value.fl = new_val;
-	
+
 //
 // Then, update database
 //
@@ -4564,7 +4756,7 @@
 			throw;
 		}
 	}
-	
+
 //
 // Store new value as a string
 //
@@ -4572,7 +4764,7 @@
 	TangoSys_MemStream str;
 	str << new_val;
 	min_value_str = str.str();
-	
+
 //
 // Push a att conf event
 //
@@ -4588,21 +4780,21 @@
 				      (const char *)"Incompatible attribute type, expected type is : Tango::DevUShort",
 				      (const char *)"WAttribute::set_min_value()");
 	}
-	
+
 //
 // Get the monitor protecting device att config
 //
 
 	TangoMonitor &mon1 = get_att_device()->get_att_conf_monitor();
 	AutoTangoMonitor sync1(&mon1);
-						
+
 //
 // Store the new value locally
 //
 
 	unsigned short old_min = min_value.ush;
 	min_value.ush = new_val;
-	
+
 //
 // Then, update database
 //
@@ -4619,7 +4811,7 @@
 			throw;
 		}
 	}
-	
+
 //
 // Store new value as a string
 //
@@ -4627,7 +4819,7 @@
 	TangoSys_MemStream str;
 	str << new_val;
 	min_value_str = str.str();
-	
+
 //
 // Push a att conf event
 //
@@ -4644,21 +4836,21 @@
 				      (const char *)"Incompatible attribute type, expected type is : Tango::DevUChar",
 				      (const char *)"WAttribute::set_min_value()");
 	}
-	
+
 //
 // Get the monitor protecting device att config
 //
 
 	TangoMonitor &mon1 = get_att_device()->get_att_conf_monitor();
 	AutoTangoMonitor sync1(&mon1);
-						
+
 //
 // Store the new value locally
 //
 
 	unsigned char old_min = min_value.uch;
 	min_value.uch = new_val;
-	
+
 //
 // Then, update database
 //
@@ -4699,21 +4891,21 @@
 				      (const char *)"Incompatible attribute type, expected type is : Tango::DevULong",
 				      (const char *)"WAttribute::set_min_value()");
 	}
-	
+
 //
 // Get the monitor protecting device att config
 //
 
 	TangoMonitor &mon1 = get_att_device()->get_att_conf_monitor();
 	AutoTangoMonitor sync1(&mon1);
-						
+
 //
 // Store the new value locally
 //
 
 	DevULong old_min = min_value.ulg;
 	min_value.ulg = new_val;
-	
+
 //
 // Then, update database
 //
@@ -4730,7 +4922,7 @@
 			throw;
 		}
 	}
-	
+
 //
 // Store new value as a string
 //
@@ -4738,7 +4930,7 @@
 	TangoSys_MemStream str;
 	str << new_val;
 	min_value_str = str.str();
-	
+
 //
 // Push a att conf event
 //
@@ -4754,21 +4946,21 @@
 				      (const char *)"Incompatible attribute type, expected type is : Tango::DevULong64",
 				      (const char *)"WAttribute::set_min_value()");
 	}
-	
+
 //
 // Get the monitor protecting device att config
 //
 
 	TangoMonitor &mon1 = get_att_device()->get_att_conf_monitor();
 	AutoTangoMonitor sync1(&mon1);
-						
+
 //
 // Store the new value locally
 //
 
 	DevULong64 old_min = min_value.ulg64;
 	min_value.ulg64 = new_val;
-	
+
 //
 // Then, update database
 //
@@ -4785,7 +4977,7 @@
 			throw;
 		}
 	}
-	
+
 //
 // Store new value as a string
 //
@@ -4793,7 +4985,7 @@
 	TangoSys_MemStream str;
 	str << new_val;
 	min_value_str = str.str();
-	
+
 //
 // Push a att conf event
 //
