+diff -Naur tuxcom.ori/tuxcom.c tuxcom/tuxcom.c
+--- tuxcom.ori/tuxcom.c 2009-01-06 00:12:19.000000000 +0100
++++ tuxcom/tuxcom.c 2009-01-05 21:10:35.000000000 +0100
+@@ -27,7 +27,7 @@
+ * GetRCCode (Code from Tuxmail)
+ ******************************************************************************/
+
+-#ifndef HAVE_DREAMBOX_HARDWARE
++
+
+ int GetRCCode(int mode)
+ {
+@@ -36,7 +36,8 @@
+ struct input_event ev;
+ static __u16 rc_last_key = KEY_RESERVED;
+ static __u16 rc_last_code = KEY_RESERVED;
+- if(read(rc, &ev, sizeof(ev)) == sizeof(ev))
++ if ((read(rc[0], &ev, sizeof(ev)) == sizeof(ev)) ||
++ (rc[1] != -1 && read(rc[1], &ev, sizeof(ev)) == sizeof(ev)))
+ {
+ if(ev.value)
+ {
+@@ -63,9 +64,9 @@
+ case KEY_GREEN: rccode = RC_GREEN; break;
+ case KEY_YELLOW: rccode = RC_YELLOW; break;
+ case KEY_BLUE: rccode = RC_BLUE; break;
+- case KEY_HELP: rccode = RC_HELP; break;
+- case KEY_SETUP: rccode = RC_DBOX; break;
+- case KEY_HOME: rccode = RC_HOME; break;
++ case KEY_INFO: rccode = RC_HELP; break;
++ case KEY_MENU: rccode = RC_DBOX; break;
++ case KEY_EXIT: rccode = RC_HOME; break;
+ case KEY_POWER: rccode = RC_STANDBY; break;
+ default:
+ if( ev.code > 0x7F )
+@@ -118,176 +119,94 @@
+ }
+ }
+
+- rccode = -1;
+- usleep(1000000/100);
+- return 0;
+-}
+-
+-#else
+-
+-int GetRCCode(int mode)
+-{
+- static int count = 0;
+- //get code
+- static unsigned short LastKey = -1;
+- static char LastKBCode = 0x00;
+- rccode = -1;
+- int bytesavail = 0;
+- int bytesread = read(rc, &rccode, 2);
+- unsigned short tmprc;
+- kbcode = 0;
+-
+- if (bytesread == 2)
+- {
+- if (read(rc, &tmprc, 2) == 2)
+- {
+- if (rccode == tmprc && count >= 0)
+- count++;
+- }
+- }
+-
+-
+- // Tastaturabfrage
+- ioctl(kb, FIONREAD, &bytesavail);
+- if (bytesavail>0)
+- {
+- char tch[100];
+- if (bytesavail > 99) bytesavail = 99;
+- read(kb,tch,bytesavail);
+- tch[bytesavail] = 0x00;
+- kbcode = tch[0];
+- LastKBCode = kbcode;
+- if (bytesavail == 1 && kbcode == 0x1b) { LastKey = RC_HOME ; rccode = -1 ; count = -1; return 1;} // ESC-Taste
+- if (bytesavail == 1 && kbcode == '\n') { LastKey = RC_OK ; rccode = -1 ; count = -1; return 1;} // Enter-Taste
+- if (bytesavail == 1 && kbcode == '+' ) { LastKey = RC_PLUS ; rccode = -1 ; count = -1; return 1;}
+- if (bytesavail == 1 && kbcode == '-' ) { LastKey = RC_MINUS; rccode = -1 ; count = -1; return 1;}
+- if (bytesavail >= 3 && tch[0] == 0x1b && tch[1] == 0x5b)
+- {
+- if (tch[2] == 0x41 ) { kbcode = LastKBCode = 0x00; rccode = RC_UP ; LastKey = rccode; count = -1; return 1; }// Cursortasten
+- if (tch[2] == 0x42 ) { kbcode = LastKBCode = 0x00; rccode = RC_DOWN ; LastKey = rccode; count = -1; return 1; }// Cursortasten
+- if (tch[2] == 0x43 ) { kbcode = LastKBCode = 0x00; rccode = RC_RIGHT ; LastKey = rccode; count = -1; return 1; }// Cursortasten
+- if (tch[2] == 0x44 ) { kbcode = LastKBCode = 0x00; rccode = RC_LEFT ; LastKey = rccode; count = -1; return 1; }// Cursortasten
+- if (tch[2] == 0x33 && tch[3] == 0x7e) { kbcode = LastKBCode = 0x00; rccode = RC_MINUS ; LastKey = rccode; count = -1; return 1; }// entf-Taste
+- if (tch[2] == 0x32 && tch[3] == 0x7e) { kbcode = LastKBCode = 0x00; rccode = RC_PLUS ; LastKey = rccode; count = -1; return 1; }// einf-Taste
+- if (tch[2] == 0x35 && tch[3] == 0x7e) { kbcode = LastKBCode = 0x00; rccode = RC_PLUS ; LastKey = rccode; count = -1; return 1; }// PgUp-Taste
+- if (tch[2] == 0x36 && tch[3] == 0x7e) { kbcode = LastKBCode = 0x00; rccode = RC_MINUS ; LastKey = rccode; count = -1; return 1; }// PgDn-Taste
+- if (tch[2] == 0x5b && tch[3] == 0x45) { kbcode = LastKBCode = 0x00; rccode = RC_RED ; LastKey = rccode; count = -1; return 1; }// F5-Taste
+- if (tch[2] == 0x31 && tch[3] == 0x37 && tch[4] == 0x7e) { kbcode = LastKBCode = 0x00; rccode = RC_GREEN ; LastKey = rccode; count = -1; return 1; }// F6-Taste
+- if (tch[2] == 0x31 && tch[3] == 0x38 && tch[4] == 0x7e) { kbcode = LastKBCode = 0x00; rccode = RC_YELLOW ; LastKey = rccode; count = -1; return 1; }// F7-Taste
+- if (tch[2] == 0x31 && tch[3] == 0x39 && tch[4] == 0x7e) { kbcode = LastKBCode = 0x00; rccode = RC_BLUE ; LastKey = rccode; count = -1; return 1; }// F8-Taste
+- if (tch[2] == 0x32 && tch[3] == 0x30 && tch[4] == 0x7e) { kbcode = LastKBCode = 0x00; rccode = RC_DBOX ; LastKey = rccode; count = -1; return 1; }// F9-Taste
+- if (tch[2] == 0x32 && tch[3] == 0x31 && tch[4] == 0x7e) { kbcode = LastKBCode = 0x00; rccode = RC_HELP ; LastKey = rccode; count = -1; return 1; }// F10-Taste
+- if (tch[2] == 0x32 && tch[3] == 0x33 && tch[4] == 0x7e) { kbcode = LastKBCode = 0x00; rccode = RC_MUTE ; LastKey = rccode; count = -1; return 1; }// F11-Taste
+- }
+- if (mode == RC_EDIT)
+- {
+-/*
+- char tmsg[100];
+- int i;
+- sprintf(tmsg,"KeyboardCode:avail:%d, char:%c, rccode:%x ",bytesavail,(kbcode == 0x00 ? '*' : kbcode ),rccode);
+- for (i = 0; i < bytesavail; i++) sprintf(tmsg,"%s%x",tmsg,tch[i]);
+- MessageBox(tmsg,"",NOBUTTON);
+-*/
+- LastKey = rccode;
+- count = -1;
+- switch (rccode)
+- {
+- case KEY_0:
+- case KEY_1:
+- case KEY_2:
+- case KEY_3:
+- case KEY_4:
+- case KEY_5:
+- case KEY_6:
+- case KEY_7:
+- case KEY_8:
+- case KEY_9:
+- // SMS-Style verhindern
+- rccode = -1;
+- break;
+- }
+- return 1;
+- }
+- else if (bytesread <= 0)
+- {
+- if (kbcode == '0') { kbcode = 0x00;rccode = RC_0 ; LastKey = rccode; return 1;}
+- if (kbcode == '1') { kbcode = 0x00;rccode = RC_1 ; LastKey = rccode; return 1;}
+- if (kbcode == '2') { kbcode = 0x00;rccode = RC_2 ; LastKey = rccode; return 1;}
+- if (kbcode == '3') { kbcode = 0x00;rccode = RC_3 ; LastKey = rccode; return 1;}
+- if (kbcode == '4') { kbcode = 0x00;rccode = RC_4 ; LastKey = rccode; return 1;}
+- if (kbcode == '5') { kbcode = 0x00;rccode = RC_5 ; LastKey = rccode; return 1;}
+- if (kbcode == '6') { kbcode = 0x00;rccode = RC_6 ; LastKey = rccode; return 1;}
+- if (kbcode == '7') { kbcode = 0x00;rccode = RC_7 ; LastKey = rccode; return 1;}
+- if (kbcode == '8') { kbcode = 0x00;rccode = RC_8 ; LastKey = rccode; return 1;}
+- if (kbcode == '9') { kbcode = 0x00;rccode = RC_9 ; LastKey = rccode; return 1;}
+- }
+- }
+- if (bytesread == 2)
++ count=0;
++ if(read(kb, &ev, sizeof(ev)) == sizeof(ev))
+ {
+- if (rccode == LastKey && LastKBCode != 0x00 && LastKBCode == kbcode)
+- {
+- return 1;
+- }
+- LastKBCode = 0x00;
+- if (rccode == LastKey)
++ if(ev.value)
+ {
+- if (count < REPEAT_TIMER)
++ if(ev.code == rc_last_key)
+ {
+- if (count >= 0)
++ if (count < REPEAT_TIMER)
++ {
+ count++;
+- rccode = -1;
+- return 1;
++ rccode = -1;
++ return 1;
++ }
+ }
+- }
+- else
+- count = 0;
+- LastKey = rccode;
+- if ((rccode & 0xFF00) == 0x5C00)
+- {
+- kbcode = 0;
+- switch(rccode)
++ else
++ count = 0;
++ rc_last_key = ev.code;
++ switch(ev.code)
+ {
+ case KEY_UP: rccode = RC_UP; break;
+ case KEY_DOWN: rccode = RC_DOWN; break;
+ case KEY_LEFT: rccode = RC_LEFT; break;
+ case KEY_RIGHT: rccode = RC_RIGHT; break;
+ case KEY_OK: rccode = RC_OK; break;
+- case KEY_0: rccode = RC_0; break;
+- case KEY_1: rccode = RC_1; break;
+- case KEY_2: rccode = RC_2; break;
+- case KEY_3: rccode = RC_3; break;
+- case KEY_4: rccode = RC_4; break;
+- case KEY_5: rccode = RC_5; break;
+- case KEY_6: rccode = RC_6; break;
+- case KEY_7: rccode = RC_7; break;
+- case KEY_8: rccode = RC_8; break;
+- case KEY_9: rccode = RC_9; break;
+ case KEY_RED: rccode = RC_RED; break;
+ case KEY_GREEN: rccode = RC_GREEN; break;
+ case KEY_YELLOW: rccode = RC_YELLOW; break;
+ case KEY_BLUE: rccode = RC_BLUE; break;
+- case KEY_VOLUMEUP: rccode = RC_PLUS; break;
+- case KEY_VOLUMEDOWN:rccode = RC_MINUS; break;
+- case KEY_MUTE: rccode = RC_MUTE; break;
+- case KEY_HELP: rccode = RC_HELP; break;
+- case KEY_SETUP: rccode = RC_DBOX; break;
+- case KEY_HOME: rccode = RC_HOME; break;
++ case KEY_INFO: rccode = RC_HELP; break;
++ case KEY_MENU: rccode = RC_DBOX; break;
++ case KEY_EXIT: rccode = RC_HOME; break;
+ case KEY_POWER: rccode = RC_STANDBY; break;
++ default:
++ if( ev.code > 0x7F )
++ {
++ rccode = 0;
++ if( ev.code == 0x110 )
++ {
++ rccode = RC_ON;
++ }
++ }
++ else
++ {
++ rccode = rctable[ev.code & 0x7F];
++ }
++ if( rc_last_code == RC_LSHIFT )
++ {
++ if( ev.code <= 0x56 ) //(sizeof(rcshifttable)/sizeof(int)-1)
++ {
++ rccode = rcshifttable[ev.code];
++ }
++ }
++ else if( rc_last_code == RC_ALTGR )
++ {
++ if( ev.code <= 0x56 ) //(sizeof(rcaltgrtable)/sizeof(int)-1)
++ {
++ rccode = rcaltgrtable[ev.code];
++ }
++ }
++ else if( rc_last_code == RC_ALT )
++ {
++ if((ev.code >=2) && ( ev.code <= 11 ))
++ {
++ rccode = (ev.code-1) | 0x0200;
++ }
++ }
++// if( !rccode )
++ {
++// rccode = -1;
++ }
++
+ }
++ rc_last_code = rccode;
+ return 1;
+ }
+ else
+ {
+- rccode &= 0x003F;
++ rccode = -1;
++ rc_last_key = KEY_RESERVED;
++ rc_last_code = KEY_RESERVED;
+ }
+- return 0;
+ }
+
+ rccode = -1;
+ usleep(1000000/100);
+ return 0;
+ }
+-#endif
++
+
+ /******************************************************************************
+ * MyFaceRequester
+@@ -316,6 +235,8 @@
+ FT_Vector kerning;
+ FT_Error error;
+
++ currentchar=currentchar & 0xFF;
++
+ if (currentchar == '\r') // display \r in windows edited files
+ {
+ if(color != -1)
+@@ -331,19 +252,15 @@
+ }
+ //load char
+
+- if(!(glyphindex = FT_Get_Char_Index(face, currentchar)))
++ if(!(glyphindex = FT_Get_Char_Index(face, (int)currentchar)))
+ {
+ printf("TuxCom <FT_Get_Char_Index for Char \"%c\" failed\n", (int)currentchar);
+ return 0;
+ }
+
+
+-#if FREETYPE_MAJOR == 2 && FREETYPE_MINOR == 0
++
+ if((error = FTC_SBit_Cache_Lookup(cache, &desc, glyphindex, &sbit)))
+-#else
+- FTC_Node anode;
+- if((error = FTC_SBitCache_Lookup(cache, &desc, glyphindex, &sbit, &anode)))
+-#endif
+ {
+ printf("TuxCom <FTC_SBitCache_Lookup for Char \"%c\" failed with Errorcode 0x%.2X>\n", (int)currentchar, error);
+ return 0;
+@@ -376,7 +293,7 @@
+ {
+ if(pitch*8 + 7-bit >= sbit->width) break; /* render needed bits only */
+
+- if((sbit->buffer[row * sbit->pitch + pitch]) & 1<<bit) *(lbb + StartX + sx + sbit->left + kerning.x + x + var_screeninfo.xres*(StartY + sy - sbit->top + y)) = color;
++ if((sbit->buffer[row * sbit->pitch + pitch]) & 1<<bit) memcpy(lbb + StartX*4 + sx*4 + (sbit->left + kerning.x + x)*4 + fix_screeninfo.line_length*(StartY + sy - sbit->top + y),bgra[color],4);
+
+ x++;
+ }
+@@ -481,38 +398,36 @@
+ void RenderBox(int sx, int sy, int ex, int ey, int mode, int color)
+ {
+ int loop;
++ int tx;
+ if(mode == FILL)
+ {
+ for(; sy <= ey; sy++)
+ {
+- memset(lbb + StartX + sx + var_screeninfo.xres*(StartY + sy), color, ex-sx + 1);
++ for(tx=0; tx <= (ex-sx); tx++)
++ {
++ memcpy(lbb + StartX*4 + sx*4 + (tx*4) + fix_screeninfo.line_length*(StartY + sy),bgra[color],4);
++ }
+ }
+ }
+ else
+ {
+- //hor lines
+-
+- for(loop = sx; loop <= ex; loop++)
+- {
+- *(lbb + StartX+loop + var_screeninfo.xres*(sy+StartY)) = color;
+- *(lbb + StartX+loop + var_screeninfo.xres*(sy+1+StartY)) = color;
+-
+- *(lbb + StartX+loop + var_screeninfo.xres*(ey-1+StartY)) = color;
+- *(lbb + StartX+loop + var_screeninfo.xres*(ey+StartY)) = color;
+- }
+-
+- //ver lines
+-
+- for(loop = sy; loop <= ey; loop++)
+- {
+- *(lbb + StartX+sx + var_screeninfo.xres*(loop+StartY)) = color;
+- *(lbb + StartX+sx+1 + var_screeninfo.xres*(loop+StartY)) = color;
+-
+- *(lbb + StartX+ex-1 + var_screeninfo.xres*(loop+StartY)) = color;
+- *(lbb + StartX+ex + var_screeninfo.xres*(loop+StartY)) = color;
+- }
++ for(loop = sx; loop <= ex; loop++)
++ {
++ memcpy(lbb + StartX*4+loop*4 + fix_screeninfo.line_length*(sy+StartY), bgra[color], 4);
++ memcpy(lbb + StartX*4+loop*4 + fix_screeninfo.line_length*(sy+1+StartY), bgra[color], 4);
++ memcpy(lbb + StartX*4+loop*4 + fix_screeninfo.line_length*(ey-1+StartY), bgra[color], 4);
++ memcpy(lbb + StartX*4+loop*4 + fix_screeninfo.line_length*(ey+StartY), bgra[color], 4);
++ }
++ for(loop = sy; loop <= ey; loop++)
++ {
++ memcpy(lbb + StartX*4+sx*4 + fix_screeninfo.line_length*(loop+StartY), bgra[color], 4);
++ memcpy(lbb + StartX*4+(sx+1)*4 + fix_screeninfo.line_length*(loop+StartY), bgra[color], 4);
++ memcpy(lbb + StartX*4+(ex-1)*4 + fix_screeninfo.line_length*(loop+StartY), bgra[color], 4);
++ memcpy(lbb + StartX*4+ex*4 + fix_screeninfo.line_length*(loop+StartY), bgra[color], 4);
++ }
+ }
+ }
++
+ void SetLanguage()
+ {
+ if (langselect == BTN_AUTO)
+@@ -540,7 +455,7 @@
+ * plugin_exec *
+ ******************************************************************************/
+
+-void plugin_exec(PluginParam *par)
++int main()
+ {
+ FT_Error error;
+
+@@ -552,9 +467,69 @@
+ //get params
+
+
+- fb = rc = sx = ex = sy = ey = -1;
++ kb = fb = sx = ex = sy = ey = -1;
+
+- for(; par; par = par->next)
++ /* open Framebuffer */
++ fb=open("/dev/fb0", O_RDWR);
++
++ /* open Remote Control */
++ int cnt=0, rc_num=0;
++ rc[0]=rc[1]=-1;
++
++ while(rc_num < 2)
++ {
++ struct stat s;
++ char tmp[128];
++ sprintf(tmp, "/dev/input/event%d", cnt);
++ if (stat(tmp, &s))
++ break;
++ /* open Remote Control */
++ if ((rc[rc_num]=open(tmp, O_RDONLY | O_EXCL | O_NONBLOCK)) == -1)
++ {
++ perror("TuxCom <open remote control>");
++ return 0;
++ }
++ if (ioctl(rc[rc_num], EVIOCGNAME(128), tmp) < 0)
++ perror("EVIOCGNAME failed");
++ if (!strstr(tmp, "remote control"))
++ close(rc[rc_num]);
++ else
++ ++rc_num;
++ ++cnt;
++ }
++// fcntl(rc, F_SETFL, fcntl(rc, F_GETFL) | O_EXCL | O_NONBLOCK);
++
++ /* open dream ir keyboard */
++ cnt=0;
++ while(1)
++ {
++ struct stat s;
++ char tmp[128];
++ sprintf(tmp, "/dev/input/event%d", cnt);
++ if (stat(tmp, &s))
++ break;
++ /* open keyboard */
++ if ((kb=open(tmp, O_RDONLY)) == -1)
++ {
++ perror("TuxCom <open ir keyboard>");
++ return 0;
++ }
++ if (ioctl(kb, EVIOCGNAME(128), tmp) < 0)
++ perror("EVIOCGNAME failed");
++ if (strstr(tmp, "dreambox ir keyboard"))
++ break;
++ close(kb);
++ kb=-1;
++ ++cnt;
++ }
++ fcntl(kb, F_SETFL, fcntl(kb, F_GETFL) | O_EXCL | O_NONBLOCK);
++
++ sx = 50;
++ ex = 670;
++ sy = 50;
++ ey = 526;
++
++/* for(; par; par = par->next)
+ {
+ if (!strcmp(par->id, P_ID_FBUFFER)) fb = atoi(par->val);
+ else if (!strcmp(par->id, P_ID_RCINPUT)) rc = atoi(par->val);
+@@ -563,9 +538,7 @@
+ else if (!strcmp(par->id, P_ID_OFF_Y)) sy = atoi(par->val);
+ else if (!strcmp(par->id, P_ID_END_Y)) ey = atoi(par->val);
+ }
+-#ifdef HAVE_DREAMBOX_HARDWARE
+- kb=open("/dev/vc/0", O_RDONLY);
+-#endif
++*/
+
+ if(fb == -1 || rc == -1 || sx == -1 || ex == -1 || sy == -1 || ey == -1)
+ {
+@@ -574,18 +547,27 @@
+ }
+ //init framebuffer
+
+- if(ioctl(fb, FBIOGET_FSCREENINFO, &fix_screeninfo) == -1)
++
++ if(ioctl(fb, FBIOGET_VSCREENINFO, &var_screeninfo) == -1)
+ {
+- printf("TuxCom <FBIOGET_FSCREENINFO failed>\n");
++ printf("TuxCom <FBIOGET_VSCREENINFO failed>\n");
+ return;
+ }
+
+- if(ioctl(fb, FBIOGET_VSCREENINFO, &var_screeninfo) == -1)
++ if (var_screeninfo.xres != 720)
+ {
+- printf("TuxCom <FBIOGET_VSCREENINFO failed>\n");
++ printf("TuxCom <set Autosize\n");
++ ex = var_screeninfo.xres - 50;
++ ey = var_screeninfo.yres - 50;
++ }
++
++ if(ioctl(fb, FBIOGET_FSCREENINFO, &fix_screeninfo) == -1)
++ {
++ printf("TuxCom <FBIOGET_FSCREENINFO failed>\n");
+ return;
+ }
+
++
+ if(ioctl(fb, FBIOPUTCMAP, &colormap) == -1)
+ {
+ printf("TuxCom <FBIOPUTCMAP failed>\n");
+@@ -643,17 +625,14 @@
+
+ use_kerning = FT_HAS_KERNING(face);
+
+-#if FREETYPE_MAJOR == 2 && FREETYPE_MINOR == 0
++
+ desc.image_type = ftc_image_mono;
+-#else
+- desc.flags = FT_LOAD_MONOCHROME;
+-#endif
+
+
+
+ //init backbuffer
+
+- if(!(lbb = malloc(var_screeninfo.xres*var_screeninfo.yres)))
++ if(!(lbb = malloc(3*fix_screeninfo.line_length*var_screeninfo.yres)))
+ {
+ printf("TuxCom <allocating of Backbuffer failed>\n");
+ FTC_Manager_Done(manager);
+@@ -661,11 +640,11 @@
+ munmap(lfb, fix_screeninfo.smem_len);
+ return;
+ }
+- memset(lbb, 0, var_screeninfo.xres*var_screeninfo.yres);
++ memset(lbb, 0, 3*fix_screeninfo.line_length*var_screeninfo.yres);
+ RenderBox(0,0,var_screeninfo.xres,var_screeninfo.yres,FILL,BLACK);
+
+ //open avs
+- if((avs = open(AVS, O_RDWR)) == -1)
++/* if((avs = open(AVS, O_RDWR)) == -1)
+ {
+ printf("TuxCom <open AVS>");
+ return;
+@@ -678,7 +657,7 @@
+ printf("TuxCom <open SAA>");
+ return;
+ }
+-
++*/
+
+
+ //init data
+@@ -687,8 +666,8 @@
+ curvisibility = 0;
+ singleview = 0;
+ textuppercase = 0;
+- screenmode=0;
+ filesize_in_byte = BTN_NO; // show human readable filesize
++ screenmode=0;
+ langselect = BTN_AUTO; // automatic
+ autosave = BTN_ASK; // ask on exit
+
+@@ -725,22 +704,18 @@
+
+ SetLanguage();
+
+- ioctl(saa, SAAIOGWSS, &saa_old);
+- ioctl(saa, SAAIOSWSS, &saamodes[screenmode]);
++// ioctl(saa, SAAIOGWSS, &saa_old);
++// ioctl(saa, SAAIOSWSS, &saamodes[screenmode]);
+ // setup screen
+ RenderFrame(LEFTFRAME);
+ RenderFrame(RIGHTFRAME);
+- memcpy(lfb, lbb, var_screeninfo.xres*var_screeninfo.yres);
++ memcpy(lfb, lbb, fix_screeninfo.line_length*var_screeninfo.yres);
+ printf("TuxCom init successful\n");
+
+ // lock keyboard-conversions, this is done by the plugin itself
+ fclose(fopen(KBLCKFILE,"w"));
+
+-#ifdef HAVE_DREAMBOX_HARDWARE
+- fcntl(rc, F_SETFL, O_NONBLOCK);
+-#else
+- fcntl(rc, F_SETFL, fcntl(rc, F_GETFL) &~ O_NONBLOCK);
+-#endif
++// fcntl(rc, F_SETFL, fcntl(rc, F_GETFL) &~ O_NONBLOCK);
+
+ int dosave = autosave;
+ int firstentry = 1;
+@@ -767,20 +742,11 @@
+ if (strcmp(szP,szPass) != 0) break;
+ RenderFrame(LEFTFRAME);
+ RenderFrame(RIGHTFRAME);
+- memcpy(lfb, lbb, var_screeninfo.xres*var_screeninfo.yres);
++ memcpy(lfb, lbb, fix_screeninfo.line_length*var_screeninfo.yres);
+ }
+ }
+ firstentry = 0;
+
+-#ifdef HAVE_DREAMBOX_HARDWARE
+- if (kbcode != 0)
+- {
+- if (kbcode == 0x09) // tab
+- {
+- rccode = (curframe == 1 ? RC_LEFT : RC_RIGHT);
+- }
+- }
+-#endif
+ switch(rccode)
+ {
+ case RC_HELP:
+@@ -868,13 +834,13 @@
+ break;
+ }
+ else
+- {
++ {
+ char scriptfile[FILENAME_MAX];
+ char* expos = strrchr(pfe->name,'.');
+ if (expos && strlen(expos) > 0)
+ {
+ struct stat st;
+- sprintf(scriptfile,"%s%s%s",CONFIGDIR, "/tuxcom/",expos+1);
++ sprintf(scriptfile,"%s%s%s","/etc/tuxbox/",expos+1);
+ if (lstat(scriptfile,&st) != -1)
+ {
+ char szCmd[4000];
+@@ -1361,7 +1327,7 @@
+ finfo[curframe].first = finfo[curframe].selected - framerows+1;
+ RenderFrame(LEFTFRAME);
+ RenderFrame(RIGHTFRAME);
+- memcpy(lfb, lbb, var_screeninfo.xres*var_screeninfo.yres);
++ memcpy(lfb, lbb, fix_screeninfo.line_length*var_screeninfo.yres);
+
+ }while(rccode != RC_HOME);
+
+@@ -1380,12 +1346,17 @@
+ unlink(KBLCKFILE);
+
+ //restore videoformat
+- ioctl(avs, AVSIOSSCARTPIN8, &fnc_old);
+- ioctl(saa, SAAIOSWSS, &saa_old);
+- close(avs);
+- close(saa);
+-
+- fcntl(rc, F_SETFL, O_NONBLOCK);
++// ioctl(avs, AVSIOSSCARTPIN8, &fnc_old);
++// ioctl(saa, SAAIOSWSS, &saa_old);
++// close(avs);
++// close(saa);
++
++// fcntl(rc, F_SETFL, O_NONBLOCK);
++ if (rc[0] != -1)
++ close(rc[0]);
++ if (rc[1] != -1)
++ close(rc[1]);
++ close(kb);
+
+ ClearEntries (LEFTFRAME );
+ ClearEntries (RIGHTFRAME);
+@@ -1393,9 +1364,6 @@
+ ClearMarker (RIGHTFRAME);
+ ClearZipEntries(LEFTFRAME );
+ ClearZipEntries(RIGHTFRAME);
+-#ifdef HAVE_DREAMBOX_HARDWARE
+- if (kb != -1) close(kb);
+-#endif
+ return;
+ }
+
+@@ -1447,7 +1415,7 @@
+ RenderString(colorline[colortool[i]*NUM_LANG+language], (viewx/COLORBUTTONS) *i , viewy- FONT_OFFSET_BIG , viewx/COLORBUTTONS, CENTER, SMALL , (i == 2 ? BLACK : WHITE));
+ }
+ if (refresh == YES)
+- memcpy(lfb, lbb, var_screeninfo.xres*var_screeninfo.yres);
++ memcpy(lfb, lbb, fix_screeninfo.line_length*var_screeninfo.yres);
+
+ }
+
+@@ -1458,7 +1426,7 @@
+
+ void RenderFrame(int frame)
+ {
+- if (singleview && curframe != frame)
++ if (singleview && curframe != frame)
+ return;
+
+ int row = 0;
+@@ -1742,7 +1710,7 @@
+
+ RenderBox(viewx/2 + 2* BORDERSIZE , viewy-(viewy-he)/2 - 2*BORDERSIZE - BUTTONHEIGHT , viewx/2 + 2* BORDERSIZE +BUTTONWIDTH ,viewy-(viewy-he)/2- 2* BORDERSIZE , GRID, (sel == 1 ? WHITE : GREEN));
+ RenderBox(viewx/2 + 2* BORDERSIZE +1, viewy-(viewy-he)/2 - 2*BORDERSIZE - BUTTONHEIGHT+1, viewx/2 + 2* BORDERSIZE +BUTTONWIDTH -1,viewy-(viewy-he)/2- 2* BORDERSIZE-1, GRID, (sel == 1 ? WHITE : GREEN));
+- memcpy(lfb, lbb, var_screeninfo.xres*var_screeninfo.yres);
++ memcpy(lfb, lbb, fix_screeninfo.line_length*var_screeninfo.yres);
+ break;
+ case 2:
+ RenderBox(viewx/2 - 4* BORDERSIZE - BUTTONWIDTH - BUTTONWIDTH/2 , viewy-(viewy-he)/2 - 2*BORDERSIZE - BUTTONHEIGHT , viewx/2 - 4* BORDERSIZE - BUTTONWIDTH/2 ,viewy-(viewy-he)/2- 2* BORDERSIZE , GRID, (sel == 0 ? WHITE : RED ));
+@@ -1753,7 +1721,7 @@
+
+ RenderBox(viewx/2 + 4* BORDERSIZE + BUTTONWIDTH/2 , viewy-(viewy-he)/2 - 2*BORDERSIZE - BUTTONHEIGHT , viewx/2 + 4* BORDERSIZE +BUTTONWIDTH + BUTTONWIDTH/2 ,viewy-(viewy-he)/2- 2* BORDERSIZE , GRID, (sel == 2 ? BLACK : YELLOW ));
+ RenderBox(viewx/2 + 4* BORDERSIZE + BUTTONWIDTH/2 +1, viewy-(viewy-he)/2 - 2*BORDERSIZE - BUTTONHEIGHT+1, viewx/2 + 4* BORDERSIZE +BUTTONWIDTH + BUTTONWIDTH/2-1,viewy-(viewy-he)/2- 2* BORDERSIZE-1, GRID, (sel == 2 ? BLACK : YELLOW ));
+- memcpy(lfb, lbb, var_screeninfo.xres*var_screeninfo.yres);
++ memcpy(lfb, lbb, fix_screeninfo.line_length*var_screeninfo.yres);
+ break;
+ case 4:
+ RenderBox(viewx/2 - 4* BORDERSIZE - BUTTONWIDTH - BUTTONWIDTH/2 , viewy-(viewy-he)/2 - 4*BORDERSIZE - 2*BUTTONHEIGHT , viewx/2 - 4* BORDERSIZE - BUTTONWIDTH/2 ,viewy-(viewy-he)/2- 4* BORDERSIZE - BUTTONHEIGHT , GRID, (sel == 0 ? WHITE : RED ));
+@@ -1770,7 +1738,7 @@
+
+ RenderBox(viewx/2 + 2* BORDERSIZE , viewy-(viewy-he)/2 - 2*BORDERSIZE - BUTTONHEIGHT , viewx/2 + 4* BORDERSIZE +BUTTONWIDTH + BUTTONWIDTH/2 ,viewy-(viewy-he)/2- 2* BORDERSIZE , GRID, (sel == 4 ? WHITE : BLUE2 ));
+ RenderBox(viewx/2 + 2* BORDERSIZE +1, viewy-(viewy-he)/2 - 2*BORDERSIZE - BUTTONHEIGHT+1, viewx/2 + 4* BORDERSIZE +BUTTONWIDTH + BUTTONWIDTH/2-1,viewy-(viewy-he)/2- 2* BORDERSIZE -1, GRID, (sel == 4 ? WHITE : BLUE2 ));
+- memcpy(lfb, lbb, var_screeninfo.xres*var_screeninfo.yres);
++ memcpy(lfb, lbb, fix_screeninfo.line_length*var_screeninfo.yres);
+ break;
+ }
+ drawsel = 0;
+@@ -1853,7 +1821,7 @@
+ RenderBox((viewx-BUTTONWIDTH)/2 , viewy-(viewy-he)/2 - 2*BORDERSIZE - BUTTONHEIGHT, viewx - (viewx-BUTTONWIDTH)/2,viewy-(viewy-he)/2 - 2*BORDERSIZE , GRID, WHITE);
+ break;
+ }
+- memcpy(lfb, lbb, var_screeninfo.xres*var_screeninfo.yres);
++ memcpy(lfb, lbb, fix_screeninfo.line_length*var_screeninfo.yres);
+ }
+
+ /******************************************************************************
+@@ -1882,15 +1850,9 @@
+ RenderBox((viewx-wi)/2 , (viewy-he) /2, viewx-(viewx-wi)/2, viewy-(viewy-he)/2, GRID, WHITE);
+ RenderString(pfe->name,(viewx-wi)/2+ 2* BORDERSIZE , (viewy-he)/2 + 2*BORDERSIZE + FONTHEIGHT_BIG-FONT_OFFSET , wi, CENTER, BIG, WHITE);
+
+- char sizeString[200];
+- GetSizeString(sizeString,pfe->fentry.st_size,1);
+- sprintf(sizeString,"%s byte(s)",sizeString);
+-
+- RenderString(sizeString,(viewx-wi)/2+ 2* BORDERSIZE , (viewy-he)/2 + 2*BORDERSIZE + 2*FONTHEIGHT_BIG-FONT_OFFSET , wi, CENTER, BIG, WHITE);
+-
+- RenderString(info[INFO_ACCESSED*NUM_LANG+language],(viewx-wi)/2+ 3* BORDERSIZE , (viewy-he)/2 + 6*BORDERSIZE + (3)*FONTHEIGHT_BIG-FONT_OFFSET , wi, LEFT, BIG, WHITE);
+- RenderString(info[INFO_MODIFIED*NUM_LANG+language],(viewx-wi)/2+ 3* BORDERSIZE , (viewy-he)/2 + 6*BORDERSIZE + (4)*FONTHEIGHT_BIG-FONT_OFFSET , wi, LEFT, BIG, WHITE);
+- RenderString(info[INFO_CREATED *NUM_LANG+language],(viewx-wi)/2+ 3* BORDERSIZE , (viewy-he)/2 + 6*BORDERSIZE + (5)*FONTHEIGHT_BIG-FONT_OFFSET , wi, LEFT, BIG, WHITE);
++ RenderString(info[INFO_ACCESSED*NUM_LANG+language],(viewx-wi)/2+ 3* BORDERSIZE , (viewy-he)/2 + 6*BORDERSIZE + (2)*FONTHEIGHT_BIG-FONT_OFFSET , wi, LEFT, BIG, WHITE);
++ RenderString(info[INFO_MODIFIED*NUM_LANG+language],(viewx-wi)/2+ 3* BORDERSIZE , (viewy-he)/2 + 6*BORDERSIZE + (3)*FONTHEIGHT_BIG-FONT_OFFSET , wi, LEFT, BIG, WHITE);
++ RenderString(info[INFO_CREATED *NUM_LANG+language],(viewx-wi)/2+ 3* BORDERSIZE , (viewy-he)/2 + 6*BORDERSIZE + (4)*FONTHEIGHT_BIG-FONT_OFFSET , wi, LEFT, BIG, WHITE);
+ char tm[100];
+ strftime(tm,100,info[INFO_DATETIME *NUM_LANG+language],localtime(&pfe->fentry.st_atime));
+ RenderString(tm,viewx/2- 2* BORDERSIZE , (viewy-he)/2 + 6*BORDERSIZE + (3)*FONTHEIGHT_BIG-FONT_OFFSET , wi/2, RIGHT, BIG, WHITE);
+@@ -2000,7 +1962,7 @@
+ RenderBox(viewx/2 - 2* BORDERSIZE -BUTTONWIDTH+1, viewy-(viewy-he)/2 - 2*BORDERSIZE - BUTTONHEIGHT+1, viewx/2 - 2* BORDERSIZE -1,viewy-(viewy-he)/2- 2* BORDERSIZE-1, GRID, (sel == YES ? WHITE : RED ));
+ RenderBox(viewx/2 + 2* BORDERSIZE , viewy-(viewy-he)/2 - 2*BORDERSIZE - BUTTONHEIGHT , viewx/2 + 2* BORDERSIZE +BUTTONWIDTH ,viewy-(viewy-he)/2- 2* BORDERSIZE , GRID, (sel == NO ? WHITE : GREEN));
+ RenderBox(viewx/2 + 2* BORDERSIZE +1, viewy-(viewy-he)/2 - 2*BORDERSIZE - BUTTONHEIGHT+1, viewx/2 + 2* BORDERSIZE +BUTTONWIDTH-1,viewy-(viewy-he)/2- 2* BORDERSIZE-1, GRID, (sel == NO ? WHITE : GREEN));
+- memcpy(lfb, lbb, var_screeninfo.xres*var_screeninfo.yres);
++ memcpy(lfb, lbb, fix_screeninfo.line_length*var_screeninfo.yres);
+ drawsel = 0;
+ }
+
+@@ -2041,7 +2003,7 @@
+ continue;
+ *p=0;
+ p++;
+- p1=strchr(p,'\r'); // für Windows-Nutzer: '\r' überlesen
++ p1=strchr(p,'\r'); // für Windows-Nutzer: '\r' überlesen
+ if (p1 != NULL) *p1 = 0x00;
+ if ( !strcmp(line,"host") ) strcpy(entries[0], p);
+ else if ( !strcmp(line,"port") ) strcpy(entries[1], p);
+@@ -2144,7 +2106,7 @@
+ RenderBox(viewx/2 - 2* BORDERSIZE -BUTTONWIDTH+1, viewy-(viewy-he)/2 - 2*BORDERSIZE - BUTTONHEIGHT+1, viewx/2 - 2* BORDERSIZE -1,viewy-(viewy-he)/2- 2* BORDERSIZE-1, GRID, (sel == YES ? WHITE : RED ));
+ RenderBox(viewx/2 + 2* BORDERSIZE , viewy-(viewy-he)/2 - 2*BORDERSIZE - BUTTONHEIGHT , viewx/2 + 2* BORDERSIZE +BUTTONWIDTH ,viewy-(viewy-he)/2- 2* BORDERSIZE , GRID, (sel == NO ? WHITE : GREEN));
+ RenderBox(viewx/2 + 2* BORDERSIZE +1, viewy-(viewy-he)/2 - 2*BORDERSIZE - BUTTONHEIGHT+1, viewx/2 + 2* BORDERSIZE +BUTTONWIDTH-1,viewy-(viewy-he)/2- 2* BORDERSIZE-1, GRID, (sel == NO ? WHITE : GREEN));
+- memcpy(lfb, lbb, var_screeninfo.xres*var_screeninfo.yres);
++ memcpy(lfb, lbb, fix_screeninfo.line_length*var_screeninfo.yres);
+ drawsel = 0;
+ }
+ if (end == YES)
+@@ -2195,10 +2157,10 @@
+ sprintf(szEntry,mainmenu[i*NUM_LANG+language],mbox[filesize_in_byte*NUM_LANG+language]);
+ break;
+ case 5: // set language
+- sprintf(szEntry,mainmenu[i*NUM_LANG+language],mbox[langselect *NUM_LANG+language]);
++ sprintf(szEntry,mainmenu[i*NUM_LANG+language],mbox[langselect*NUM_LANG+language]);
+ break;
+ case 6: // save settings
+- sprintf(szEntry,mainmenu[i*NUM_LANG+language],mbox[autosave *NUM_LANG+language]);
++ sprintf(szEntry,mainmenu[i*NUM_LANG+language],mbox[autosave *NUM_LANG+language]);
+ break;
+ default:
+ strcpy(szEntry,mainmenu[i*NUM_LANG+language]);
+@@ -2206,7 +2168,7 @@
+ }
+ RenderString(szEntry,(viewx-wi)/2+ BORDERSIZE , (viewy-he)/2 + BORDERSIZE + (i+1)*FONTHEIGHT_BIG-FONT_OFFSET , wi, CENTER, BIG, WHITE);
+ }
+- memcpy(lfb, lbb, var_screeninfo.xres*var_screeninfo.yres);
++ memcpy(lfb, lbb, fix_screeninfo.line_length*var_screeninfo.yres);
+ int drawsel = 0;
+ do{
+ GetRCCode(RC_NORMAL);
+@@ -2225,8 +2187,8 @@
+ return;
+ case 2:
+ screenmode = 1-screenmode;
+- ioctl(avs, AVSIOSSCARTPIN8, &fncmodes[screenmode]);
+- ioctl(saa, SAAIOSWSS, &saamodes[screenmode]);
++ //ioctl(avs, AVSIOSSCARTPIN8, &fncmodes[screenmode]);
++ //ioctl(saa, SAAIOSWSS, &saamodes[screenmode]);
+ return;
+ case 3:
+ SetPassword();
+@@ -2342,7 +2304,7 @@
+ }
+ RenderString(szEntry,(viewx-wi)/2+ BORDERSIZE , (viewy-he)/2 + BORDERSIZE + (i+1)*FONTHEIGHT_BIG-FONT_OFFSET , wi, CENTER, BIG, WHITE);
+ }
+- memcpy(lfb, lbb, var_screeninfo.xres*var_screeninfo.yres);
++ memcpy(lfb, lbb, fix_screeninfo.line_length*var_screeninfo.yres);
+ drawsel = 0;
+ }
+ }while(1);
+@@ -2439,7 +2401,7 @@
+ colortool[3] = (pass == NO ? ACTION_INSTEXT : ACTION_NOACTION);
+ RenderMenuLine(-1, EDIT);
+
+- memcpy(lfb, lbb, var_screeninfo.xres*var_screeninfo.yres);
++ memcpy(lfb, lbb, fix_screeninfo.line_length*var_screeninfo.yres);
+
+ do{
+ while (GetRCCode(RC_EDIT) == 0);
+@@ -2755,7 +2717,7 @@
+ colortool[3] = ACTION_NOACTION;
+ }
+ RenderMenuLine(-1, EDIT);
+- memcpy(lfb, lbb, var_screeninfo.xres*var_screeninfo.yres);
++ memcpy(lfb, lbb, fix_screeninfo.line_length*var_screeninfo.yres);
+ }while(1);
+
+ rccode = -1;
+@@ -3808,7 +3770,7 @@
+ p = p1+1;
+ }
+ pStop = p;
+- memcpy(lfb, lbb, var_screeninfo.xres*var_screeninfo.yres);
++ memcpy(lfb, lbb, fix_screeninfo.line_length*var_screeninfo.yres);
+ while (GetRCCode(RC_NORMAL) == 0);
+ switch (rccode)
+ {
+@@ -4227,7 +4189,7 @@
+ }
+ RenderBox( viewx/6 +3*BORDERSIZE, BORDERSIZE+FONTHEIGHT_BIG , viewx/6 + 4*BORDERSIZE, viewy-MENUSIZE , FILL, WHITE);
+ RenderBox( viewx/3 -2*BORDERSIZE, BORDERSIZE+FONTHEIGHT_BIG , viewx/3 - BORDERSIZE, viewy-MENUSIZE , FILL, WHITE);
+- memcpy(lfb, lbb, var_screeninfo.xres*var_screeninfo.yres);
++ memcpy(lfb, lbb, fix_screeninfo.line_length*var_screeninfo.yres);
+ while (GetRCCode(RC_NORMAL) == 0);
+ switch (rccode)
+ {
+@@ -4470,7 +4432,7 @@
+ continue;
+ *p=0;
+ p++;
+- p1=strchr(p,'\r'); // für Windows-Nutzer: '\r' überlesen
++ p1=strchr(p,'\r'); // für Windows-Nutzer: '\r' überlesen
+ if (p1 != NULL) *p1 = 0x00;
+ if ( !strcmp(line,"host") ) strcpy(finfo[curframe].ftphost, p);
+ else if ( !strcmp(line,"port") ) finfo[curframe].ftpport = atoi(p);
+@@ -4733,7 +4695,7 @@
+
+ if (row > framerows - 2)
+ {
+- memcpy(lfb, lbb, var_screeninfo.xres*var_screeninfo.yres);
++ memcpy(lfb, lbb, fix_screeninfo.line_length*var_screeninfo.yres);
+ while (1)
+ {
+ GetRCCode(RC_NORMAL);
+@@ -4754,7 +4716,7 @@
+ }
+ if (row>0)
+ {
+- memcpy(lfb, lbb, var_screeninfo.xres*var_screeninfo.yres);
++ memcpy(lfb, lbb, fix_screeninfo.line_length*var_screeninfo.yres);
+ while (1)
+ {
+ GetRCCode(RC_NORMAL);
+@@ -4812,7 +4774,7 @@
+
+ if (filesize_in_byte == BTN_NO && !forcebytes)
+ {
+- if (size >= (unsigned long long)1024*1024*1024) // we use "real" GigaBytes ;)
++ if (size >= (unsigned long long )1024*1024*1024) // we use "real" GigaBytes ;)
+ {
+ sprintf(sizeString,"%.2f GB",((double)size)/(double)(1024*1024*1024));
+ return;
+@@ -4827,7 +4789,7 @@
+ {
+ sprintf(sizeString,".%03lu%s",(unsigned long)(tmp % (unsigned long long)1000), sztmp);
+ strcpy(sztmp,sizeString);
+- tmp /= (unsigned long long)1000;
++ tmp /= (unsigned long long )1000;
+ }
+ sprintf(sizeString,"%lu%s",(unsigned long)tmp,sztmp);
+
+@@ -4852,10 +4814,10 @@
+ finfo[LEFTFRAME].sort = SORT_UP;
+ finfo[RIGHTFRAME].sort = SORT_UP;
+
+- fp = fopen( CONFIGDIR "/tuxcom.conf", "r" );
++ fp = fopen( "/etc/tuxbox/tuxcom.conf", "r" );
+ if ( !fp )
+ {
+- printf("tuxcom: could not open " CONFIGDIR "/tuxcom.conf !!!\n");
++ printf("tuxcom: could not open /etc/tuxbox/tuxcom.conf !!!\n");
+ }
+ else
+ {
+@@ -4979,10 +4941,10 @@
+ FILE *fp;
+
+
+- fp = fopen( CONFIGDIR "/tuxcom.conf", "w" );
++ fp = fopen( "/etc/tuxbox/tuxcom.conf", "w" );
+ if ( !fp )
+ {
+- printf("tuxcom: could not open " CONFIGDIR "/tuxcom.conf !!!\n");
++ printf("tuxcom: could not open /etc/tuxbox/tuxcom.conf !!!\n");
+ }
+ else
+ {
+diff -Naur tuxcom.ori/tuxcom.h tuxcom/tuxcom.h
+--- tuxcom.ori/tuxcom.h 2009-01-06 00:12:19.000000000 +0100
++++ tuxcom/tuxcom.h 2009-01-05 18:31:06.000000000 +0100
+@@ -22,7 +22,7 @@
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA
+ */
+
+-#include <config.h>
++//#include <config.h>
+ #include <errno.h>
+ #include <locale.h>
+ #include <fcntl.h>
+@@ -37,10 +37,10 @@
+ #include <sys/mman.h>
+ #include <sys/dir.h>
+ #include <sys/stat.h>
+-#include <plugin.h>
++//#include <plugin.h>
+
+-#include <dbox/avs_core.h>
+-#include <dbox/saa7126_core.h>
++//#include <dbox/avs_core.h>
++//#include <dbox/saa7126_core.h>
+
+ #include <netinet/in.h>
+ #include <netdb.h>
+@@ -53,16 +53,14 @@
+ #include FT_CACHE_SMALL_BITMAPS_H
+
+
+-#ifndef HAVE_DREAMBOX_HARDWARE
+ #include <linux/input.h>
+-#endif
+
+-#define AVS "/dev/dbox/avs0"
+-#define SAA "/dev/dbox/saa0"
++//#define AVS "/dev/dbox/avs0"
++//#define SAA "/dev/dbox/saa0"
+
+ #define MENUROWS 10
+ #define MENUITEMS 10
+-#define MENUSIZE 59
++#define MENUSIZE 63
+ #define MINBOX 380
+ #define BUTTONWIDTH 114
+ #define BUTTONHEIGHT 30
+@@ -72,72 +70,15 @@
+ #define RIGHTFRAME 1
+
+ #define DEFAULT_PATH "/"
+-#define charset " abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789#!$%&?*()@\\/=<>+-_,.;:"
++#define charset " aäbcdefghijklmnoöpqrstuüvwxyzAÄBCDEFGHIJKLMNOÖPQRSTUÜVWXYZ0123456789#!$%&?*()@\\/=<>+-_,.;:¤^°][}{'`µ|"
+
++#define _FILE_OFFSET_BITS 64
+ #define FILEBUFFER_SIZE (100 * 1024) // Edit files up to 100k
+ #define FTPBUFFER_SIZE (200 * 1024) // FTP Download Buffer size
+
+-#define MSG_VERSION "Tuxbox Commander Version 1.16"
++#define MSG_VERSION "Tuxbox Commander E2 Ver. 1.16\n"
+ #define MSG_COPYRIGHT "© dbluelle 2004-2007"
+
+-#ifdef HAVE_DREAMBOX_HARDWARE
+-
+-//rc codes
+-#define KEY_0 0x5C00
+-#define KEY_1 0x5C01
+-#define KEY_2 0x5C02
+-#define KEY_3 0x5C03
+-#define KEY_4 0x5C04
+-#define KEY_5 0x5C05
+-#define KEY_6 0x5C06
+-#define KEY_7 0x5C07
+-#define KEY_8 0x5C08
+-#define KEY_9 0x5C09
+-#define KEY_POWER 0x5C0C
+-#define KEY_UP 0x5C0E
+-#define KEY_DOWN 0x5C0F
+-#define KEY_VOLUMEUP 0x5C16
+-#define KEY_VOLUMEDOWN 0x5C17
+-#define KEY_HOME 0x5C20
+-#define KEY_SETUP 0x5C27
+-#define KEY_MUTE 0x5C28
+-#define KEY_RED 0x5C2D
+-#define KEY_RIGHT 0x5C2E
+-#define KEY_LEFT 0x5C2F
+-#define KEY_OK 0x5C30
+-#define KEY_BLUE 0x5C3B
+-#define KEY_YELLOW 0x5C52
+-#define KEY_GREEN 0x5C55
+-#define KEY_HELP 0x5C82
+-
+-#define RC_0 0x00
+-#define RC_1 0x01
+-#define RC_2 0x02
+-#define RC_3 0x03
+-#define RC_4 0x04
+-#define RC_5 0x05
+-#define RC_6 0x06
+-#define RC_7 0x07
+-#define RC_8 0x08
+-#define RC_9 0x09
+-#define RC_RIGHT 0x0A
+-#define RC_LEFT 0x0B
+-#define RC_UP 0x0C
+-#define RC_DOWN 0x0D
+-#define RC_OK 0x0E
+-#define RC_MUTE 0x0F
+-#define RC_STANDBY 0x10
+-#define RC_GREEN 0x11
+-#define RC_YELLOW 0x12
+-#define RC_RED 0x13
+-#define RC_BLUE 0x14
+-#define RC_PLUS 0x15
+-#define RC_MINUS 0x16
+-#define RC_HELP 0x17
+-#define RC_DBOX 0x18
+-#define RC_HOME 0x1F
+-
+-#else
+ // rc codes
+ #define RC_0 '0'
+ #define RC_1 '1'
+@@ -225,7 +166,7 @@
+ int rcaltgrtable[] =
+ {
+ 0x00, RC_ESC, 0x00, '²', '³', 0x00, 0x00, 0x00, '{', '[', ']', '}', '\\', 0x00, 0x00, 0x00,
+- '@', 0x00, '\80', 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, '~', RC_RET1, RC_STRG, 0x00, 0x00,
++ '@', 0x00, '¤', 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, '~', RC_RET1, RC_STRG, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, RC_LSHIFT, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 'µ', 0x00, 0x00, 0x00, RC_RSHIFT, 0x00, RC_ALT, 0x20, RC_CAPSLOCK,RC_F1,RC_F2,RC_F3,RC_F4,RC_F5,
+ RC_F6,RC_F7,RC_F8,RC_F9,RC_F10,RC_NUM,RC_ROLLEN,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+@@ -247,13 +188,13 @@
+ #define KBC_PAGEDOWN 0x0C
+ #define KBC_RETURN 0x0D
+
+-#endif
+ #define KBLCKFILE "/tmp/keyboard.lck" //! file to lock keyboard-conversion
+
+
+ //freetype stuff
+
+-#define FONT FONTDIR "/pakenham.ttf"
++//#define FONT "/usr/share/fonts/md_khmurabi_10.ttf"
++#define FONT "/usr/share/fonts/pakenham.ttf"
+ // if font is not in usual place, we look here:
+ #define FONT2 "/var/tuxbox/config/enigma/fonts/pakenham.ttf"
+
+@@ -266,11 +207,7 @@
+ FTC_Manager manager;
+ FTC_SBitCache cache;
+ FTC_SBit sbit;
+-#if FREETYPE_MAJOR == 2 && FREETYPE_MINOR == 0
+ FTC_Image_Desc desc;
+-#else
+-FTC_ImageTypeRec desc;
+-#endif
+ FT_Face face;
+ FT_UInt prev_glyphindex;
+ FT_Bool use_kerning;
+@@ -297,6 +234,14 @@
+ struct fb_fix_screeninfo fix_screeninfo;
+ struct fb_var_screeninfo var_screeninfo;
+
++unsigned char bgra[][4] = {
++"\x00\x00\x00\x00", "\xFF\xFF\xFF\xFF", "\x00\x00\x00\xFF", "\x80\x00\x00\xFF",
++"\xFF\x80\x00\xFF", "\x00\xC0\xFF\xFF", "\x00\xD0\x00\xFF", "\x00\xE8\xE8\xFF",
++"\x00\x00\xFF\xFF", "\xB0\xB0\xB0\xFF", "\x00\xFF\x00\xFF", "\x50\x50\x50\xFF",
++"\x80\x00\x00\xC0", "\x50\x50\x50\xC0", "\xFF\x40\x00\xFf" };
++
++
++
+ unsigned short rd[] = {0xFF<<8, 0x00<<8, 0x00<<8, 0x00<<8, 0xFF<<8, 0x00<<8, 0xE8<<8, 0xFF<<8, 0xb0<<8, 0x00<<8, 0x50<<8, 0x00<<8, 0x50<<8, 0x00<<8};
+ unsigned short gn[] = {0xFF<<8, 0x00<<8, 0x00<<8, 0x80<<8, 0xC0<<8, 0xd0<<8, 0xE8<<8, 0x00<<8, 0xb0<<8, 0xff<<8, 0x50<<8, 0x00<<8, 0x50<<8, 0x40<<8};
+ unsigned short bl[] = {0xFF<<8, 0x00<<8, 0x80<<8, 0xFF<<8, 0x00<<8, 0x00<<8, 0x00<<8, 0x00<<8, 0xb0<<8, 0x00<<8, 0x50<<8, 0x80<<8, 0x50<<8, 0xff<<8};
+@@ -307,9 +252,7 @@
+ int trans_map [] = {BLUE1,BLUE_TRANSP,TRANSP};
+ int trans_map_mark[] = {GRAY2,GRAY_TRANSP,GRAY_TRANSP};
+
+-#ifndef HAVE_DREAMBOX_HARDWARE
+ struct input_event ev;
+-#endif
+
+ unsigned short rccode;
+ char kbcode;
+@@ -317,7 +260,7 @@
+ //some data
+
+ int avs, saa, fnc_old, saa_old, screenmode;
+-int rc, fb, kb;
++int rc[2], fb, kb;
+ int sx, ex, sy, ey;
+ int PosX, PosY, StartX, StartY, FrameWidth, NameWidth, SizeWidth;
+ int curframe, cursort, curvisibility, singleview;
+@@ -339,8 +282,8 @@
+ char szPass[20];
+ long commandsize;
+
+-int fncmodes[] = {AVS_FNCOUT_EXT43, AVS_FNCOUT_EXT169};
+-int saamodes[] = {SAA_WSS_43F, SAA_WSS_169F};
++//int fncmodes[] = {AVS_FNCOUT_EXT43, AVS_FNCOUT_EXT169};
++//int saamodes[] = {SAA_WSS_43F, SAA_WSS_169F};
+
+ FILE *conf;
+ int language, langselect, autosave, filesize_in_byte;
+@@ -466,13 +409,13 @@
+
+ char *numberchars[] = { "0#!$%&?*()@\\",
+ "1/=<>+-_,.;:" ,
+- "abc2",
+- "def3",
++ "aäbc2",
++ "de¤f3",
+ "ghi4",
+ "jkl5",
+- "mno6",
++ "mnoö6",
+ "pqrs7",
+- "tuv8",
++ "tuüv8",
+ "wxyz9" };
+
+ char *info[] = { "(select 'hidden' to copy in background)" ,"('versteckt' wählen zum Kopieren im Hintergrund)" ,"(Seleziona 'nascosto' per copiare in background)" ,"(välj 'gömd' för att kopiera i bakgrunden)" ,"(Seleccionar 'Escondido' para copiar em background)" ,
+@@ -599,7 +542,7 @@
+ "toggle 16:9 mode" , "16:9-Modus setzen" ,"Passa a modalità 16:9" ,"växla 16:9 läge" ,"Mudar para 16:9" ,
+ "set password" , "Passwort setzen" ,"Imposta password" ,"sätt lösenord" ,"Por password" ,
+ "show filesizes in byte <%s>" , "Dateigrössen in Byte anzeigen <%s>" ,"show filesizes in byte <%s>" ,"show filesizes in byte <%s>" ,"show filesizes in byte <%s>" ,
+- "language/Sprache/Lingua/Språk: <%s>", "Sprache/language/Lingua/Språk: <%s>" ,"Lingua/language/Sprache/Språk: <%s>" ,"Lingua/language/Sprache/Språk: <%s>" ,"Lingua/language/Sprache/Språk: <%s>",
++ "Language/Sprache/Lingua/Språk: <%s>", "Sprache/Language/Lingua/Språk: <%s>" ,"Lingua/Language/Sprache/Språk: <%s>" ,"Lingua/Language/Sprache/Språk: <%s>" ,"Lingua/Language/Sprache/Språk: <%s>",
+ "save settings on exit: <%s>" , "Einstellungen beim Beenden speichern: <%s>","Salvare le impostazioni in uscita: <%s>" ,"spara inställningar vid avslut: <%s>","Gravar e sair: <%s>" ,
+ "save settings now" , "Einstellungen jetzt speichern" ,"Salvare le impostazioni adesso" ,"spara inställningar nu" ,"Gravar configuracoes agora" };
+