Index: tags/xsucLWF-1.0/AssemblyInfo.cpp
===================================================================
--- tags/xsucLWF-1.0/AssemblyInfo.cpp	(revision 20)
+++ tags/xsucLWF-1.0/AssemblyInfo.cpp	(revision 20)
@@ -0,0 +1,60 @@
+#include "stdafx.h"
+
+#using <mscorlib.dll>
+
+using namespace System::Reflection;
+using namespace System::Runtime::CompilerServices;
+
+//
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+//
+[assembly:AssemblyTitleAttribute("")];
+[assembly:AssemblyDescriptionAttribute("")];
+[assembly:AssemblyConfigurationAttribute("")];
+[assembly:AssemblyCompanyAttribute("")];
+[assembly:AssemblyProductAttribute("")];
+[assembly:AssemblyCopyrightAttribute("")];
+[assembly:AssemblyTrademarkAttribute("")];
+[assembly:AssemblyCultureAttribute("")];		
+
+//
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the value or you can default the Revision and Build Numbers 
+// by using the '*' as shown below:
+
+[assembly:AssemblyVersionAttribute("1.0.*")];
+
+//
+// In order to sign your assembly you must specify a key to use. Refer to the 
+// Microsoft .NET Framework documentation for more information on assembly signing.
+//
+// Use the attributes below to control which key is used for signing. 
+//
+// Notes: 
+//   (*) If no key is specified, the assembly is not signed.
+//   (*) KeyName refers to a key that has been installed in the Crypto Service
+//       Provider (CSP) on your machine. KeyFile refers to a file which contains
+//       a key.
+//   (*) If the KeyFile and the KeyName values are both specified, the 
+//       following processing occurs:
+//       (1) If the KeyName can be found in the CSP, that key is used.
+//       (2) If the KeyName does not exist and the KeyFile does exist, the key 
+//           in the KeyFile is installed into the CSP and used.
+//   (*) In order to create a KeyFile, you can use the sn.exe (Strong Name) utility.
+//        When specifying the KeyFile, the location of the KeyFile should be
+//        relative to the project directory.
+//   (*) Delay Signing is an advanced option - see the Microsoft .NET Framework
+//       documentation for more information on this.
+//
+[assembly:AssemblyDelaySignAttribute(false)];
+[assembly:AssemblyKeyFileAttribute("")];
+[assembly:AssemblyKeyNameAttribute("")];
+
Index: tags/xsucLWF-1.0/Cxfel.cpp
===================================================================
--- tags/xsucLWF-1.0/Cxfel.cpp	(revision 20)
+++ tags/xsucLWF-1.0/Cxfel.cpp	(revision 20)
@@ -0,0 +1,2083 @@
+#include "cxfel.h"
+
+
+#include "heure.h"
+
+#using <mscorlib.dll>
+#using <System.dll>
+#using <System.Windows.Forms.dll>
+#using <System.Drawing.dll>//pour les controles bouton
+
+using namespace System;
+using namespace System::ComponentModel;//contient des classes pour les composants et les contrôles
+using namespace System::Windows::Forms;//contient des classes dédiées à la génération des formulaires
+using namespace System::Drawing;//contient les classes Point et Size du bouton
+
+using namespace System::IO;//contient les classes pour les I/O
+
+using namespace System::Threading;
+
+#undef MessageBox
+
+modbus_t *ctx;//modbus
+
+
+public __gc class ThreadReadModbus 
+{
+public:
+	// The ThreadProc method is called when the thread starts.
+    static void ThreadProc()
+	{
+		uint8_t tab_rp_bits[MODBUS_SIZE_READ_COILS];
+		Console::WriteLine(S"ThreadProc: read coils...");
+		int rc = modbus_read_bits(ctx, MODBUS_BASEADR_COILS, MODBUS_SIZE_READ_COILS, tab_rp_bits);////JCM : adresse coils=MODBUS_BASEADR_COILS
+		if (rc != MODBUS_SIZE_READ_COILS)
+			Console::WriteLine(S"ThreadProc: read coils failed...");
+		Thread::Sleep(500);
+
+		uint16_t tab_rp_registers_low[MODBUS_SIZE_READ_HOLDINGS_LOW];
+		Console::WriteLine(S"ThreadProc: read holdings...");
+		rc = modbus_read_registers(ctx, MODBUS_BASEADR_LOW_HOLDINGS,//JCM : adresse holding=MODBUS_BASEADR_LOW_HOLDINGS
+			MODBUS_SIZE_READ_HOLDINGS_LOW, tab_rp_registers_low);
+		if (rc != MODBUS_SIZE_READ_HOLDINGS_LOW)
+			Console::WriteLine(S"ThreadProc: read holdings failed...");
+		Thread::Sleep(500);
+ 
+		uint16_t wordPermuted[2];
+		float real = modbus_get_float(tab_rp_registers_low+6);//dP : float32 Normal
+		*(wordPermuted+0)= tab_rp_registers_low[6+1];//dP : float32 Reverse
+		*(wordPermuted+1)= tab_rp_registers_low[6+0];//dP : float32 Reverse
+		float realReversed = modbus_get_float(wordPermuted+0);//dP : float32 Reverse
+
+		Console::WriteLine(S"ThreadProc: read float...");
+//		if (real != UT_REAL)
+//			Console::WriteLine(S"ThreadProc: read float failed...");
+		printf("real(2006d) = normal=%f reverse=%f\n", 
+			real,
+			//word2float[0]+(word2float[1]<<16)
+			//tab_rp_registers_low[6]+(tab_rp_registers_low[7]<<16));
+			realReversed);
+		Thread::Sleep(500);
+
+		uint16_t tab_rp_registers_high[MODBUS_SIZE_READ_HOLDINGS_HIGH];
+		Console::WriteLine(S"ThreadProc: read holdings...");
+		rc = modbus_read_registers(ctx, MODBUS_BASEADR_HIGH_HOLDINGS,
+			MODBUS_SIZE_READ_HOLDINGS_HIGH, tab_rp_registers_high);
+		if (rc != MODBUS_SIZE_READ_HOLDINGS_HIGH)
+			Console::WriteLine(S"ThreadProc: read holdings failed...");
+		Thread::Sleep(500);
+
+		real = modbus_get_float(tab_rp_registers_high+36);//Pi_max
+		Console::WriteLine(S"ThreadProc: read float...");
+//		if (real != UT_REAL)
+//			Console::WriteLine(S"ThreadProc: read float failed...");
+		printf("real(2118d) = %f\n", real);
+		Thread::Sleep(500);
+ 	}
+};
+
+
+CGroupBox::CGroupBox(String* gname, int posX, int posY)
+{
+	name=gname;
+	nbInstance++;
+
+	// Creation
+	gbox = new GroupBox();
+	gbox->Text = name;
+	gbox->Size = System::Drawing::Size(200, 200);//taille du groupbox en pixels
+	gbox->Location = Point(posX,posY);
+
+	// Num_P label tt seul
+	Label* labNumP= new Label();
+//	labNumP->Location = Point(posX+10,posY+5);
+	labNumP->Location = Point(70,35);
+	labNumP->Size = System::Drawing::Size(50,16);
+	labNumP->Text = "Num_P";//zone de texte initialisée 
+	labNumP->Font = new System::Drawing::Font(S"Arial", 9, FontStyle::Bold);;
+	labNumP->TextAlign = ContentAlignment::MiddleRight;
+	valNumP= new TextBox();
+	valNumP->Location = Point(70,55);
+	valNumP->Size = System::Drawing::Size(60, 40);
+	valNumP->Text = "xx";//zone de texte initialisée vide
+	valNumP->Font = new System::Drawing::Font(S"Arial", 9, FontStyle::Bold);
+	valNumP->ForeColor = Color::Brown;
+	gbox->Controls->Add(labNumP);
+	gbox->Controls->Add(valNumP);
+	// Num_C1 label tt seul
+	Label* labNumC1= new Label();
+//	labNumC1->Location = Point(posX+5, posY+20);
+	labNumC1->Location = Point(20, 90);
+	labNumC1->Size = System::Drawing::Size(50,16);
+	labNumC1->Text = "1";//zone de texte initialisée 
+	labNumC1->Font = new System::Drawing::Font(S"Arial", 9, FontStyle::Bold);;
+	labNumC1->TextAlign = ContentAlignment::MiddleRight;
+	valNumC1= new TextBox();
+	valNumC1->Location = Point(30,110);
+	valNumC1->Size = System::Drawing::Size(60, 40);
+	valNumC1->Text = "xx";//zone de texte initialisée vide
+	valNumC1->Font = new System::Drawing::Font(S"Arial", 9, FontStyle::Bold);;
+	valNumC1->ForeColor = Color::Brown;
+	gbox->Controls->Add(labNumC1);
+	gbox->Controls->Add(valNumC1);
+	// Num_C2 label tt seul
+	Label* labNumC2= new Label();
+//	labNumC2->Location = Point(posX+60, posY+20);
+	labNumC2->Location = Point(85, 90);
+	labNumC2->Size = System::Drawing::Size(50,16);
+	labNumC2->Text = "2";//zone de texte initialisée 
+	labNumC2->Font = new System::Drawing::Font(S"Arial", 9, FontStyle::Bold);;
+	labNumC2->TextAlign = ContentAlignment::MiddleRight;
+	valNumC2= new TextBox();
+	valNumC2->Location = Point(105,110);
+	valNumC2->Size = System::Drawing::Size(60, 40);
+	valNumC2->Text = "xx";//zone de texte initialisée vide
+	valNumC2->Font = new System::Drawing::Font(S"Arial", 9, FontStyle::Bold);;
+	valNumC2->ForeColor = Color::Brown;
+	gbox->Controls->Add(labNumC2);
+	gbox->Controls->Add(valNumC2);
+	//bouton Appliquer
+	appliquerBtn = new Button();
+	appliquerBtn->Location = Point(65, 170);
+	appliquerBtn->Name = "Bouton Appliquer";
+	appliquerBtn->Text = "Appliquer";
+	appliquerBtn->Click += new EventHandler(this, &CGroupBox::AppliquerBtn_Clicked);
+	gbox->Controls->Add(appliquerBtn);
+
+/*
+	String* str;
+	str=String::Concat(labNumC1->Text);
+	Console::WriteLine(str);	
+	str=String::Concat(labNumC2->Text);
+	Console::WriteLine(str);	
+*/
+	//..............
+	//..............
+
+}
+
+Label* CGroupBox::GetLabelNumP()
+{
+	return labNumP;
+}
+
+Label* CGroupBox::GetLabelNumC1()
+{
+	return labNumC1;
+}
+
+Label* CGroupBox::GetLabelNumC2()
+{
+	return labNumC2;
+}
+
+GroupBox* CGroupBox::GetGroupBox()
+{
+	return gbox;
+}
+
+void CGroupBox::AppliquerBtn_Clicked(Object* pSender, EventArgs* pArgs)//gestionnaire d'evenements associés au bouton Appliquer
+    {
+		String* str;
+		//lecture fichier ou BDD pour comparaison avec saisie
+		try
+			{
+				FileStream* fs = new FileStream("..\\test1_4xsuc.txt",FileMode::Open);
+				StreamReader* sr = new StreamReader(fs);
+				int count=0;
+
+			if(!String::Compare(name,"a"))
+			{
+				Console::WriteLine(S"appliquer a");
+				for (;;)
+				{
+					String* line = sr->ReadLine();
+					if (count==0)
+						if(String::Compare(line,valNumP->Text))
+						{
+							MessageBox::Show(S"a: NumP n'existe pas !!");
+							sr->Close();
+							break;
+						}
+					if (count==1)
+						if(String::Compare(line,valNumC1->Text))
+						{
+							MessageBox::Show(S"a: NumC1 n'existe pas !!");
+							sr->Close();
+							break;
+						}
+					if (count==2)
+						if(String::Compare(line,valNumC2->Text))
+						{
+							MessageBox::Show(S"a: NumC2 n'existe pas !!");
+							sr->Close();
+							break;
+						}
+					count++;
+					if (line==0)//fin du fichier
+					{
+						sr->Close();
+						uint16_t tab_rp_registers[2];
+						int rc;
+						int size;
+						Console::WriteLine(S"CGroupBox::::AppliquerBtn_Clicked : write NumP NumC1 et NumC2...");
+						size=1;
+						tab_rp_registers[0] = Convert::ToInt16(valNumP->Text);
+						modbus_write_registers(ctx, 2070,size, tab_rp_registers);//NumP
+						if (rc != size)
+							Console::WriteLine(S"CGroupBox::::AppliquerBtn_Clicked : write holding failed...");		
+	//					Console::WriteLine(S"CGroupBox::::AppliquerBtn_Clicked : write holding...");
+						size=2;
+						tab_rp_registers[0] = Convert::ToInt16(valNumC1->Text);
+						tab_rp_registers[1] = Convert::ToInt16(valNumC2->Text);
+						modbus_write_registers(ctx, 2050,size, tab_rp_registers);//NumC1 et NumC2
+						if (rc != size)
+							Console::WriteLine(S"CGroupBox::::AppliquerBtn_Clicked : write holding failed...");		
+						break;
+					}
+				}
+			}
+			if(!String::Compare(name,"b"))
+			{
+				Console::WriteLine(S"appliquer b");	
+				for (;;)
+				{
+					String* line = sr->ReadLine();
+					if (count==3)
+						if(String::Compare(line,valNumP->Text))
+						{
+							MessageBox::Show(S"b: NumP n'existe pas !!");
+							sr->Close();
+							break;
+						}
+					if (count==4)
+						if(String::Compare(line,valNumC1->Text))
+						{
+							MessageBox::Show(S"b: NumC1 n'existe pas !!");
+							sr->Close();
+							break;
+						}
+					if (count==5)
+						if(String::Compare(line,valNumC2->Text))
+						{
+							MessageBox::Show(S"b: NumC2 n'existe pas !!");
+							sr->Close();
+							break;
+						}
+					count++;
+					if (line==0)//fin du fichier
+					{
+						sr->Close();
+						uint16_t tab_rp_registers[2];
+						int rc;
+						int size;
+						Console::WriteLine(S"CGroupBox::::AppliquerBtn_Clicked : write NumP NumC1 et NumC2...");
+						size=1;
+						tab_rp_registers[0] = Convert::ToInt16(valNumP->Text);
+						modbus_write_registers(ctx, 2071,size, tab_rp_registers);//NumP
+						if (rc != size)
+							Console::WriteLine(S"CGroupBox::::AppliquerBtn_Clicked : write holding failed...");		
+	//					Console::WriteLine(S"CGroupBox::::AppliquerBtn_Clicked : write holding...");
+						size=2;
+						tab_rp_registers[0] = Convert::ToInt16(valNumC1->Text);
+						tab_rp_registers[1] = Convert::ToInt16(valNumC2->Text);
+						modbus_write_registers(ctx, 2052,size, tab_rp_registers);//NumC1 et NumC2
+						if (rc != size)
+							Console::WriteLine(S"CGroupBox::::AppliquerBtn_Clicked : write holding failed...");		
+						break;
+					}
+				}
+			}
+			if(!String::Compare(name,"c"))
+			{
+				Console::WriteLine(S"appliquer c");	
+				for (;;)
+				{
+					String* line = sr->ReadLine();
+					if (count==6)
+						if(String::Compare(line,valNumP->Text))
+						{
+							MessageBox::Show(S"c: NumP n'existe pas !!");
+							sr->Close();
+							break;
+						}
+					if (count==7)
+						if(String::Compare(line,valNumC1->Text))
+						{
+							MessageBox::Show(S"c: NumC1 n'existe pas !!");
+							sr->Close();
+							break;
+						}
+					if (count==8)
+						if(String::Compare(line,valNumC2->Text))
+						{
+							MessageBox::Show(S"c: NumC2 n'existe pas !!");
+							sr->Close();
+							break;
+						}
+					count++;
+					if (line==0)//fin du fichier
+					{
+						sr->Close();
+						uint16_t tab_rp_registers[2];
+						int rc;
+						int size;
+						Console::WriteLine(S"CGroupBox::::AppliquerBtn_Clicked : write NumP NumC1 et NumC2...");
+						size=1;
+						tab_rp_registers[0] = Convert::ToInt16(valNumP->Text);
+						modbus_write_registers(ctx, 2072,size, tab_rp_registers);//NumP
+						if (rc != size)
+							Console::WriteLine(S"CGroupBox::::AppliquerBtn_Clicked : write holding failed...");		
+	//					Console::WriteLine(S"CGroupBox::::AppliquerBtn_Clicked : write holding...");
+						size=2;
+						tab_rp_registers[0] = Convert::ToInt16(valNumC1->Text);
+						tab_rp_registers[1] = Convert::ToInt16(valNumC2->Text);
+						modbus_write_registers(ctx, 2054,size, tab_rp_registers);//NumC1 et NumC2
+						if (rc != size)
+							Console::WriteLine(S"CGroupBox::::AppliquerBtn_Clicked : write holding failed...");		
+						break;
+					}
+				}
+			}
+			if(!String::Compare(name,"d"))
+			{
+				Console::WriteLine(S"appliquer d");	
+				for (;;)
+				{
+					String* line = sr->ReadLine();
+					if (count==9)
+						if(String::Compare(line,valNumP->Text))
+						{
+							MessageBox::Show(S"d: NumP n'existe pas !!");
+							sr->Close();
+							break;
+						}
+					if (count==10)
+						if(String::Compare(line,valNumC1->Text))
+						{
+							MessageBox::Show(S"d: NumC1 n'existe pas !!");
+							sr->Close();
+							break;
+						}
+					if (count==11)
+						if(String::Compare(line,valNumC2->Text))
+						{
+							MessageBox::Show(S"d: NumC2 n'existe pas !!");
+							sr->Close();
+							break;
+						}
+					count++;
+					if (line==0)//fin du fichier
+					{
+						sr->Close();
+						uint16_t tab_rp_registers[2];
+						int rc;
+						int size;
+						Console::WriteLine(S"CGroupBox::::AppliquerBtn_Clicked : write NumP NumC1 et NumC2...");
+						size=1;
+						tab_rp_registers[0] = Convert::ToInt16(valNumP->Text);
+						modbus_write_registers(ctx, 2073,size, tab_rp_registers);//NumP
+						if (rc != size)
+							Console::WriteLine(S"CGroupBox::::AppliquerBtn_Clicked : write holding failed...");		
+	//					Console::WriteLine(S"CGroupBox::::AppliquerBtn_Clicked : write holding...");
+						size=2;
+						tab_rp_registers[0] = Convert::ToInt16(valNumC1->Text);
+						tab_rp_registers[1] = Convert::ToInt16(valNumC2->Text);
+						modbus_write_registers(ctx, 2056,size, tab_rp_registers);//NumC1 et NumC2
+						if (rc != size)
+							Console::WriteLine(S"CGroupBox::::AppliquerBtn_Clicked : write holding failed...");		
+						break;
+					}
+				}
+			}
+		}
+		catch (System::Exception* pe)
+			{
+				Console::WriteLine(pe->ToString());
+			}
+		int count=0;
+
+  }
+
+CDialogConfig::CDialogConfig()
+    {
+        // définit les paramètres du formulaire
+        Text = S"XSUC - ecriture serveur";
+        FormBorderStyle = FormBorderStyle::Fixed3D;//impossible de modifier la taille
+        Size = System::Drawing::Size(1000,800);
+
+        // Creation de controle
+        sortirBtn = new Button();
+        
+        // bouton OK
+        sortirBtn->Location = Point(900, 700);
+        sortirBtn->Name = "Bouton Sortir";
+        sortirBtn->Text = "sortir";
+        sortirBtn->DialogResult = DialogResult::OK;
+
+        // Ajoute les controles dans le formaulaire
+        Controls->Add(sortirBtn);
+
+/*	GroupBox* gbox = new GroupBox();
+	gbox->Text = S"name";
+	gbox->Size = System::Drawing::Size(200, 150);//taille du groupbox en pixels
+	gbox->Location = Point(200,90);
+	Label* labNumP= new Label();
+	labNumP->Location = Point(10, 20);
+	labNumP->Size = System::Drawing::Size(50,16);
+	labNumP->Text = "Num_P";//zone de texte initialisée 
+	labNumP->TextAlign = ContentAlignment::MiddleRight;
+	gbox->Controls->Add(labNumP);
+	Controls->Add(gbox);
+*/
+		pal = new ArrayList();
+		int j=20;//depart affichage
+		for (indexGroupBox=0;indexGroupBox<NB_BANCS;indexGroupBox++)//creation des controles dans le formulaire
+		{
+			pal->Add(new CGroupBox(gname[indexGroupBox],j,90));
+			j+=250;
+			CGroupBox* gboxPtr = (CGroupBox *) pal->get_Item(indexGroupBox);
+//			gboxPtr->Controls->Add(gboxPtr->GetLabelNumP());
+//			gboxPtr->GetGroupBox()->Controls->Add(gboxPtr->GetLabelNumC1());
+//			gboxPtr->Controls->Add(gboxPtr->GetLabelNumC2());
+			Controls->Add(gboxPtr->GetGroupBox());
+			String* str;
+			str=String::Concat(gboxPtr->GetGroupBox()->Text);
+			Console::WriteLine(str);	
+/*			str=String::Concat(gboxPtr->GetLabelNumP()->Text);
+			Console::WriteLine(str);	
+			str=String::Concat(gboxPtr->GetLabelNumC1()->Text);
+			Console::WriteLine(str);	
+*/		}
+
+		//configure les 2 propriétés : AcceptButton contient la réf du bouton par défaut du formulaire..
+		//..on peut cliquer sur le bouton OK ou bien sur la touche Entrée du clavier..
+		//..referme aussi la boite car DialogResult renvoie OK
+        AcceptButton = sortirBtn;
+
+		//gestionnnaire associé au bouton OK
+		sortirBtn->Click += new EventHandler(this, &CDialogConfig::SortirBtn_Clicked);
+	}
+
+CDialogConfig::CDialogConfig(uint16_t *tab_rp_registers_low,uint16_t *tab_rp_registers_high)
+    {
+        // définit les paramètres du formulaire
+        Text = S"XSUC - ecriture serveur";
+        FormBorderStyle = FormBorderStyle::Fixed3D;//impossible de modifier la taille
+        Size = System::Drawing::Size(1000,800);
+
+        // Creation de controle
+        sortirBtn = new Button();
+        
+        // bouton OK
+        sortirBtn->Location = Point(900, 700);
+        sortirBtn->Name = "Bouton Sortir";
+        sortirBtn->Text = "sortir";
+        sortirBtn->DialogResult = DialogResult::OK;
+
+        // Ajoute les controles dans le formaulaire
+        Controls->Add(sortirBtn);
+
+/*	GroupBox* gbox = new GroupBox();
+	gbox->Text = S"name";
+	gbox->Size = System::Drawing::Size(200, 150);//taille du groupbox en pixels
+	gbox->Location = Point(200,90);
+	Label* labNumP= new Label();
+	labNumP->Location = Point(10, 20);
+	labNumP->Size = System::Drawing::Size(50,16);
+	labNumP->Text = "Num_P";//zone de texte initialisée 
+	labNumP->TextAlign = ContentAlignment::MiddleRight;
+	gbox->Controls->Add(labNumP);
+	Controls->Add(gbox);
+*/
+		pal = new ArrayList();
+		int j=20;//depart affichage
+		for (indexGroupBox=0;indexGroupBox<NB_BANCS;indexGroupBox++)//creation des controles dans le formulaire
+		{
+			pal->Add(new CGroupBox(gname[indexGroupBox],j,90));
+			j+=250;
+			CGroupBox* gboxPtr = (CGroupBox *) pal->get_Item(indexGroupBox);
+//			gboxPtr->Controls->Add(gboxPtr->GetLabelNumP());
+//			gboxPtr->GetGroupBox()->Controls->Add(gboxPtr->GetLabelNumC1());
+//			gboxPtr->Controls->Add(gboxPtr->GetLabelNumC2());
+			Controls->Add(gboxPtr->GetGroupBox());
+			String* str;
+			str=String::Concat(gboxPtr->GetGroupBox()->Text);
+			Console::WriteLine(str);	
+/*			str=String::Concat(gboxPtr->GetLabelNumP()->Text);
+			Console::WriteLine(str);	
+			str=String::Concat(gboxPtr->GetLabelNumC1()->Text);
+			Console::WriteLine(str);	
+*/		}
+
+		//configure les 2 propriétés : AcceptButton contient la réf du bouton par défaut du formulaire..
+		//..on peut cliquer sur le bouton OK ou bien sur la touche Entrée du clavier..
+		//..referme aussi la boite car DialogResult renvoie OK
+        AcceptButton = sortirBtn;
+
+		//gestionnnaire associé au bouton OK
+		sortirBtn->Click += new EventHandler(this, &CDialogConfig::SortirBtn_Clicked);
+	}
+
+void CDialogConfig::SortirBtn_Clicked(Object* pSender,EventArgs* pArgs)//gestionnaire d'evenement de la boite dialogue
+	{
+		//fermer le formulaire lorsqu'on clique sur le bouton
+		Close();
+	}
+
+
+CLabelTextBox::CLabelTextBox(String* labString, int posX, int posY, int sizeX, int sizeY, int sizeText)
+{
+	name=labString;
+	labPosX=posX;
+	labPosY=posY;
+	labSizeX=sizeX;
+	labSizeY=sizeY;
+	nbInstance++;
+
+	lab= new Label();
+	val= new TextBox();
+	
+	// dPLabel et dPBox : label et zone de saisie sont placés  l'un à côté de l'autre
+	lab->Location = Point(labPosX, labPosY);
+	lab->Size = System::Drawing::Size(labSizeX,labSizeY);
+	lab->Text = name;//zone de texte initialisée 
+	lab->TextAlign = ContentAlignment::MiddleRight;
+	val->Location = Point(labPosX+labSizeX, labPosY);
+	val->Size = System::Drawing::Size(sizeText, 20);
+	val->Text = "";//zone de texte initialisée vide
+}
+
+Label* CLabelTextBox::GetLabel()
+{
+	return lab;
+}
+
+TextBox* CLabelTextBox::GetTextBox()
+{
+	return val;
+}
+
+String* CLabelTextBox::GetName()
+{
+return name;
+}
+
+void CLabelTextBox::SetVal(String* value)
+{
+	val->Text=value;
+}
+
+String* CLabelTextBox::GetVal()
+{
+	return val->Text;
+}
+
+void CLabelTextBox::SetColor(int value)
+{
+	if(value)
+		val->BackColor=Color::Red;
+	else
+		val->BackColor=Color::White;
+}
+
+
+MaDialogUser::MaDialogUser()
+    {
+        // définit les paramètres du formulaire
+		Text = S"XSUC - lecture serveur";
+        FormBorderStyle = FormBorderStyle::Fixed3D;//impossible de modifier la taille
+        Size = System::Drawing::Size(1000,800);
+
+        // Creation de controle
+        OKBtn = new Button();
+		EcritureBtn = new Button();
+//        CancelBtn = new Button();
+        
+        // bouton OK
+        OKBtn->Location = Point(900, 700);
+        OKBtn->Name = "Bouton OK";
+        OKBtn->Text = "OK";
+        OKBtn->DialogResult = DialogResult::OK;
+/*
+        // bouton Cancel
+        CancelBtn->Location = Point(192, 136);
+        CancelBtn->Name = "Bouton Cancel";
+        CancelBtn->Text = "Annuler";
+        CancelBtn->DialogResult = DialogResult::Cancel;
+*/
+		// bouton Ecriture
+        EcritureBtn->Location = Point(900, 600);
+        EcritureBtn->Name = "Bouton Ecriture";
+        EcritureBtn->Text = "Ecriture";
+		EcritureBtn->DialogResult = DialogResult::OK;
+
+        // Ajoute les controles dans le formaulaire
+        Controls->Add(OKBtn);
+        Controls->Add(EcritureBtn);
+
+		pal = new ArrayList();
+		for (indexTextBox=0;indexTextBox<20;indexTextBox++)//creation des controles dans le formulaire
+		{
+			int posX=650, j=indexTextBox;
+			if (indexTextBox>=10)
+			{
+				posX=800;
+				j=indexTextBox-10;
+			}
+			pal->Add(new CLabelTextBox(nameLab_1[indexTextBox],posX,(25*j)+10,100,16,70));
+			CLabelTextBox* cltbPtr = (CLabelTextBox *) pal->get_Item(indexTextBox);
+			Controls->Add(cltbPtr->GetLabel());
+			Controls->Add(cltbPtr->GetTextBox());
+		}
+		for (;indexTextBox<26;indexTextBox++)//creation des controles dans le formulaire
+		{
+			int posX=400, j=indexTextBox-20;
+			int sizeText=70;
+			if (indexTextBox==20)sizeText=20;
+			pal->Add(new CLabelTextBox(nameLab_1[indexTextBox],posX,(25*j)+10,100,16,sizeText));
+			CLabelTextBox* cltbPtr = (CLabelTextBox *) pal->get_Item(indexTextBox);
+			Controls->Add(cltbPtr->GetLabel());
+			Controls->Add(cltbPtr->GetTextBox());
+		}
+		Setup_Group_Conditionning();
+		// Mode tt seul
+		pal->Add(new CLabelTextBox("MODE",20,100,50,16,75));
+		CLabelTextBox* cltbPtr = (CLabelTextBox *) pal->get_Item(indexTextBox++);
+		Controls->Add(cltbPtr->GetLabel());
+		Controls->Add(cltbPtr->GetTextBox());
+
+		//configure les 2 propriétés : AcceptButton contient la réf du bouton par défaut du formulaire..
+		//..on peut cliquer sur le bouton OK ou bien sur la touche Entrée du clavier..
+		//..referme aussi la boite car DialogResult renvoie OK
+        AcceptButton = OKBtn;
+		//CancelButton contient la réf du bouton associée à la touche Echap du clavier
+  //      CancelButton = CancelBtn;
+
+		//gestionnnaire associé aux boutons
+		OKBtn->Click += new EventHandler(this, &MaDialogUser::OKMaDBtn_Clicked);
+		EcritureBtn->Click += new EventHandler(this, &MaDialogUser::EcritureBtn_Clicked);
+
+		Setup_Group();
+	}
+
+void MaDialogUser::EcritureBtn_Clicked(Object* pSender,EventArgs* pArgs)//gestionnaire d'evenement de la boite dialogue
+	{
+		//crée la boite de dialogue utilisateur
+		CDialogConfig* box = new CDialogConfig();
+		//affiche la boite de dialogue
+		if (box->ShowDialog() == DialogResult::OK)
+		{
+			//si la valeur OK est renvoyée, on affiche le nom
+			//MessageBox::Show(S"Ecriture");
+		}
+	}
+
+void MaDialogUser::OKMaDBtn_Clicked(Object* pSender,EventArgs* pArgs)//gestionnaire d'evenement de la boite dialogue
+	{
+		//fermer le formulaire lorsqu'on clique sur le bouton
+		Close();
+	}
+
+float MaDialogUser::PermutToReversed(uint16_t* tab_rp_registers,int index)//permute float32 en float32 Reverse
+	{
+			uint16_t wordPermuted[2];
+
+			*(wordPermuted+0)= tab_rp_registers[index+1];
+			*(wordPermuted+1)= tab_rp_registers[index+0];
+			return (modbus_get_float(wordPermuted+0));//float32 Reverse
+	}
+
+void MaDialogUser::ThreadProc()//gestionnaire d'evenement du thread de la boite dialogue
+	{
+		uint8_t tab_rp_bits[MODBUS_SIZE_READ_COILS];
+		uint16_t tab_rp_registers_low[MODBUS_SIZE_READ_HOLDINGS_LOW];
+		uint16_t tab_rp_registers_high[MODBUS_SIZE_READ_HOLDINGS_HIGH];
+		int rc, adress, size;
+		CLabelTextBox* cltbPtr;
+
+		for (;;)
+		{
+			Thread::Sleep(500);
+			Console::WriteLine(S"ThreadProc: read coils...");
+			adress=MODBUS_BASEADR_COILS;//adresse coils=MODBUS_BASEADR_COILS
+			size=MODBUS_SIZE_READ_COILS;
+			rc = modbus_read_bits(ctx, adress, size, tab_rp_bits);////JCM : adresse coils=MODBUS_BASEADR_COILS
+			if (rc != size)
+				Console::WriteLine(S"ThreadProc: read coils failed...");
+
+			Thread::Sleep(500);
+			Console::WriteLine(S"ThreadProc: read holdings...");
+			adress=MODBUS_BASEADR_LOW_HOLDINGS;//adresse holding=MODBUS_BASEADR_LOW_HOLDINGS
+			size=82;
+			rc = modbus_read_registers(ctx, adress, size, tab_rp_registers_low);
+			if (rc != size)
+				Console::WriteLine(S"ThreadProc: read holdings failed...");
+
+			int indexArrayList=0;
+			//dtp : ui16
+			cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList++);
+			cltbPtr->SetVal(Convert::ToString(tab_rp_registers_low[4]));
+			//dt : ui16
+			cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList++);
+			cltbPtr->SetVal(Convert::ToString(tab_rp_registers_low[5]));	
+			//dP : float32
+			cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList++);
+			cltbPtr->SetVal(Convert::ToString(PermutToReversed(tab_rp_registers_low,6)));
+			//dPsecu : float32
+			cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList++);
+			cltbPtr->SetVal(Convert::ToString(PermutToReversed(tab_rp_registers_low,8)));
+
+			//NBal : ui16
+			cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList++);
+			cltbPtr->SetVal(Convert::ToString(tab_rp_registers_low[42]));
+			//P_cde : float32
+			cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList++);
+			cltbPtr->SetVal(Convert::ToString(PermutToReversed(tab_rp_registers_low,43)));
+			//Pp : float32
+			cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList++);
+			cltbPtr->SetVal(Convert::ToString(PermutToReversed(tab_rp_registers_low,45)));
+
+			//Nbal_max : ui16
+			cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList++);
+			cltbPtr->SetVal(Convert::ToString(tab_rp_registers_low[25]));
+			//Fr : ui16
+			cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList++);
+			cltbPtr->SetVal(Convert::ToString(tab_rp_registers_low[26]));
+			//N_cur : ui16
+			cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList++);
+			cltbPtr->SetVal(Convert::ToString(tab_rp_registers_low[27]));
+
+			//SVd : ui16
+			cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList++);
+			cltbPtr->SetVal(Convert::ToString(tab_rp_registers_low[0]));
+			//SVfin : ui16
+			cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList++);
+			cltbPtr->SetVal(Convert::ToString(tab_rp_registers_low[1]));
+			//SV1 : ui16
+			cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList++);
+			cltbPtr->SetVal(Convert::ToString(tab_rp_registers_low[2]));
+			//SV2 : ui16
+			cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList++);
+			cltbPtr->SetVal(Convert::ToString(tab_rp_registers_low[3]));
+
+			//V_cur : ui16
+			cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList++);
+			cltbPtr->SetVal(Convert::ToString(tab_rp_registers_low[37]));
+			//Pic : float32
+			cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList++);
+			cltbPtr->SetVal(Convert::ToString(PermutToReversed(tab_rp_registers_low,38)));
+			//Timer : uint32
+			cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList++);
+			cltbPtr->SetVal(Convert::ToString((tab_rp_registers_low[40]<<16)+(tab_rp_registers_low[41])));
+
+			//SVil : ui16
+			cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList++);
+			cltbPtr->SetVal(Convert::ToString(tab_rp_registers_low[20]));
+			//Sleil : float32
+			cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList++);
+			cltbPtr->SetVal(Convert::ToString(PermutToReversed(tab_rp_registers_low,21)));
+			//STc : float32
+			cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList++);
+			cltbPtr->SetVal(Convert::ToString(PermutToReversed(tab_rp_registers_low,23)));
+
+			//Eil : bool
+			cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList++);
+			cltbPtr->SetVal(Convert::ToString(tab_rp_bits[0]));
+			if(tab_rp_bits[0])//echec changer couleur
+				cltbPtr->SetColor(1);
+			else
+				cltbPtr->SetColor(0);
+			//Nil : ui16
+			cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList++);
+			cltbPtr->SetVal(Convert::ToString(tab_rp_registers_low[30]));
+			//Nil_stat : ui16
+			cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList++);
+			cltbPtr->SetVal(Convert::ToString(tab_rp_registers_low[31]));
+			//P_last : float32
+			cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList++);
+			cltbPtr->SetVal(Convert::ToString(PermutToReversed(tab_rp_registers_low,32)));
+			//N_last : ui16
+			cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList++);
+			cltbPtr->SetVal(Convert::ToString(tab_rp_registers_low[34]));
+			//DPil : float32
+			cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList++);
+			cltbPtr->SetVal(Convert::ToString(PermutToReversed(tab_rp_registers_low,35)));
+
+			//Num_C : tab ui16
+			for (int indexMbArray=50;(indexArrayList<34 && indexMbArray<58);indexMbArray++)
+			{
+				cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList++);
+				cltbPtr->SetVal(Convert::ToString(tab_rp_registers_low[indexMbArray]));
+			}
+
+			//Stat_C : tab bool
+			for (int indexMbArray=1;(indexArrayList<46 && indexMbArray<13);indexMbArray++)
+			{
+				cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList++);
+				cltbPtr->SetVal(Convert::ToString(tab_rp_bits[indexMbArray]));
+				if(!tab_rp_bits[indexMbArray])//echec changer couleur
+					cltbPtr->SetColor(1);
+				else
+					cltbPtr->SetColor(0);
+			}
+
+			//Temp_cond : tab ui16
+			for (int indexMbArray=58;(indexArrayList<58 && indexMbArray<71);indexMbArray++)
+			{
+				cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList++);
+				cltbPtr->SetVal(Convert::ToString(tab_rp_registers_low[indexMbArray]));
+			}
+
+			//status : ui16
+			cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList++);
+			if (tab_rp_registers_low[49] != 4)//on n'est pas ds le mode pulsing
+			{
+				cltbPtr->SetVal("ARRET");
+				btnStart->Enabled=false;//bouton start
+				btnStop->Enabled=false;//bouton stop
+				btnPause->Enabled=false;//bouton pause
+				btnReprise->Enabled=false;//bouton reprise
+			}
+			else
+			{//mode pulsing
+				switch (tab_rp_registers_low[28]){//RetMAPR
+					case 0://conditionnement arreté
+						cltbPtr->SetVal("ARRET");
+						btnStart->Enabled=true;//bouton start
+						btnStop->Enabled=false;//bouton stop
+						btnPause->Enabled=false;//bouton pause
+						btnReprise->Enabled=false;//bouton reprise
+					break;
+					case 2: case 3://conditionnement démarré ou repris
+						cltbPtr->SetVal("MARCHE");
+						btnStart->Enabled=false;//bouton start
+						btnStop->Enabled=true;//bouton stop
+						btnPause->Enabled=true;//bouton pause
+						btnReprise->Enabled=false;//bouton reprise
+					break;
+					case 1://conditionnement en pause
+						cltbPtr->SetVal("PAUSE");
+						btnStart->Enabled=false;//bouton start
+						btnStop->Enabled=true;//bouton stop
+						btnPause->Enabled=false;//bouton pause
+						btnReprise->Enabled=true;//bouton reprise
+					break;
+				}
+			if (tab_rp_registers_low[28] != tab_rp_registers_low[48])//message affiché
+			{
+				String* stra[] = {S"RetMAPR=",Convert::ToString(tab_rp_registers_low[28]),
+					S" not equal to MAPR=",Convert::ToString(tab_rp_registers_low[48])};
+				String* str=String::Concat(stra);
+				Console::WriteLine(str);
+			}
+			}//fin mode pulsing
+
+			//N_Seqcond : ui16
+			cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList++);
+			cltbPtr->SetVal(Convert::ToString(tab_rp_registers_low[47]));
+
+			Thread::Sleep(500);
+			Console::WriteLine(S"ThreadProc: read holdings...");
+			adress=MODBUS_BASEADR_HIGH_HOLDINGS;//adresse holding=MODBUS_BASEADR_HIGH_HOLDINGS
+			size=MODBUS_SIZE_READ_HOLDINGS_HIGH;
+			rc = modbus_read_registers(ctx, adress, size, tab_rp_registers_high);
+			if (rc != size)
+				Console::WriteLine(S"ThreadProc: read holdings failed...");
+
+			//DateD HeureD : tab ui16
+			String* str;
+			String* strDD[] = {
+				Convert::ToString(tab_rp_registers_high[84]),
+				"-",
+				Convert::ToString(tab_rp_registers_high[85]),
+				"-",
+				Convert::ToString(tab_rp_registers_high[86])};
+			str=String::Concat(strDD);
+			cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList++);
+			cltbPtr->SetVal(str);
+			String* strHD[] = {
+				Convert::ToString(tab_rp_registers_high[87]),
+				":",
+				Convert::ToString(tab_rp_registers_high[88]),
+				":",
+				Convert::ToString(tab_rp_registers_high[89])};
+			str=String::Concat(strHD);
+			cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList++);
+			cltbPtr->SetVal(str);
+
+			//DateF HeureF : tab ui16
+			String* strDF[] = {
+				Convert::ToString(tab_rp_registers_high[90]),
+				"-",
+				Convert::ToString(tab_rp_registers_high[91]),
+				"-",
+				Convert::ToString(tab_rp_registers_high[92])};
+			str=String::Concat(strDF);
+			cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList++);
+			cltbPtr->SetVal(str);
+			String* strHF[] = {
+				Convert::ToString(tab_rp_registers_high[93]),
+				":",
+				Convert::ToString(tab_rp_registers_high[94]),
+				":",
+				Convert::ToString(tab_rp_registers_high[95])};
+			str=String::Concat(strHF);
+			cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList++);
+			cltbPtr->SetVal(str);
+
+			//Vides : tab ui16
+			for (int indexMbArray=98;indexMbArray<110;indexMbArray++)
+			{
+				cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList++);
+				cltbPtr->SetVal(Convert::ToString(tab_rp_registers_high[indexMbArray]));
+			}
+
+			//Prc : tab float32
+			for (int indexMbArray=68;indexMbArray<76;indexMbArray+=2)
+			{
+				cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList++);
+				cltbPtr->SetVal(Convert::ToString(PermutToReversed(tab_rp_registers_high,indexMbArray)));
+			}
+
+			//Pic : tab float32
+			for (int indexMbArray=60;indexMbArray<68;indexMbArray+=2)
+			{
+				cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList++);
+				cltbPtr->SetVal(Convert::ToString(PermutToReversed(tab_rp_registers_high,indexMbArray)));
+			}
+
+			//Pch : tab float32
+			for (int indexMbArray=76;indexMbArray<84;indexMbArray+=2)
+			{
+				cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList++);
+				cltbPtr->SetVal(Convert::ToString(PermutToReversed(tab_rp_registers_high,indexMbArray)));
+			}
+
+			//Ie_cur : tab float32
+			for (int indexMbArray=10;indexMbArray<18;indexMbArray+=2)
+			{
+				cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList++);
+				cltbPtr->SetVal(Convert::ToString(PermutToReversed(tab_rp_registers_low,indexMbArray)));
+			}
+
+			//Num_P : tab ui16
+			for (int indexMbArray=70;indexMbArray<74;indexMbArray++)
+			{
+				cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList++);
+				cltbPtr->SetVal(Convert::ToString(tab_rp_registers_low[indexMbArray]));
+			}
+
+			//Mode : ui16
+			cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList++);
+			switch (tab_rp_registers_low[49]){
+				case 0://station en mode init
+					cltbPtr->SetVal("INIT");
+					break;
+				case 1://station en mode off
+					cltbPtr->SetVal("OFF");
+					break;
+				case 2://station en mode heater
+					cltbPtr->SetVal("HEATER");
+					break;
+				case 3://station en mode standby
+					cltbPtr->SetVal("STANDBY");
+					break;
+				case 4://station en mode pulsing=conditionnement
+					cltbPtr->SetVal("PULSING");
+					break;
+				case 5://station en mode off
+					cltbPtr->SetVal("STOP");
+					break;
+			}
+//
+//
+		}
+ 	}
+
+void MaDialogUser::Setup_Group ()//creation et configuration d'un groupe d'options
+    {
+        // Creation
+        gbox = new GroupBox();
+        gbox->Text = S"enable lecture";
+		gbox->Size = System::Drawing::Size(200, 150);//taille du groupbox en pixels
+        gbox->Location = Point(200, 90);
+
+        // Creation des boutons radio.
+        rb1 = new RadioButton();
+        rb1->Text = S"oui";
+        rb1->Location = Point(10,25);
+
+        rb2 = new RadioButton();
+        rb2->Text = S"non";
+        rb2->Location = Point(10,55);
+
+		// ajout des controles dans le groupe 
+        gbox->Controls->Add(rb1);
+        gbox->Controls->Add(rb2);
+
+        // ajout du groupe dans le formulaire.
+        Controls->Add(gbox);
+
+        // associe le gestionnaire au groupe d'options
+        rb1->Click += new EventHandler(this, &MaDialogUser::Radio_Clicked);
+        rb2->Click += new EventHandler(this, &MaDialogUser::Radio_Clicked);
+    }
+
+void MaDialogUser::Setup_Group_Conditionning()//creation et configuration d'un groupe d'options
+    {
+        // Creation
+        GroupBox* gboxC = new GroupBox();
+        gboxC->Text = S"CONDITIONNEMENT";
+		gboxC->Size = System::Drawing::Size(800, 450);//taille du groupbox en pixels
+        gboxC->Location = Point(40,300);
+
+		Setup_Buttons_Conditionning();//configure les boutons du formulaire
+
+		// Num_C label tt seul
+		Label* num_C= new Label();
+		num_C->Location = Point(50, 390);
+		num_C->Size = System::Drawing::Size(50,16);
+		num_C->Text = "Num_C";//zone de texte initialisée 
+		num_C->TextAlign = ContentAlignment::MiddleRight;
+		Controls->Add(num_C);
+		int j=60;//depart affichage
+//		for (int i=0;indexTextBox<34;indexTextBox++,i++,j+=80)//creation des controles dans le formulaire
+		for (int i=0;i<NB_COUPLEURS;indexTextBox++,i++,j+=80)//creation des controles dans le formulaire
+		{
+			int posX=70;
+			pal->Add(new CLabelTextBox(nameLab_2[i],posX+j,390,25,16,50));
+			CLabelTextBox* cltbPtr = (CLabelTextBox *) pal->get_Item(indexTextBox);
+			Controls->Add(cltbPtr->GetLabel());
+			Controls->Add(cltbPtr->GetTextBox());
+		}
+
+		// Stat_C label tt seul
+		Label* stat_C= new Label();
+		stat_C->Location = Point(50, 630);
+		stat_C->Size = System::Drawing::Size(50,16);
+		stat_C->Text = "Stat_C";//zone de texte initialisée 
+		stat_C->TextAlign = ContentAlignment::MiddleRight;
+		Controls->Add(stat_C);
+		j=20;//depart affichage
+//		for (int i=0;indexTextBox<46;indexTextBox++,i++,j+=60)//creation des controles dans le formulaire
+		for (int i=0;i<NB_ETAPES;indexTextBox++,i++,j+=60)//creation des controles dans le formulaire
+		{
+			int posX=100;
+			pal->Add(new CLabelTextBox(Convert::ToString(i+1),posX+j,630,25,16,20));
+			CLabelTextBox* cltbPtr = (CLabelTextBox *) pal->get_Item(indexTextBox);
+			Controls->Add(cltbPtr->GetLabel());
+			Controls->Add(cltbPtr->GetTextBox());
+		}
+
+		// Temp_cond label tt seul
+		Label* temp_cond= new Label();
+		temp_cond->Location = Point(50, 670);
+		temp_cond->Size = System::Drawing::Size(70,16);
+		temp_cond->Text = "Temp_cond";//zone de texte initialisée 
+		temp_cond->TextAlign = ContentAlignment::MiddleRight;
+		Controls->Add(temp_cond);
+		j=20;//depart affichage
+//		for (int i=0;indexTextBox<58;indexTextBox++,i++,j+=60)//creation des controles dans le formulaire
+		for (int i=0;i<NB_ETAPES;indexTextBox++,i++,j+=60)//creation des controles dans le formulaire
+		{
+			int posX=90;
+			pal->Add(new CLabelTextBox(Convert::ToString(i+1),posX+j,670,25,16,40));
+			CLabelTextBox* cltbPtr = (CLabelTextBox *) pal->get_Item(indexTextBox);
+			Controls->Add(cltbPtr->GetLabel());
+			Controls->Add(cltbPtr->GetTextBox());
+		}
+
+		// status, N_Seqcond, DateD et heureD , DateF et HeureF labels tt seul
+		Label* status= new Label();
+		status->Location = Point(370, 700);
+		status->Size = System::Drawing::Size(65,16);
+		status->Text = "status";//zone de texte initialisée 
+		status->TextAlign = ContentAlignment::MiddleRight;
+		Controls->Add(status);
+		Label* n_seqcond= new Label();
+		n_seqcond->Location = Point(450, 700);
+		n_seqcond->Size = System::Drawing::Size(65,16);
+		n_seqcond->Text = "N_Seqcond";//zone de texte initialisée 
+		n_seqcond->TextAlign = ContentAlignment::MiddleRight;
+		Controls->Add(n_seqcond);
+		Label* dateD= new Label();
+		dateD->Location = Point(510, 700);
+		dateD->Size = System::Drawing::Size(65,16);
+		dateD->Text = "DateD";//zone de texte initialisée 
+		dateD->TextAlign = ContentAlignment::MiddleRight;
+		Controls->Add(dateD);
+		Label* heureD= new Label();
+		heureD->Location = Point(580, 700);
+		heureD->Size = System::Drawing::Size(65,16);
+		heureD->Text = "HeureD";//zone de texte initialisée 
+		heureD->TextAlign = ContentAlignment::MiddleRight;
+		Controls->Add(heureD);
+		Label* dateF= new Label();
+		dateF->Location = Point(650, 700);
+		dateF->Size = System::Drawing::Size(65,16);
+		dateF->Text = "DateF";//zone de texte initialisée 
+		dateF->TextAlign = ContentAlignment::MiddleRight;
+		Controls->Add(dateF);
+		Label* heureF= new Label();
+		heureF->Location = Point(720, 700);
+		heureF->Size = System::Drawing::Size(65,16);
+		heureF->Text = "HeureF";//zone de texte initialisée 
+		heureF->TextAlign = ContentAlignment::MiddleRight;
+		Controls->Add(heureF);
+		j=330;//depart affichage
+//		for (int i=0;indexTextBox<62;indexTextBox++,i++,j+=100)//creation des controles dans le formulaire
+		for (int i=0;i<6;indexTextBox++,i++,j+=70)//creation des controles dans le formulaire
+		{
+			int posX=0;
+			pal->Add(new CLabelTextBox("",posX+j,720,55,16,70));
+			CLabelTextBox* cltbPtr = (CLabelTextBox *) pal->get_Item(indexTextBox);
+			Controls->Add(cltbPtr->GetTextBox());
+		}
+
+		// Vides label tt seul
+		Label* vides = new Label();
+		vides->Location = Point(50, 590);
+		vides->Size = System::Drawing::Size(60,32);
+		vides->Text = "Vides       (10-9mbar)";//zone de texte initialisée 
+		vides->TextAlign = ContentAlignment::MiddleRight;
+		Controls->Add(vides);
+		j=40;//depart affichage
+		for (int i=0;i<(NB_BANCS*3);indexTextBox++,i++,j+=60)//creation des controles dans le formulaire
+		{
+			int posX=70;
+			pal->Add(new CLabelTextBox(nameLab_4[i],posX+j,590,10,16,50));
+			CLabelTextBox* cltbPtr = (CLabelTextBox *) pal->get_Item(indexTextBox);
+			Controls->Add(cltbPtr->GetLabel());
+			Controls->Add(cltbPtr->GetTextBox());
+		}
+
+		// Prc label tt seul
+		Label* prc = new Label();
+		prc->Location = Point(50, 430);
+		prc->Size = System::Drawing::Size(50,32);
+		prc->Text = "Prc   (kW)";//zone de texte initialisée 
+		prc->TextAlign = ContentAlignment::MiddleRight;
+		Controls->Add(prc);
+		j=100;//depart affichage
+		for (int i=0;i<NB_BANCS;indexTextBox++,i++,j+=180)//creation des controles dans le formulaire
+		{
+			int posX=70;
+			pal->Add(new CLabelTextBox(nameLab_3[i],posX+j,430,10,16,50));
+			CLabelTextBox* cltbPtr = (CLabelTextBox *) pal->get_Item(indexTextBox);
+			Controls->Add(cltbPtr->GetLabel());
+			Controls->Add(cltbPtr->GetTextBox());
+		}
+
+		// Pic label tt seul
+		Label* pic = new Label();
+		pic->Location = Point(50, 470);
+		pic->Size = System::Drawing::Size(50,32);
+		pic->Text = "Pic   (kW)";//zone de texte initialisée 
+		pic->TextAlign = ContentAlignment::MiddleRight;
+		Controls->Add(pic);
+		j=100;//depart affichage
+		for (int i=0;i<NB_BANCS;indexTextBox++,i++,j+=180)//creation des controles dans le formulaire
+		{
+			int posX=70;
+			pal->Add(new CLabelTextBox(nameLab_3[i],posX+j,470,10,16,50));
+			CLabelTextBox* cltbPtr = (CLabelTextBox *) pal->get_Item(indexTextBox);
+			Controls->Add(cltbPtr->GetLabel());
+			Controls->Add(cltbPtr->GetTextBox());
+		}
+
+		// Pch label tt seul
+		Label* pch = new Label();
+		pch->Location = Point(50, 510);
+		pch->Size = System::Drawing::Size(50,32);
+		pch->Text = "Pch   (kW)";//zone de texte initialisée 
+		pch->TextAlign = ContentAlignment::MiddleRight;
+		Controls->Add(pch);
+		j=100;//depart affichage
+		for (int i=0;i<NB_BANCS;indexTextBox++,i++,j+=180)//creation des controles dans le formulaire
+		{
+			int posX=70;
+			pal->Add(new CLabelTextBox(nameLab_3[i],posX+j,510,10,16,50));
+			CLabelTextBox* cltbPtr = (CLabelTextBox *) pal->get_Item(indexTextBox);
+			Controls->Add(cltbPtr->GetLabel());
+			Controls->Add(cltbPtr->GetTextBox());
+		}
+
+		// Ie_cur label tt seul
+		Label* ie_cur = new Label();
+		ie_cur->Location = Point(50, 550);
+		ie_cur->Size = System::Drawing::Size(50,32);
+		ie_cur->Text = "Ie_cur   (V)";//zone de texte initialisée 
+		ie_cur->TextAlign = ContentAlignment::MiddleRight;
+		Controls->Add(ie_cur);
+		j=100;//depart affichage
+		for (int i=0;i<NB_BANCS;indexTextBox++,i++,j+=180)//creation des controles dans le formulaire
+		{
+			int posX=70;
+			pal->Add(new CLabelTextBox(nameLab_3[i],posX+j,550,10,16,50));
+			CLabelTextBox* cltbPtr = (CLabelTextBox *) pal->get_Item(indexTextBox);
+			Controls->Add(cltbPtr->GetLabel());
+			Controls->Add(cltbPtr->GetTextBox());
+		}
+
+		// Num_P label tt seul
+		Label* num_P = new Label();
+		num_P->Location = Point(50, 350);
+		num_P->Size = System::Drawing::Size(50,32);
+		num_P->Text = "Num_P";//zone de texte initialisée 
+		num_P->TextAlign = ContentAlignment::MiddleRight;
+		Controls->Add(num_P);
+		j=100;//depart affichage
+		for (int i=0;i<NB_BANCS;indexTextBox++,i++,j+=180)//creation des controles dans le formulaire
+		{
+			int posX=70;
+			pal->Add(new CLabelTextBox(nameLab_3[i],posX+j,350,10,16,50));
+			CLabelTextBox* cltbPtr = (CLabelTextBox *) pal->get_Item(indexTextBox);
+			Controls->Add(cltbPtr->GetLabel());
+			Controls->Add(cltbPtr->GetTextBox());
+		}
+
+		// crée un objet graphique
+		Graphics* pg = this->CreateGraphics();
+		//crée un objet pen
+		Pen* pen1 = new Pen(Color::Red);
+		//trace une ligne
+		pg->DrawLine(pen1,20,20,100,100);
+		//dispose l'objet Graphics
+		pg->Dispose();
+
+        // ajout du groupe dans le formulaire.
+        Controls->Add(gboxC);
+
+/*
+        // associe le gestionnaire au groupe d'options
+        rb1->Click += new EventHandler(this, &MaDialogUser::Radio_Clicked);
+        rb2->Click += new EventHandler(this, &MaDialogUser::Radio_Clicked);
+  */  }
+
+void MaDialogUser::Setup_Buttons_Conditionning()//creation et definition des boutons
+    {
+        // ajoute bouton START
+        btnStart = new Button();
+        btnStart->Text = S"MARCHE";//se sert de sa propriété Text pour definir son titre
+        btnStart->Size = System::Drawing::Size(70, 20);//taille du bouton en pixels
+		btnStart->Location = Point(70, 720);//emplacement
+        btnStart->Click += new EventHandler(this, &MaDialogUser::BtnStart_Clicked);//creation d'un objet EventHandler en..
+		                  //..lui transmettant un ptr sur le bouotn et l'adresse de la fonction en charge de..
+		                  //..l'evenement
+        Controls->Add(btnStart);//pour avertir le formulaire de la présence du bouton, on ajoute le bouton..
+		                    //.. dans la collection des controles du formulaire
+
+        // idem bouton STOP
+        btnStop = new Button();
+        btnStop->Text = S"ARRET";
+        btnStop->Size = System::Drawing::Size(70, 20);
+        btnStop->Location = Point(150, 720);
+        btnStop->Click += new EventHandler(this, &MaDialogUser::BtnStop_Clicked);
+        Controls->Add(btnStop);
+
+       // idem bouton PAUSE
+        btnPause = new Button();
+        btnPause->Text = S"PAUSE";
+        btnPause->Size = System::Drawing::Size(70, 20);
+        btnPause->Location = Point(230, 720);
+        btnPause->Click += new EventHandler(this, &MaDialogUser::BtnPause_Clicked);
+        Controls->Add(btnPause);
+
+       // idem bouton REPRISE
+        btnReprise = new Button();
+        btnReprise->Text = S"REPRISE";
+        btnReprise->Size = System::Drawing::Size(70, 20);
+        btnReprise->Location = Point(310, 720);
+        btnReprise->Click += new EventHandler(this, &MaDialogUser::BtnReprise_Clicked);
+        Controls->Add(btnReprise);
+    }
+
+void MaDialogUser::Radio_Clicked(Object* pSender, EventArgs* pArgs)//remplit automatiquement la zone de texte
+    {
+        if (pSender == rb1)
+		{
+			Console::WriteLine(S"MaDialogUser::Radio_Clicked : lecture activée...");			
+			Console::WriteLine(S"Main thread: Start a second thread.");
+			// Create the thread, passing a ThreadStart delegate that
+			// represents the ThreadReadModbus::ThreadProc method.
+			uThread = new Thread(new ThreadStart(0, &MaDialogUser::ThreadProc));
+			// Start the thread.  
+			uThread->Start();
+		}
+        else if (pSender == rb2)
+		{
+			Console::WriteLine(S"MaDialogUser::Radio_Clicked : lecture désactivée...");
+			if (uThread->IsAlive)
+			{
+				// Stop the thread.  
+				uThread->Suspend();
+			}
+		}	
+	}
+
+void MaDialogUser::BtnStart_Clicked(Object* pSender, EventArgs* pArgs)//gestionnaire d'evenements associés au bouton 1
+    {
+		//	MessageBox::Show(S"ça marche!", S"bouton START...");//MessageBox fait partie de l'espace de noms Forms
+		//unique methode Show surchargée acceptant differents parametres
+		CLabelTextBox* cltbPtr;
+		for (int indexArrayList=0;(indexArrayList<MAX_NB_LABEL_TEXTBOX);indexArrayList++)//on cherche le LabelBox "MODE"
+		{
+			cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList);
+			if(String::Compare(cltbPtr->GetName(),"MODE"))
+				break;//on y est
+			if(indexArrayList==(MAX_NB_LABEL_TEXTBOX-1))return;//il faut sortir si non trouvé
+		}
+		if(String::Compare(cltbPtr->GetVal(),"PULSING"))
+		{
+			uint16_t tab_rp_registers[1] = { 0x2 };
+			Console::WriteLine(S"MaDialogUser::BtnStart_Clicked : write holding...");
+			int rc = modbus_write_registers(ctx, 2048,1 , tab_rp_registers);
+			if (rc != 1)
+					Console::WriteLine(S"MaDialogUser::BtnStart_Clicked : write holding failed...");		
+		}
+    }
+
+void MaDialogUser::BtnStop_Clicked(Object* pSender, EventArgs* pArgs)//gestionnaire d'evenements associés au bouton 1
+    {
+//		MessageBox::Show(S"ça marche!", S"bouton STOP...");//MessageBox fait partie de l'espace de noms Forms
+		//unique methode Show surchargée acceptant differents parametres
+		CLabelTextBox* cltbPtr;
+		for (int indexArrayList=0;(indexArrayList<MAX_NB_LABEL_TEXTBOX);indexArrayList++)//on cherche le LabelBox "MODE"
+		{
+			cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList);
+			if(String::Compare(cltbPtr->GetName(),"MODE"))
+				break;//on y est
+			if(indexArrayList==(MAX_NB_LABEL_TEXTBOX-1))return;//il faut sortir si non trouvé
+		}
+		if(String::Compare(cltbPtr->GetVal(),"PULSING"))
+		{
+			uint16_t tab_rp_registers[1] = { 0x0 };
+			Console::WriteLine(S"MaDialogUser::BtnStart_Clicked : write holding...");
+			int rc = modbus_write_registers(ctx, 2048,1 , tab_rp_registers);
+			if (rc != 1)
+					Console::WriteLine(S"MaDialogUser::BtnStart_Clicked : write holding failed...");		
+		}
+    }
+
+void MaDialogUser::BtnPause_Clicked(Object* pSender, EventArgs* pArgs)//gestionnaire d'evenements associés au bouton 1
+    {
+//		MessageBox::Show(S"ça marche!", S"bouton PAUSE...");//MessageBox fait partie de l'espace de noms Forms
+		//unique methode Show surchargée acceptant differents parametres
+		CLabelTextBox* cltbPtr;
+		for (int indexArrayList=0;(indexArrayList<MAX_NB_LABEL_TEXTBOX);indexArrayList++)//on cherche le LabelBox "MODE"
+		{
+			cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList);
+			if(String::Compare(cltbPtr->GetName(),"MODE"))
+				break;//on y est
+			if(indexArrayList==(MAX_NB_LABEL_TEXTBOX-1))return;//il faut sortir si non trouvé
+		}
+		if(String::Compare(cltbPtr->GetVal(),"PULSING"))
+		{
+			uint16_t tab_rp_registers[1] = { 0x1 };
+			Console::WriteLine(S"MaDialogUser::BtnStart_Clicked : write holding...");
+			int rc = modbus_write_registers(ctx, 2048,1 , tab_rp_registers);
+			if (rc != 1)
+					Console::WriteLine(S"MaDialogUser::BtnStart_Clicked : write holding failed...");		
+		}
+    }
+
+void MaDialogUser::BtnReprise_Clicked(Object* pSender, EventArgs* pArgs)//gestionnaire d'evenements associés au bouton 1
+    {
+//		MessageBox::Show(S"ça marche!", S"bouton REPRISE...");//MessageBox fait partie de l'espace de noms Forms
+		//unique methode Show surchargée acceptant differents parametres
+		CLabelTextBox* cltbPtr;
+		for (int indexArrayList=0;(indexArrayList<MAX_NB_LABEL_TEXTBOX);indexArrayList++)//on cherche le LabelBox "MODE"
+		{
+			cltbPtr = (CLabelTextBox *) pal->get_Item(indexArrayList);
+			if(String::Compare(cltbPtr->GetName(),"MODE"))
+				break;//on y est
+			if(indexArrayList==(MAX_NB_LABEL_TEXTBOX-1))return;//il faut sortir si non trouvé
+		}
+		if(String::Compare(cltbPtr->GetVal(),"PULSING"))
+		{
+			uint16_t tab_rp_registers[1] = { 0x3 };
+			Console::WriteLine(S"MaDialogUser::BtnStart_Clicked : write holding...");
+			int rc = modbus_write_registers(ctx, 2048,1 , tab_rp_registers);
+			if (rc != 1)
+					Console::WriteLine(S"MaDialogUser::BtnStart_Clicked : write holding failed...");		
+		}
+    }
+
+
+void AboutBox::OKButton_Clicked(Object* pSender,EventArgs* pArgs)//gestionnaire d'evenement de la boite dialogue
+	{
+
+		//se contente de fermer le formulaire lorsqu'on clique sur le bouton
+		Close();
+	}
+
+void MaDialog::OKMaDBtn_Clicked(Object* pSender,EventArgs* pArgs)//gestionnaire d'evenement de la boite dialogue
+	{
+		//fermer le formulaire lorsqu'on clique sur le bouton
+		Close();
+	}
+
+AboutBox::AboutBox()//constructeur
+    {
+        // qqs propriétés
+        Text = S"A propos cxfel";
+        FormBorderStyle = FormBorderStyle::Fixed3D;//impossible de modifier la taille
+        Size = System::Drawing::Size(300,150);
+        
+        // ajout de 2 labels au formulaire.
+        Label* label1 = new Label();
+        label1->Text = "Application client XFEL";
+        label1->Size = System::Drawing::Size(label1->PreferredWidth,
+                                             label1->PreferredHeight);
+        label1->Location = Point(20, 30);
+
+        Label* label2 = new Label();
+        label2->Text = "JC Marrucho, 2013";
+        label2->Size = System::Drawing::Size(label1->PreferredWidth,
+                                             label1->PreferredHeight);//sert à modifier auto la taille des labels..
+																	//..selon le texte
+        label2->Location = Point(20, 30+label1->PreferredHeight+10);//sert à calculer la position du 2ème label
+
+        // Ajoute les controles dans le formulaire
+        Controls->Add(label1);
+        Controls->Add(label2);
+
+        // Ajout d'un bouton OK.
+        OKButton = new Button();
+        OKButton->Text = S"OK";
+        OKButton->DialogResult = System::Windows::Forms::DialogResult::OK;//renvoi de la valeur OK..
+										//.. plus besoin d'associer le gestionnaire à sa fonction.. voir plus bas
+        OKButton->Size = System::Drawing::Size(40,25);
+        OKButton->Location = Point(240,85);
+
+		//configure un gestionnaire : pas nécessaire si le formulaire renvoie une valeur.. voir + haut
+		//OKButton->Click += new EventHandler(this,&AboutBox::OKButton_Clicked);
+
+        // Ajoute le bouton au formulaire.
+        Controls->Add(OKButton);
+	}
+
+	
+MaDialog::MaDialog()
+    {
+        // définit les paramètres du formulaire
+        Text = S"détails serveur";
+        FormBorderStyle = FormBorderStyle::Fixed3D;//impossible de modifier la taille
+        Size = System::Drawing::Size(280,200);
+
+        // Creation de tous les controles : TextBox pour io/port et ComboBox pour timeout
+        ipLabel = new Label();
+        ipBox = new TextBox();
+        portLabel = new Label();
+        portBox = new TextBox();
+        timeoutLabel = new Label();
+        timeoutCombo = new ComboBox();
+        OKBtn = new Button();
+        CancelBtn = new Button();
+        
+        // ipLabel et ipBox : label et zone de saisie sont placés  l'un à côté de l'autre
+        ipLabel->Location = Point(16, 24);
+        ipLabel->Size = System::Drawing::Size(48, 16);
+        ipLabel->Text = "n°IP:";//zone de texte initialisée vide
+        ipLabel->TextAlign = ContentAlignment::MiddleRight;
+        ipBox->Location = Point(72, 24);
+        ipBox->Size = System::Drawing::Size(152, 20);
+        ipBox->Text = "";//zone de texte initialisée vide
+
+        // portLabel et portBox
+        portLabel->Location = Point(16, 56);
+        portLabel->Size = System::Drawing::Size(48, 16);
+        portLabel->Text = "n°port:";//zone de texte initialisée vide
+        portLabel->TextAlign = ContentAlignment::MiddleRight;
+        portBox->Location = Point(72, 56);
+        portBox->Size = System::Drawing::Size(152, 20);
+        portBox->Text = "";//zone de texte initialisée
+
+        // timeoutLabel et timeoutCombo : : liste déroulante spécifiant le tiemout et son label
+        timeoutLabel->Location = Point(16, 88);
+        timeoutLabel->Size = System::Drawing::Size(48, 16);
+        timeoutLabel->Text = "Timeout(ms):";
+        timeoutLabel->TextAlign = ContentAlignment::MiddleRight;
+        timeoutCombo->DropDownWidth = 121;
+        timeoutCombo->Location = Point(72, 88);
+        timeoutCombo->Size = System::Drawing::Size(121, 21);
+		//5 items, pas de valeur par défaut
+        timeoutCombo->Items->Add(S"500");
+        timeoutCombo->Items->Add(S"1000");
+        timeoutCombo->Items->Add(S"1500");
+        timeoutCombo->Items->Add(S"2000");
+        timeoutCombo->Items->Add(S"3000");
+
+        // bouton OK
+        OKBtn->Location = Point(104, 136);
+		OKBtn->Name = "Bouton OK";
+        OKBtn->Text = "OK";
+        OKBtn->DialogResult = DialogResult::OK;
+
+        // bouton Cancel
+        CancelBtn->Location = Point(192, 136);
+        CancelBtn->Name = "Bouton Cancel";
+        CancelBtn->Text = "Annuler";
+        CancelBtn->DialogResult = DialogResult::Cancel;
+
+        // Ajoute les controles dans le formaulaire
+        Controls->Add(ipBox);
+        Controls->Add(portBox);
+        Controls->Add(ipLabel);
+        Controls->Add(portLabel);
+        Controls->Add(timeoutLabel);
+        Controls->Add(timeoutCombo);
+        Controls->Add(OKBtn);
+        Controls->Add(CancelBtn);
+
+		//configure les 2 propriétés : AcceptButton contient la réf du bouton par défaut du formulaire..
+		//..on peut cliquer sur le bouton OK ou bien sur la touche Entrée du clavier..
+		//..referme aussi la boite car DialogResult renvoie OK
+        AcceptButton = OKBtn;
+		//CancelButton contient la réf du bouton associée à la touche Echap du clavier
+        CancelButton = CancelBtn;
+
+		//gestionnnaire associé au bouton OK
+		OKBtn->Click += new EventHandler(this, &MaDialog::OKMaDBtn_Clicked);
+	}
+
+void MaDialog::setIp(String* theIp)
+{
+	ipBox->Text = theIp; 
+}
+    
+String* MaDialog::getIp() 
+{ 
+	return ipBox->Text; 
+}
+
+void MaDialog::setPort(String* thePort)
+{ 
+	portBox->Text = thePort;
+}
+
+String* MaDialog::getPort()
+{ 
+	return portBox->Text;
+}
+
+void MaDialog::setTimeout(int theTimeout)
+{ 
+	timeoutCombo->SelectedIndex = theTimeout;
+}
+
+int MaDialog::getTimeout()
+{ 
+	return timeoutCombo->SelectedIndex;
+}
+
+
+CppForm::CppForm()//constructeur
+    {
+        // définit la légende du formulaire
+		//la propriété Text est héritée de Control
+        Text = S"XSUC";
+
+        // définit le style des bords
+		//la propriété FormBorder est membre de Form
+        FormBorderStyle = FormBorderStyle::Fixed3D;
+
+        // Set up controls on the form.
+        Setup_Menu();
+        Setup_Context_Menu();
+        Setup_Buttons();//configure les boutons du formulaire
+        Setup_Label();
+//        Setup_Group();
+//        Setup_Combo();
+        Setup_Text();
+
+        // pour agrandir la zone de saisie, on rajoute des pixels, par defaut 300x300
+ //       Size = System::Drawing::Size(450, 300);
+        Size = System::Drawing::Size(650, 500);
+
+    }
+
+void CppForm::Btn1_Clicked(Object* pSender, EventArgs* pArgs)//gestionnaire d'evenements associés au bouton 1
+    {
+		MessageBox::Show(S"ça marche!", S"Message...");//MessageBox fait partie de l'espace de noms Forms
+		//unique methode Show surchargée acceptant differents parametres
+    }
+
+
+void CppForm::Btn2_Clicked(Object* pSender, EventArgs* pArgs)//gestionnaire d'evenements associés au bouton 2
+    {
+        MessageBox::Show(S"ça marche aussi!", S"Message...");//MessageBox fait partie de l'espace de noms Forms
+  		//unique methode Show surchargée acceptant differents parametres
+    }
+
+void CppForm::Btn3_Clicked(Object* pSender, EventArgs* pArgs)//gestionnaire d'evenements associés au bouton 3
+    {
+        MessageBox::Show(S"connexion et lecture serveur", S"Message...");//MessageBox fait partie de l'espace de noms Forms
+  		//unique methode Show surchargée acceptant differents parametres
+    }
+
+void CppForm::Btn4_Clicked(Object* pSender, EventArgs* pArgs)//gestionnaire d'evenements associés au bouton 4
+    {
+/*		uint16_t tab_rp_registers_low[MODBUS_SIZE_READ_HOLDINGS_LOW];
+		uint16_t tab_rp_registers_high[MODBUS_SIZE_READ_HOLDINGS_HIGH];
+		int rc, adress, size;
+		Console::WriteLine(S"ThreadProc: read holdings...");
+		adress=MODBUS_BASE_LOW_HOLDINGS;//adresse holding=MODBUS_BASE_LOW_HOLDINGS
+		size=82;
+		rc = modbus_read_registers(ctx, adress, size, tab_rp_registers_low);
+		if (rc != size)
+		Console::WriteLine(S"ThreadProc: read holdings failed...");
+		Thread::Sleep(500);
+		Console::WriteLine(S"ThreadProc: read holdings...");
+		adress=MODBUS_BASEADR_HIGH_HOLDINGS;//adresse holding=MODBUS_BASEADR_HIGH_HOLDINGS
+		size=MODBUS_SIZE_READ_HOLDINGS_HIGH;
+		rc = modbus_read_registers(ctx, adress, size, tab_rp_registers_high);
+		if (rc != size)
+			Console::WriteLine(S"ThreadProc: read holdings failed...");
+*/
+		//crée la boite de dialogue utilisateur
+		CDialogConfig* box = new CDialogConfig();
+		//affiche la boite de dialogue
+		if (box->ShowDialog() == DialogResult::OK)
+		{
+			//si la valeur OK est renvoyée, on affiche le nom
+			//MessageBox::Show(S"Ecriture");
+		}
+  		//unique methode Show surchargée acceptant differents parametres
+    }
+
+void CppForm::Combo1_SelChanged(Object* pSender, EventArgs* pArgs)//gestionnaire d'evenement associé à la liste deroulante
+    {
+        if (pSender == combo1)
+        {
+//            String* ps = String::Concat(S"New index is ", 
+//                                        __box(combo1->SelectedIndex)->ToString());
+//            MessageBox::Show(ps, S"Index Change");
+            String* ps = __box(combo1->SelectedIndex)->ToString();
+			if(String::Compare(ps,"1")==0)
+			{
+				Console::WriteLine(S"Main thread: Start a second thread.");
+				// Create the thread, passing a ThreadStart delegate that
+				// represents the ThreadReadModbus::ThreadProc method.
+				Thread *oThread = new Thread(new ThreadStart(0, &ThreadReadModbus::ThreadProc));
+				// Start the thread.  
+				oThread->Start();
+			}
+        }
+    }
+
+void CppForm::MenuItem_Clicked(Object* pSender, EventArgs* pArgs)//gestionnaire des elements de menu
+    {
+        if (pSender == item1)
+        {
+			//affiche la boite de dialogue modale qui doit etre fermée avant de pouvoir revenir à l'application
+			MessageBox::Show(S"ITEM  à propos", S"Menu");
+			AboutBox* box = new AboutBox();
+			box->ShowDialog();
+        }
+        else if (pSender == item2)
+        {
+            // Exit application.
+            Application::Exit();
+        }
+		else if (pSender == item11)
+		{
+			//crée la boite de dialogue
+			MaDialog* box = new MaDialog();
+			//données initiales
+/*			String* path = new String("c:\\temp\\condip.txt.txt");
+			if (!File::Exists(path))
+			{
+				Console::WriteLine("le fichier n'existe pas!");
+			}
+*/
+			//lecture du n°IP dans le fichier condip
+			try
+			{
+				FileStream* fs = new FileStream("..\\condip.txt",FileMode::Open);
+				StreamReader* sr = new StreamReader(fs);
+				String* line = sr->ReadLine();
+				box->setIp(line);
+			}
+			catch (System::Exception* pe)
+			{
+				Console::WriteLine(pe->ToString());
+			}
+//			box->setIp(S"134.158.91.254");
+			box->setPort(S"502");
+			box->setTimeout(1);
+			//affiche la boite de dialogue
+			if (box->ShowDialog() == DialogResult::OK)
+            {
+                //si la valeur OK est renvoyée, on affiche le nom
+                MessageBox::Show(box->getIp(), S"le n° IP était...");
+            }
+
+		}
+		else if (pSender == anotherItem)
+		{
+			//crée la boite de dialogue utilisateur
+			MaDialogUser* box = new MaDialogUser();
+			//données initiales
+	/*		box->setIp(S"134.158.91.254");
+			box->setPort(S"502");
+			box->setTimeout(1);
+	*/		//affiche la boite de dialogue
+			if (box->ShowDialog() == DialogResult::OK)
+            {
+                //si la valeur OK est renvoyée, on affiche le nom
+                MessageBox::Show(S"Lecture");
+            }
+		}
+		else if (pSender == item1_1 || pSender == item1_2)
+		{
+//			modbus_t *ctx;
+			if(pSender == item1_1)
+			{
+//				ctx = (modbus_t *) malloc(sizeof(modbus_t));
+//				Ex20cSquareRoot(4);
+	//			char* ptr = GetHeure(1);
+	/*			String* psone = String::Concat(S"il est ", GetHeure(1));
+				MessageBox::Show(psone, S"heure");
+				int* monInt = allou();
+				int taille=sizeof(monInt);
+				Console::WriteLine(taille);
+				libere(monInt);
+*/
+				//lecture du n°IP dans le fichier condip
+				String* lineIp;
+				try
+				{
+					FileStream* fs = new FileStream("..\\condip.txt",FileMode::Open);
+					StreamReader* sr = new StreamReader(fs);
+					lineIp = sr->ReadLine();
+				}
+				catch (System::Exception* pe)
+				{
+					Console::WriteLine(pe->ToString());
+				}
+
+				Console::WriteLine(S"CppForm::MenuItem_Clicked : modbus_new_tcp...");
+//				ctx = modbus_new_tcp("134.158.91.254", 502);//JCM
+				char* chaineChar = static_cast<char *>(System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi(lineIp).ToPointer());
+				ctx = modbus_new_tcp(chaineChar,502);//JCM
+				modbus_set_debug(ctx, 1);
+//				modbus_set_error_recovery(ctx,
+//				                   MODBUS_ERROR_RECOVERY_LINK |
+//				                   MODBUS_ERROR_RECOVERY_PROTOCOL);
+				modbus_set_slave(ctx,1);//JCM: avec le serveur python slave=1
+				if (modbus_connect(ctx) == -1) {
+					Console::WriteLine(modbus_strerror(errno));
+					modbus_free(ctx);
+				}
+			}
+			else
+			{
+				 modbus_free(ctx);
+			}
+		}
+		else if (pSender == fontDlgItem)
+        {
+            FontDialog* fd = new FontDialog();
+            fd->Font = labelFont;
+
+            if (fd->ShowDialog() == DialogResult::OK)//la police du label est modifiée selon le choix d el'uitlisateur
+            {
+                MessageBox::Show(fd->Font->Name, S"la police était...");
+                labelFont = fd->Font;
+                theLabel->Font = labelFont;
+            }
+		}
+        else
+			MessageBox::Show(S"AUTRE ITEM", S"Menu");
+    }
+
+void CppForm::Radio_Clicked(Object* pSender, EventArgs* pArgs)//remplit automatiquement la zone de texte
+    {
+        if (pSender == rb1)
+		{
+			text1->Text = "Read Coils choisi : \r\n\r\n"
+                       "FC01";
+			uint8_t tab_rp_bits[1]; 
+			int rc = modbus_read_bits(ctx, MODBUS_BASEADR_COILS, 1, tab_rp_bits);////JCM : adresse coils=MODBUS_BASEADR_COILS
+			Console::WriteLine(S"CppForm::Radio_Clicked : read one coil...");
+			if (rc != 1)
+				Console::WriteLine(S"CppForm::Radio_Clicked : read one coil failed...");
+		}
+        else if (pSender == rb2)
+		{
+            text1->Text = "Write Coils choisi : \r\n\r\n"
+                      "FC15";
+			uint8_t tab_value[77];//JCM
+			modbus_set_bits_from_bytes(tab_value, 0, 77, UT_BITS_TAB);
+			printf("tab[0]=%d,tab[1]=%d,tab[2]=%d\n", tab_value[0], tab_value[1], tab_value[2]);
+			int rc = modbus_write_bits(ctx, MODBUS_BASEADR_COILS,//JCM : adresse coils=MODBUS_BASEADR_COILS
+				77, tab_value);
+			if (rc != 77)
+				Console::WriteLine(S"CppForm::Radio_Clicked : write coil failed...");
+		}
+		else if (pSender == rb3)
+		{
+            text1->Text = "Read Holdings choisi : \r\n\r\n"
+                      "FC03";
+			uint16_t tab_rp_registers[UT_REGISTERS_NB];
+			int rc = modbus_read_registers(ctx, MODBUS_BASEADR_LOW_HOLDINGS,//JCM : adresse holding=MODBUS_BASEADR_LOW_HOLDINGS
+                               UT_REGISTERS_NB, tab_rp_registers);
+			Console::WriteLine(S"CppForm::Radio_Clicked : read holding...");
+			if (rc != UT_REGISTERS_NB)
+				Console::WriteLine(S"CppForm::Radio_Clicked : read holding failed...");
+  		}
+		else if (pSender == rb4)
+		{
+			text1->Text = "Write Holdings choisi :\r\n\r\n"
+                       "FC16";
+			Random* myRnd = new Random();
+			float realToWrite, real = myRnd->NextDouble();
+			printf("random = %f\n", real<0.5 ? realToWrite=-1000*real:realToWrite=1000*real);
+
+			uint16_t tab_rp_registers[48];
+			Console::WriteLine(S"CppForm::Radio_Clicked : write holding...");
+			modbus_set_float(realToWrite, tab_rp_registers);//Pi_min
+			int rc = modbus_write_registers(ctx, 2118,48 , tab_rp_registers);
+			if (rc != 48)
+				Console::WriteLine(S"CppForm::Radio_Clicked : write holding failed...");
+		}
+	}
+
+void CppForm::Setup_Buttons()//creation et definition du bouton
+    {
+        // ajoute un bouton
+        btn1 = new Button();
+        btn1->Text = S"OK";//se sert de sa propriété Text pour definir son titre
+
+        btn1->Size = System::Drawing::Size(70, 25);//taille du bouton en pixels
+		btn1->Location = Point(230, 400);//emplacement
+//		btn1->Font = new System::Drawing::Font(S"Verdana", 16, FontStyle::Bold);;//l'objet Font est sauvegardé dans l'objet LabelFont grâce au pointeur
+//        btn1->ForeColor = Color::Brown;
+
+        btn1->Click += new EventHandler(this, &CppForm::Btn1_Clicked);//creation d'un objet EventHandler en..
+		                  //..lui transmettant un ptr sur le bouotn et l'adresse de la fonction en charge de..
+		                  //..l'evenement
+
+        Controls->Add(btn1);//pour avertir le formulaire de la présence du bouton, on ajoute le bouton..
+		                    //.. dans la collection des controles du formulaire
+
+        // idem pour 2eme bouton
+        btn2 = new Button();
+        btn2->Text = S"Annuler";//..
+
+        btn2->Size = System::Drawing::Size(70, 25);//..
+        btn2->Location = Point(310, 400);//..
+        btn2->Click += new EventHandler(this, &CppForm::Btn2_Clicked);
+        Controls->Add(btn2);//..
+		                    //..
+
+		// idem pour 3eme bouton
+        btn3 = new Button();
+        btn3->Text = S"Connexion";//..
+
+        btn3->Size = System::Drawing::Size(120, 25);//..
+		btn3->Location = Point(50, 220);//..
+		btn3->Font = new System::Drawing::Font(S"Verdana", 12, FontStyle::Bold);;//l'objet Font est sauvegardé dans l'objet LabelFont grâce au pointeur
+        btn3->ForeColor = Color::Brown;
+
+        btn3->Click += new EventHandler(this, &CppForm::Btn3_Clicked);
+        Controls->Add(btn3);//..
+		                    //..
+		// idem pour 4eme bouton
+        btn4 = new Button();
+        btn4->Text = S"Ecriture";//..
+
+        btn4->Size = System::Drawing::Size(120, 25);//..
+		btn4->Location = Point(475, 220);//..
+		btn4->Font = new System::Drawing::Font(S"Verdana", 12, FontStyle::Bold);;//l'objet Font est sauvegardé dans l'objet LabelFont grâce au pointeur
+        btn4->ForeColor = Color::Brown;
+
+        btn4->Click += new EventHandler(this, &CppForm::Btn4_Clicked);
+        Controls->Add(btn4);//..
+		                    //..
+ 
+    }
+
+void CppForm::Setup_Combo ()//configuration de la liste deroulmnte
+    {
+        // creation
+        combo1 = new ComboBox();
+        combo1->DropDownStyle = ComboBoxStyle::DropDownList;
+//        combo1->Location = Point(20,180);
+        combo1->Location = Point(20,280);
+    
+        // pour ajuster la taille en fonction de la plus longue chaine
+        // la valeur 20 correspond à la taille du bouton situé à droite du bouton d'édition
+        Label* l1 = new Label();
+        l1->Text = S"Automatique";
+        combo1->Width = l1->PreferredWidth + 20;
+        
+        // ajout de qqs chaines et association avec tous les controles du formulaire
+        combo1->Items->Add(S"Manuel");
+        combo1->Items->Add(S"Automatique");
+        combo1->Items->Add(S"...");
+        combo1->SelectedIndex = 0;//affiche la 1ere chaine par defaut
+
+        // ajout du groupe dans le formulaire
+        Controls->Add(combo1);
+
+        // associe le gestionnaire à liste deroulante.
+        combo1->SelectedIndexChanged += new EventHandler(this, &CppForm::Combo1_SelChanged);
+    }
+
+void CppForm::Setup_Context_Menu ()//menu contextuel
+    {
+        // Creation
+        popupMenu = new System::Windows::Forms::ContextMenu();
+
+        // Creation des items.
+        item_p1 = new MenuItem("UN");
+        popupMenu->MenuItems->Add(item_p1);
+        item_p2 = new MenuItem("DEUX");
+        popupMenu->MenuItems->Add(item_p2);
+        item_p3 = new MenuItem("TROIS");
+        popupMenu->MenuItems->Add(item_p3);
+
+		//associe le menu contextuel au formulaire
+        ContextMenu = popupMenu;
+    }
+
+void CppForm::Setup_Group ()//creation et configuration d'un groupe d'options
+    {
+        // Creation
+        gbox = new GroupBox();
+        gbox->Text = S"Fonction Code";
+		gbox->Size = System::Drawing::Size(200, 150);//taille du groupbox en pixels
+        gbox->Location = Point(20, 90);
+
+        // Creation des boutons radio.
+        rb1 = new RadioButton();
+        rb1->Text = S"Read Coils";
+        rb1->Location = Point(10,25);
+
+        rb2 = new RadioButton();
+        rb2->Text = S"Write Coils";
+        rb2->Location = Point(10,55);
+
+        rb3 = new RadioButton();
+        rb3->Text = S"Read Holdings";
+        rb3->Location = Point(10,85);
+//        rb3->Checked = true;//c'est la valeur par defaut
+
+        rb4 = new RadioButton();
+        rb4->Text = S"Write Holdings";
+        rb4->Location = Point(10,115);
+        rb4->Checked = true;//c'est la valeur par defaut
+
+		// ajout des controles dans le groupe 
+        gbox->Controls->Add(rb1);
+        gbox->Controls->Add(rb2);
+        gbox->Controls->Add(rb3);
+        gbox->Controls->Add(rb4);
+
+        // ajout du groupe dans le formulaire.
+        Controls->Add(gbox);
+
+        // associe le gestionnaire au groupe d'options
+        rb1->Click += new EventHandler(this, &CppForm::Radio_Clicked);
+        rb2->Click += new EventHandler(this, &CppForm::Radio_Clicked);
+        rb3->Click += new EventHandler(this, &CppForm::Radio_Clicked);
+        rb4->Click += new EventHandler(this, &CppForm::Radio_Clicked);
+    }
+
+void CppForm::Setup_Label()//description textuelle dans le formulaire
+    {
+        theLabel = new Label();
+        theLabel->AutoSize = true;
+
+        theLabel->Text = S"                    XFEL Supervision Client";//les espaces sont prévus pour inserer uen image
+
+        // definition de la police
+ //       labelFont = new System::Drawing::Font(S"Verdana", 20, FontStyle::Italic);
+        labelFont = new System::Drawing::Font(S"Arial", 20, FontStyle::Italic);
+        theLabel->Font = labelFont;//l'objet Font est sauvegardé dans l'objet LabelFont grâce au pointeur
+        theLabel->ForeColor = Color::Black;
+
+        // taille et emplacement
+//        theLabel->Location = Point(300,20);
+		theLabel->Location = Point(125,40);
+        theLabel->Size = System::Drawing::Size(theLabel->PreferredWidth, 
+                                               theLabel->PreferredHeight);
+
+        // ajout de l'image
+ //       Bitmap* theImage = new Bitmap("SAVE.BMP");
+        Bitmap* theImage = new Bitmap("..//image1.BMP");
+        theLabel->Image = theImage;
+        theLabel->ImageAlign = ContentAlignment::MiddleLeft;
+
+        // ajout du label dans la collection des controles du formulaire
+        Controls->Add(theLabel);
+    }
+
+void CppForm::Setup_Menu()//barre de menu
+    {
+        // Creation de la barre de menu principal
+        menuBar = new MainMenu();
+
+        // Cree le menu fichier.
+        fileMenu = new MenuItem("&Fichier");
+        menuBar->MenuItems->Add(fileMenu);
+
+        // Cree les elements du menu et les affiche.
+        item1 = new MenuItem("&A propos...");
+		item11 = new MenuItem("&MaDialogBox...");
+		fontDlgItem = new MenuItem("&Choisir la police...");
+        item2 = new MenuItem("S&ortie");
+        fileMenu->MenuItems->Add(item1);
+		fileMenu->MenuItems->Add(item11);
+ 		fileMenu->MenuItems->Add(fontDlgItem);
+        fileMenu->MenuItems->Add(item2);
+
+        // associe le gestionnaire ayx elements du menu.
+        item1->Click += new EventHandler(this, &CppForm::MenuItem_Clicked);
+        item11->Click += new EventHandler(this, &CppForm::MenuItem_Clicked);
+		fontDlgItem->Click += new EventHandler(this, &CppForm::MenuItem_Clicked);
+		item2->Click += new EventHandler(this, &CppForm::MenuItem_Clicked);
+
+        // ajoute le menu principal dans le formulaire
+        Menu = menuBar;
+
+		//,menu déroulant ajouté à la barre de menu, puis 2 éléments
+		actionMenu =new MenuItem("Action");
+		menuBar->MenuItems->Add(actionMenu);
+		subMenu1=new MenuItem("Faire");
+		actionMenu->MenuItems->Add(subMenu1);
+		//barre de séparation, le ptr n'est pas sauvegardé car le sépérateur ne peut être sélectionné
+		actionMenu->MenuItems->Add(new MenuItem("-"));
+		anotherItem=new MenuItem("lecture serveur");
+		actionMenu->MenuItems->Add(anotherItem);
+		//crée les 2 élements du menu et les ajoute
+		item1_1 =new MenuItem("connexion serveur...");
+		item1_2 = new MenuItem("deconnexion serveur...");
+		subMenu1->MenuItems->Add(item1_1);
+		subMenu1->MenuItems->Add(item1_2);
+		//on pourrait aussi utiliser des propriétés pour afficher un syumbole..
+		//..disant élémen tselectionné (Checked) et griser des éléments du menu (Enabled)
+
+        // associe le gestionnaire aux elements du menu.
+        anotherItem->Click += new EventHandler(this, &CppForm::MenuItem_Clicked);
+        item1_1->Click += new EventHandler(this, &CppForm::MenuItem_Clicked);
+        item1_2->Click += new EventHandler(this, &CppForm::MenuItem_Clicked);
+    }
+
+void CppForm::Setup_Text()//controle d'edition
+    {
+        text1 = new TextBox();
+        text1->Location = Point(200,110);
+        text1->Size = System::Drawing::Size(250,250);
+        text1->Multiline = true;
+
+		text1->ReadOnly = true;
+		text1->Text = "Pour se connecter au Serveur : cliquer sur le bouton Connexion \r\n\r\n"
+			"Pour configurer des paramètres : cliquer sur le bouton Ecriture \r\n\r\n";
+
+
+        Controls->Add(text1);
+    }
Index: tags/xsucLWF-1.0/Debug/BuildLog.htm
===================================================================
--- tags/xsucLWF-1.0/Debug/BuildLog.htm	(revision 20)
+++ tags/xsucLWF-1.0/Debug/BuildLog.htm	(revision 20)
@@ -0,0 +1,46 @@
+<html>
+<head>
+<META HTTP-EQUIV="Content-Type" content="text/html; charset=Windows-1252">
+</head>
+<body>
+<pre>
+<table width=100% bgcolor=#CFCFE5><tr> <td> <font face=arial size=+3>
+Journal de génération
+</font></table><table width=* cellspacing=0 cellpadding=0><tr><td width=0 bgcolor=#EDEDF5>&nbsp;</td><td width=0 bgcolor=#FFFFFF>&nbsp;</td><td width=*><pre>
+<h3>------- Génération démarrée : Projet : cxfel, Configuration : Debug|Win32 -------
+</h3>
+</pre></table><table width=100% bgcolor=#DFDFE5><tr><td><font face=arial size=+2>
+Lignes de commande
+</font></table><table width=* cellspacing=0 cellpadding=0><tr><td width=0 bgcolor=#EDEDF5>&nbsp;</td><td width=0 bgcolor=#FFFFFF>&nbsp;</td><td width=*><pre>Création du fichier temporaire "c:\Documents and Settings\Administrateur\Mes documents\xfel\xsucLWF-sauve23112011\Debug\RSP000001.rsp" avec pour contenu
+[
+/Od /I "C:\temp\libmodbus\libmodbusdll\alloulibere" /I "C:\temp\libmodbus\libmodbusdll\ess20d" /I "C:\temp\libmodbus\libmodbusdll\ess20c" /I "C:\temp\libmodbus\libmodbus-3.0.1\tests" /I "C:\temp\libmodbus\libmodbus-3.0.1\src" /AI "C:\Documents and Settings\Administrateur\Mes documents\xfel\xsucLWF-sauve23112011\Debug" /D "WIN32" /D "_DEBUG" /D "_AFXDLL" /FD /EHsc /MDd /Fp".\Debug/cxfel.pch" /Fo".\Debug/" /Fd".\Debug/" /W3 /c /Zi /clr
+".\stdafx.cpp"
+".\cxfelmain.cpp"
+".\Cxfel.cpp"
+]
+Création de la ligne de commande "cl.exe @"c:\Documents and Settings\Administrateur\Mes documents\xfel\xsucLWF-sauve23112011\Debug\RSP000001.rsp" /nologo"
+</pre></table><table width=100% bgcolor=#DFDFE5><tr><td><font face=arial size=+2>
+Fenêtre Sortie
+</font></table><table width=* cellspacing=0 cellpadding=0><tr><td width=0 bgcolor=#EDEDF5>&nbsp;</td><td width=0 bgcolor=#FFFFFF>&nbsp;</td><td width=*><pre>Compilation...
+stdafx.cpp
+cxfelmain.cpp
+C:\temp\libmodbus\libmodbus-3.0.1\tests\unit-test.h(59) : warning C4305: 'initialisation' : troncation de 'double' à 'const float'
+Cxfel.cpp
+C:\temp\libmodbus\libmodbus-3.0.1\tests\unit-test.h(59) : warning C4305: 'initialisation' : troncation de 'double' à 'const float'
+Cxfel.cpp(33) : error C2653: 'Thread' : n'est pas un nom de classe ni d'espace de noms
+Cxfel.cpp(259) : error C2446: '==' : pas de conversion de 'int' en 'System::String __gc *'
+        La conversion d'un type intégral en type pointeur nécessite reinterpret_cast, un cast de style C ou un cast de style fonction
+Cxfel.cpp(259) : error C2040: '==' : les niveaux d'indirection de 'System::String __gc *' et de 'int' sont différents
+Cxfel.cpp(266) : error C2065: 'Thread' : identificateur non déclaré
+Cxfel.cpp(266) : error C2065: 'oThread' : identificateur non déclaré
+Cxfel.cpp(266) : error C2061: erreur de syntaxe : identificateur 'Thread'
+Cxfel.cpp(270) : error C2227: la partie gauche de '->Start' doit pointer vers un class/struct/union
+        le type est ''unknown-type''
+Cxfel.cpp(270) : error C3861: 'oThread': identificateur introuvable, même avec une recherche qui dépend de l'argument
+Génération de code en cours...
+</pre></table><table width=100% bgcolor=#DFDFE5><tr><td><font face=arial size=+2>
+Résultats
+</font></table><table width=* cellspacing=0 cellpadding=0><tr><td width=0 bgcolor=#EDEDF5>&nbsp;</td><td width=0 bgcolor=#FFFFFF>&nbsp;</td><td width=*><pre>
+Le journal de génération a été enregistré à l'emplacement "file://c:\Documents and Settings\Administrateur\Mes documents\xfel\xsucLWF-sauve23112011\Debug\BuildLog.htm"
+cxfel - 8 erreur(s), 2 avertissement(s)</pre></table><table   width=100% height=20 bgcolor=#CFCFE5><tr><td><font face=arial size=+2>
+</font></table></body></html>
Index: tags/xsucLWF-1.0/Release/BuildLog.htm
===================================================================
--- tags/xsucLWF-1.0/Release/BuildLog.htm	(revision 20)
+++ tags/xsucLWF-1.0/Release/BuildLog.htm	(revision 20)
@@ -0,0 +1,107 @@
+<html>
+<head>
+<META HTTP-EQUIV="Content-Type" content="text/html; charset=Windows-1252">
+</head>
+<body>
+<pre>
+<table width=100% bgcolor=#CFCFE5><tr> <td> <font face=arial size=+3>
+Journal de génération
+</font></table><table width=* cellspacing=0 cellpadding=0><tr><td width=0 bgcolor=#EDEDF5>&nbsp;</td><td width=0 bgcolor=#FFFFFF>&nbsp;</td><td width=*><pre>
+<h3>------- Génération démarrée : Projet : cxfel, Configuration : Release|Win32 -------
+</h3>
+</pre></table><table width=100% bgcolor=#DFDFE5><tr><td><font face=arial size=+2>
+Lignes de commande
+</font></table><table width=* cellspacing=0 cellpadding=0><tr><td width=0 bgcolor=#EDEDF5>&nbsp;</td><td width=0 bgcolor=#FFFFFF>&nbsp;</td><td width=*><pre>Création du fichier temporaire "c:\Documents and Settings\Administrateur\Mes documents\xfel\xsucLWF\Release\RSP000007.rsp" avec pour contenu
+[
+/O2 /I "C:\temp\libmodbus\libmodbusdll\ess20d" /I "C:\temp\libmodbus\libmodbusdll\alloulibere" /I "C:\temp\libmodbus\libmodbus-3.0.1\tests" /I "C:\temp\libmodbus\libmodbus-3.0.1\src" /AI "C:\Documents and Settings\Administrateur\Mes documents\xfel\xsucLWF\Release" /D "WIN32" /D "NDEBUG" /D "_MBCS" /FD /EHsc /MT /GS /Fo"Release/" /Fd"Release/vc70.pdb" /W3 /c /Zi /clr /TP
+".\Cxfel.cpp"
+]
+Création de la ligne de commande "cl.exe @"c:\Documents and Settings\Administrateur\Mes documents\xfel\xsucLWF\Release\RSP000007.rsp" /nologo"
+Création du fichier temporaire "c:\Documents and Settings\Administrateur\Mes documents\xfel\xsucLWF\Release\RSP000008.rsp" avec pour contenu
+[
+/OUT:"C:\Documents and Settings\Administrateur\Mes documents\xfel\xsucLWF\Release\cxfel.exe" /INCREMENTAL:NO /NOLOGO /LIBPATH:"C:\temp\libmodbus\libmodbus\Debug" /LIBPATH:"C:\temp\libmodbus\libmodbusdll\alloulibere\Debug" /LIBPATH:"C:\temp\libmodbus\libmodbusdll\ess20d\Debug" /NODEFAULTLIB:"libcmt.lib" /DEBUG /PDB:"C:\Documents and Settings\Administrateur\Mes documents\xfel\xsucLWF\Release/cxfel.pdb" /FIXED:No wsock32.lib ws2_32.lib libmodbus.lib  kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib "\temp\libmodbus\libmodbus\Debug\libmodbus.lib"
+".\Release\Cxfel.obj"
+".\Release\cxfelmain.obj"
+".\Release\stdafx.obj"
+]
+Création de la ligne de commande "link.exe @"c:\Documents and Settings\Administrateur\Mes documents\xfel\xsucLWF\Release\RSP000008.rsp""
+</pre></table><table width=100% bgcolor=#DFDFE5><tr><td><font face=arial size=+2>
+Fenêtre Sortie
+</font></table><table width=* cellspacing=0 cellpadding=0><tr><td width=0 bgcolor=#EDEDF5>&nbsp;</td><td width=0 bgcolor=#FFFFFF>&nbsp;</td><td width=*><pre>Compilation...
+Cxfel.cpp
+C:\temp\libmodbus\libmodbus-3.0.1\tests\unit-test.h(59) : warning C4305: 'initialisation' : troncation de 'double' à 'const float'
+Cxfel.cpp(181) : warning C4101: 'str' : variable locale non référencée
+Cxfel.cpp(439) : warning C4303: Cast de style C de 'CGroupBox __gc *' vers 'System::Object __gc *' est désapprouvé, utilisez static_cast, __try_cast ou dynamic_cast
+Cxfel.cpp(499) : warning C4303: Cast de style C de 'CGroupBox __gc *' vers 'System::Object __gc *' est désapprouvé, utilisez static_cast, __try_cast ou dynamic_cast
+Cxfel.cpp(629) : warning C4303: Cast de style C de 'CLabelTextBox __gc *' vers 'System::Object __gc *' est désapprouvé, utilisez static_cast, __try_cast ou dynamic_cast
+Cxfel.cpp(639) : warning C4303: Cast de style C de 'CLabelTextBox __gc *' vers 'System::Object __gc *' est désapprouvé, utilisez static_cast, __try_cast ou dynamic_cast
+Cxfel.cpp(646) : warning C4303: Cast de style C de 'CLabelTextBox __gc *' vers 'System::Object __gc *' est désapprouvé, utilisez static_cast, __try_cast ou dynamic_cast
+Cxfel.cpp(719) : warning C4303: Cast de style C de 'CLabelTextBox __gc *' vers 'System::Object __gc *' est désapprouvé, utilisez static_cast, __try_cast ou dynamic_cast
+Cxfel.cpp(722) : warning C4303: Cast de style C de 'CLabelTextBox __gc *' vers 'System::Object __gc *' est désapprouvé, utilisez static_cast, __try_cast ou dynamic_cast
+Cxfel.cpp(725) : warning C4303: Cast de style C de 'CLabelTextBox __gc *' vers 'System::Object __gc *' est désapprouvé, utilisez static_cast, __try_cast ou dynamic_cast
+Cxfel.cpp(728) : warning C4303: Cast de style C de 'CLabelTextBox __gc *' vers 'System::Object __gc *' est désapprouvé, utilisez static_cast, __try_cast ou dynamic_cast
+Cxfel.cpp(732) : warning C4303: Cast de style C de 'CLabelTextBox __gc *' vers 'System::Object __gc *' est désapprouvé, utilisez static_cast, __try_cast ou dynamic_cast
+Cxfel.cpp(735) : warning C4303: Cast de style C de 'CLabelTextBox __gc *' vers 'System::Object __gc *' est désapprouvé, utilisez static_cast, __try_cast ou dynamic_cast
+Cxfel.cpp(738) : warning C4303: Cast de style C de 'CLabelTextBox __gc *' vers 'System::Object __gc *' est désapprouvé, utilisez static_cast, __try_cast ou dynamic_cast
+Cxfel.cpp(742) : warning C4303: Cast de style C de 'CLabelTextBox __gc *' vers 'System::Object __gc *' est désapprouvé, utilisez static_cast, __try_cast ou dynamic_cast
+Cxfel.cpp(745) : warning C4303: Cast de style C de 'CLabelTextBox __gc *' vers 'System::Object __gc *' est désapprouvé, utilisez static_cast, __try_cast ou dynamic_cast
+Cxfel.cpp(748) : warning C4303: Cast de style C de 'CLabelTextBox __gc *' vers 'System::Object __gc *' est désapprouvé, utilisez static_cast, __try_cast ou dynamic_cast
+Cxfel.cpp(752) : warning C4303: Cast de style C de 'CLabelTextBox __gc *' vers 'System::Object __gc *' est désapprouvé, utilisez static_cast, __try_cast ou dynamic_cast
+Cxfel.cpp(755) : warning C4303: Cast de style C de 'CLabelTextBox __gc *' vers 'System::Object __gc *' est désapprouvé, utilisez static_cast, __try_cast ou dynamic_cast
+Cxfel.cpp(758) : warning C4303: Cast de style C de 'CLabelTextBox __gc *' vers 'System::Object __gc *' est désapprouvé, utilisez static_cast, __try_cast ou dynamic_cast
+Cxfel.cpp(761) : warning C4303: Cast de style C de 'CLabelTextBox __gc *' vers 'System::Object __gc *' est désapprouvé, utilisez static_cast, __try_cast ou dynamic_cast
+Cxfel.cpp(765) : warning C4303: Cast de style C de 'CLabelTextBox __gc *' vers 'System::Object __gc *' est désapprouvé, utilisez static_cast, __try_cast ou dynamic_cast
+Cxfel.cpp(768) : warning C4303: Cast de style C de 'CLabelTextBox __gc *' vers 'System::Object __gc *' est désapprouvé, utilisez static_cast, __try_cast ou dynamic_cast
+Cxfel.cpp(771) : warning C4303: Cast de style C de 'CLabelTextBox __gc *' vers 'System::Object __gc *' est désapprouvé, utilisez static_cast, __try_cast ou dynamic_cast
+Cxfel.cpp(775) : warning C4303: Cast de style C de 'CLabelTextBox __gc *' vers 'System::Object __gc *' est désapprouvé, utilisez static_cast, __try_cast ou dynamic_cast
+Cxfel.cpp(778) : warning C4303: Cast de style C de 'CLabelTextBox __gc *' vers 'System::Object __gc *' est désapprouvé, utilisez static_cast, __try_cast ou dynamic_cast
+Cxfel.cpp(781) : warning C4303: Cast de style C de 'CLabelTextBox __gc *' vers 'System::Object __gc *' est désapprouvé, utilisez static_cast, __try_cast ou dynamic_cast
+Cxfel.cpp(785) : warning C4303: Cast de style C de 'CLabelTextBox __gc *' vers 'System::Object __gc *' est désapprouvé, utilisez static_cast, __try_cast ou dynamic_cast
+Cxfel.cpp(792) : warning C4303: Cast de style C de 'CLabelTextBox __gc *' vers 'System::Object __gc *' est désapprouvé, utilisez static_cast, __try_cast ou dynamic_cast
+Cxfel.cpp(795) : warning C4303: Cast de style C de 'CLabelTextBox __gc *' vers 'System::Object __gc *' est désapprouvé, utilisez static_cast, __try_cast ou dynamic_cast
+Cxfel.cpp(798) : warning C4303: Cast de style C de 'CLabelTextBox __gc *' vers 'System::Object __gc *' est désapprouvé, utilisez static_cast, __try_cast ou dynamic_cast
+Cxfel.cpp(801) : warning C4303: Cast de style C de 'CLabelTextBox __gc *' vers 'System::Object __gc *' est désapprouvé, utilisez static_cast, __try_cast ou dynamic_cast
+Cxfel.cpp(804) : warning C4303: Cast de style C de 'CLabelTextBox __gc *' vers 'System::Object __gc *' est désapprouvé, utilisez static_cast, __try_cast ou dynamic_cast
+Cxfel.cpp(810) : warning C4303: Cast de style C de 'CLabelTextBox __gc *' vers 'System::Object __gc *' est désapprouvé, utilisez static_cast, __try_cast ou dynamic_cast
+Cxfel.cpp(817) : warning C4303: Cast de style C de 'CLabelTextBox __gc *' vers 'System::Object __gc *' est désapprouvé, utilisez static_cast, __try_cast ou dynamic_cast
+Cxfel.cpp(828) : warning C4303: Cast de style C de 'CLabelTextBox __gc *' vers 'System::Object __gc *' est désapprouvé, utilisez static_cast, __try_cast ou dynamic_cast
+Cxfel.cpp(833) : warning C4303: Cast de style C de 'CLabelTextBox __gc *' vers 'System::Object __gc *' est désapprouvé, utilisez static_cast, __try_cast ou dynamic_cast
+Cxfel.cpp(877) : warning C4303: Cast de style C de 'CLabelTextBox __gc *' vers 'System::Object __gc *' est désapprouvé, utilisez static_cast, __try_cast ou dynamic_cast
+Cxfel.cpp(897) : warning C4303: Cast de style C de 'CLabelTextBox __gc *' vers 'System::Object __gc *' est désapprouvé, utilisez static_cast, __try_cast ou dynamic_cast
+Cxfel.cpp(906) : warning C4303: Cast de style C de 'CLabelTextBox __gc *' vers 'System::Object __gc *' est désapprouvé, utilisez static_cast, __try_cast ou dynamic_cast
+Cxfel.cpp(917) : warning C4303: Cast de style C de 'CLabelTextBox __gc *' vers 'System::Object __gc *' est désapprouvé, utilisez static_cast, __try_cast ou dynamic_cast
+Cxfel.cpp(926) : warning C4303: Cast de style C de 'CLabelTextBox __gc *' vers 'System::Object __gc *' est désapprouvé, utilisez static_cast, __try_cast ou dynamic_cast
+Cxfel.cpp(932) : warning C4303: Cast de style C de 'CLabelTextBox __gc *' vers 'System::Object __gc *' est désapprouvé, utilisez static_cast, __try_cast ou dynamic_cast
+Cxfel.cpp(939) : warning C4303: Cast de style C de 'CLabelTextBox __gc *' vers 'System::Object __gc *' est désapprouvé, utilisez static_cast, __try_cast ou dynamic_cast
+Cxfel.cpp(946) : warning C4303: Cast de style C de 'CLabelTextBox __gc *' vers 'System::Object __gc *' est désapprouvé, utilisez static_cast, __try_cast ou dynamic_cast
+Cxfel.cpp(953) : warning C4303: Cast de style C de 'CLabelTextBox __gc *' vers 'System::Object __gc *' est désapprouvé, utilisez static_cast, __try_cast ou dynamic_cast
+Cxfel.cpp(960) : warning C4303: Cast de style C de 'CLabelTextBox __gc *' vers 'System::Object __gc *' est désapprouvé, utilisez static_cast, __try_cast ou dynamic_cast
+Cxfel.cpp(967) : warning C4303: Cast de style C de 'CLabelTextBox __gc *' vers 'System::Object __gc *' est désapprouvé, utilisez static_cast, __try_cast ou dynamic_cast
+Cxfel.cpp(972) : warning C4303: Cast de style C de 'CLabelTextBox __gc *' vers 'System::Object __gc *' est désapprouvé, utilisez static_cast, __try_cast ou dynamic_cast
+Cxfel.cpp(1050) : warning C4303: Cast de style C de 'CLabelTextBox __gc *' vers 'System::Object __gc *' est désapprouvé, utilisez static_cast, __try_cast ou dynamic_cast
+Cxfel.cpp(1068) : warning C4303: Cast de style C de 'CLabelTextBox __gc *' vers 'System::Object __gc *' est désapprouvé, utilisez static_cast, __try_cast ou dynamic_cast
+Cxfel.cpp(1086) : warning C4303: Cast de style C de 'CLabelTextBox __gc *' vers 'System::Object __gc *' est désapprouvé, utilisez static_cast, __try_cast ou dynamic_cast
+Cxfel.cpp(1134) : warning C4303: Cast de style C de 'CLabelTextBox __gc *' vers 'System::Object __gc *' est désapprouvé, utilisez static_cast, __try_cast ou dynamic_cast
+Cxfel.cpp(1150) : warning C4303: Cast de style C de 'CLabelTextBox __gc *' vers 'System::Object __gc *' est désapprouvé, utilisez static_cast, __try_cast ou dynamic_cast
+Cxfel.cpp(1167) : warning C4303: Cast de style C de 'CLabelTextBox __gc *' vers 'System::Object __gc *' est désapprouvé, utilisez static_cast, __try_cast ou dynamic_cast
+Cxfel.cpp(1184) : warning C4303: Cast de style C de 'CLabelTextBox __gc *' vers 'System::Object __gc *' est désapprouvé, utilisez static_cast, __try_cast ou dynamic_cast
+Cxfel.cpp(1201) : warning C4303: Cast de style C de 'CLabelTextBox __gc *' vers 'System::Object __gc *' est désapprouvé, utilisez static_cast, __try_cast ou dynamic_cast
+Cxfel.cpp(1218) : warning C4303: Cast de style C de 'CLabelTextBox __gc *' vers 'System::Object __gc *' est désapprouvé, utilisez static_cast, __try_cast ou dynamic_cast
+Cxfel.cpp(1235) : warning C4303: Cast de style C de 'CLabelTextBox __gc *' vers 'System::Object __gc *' est désapprouvé, utilisez static_cast, __try_cast ou dynamic_cast
+Cxfel.cpp(1326) : warning C4303: Cast de style C de 'CLabelTextBox __gc *' vers 'System::Object __gc *' est désapprouvé, utilisez static_cast, __try_cast ou dynamic_cast
+Cxfel.cpp(1348) : warning C4303: Cast de style C de 'CLabelTextBox __gc *' vers 'System::Object __gc *' est désapprouvé, utilisez static_cast, __try_cast ou dynamic_cast
+Cxfel.cpp(1370) : warning C4303: Cast de style C de 'CLabelTextBox __gc *' vers 'System::Object __gc *' est désapprouvé, utilisez static_cast, __try_cast ou dynamic_cast
+Cxfel.cpp(1392) : warning C4303: Cast de style C de 'CLabelTextBox __gc *' vers 'System::Object __gc *' est désapprouvé, utilisez static_cast, __try_cast ou dynamic_cast
+Cxfel.cpp(1836) : warning C4244: 'initialisation' : conversion de 'double' en 'float', perte possible de données
+c:\documents and settings\administrateur\mes documents\xfel\xsuclwf\cxfel.cpp(227) : warning C4700: variable locale 'rc' utilisée sans avoir été initialisée
+c:\documents and settings\administrateur\mes documents\xfel\xsuclwf\cxfel.cpp(278) : warning C4700: variable locale 'rc' utilisée sans avoir été initialisée
+c:\documents and settings\administrateur\mes documents\xfel\xsuclwf\cxfel.cpp(329) : warning C4700: variable locale 'rc' utilisée sans avoir été initialisée
+c:\documents and settings\administrateur\mes documents\xfel\xsuclwf\cxfel.cpp(380) : warning C4700: variable locale 'rc' utilisée sans avoir été initialisée
+Édition des liens en cours...
+LINK : warning LNK4075: ' /EDITANDCONTINUE' ignoré à cause de la spécification '/INCREMENTAL:NO'
+</pre></table><table width=100% bgcolor=#DFDFE5><tr><td><font face=arial size=+2>
+Résultats
+</font></table><table width=* cellspacing=0 cellpadding=0><tr><td width=0 bgcolor=#EDEDF5>&nbsp;</td><td width=0 bgcolor=#FFFFFF>&nbsp;</td><td width=*><pre>
+Le journal de génération a été enregistré à l'emplacement "file://c:\Documents and Settings\Administrateur\Mes documents\xfel\xsucLWF\Release\BuildLog.htm"
+cxfel - 0 erreur(s), 69 avertissement(s)</pre></table><table   width=100% height=20 bgcolor=#CFCFE5><tr><td><font face=arial size=+2>
+</font></table></body></html>
Index: tags/xsucLWF-1.0/condip.txt
===================================================================
--- tags/xsucLWF-1.0/condip.txt	(revision 20)
+++ tags/xsucLWF-1.0/condip.txt	(revision 20)
@@ -0,0 +1,1 @@
+192.168.0.15
Index: tags/xsucLWF-1.0/config-textbox.txt
===================================================================
--- tags/xsucLWF-1.0/config-textbox.txt	(revision 20)
+++ tags/xsucLWF-1.0/config-textbox.txt	(revision 20)
@@ -0,0 +1,14 @@
+dtp(min)	516	25	48	16	0	572	25	152	20
+dt(sec)		516	50	48	16	0	572	50	152	20
+dP(dB)		516	75	48	16	0	572	75	152	20
+dPsecu(dB)	516	100	48	16	0	572	100	152	20
+SVd		700	25	48	16	0	760	25	152	20
+SVfin		700	50	48	16	0	760	50	152	20
+SV1		700	75	48	16	0	760	75	152	20
+SV2		700	100	48	16	0	760	100	152	20
+Sleil(mA)	516	75	48	16	0	572	75	152	20
+STc(°C)		516	100	48	16	0	572	100	152	20
+n0		0	0	48	16	0	0	0	152	20
+n1		0	0	48	16	0	0	0	152	20
+n2		0	0	48	16	0	0	0	152	20
+n3		0	0	48	16	0	0	0	152	20
Index: tags/xsucLWF-1.0/cxfel.h
===================================================================
--- tags/xsucLWF-1.0/cxfel.h	(revision 20)
+++ tags/xsucLWF-1.0/cxfel.h	(revision 20)
@@ -0,0 +1,283 @@
+#ifndef _CXFEL_H
+#define _CXFEL_H
+
+#include "stdafx.h"
+
+
+#include <modbus.h>
+#include "modbus-private.h"
+#include "stdint.h"
+#include "unit-test.h"
+
+#include "alloulibere.h"
+
+//#define _INC_WINDOWS
+//#include <winsock2.h>
+//#include <windows.h>
+
+#using <mscorlib.dll>
+#using <System.dll>
+#using <System.Windows.Forms.dll>
+#using <System.Drawing.dll>//pour les controles bouton
+
+using namespace System;
+using namespace System::ComponentModel;//contient des classes pour les composants et les contrôles
+using namespace System::Windows::Forms;//contient des classes dédiées à la génération des formulaires
+using namespace System::Drawing;//contient les classes Point et Size du bouton
+
+using namespace System::Threading;
+using namespace System::Collections;
+
+#define NB_BANCS				4
+#define NB_COUPLEURS			8
+#define NB_ETAPES				12
+#define MAX_NB_LABEL_TEXTBOX	500
+
+#define MODBUS_SIZE_READ_COILS			13
+#define MODBUS_SIZE_READ_HOLDINGS_LOW	82
+#define MODBUS_SIZE_READ_HOLDINGS_HIGH	125
+
+#define MODBUS_BASEADR_COILS			3000
+#define MODBUS_BASEADR_LOW_HOLDINGS		2000
+#define MODBUS_BASEADR_HIGH_HOLDINGS	2082
+
+__gc public class CGroupBox : public Form {
+private:
+	String* name;
+//	int labPosX, labPosY;
+	Label* labNumP;
+	Label* labNumC1;
+	Label* labNumC2;
+	TextBox* valNumP;
+	TextBox* valNumC1;
+	TextBox* valNumC2;
+	GroupBox* gbox;
+
+	Button* appliquerBtn;
+
+	void AppliquerBtn_Clicked(Object* pSender,EventArgs* pArgs);
+public:
+	CGroupBox(String* gname, int posX, int posY);
+	//CGROUPBox(uint16_t *tab_rp_registers_low,uint16_t *tab_rp_registers_high);
+
+	GroupBox* GetGroupBox();
+	Label* GetLabelNumP();
+	Label* GetLabelNumC1();
+	Label* GetLabelNumC2();
+//	TextBox* GetTextBox();
+//	void SetVal(String*);
+protected:
+	static int nbInstance=0;//variable de classe
+};
+
+//classe boite de dialogue avec utilisation de données
+__gc public class CDialogConfig : public Form {
+public:
+ 	CDialogConfig();
+	CDialogConfig(uint16_t *tab_rp_registers_low,uint16_t *tab_rp_registers_high);
+
+protected ://privé sauf au niveau des classes dérivées
+	String* name;
+	static String* gname[] = {"a","b","c","d" };
+	int indexGroupBox;//nb de GroupBox
+
+private://données avec controle, label, bouton OK, textBox... 
+    Button* sortirBtn;
+
+	GroupBox* gboxPtr;
+	static ArrayList* pal; 
+
+private: 
+	void SortirBtn_Clicked(Object* pSender,EventArgs* pArgs);//gestionnaire d'evenement de la boite dialogue
+};
+
+
+__gc public class CLabelTextBox : public Form {
+private:
+	String* name;
+	int labPosX, labPosY;
+	int labSizeX, labSizeY;
+	Label* lab;
+	TextBox* val;
+public:
+	CLabelTextBox(String* lab, int posX, int posY, int sizeX, int sizeY, int sizeText);
+	Label* GetLabel();
+	TextBox* GetTextBox();
+	void SetVal(String*);
+	String* GetVal();
+	String* GetName();
+	void SetColor(int);
+protected:
+	static int nbInstance=0;//variable de classe
+};
+
+//classe boite de dialogue avec utilisation de données
+__gc public class MaDialogUser : public Form {
+public:
+    MaDialogUser();
+
+protected ://privé sauf au niveau des classes dérivées
+	String* name;
+	static String* nameLab_1[] = { "dtp(ms)","dt(sec)","dP(dB)","dPSecu(dB)","Nbal",
+		"P_cde(dBm)","Pp(kW)","Nbal_max","Fr(Hz)","N_cur",
+		"SVd","SVfin","SV1","SV2","V_cur(10-9mbar)",
+		"Pick(kW)","Timer","SVil(10-9mbar)","Sleil(mA)","STc(°C)",
+		"Eil","Nil","Nil_stat","P_last(dBm)","N_last","dPil(dB)"};
+
+	static String* nameLab_2[] = {"1a","2a","1b","2b","1c","2c","1d","2d" };
+
+	static String* nameLab_3[] = {"a","b","c","d" };
+
+	static String* nameLab_4[] = {"a","a","a","b","b","b","c","c","c","d","d","d" };
+
+	int indexTextBox;//nb de TextBox
+
+private://données avec controle, label, bouton OK, textBox... 
+    Button* OKBtn;
+    Button* CancelBtn;
+	Button* EcritureBtn;
+
+	GroupBox* gbox;
+ 	RadioButton* rb1;//oui
+    RadioButton* rb2;//non
+
+	Thread* uThread;
+
+	static ArrayList* pal; 
+	Label* lblPtr;
+	TextBox* tbxPtr;
+
+	static Button* btnStart;
+	static Button* btnStop;
+	static Button* btnPause;
+	static Button* btnReprise;//ces 4 controles bouton sont membres de System::Windows::Forms
+
+private: 
+	void OKMaDBtn_Clicked(Object* pSender,EventArgs* pArgs);//gestionnaire d'evenement de la boite dialogue
+	void Radio_Clicked(Object* pSender, EventArgs* pArgs);//remplit automatiquement la zone de texte
+	void Setup_Group ();//creation et configuration d'un groupe d'options
+	void Setup_Group_Conditionning ();//creation et configuration d'un groupe d'options
+    void Setup_Buttons_Conditionning();//creation et definition des boutons
+    void BtnStart_Clicked(Object* pSender, EventArgs* pArgs);//gestionnaire d'evenements associés au bouton 1
+    void BtnStop_Clicked(Object* pSender, EventArgs* pArgs);//gestionnaire d'evenements associés au bouton 2
+	void BtnPause_Clicked(Object* pSender, EventArgs* pArgs);//gestionnaire d'evenements associés au bouton 3
+	void BtnReprise_Clicked(Object* pSender, EventArgs* pArgs);//gestionnaire d'evenements associés au bouton 4
+
+	void EcritureBtn_Clicked(Object* pSender,EventArgs* pArgs);//gestionnaire d'evenement de la boite dialogue
+
+	static void ThreadProc();
+	static float PermutToReversed(uint16_t* tab_rp_registers,int index);//permut le float32 en float32 Reverse
+};
+
+
+//classe boite de dialogue : c'est un formulaire comme un autre.. à l'affichage près
+__gc public class AboutBox : public Form {
+
+private: 
+	void OKButton_Clicked(Object* pSender,EventArgs* pArgs);//gestionnaire d'evenement de la boite dialogue
+ 
+private:
+    Button* OKButton;
+
+public:
+    AboutBox();//constructeur
+
+};
+
+//classe boite de dialogue avec utilisation de données
+__gc public class MaDialog : public Form {
+public:
+    MaDialog();
+
+public://permet au code appelant de recuperer et modifier les données
+    void setIp(String* theIp);
+    String* getIp();
+    void setPort(String* thePort);
+    String* getPort();
+    void setTimeout(int theTimeout);
+    int getTimeout();
+
+private://données (ip/port/tiemout) avec controle, label, bouton OK et Cancel
+    Label* ipLabel;
+    TextBox* ipBox;
+    Label* portLabel;
+    TextBox* portBox;
+    Label* timeoutLabel;
+    ComboBox* timeoutCombo;
+
+    Button* OKBtn;
+    Button* CancelBtn;
+
+private: 
+	void OKMaDBtn_Clicked(Object* pSender,EventArgs* pArgs);//gestionnaire d'evenement de la boite dialogue
+
+    };
+
+//classe managée du formulaire : __gc hérite de la classe System::Windows::Forms::Form
+__gc public class CppForm : public Form {
+private:
+    Button* btn1;//ces controles bouton sont membres de System::Windows::Forms
+    Button* btn2;
+    Button* btn3;
+	Button* btn4;
+
+	Label* theLabel;
+
+	//groupe d'options avec 3 cases
+	GroupBox* gbox;
+    RadioButton* rb1;
+    RadioButton* rb2;
+    RadioButton* rb3;
+	RadioButton* rb4;
+
+    ComboBox* combo1;
+
+    TextBox* text1;
+    
+	MainMenu* menuBar;//barre de menu
+    MenuItem* fileMenu;//menu deroulant
+    MenuItem* item1;//element du menu
+    MenuItem* item2;//element du menu
+    System::Windows::Forms::ContextMenu* popupMenu;
+    MenuItem* item_p1;
+    MenuItem* item_p2;
+    MenuItem* item_p3;
+
+	MenuItem* item11;//pour afficher la boite de dialogue
+
+	MenuItem* fontDlgItem;//élément du menu Fichier
+
+	//ss menus
+	MenuItem* actionMenu;
+	MenuItem* subMenu1;
+	MenuItem* anotherItem;
+	MenuItem* item1_1;
+	MenuItem* item1_2;
+
+	System::Drawing::Font* labelFont;//pour afficher unr boite de dialogue Font pour choisir une police
+
+public:
+    CppForm();//constructeur
+
+private:
+    void Btn1_Clicked(Object* pSender, EventArgs* pArgs);//gestionnaire d'evenements associés au bouton 1
+	void Btn2_Clicked(Object* pSender, EventArgs* pArgs);//gestionnaire d'evenements associés au bouton 2
+	void Btn3_Clicked(Object* pSender, EventArgs* pArgs);//gestionnaire d'evenements associés au bouton 3
+ 	void Btn4_Clicked(Object* pSender, EventArgs* pArgs);//gestionnaire d'evenements associés au bouton 4
+    void Combo1_SelChanged(Object* pSender, EventArgs* pArgs);//gestionnaire d'evenement associé à la liste deroulante
+    void MenuItem_Clicked(Object* pSender, EventArgs* pArgs);//gestionnaire des elements de menu
+    void Radio_Clicked(Object* pSender, EventArgs* pArgs);//remplit automatiquement la zone de texte
+    void Setup_Buttons();//creation et definition du bouton
+    void Setup_Combo ();//configuration de la liste deroulmnte
+    void Setup_Context_Menu ();//menu contextuel
+    void Setup_Group ();//creation et configuration d'un groupe d'options
+    void Setup_Label();//description textuelle dans le formulaire
+    void Setup_Menu();//barre de menu
+    void Setup_Text();//controle d'edition
+};
+
+
+#endif
+
+
+
Index: tags/xsucLWF-1.0/cxfel.sln
===================================================================
--- tags/xsucLWF-1.0/cxfel.sln	(revision 20)
+++ tags/xsucLWF-1.0/cxfel.sln	(revision 20)
@@ -0,0 +1,23 @@
+Microsoft Visual Studio Solution File, Format Version 8.00
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cxfel", "cxfel.vcproj", "{7C6AB5A7-4C39-4419-B544-D29F89D2B5AE}"
+	ProjectSection(ProjectDependencies) = postProject
+	EndProjectSection
+EndProject
+Global
+	GlobalSection(SolutionConfiguration) = preSolution
+		Debug = Debug
+		Release = Release
+	EndGlobalSection
+	GlobalSection(ProjectDependencies) = postSolution
+	EndGlobalSection
+	GlobalSection(ProjectConfiguration) = postSolution
+		{7C6AB5A7-4C39-4419-B544-D29F89D2B5AE}.Debug.ActiveCfg = Debug|Win32
+		{7C6AB5A7-4C39-4419-B544-D29F89D2B5AE}.Debug.Build.0 = Debug|Win32
+		{7C6AB5A7-4C39-4419-B544-D29F89D2B5AE}.Release.ActiveCfg = Release|Win32
+		{7C6AB5A7-4C39-4419-B544-D29F89D2B5AE}.Release.Build.0 = Release|Win32
+	EndGlobalSection
+	GlobalSection(ExtensibilityGlobals) = postSolution
+	EndGlobalSection
+	GlobalSection(ExtensibilityAddIns) = postSolution
+	EndGlobalSection
+EndGlobal
Index: tags/xsucLWF-1.0/cxfelmain.cpp
===================================================================
--- tags/xsucLWF-1.0/cxfelmain.cpp	(revision 20)
+++ tags/xsucLWF-1.0/cxfelmain.cpp	(revision 20)
@@ -0,0 +1,32 @@
+#include "stdafx.h"
+
+#include "cxfel.h"
+//#include "mbxfel.h"
+
+#using <mscorlib.dll>
+#using <System.dll>
+#using <System.Windows.Forms.dll>
+#using <System.Drawing.dll>//pour les controles bouton
+
+using namespace System;
+using namespace System::ComponentModel;//contient des classes pour les composants et les contrôles
+using namespace System::Windows::Forms;//contient des classes dédiées à la génération des formulaires
+using namespace System::Drawing;//contient les classes Point et Size du bouton
+
+
+// This is the entry point for this application
+#ifdef _UNICODE
+int wmain(void)
+#else
+int main(void)
+#endif
+{
+    Console::WriteLine(S"Client XFEL");
+	
+    // Crée le formulaire.
+	// Application fait partie de l'espace de noms System::Windows::Forms
+	// et contient des méthodes statiques dont Run qui affiche le formulaire
+    Application::Run(new CppForm());
+
+    return 0;
+}
Index: tags/xsucLWF-1.0/mbxfel.cpp
===================================================================
--- tags/xsucLWF-1.0/mbxfel.cpp	(revision 20)
+++ tags/xsucLWF-1.0/mbxfel.cpp	(revision 20)
@@ -0,0 +1,144 @@
+// mbxfel.cpp: implementation de la classe CMb
+//
+
+
+
+#include "mbxfel.h"
+/*
+CMb::CMb()//constructeur
+:CRemoteModbus() //nom  de l'instance mais c'est un appel implicite
+{
+
+}
+
+CMb::CMb(CString sHost,WORD nPort,DWORD nrTimeout)//constructeur
+:CRemoteModbus(sHost,nPort,nrTimeout)//appel CRemoteModbus::CRemoteModbus(sHost,nPort,nrTimeout)
+{
+
+}
+
+CMb::~CMb()//destructeur
+{
+	//	closeConnection();
+}
+
+CString CMb::errorMessage(WORD errorCode)
+{
+	CString sRetValue("");
+
+	return sRetValue;	
+}
+
+BOOL CMb::openConnection(CString sHost, WORD nPort, DWORD nrTimeOut)
+{
+    
+}
+
+BOOL CMb::closeConnection()
+{
+	
+}
+*/
+
+CMb::CMb()//constructeur
+{
+	serverHost = "127.0.0.1";
+	numberPort = 502;
+	noResponseTimeout = 3000;
+}
+
+CMb::CMb(String* sHost,int nPort,unsigned int nrTimeout)//constructeur
+{
+	serverHost = sHost;
+	numberPort = nPort;
+	noResponseTimeout = nrTimeout;
+}
+
+CMb::~CMb()//destructeur
+{
+	closeConnection();
+}
+
+String* CMb::errorMessage(int errorCode)
+{
+	String* sRetValue("");
+
+	return sRetValue;	
+}
+
+bool CMb::openConnection(String* sHost, int nPort, String* message)
+{
+/*
+try {
+        // creation TcpClient.
+        // le serveur doit lancé.
+        client = new TcpClient(sHost, nPort);
+
+        // convertit le message en ascii et on le met dans un tableau
+        Byte data[] = Text::Encoding::ASCII->GetBytes(message);         
+
+        // Retourne le NetworkStream utilisé pour l'envoi et 
+		// la réception de données
+        NetworkStream* stream = client->GetStream();
+
+        // envoie le message au TcpServer. 
+        stream->Write(data, 0, data->Length);
+
+        Console::WriteLine(S"Sent: {0}", message);         
+
+        // Reponse du TcpServer.
+
+        // Buffer pour la réponse. 
+		data = new Byte[256];
+		// pour memoriser la reponse en ascii
+        String* responseData = String::Empty;
+
+        // lecture des octets venant du TcpServer.
+        Int32 bytes = stream->Read(data, 0, data->Length);
+        responseData = Text::Encoding::ASCII->GetString(data, 0, bytes);
+        Console::WriteLine(S"Received: {0}", responseData);         
+
+    } catch (ArgumentNullException* e) {
+        Console::WriteLine(S"ArgumentNullException: {0}", e);
+    } catch (SocketException* e) {
+        Console::WriteLine(S"SocketException: {0}", e);
+    }
+*/
+	
+//	ctx = modbus_new_tcp(sHost, nPort);
+	Console::WriteLine(S"CMb::openConnection : modbus_new_tcp...");
+//	ctx = modbus_new_tcp("134.158.91.254", 502);//JCM
+ 
+  //  modbus_set_debug(ctx, 1);
+
+    Console::WriteLine(S"Press Enter to continue...");
+//    Console::Read();
+
+    return true;
+}
+
+bool CMb::closeConnection()
+{
+	// Close everything
+//	client->Close();
+
+//	modbus_free(ctx);
+
+	return true;
+}
+
+void CMb::setServerHost(String* sHost)
+{
+	serverHost = sHost;
+}
+
+void CMb::setNumberPort(int nPort)
+{
+	numberPort = nPort;
+}
+
+void CMb::setNrTimeout(unsigned nrTimeout)
+{
+	noResponseTimeout = nrTimeout;
+}
+
Index: tags/xsucLWF-1.0/mbxfel.h
===================================================================
--- tags/xsucLWF-1.0/mbxfel.h	(revision 20)
+++ tags/xsucLWF-1.0/mbxfel.h	(revision 20)
@@ -0,0 +1,69 @@
+
+// mbxfel.h: interface for the CMb class.
+
+
+#ifndef _MB_H_
+#define _MB_H_
+
+#include "stdafx.h"
+
+#include <modbus.h>
+#include "stdint.h"
+#include "unit-test.h"
+
+//#include "RemoteModbus.h"
+#using <mscorlib.dll>
+#using <System.dll>
+
+using namespace System;
+//using namespace System::Net::Sockets;//contient des classes pour les sockets
+
+#define DIM_HOLDING 10
+#define DIM_COIL 10
+
+
+/*
+class CMb : public CRemoteModbus
+{
+	CString serverHost;
+	WORD numberPort;
+	DWORD noResponseTimeout;
+	BOOL coilArray[DIM_COIL];
+	DWORD registerArray[DIM_HOLDING];
+
+public://interface publique
+	CMb();//1er constructeur
+	CMb(CString sHost,WORD nPort,DWORD nrTimeout);//2eme constructeur
+	CString errorMessage(WORD errorCode); 
+
+	~CMb();//destructeur
+};
+*/
+__gc class CMb
+{
+	String* serverHost;
+	int numberPort;
+	unsigned noResponseTimeout;
+	bool coilArray __nogc [DIM_COIL];//bool coilArray[DIM_COIL];
+	int registerArray __nogc [DIM_HOLDING];//unsigned int registerArray[DIM_HOLDING];
+//	TcpClient* client;
+//	int socket;
+
+    modbus_t *ctx;
+
+
+public://interface publique
+	CMb();//1er constructeur
+	CMb(String* sHost,int nPort,unsigned nrTimeout);//2eme constructeur
+	String* errorMessage(int errorCode); 
+	bool openConnection(String* sHost, int nPort, String* message);
+	bool closeConnection();
+	void setServerHost(String* sHost);
+	void setNumberPort(int nPort);
+	void setNrTimeout(unsigned nrTimeout);
+
+	~CMb();//destructeur
+};
+
+
+#endif // !defined(_MB_H_)
Index: tags/xsucLWF-1.0/stdafx.cpp
===================================================================
--- tags/xsucLWF-1.0/stdafx.cpp	(revision 20)
+++ tags/xsucLWF-1.0/stdafx.cpp	(revision 20)
@@ -0,0 +1,7 @@
+// stdafx.cpp : source file that includes just the standard includes
+// CppForm.pch will be the pre-compiled header
+// stdafx.obj will contain the pre-compiled type information
+
+#include "stdafx.h"
+
+
Index: tags/xsucLWF-1.0/stdafx.h
===================================================================
--- tags/xsucLWF-1.0/stdafx.h	(revision 20)
+++ tags/xsucLWF-1.0/stdafx.h	(revision 20)
@@ -0,0 +1,4 @@
+// stdafx.h : include file for standard system include files,
+// or project specific include files that are used frequently, but
+// are changed infrequently
+//
Index: tags/xsucLWF-1.0/test1_4xsuc.txt
===================================================================
--- tags/xsucLWF-1.0/test1_4xsuc.txt	(revision 20)
+++ tags/xsucLWF-1.0/test1_4xsuc.txt	(revision 20)
@@ -0,0 +1,12 @@
+118
+200
+300
+2
+3
+4
+3
+5
+6
+44
+77
+88
