Index: trunk/MagicSoft/Cosy/gui/MGCosy.cc
===================================================================
--- trunk/MagicSoft/Cosy/gui/MGCosy.cc	(revision 2280)
+++ trunk/MagicSoft/Cosy/gui/MGCosy.cc	(revision 2384)
@@ -26,4 +26,5 @@
 #include "MCosy.h"
 #include "MGList.h"
+#include "MDriveCom.h"
 #include "MGAccuracy.h"
 #include "MGCoordinates.h"
@@ -34,5 +35,6 @@
 
 #undef DEBUG
-#define EXPERT
+//#define EXPERT
+//#define HAS_DEMO
 
 ClassImp(MGCosy);
@@ -41,4 +43,5 @@
 #define IDM_TEXT   2
 #define IDM_ASPECT 3
+
 
 enum
@@ -386,5 +389,7 @@
     TGCompositeFrame *tf6 = fTab->AddTab("Gear");
 #endif
-    /*TGCompositeFrame *tf3 =*/// fTab->AddTab("Demo");
+#ifdef HAS_DEMO
+    /*TGCompositeFrame *tf3 =*/ fTab->AddTab("Demo");
+#endif
 
     fCZdAz = new MGCoordinates(tf1, kETypeZdAz);
@@ -984,5 +989,5 @@
 void MGCosy::UpdateZdAz(ZdAz &soll)
 {
-    soll *= 360/2/TMath::Pi();
+    soll *= kRad2Deg;
 
     static Int_t zd=~0;
@@ -1055,19 +1060,13 @@
     UpdateZdAz(soll);
 
-#define kError     0x01
-#define kMoving    0x02
-#define kTracking  0x04
-#define kStopping  0x08
-#define kStopped   0x10
-
-    EnableLabel(fError,    stat&kError);
-    EnableLabel(fMoving,   stat&kMoving);
-    EnableLabel(fTracking, stat&kTracking);
-    EnableLabel(fStopping, stat&kStopping);
-    EnableLabel(fStopped,  stat&kStopped);
-    EnableLabel(fRaSoll,   stat&kTracking);
-    EnableLabel(fDecSoll,  stat&kTracking);
-    EnableLabel(fZdSoll,   stat&kMoving);
-    EnableLabel(fAzSoll,   stat&kMoving);
+    EnableLabel(fError,    stat&MDriveCom::kError);
+    EnableLabel(fMoving,   stat&MDriveCom::kMoving);
+    EnableLabel(fTracking, stat&MDriveCom::kTracking);
+    EnableLabel(fStopping, stat&MDriveCom::kStopping);
+    EnableLabel(fStopped,  stat&MDriveCom::kStopped);
+    EnableLabel(fRaSoll,   stat&MDriveCom::kTracking);
+    EnableLabel(fDecSoll,  stat&MDriveCom::kTracking);
+    EnableLabel(fZdSoll,   stat&MDriveCom::kMoving);
+    EnableLabel(fAzSoll,   stat&MDriveCom::kMoving);
 
     SetLabelColor(fAvailMac1, stat2&0x01);
@@ -1078,5 +1077,5 @@
     SetLabelColor(fAvailSe3,  stat2&0x20);
 
-    if (stat&kTracking)
+    if (stat&MDriveCom::kTracking)
     {
         fAccuracy->Update(pos, acc);
@@ -1187,5 +1186,6 @@
 // ************************** For demo purpose **********************
 //
-/*
+#ifdef HAS_DEMO
+
 #include <TRandom.h>
 class MDemo : public MThread
@@ -1200,30 +1200,48 @@
     void SetQueue(MsgQueue *q) { fQueue = q; }
 
+    bool Wait(int s, int m)
+    {
+        int i = 0;
+        while (!HasStopFlag() && i++<m)
+            usleep(s);
+        if (HasStopFlag())
+            return false;
+        return true;
+    }
+
+    bool Move(float zd, float az, int s, int m)
+    {
+        ZdAz dest1(zd, az);
+        fQueue->PostMsg(WM_POSITION1, &dest1, sizeof(dest1));
+        return Wait(s, m); // 30s?
+    }
+
     virtual void *Thread()
     {
-        while (1)
+        if (!Move(90, -65, 1000000, 27))
+            return NULL;
+
+        Int_t i=1;
+        while (i-->0)
         {
             Timer tm;
             tm.Now();
 
-            //fQueue->PostMsg(WM_STOP, 0, 0);
-
-            ZdAz dest1((float)fRand.Integer(120)-60., 0);//fRand.Integer(25)+90);
-
-            cout << "Demo: Zd=" << dest1.Zd() << "° Az=" << dest1.Az() << "°" << endl;
-
-            fQueue->PostMsg(WM_POSITION, &dest1, sizeof(dest1));
-
-            int i = 0;
-            while (!HasStopFlag() && i++<5)  // 30s
-                usleep(1000000);
-            if (HasStopFlag())
+            if (!Move(75, -80, 1000000, 13))
                 break;
-
-            //ZdAz dest2(5, 30);
-            //fQueue->PostMsg(WM_POSITION, &dest2, sizeof(dest2));
-            //if (HasStopFlag())
-            //    break;
+            if (!Move(60, -65, 1000000, 13))
+                break;
+            if (!Move(75, -50, 1000000, 13))
+                break;
+            if (!Move(90, -65, 1000000, 13))
+                break;
         }
+        if (!Move(60, -65, 1000000, 17))
+            return NULL;
+        if (!Move(90, -65, 1000000, 19))
+            return NULL;
+        if (!Move(90, -10, 1000000, 28))
+            return NULL;
+
         cout << "Demo Thread: done." << endl;
         return NULL;
@@ -1248,5 +1266,6 @@
     demo.Stop();
 }
-*/
+#endif //HAS_DEMO
+
 /*
 void MGCosy::StartCalib()
@@ -1344,9 +1363,9 @@
                     fQueue->Proc(WM_GEAR, (void*)1);
                     return kTRUE;
-                    /*
+#ifdef HAS_DEMO
                 case 5:
                     StartDemo();
                     return kTRUE;
-                    */
+#endif
                 }
                 return kTRUE;
@@ -1354,5 +1373,7 @@
             case kPB_STOP:
                 cout << "Sending stop movement msg." << endl;
-                //StopDemo();
+#ifdef HAS_DEMO
+                StopDemo();
+#endif
                 fQueue->PostMsg(WM_STOP, 0, 0);
                 if (fTab->GetCurrent()==3)
Index: trunk/MagicSoft/Cosy/gui/MGImage.cc
===================================================================
--- trunk/MagicSoft/Cosy/gui/MGImage.cc	(revision 2280)
+++ trunk/MagicSoft/Cosy/gui/MGImage.cc	(revision 2384)
@@ -52,4 +52,6 @@
     fDefGC  = gVirtualX->CreateGC(fId, 0);
     fImage  = (XImage*)gVirtualX->CreateImage(fWidth, fHeight);
+
+    cout << "Detected Color Depth: " << gVirtualX->GetDepth() << endl;
 }
 
