Merge commit 'dm/experimental' into test_1130
authorschon <schon@dev03-server>
Tue, 30 Nov 2010 05:01:22 +0000 (14:01 +0900)
committerschon <schon@dev03-server>
Tue, 30 Nov 2010 05:01:22 +0000 (14:01 +0900)
Conflicts:
acinclude.m4
lib/driver/Makefile.am
lib/python/Plugins/SystemPlugins/SoftwareManager/SoftwareTools.py
lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py
main/bsod.cpp
po/ar.po
po/ca.po
po/cs.po
po/da.po
po/de.po
po/el.po
po/en.po
po/enigma2.pot
po/es.po
po/et.po
po/fi.po
po/fr.po
po/fy.po
po/hr.po
po/hu.po
po/is.po
po/it.po
po/lt.po
po/lv.po
po/nl.po
po/no.po
po/pl.po
po/pt.po
po/ru.po
po/sk.po
po/sl.po
po/sr.po
po/sv.po
po/tr.po
po/uk.po

21 files changed:
1  2 
configure.ac
data/setup.xml
data/skin.xml
lib/driver/Makefile.am
lib/dvb/dvb.cpp
lib/dvb/frontend.cpp
lib/gdi/glcddc.cpp
lib/gdi/lcd.cpp
lib/python/Components/Harddisk.py
lib/python/Plugins/Extensions/DVDBurn/DVDProject.py
lib/python/Plugins/Extensions/MediaPlayer/plugin.py
lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/plugin.py
lib/python/Plugins/SystemPlugins/NFIFlash/downloader.py
lib/python/Plugins/SystemPlugins/SoftwareManager/SoftwareTools.py
lib/python/Plugins/SystemPlugins/SoftwareManager/plugin.py
lib/python/Screens/ChannelSelection.py
lib/python/Screens/InfoBarGenerics.py
lib/python/Screens/Wizard.py
lib/python/enigma_python.i
lib/service/servicedvb.cpp
main/bsod.cpp

diff --cc configure.ac
index 5465836,605431b..d989972
mode 100755,100644..100644
diff --cc data/setup.xml
Simple merge
diff --cc data/skin.xml
Simple merge
index c662545,b498a6c..3412288
mode 100755,100644..100755
@@@ -4,4 -10,29 +10,31 @@@ AM_CXXFLAGS = 
  noinst_LIBRARIES = libenigma_driver.a
  
  libenigma_driver_a_SOURCES = \
-       rc.cpp rcinput.cpp rcconsole.cpp avswitch.cpp rfmod.cpp etimezone.cpp misc_options.cpp memtest.cpp sc_test.cpp
+       avswitch.cpp \
+       etimezone.cpp \
+       misc_options.cpp \
+       rc.cpp \
+       rcconsole.cpp \
+       rcinput.cpp \
 -      rfmod.cpp
++      rfmod.cpp \
++      memtest.cpp \
++      sc_test.cpp
+ driverincludedir = $(pkgincludedir)/lib/driver
+ driverinclude_HEADERS = \
+       avswitch.h \
+       etimezone.h \
+       input_fake.h \
+       misc_options.h \
+       rc.h \
+       rcconsole.h \
+       rcdbox.h \
+       rcdreambox2.h \
+       rcinput.h \
+       rfmod.h
+ if HAVE_LIBSDL
+ libenigma_driver_a_SOURCES += \
+       rcsdl.cpp \
+       rcsdl.h
+ endif
diff --cc lib/dvb/dvb.cpp
index 2494239,414ab8d..68197c3
mode 100755,100644..100755
index 096705e,bade53b..8ac8cd3
mode 100755,100644..100755
diff --cc lib/gdi/lcd.cpp
index 9f43e35,518ee1b..a5ac351
mode 100755,100644..100755
index 9f69d26,0f1a8fc..51889d2
mode 100755,100644..100644
@@@ -512,25 -523,23 +546,24 @@@ class HarddiskManager
        def enumerateBlockDevices(self):
                print "enumerating block devices..."
                for blockdev in listdir("/sys/block"):
