fsGUI.c
上传用户:poi891205
上传日期:2013-07-15
资源大小:9745k
文件大小:22k
源码类别:

DVD

开发平台:

C/C++

  1. #include "global.h"
  2. #include "func.h" 
  3. #include "memmap.h"
  4. #include "util.h" 
  5. #include "graph.h"
  6. #include "framebuf.h"
  7. #include "macro.h"
  8. #include "stc.h"
  9. #include "cfont.h"
  10. #include "vfdfunc.h"
  11. #include "osd.h"
  12. #include "image.h"
  13. #include "iop.h"
  14. #include "memcfg.h"
  15. #include "ircmd.h"
  16. #include "dsp3_if.h"
  17. #include "user_init.h"
  18. #include "nesinit.h"
  19. #include "fs96602.h"
  20. #include "fsNAV.h"
  21. #include "fsGUI.h"
  22. #include "stdlib.h"
  23. #include "fsgui_rgb8.inc"
  24. void FSGUI_DecImg(BYTE *src, BYTE *dest, UINT32 iSrcLen, UINT32 *destLen)
  25. {
  26. unsigned char cHeader;
  27. register unsigned char i;
  28. UINT32 iCurI, iCurO;
  29. BYTE *pSrc, *pDest;
  30. iCurI = iCurO = 0;
  31. pSrc = src;
  32. pDest = dest;
  33. while (iCurI < iSrcLen) {
  34. cHeader = *(pSrc+iCurI++);
  35. if (cHeader & 0x80) {
  36. unsigned char array_to_write[129];
  37. BYTE ch;
  38. unsigned char i;
  39. ch = *(pSrc+iCurI++);
  40. memset(array_to_write, ch, (cHeader & 127)+2);
  41. for (i=0; i<((cHeader & 127)+2); i++) {
  42. *(pDest+iCurO++) = *(array_to_write+i);
  43. }
  44. } else {
  45. for (i=0;i<=cHeader;i++) {
  46. BYTE ch;
  47. ch = *(pSrc+iCurI++);
  48. *(pDest+iCurO++) = ch;
  49. }
  50. }
  51. } // end of while (!end_of_data())
  52. *destLen = iCurO;
  53. }
  54. void FSGUI_FillFrameBuf(int x, int y, int xSize, int ySize, UINT16 color_Y, UINT16 color_CrCb)
  55. {
  56.     int i, j;
  57.     for (j = y; j < y + ySize; j++)
  58.     {
  59.         for (i = x; i < x + xSize; i++)
  60.         {
  61.             *Y_XY(i, j) = (color_Y) & 0xff;
  62.             *C_XY(i, j) = color_CrCb;
  63.         }
  64.     }
  65. }
  66. void FSGUI_ReplaceFrameBuf(int x, int y, int xSize, int ySize, UINT16 replace_Y, UINT16 replace_CrCb, UINT16 color_Y, UINT16 color_CrCb)
  67. {
  68.     int i,j;
  69.     for (j=y; j<y+ySize; j++)
  70.     {
  71.         for (i=x; i<x+xSize; i++)
  72.         {
  73.             UINT8  *py = Y_XY(i,j);
  74.             UINT16 *pc = C_XY(i,j);
  75.             if (py[0]==(replace_Y&0xff) && pc[0]==replace_CrCb)
  76.             {
  77.         py[0] = color_Y;
  78.         pc[0] = color_CrCb;
  79.             }
  80.         }
  81.     }
  82. }
  83. //freyman add 2004-4-19 19:05, to collect the public function in fsGUI1.c and fsGUI_new.c
  84. #include "fsGUI_pub.c"
  85. //Notes: Now most of the functions in fsGUI1. and fsGUI_new.c
  86. //  have been move to fsGUI_pub.c
  87. //       Any question contact me, wanghaoying 2004-05-14 14:00
  88. #ifdef NEW_MP3_GUI  //zhaoyanhua add for new MP3 GUI 3-7-10 14:11
  89. #ifdef MP3_LARGE_GUI //Maoyong add for new large GUI, 2003/12/19 14:47
  90.   #include "fsGUI_new_large.c"
  91. #else    
  92.      #include "fsGUI_new.c"
  93.     #endif
  94.     #elif defined FS_BMP_GUI//zhaoyanhua add 2004-6-8 9:52
  95.      #include "fsGUI_BmpUI.c"
  96. #else
  97.     #include "fsGUI1.c"
  98. #endif//ifdef NEW_MP3_GUI
  99. #if 0//def  FAT_FILE_MODE  //wthsin , 2004/10/8 09:26am//liweihua mark 2004-11-2
  100.     #include "filemode_GUI.c"
  101. #endif//ifdef FAT_FILE_MODE 
  102. #ifdef  FILE_MODE_WRITE  //sunzhh 20041225
  103.     #include "filemodeGUI_pub.c"
  104. #endif//ifdef FILE_MODE_WRITE    
  105.    
  106. //Don't remove the following(use the same font set as OSD)
  107. #if 0//20020801
  108. void FSShowChar_Bfm(UINT16 x, UINT16 y, BYTE c, BYTE iY, UINT16 iCbCr)
  109. {
  110. int     i, j, i4x, j2x;
  111. BYTE    *pFont;
  112. UINT32  my16Bits;
  113. pFont = get_font_entry(0,c+22);
  114. //draw a character
  115. for (i=0; i<12; i++) {
  116. BYTE    c1, c2;
  117. i4x = i << 2;
  118. c1 = pFont[3+i4x];
  119. c2 = pFont[4+i4x];
  120. my16Bits = (c1<<8) | c2;
  121. for (j=0; j<8; j++) {
  122. j2x = j << 1;
  123. if ( (1<<j2x) & my16Bits) {
  124. *Y_XYB( (x+8-j), (y+i) ) = iY;
  125. *C_XYB( (x+8-j), (y+i) ) = iCbCr;
  126. }
  127. }
  128. }
  129. }
  130. /*
  131. void draw_char_3byte2line(unsigned char *FontBitmap, int x, int y, BYTE iY, UINT16 iCbCr)
  132. {
  133. int px, py, bit, i, j;
  134. for(i = 0; i < 6; i++)
  135. {
  136. //3byte => 
  137. //1st byte-> 1st line MSB 8 pixels, 3th byte-> 2nd line MSB 8 pixels
  138. //2nd byte-> 1st line LSB 4 pixels,2nd line LSB 4 pixels
  139. py = i << 1;
  140. for (j = 0; j < 3; j++)
  141. {
  142. if (j == 1)
  143. px = 8;
  144. else
  145. px = 0;
  146. for (bit = 0; bit < 8; bit++, px++)
  147. {
  148. if ((j == 1) && (bit == 4))
  149. {
  150. py++;
  151. px = 8;
  152. }
  153. if (*(FontBitmap + j) & (1 << (7 - bit)))
  154. {
  155. *Y_XY((x + px), (y + py)) = iY;
  156. *C_XY((x + px), (y + py)) = iCbCr;
  157. }
  158. }
  159.         }
  160.         FontBitmap += 3;
  161.     }
  162. }
  163. */
  164. #if defined( USE_BIG5_FONT )
  165. extern const unsigned char JMT_BIG5_12X12_FONT_BITMAP[];
  166. #define  big5font_table     JMT_BIG5_12X12_FONT_BITMAP
  167. #elif defined( USE_BIG5_COMMON_FONT )
  168. extern const unsigned char JMT_BIG5_12X12_FONT_BITMAP_COMMON[];
  169. #define  big5font_table     JMT_BIG5_12X12_FONT_BITMAP_COMMON
  170. #elif defined USE_GB2312_FONT
  171. extern const unsigned char GUO_GB2312_12X12_FONT_BITMAP[];
  172. #define  hzfont_table     GUO_GB2312_12X12_FONT_BITMAP
  173. #endif
  174. #ifdef USE_GB2312_FONT
  175. #ifdef MP3_LARGE_GUI //Maoyong add for 32*24 HZ display in 720*480 GUI
  176. #define ROW 2
  177. #define COL  2
  178. void FSGUI_GBShowChar(BYTE vid, int x, int y, BYTE c, BYTE c1, BYTE iY, UINT16 iCbCr)
  179. {
  180. int index, i,i4x = 0;
  181.      UINT8 font1[24];
  182. BYTE cc1, cc2, cc3,cc4;
  183. /************************************************************
  184. 1. get Font from 12*12 Hz Library and transfer back to 16*12, 
  185. even byte's low 4 bytes is all 0
  186. *******************************88888888**********************/
  187. index = 18 * ((c - 161) * 94 + c1 - 161);
  188. //draw a character
  189. for (i = 0; i < 12; i++)
  190. {
  191. if(i % 2)
  192. {
  193. i4x = i4x + 2;
  194. cc1 = hzfont_table[index + i4x];
  195. cc2 = hzfont_table[index + i4x - 1] & 0x0f;
  196.              font1[i*2]=cc1;
  197.              font1[i*2+1]=(cc2<<4);
  198. }
  199. else
  200. {
  201. i4x = i * 3 / 2;
  202. cc1 = hzfont_table[index + i4x];
  203. cc2 = hzfont_table[index + i4x + 1] & 0xf0;
  204.              font1[i*2]=cc1;
  205.              font1[i*2+1]=(cc2);
  206. }
  207. }
  208.     /****************************************************
  209. 2.Transfer 16*12 to 32 *24 Font
  210. *****************************************************/
  211. BYTE j, k, m, n;
  212. BYTE width,height;
  213.      width=16;
  214.      height=12;
  215.      UINT16 my16bits=0;
  216.      UINT8 font2[24*ROW*COL];
  217. for (i=0;i<height;i++)
  218.         for(n=0;n<ROW;n++)
  219.              for(j=0;j<(width/8);j++){
  220.                  for(k=0;k<8;k++)
  221.                      for(m=0;m<COL;m++)
  222.                          if((font1[i*2+j]>>(7-k))&0x01)
  223.                               my16bits |= (1<<(width-1-(k*COL+m)));
  224.                  font2[(i*ROW+n)*4+j*COL]=(my16bits>>8);
  225.                  font2[(i*ROW+n)*4+j*COL+1]=my16bits&0xff;
  226.                  my16bits=0;
  227.              }
  228.        /****************************************************
  229. 3. Draw every valid pixel in this Chinese Font: 
  230. because the Last 8 bit of a line's 32 bit is always 0, just 24*24
  231. *****************************************************/
  232. UINT32 my24Bits = 0;       
  233.        for(i = 0; i<24; i++) //height
  234.        {
  235.         i4x = i*4;
  236.         cc1 = font2[i4x];
  237.         cc2 = font2[i4x + 1];
  238.         cc3 = font2[i4x + 2];
  239.         cc4 = font2[i4x + 3];
  240.         my24Bits = (cc1<<16) + (cc2<<8) + cc3;
  241.         for(j = 0; j<24; j++) //width
  242.         {
  243.         if ((1 << j) & my24Bits) 
  244. {
  245. *Y_XY( (x + 24 - j),  (y+i) ) = iY;
  246. *C_XY( (x + 24 - j),  (y+i) ) = iCbCr;
  247. }
  248.         }
  249.        }       
  250. }
  251. #else
  252. void FSGUI_GBShowChar(BYTE vid, int x, int y, BYTE c, BYTE c1, BYTE iY, UINT16 iCbCr)
  253. {
  254. int index, i, j, i4x = 0;
  255. UINT32 my12Bits;
  256. index = 18 * ((c - 161) * 94 + c1 - 161); //12*12 Table (12*12)/8 = 18, every  char
  257. //draw a character
  258. for (i = 0; i < 12; i++)
  259. {
  260. BYTE cc1, cc2;
  261. if(i % 2) //odd line
  262. {
  263. i4x = i4x + 2;
  264. cc1 = hzfont_table[index + i4x];
  265. cc2 = hzfont_table[index + i4x - 1] & 0x0f;
  266. my12Bits = (cc1<<4) | cc2;
  267. }
  268. else //even line
  269. {
  270. i4x = i * 3 / 2;
  271. cc1 = hzfont_table[index + i4x];
  272. cc2 = hzfont_table[index + i4x + 1] & 0xf0;
  273. my12Bits = (cc1<<4) | (cc2>>4);
  274. }
  275. for (j = 0; j < 12; j++)
  276. {
  277. if ((1 << j) & my12Bits) 
  278. {
  279. if (vid == 2)  //Jeff 20020823
  280. {
  281. *Y_XYB( (x+14-j), (y+i) ) = iY;
  282. *C_XYB( (x+14-j), (y+i) ) = iCbCr;
  283. }
  284. else
  285. {
  286. *Y_XY( (x+14-j), (y+i) ) = iY;
  287. *C_XY( (x+14-j), (y+i) ) = iCbCr;
  288. }
  289. }
  290. }
  291. }
  292. }
  293. #endif   //USE_GB2312_FONT
  294. #endif //end MP3_LARGE_GUI
  295. #if defined( USE_BIG5_FONT ) || defined( USE_BIG5_COMMON_FONT )
  296. #ifdef MP3_LARGE_GUI //Maoyong 2004.1.13
  297. #define ROW 2
  298. #define COL  2
  299. void FSGUI_Big5ShowChar(BYTE vid, int x, int y, BYTE c, BYTE c1, BYTE iY, UINT16 iCbCr)
  300. {
  301.     // 2004/09/10 yltseng
  302.     int index, i,i4x = 0;
  303.     UINT8 font1[24];
  304.     BYTE cc1, cc2, cc3,cc4;
  305. #ifdef SUPPORT_FONT_UTIL
  306.     UINT8 aCode[2]      = { c, c1, };
  307.     const UINT8* pBmp   = NULL;
  308.     GetCharacterBmp( aCode, &pBmp );
  309. #else
  310. BYTE CL, CH;
  311. int seq;
  312. /****************************************************
  313. 1. get Font from 12*12 Hz Library and transfer back to 16*12, 
  314. even byte's low 4 bytes is all 0
  315. *****************************************************/
  316. CL = c1;
  317. CH = c;
  318. seq = 0;
  319. CL -= (CL < 127 ? 64 : 98);
  320.     seq = ( CH - 161 ) * 157 + CL;
  321. index = seq * 18;
  322. #endif
  323. for (i = 0; i < 12; i++)
  324. {
  325. if(i % 2)
  326. {
  327. i4x = i4x + 2;
  328. #ifdef SUPPORT_FONT_UTIL
  329.             cc1 = pBmp[i4x];
  330.             cc2 = pBmp[i4x-1]&0x0f;
  331. #else
  332. cc1 = big5font_table[index + i4x];
  333. cc2 = big5font_table[index + i4x - 1] & 0x0f;
  334. #endif
  335.             font1[i*2]=cc1;
  336.             font1[i*2+1]=(cc2<<4);
  337. }
  338. else
  339. {
  340. i4x = i * 3 / 2;
  341. #ifdef SUPPORT_FONT_UTIL
  342.             cc1 = pBmp[i4x];
  343.             cc2 = pBmp[i4x+1]&0xf0;
  344. #else
  345. cc1 = big5font_table[index + i4x];
  346. cc2 = big5font_table[index + i4x + 1] & 0xf0;
  347. #endif
  348.             font1[i*2]=cc1;
  349.             font1[i*2+1]=(cc2);
  350. }
  351. }
  352.     /****************************************************
  353. 2.Transfer 16*12 to 32 *24 Font
  354. *****************************************************/
  355. BYTE j, k, m, n;
  356. BYTE width,height;
  357.      width=16;
  358.      height=12;
  359.      UINT16 my16bits=0;
  360.      UINT8 font2[24*ROW*COL];
  361. for (i=0;i<height;i++)
  362.         for(n=0;n<ROW;n++)
  363.              for(j=0;j<(width/8);j++){
  364.                  for(k=0;k<8;k++)
  365.                      for(m=0;m<COL;m++)
  366.                          if((font1[i*2+j]>>(7-k))&0x01)
  367.                               my16bits |= (1<<(width-1-(k*COL+m)));
  368.                  font2[(i*ROW+n)*4+j*COL]=(my16bits>>8);
  369.                  font2[(i*ROW+n)*4+j*COL+1]=my16bits&0xff;
  370.                  my16bits=0;
  371.              }
  372.        /****************************************************
  373. 3. Draw every valid pixel in this Chinese Font: 
  374. because the Last 8 bit of a line's 32 bit is always 0, just 24*24
  375. *****************************************************/
  376. UINT32 my24Bits = 0;       
  377.        for(i = 0; i<24; i++) //height
  378.        {
  379.         i4x = i*4;
  380.         cc1 = font2[i4x];
  381.         cc2 = font2[i4x + 1];
  382.         cc3 = font2[i4x + 2];
  383.         cc4 = font2[i4x + 3];
  384.         my24Bits = (cc1<<16) + (cc2<<8) + cc3;
  385.         for(j = 0; j<24; j++) //width
  386.         {
  387.         if ((1 << j) & my24Bits) 
  388. {
  389. *Y_XY( (x + 24 - j),  (y+i) ) = iY;
  390. *C_XY( (x + 24 - j),  (y+i) ) = iCbCr;
  391. }
  392.         }
  393.        }
  394. }
  395. #else
  396. void FSGUI_Big5ShowChar(BYTE vid, int x, int y, BYTE c, BYTE c1, BYTE iY, UINT16 iCbCr)
  397. {
  398.     // 2004/09/10 yltseng
  399. int index, i, j, i4x = 0;
  400. UINT32 my12Bits;
  401. #ifdef SUPPORT_FONT_UTIL
  402.     UINT8 aCode[2]      = { c, c1, };
  403.     const UINT8* pBmp   = NULL;
  404.     GetCharacterBmp( aCode, &pBmp );
  405. #else
  406. int seq;
  407. BYTE CL, CH;
  408. CL = c1;
  409. CH = c;
  410. seq = 0;
  411. CL -= (CL < 127 ? 64 : 98);
  412.     seq = ( CH - 161 ) * 157 + CL;
  413. index = seq * 18;
  414. #endif
  415. //draw a character
  416. for (i = 0; i < 12; i++)
  417. {
  418. BYTE cc1, cc2;
  419. if(i % 2)
  420. {
  421. i4x = i4x + 2;
  422. #ifdef SUPPORT_FONT_UTIL
  423.             cc1 = pBmp[i4x];
  424.             cc2 = pBmp[i4x-1]&0x0f;
  425. #else
  426. cc1 = big5font_table[index + i4x];
  427. cc2 = big5font_table[index + i4x - 1] & 0x0f;
  428. #endif
  429. my12Bits = (cc1<<4) | cc2;
  430. }
  431. else
  432. {
  433. i4x = i * 3 / 2;
  434. #ifdef SUPPORT_FONT_UTIL
  435.             cc1 = pBmp[i4x];
  436.             cc2 = pBmp[i4x+1]&0xf0;
  437. #else
  438. cc1 = big5font_table[index + i4x];
  439. cc2 = big5font_table[index + i4x+1] & 0xf0;
  440. #endif
  441. my12Bits = (cc1<<4) | (cc2>>4);
  442. }
  443. for (j = 0; j <12; j++)
  444. {
  445. if ((1 << j) & my12Bits)
  446. {
  447. if (vid == 2)  //Jeff 20020823
  448. {
  449. *Y_XYB( (x+14-j), (y+i) ) = iY;
  450. *C_XYB( (x+14-j), (y+i) ) = iCbCr;
  451. }
  452. else
  453. {
  454. *Y_XY( (x+14-j), (y+i) ) = iY;
  455. *C_XY( (x+14-j), (y+i) ) = iCbCr;
  456. }
  457. }
  458. }
  459. }
  460. } // yhwang 20021001
  461. #endif   //end #ifdef MP3_LARGE_GUI //Maoyong 2004.1.13
  462. #endif //end #ifdef USE_BIG5_FONT
  463. #if defined (MP3_LARGE_GUI) || defined (FS_BMP_GUI)//#ifdef MP3_LARGE_GUI
  464. void FSGUI_ShowString(int x, int y, const char *s, BYTE iY, UINT16 iCbCr)
  465. {
  466. int i = 0;
  467. BYTE* p = (BYTE *)s;
  468. int length = 0;
  469. //sometime may exceed 25 chinese
  470. //zhaoyanhua modify. 2003-8-26 14:36
  471. #ifdef MP3_TXT_DISPLAY
  472. unsigned char ss[100];
  473. #else
  474. unsigned char ss[50];
  475. #endif
  476. unsigned char* ss_ptr = ss;
  477. strcpy(ss_ptr, p);
  478. while(p[i])
  479. {
  480. length++;
  481. i++;
  482. }
  483. i = 0;
  484. while (*p)
  485. {
  486. BYTE    c;
  487. BYTE    c1;
  488. int     iRes = 0;
  489.         
  490. //  which character
  491. c = *p;
  492. c1 = *(p + 1);
  493. #ifdef USE_GB2312_FONT
  494. if (((c >= 0xA1) && (c <= 0xF8)) && ((c1 >= 0xA1) && (c1 < 0xFF)))             
  495.  {
  496. // GB code
  497. iRes = 3;
  498.  }
  499.  else  
  500. #endif
  501. #if defined( USE_BIG5_FONT )        // 2004/12/23 yltseng
  502. if(((c >= 0xA1) && (c <= 0xF9)) && ((c1 >= 0x40 && c1 <= 0x7E) || (c1 >= 0xA1 && c1 <= 0xFE))) // yhwang for big5 20021001
  503. {
  504. // Big5 code
  505. iRes = 2;
  506. }
  507. else 
  508. #endif
  509. #ifdef USE_BIG5_COMMON_FONT         // 2004/12/23 yltseng
  510. if(((c >= 0xA1) && (c <= 0xC6)) && ((c1 >= 0x40 && c1 <= 0x7E) || (c1 >= 0xA1 && c1 <= 0xFE))) // yhwang for big5 20021001
  511. {
  512. // Big5 code
  513. iRes = 2;
  514. }
  515. else 
  516. #endif
  517. if ((c >= 32) && (c <= 126)) // ASCII code
  518. iRes = 1;
  519. else
  520. {
  521. iRes = 0;
  522. c = '_';
  523. }
  524. if ((iRes == 0) || (iRes == 1))
  525. {
  526. #ifdef SUPPORT_CHINESE_FONT // Clead
  527. if ((c == '!') || (c == '"') || (c == '#') || (c == '$') ||
  528. (c == '&') || (c == ''') || (c == '(') || (c == ')') ||
  529. (c == ',') || (c == ';') || (c == '=') || (c == '^'))
  530. #ifdef USE_GB2312_FONT
  531. {
  532. c1 = 0x03 + 0xa0;
  533. c = c + 0x80;
  534. FSGUI_GBShowChar(0, (x + i), y, c1, c, iY, iCbCr);
  535. }
  536. else
  537. #elif defined( USE_BIG5_FONT ) || defined( USE_BIG5_COMMON_FONT )//#ifdef USE_GB2312_FONT
  538. {
  539. if(c < 114)
  540. {
  541. c1 = 0xa2;
  542. c = c + 0x8e;
  543. }
  544. else
  545. {
  546. c1 = 0xa3;
  547. c = c - 113 + 0x40;
  548. }
  549. FSGUI_Big5ShowChar(0, (x + i), y, c1, c, iY, iCbCr);
  550. }
  551. else
  552. #endif////#ifdef USE_GB2312_FONT
  553. FSGUI_ShowChar(0, (x + i), y, c, iY, iCbCr);
  554. #else//#ifdef SUPPORT_CHINESE_FONT // Clead
  555. FSGUI_ShowChar(0, (x + i), y, c, iY, iCbCr);
  556. #endif//#ifdef SUPPORT_CHINESE_FONT // Clead
  557. i += 16;
  558. p++;
  559. }
  560. #if defined( USE_BIG5_FONT ) || defined( USE_BIG5_COMMON_FONT )
  561. else if(iRes == 2)  //BIG5 code
  562. {
  563. FSGUI_Big5ShowChar(0, (x + i), y, c, c1, iY, iCbCr);
  564. i += 26;
  565. p += 2;
  566. }
  567. #endif
  568. #ifdef USE_GB2312_FONT
  569. else if (iRes == 3) //GB code
  570. {
  571. FSGUI_GBShowChar(0, (x+i), y, c, c1, iY, iCbCr);
  572. i += 26;
  573. p += 2;
  574. #endif
  575. else
  576. {
  577. c = '-';
  578. FSGUI_ShowChar(0, (x+i), y, c, iY, iCbCr); 
  579. i += 16;
  580. p++;
  581. }
  582. if (i > 540)
  583. break;  
  584. }
  585. }
  586. #else//#if defined (MP3_LARGE_GUI) || defined (FS_BMP_GUI)
  587. void FSGUI_ShowString(int x, int y, const UINT8 *s, BYTE iY, UINT16 iCbCr)
  588. {
  589. int i = 0;
  590. BYTE* p = (BYTE *)s;
  591. int length = 0;
  592. //sometime may exceed 25 chinese
  593. //zhaoyanhua modify. 2003-8-26 14:36
  594. #ifdef MP3_TXT_DISPLAY
  595. unsigned char ss[100];
  596. #else
  597. unsigned char ss[50];
  598. #endif
  599. unsigned char* ss_ptr = ss;
  600. strcpy(ss_ptr, p);
  601. while(p[i])
  602. {
  603. length++;
  604. i++;
  605. }
  606. i = 0;
  607.     
  608. while (*p)
  609. {
  610. BYTE    c;
  611. BYTE    c1;
  612. int     iRes = 0;
  613.         
  614. //  which character
  615. c = *p;
  616. c1 = *(p + 1);
  617. #ifdef USE_GB2312_FONT
  618. if (((c >= 0xA1) && (c <= 0xF8)) && ((c1 >= 0xA1) && (c1 < 0xFF)))             
  619.  {
  620. // GB code
  621. iRes = 3;
  622.  }
  623.  else  
  624. #endif
  625. #if defined( USE_BIG5_FONT )        // 2004/12/23 yltseng
  626. if(((c >= 0xA1) && (c <= 0xF9)) && ((c1 >= 0x40 && c1 <= 0x7E) || (c1 >= 0xA1 && c1 <= 0xFE))) // yhwang for big5 20021001
  627. {
  628. // Big5 code
  629. iRes = 2;
  630. }
  631. else 
  632. #endif
  633. #ifdef USE_BIG5_COMMON_FONT         // 2004/12/23 yltseng
  634. if(((c >= 0xA1) && (c <= 0xC6)) && ((c1 >= 0x40 && c1 <= 0x7E) || (c1 >= 0xA1 && c1 <= 0xFE))) // yhwang for big5 20021001
  635. {
  636. // Big5 code
  637. iRes = 2;
  638. }
  639. else 
  640. #endif
  641. if ((c >= 32) && (c <= 126)) // ASCII code
  642. iRes = 1;
  643. else
  644. {
  645. iRes = 0;
  646. c = '_';
  647. }
  648. if ((iRes == 0) || (iRes == 1))
  649. {
  650. #ifdef SUPPORT_CHINESE_FONT // Clead
  651. if ((c == '!') || (c == '"') || (c == '#') || (c == '$') ||
  652. (c == '&') || (c == ''') || (c == '(') || (c == ')') ||
  653. (c == ',') || (c == ';') || (c == '=') || (c == '^'))
  654. #ifdef USE_GB2312_FONT
  655. {
  656. c1 = 0x03 + 0xa0;
  657. c = c + 0x80;
  658. FSGUI_GBShowChar(0, (x + i), y, c1, c, iY, iCbCr);
  659. }
  660. else
  661. #elif defined( USE_BIG5_FONT ) || defined( USE_BIG5_COMMON_FONT )
  662. {
  663. if(c < 114)
  664. {
  665. c1 = 0xa2;
  666. c = c + 0x8e;
  667. }
  668. else
  669. {
  670. c1 = 0xa3;
  671. c = c - 113 + 0x40;
  672. }
  673. FSGUI_Big5ShowChar(0, (x + i), y, c1, c, iY, iCbCr);
  674. }
  675. else
  676. #endif
  677. FSGUI_ShowChar(0, (x + i), y, c, iY, iCbCr);
  678. #else
  679. FSGUI_ShowChar(0, (x + i), y, c, iY, iCbCr);
  680. #endif
  681. #ifdef PULIANG_6PIC_GUI //yaowh add 05-02-04
  682. if (JPEG_THUMBNAIL_MODE == pFsJpeg->g_nJpegMode)
  683. i += 16;
  684. else
  685. #endif
  686. i += 9;
  687. p++;
  688. }
  689. #if defined( USE_BIG5_FONT ) || defined( USE_BIG5_COMMON_FONT )
  690. else if(iRes == 2)  //BIG5 code
  691. {
  692. FSGUI_Big5ShowChar(0, (x + i), y, c, c1, iY, iCbCr);
  693. #ifdef PULIANG_6PIC_GUI //yaowh add 05-02-04
  694. if (JPEG_THUMBNAIL_MODE == pFsJpeg->g_nJpegMode)
  695. i += 26;
  696. else
  697. #endif
  698. i += 14;
  699. p += 2;
  700. }
  701. #endif
  702. #ifdef USE_GB2312_FONT
  703. else if (iRes == 3) //GB code
  704. {
  705. FSGUI_GBShowChar(0, (x+i), y, c, c1, iY, iCbCr);
  706. //liweihua mod 2004-11-23
  707. //for display more Russian characters
  708. #ifdef ETON_DVD
  709. if(c == 0xA7)
  710.     i += 10;
  711. else 
  712. #endif
  713. #ifdef PULIANG_6PIC_GUI //yaowh add 05-02-04
  714. if (JPEG_THUMBNAIL_MODE == pFsJpeg->g_nJpegMode)
  715. i += 26;
  716. else
  717. #endif
  718. i += 14;
  719. p += 2;
  720. #endif
  721. else
  722. {
  723. c = '-';
  724. FSGUI_ShowChar(0, (x+i), y, c, iY, iCbCr); 
  725. #ifdef PULIANG_6PIC_GUI //yaowh add 05-02-04
  726. if (JPEG_THUMBNAIL_MODE == pFsJpeg->g_nJpegMode)
  727. i += 16;
  728. else
  729. #endif
  730. i += 9;
  731. p++;
  732. }
  733. #ifdef PULIANG_6PIC_GUI //yaowh add 05-02-04
  734. if (JPEG_THUMBNAIL_MODE == pFsJpeg->g_nJpegMode)
  735. if (i > 2540)
  736. else
  737. #endif
  738. if (i > 260)
  739. break;  // yhwang, for limiting the length of FSGUI_ShowString
  740. }
  741. }
  742. #endif //#if defined (MP3_LARGE_GUI) || defined (FS_BMP_GUI)
  743. #ifdef FS_BMP_GUI
  744. /*
  745.     Function:In order to show little string in Sunplus New GUI
  746.     Creator:Feeling
  747. */
  748. void FSGUI_ShowLittleString(int x, int y, const char *s, BYTE iY, UINT16 iCbCr)
  749. {
  750. int i = 0;
  751. BYTE* p = (BYTE *)s;
  752. int length = 0;
  753. //sometime may exceed 25 chinese
  754. //zhaoyanhua modify. 2003-8-26 14:36
  755. #ifdef MP3_TXT_DISPLAY
  756. unsigned char ss[100];
  757. #else
  758. unsigned char ss[50];
  759. #endif
  760. unsigned char* ss_ptr = ss;
  761. strcpy(ss_ptr, p);
  762. while(p[i])
  763. {
  764. length++;
  765. i++;
  766. }
  767. i = 0;
  768. while (*p)
  769. {
  770. BYTE    c;
  771. BYTE    c1;
  772. int     iRes = 0;
  773.         
  774. //  which character
  775. c = *p;
  776. c1 = *(p + 1);
  777. #ifdef USE_GB2312_FONT
  778. if (((c >= 0xA1) && (c <= 0xF8)) && ((c1 >= 0xA1) && (c1 < 0xFF)))             
  779.  {
  780. // GB code
  781. iRes = 3;
  782.  }
  783.  else  
  784. #endif
  785. #if defined( USE_BIG5_FONT ) || defined( USE_BIG5_COMMON_FONT )
  786. if(((c >= 0xA1) && (c <= 0xF9)) && ((c1 >= 0x40 && c1 <= 0x7E) || (c1 >= 0xA1 && c1 <= 0xFE))) // yhwang for big5 20021001
  787. {
  788. // Big5 code
  789. iRes = 2;
  790. }
  791. else 
  792. #endif
  793. if ((c >= 32) && (c <= 126)) // ASCII code
  794. iRes = 1;
  795. else
  796. {
  797. iRes = 0;
  798. c = '_';
  799. }
  800. if ((iRes == 0) || (iRes == 1))
  801. {
  802. #ifdef SUPPORT_CHINESE_FONT // Clead
  803. if ((c == '!') || (c == '"') || (c == '#') || (c == '$') ||
  804. (c == '&') || (c == ''') || (c == '(') || (c == ')') ||
  805. (c == ',') || (c == ';') || (c == '=') || (c == '^'))
  806. #ifdef USE_GB2312_FONT
  807. {
  808. c1 = 0x03 + 0xa0;
  809. c = c + 0x80;
  810. FSGUI_GBShowChar(0, (x + i), y, c1, c, iY, iCbCr);
  811. }
  812. else
  813. #elif defined( USE_BIG5_FONT ) || defined( USE_BIG5_COMMON_FONT )
  814. {
  815. if(c < 114)
  816. {
  817. c1 = 0xa2;
  818. c = c + 0x8e;
  819. }
  820. else
  821. {
  822. c1 = 0xa3;
  823. c = c - 113 + 0x40;
  824. }
  825. FSGUI_Big5ShowChar(0, (x + i), y, c1, c, iY, iCbCr);
  826. }
  827. else
  828. #endif
  829. FSGUI_ShowLittleChar(0, (x + i), y, c, iY, iCbCr);
  830. #else
  831. FSGUI_ShowLittleChar(0, (x + i), y, c, iY, iCbCr);
  832. #endif
  833. i += 9;
  834. p++;
  835. }
  836. #if defined( USE_BIG5_FONT ) || defined( USE_BIG5_COMMON_FONT )
  837. else if(iRes == 2)  //BIG5 code
  838. {
  839. FSGUI_Big5ShowChar(0, (x + i), y, c, c1, iY, iCbCr);
  840. i += 14;
  841. p += 2;
  842. }
  843. #endif
  844. #ifdef USE_GB2312_FONT
  845. else if (iRes == 3) //GB code
  846. {
  847. FSGUI_GBShowChar(0, (x+i), y, c, c1, iY, iCbCr);
  848. i += 14;
  849. p += 2;
  850. #endif
  851. else
  852. {
  853. c = '-';
  854. FSGUI_ShowLittleChar(0, (x+i), y, c, iY, iCbCr); 
  855. i += 9;
  856. p++;
  857. }
  858. if (i > 300)
  859. break;  // for limiting the length of FSGUI_ShowString
  860. }
  861. }
  862. #endif
  863. //void FSGUI_ShowImage(BYTE* MapArray, int xStart, int yStart, int width, int height)
  864. //{
  865. //        int i, j,x,y;
  866. //        UINT8 z;
  867. //
  868. //        for (i=0; i<height; i++) {
  869. //                for (j=0; j<width; j++) {
  870. //                        x=xStart+j;
  871. //                        y=yStart+i;
  872. //                        z=*(MapArray+i*width+j);
  873. //                        *Y_XY(x,y) = RGB8_Y[z];
  874. //                        *C_XY(x,y) = RGB8_CrCb[z];
  875. //                }
  876. //        }
  877. //}
  878. #endif//20020801