@@ -82,14 +84,7 @@
 }
 
-void MGImage::DrawImg(const byte *buffer)
+void MGImage::DrawImg32(char *d, char *s, char *e)
 {
-    if (pthread_mutex_trylock((pthread_mutex_t*)fMuxPixmap))
-        return;
-
-    char *d = fImage->data;
-    char *e = (char*)(buffer+fWidth*fHeight);
-    char *s = (char*)buffer;
-
-    // FIXME: This loop depends on the screen color depth
+    // d=destination, s=source, e=end
     while (s<e)
     {
@@ -99,33 +94,9 @@
         d++;
     }
-
-    SetBit(kNeedRedraw);
-
-    pthread_mutex_unlock((pthread_mutex_t*)fMuxPixmap);
 }
 
-void MGImage::DrawColImg(const byte *gbuf, const byte *cbuf)
+void MGImage::DrawColImg32(char *d, char *s1, char *s2, char *e)
 {
-    if (pthread_mutex_trylock((pthread_mutex_t*)fMuxPixmap))
-        return;
-
-    char *d  = fImage->data;
-    char *e  = (char*)(gbuf+fWidth*fHeight);
-    char *s1 = (char*)gbuf;
-    char *s2 = (char*)cbuf;
-
-    // FROM libAfterImage:
-    // -------------------
-    //#define ALPHA_TRANSPARENT      	0x00
-    //#define ALPHA_SEMI_TRANSPARENT 	0x7F
-    //#define ALPHA_SOLID            	0xFF
-    // * Lowermost 8 bits - Blue channel
-    // * bits 8 to 15     - Green channel
-    // * bits 16 to 23    - Red channel
-    // * bits 24 to 31    - Alpha channel
-    //#define ARGB32_White    		0xFFFFFFFF
-    //#define ARGB32_Black    		0xFF000000
-
-    // FIXME: This loop depends on the screen color depth
+    // d=destination, s1=source1, s2=source2, e=end
     while (s1<e)
     {
@@ -147,4 +118,19 @@
         }
     }