-                       error, blacklisted, removable, is_cdrom, partitions, medium_found = self.getBlockDevInfo(blockdev)
-                       print "found block device '%s':" % blockdev, 
-                       if error:
-                               print "error querying properties"
-                       elif blacklisted:
-                               print "blacklisted"
-                       elif not medium_found:
-                               print "no medium"
-                       else:
-                               print "ok, removable=%s, cdrom=%s, partitions=%s, device=%s" % (removable, is_cdrom, partitions, blockdev)
-                               self.addHotplugPartition(blockdev)
-                               for part in partitions:
-                                       self.addHotplugPartition(part)
+                       error, blacklisted, removable, is_cdrom, partitions, medium_found = self.addHotplugPartition(blockdev)
+                       if not error and not blacklisted:
+                               if medium_found:
+                                       for part in partitions:
+                                               self.addHotplugPartition(part)
+                               self.devices_scanned_on_init.append((blockdev, removable, is_cdrom, medium_found))
  
        def getAutofsMountpoint(self, device):
 -              return "/autofs/%s/" % (device)
 +              return "/media/%s/" % (device)
 +
  
+       def is_hard_mounted(self, device):
+               mounts = file('/proc/mounts').read().split('\n')
+               for x in mounts:
+                       if x.find('/autofs') == -1 and x.find(device) != -1:
+                               return True
+               return False
        def addHotplugPartition(self, device, physdev = None):
                if not physdev:
                        dev, part = self.splitDeviceName(device)
@@@ -99,9 -100,8 +100,8 @@@ class SoftwareTools(DreamInfoHandler)
                                self.getUpdates()
  
        def getUpdates(self, callback = None):
-               if SoftwareTools.lastDownloadDate is None:
+               if self.lastDownloadDate is None:
 -                      if  self.hardware_info.device_name != "dm7025":
 +                      if  self.hardware_info.device_name != "dm8000":
-                               rootkey = ['\x9f', '|', '\xe4', 'G', '\xc9', '\xb4', '\xf4', '#', '&', '\xce', '\xb3', '\xfe', '\xda', '\xc9', 'U', '`', '\xd8', '\x8c', 's', 'o', '\x90', '\x9b', '\\', 'b', '\xc0', '\x89', '\xd1', '\x8c', '\x9e', 'J', 'T', '\xc5', 'X', '\xa1', '\xb8', '\x13', '5', 'E', '\x02', '\xc9', '\xb2', '\xe6', 't', '\x89', '\xde', '\xcd', '\x9d', '\x11', '\xdd', '\xc7', '\xf4', '\xe4', '\xe4', '\xbc', '\xdb', '\x9c', '\xea', '}', '\xad', '\xda', 't', 'r', '\x9b', '\xdc', '\xbc', '\x18', '3', '\xe7', '\xaf', '|', '\xae', '\x0c', '\xe3', '\xb5', '\x84', '\x8d', '\r', '\x8d', '\x9d', '2', '\xd0', '\xce', '\xd5', 'q', '\t', '\x84', 'c', '\xa8', ')', '\x99', '\xdc', '<', '"', 'x', '\xe8', '\x87', '\x8f', '\x02', ';', 'S', 'm', '\xd5', '\xf0', '\xa3', '_', '\xb7', 'T', '\t', '\xde', '\xa7', '\xf1', '\xc9', '\xae', '\x8a', '\xd7', '\xd2', '\xcf', '\xb2', '.', '\x13', '\xfb', '\xac', 'j', '\xdf', '\xb1', '\x1d', ':', '?']
                                etpm = eTPM()
                                l2cert = etpm.getCert(eTPM.TPMD_DT_LEVEL2_CERT)
                                if l2cert is None:
                                        return
                                val = etpm.challenge(rnd)
                                result = decrypt_block(val, l3key)
 -                      if self.hardware_info.device_name == "dm7025" or result[80:88] == rnd:
 +                      if self.hardware_info.device_name == "dm8000" or result[80:88] == rnd:
-                               if SoftwareTools.NetworkConnectionAvailable == True:
-                                       SoftwareTools.lastDownloadDate = time()
-                                       if SoftwareTools.list_updating is False and callback is None:
-                                               SoftwareTools.list_updating = True
+                               if self.NetworkConnectionAvailable == True:
+                                       self.lastDownloadDate = time()
+                                       if self.list_updating is False and callback is None:
+                                               self.list_updating = True
                                                self.ipkg.startCmd(IpkgComponent.CMD_UPDATE)
