From 108b1b0acb40af5b055cd34f923594ea5a1d5029 Mon Sep 17 00:00:00 2001 From: hschang Date: Fri, 25 Jan 2013 13:53:18 +0900 Subject: [PATCH] remove tuxbox-tuxcom-32bpp --- .../recipes-vuplus/tuxcom/tuxbox-tuxcom-32bpp.bb | 32 - .../tuxcom/tuxbox-tuxcom-32bpp/32bpp.diff | 1136 -------------------- .../tuxcom/tuxbox-tuxcom-32bpp/add_e2_plugin.diff | 48 - .../tuxcom/tuxbox-tuxcom-32bpp/add_font.diff | Bin 67589 -> 0 bytes .../tuxcom/tuxbox-tuxcom-32bpp/fix_smstext.diff | 48 - .../tuxcom/tuxbox-tuxcom-32bpp/largefile.diff | 11 - .../tuxcom/tuxbox-tuxcom-32bpp/makefiles.diff | 505 --------- .../support_newer_freetype.diff | 78 -- 8 files changed, 1858 deletions(-) delete mode 100644 meta-openvuplus/recipes-vuplus/tuxcom/tuxbox-tuxcom-32bpp.bb delete mode 100644 meta-openvuplus/recipes-vuplus/tuxcom/tuxbox-tuxcom-32bpp/32bpp.diff delete mode 100644 meta-openvuplus/recipes-vuplus/tuxcom/tuxbox-tuxcom-32bpp/add_e2_plugin.diff delete mode 100644 meta-openvuplus/recipes-vuplus/tuxcom/tuxbox-tuxcom-32bpp/add_font.diff delete mode 100644 meta-openvuplus/recipes-vuplus/tuxcom/tuxbox-tuxcom-32bpp/fix_smstext.diff delete mode 100644 meta-openvuplus/recipes-vuplus/tuxcom/tuxbox-tuxcom-32bpp/largefile.diff delete mode 100644 meta-openvuplus/recipes-vuplus/tuxcom/tuxbox-tuxcom-32bpp/makefiles.diff delete mode 100644 meta-openvuplus/recipes-vuplus/tuxcom/tuxbox-tuxcom-32bpp/support_newer_freetype.diff diff --git a/meta-openvuplus/recipes-vuplus/tuxcom/tuxbox-tuxcom-32bpp.bb b/meta-openvuplus/recipes-vuplus/tuxcom/tuxbox-tuxcom-32bpp.bb deleted file mode 100644 index cd08ee9..0000000 --- a/meta-openvuplus/recipes-vuplus/tuxcom/tuxbox-tuxcom-32bpp.bb +++ /dev/null @@ -1,32 +0,0 @@ -SUMMARY = "TuxCom for 800/7025/8000/32bit framebuffer HD Autosize" -LICENSE = "Proprietary" -LIC_FILES_CHKSUM = "file://tuxcom.c;endline=23;md5=33c69eb2b4a436ea9e00355b66c21dd9" -DEPENDS = "freetype" -RDEPENDS_${PN} = "enigma2" -SRCDATE = "20070410" -PV = "1.16+cvs${SRCDATE}" -PR = "r0" - -SRC_URI = "cvs://anoncvs@cvs.tuxbox.org/cvs/tuxbox;module=apps/tuxbox/plugins/tuxcom;method=ext \ - file://makefiles.diff \ - file://add_font.diff \ - file://32bpp.diff \ - file://add_e2_plugin.diff \ - file://largefile.diff \ - file://support_newer_freetype.diff \ - file://fix_smstext.diff \ -" - -S = "${WORKDIR}/tuxcom" - -inherit autotools - -EXTRA_OECONF = "--with-target=native" - -do_configure_prepend() { - touch ${S}/python/__init__.py -} - -FILES_${PN} = "${bindir}/tuxcom ${libdir}/enigma2 /etc/tuxcom ${datadir}/fonts/pakenham.ttf" - -CPPFLAGS += "-DHAVE_DREAMBOX_HARDWARE -DDREAMBOX" diff --git a/meta-openvuplus/recipes-vuplus/tuxcom/tuxbox-tuxcom-32bpp/32bpp.diff b/meta-openvuplus/recipes-vuplus/tuxcom/tuxbox-tuxcom-32bpp/32bpp.diff deleted file mode 100644 index 474df99..0000000 --- a/meta-openvuplus/recipes-vuplus/tuxcom/tuxbox-tuxcom-32bpp/32bpp.diff +++ /dev/null @@ -1,1136 +0,0 @@ -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 \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<left + kerning.x + x + var_screeninfo.xres*(StartY + sy - sbit->top + y)) = color; -+ if((sbit->buffer[row * sbit->pitch + pitch]) & 1<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 "); -+ 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 "); -+ 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 \n"); -+ printf("TuxCom \n"); - return; - } - -- if(ioctl(fb, FBIOGET_VSCREENINFO, &var_screeninfo) == -1) -+ if (var_screeninfo.xres != 720) - { -- printf("TuxCom \n"); -+ printf("TuxCom \n"); - return; - } - -+ - if(ioctl(fb, FBIOPUTCMAP, &colormap) == -1) - { - printf("TuxCom \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 \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 "); - return; -@@ -678,7 +657,7 @@ - printf("TuxCom "); - 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 -+//#include - #include - #include - #include -@@ -37,10 +37,10 @@ - #include - #include - #include --#include -+//#include - --#include --#include -+//#include -+//#include - - #include - #include -@@ -53,16 +53,14 @@ - #include FT_CACHE_SMALL_BITMAPS_H - - --#ifndef HAVE_DREAMBOX_HARDWARE - #include --#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, '€', 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" }; - diff --git a/meta-openvuplus/recipes-vuplus/tuxcom/tuxbox-tuxcom-32bpp/add_e2_plugin.diff b/meta-openvuplus/recipes-vuplus/tuxcom/tuxbox-tuxcom-32bpp/add_e2_plugin.diff deleted file mode 100644 index d01e7a8..0000000 --- a/meta-openvuplus/recipes-vuplus/tuxcom/tuxbox-tuxcom-32bpp/add_e2_plugin.diff +++ /dev/null @@ -1,48 +0,0 @@ -diff -Naur tuxcom_cvs/python/Makefile.am tuxcom/python/Makefile.am ---- tuxcom_cvs/python/Makefile.am 1970-01-01 01:00:00.000000000 +0100 -+++ tuxcom/python/Makefile.am 2008-11-03 13:56:54.425916639 +0100 -@@ -0,0 +1,5 @@ -+installdir = $(LIBDIR)/enigma2/python/Plugins/Extensions/Tuxcom -+ -+install_DATA = \ -+ plugin.py \ -+ __init__.py -diff -Naur tuxcom_cvs/python/plugin.py tuxcom/python/plugin.py ---- tuxcom_cvs/python/plugin.py 1970-01-01 01:00:00.000000000 +0100 -+++ tuxcom/python/plugin.py 2008-11-03 14:22:15.705918505 +0100 -@@ -0,0 +1,35 @@ -+from enigma import * -+from Screens.Screen import Screen -+from Plugins.Plugin import PluginDescriptor -+ -+class TuxComStarter(Screen): -+ skin = """ -+ -+ """ -+ -+ def __init__(self, session, args = None): -+ self.skin = TuxComStarter.skin -+ Screen.__init__(self, session) -+ self.container=eConsoleAppContainer() -+ self.container.appClosed.append(self.finished) -+ self.runapp() -+ -+ def runapp(self): -+ eDBoxLCD.getInstance().lock() -+ eRCInput.getInstance().lock() -+ fbClass.getInstance().lock() -+ if self.container.execute("/usr/bin/tuxcom"): -+ self.finished(-1) -+ -+ def finished(self,retval): -+ fbClass.getInstance().unlock() -+ eRCInput.getInstance().unlock() -+ eDBoxLCD.getInstance().unlock() -+ self.close() -+ -+def main(session, **kwargs): -+ session.open(TuxComStarter) -+ -+def Plugins(**kwargs): -+ return PluginDescriptor(name="TuxCom", description="TuxBox Commander", where = PluginDescriptor.WHERE_PLUGINMENU, fnc=main) -+ diff --git a/meta-openvuplus/recipes-vuplus/tuxcom/tuxbox-tuxcom-32bpp/add_font.diff b/meta-openvuplus/recipes-vuplus/tuxcom/tuxbox-tuxcom-32bpp/add_font.diff deleted file mode 100644 index b04e441dd0ced5ef64d5bae47a864d8455ba1fbd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 67589 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 -+version DVB_API_VERSION -+ ]])]) -+ DVB_API_VERSION=`(eval "$ac_cpp conftest.$ac_ext") 2>&AS_MESSAGE_LOG_FD | $EGREP "^version" | sed "s,version\ ,,"` -+ rm -f conftest* -+ -+ AC_MSG_NOTICE([found dvb version $DVB_API_VERSION]) -+]) -+fi -+ -+if test "$DVB_API_VERSION"; then -+ AC_DEFINE(HAVE_DVB,1,[Define to 1 if you have the dvb includes]) -+ AC_DEFINE_UNQUOTED(HAVE_DVB_API_VERSION,$DVB_API_VERSION,[Define to the version of the dvb api]) -+else -+ AC_MSG_ERROR([can't find dvb headers]) -+fi -+]) -+ -+AC_DEFUN(_TUXBOX_APPS_LIB_CONFIG,[ -+AC_PATH_PROG($1_CONFIG,$2,no) -+if test "$$1_CONFIG" != "no"; then -+ if test "$TARGET" = "cdk" && check_path "$$1_CONFIG"; then -+ AC_MSG_$3([could not find a suitable version of $2]); -+ else -+ $1_CFLAGS=$($$1_CONFIG --cflags) -+ $1_LIBS=$($$1_CONFIG --libs) -+ fi -+fi -+ -+AC_SUBST($1_CFLAGS) -+AC_SUBST($1_LIBS) -+]) -+ -+AC_DEFUN(TUXBOX_APPS_LIB_CONFIG,[ -+_TUXBOX_APPS_LIB_CONFIG($1,$2,ERROR) -+if test "$$1_CONFIG" = "no"; then -+ AC_MSG_ERROR([could not find $2]); -+fi -+]) -+ -+AC_DEFUN(TUXBOX_APPS_LIB_CONFIG_CHECK,[ -+_TUXBOX_APPS_LIB_CONFIG($1,$2,WARN) -+]) -+ -+AC_DEFUN(TUXBOX_APPS_PKGCONFIG,[ -+AC_PATH_PROG(PKG_CONFIG, pkg-config,no) -+if test "$PKG_CONFIG" = "no" ; then -+ AC_MSG_ERROR([could not find pkg-config]); -+fi -+]) -+ -+AC_DEFUN(_TUXBOX_APPS_LIB_PKGCONFIG,[ -+PKG_CHECK_MODULES($1,$2) -+AC_SUBST($1_CFLAGS) -+AC_SUBST($1_LIBS) -+]) -+ -+AC_DEFUN(TUXBOX_APPS_LIB_PKGCONFIG,[ -+_TUXBOX_APPS_LIB_PKGCONFIG($1,$2) -+if test -z "$$1_CFLAGS" ; then -+ AC_MSG_ERROR([could not find package $2]); -+fi -+]) -+ -+AC_DEFUN(TUXBOX_APPS_LIB_PKGCONFIG_CHECK,[ -+_TUXBOX_APPS_LIB_PKGCONFIG($1,$2) -+]) -+ -+AC_DEFUN(_TUXBOX_APPS_LIB_SYMBOL,[ -+AC_CHECK_LIB($2,$3,HAVE_$1="yes",HAVE_$1="no") -+if test "$HAVE_$1" = "yes"; then -+ $1_LIBS=-l$2 -+fi -+ -+AC_SUBST($1_LIBS) -+]) -+ -+AC_DEFUN(TUXBOX_APPS_LIB_SYMBOL,[ -+_TUXBOX_APPS_LIB_SYMBOL($1,$2,$3,ERROR) -+if test "$HAVE_$1" = "no"; then -+ AC_MSG_ERROR([could not find $2]); -+fi -+]) -+ -+AC_DEFUN(TUXBOX_APPS_LIB_CONFIG_SYMBOL,[ -+_TUXBOX_APPS_LIB_SYMBOL($1,$2,$3,WARN) -+]) -+ -+AC_DEFUN(TUXBOX_APPS_GETTEXT,[ -+AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, -+ [$ac_dir/$ac_word --statistics /dev/null >/dev/null 2>&1 && -+ (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], -+ :) -+AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) -+ -+AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, -+ [$ac_dir/$ac_word --omit-header --copyright-holder= /dev/null >/dev/null 2>&1 && -+ (if $ac_dir/$ac_word --omit-header --copyright-holder= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], -+ :) -+ -+AM_PATH_PROG_WITH_TEST(MSGMERGE, msgmerge,[$ac_dir/$ac_word --update -q /dev/null /dev/null >/dev/null 2>&1],:) -+ -+AC_MSG_CHECKING([whether NLS is requested]) -+AC_ARG_ENABLE(nls, -+ [ --disable-nls do not use Native Language Support], -+ USE_NLS=$enableval, USE_NLS=yes) -+AC_MSG_RESULT($USE_NLS) -+AC_SUBST(USE_NLS) -+ -+if test "$USE_NLS" = "yes"; then -+ AC_CACHE_CHECK([for GNU gettext in libc], gt_cv_func_gnugettext_libc,[ -+ AC_TRY_LINK([ -+ #include -+ #ifndef __GNU_GETTEXT_SUPPORTED_REVISION -+ #define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) -+ #endif -+ extern int _nl_msg_cat_cntr; -+ extern int *_nl_domain_bindings; -+ ],[ -+ bindtextdomain ("", ""); -+ return (int) gettext ("") + _nl_msg_cat_cntr + *_nl_domain_bindings; -+ ], gt_cv_func_gnugettext_libc=yes, gt_cv_func_gnugettext_libc=no -+ )] -+ ) -+ -+ if test "$gt_cv_func_gnugettext_libc" = "yes"; then -+ AC_DEFINE(ENABLE_NLS, 1, [Define to 1 if translation of program messages to the user's native language is requested.]) -+ gt_use_preinstalled_gnugettext=yes -+ else -+ USE_NLS=no -+ fi -+fi -+ -+if test -f "$srcdir/po/LINGUAS"; then -+ ALL_LINGUAS=$(sed -e "/^#/d" "$srcdir/po/LINGUAS") -+fi -+ -+POFILES= -+GMOFILES= -+UPDATEPOFILES= -+DUMMYPOFILES= -+for lang in $ALL_LINGUAS; do -+ POFILES="$POFILES $srcdirpre$lang.po" -+ GMOFILES="$GMOFILES $srcdirpre$lang.gmo" -+ UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" -+ DUMMYPOFILES="$DUMMYPOFILES $lang.nop" -+done -+INST_LINGUAS= -+if test -n "$ALL_LINGUAS"; then -+ for presentlang in $ALL_LINGUAS; do -+ useit=no -+ if test -n "$LINGUAS"; then -+ desiredlanguages="$LINGUAS" -+ else -+ desiredlanguages="$ALL_LINGUAS" -+ fi -+ for desiredlang in $desiredlanguages; do -+ case "$desiredlang" in -+ "$presentlang"*) useit=yes;; -+ esac -+ done -+ if test $useit = yes; then -+ INST_LINGUAS="$INST_LINGUAS $presentlang" -+ fi -+ done -+fi -+CATALOGS= -+if test -n "$INST_LINGUAS"; then -+ for lang in $INST_LINGUAS; do -+ CATALOGS="$CATALOGS $lang.gmo" -+ done -+fi -+AC_SUBST(POFILES) -+AC_SUBST(GMOFILES) -+AC_SUBST(UPDATEPOFILES) -+AC_SUBST(DUMMYPOFILES) -+AC_SUBST(CATALOGS) -+]) -+ -+dnl backward compatiblity -+AC_DEFUN([AC_GNU_SOURCE], -+[AH_VERBATIM([_GNU_SOURCE], -+[/* Enable GNU extensions on systems that have them. */ -+#ifndef _GNU_SOURCE -+# undef _GNU_SOURCE -+#endif])dnl -+AC_BEFORE([$0], [AC_COMPILE_IFELSE])dnl -+AC_BEFORE([$0], [AC_RUN_IFELSE])dnl -+AC_DEFINE([_GNU_SOURCE]) -+]) -+ -+AC_DEFUN([AC_PROG_EGREP], -+[AC_CACHE_CHECK([for egrep], [ac_cv_prog_egrep], -+ [if echo a | (grep -E '(a|b)') >/dev/null 2>&1 -+ then ac_cv_prog_egrep='grep -E' -+ else ac_cv_prog_egrep='egrep' -+ fi]) -+ EGREP=$ac_cv_prog_egrep -+ AC_SUBST([EGREP]) -+]) -+ -+AC_DEFUN([AC_PYTHON_DEVEL],[ -+ # -+ # should allow for checking of python version here... -+ # -+ AC_REQUIRE([AM_PATH_PYTHON]) -+ -+ # Check for Python include path -+ AC_MSG_CHECKING([for Python include path]) -+ python_path=`echo $PYTHON | sed "s,/bin.*$,,"` -+ for i in "$python_path/include/python$PYTHON_VERSION/" "$python_path/include/python/" "$python_path/" ; do -+ python_path=`find $i -type f -name Python.h -print | sed "1q"` -+ if test -n "$python_path" ; then -+ break -+ fi -+ done -+ python_path=`echo $python_path | sed "s,/Python.h$,,"` -+ AC_MSG_RESULT([$python_path]) -+ if test -z "$python_path" ; then -+ AC_MSG_ERROR([cannot find Python include path]) -+ fi -+ AC_SUBST([PYTHON_CPPFLAGS],[-I$python_path]) -+ -+ # Check for Python library path -+ AC_MSG_CHECKING([for Python library path]) -+ python_path=`echo $PYTHON | sed "s,/bin.*$,,"` -+ for i in "$python_path/lib/python$PYTHON_VERSION/config/" "$python_path/lib/python$PYTHON_VERSION/" "$python_path/lib/python/config/" "$python_path/lib/python/" "$python_path/" ; do -+ python_path=`find $i -type f -name libpython$PYTHON_VERSION.* -print | sed "1q"` -+ if test -n "$python_path" ; then -+ break -+ fi -+ done -+ python_path=`echo $python_path | sed "s,/libpython.*$,,"` -+ AC_MSG_RESULT([$python_path]) -+ if test -z "$python_path" ; then -+ AC_MSG_ERROR([cannot find Python library path]) -+ fi -+ AC_SUBST([PYTHON_LDFLAGS],["-L$python_path -lpython$PYTHON_VERSION"]) -+ # -+ python_site=`echo $python_path | sed "s/config/site-packages/"` -+ AC_SUBST([PYTHON_SITE_PKG],[$python_site]) -+]) -diff -Naur tuxcom.ori/configure.ac tuxcom/configure.ac ---- tuxcom.ori/configure.ac 1970-01-01 01:00:00.000000000 +0100 -+++ tuxcom/configure.ac 2008-12-28 18:33:12.000000000 +0100 -@@ -0,0 +1,19 @@ -+# -*- Autoconf -*- -+# Process this file with autoconf to produce a configure script. -+ -+AC_INIT(tuxbox-tuxcom-32bpp,1.13) -+AM_INIT_AUTOMAKE(tuxbox-tuxcom-32bpp,1.13) -+ -+TUXBOX_APPS -+TUXBOX_APPS_DIRECTORY -+TUXBOX_APPS_DVB -+ -+# Checks for programs. -+AC_PROG_CXX -+AC_PROG_CC -+ -+TUXBOX_APPS_LIB_CONFIG(FREETYPE,freetype-config) -+ -+AC_OUTPUT(Makefile) -+AC_OUTPUT(font/Makefile) -+AC_OUTPUT(python/Makefile) -diff -Naur tuxcom_cvs/font/Makefile.am tuxcom/font/Makefile.am ---- tuxcom_cvs/font/Makefile.am 1970-01-01 01:00:00.000000000 +0100 -+++ tuxcom/font/Makefile.am 2008-11-03 13:56:11.917916738 +0100 -@@ -0,0 +1,4 @@ -+installdir = $(FONTDIR) -+ -+install_DATA = \ -+ pakenham.ttf diff --git a/meta-openvuplus/recipes-vuplus/tuxcom/tuxbox-tuxcom-32bpp/support_newer_freetype.diff b/meta-openvuplus/recipes-vuplus/tuxcom/tuxbox-tuxcom-32bpp/support_newer_freetype.diff deleted file mode 100644 index 5ed9eca..0000000 --- a/meta-openvuplus/recipes-vuplus/tuxcom/tuxbox-tuxcom-32bpp/support_newer_freetype.diff +++ /dev/null @@ -1,78 +0,0 @@ -diff -Naur tuxcom/tuxcom.c tuxcom.freetype/tuxcom.c ---- tuxcom/tuxcom.c 2009-01-06 01:21:26.000000000 +0100 -+++ tuxcom.freetype/tuxcom.c 2009-01-07 13:21:16.000000000 +0100 -@@ -322,9 +322,15 @@ - - switch (size) - { -+#if ((defined(FREETYPE_MAJOR)) && (((FREETYPE_MAJOR == 2) && (((FREETYPE_MINOR == 1) && (FREETYPE_PATCH >= 9)) || (FREETYPE_MINOR > 1))) || (FREETYPE_MAJOR > 2))) -+ case VERY_SMALL: desc.width = desc.height = FONTHEIGHT_VERY_SMALL; break; -+ case SMALL : desc.width = desc.height = FONTHEIGHT_SMALL ; break; -+ case BIG : desc.width = desc.height = FONTHEIGHT_BIG ; break; -+#else - case VERY_SMALL: desc.font.pix_width = desc.font.pix_height = FONTHEIGHT_VERY_SMALL; break; - case SMALL : desc.font.pix_width = desc.font.pix_height = FONTHEIGHT_SMALL ; break; - case BIG : desc.font.pix_width = desc.font.pix_height = FONTHEIGHT_BIG ; break; -+#endif - } - - //reset kerning -@@ -354,9 +360,15 @@ - - switch (size) - { -+#if ((defined(FREETYPE_MAJOR)) && (((FREETYPE_MAJOR == 2) && (((FREETYPE_MINOR == 1) && (FREETYPE_PATCH >= 9)) || (FREETYPE_MINOR > 1))) || (FREETYPE_MAJOR > 2))) -+ case VERY_SMALL: desc.width = desc.height = FONTHEIGHT_VERY_SMALL; break; -+ case SMALL : desc.width = desc.height = FONTHEIGHT_SMALL ; break; -+ case BIG : desc.width = desc.height = FONTHEIGHT_BIG ; break; -+#else - case VERY_SMALL: desc.font.pix_width = desc.font.pix_height = FONTHEIGHT_VERY_SMALL; break; - case SMALL : desc.font.pix_width = desc.font.pix_height = FONTHEIGHT_SMALL ; break; - case BIG : desc.font.pix_width = desc.font.pix_height = FONTHEIGHT_BIG ; break; -+#endif - } - - //set alignment -@@ -617,17 +629,26 @@ - return; - } - else -+#if ((defined(FREETYPE_MAJOR)) && (((FREETYPE_MAJOR == 2) && (((FREETYPE_MINOR == 1) && (FREETYPE_PATCH >= 9)) || (FREETYPE_MINOR > 1))) || (FREETYPE_MAJOR > 2))) -+ desc.face_id = FONT2; -+#else - desc.font.face_id = FONT2; -+#endif - } - else -+#if ((defined(FREETYPE_MAJOR)) && (((FREETYPE_MAJOR == 2) && (((FREETYPE_MINOR == 1) && (FREETYPE_PATCH >= 9)) || (FREETYPE_MINOR > 1))) || (FREETYPE_MAJOR > 2))) -+ desc.face_id = FONT; -+#else - desc.font.face_id = FONT; -- -+#endif - - use_kerning = FT_HAS_KERNING(face); - -- -+#if ((defined(FREETYPE_MAJOR)) && (((FREETYPE_MAJOR == 2) && (((FREETYPE_MINOR == 1) && (FREETYPE_PATCH >= 9)) || (FREETYPE_MINOR > 1))) || (FREETYPE_MAJOR > 2))) -+ desc.flags = FT_LOAD_MONOCHROME; -+#else - desc.image_type = ftc_image_mono; -- -+#endif - - - //init backbuffer -diff -Naur tuxcom/tuxcom.h tuxcom.freetype/tuxcom.h ---- tuxcom/tuxcom.h 2009-01-06 01:21:26.000000000 +0100 -+++ tuxcom.freetype/tuxcom.h 2009-01-07 13:21:16.000000000 +0100 -@@ -192,6 +192,9 @@ - - - //freetype stuff -+#if ((defined(FREETYPE_MAJOR)) && (((FREETYPE_MAJOR == 2) && (((FREETYPE_MINOR == 1) && (FREETYPE_PATCH >= 9)) || (FREETYPE_MINOR > 1))) || (FREETYPE_MAJOR > 2))) -+typedef FTC_ImageTypeRec FTC_Image_Desc; -+#endif - - //#define FONT "/usr/share/fonts/md_khmurabi_10.ttf" - #define FONT "/usr/share/fonts/pakenham.ttf" -- 2.7.4