+}
+
+void MGImage::DrawImg(const byte *buffer)
+{
+    if (pthread_mutex_trylock((pthread_mutex_t*)fMuxPixmap))
+        return;
+
+    switch (gVirtualX->GetDepth())
+    {
+    case 32:
+        DrawImg32(fImage->data, (char*)buffer, (char*)(buffer+fWidth*fHeight));
+        break;
+    default:
+        cout << "Sorry, " << gVirtualX->GetDepth() << "bit color depth not yet implemented." << endl;
+    }
 
     SetBit(kNeedRedraw);
@@ -152,2 +138,34 @@
     pthread_mutex_unlock((pthread_mutex_t*)fMuxPixmap);
 }
+
+void MGImage::DrawColImg(const byte *gbuf, const byte *cbuf)
+{
+    if (pthread_mutex_trylock((pthread_mutex_t*)fMuxPixmap))
+        return;
+
+    // FROM libAfterImage:
+    // -------------------
+    //#define ALPHA_TRANSPARENT      	0x00
+    //#define ALPHA_SEMI_TRANSPARENT 	0x7F
+    //#define ALPHA_SOLID            	0xFF
+    // * Lowermost 8 bits - Blue channel
+    // * bits 8 to 15     - Green channel
+    // * bits 16 to 23    - Red channel
+    // * bits 24 to 31    - Alpha channel
+    //#define ARGB32_White    		0xFFFFFFFF
+    //#define ARGB32_Black    		0xFF000000
+
+    // FIXME: This loop depends on the screen color depth
+    switch (gVirtualX->GetDepth())
+    {
+    case 32:
+        DrawColImg32(fImage->data, (char*)gbuf, (char*)cbuf, (char*)(gbuf+fWidth*fHeight));
+        break;
+    default:
+        cout << "Sorry, " << gVirtualX->GetDepth() << "bit color depth not yet implemented." << endl;
+    }
+
+    SetBit(kNeedRedraw);
+
+    pthread_mutex_unlock((pthread_mutex_t*)fMuxPixmap);
+}
Index: trunk/MagicSoft/Cosy/gui/MGImage.h
===================================================================
--- trunk/MagicSoft/Cosy/gui/MGImage.h	(revision 2280)
+++ trunk/MagicSoft/Cosy/gui/MGImage.h	(revision 2384)
@@ -35,4 +35,7 @@
     enum { kNeedRedraw = BIT(17) };
 
+    void DrawImg32(char *d, char *s, char *e);
+    void DrawColImg32(char *d, char *s1, char *s2, char *e);
+
 public:
     MGImage(const TGWindow* p, UInt_t w, UInt_t h, UInt_t options = kSunkenFrame, ULong_t back = fgDefaultFrameBackground);
Index: trunk/MagicSoft/Cosy/gui/Makefile
===================================================================
--- trunk/MagicSoft/Cosy/gui/Makefile	(revision 2280)
+++ trunk/MagicSoft/Cosy/gui/Makefile	(revision 2384)
@@ -21,5 +21,5 @@
 
 INCLUDES = -I. -I.. -I../base -I../slalib -I../candrv -I../incl \
-	   -I../catalog -I../videodev -I../main -I../caos
+	   -I../catalog -I../videodev -I../main -I../caos -I../tcpip
 
 # @code 