-                                       elif SoftwareTools.list_updating is False and callback is not None:
-                                               SoftwareTools.list_updating = True
+                                       elif self.list_updating is False and callback is not None:
+                                               self.list_updating = True
                                                self.NotifierCallback = callback
                                                self.ipkg.startCmd(IpkgComponent.CMD_UPDATE)
-                                       elif SoftwareTools.list_updating is True and callback is not None:
+                                       elif self.list_updating is True and callback is not None:
                                                self.NotifierCallback = callback
                                else:
-                                       SoftwareTools.list_updating = False
+                                       self.list_updating = False
                                        if callback is not None:
                                                callback(False)
                                        elif self.NotifierCallback is not None:
                                elif self.NotifierCallback is not None:
                                        self.NotifierCallback(False)            
                else:
-                       if SoftwareTools.NetworkConnectionAvailable == True:
-                               SoftwareTools.lastDownloadDate = time()
-                               if SoftwareTools.list_updating is False and callback is None:
-                                       SoftwareTools.list_updating = True
+                       if self.NetworkConnectionAvailable == True:
+                               self.lastDownloadDate = time()
+                               if self.list_updating is False and callback is None:
+                                       self.list_updating = True
                                        self.ipkg.startCmd(IpkgComponent.CMD_UPDATE)
-                               elif SoftwareTools.list_updating is False and callback is not None:
-                                       SoftwareTools.list_updating = True
+                               elif self.list_updating is False and callback is not None:
+                                       self.list_updating = True
                                        self.NotifierCallback = callback
                                        self.ipkg.startCmd(IpkgComponent.CMD_UPDATE)
-                               elif SoftwareTools.list_updating is True and callback is not None:
+                               elif self.list_updating is True and callback is not None:
                                        self.NotifierCallback = callback
                        else:
-                               SoftwareTools.list_updating = False
-                               if callback is not None:
-                                       callback(False)
-                               elif self.NotifierCallback is not None:
-                                       self.NotifierCallback(False)
+                               if self.list_updating and callback is not None:
 -                                      if  self.hardware_info.device_name != "dm7025":
++                                      if  self.hardware_info.device_name != "dm8000":
+                                               etpm = eTPM()
+                                               l2cert = etpm.getCert(eTPM.TPMD_DT_LEVEL2_CERT)
+                                               if l2cert is None:
+                                                       return
+                                               l2key = validate_cert(l2cert, rootkey)
+                                               if l2key is None:
+                                                       return
+                                               l3cert = etpm.getCert(eTPM.TPMD_DT_LEVEL3_CERT)
+                                               if l3cert is None:
+                                                       return
+                                               l3key = validate_cert(l3cert, l2key)
+                                               if l3key is None:
+                                                       return
+                                               rnd = read_random()
+                                               if rnd is None:
+                                                       return
+                                               val = etpm.challenge(rnd)
+                                               result = decrypt_block(val, l3key)
 -                                      if self.hardware_info.device_name == "dm7025" or result[80:88] == rnd:
++                                      if self.hardware_info.device_name == "dm8000" or result[80:88] == rnd:
+                                               self.NotifierCallback = callback
+                                               self.startIpkgListAvailable()
+                               else:   
+                                       self.list_updating = False
+                                       if callback is not None:
+                                               callback(False)
+                                       elif self.NotifierCallback is not None:
+                                               self.NotifierCallback(False)
  
        def ipkgCallback(self, event, param):
                if event == IpkgComponent.EVENT_ERROR:
@@@ -1406,9 -1452,12 +1452,12 @@@ class UpdatePlugin(Screen)
        def exit(self):
                if not self.ipkg.isRunning():
                        if self.packages != 0 and self.error == 0:
 -                              self.session.openWithCallback(self.exitAnswer, MessageBox, _("Upgrade finished.") +" "+_("Do you want to reboot your Dreambox?"))
 +                              self.session.openWithCallback(self.exitAnswer, MessageBox, _("Upgrade finished.") +" "+_("Do you want to reboot your STB?"))
                        else:
                                self.close()
+               else:
+                       if not self.updating:
+                               self.close()
  
        def exitAnswer(self, result):
                if result is not None and result:
Simple merge
Simple merge
diff --cc main/bsod.cpp
index af4492f,5b01c7c..2666b9c
mode 100755,100644..100644
  
  /************************************************/
  
 +#ifdef BUILD_VUPLUS /* ikseong  */
 +#define CRASH_EMAILADDR "crashlog"
 +#else
  #define CRASH_EMAILADDR "crashlog@dream-multimedia-tv.de"
- #define STDBUFFER_SIZE 512
 +#endif
+ #define INFOFILE "/maintainer.info"
  #define RINGBUFFER_SIZE 16384
  static char ringbuffer[RINGBUFFER_SIZE];
- static int ringbuffer_head;
+ static unsigned int ringbuffer_head;
  
- static void addToLogbuffer(const char *data, int len)
+ static void addToLogbuffer(const char *data, unsigned int len)
  {
        while (len)
        {
@@@ -221,215 -157,109 +161,109 @@@ void bsodFatal(const char *component
        if (f)
        {
                time_t t = time(0);
-               char crashtime[STDBUFFER_SIZE];
-               sprintf(crashtime, "%s",ctime(&t));
-               if (strlen(crashtime) && crashtime[strlen(crashtime)-1] == '\n')
-                               crashtime[strlen(crashtime)-1] = 0;
-               fprintf(f, "<?xml version=\"1.0\" encoding=\"iso-8859-1\" ?>\n<opendreambox>\n");
-               fprintf(f, "\t<enigma2>\n");
-               fprintf(f, "\t\t<crashdate>%s</crashdate>\n", crashtime);
- #ifdef ENIGMA2_CHECKOUT_TAG
-               fprintf(f, "\t\t<checkouttag>" ENIGMA2_CHECKOUT_TAG "</checkouttag>\n");
- #else
-               fprintf(f, "\t\t<compiledate>" __DATE__ "</compiledate>\n");
- #endif
- #ifdef ENIGMA2_CHECKOUT_ROOT
-               fprintf(f, "\t\t<checkoutroot>" ENIGMA2_CHECKOUT_ROOT "</checkoutroot>\n");
- #endif
-               fprintf(f, "\t\t<contactemail>%s</contactemail>\n", crash_emailaddr);
-               fprintf(f, "\t\t<!-- Please email this crashlog to above address -->\n");
-               std::string activeSkin = getConfigFileValue("config.skin.primary_skin");
-               if (activeSkin != "Error")
-               {
-                       if (activeSkin == "")
-                               activeSkin = "Default Skin";
-                       fprintf(f, "\t\t<skin>%s</skin>\n", activeSkin.c_str());
-               }
-               fprintf(f, "\t</enigma2>\n");
+               struct tm tm;
+               char tm_str[32];
  
-               fprintf(f, "\t<image>\n");
-               std::string model = getFileContent("/proc/stb/info/model");
-               if (model != "Error")
-               {
-                       char modelname[STDBUFFER_SIZE];
-                       sprintf(modelname, "%s",model.c_str());
-                       if (strlen(modelname) && modelname[strlen(modelname)-1] == '\n')
-                               modelname[strlen(modelname)-1] = 0;
-                       fprintf(f, "\t\t<dreamboxmodel>%s</dreamboxmodel>\n", modelname);
-               }
-               std::string kernel = getFileContent("/proc/cmdline");
-               if (kernel != "Error")
-               {
-                       char kernelcmd[STDBUFFER_SIZE];
-                       sprintf(kernelcmd, "%s",kernel.c_str());
-                       if (strlen(kernelcmd) && kernelcmd[strlen(kernelcmd)-1] == '\n')
-                               kernelcmd[strlen(kernelcmd)-1] = 0;
-                       fprintf(f, "\t\t<kernelcmdline>%s</kernelcmdline>\n", kernelcmd);
-               }
-               std::string sendAnonCrashlog = getConfigFileValue("config.plugins.crashlogautosubmit.sendAnonCrashlog");
-               if (sendAnonCrashlog == "False" || sendAnonCrashlog == "false") // defaults to true... default anonymized crashlogs
-               {
-                       std::string ca = getFileContent("/proc/stb/info/ca");
-                       if (ca != "Error")
-                       {
-                               char dreamboxca[STDBUFFER_SIZE];
-                               sprintf(dreamboxca, "%s",ca.c_str());
-                               if (strlen(dreamboxca) && dreamboxca[strlen(dreamboxca)-1] == '\n')
-                                       dreamboxca[strlen(dreamboxca)-1] = 0;
-                               fprintf(f, "\t\t<dreamboxca>\n\t\t<![CDATA[\n%s\n\t\t]]>\n\t\t</dreamboxca>\n", dreamboxca);
-                       }
-                       std::string settings = getFileContent("/etc/enigma2/settings");
-                       if (settings != "Error")
-                       {
-                               fprintf(f, "\t\t<enigma2settings>\n\t\t<![CDATA[\n%s\t\t]]>\n\t\t</enigma2settings>\n", settings.c_str());
-                       }
-               }
-               std::string addNetwork = getConfigFileValue("config.plugins.crashlogautosubmit.addNetwork");
-               if (addNetwork == "True" || addNetwork == "true")
-               {
-                       std::string nwinterfaces = getFileContent("/etc/network/interfaces");
-                       if (nwinterfaces != "Error")
-                       {
-                               fprintf(f, "\t\t<networkinterfaces>\n\t\t<![CDATA[\n%s\t\t]]>\n\t\t</networkinterfaces>\n", nwinterfaces.c_str());
-                       }
-                       std::string dns = getFileContent("/etc/resolv.conf");
-                       if (dns != "Error")
-                       {
-                               fprintf(f, "\t\t<dns>\n\t\t<![CDATA[\n%s\t\t]]>\n\t\t</dns>\n", dns.c_str());
-                       }
-                       std::string defaultgw = getFileContent("/etc/default_gw");
-                       if (defaultgw != "Error")
-                       {
-                               char gateway[STDBUFFER_SIZE];
-                               sprintf(gateway, "%s",defaultgw.c_str());
-                               if (strlen(gateway) && gateway[strlen(gateway)-1] == '\n')
-                                       gateway[strlen(gateway)-1] = 0;
-                               fprintf(f, "\t\t<defaultgateway>\n\t\t<![CDATA[\n%s\t\t]]>\n\t\t</defaultgateway>\n", gateway);
-                       }
-               }
-               std::string addWlan = getConfigFileValue("config.plugins.crashlogautosubmit.addWlan");
-               if (addWlan == "True" || addWlan == "true")
-               {
-                       std::string wpasupplicant = getFileContent("/etc/wpa_supplicant.conf");
-                       if (wpasupplicant != "Error")
-                       {
-                               fprintf(f, "\t\t<wpasupplicant>\n\t\t<![CDATA[\n%s\t\t]]>\n\t\t</wpasupplicant>\n", wpasupplicant.c_str());
-                       }
-               }
-               std::string imageversion = getFileContent("/etc/image-version");
-               if (imageversion != "Error")
-               {
-                       fprintf(f, "\t\t<imageversion>\n\t\t<![CDATA[\n%s\t\t]]>\n\t\t</imageversion>\n", imageversion.c_str());
+               localtime_r(&t, &tm);
+               strftime(tm_str, sizeof(tm_str), "%a %b %_d %T %Y", &tm);
+               XmlGenerator xml(f);
+               xml.open("opendreambox");
+               xml.open("enigma2");
+               xml.string("crashdate", tm_str);
+               xml.string("compiledate", __DATE__);
+               xml.string("contactemail", crash_emailaddr);
+               xml.comment("Please email this crashlog to above address");
+               xml.string("skin", getConfigString("config.skin.primary_skin", "Default Skin"));
+               xml.string("sourcedate", enigma2_date);
+               xml.string("branch", enigma2_branch);
+               xml.string("rev", enigma2_rev);
+               xml.string("version", PACKAGE_VERSION);
+               xml.close();
+               xml.open("image");
+               xml.stringFromFile("dreamboxmodel", "/proc/stb/info/model");
+               xml.stringFromFile("kernelcmdline", "/proc/cmdline");
+               xml.stringFromFile("nimsockets", "/proc/bus/nim_sockets");
+               if (!getConfigBool("config.plugins.crashlogautosubmit.sendAnonCrashlog", true)) {
+                       xml.cDataFromFile("dreamboxca", "/proc/stb/info/ca");
+                       xml.cDataFromFile("enigma2settings", eEnv::resolve("${sysconfdir}/enigma2/settings"), ".password=");
                }
-               std::string imageissue = getFileContent("/etc/issue.net");
-               if (imageissue != "Error")
-               {
-                       fprintf(f, "\t\t<imageissue>\n\t\t<![CDATA[\n%s\t\t]]>\n\t\t</imageissue>\n", imageissue.c_str());
+               if (getConfigBool("config.plugins.crashlogautosubmit.addNetwork", false)) {
+                       xml.cDataFromFile("networkinterfaces", "/etc/network/interfaces");
+                       xml.cDataFromFile("dns", "/etc/resolv.conf");
+                       xml.cDataFromFile("defaultgateway", "/etc/default_gw");
                }
-               fprintf(f, "\t</image>\n");
-               fprintf(f, "\t<software>\n");
-               std::string installedplugins = execCommand("ipkg list_installed | grep enigma2");
-               fprintf(f, "\t\t<enigma2software>\n\t\t<![CDATA[\n%s\t\t]]>\n\t\t</enigma2software>\n", installedplugins.c_str());
-               std::string dreambox = execCommand("ipkg list_installed | grep dream");
-               fprintf(f, "\t\t<dreamboxsoftware>\n\t\t<![CDATA[\n%s\t\t]]>\n\t\t</dreamboxsoftware>\n", dreambox.c_str());
-               std::string gstreamer = execCommand("ipkg list_installed | grep gst");
-               fprintf(f, "\t\t<gstreamersoftware>\n\t\t<![CDATA[\n%s\t\t]]>\n\t\t</gstreamersoftware>\n", gstreamer.c_str());
-               fprintf(f, "\t</software>\n");
-               fprintf(f, "\t<crashlogs>\n");
-               std::string buffer = getLogBuffer();
-               fprintf(f, "\t\t<enigma2crashlog>\n\t\t<![CDATA[\n%s\t\t]]>\n\t\t</enigma2crashlog>\n", buffer.c_str());
-               std::string pythonmd5 = execCommand("find /usr/lib/enigma2/python/ -name \"*.py\" | xargs md5sum");
-               fprintf(f, "\t\t<pythonMD5sum>\n\t\t<![CDATA[\n%s\t\t]]>\n\t\t</pythonMD5sum>\n", pythonmd5.c_str());
-               fprintf(f, "\t</crashlogs>\n");
-               fprintf(f, "\n</opendreambox>\n");
+               if (getConfigBool("config.plugins.crashlogautosubmit.addWlan", false))
+                       xml.cDataFromFile("wpasupplicant", "/etc/wpa_supplicant.conf");
+               xml.cDataFromFile("imageversion", "/etc/image-version");
+               xml.cDataFromFile("imageissue", "/etc/issue.net");
+               xml.close();
+               xml.open("software");
+               xml.cDataFromCmd("enigma2software", "ipkg list_installed | grep enigma2");
+               xml.cDataFromCmd("dreamboxsoftware", "ipkg list_installed | grep dream");
+               xml.cDataFromCmd("gstreamersoftware", "ipkg list_installed | grep gst");
+               xml.close();
+               xml.open("crashlogs");
+               xml.cDataFromString("enigma2crashlog", getLogBuffer());
+               xml.cDataFromCmd("pythonMD5sum", "find " + eEnv::resolve("${libdir}/enigma2/python/") + " -name \"*.py\" | xargs md5sum");
+               xml.close();
+               xml.close();
                fclose(f);
-               
        }
-       
- #ifdef WITH_SDL
-       ePtr<gSDLDC> my_dc;
-       gSDLDC::getInstance(my_dc);
- #else
-       ePtr<gFBDC> my_dc;
-       gFBDC::getInstance(my_dc);
- #endif
-       
-       {
-               gPainter p(my_dc);
-               p.resetOffset();
-               p.resetClip(eRect(ePoint(0, 0), my_dc->size()));
- #ifdef ENIGMA2_CHECKOUT_TAG
-               if (ENIGMA2_CHECKOUT_TAG[0] == 'T') /* tagged checkout (release) */
-                       p.setBackgroundColor(gRGB(0x0000C0));
-               else if (ENIGMA2_CHECKOUT_TAG[0] == 'D') /* dated checkout (daily experimental build) */
-               {
-                       srand(time(0));
-                       int r = rand();
-                       unsigned int col = 0;
-                       if (r & 1)
-                               col |= 0x800000;
-                       if (r & 2)
-                               col |= 0x008000;
-                       if (r & 4)
-                               col |= 0x0000c0;
-                       p.setBackgroundColor(gRGB(col));
-               }
- #else
-                       p.setBackgroundColor(gRGB(0x008000));
- #endif
  
-               p.setForegroundColor(gRGB(0xFFFFFF));
-       
-               ePtr<gFont> font = new gFont("Regular", 20);
-               p.setFont(font);
-               p.clear();
-       
-               eRect usable_area = eRect(100, 70, my_dc->size().width() - 150, 100);
-               
-               char text[512];
- #ifdef BUILD_VUPLUS /* ikseong  */
-               snprintf(text, 512, "We are really sorry. Your STB encountered "
- #else
-               snprintf(text, 512, "We are really sorry. Your Dreambox encountered "
- #endif
-                       "a software problem, and needs to be restarted. "
-                       "Please send the logfile created in /hdd/ to %s.\n"
- #ifdef BUILD_VUPLUS /* ikseong  */
-                       "Your STB restarts in 10 seconds!\n"
- #else
-                       "Your Dreambox restarts in 10 seconds!\n"
- #endif
-                       "Component: %s",
-                       crash_emailaddr, crash_component);
-       
-               p.renderText(usable_area, text, gPainter::RT_WRAP|gPainter::RT_HALIGN_LEFT);
-       
-               usable_area = eRect(100, 170, my_dc->size().width() - 180, my_dc->size().height() - 20);
-       
-               int i;
-       
-               size_t start = std::string::npos + 1;
-               for (i=0; i<20; ++i)
+       ePtr<gMainDC> my_dc;
+       gMainDC::getInstance(my_dc);
 -      
++    
+       gPainter p(my_dc);
+       p.resetOffset();
+       p.resetClip(eRect(ePoint(0, 0), my_dc->size()));
+       p.setBackgroundColor(gRGB(0x008000));
+       p.setForegroundColor(gRGB(0xFFFFFF));
+       ePtr<gFont> font = new gFont("Regular", 20);
+       p.setFont(font);
+       p.clear();
+       eRect usable_area = eRect(100, 70, my_dc->size().width() - 150, 100);
 -      
 -      std::string text("We are really sorry. Your Dreambox encountered "
++    
++      std::string text("We are really sorry. Your STB encountered "
+               "a software problem, and needs to be restarted. "
+               "Please send the logfile created in /hdd/ to " + crash_emailaddr + ".\n"
 -              "Your Dreambox restarts in 10 seconds!\n"
++              "Your STB restarts in 10 seconds!\n"
+               "Component: " + crash_component);
+       p.renderText(usable_area, text.c_str(), gPainter::RT_WRAP|gPainter::RT_HALIGN_LEFT);
+       usable_area = eRect(100, 170, my_dc->size().width() - 180, my_dc->size().height() - 20);
+       int i;
+       start = std::string::npos + 1;
+       for (i=0; i<20; ++i)
+       {
+               start = lines.rfind('\n', start - 1);
+               if (start == std::string::npos)
                {
-                       start = lines.rfind('\n', start - 1);
-                       if (start == std::string::npos)
-                       {
-                               start = 0;
-                               break;
-                       }
+                       start = 0;
+                       break;
                }
-       
-               font = new gFont("Regular", 14);
-               p.setFont(font);
-       
-               p.renderText(usable_area, 
-                       lines.substr(start), gPainter::RT_HALIGN_LEFT);
-               sleep(10);
        }
  
+       font = new gFont("Regular", 14);
+       p.setFont(font);
+       p.renderText(usable_area, 
+               lines.substr(start), gPainter::RT_HALIGN_LEFT);
+       sleep(10);
        raise(SIGKILL);
  }