OledString.c
上传用户:hjhsjcl
上传日期:2020-09-25
资源大小:11378k
文件大小:52k
源码类别:

压缩解压

开发平台:

C++ Builder

  1. /*==========================================================================
  2. Copyright (c) 2004 ALi Corporation. All Rights Reserved
  3. File: Lcd.c
  4. content: Dot-matrix lcd control/display functions
  5. History: Created by David Chiu 2004/3/29
  6. TNE 2004/6/1  
  7. ==========================================================================*/
  8. #define _OLED_STRING_H_
  9. #include <DP8051XP.H>
  10. #include "TypeDef.h"
  11. #include "Const.h"
  12. #include "Reg5661.h"
  13. #include "Common.h"
  14. #include "OledString.h"
  15. #if(!(_PM_PHOTO_|_PM_VIDEO_))
  16. #include "Playback.h"
  17. #include "ImaAdpcm.h"
  18. #endif
  19. #include "DDM.h"
  20. #include "Idma.h"
  21. #include "SysStrDef.h"
  22. #include "OLED.h"
  23. #include "IconDefine.h"
  24. #include "UiCommon.h"
  25. // for impermanence
  26. XBYTE gxbUnicodeShowLen;
  27. /*
  28. #if( (_PM_PLAY_&!_PM_FLIST_&!_PM_CLIST_) |_PM_REC_|_PM_FM_|_PM_SYS_|_PM_HST_|USE_TITLE_NUM_DEBUG)
  29. CBYTE cbNumberChar[]={0xE0,0x10,0x10,0x10,0xE0,
  30. 0x7,0x8,0x8,0x8,0x7,
  31. 0x40,0x20,0xF0,0x0,0x0,
  32. 0x0,0x0,0xF,0x0,0x0,
  33. 0x20,0x10,0x10,0x10,0xE0,
  34. 0x8,0xC,0xA,0x9,0x8,
  35. 0x20,0x10,0x90,0x90,0x60,
  36. 0x4,0x8,0x8,0x8,0x7,
  37. 0x0,0xC0,0x20,0xF0,0x0,
  38. 0x3,0x2,0x2,0xF,0x2,
  39. 0xC0,0xB0,0x90,0x90,0x10,
  40. 0x4,0x8,0x8,0x8,0x7,
  41. 0xE0,0x90,0x90,0x90,0x20,
  42. 0x7,0x8,0x8,0x8,0x7,
  43. 0x10,0x10,0x90,0x50,0x30,
  44. 0x0,0xE,0x1,0x0,0x0,
  45. 0x60,0x90,0x90,0x90,0x60,
  46. 0x7,0x8,0x8,0x8,0x7,
  47. 0xE0,0x10,0x10,0x10,0xE0,
  48. 0x4,0x9,0x9,0x9,0x7};
  49. //6x16 font
  50. CBYTE cbNumberChar[]={0x0,0xE0,0x10,0x10,0x10,0xE0,
  51. 0x0,0x7,0x8,0x8,0x8,0x7,
  52. 0x0,0x40,0x20,0xF0,0x0,0x0,
  53. 0x0,0x0,0x0,0xF,0x0,0x0,
  54. 0x0,0x20,0x10,0x10,0x10,0xE0,
  55. 0x0,0x8,0xC,0xA,0x9,0x8,
  56. 0x0,0x20,0x10,0x90,0x90,0x60,
  57. 0x0,0x4,0x8,0x8,0x8,0x7,
  58. 0x0,0x0,0xC0,0x20,0xF0,0x0,
  59. 0x0,0x3,0x2,0x2,0xF,0x2,
  60. 0x0,0xC0,0xB0,0x90,0x90,0x10,
  61. 0x0,0x4,0x8,0x8,0x8,0x7,
  62. 0x0,0xE0,0x90,0x90,0x90,0x20,
  63. 0x0,0x7,0x8,0x8,0x8,0x7,
  64. 0x0,0x10,0x10,0x90,0x50,0x30,
  65. 0x0,0x0,0xE,0x1,0x0,0x0,
  66. 0x0,0x60,0x90,0x90,0x90,0x60,
  67. 0x0,0x7,0x8,0x8,0x8,0x7,
  68. 0x0,0xE0,0x10,0x10,0x10,0xE0,
  69. 0x0,0x4,0x9,0x9,0x9,0x7};
  70. #endif
  71. //Power off string
  72. #if(!PW_OFF_USE_ANIMATION)
  73.        CBYTE cbIconPowerOff[]={227,228,229};
  74. #if(USE_SYS_STR_UNICODE)
  75. CWORD cwStringPowerOff[]={0x616,0x3BC,0x38E};
  76. CBYTE cbStringPowerOffLen[]={18,12,12};
  77. #else
  78. CWORD cwStringPowerOff[]={0x306,0x2E1,0x2D5};
  79. CBYTE cbStringPowerOffLen[]={9,9,9};
  80. #endif
  81. #if(_PM_PLAY_)
  82. #if(USE_SYS_STR_UNICODE)
  83. CWORD cwStringTagTitle[]={0x236,0x144,0x148};
  84. CBYTE cbStringTagTitleLen[]={12,6,6};
  85. CWORD cwStringTagArtist[]={0x242,0x14A,0x152};
  86. CBYTE cbStringTagArtistLen[]={14,8,8};
  87. CWORD cwStringTagAlbum[]={0x250,0x152,0x15E};
  88. CBYTE cbStringTagAlbumLen[]={12,6,6};
  89. CWORD cwStringFileName[]={0x25C,0x158,0x168};
  90. CBYTE cbStringFileNameLen[]={10,6,6};
  91. // this is for get the ASCII len in scroll
  92. CBYTE cbStringTagTitleAscLen[]={6,5,5};
  93. CBYTE cbStringTagArtistAscLen[]={7,7,7};
  94. CBYTE cbStringTagAlbumAscLen[]={6,5,5};
  95. CBYTE cbStringFileNameAscLen[]={5,5,5};
  96. #else
  97. CWORD cwStringTagTitle[]={0x11A,0xF8,0x10A};
  98. CBYTE cbStringTagTitleLen[]={6,5,5};
  99. CWORD cwStringTagArtist[]={0x120,0xFD,0x111};
  100. CBYTE cbStringTagArtistLen[]={7,7,7};
  101. CWORD cwStringTagAlbum[]={0x127,0x104,0x11A};
  102. CBYTE cbStringTagAlbumLen[]={6,5,5};
  103. CWORD cwStringFileName[]={0x12D,0x109,0x121};
  104. CBYTE cbStringFileNameLen[]={5,5,5};
  105. #endif
  106. #endif
  107. #if(_PM_INIT_&INIT_USE_BTY_LOW_FLAG)
  108. CBYTE cbStringAliCorp[][8]={  {'A','L','i',' ','C','o','r','p'},
  109. {0xB4,0xAD,0xB4,0xBC,0xAC,0xEC,0xA7,0xDE},
  110. {0xD1,0xEF,0xD6,0xC7,0xBF,0xC6,0xBC,0xBC},
  111. {'A','L','i',' ','C','o','r','p'},
  112. {'A','L','i',' ','C','o','r','p'},
  113. {'A','L','i',' ','C','o','r','p'},
  114. };
  115. CBYTE cbStringLowPower[][11]={ {'L','o','w',' ','B','a','t','t','e','r','y'},
  116. {' ',0xB9,0x71,0xA4,0x4F,0xA4,0xA3,0xA8,0xAC,' ',' '},
  117. {' ',0xB5,0xE7,0xC1,0xA6,0xB2,0xBB,0xD7,0xE3,' ',' '},
  118. {'L','o','w',' ','B','a','t','t','e','r','y'},
  119. {'L','o','w',' ','B','a','t','t','e','r','y'},
  120. {'L','o','w',' ','B','a','t','t','e','r','y'},
  121.  };
  122. #endif
  123. */
  124. API WORD StrStrAnsiLen(PBYTE pbString,BYTE bLen); //Walace060310#2
  125. //tne 2005/11/25 #2
  126. #if((_PM_PLAY_&USE_TAG_DISPLAY)|_PM_PHOTO_|_PM_VIDEO_|_PM_FLIST_|_PM_REC_|_PM_FM_|_PM_SYS_|_PM_HST_|_PM_SAVE_)
  127. XBYTE gxbLcdShowFileName[14];
  128. #endif
  129. #if(_PM_PLAY_)
  130. void LcdTurnTag(void) ;   //Walace061228#CodeSize
  131. #endif
  132. #if(USE_SYS_STR_SCROLL&(_PM_MENU_|_PM_SYS_|_PM_VD_MENU_))
  133. /*--------------------------------------------------------------------------
  134. Description:
  135. Scroll SysString on LCD
  136. You should call LcdShowTagTitle first
  137. If no Tag (gxbMusicType&M_SUB_TYPE is FALSE or GET_LCD_TAG_SUBTITLE is NO_SUBTITLE),
  138. you shouldn't call this function (file name not support to be scrolled)
  139. Arguments:
  140. Global arguments:
  141. Returns: 
  142. --------------------------------------------------------------------------*/
  143.  void OLedScrollSysString() large
  144. {
  145. if(gxbSysStringScrollDelay) // Need More Delay
  146. {
  147. gxbSysStringScrollDelay--;
  148. return;
  149. }
  150. #if(LCD_STR_END_COLUMN!=MAX_COLNUM)
  151. gxbLcdLimitCol=LCD_STR_END_COLUMN-1;
  152. #endif
  153. if((gxbLangueType!=LANGUAGE_TYPE_HEB)&&(gxbLangueType!=LANGUAGE_TYPE_ARA))
  154. OledCopyArea(gxbStringColStart+LCD_SCROLL_WIDTH, gxbStringRow, LCD_STR_WIDTH-LCD_SCROLL_WIDTH, LINE1, gxbStringColStart, gxbStringRow);
  155. else
  156. OledCopyArea(LCD_STR_START_COLUMN, gxbStringRow, LCD_STR_WIDTH-LCD_SCROLL_WIDTH, LINE1, LCD_STR_START_COLUMN+LCD_SCROLL_WIDTH, gxbStringRow);
  157. if(gxbStringPoint>=gxbStringLen)
  158. {
  159. gxfSourceUnicode=gxbStringUnicode;
  160. if((gxbLangueType!=LANGUAGE_TYPE_HEB)&&(gxbLangueType!=LANGUAGE_TYPE_ARA))
  161. {
  162. // OledClearArea(gxbStringColStart, gxbStringRow, LCD_STR_WIDTH,LINE1) ;
  163. gxwBGColor=UI_FILST_LIGHT_COLOT;
  164. gxbStringPoint=StrShowString(gxbStringBuffer,gxbStringColStart,gxbStringRow,((LCD_STR_END_COLUMN-gxbStringColStart+1)/8)*(gxbStringUnicode+1));
  165. gxwBGColor=OLED_BG_COLOR;
  166.      }
  167. else
  168. {
  169. //OledClearArea(LCD_STR_END_COLUMN-gxbStringColStart, gxbStringRow, LCD_STR_WIDTH,LINE1) ;
  170. gxwBGColor=UI_FILST_LIGHT_COLOT;
  171. gxbStringPoint=StrShowString(gxbStringBuffer,gxbStringColStart,gxbStringRow,((gxbStringColStart-LCD_STR_START_COLUMN+1)/8)*(gxbStringUnicode+1));
  172. gxwBGColor=OLED_BG_COLOR;
  173. }
  174. gxbLcdStrScrollPix=0;
  175.      gxbSysStringScrollDelay=LCD_STR_START_DELAY;
  176. }
  177. else
  178. {
  179. gxfSourceUnicode=gxbStringUnicode;       
  180. if((gxbLangueType!=LANGUAGE_TYPE_HEB)&&(gxbLangueType!=LANGUAGE_TYPE_ARA))
  181. {
  182. gxwBGColor=UI_FILST_LIGHT_COLOT;
  183. gxbStringPoint+=StrShowString(gxbStringBuffer+gxbStringPoint,(LCD_STR_END_COLUMN-gxbLcdStrScrollPix-LCD_SCROLL_WIDTH),gxbStringRow,1);
  184. gxwBGColor=OLED_BG_COLOR;
  185. }
  186. else
  187. {
  188. gxwBGColor=UI_FILST_LIGHT_COLOT;
  189. gxbStringPoint+=StrShowString(gxbStringBuffer+gxbStringPoint,(LCD_STR_START_COLUMN+gxbLcdStrScrollPix+LCD_SCROLL_WIDTH),gxbStringRow,1);
  190. gxwBGColor=OLED_BG_COLOR;
  191. }
  192. if(gxbStringPoint>=gxbStringLen)
  193. {
  194. gxbSysStringScrollDelay=LCD_STR_END_DELAY;
  195. gxbLcdStrScrollPix=0;
  196. }
  197. else
  198. {
  199. #if(LCD_STR_NORMAL_DELAY)
  200. gxbSysStringScrollDelay=LCD_STR_NORMAL_DELAY;
  201. #endif
  202. }
  203. }
  204. #if(LCD_STR_END_COLUMN!=MAX_COLNUM)
  205. gxbLcdLimitCol=LCD_STR_END_COLUMN-1;
  206. #endif
  207. gxbLcdStrScrollPix = gxbLcdDispLimPix;
  208. gxfSourceUnicode=STRING_TYPE_ASCII;
  209. }
  210. void SysStringScroll(void)
  211. {
  212. if(gxbSysStringScrollTag==1)
  213. {
  214. if(gxbLcdCounter>=UI_SCROLL_DELAY_TIME)
  215. {
  216. OLedScrollSysString();
  217. gxbLcdCounter=0;
  218. }
  219. }
  220. }
  221. #endif
  222. void LcdCopyShortFileName(PBYTE pbFileName) large;
  223. //EXTERN API void LcdScrollText(BYTE bPage1, BYTE bColNum1, BYTE bPage2, BYTE bColNum2) large;
  224. //#if(LCD_TYPE==TFT_ORISE)
  225. //#define OLED_SCROLL_TEXT(bColStart,bRowStart,bWidth,bHeight)  
  226. // TftMoveLine(bColStart+LCD_SCROLL_WIDTH, bRowStart,bWidth-LCD_SCROLL_WIDTH, bColStart,bRowStart,FALSE) ; //050804
  227. //#else
  228. #define OLED_SCROLL_TEXT(bColStart,bRowStart,bWidth,bHeight)  
  229. OledCopyArea(bColStart+LCD_SCROLL_WIDTH, bRowStart,bWidth-LCD_SCROLL_WIDTH,bHeight, bColStart,bRowStart) ; //050804
  230. //#endif
  231. //#if(_PM_VIDEO_|_PM_PHOTO_|_PM_PLAY_|_PM_REC_|_PM_FM_|_PM_SYS_|_PM_HST_|(_PM_SAVE_&UI_USE_MODE_KEY)|_PM_CUSTOM_|_PM_PLAY_DEL_|_PM_DIR_DEL_) //tne 2005/12/17  //TONY060515
  232. #if(_PM_VIDEO_|_PM_PHOTO_|_PM_PLAY_|_PM_REC_|_PM_FM_|_PM_SYS_|_PM_HST_|(_PM_SAVE_&UI_USE_MODE_KEY)|_PM_CUSTOM_) //tne 2005/12/17  //TONY060515     //tne 2007/01/24 #4
  233. /*--------------------------------------------------------------------------
  234. Description:
  235.  let a string show in the center
  236.  If you use Static Array, use marco "UI_CENTER_COLUMN" is better
  237.  
  238. Arguments:
  239. bNum: string length
  240. Global arguments:
  241. Returns: 
  242. This function return center number...
  243. --------------------------------------------------------------------------*/
  244. API BYTE LcdCenterColumn(BYTE bNum)
  245. {
  246. // WHH 070130
  247. #if(_PM_VD_PLAY_) 
  248. return ((MAX_ROW+1-bNum)>>1);
  249. #else 
  250. return ((MAX_COLNUM+1-bNum)>>1);
  251. #endif 
  252. }
  253. #endif
  254. //Walace060213#3
  255. //#if((_PM_INIT_&INIT_USE_BTY_LOW_FLAG)|_PM_PHOTO_|_PM_VIDEO_|_PM_PLAY_ | _PM_REC_ | _PM_FM_ | _PM_SYS_ |(_PM_SAVE_&UI_USE_MODE_KEY)|_PM_HST_)
  256. //#if((_PM_INIT_&INIT_USE_BTY_LOW_FLAG)|_PM_PHOTO_|_PM_VIDEO_|_PM_PLAY_ | _PM_REC_ | _PM_FM_ | _PM_SYS_ |(_PM_SAVE_&UI_USE_MODE_KEY)|_PM_HST_|_PM_CUSTOM_)
  257. #if((_PM_INIT_&INIT_USE_BTY_LOW_FLAG)|_PM_PHOTO_|_PM_VIDEO_|_PM_PLAY_ | _PM_REC_ | _PM_FM_ | _PM_SYS_ |_PM_HST_|_PM_CUSTOM_|_PM_SAVE_) // WHH #4 301_061225 //tne 2007/01/24 #4
  258. API BYTE StrAsscii2Unicode(PBYTE pbHByte,PBYTE pbLByte)
  259. {
  260. #define bHByte (*pbHByte)
  261. #define bLByte (*pbLByte)
  262. WORD wFontOffset,wFontNum,wFontSec;
  263. BYTE bIncNum;
  264. bIncNum=1;
  265. if(bHByte<0x80) //Pure English
  266. {
  267. bLByte=0;
  268. return bIncNum;
  269. }
  270. wFontOffset=((WORD)bHByte<<1); //for code page 874, 1250-1258
  271. switch(gxbLangueType)
  272. {
  273. case LANGUAGE_TYPE_TW:
  274. //modify by TNE 2004/11/26 #3
  275. if( ((bHByte==0x81)&&(bLByte<0x40)) || (bHByte==0x80) ) // by pass illegal word
  276. {
  277. wFontNum=20261; // point to Big5 '?'
  278. }
  279. else
  280. {
  281. if(bLByte<=0x7E)
  282. wFontNum=(WORD)(bHByte-0x81)*157+(bLByte-0x40);
  283. else
  284. wFontNum=(WORD)(bHByte-0x81)*157+(bLByte-98);
  285. }
  286. bIncNum=2;
  287. break;
  288. case LANGUAGE_TYPE_CN:
  289. //modify by TNE 2004/11/26 #3
  290. if((bHByte<=0xA0)||(bLByte<0xA0)) // by pass illegal word
  291. {
  292. wFontNum=223; // point to GB '?'
  293. }
  294. else
  295. {
  296. if(bHByte>=0xB0) bHByte -= 10; //skip A6A0-AFFF
  297. wFontNum=(WORD)(bHByte-0xA1)*96+(bLByte-0xA0);
  298. }
  299. bIncNum=2;
  300. break;
  301. case LANGUAGE_TYPE_JP:
  302. if(bHByte>=0xEB)
  303. {
  304. wFontNum = 8831; //point to '?'
  305. break;
  306. }
  307. case LANGUAGE_TYPE_KS:
  308. wFontNum=(((WORD)bHByte<<8)|bLByte);
  309. if( (wFontNum<0x8140) || (wFontNum>=0xFE00) ) // by pass illegal word
  310. { wFontNum = 8831; } //A3BF //point to '?'
  311. else
  312. {
  313. wFontNum = wFontNum - 0x8140;
  314. }
  315. bIncNum=2;
  316. break;
  317. //CP0874
  318. case LANGUAGE_TYPE_THA:
  319. wFontSec=LCD_CP_0874_SECTOR;
  320. goto LOAD_TRAN_TABLE;
  321. //CP1250
  322. case LANGUAGE_TYPE_ALB:
  323. case LANGUAGE_TYPE_CRO:
  324. case LANGUAGE_TYPE_CZE:
  325. case LANGUAGE_TYPE_HUN:
  326. case LANGUAGE_TYPE_POL:
  327. case LANGUAGE_TYPE_ROM:
  328. case LANGUAGE_TYPE_SVK:
  329. case LANGUAGE_TYPE_SVN:
  330. wFontSec=LCD_CP_1250_SECTOR;
  331. goto LOAD_TRAN_TABLE;
  332. //CP1251
  333. case LANGUAGE_TYPE_AZE:
  334. case LANGUAGE_TYPE_BEL:
  335. case LANGUAGE_TYPE_BUL:
  336. case LANGUAGE_TYPE_KAZ:
  337. case LANGUAGE_TYPE_KYR:
  338. case LANGUAGE_TYPE_MAC:
  339. case LANGUAGE_TYPE_MGL:
  340. case LANGUAGE_TYPE_RS:
  341. case LANGUAGE_TYPE_SER:
  342. case LANGUAGE_TYPE_TAT:
  343. case LANGUAGE_TYPE_UKR:
  344. case LANGUAGE_TYPE_UZB:
  345. wFontSec=LCD_CP_1251_SECTOR;
  346. goto LOAD_TRAN_TABLE;
  347. //CP1252
  348. //case LANGUAGE_TYPE_AFR:
  349. //case LANGUAGE_TYPE_BAQ:
  350. //case LANGUAGE_TYPE_CTL:
  351. //case LANGUAGE_TYPE_DAN:
  352. //case LANGUAGE_TYPE_DUT:
  353. //case LANGUAGE_TYPE_EN:
  354. //case LANGUAGE_TYPE_FRO:
  355. //case LANGUAGE_TYPE_FIN:
  356. //case LANGUAGE_TYPE_FR:
  357. //case LANGUAGE_TYPE_GAL:
  358. //case LANGUAGE_TYPE_GM:
  359. //case LANGUAGE_TYPE_ICE:
  360. //case LANGUAGE_TYPE_IDN:
  361. //case LANGUAGE_TYPE_ITL:
  362. //case LANGUAGE_TYPE_MAL:
  363. //case LANGUAGE_TYPE_NOW:
  364. //case LANGUAGE_TYPE_POR:
  365. //case LANGUAGE_TYPE_SP:
  366. //case LANGUAGE_TYPE_SWA:
  367. //case LANGUAGE_TYPE_SWE:
  368. default:
  369. wFontSec=LCD_CP_1252_SECTOR;
  370. goto LOAD_TRAN_TABLE;
  371. //CP1253
  372. case LANGUAGE_TYPE_GRK:
  373. wFontSec=LCD_CP_1253_SECTOR;
  374. goto LOAD_TRAN_TABLE;
  375. //CP1254
  376. case LANGUAGE_TYPE_TUR:
  377. wFontSec=LCD_CP_1254_SECTOR;
  378. goto LOAD_TRAN_TABLE;
  379. //CP1255
  380. case LANGUAGE_TYPE_HEB:
  381. wFontSec=LCD_CP_1255_SECTOR;
  382. goto LOAD_TRAN_TABLE;
  383. //CP1256
  384. case LANGUAGE_TYPE_ARA:
  385. case LANGUAGE_TYPE_FRI:
  386. case LANGUAGE_TYPE_URD:
  387. wFontSec=LCD_CP_1256_SECTOR;
  388. goto LOAD_TRAN_TABLE;
  389. //CP1257
  390. case LANGUAGE_TYPE_EST:
  391. case LANGUAGE_TYPE_LAV:
  392. case LANGUAGE_TYPE_LTN:
  393. wFontSec=LCD_CP_1257_SECTOR;
  394. goto LOAD_TRAN_TABLE;
  395. //CP1258
  396. case LANGUAGE_TYPE_VIE:
  397. wFontSec=LCD_CP_1258_SECTOR;
  398. goto LOAD_TRAN_TABLE;
  399. }
  400. wFontSec=wFontNum>>8; //256 words every sector
  401. wFontOffset=(wFontNum&0xFF)<<1; //mod 256 and then mul 2(1 word = 2 bytes)
  402. LOAD_TRAN_TABLE:
  403. //Only keep current transfer table index
  404. NandReadPhySec(gxwFontTable[FONT_TRN_TABLE]+wFontSec,1,SRAM_FONT_ADDR);
  405. bHByte=gxbFontData[wFontOffset];
  406. bLByte=gxbFontData[wFontOffset+1];
  407. #undef bHByte
  408. #undef bLByte 
  409. return bIncNum;
  410. }
  411. //#if(!(_PM_PLAY_DEL_|_PM_DIR_DEL_)) //Walace060213#3
  412. #if(!(_PM_PLAY_DEL_|_PM_DIR_DEL_)) // WHH #4 301_061225 //tne 2007/01/24 #4
  413. /*--------------------------------------------------------------------------
  414. Description:
  415. Show String on LCD (16x16 for Big5 and 8x16 for ASCII)
  416. Arguments:
  417. pbShowStr: point to string you want to show, string format:
  418. bPage: show location page
  419. bColNum: show location column
  420. bLen: string length
  421. Global arguments:
  422. Returns: 
  423. Next display string index (0 base and byte unit)
  424. EX. In standard mode, you want to show "ABCDE" in column 104,
  425. "ABC" will be shown, and "DE" will be skip (Over Lcd Screen)
  426. This function will return 3 (Point to D).
  427. If you show "ABCDE" in column 108, "AB" will be shown,
  428. Half of "C" will be shown, and "DE" will be skip
  429. This function will return 2 (Point to C)
  430. If you show "ABCDE" in column 0, all string would be shown.
  431. This function will return 5 (Point over the string)
  432. --------------------------------------------------------------------------*/
  433. //tne lcd scroll2
  434. //vicky061107#1 update the return Type
  435. #if(_PM_FM_|_PM_PHOTO_|_PM_VD_MENU_)
  436. API WORD StrShowString(PBYTE pbShowStr,BYTE bColStart,BYTE bRowStart,BYTE wLen) large //Walace060918#1
  437. #else
  438. API WORD StrShowString(PBYTE pbShowStr,BYTE bColStart,BYTE bRowStart,BYTE wLen) //Walace060918#1
  439. #endif
  440. //API BYTE LcdShowString(PBYTE pbShowStr,BYTE bPage,BYTE bColNum,BYTE wLen) large
  441. #if(USE_LCD_UNICODE)
  442. {
  443. WORD wI;
  444. BYTE bIncNum;
  445. BYTE bHByte,bLByte;
  446. WORD wFontNum,wFontSec,wFontOffset;
  447. wI=0;
  448. while(wI<wLen)
  449. {
  450. bHByte=pbShowStr[wI];
  451. bLByte=pbShowStr[wI+1];
  452. bIncNum=1;
  453. // transfer ANSI -> Unicode
  454. if(gxfSourceUnicode==STRING_TYPE_ASCII)
  455. {
  456.        bIncNum=StrAsscii2Unicode(&bHByte,&bLByte);
  457. } //ASCII Code
  458. else //Unicode alaways use 2 bytes
  459. { bIncNum=2; } 
  460. //UNICODE_KERNEL:
  461. ///////////////// Unicode String Program Kernel /////////////////
  462. if(bLByte==0)  // English Word
  463. {
  464. //add by tne 2004/11/26 #3
  465. //by pass illegal word
  466. //if((bHByte>=127)||(bHByte<32)) bHByte='?'; // point to '?'
  467. if(bHByte<32) bHByte='?'; // point to '?'
  468. //Japen Special Yen Sign
  469. if(gxbLangueType==LANGUAGE_TYPE_JP)
  470. {
  471. if(bHByte==0x5C)
  472. bHByte=0xA5;
  473. }
  474. wFontNum=bHByte-0x20;
  475. wFontSec=wFontNum>>5; //32 words every sector
  476. wFontOffset=(WORD)(bHByte&0x1F)<<4; //mod 32 and then mul 16(1 word = 16 bytes)
  477. NandReadPhySec(gxwFontTable[FONT_EN]+wFontSec,1,SRAM_FONT_ADDR);
  478. OledShowBitsIcon(gxbFontData+wFontOffset,bColStart,bRowStart,SEG1,2);
  479. bColStart += LCD_SMALL_FONT_WIDTH;
  480. }
  481. else
  482. {
  483. //add by tne 2004/11/26 #3
  484. //by pass illegal word
  485. #if(!UNICODE_USE_ALL)
  486. if(bLByte<0x30)
  487. {
  488. bLByte=0xFF;
  489. bHByte=0x1F; //point to unicode '?'
  490. }
  491. #endif
  492. // Unicode Hight Low byte is reversed, so LByte sub HByte start code
  493. bLByte -= UNICODE_START_CODE;
  494. wFontNum=(((WORD)bLByte)<<8)+bHByte;
  495. #if(UNICODE_SKIP_D800)
  496. // skip D800-F8FF , 8448 words
  497. if(bLByte>=(0xD8-UNICODE_START_CODE)) 
  498. wFontNum -= 8448; 
  499. #endif
  500. wFontSec=wFontNum>>4;
  501. wFontOffset=(wFontNum&0xF)<<5; //mod 16 and then mul 32(1 word = 32 bytes)
  502. //modify by tne 2004/12/01 unicode
  503. NandReadPhySec(gxwFontTable[FONT_UNI_00+(wFontSec>>9)]+(wFontSec&0x1FF),1,SRAM_FONT_ADDR);
  504. OledShowBitsIcon(gxbFontData+wFontOffset,bColStart,bRowStart,SEG2,2);
  505.  
  506. //for Russia special
  507. if( (bLByte+UNICODE_START_CODE) == 0x04 )
  508. bColStart += LCD_SMALL_FONT_WIDTH;
  509. else
  510. bColStart += LCD_BIG_FONT_WIDTH;
  511. }
  512. //Display over limit
  513. if(bColStart>gxbLcdLimitCol)
  514. {
  515. //if(gxbLcdDispLimPix==0) //Just fit the max column, point to next word
  516. if(bColStart==gxbLcdLimitCol+1)
  517. {
  518. gxbLcdDispLimPix=0;
  519. wI += bIncNum;
  520. }
  521. break;
  522. }
  523. else
  524. { wI += bIncNum; }
  525. } //while(wI<wLen)
  526. gxbLcdLastStrPix=bColStart;
  527. return wI;
  528. }
  529. #else
  530. {
  531. WORD wI;
  532. BYTE bWordPos;
  533. BYTE bHByte,bLByte;
  534. WORD wFontNum,wFontSec,wFontOffset;
  535. wI=0;
  536. bWordPos=0;
  537. while(wI<wLen)
  538. {
  539. bHByte=pbShowStr[wI];
  540. bLByte=pbShowStr[wI+1];
  541. // transfer Unicode -> ANSI
  542. if(gxfSourceUnicode==STRING_TYPE_UNICODE)
  543. {
  544. if(bLByte!=0)
  545. {
  546. bLByte -= UNICODE_START_CODE; // Del Unicode start
  547. wFontNum=(((WORD)bLByte)<<8)+bHByte;
  548. wFontSec=wFontNum>>8; //256 words every sector
  549. wFontOffset=(wFontNum&0xFF)<<1; //mod 256 and then mul 2(1 word = 2 bytes)
  550. switch(gxbLangueType)
  551. {
  552. case LANGUAGE_TYPE_EN:
  553. case LANGUAGE_TYPE_TW:
  554. NandReadPhySec(gxwUniBig5Table+wFontSec,1,SRAM_FONT_ADDR);
  555. break;
  556. }
  557. bHByte=gxbFontData[wFontOffset+1];
  558. bLByte=gxbFontData[wFontOffset];
  559. }
  560. }
  561. switch(gxbLangueType)
  562. {
  563. case LANGUAGE_TYPE_EN:
  564. case LANGUAGE_TYPE_TW:
  565. ////////// Big5 String Program Kernel //////////
  566. if(bHByte>0x80)
  567. {
  568. #if(USE_ONLY_STD_FONT)
  569. if(bLByte<=0x7E)
  570. wFontNum=(WORD)(bHByte-0xA4)*157+(bLByte-0x40);
  571. else
  572. wFontNum=(WORD)(bHByte-0xA4)*157+(bLByte-98);
  573. #else
  574. if(bLByte<=0x7E)
  575. wFontNum=(WORD)(bHByte-0x81)*157+(bLByte-0x40);
  576. else
  577. wFontNum=(WORD)(bHByte-0x81)*157+(bLByte-98);
  578. #endif
  579. wFontSec=wFontNum>>4; //16 words every sector
  580. wFontOffset=(wFontNum&0xF)<<5; //mod 16 and then mul 32(1 word = 32 bytes)
  581. NandReadPhySec(gxwFontTable[FONT_TW]+wFontSec,1,SRAM_FONT_ADDR);
  582. OledShowBitsIcon(gxbFontData+wFontOffset,bColStart+SEG2PIXEL(bWordPos),bRowStart,SEG2,2);
  583. bWordPos+=2;
  584. wI+=2;
  585. }
  586. else
  587. {
  588. wFontNum=bHByte-0x20;
  589. wFontSec=wFontNum>>5; //32 words every sector
  590. wFontOffset=(wFontNum&0x1F)<<4; //mod 32 and then mul 16(1 word = 16 bytes)
  591. NandReadPhySec(gxwFontTable[FONT_EN]+wFontSec,1,SRAM_FONT_ADDR);
  592. OledShowBitsIcon(gxbFontData+wFontOffset,bColStart+SEG2PIXEL(bWordPos),bRowStart,SEG1,2);
  593. if(gxfSourceUnicode==STRING_TYPE_UNICODE)
  594. wI+=2;
  595. else
  596. wI++;
  597. bWordPos++;
  598. }
  599. break;
  600. case LANGUAGE_TYPE_CN:
  601. break;
  602. }
  603. }
  604. if(gxfSourceUnicode==STRING_TYPE_ASCII)
  605. {
  606. if(wI==wLen)
  607. return FULL_WORD;
  608. else
  609. return HALF_WORD;
  610. }
  611. else
  612. {
  613. if(bWordPos>gxbUnicodeShowLen)
  614. return HALF_WORD;
  615. else
  616. return FULL_WORD;
  617. }
  618. }
  619. #endif //USE_LCD_UNICODE endif
  620. #endif //Walace060213#3
  621. #endif //( _PM_PLAY_ | _PM_FM_ | _PM_SYS_ | (_PM_SAVE_&UI_USE_MODE_KEY) | _PM_HST_ | _PM_INIT_)
  622. //Walace051226#1
  623. #if(_PM_PLAY_MAIN_&USE_TAG_DISPLAY)
  624. /*--------------------------------------------------------------------------
  625. Description:
  626. Switch Tag on LCD (Title->Artist->Album)
  627. Arguments:
  628. Global arguments:
  629. Returns: 
  630. --------------------------------------------------------------------------*/
  631. //CWORD cwShowStrTag[]={SYS_STR_TAG,SYS_STR_ARTIST,SYS_STR_ALBUM,SYS_STR_GENRE,SYS_STR_FILE}; //tne 512 tag
  632. CWORD cwShowStrTag[]={SYS_STR_TAG,SYS_STR_ARTIST,SYS_STR_ALBUM,SYS_STR_FILE};
  633. void LcdTurnTag(void)   //Walace061228#CodeSize
  634. {
  635. WORD wShowStrTag;
  636. //tne 512 tag start
  637. if(gxbLcdTagStatus!=LCD_TAG_TURN_FILEONLY)
  638. {
  639. while(1)
  640. {
  641. //if(gxbLcdTagStatus>=LCD_TAG_TURN_GENRE)
  642. if(gxbLcdTagStatus>=LCD_TAG_TURN_ALBUM) //tne 512 tag
  643. gxbLcdTagStatus=LCD_TAG_TURN_TITLE;
  644. else
  645. gxbLcdTagStatus++;
  646. if(gxwNameBufLen[gxbLcdTagStatus]>0)
  647. break;
  648. }
  649. gxbShowTagBase=gxbNameBuf;
  650. LoadNameBufStringFromNand(gxbLcdTagStatus); //tne 512 tag  061101
  651. }
  652. wShowStrTag=cwShowStrTag[gxbLcdTagStatus];
  653. //tne 512 tag end
  654. //OledClearArea(SEG0,LINE2,OLED_MAX_COL-SEG0,LINE1) ; 
  655. //OledClearArea(OLED_TAG_COL,OLED_TAG_ROW,OLED_MAX_COL-OLED_TAG_COL,LINE1); //Tne060223#1
  656. OledShowIconNew(1,IM_TAG_CLEAR,OLED_TAG_COL,OLED_TAG_ROW);    // tne 2007/01/24 #4
  657. gfTransparent=TRUE;   // tne 2007/01/24 #4
  658.        StrShowSysString(wShowStrTag,OLED_TAG_COL,OLED_TAG_ROW);
  659. gxfSourceUnicode=gxbNameBufStrType[gxbLcdTagStatus];
  660. #if(OLED_TAG_END_COLUMN!=MAX_COLNUM)
  661. gxbLcdLimitCol=OLED_TAG_END_COLUMN;
  662. #endif
  663.  
  664. gxwShowTagPoint=StrShowString(gxbShowTagBase,gxbLcdLastStrPix,OLED_TAG_ROW,gxwNameBufLen[gxbLcdTagStatus]); //vicky061107#1
  665. #if(OLED_TAG_END_COLUMN!=MAX_COLNUM)
  666. gxbLcdLimitCol=MAX_COLNUM;
  667. #endif
  668. gfTransparent=FALSE; // tne 2007/01/24 #4
  669. gxbLcdTagScrollPix=gxbLcdDispLimPix;
  670. gxbTagScrollDelay=LCD_TAG_START_DELAY;
  671. gxfSourceUnicode=STRING_TYPE_ASCII;
  672. }
  673. /*--------------------------------------------------------------------------
  674. Description:
  675. Start to show Tag Title on LCD
  676. If Tag Title not exist, it would show file name
  677. You should call this function, and then call LcdScrollTag to scroll it
  678. Arguments:
  679. Global arguments:
  680. Returns: 
  681. --------------------------------------------------------------------------*/
  682. //fix by tne 2005/01/13 #1
  683. API void LcdShowTagTitle() //Walace061228#CodeSize
  684. {
  685. //BYTE bI,bJ;
  686. if(gxbMusicType&M_SUB_TYPE) // MP3 TAG Exist
  687. { gxbLcdTagStatus=LCD_TAG_TURN_DEFAULT; }
  688. else
  689. {
  690. gxbLcdTagStatus=LCD_TAG_TURN_FILEONLY;
  691. if(gxbLongFileName[1]==0) //no long file name
  692. {
  693. //copy short file name
  694. LcdCopyShortFileName(gxbFileName);
  695. gxbShowTagBase=gxbLcdShowFileName;
  696. }
  697. else
  698. {
  699. //tne 512 tag
  700. gxbNameBufStrType[TAG_FNAME_BUF_IDX]=STRING_TYPE_UNICODE;
  701. gxwNameBufLen[TAG_FNAME_BUF_IDX]=gxbLongFileName[1];
  702. gxbShowTagBase=gxbLongFileName+2;
  703. }
  704. }
  705. LcdTurnTag();
  706. }
  707. /*--------------------------------------------------------------------------
  708. Description:
  709. Scroll Tag on LCD
  710. You should call LcdShowTagTitle first
  711. If no Tag (gxbMusicType&M_SUB_TYPE is FALSE or GET_LCD_TAG_SUBTITLE is NO_SUBTITLE),
  712. you shouldn't call this function (file name not support to be scrolled)
  713. Arguments:
  714. Global arguments:
  715. Returns: 
  716. --------------------------------------------------------------------------*/
  717. API void LcdScrollTag(void) //Walace061228#CodeSize
  718. {
  719. if(gxbTagScrollDelay) // Need More Delay
  720. {
  721. gxbTagScrollDelay--;
  722. return;
  723. }
  724. if(gxwShowTagPoint>=gxwNameBufLen[gxbLcdTagStatus]) //tne 512 tag
  725. {
  726. LcdTurnTag();
  727. return;
  728. }
  729. OLED_SCROLL_TEXT(OLED_TAG_COL,OLED_TAG_ROW,OLED_TAG_END_COLUMN-OLED_TAG_COL+1,OLED_TAG_HEIGHT);
  730. gxfSourceUnicode=gxbNameBufStrType[gxbLcdTagStatus]; //tne 512 tag
  731. #if(OLED_TAG_END_COLUMN!=MAX_COLNUM)
  732. gxbLcdLimitCol=OLED_TAG_END_COLUMN;
  733. #endif
  734. gxwBGColor=UI_TAG_BG_COLOR; //tne 2007/01/17 #2
  735. gxwShowTagPoint += StrShowString(gxbShowTagBase+gxwShowTagPoint,OLED_TAG_END_COLUMN-gxbLcdTagScrollPix-LCD_SCROLL_WIDTH+1,OLED_TAG_ROW,1);
  736. gxwBGColor=OLED_BG_COLOR; //tne 2007/01/17 #2
  737. #if(OLED_TAG_END_COLUMN!=MAX_COLNUM)
  738. gxbLcdLimitCol=MAX_COLNUM;
  739. #endif
  740. gxbLcdTagScrollPix = gxbLcdDispLimPix;
  741. if(gxwShowTagPoint>=gxwNameBufLen[gxbLcdTagStatus]) // Scroll over... //tne 512 tag
  742. {
  743. gxbTagScrollDelay=LCD_TAG_END_DELAY; // Delay more time to see at least
  744. }
  745. else
  746. {
  747. #if(LCD_TAG_NORMAL_DELAY)
  748. gxbTagScrollDelay=LCD_TAG_NORMAL_DELAY;
  749. #endif
  750. }
  751. gxfSourceUnicode=STRING_TYPE_ASCII;
  752. }
  753. #endif
  754. #if( (_PM_SLS_|(_PM_PLAY_&!_PM_PLAY_PRC_))& USE_LYRIC_DISPLAY)
  755. /*--------------------------------------------------------------------------
  756. Description:
  757. Set Lyric state when one line lyric display finish
  758. Arguments:
  759. Global arguments:
  760. gxbLrcState
  761. Returns: 
  762. --------------------------------------------------------------------------*/
  763. API void LcdSetLyricDone() //Walace061228#CodeSize
  764. {
  765. gxbLcdLyricStatus = LCD_LYRIC_SCROLL_DONE; //tne lcd scroll2
  766. if(gfLastLrcStr)
  767. gxbLrcState=LRC_STS_ALL_FINISH;
  768. else
  769. gxbLrcState=LRC_STS_GET_STR;
  770. }
  771. #endif
  772. #if((_PM_PLAY_MAIN_|_PM_DVR_MAIN_)& USE_LYRIC_DISPLAY)
  773. // function modyfy by tne 2004/11/13 #1
  774. /*--------------------------------------------------------------------------
  775. Description:
  776. Show A new Lyrics
  777. You should call this function, and then call LcdScrollLyrics to scroll it
  778. PS.Lyrics isn't support unicode now
  779. Arguments:
  780. Global arguments:
  781. gxbLrcString
  782. Returns: 
  783. --------------------------------------------------------------------------*/
  784. API void LcdShowLyrics() //Walace061228#CodeSize
  785. {
  786. // WHH #13 301_070106
  787. //OledClearArea(OLED_LYRIC_COL, OLED_LYRIC_ROW, OLED_MAX_COL-OLED_LYRIC_COL,LINE1) ; 
  788. //tne 2006/02/24
  789. if(gxbLrcString[1]>=gcbLryicStrLen)
  790. {
  791. if(!LcdChkCjkCutWord(gxbLrcString+2,gcbLryicStrLen))
  792. gxbLrcString[gcbLryicStrLen+1]=' ';
  793. }
  794. #if(OLED_LYRIC_END_COLUMN!=MAX_COLNUM)
  795. gxbLcdLimitCol=OLED_LYRIC_END_COLUMN;
  796. #endif
  797. gfTransparent=TRUE;
  798. #if(USE_LYRIC_TWO_LINE) //WHH #13 301_070106
  799. OledShowIconNew(1,IM_TAG_CLEAR,OLED_LYRIC_COL,OLED_LYRIC_ROW);
  800. OledShowIconNew(1,IM_TAG_CLEAR,OLED_LYRIC_COL,OLED_LYRIC_ROW+16);
  801. gxbShowLyricPoint=StrShowString(gxbLrcString+2,OLED_LYRIC_COL,OLED_LYRIC_ROW,gxbLrcString[1])+2;
  802. if(!(gxbShowLyricPoint>=gxbLrcString[1]+2))
  803. {
  804. gxbShowLyricPoint+=StrShowString(gxbLrcString+gxbShowLyricPoint,OLED_LYRIC_COL,OLED_LYRIC_ROW+16,gxbLrcString[1]-(gxbShowLyricPoint-2));
  805. }
  806. #else
  807. OledShowIconNew(1,IM_TAG_CLEAR,OLED_LYRIC_COL,OLED_LYRIC_ROW);
  808. gxbShowLyricPoint=StrShowString(gxbLrcString+2,OLED_LYRIC_COL,OLED_LYRIC_ROW,gxbLrcString[1])+2;
  809. #endif
  810. gfTransparent=FALSE;
  811. #if(OLED_LYRIC_END_COLUMN!=MAX_COLNUM)
  812. gxbLcdLimitCol=MAX_COLNUM;
  813. #endif
  814. gxbLcdLyricScrollPix=gxbLcdDispLimPix;
  815. if(gxbShowLyricPoint>=gxbLrcString[1]+2)
  816. { LcdSetLyricDone(); }
  817. else
  818. {
  819. gxbLcdLyricStatus=LCD_LYRIC_SCROLLING;
  820. gxbLyricScrollDelay=LCD_LYRIC_START_DELAY;
  821. }
  822. }
  823. // function modyfy by tne 2004/11/13 #1
  824. /*--------------------------------------------------------------------------
  825. Description:
  826. Scroll Lyrics on LCD
  827. You should call LcdShowLyrics first
  828. If gxbMusicType&M_LYRICS_FLAG is False, you should not call this function
  829. Arguments:
  830. Global arguments:
  831. Returns: 
  832. --------------------------------------------------------------------------*/
  833. API void LcdScrollLyric() //Walace061228#CodeSize
  834. {
  835. if(gxbLyricScrollDelay)
  836. {
  837. gxbLyricScrollDelay--;
  838. return;
  839. }
  840. //OLED_SCROLL_TEXT(OLED_LYRIC_COL,OLED_LYRIC_ROW,OLED_TAG_END_COLUMN-OLED_LYRIC_COL+1,OLED_LYRIC_HEIGHT); //Walace060907#3
  841. //WHH #13 301_070106
  842. #if(!USE_LYRIC_TWO_LINE)
  843. OLED_SCROLL_TEXT(OLED_LYRIC_COL,OLED_LYRIC_ROW,OLED_LYRIC_END_COLUMN-OLED_LYRIC_COL+1,OLED_LYRIC_HEIGHT);   //Walace060907#3
  844. #endif
  845. #if(OLED_LYRIC_END_COLUMN!=MAX_COLNUM)
  846. gxbLcdLimitCol=OLED_LYRIC_END_COLUMN;
  847. #endif
  848. #if(USE_LYRIC_TWO_LINE)//WHH #13 301_070106
  849. OledCopyArea(OLED_LYRIC_COL,OLED_LYRIC_ROW+16,OLED_LYRIC_END_COLUMN-OLED_LYRIC_COL,16,OLED_LYRIC_COL,OLED_LYRIC_ROW);
  850. OledShowIconNew(1,IM_TAG_CLEAR,OLED_LYRIC_COL,OLED_LYRIC_ROW+16);
  851. if(!(gxbShowLyricPoint>=gxbLrcString[1]+2)) //tne 2007/01/17 #2
  852. {
  853. gfTransparent=TRUE;
  854. gxbShowLyricPoint+=StrShowString(gxbLrcString+gxbShowLyricPoint,OLED_LYRIC_COL,OLED_LYRIC_ROW+16,gxbLrcString[1]-(gxbShowLyricPoint-2));
  855. gfTransparent=FALSE;
  856. }
  857. /*if(!(gxbShowLyricPoint>=gxbLrcString[1]+2))
  858. {
  859. OledShowIconNew(1,IM_LYRIC_CLEAR,OLED_LYRIC_COL,OLED_LYRIC_ROW+16);
  860. gxbShowLyricPoint+=StrShowString(gxbLrcString+gxbShowLyricPoint,OLED_LYRIC_COL,OLED_LYRIC_ROW+16,gxbLrcString[1]-(gxbShowLyricPoint-2)+1);
  861. }*/
  862. #else
  863. gxbShowLyricPoint += StrShowString(gxbLrcString+gxbShowLyricPoint,OLED_LYRIC_END_COLUMN-gxbLcdLyricScrollPix-LCD_SCROLL_WIDTH+1,OLED_LYRIC_ROW,1);
  864. #endif
  865. #if(OLED_LYRIC_END_COLUMN!=MAX_COLNUM)
  866. gxbLcdLimitCol=MAX_COLNUM;
  867. #endif
  868. gxbLcdLyricScrollPix = gxbLcdDispLimPix;
  869. if(gxbShowLyricPoint>=gxbLrcString[1]+2) // Scroll over...
  870. {
  871. LcdSetLyricDone();
  872. }
  873. else
  874. {
  875. #if(LCD_LYRIC_NORMAL_DELAY)
  876. gxbLyricScrollDelay=LCD_LYRIC_NORMAL_DELAY;
  877. #endif
  878. }
  879. //gxfSourceUnicode=STRING_TYPE_ASCII; //Lyric always use ASCII
  880. }
  881. #endif // USE_LYRIC_DISPLAY endif
  882. //tne 2005/11/25 #2
  883. #if( ((_PM_PLAY_MAIN_|_PM_FLIST_)&USE_TAG_DISPLAY)| (_PM_DVR_&!_PM_MENU_&UI_DISP_DIR_NAME) |_PM_SYS_|_PM_HST_|_PM_PHOTO_|(_PM_VIDEO_&!_PM_VD_MENU_))
  884. /*--------------------------------------------------------------------------
  885. Description:
  886. Copy short file name to gxbLcdShowFileName
  887. Arguments:
  888. pbFileName
  889. Global arguments:
  890. gxbLcdShowFileName
  891. Returns: 
  892. --------------------------------------------------------------------------*/
  893. void LcdCopyShortFileName(PBYTE pbFileName) large
  894. {
  895. BYTE bI,bJ;
  896. //copy short file name
  897. //tne 512 tag
  898. #if(_PM_PLAY_MAIN_)
  899. bJ=0;
  900. gxbNameBufStrType[TAG_FNAME_BUF_IDX]=STRING_TYPE_ASCII;
  901. #else
  902. bJ=2;
  903. gxbLcdShowFileName[0]=STRING_TYPE_ASCII;
  904. #endif
  905. for(bI=0;bI<11;bI++)
  906. {
  907. if(bI==8)
  908. {
  909. if(pbFileName[bI]>32) // add by tne 2005/05/10
  910. {
  911. gxbLcdShowFileName[bJ]='.';
  912. bJ++;
  913. }
  914. else
  915. break;
  916. }
  917. if(pbFileName[bI]>32) //skip space or control code
  918. {
  919. gxbLcdShowFileName[bJ]=pbFileName[bI];
  920. bJ++;
  921. }
  922. }
  923. //tne 512 tag
  924. #if(_PM_PLAY_MAIN_)
  925. gxwNameBufLen[TAG_FNAME_BUF_IDX]=bJ;
  926. #else
  927. gxbLcdShowFileName[1]=bJ-2;
  928. #endif
  929. }
  930. #endif
  931. //#if(_PM_FLIST_|_PM_SYS_|_PM_PHOTO_|(_PM_VIDEO_&!_PM_VD_MENU_)) //tne 2005/11/25 #2
  932. #if(_PM_FLIST_|_PM_SYS_|_PM_PHOTO_|(_PM_VIDEO_&_PM_VD_LIST_))
  933. /*--------------------------------------------------------------------------
  934. Description:
  935. Display a file name in file list
  936. Arguments:
  937. Global arguments:o
  938. Returns: 
  939. --------------------------------------------------------------------------*/
  940. //tne lcd scroll2 //Walace051227#1
  941. API void LcdShowFileList(struct FILE_INF_DATA xdata * pFileStruct,BYTE bPage) large
  942. {
  943. //WHH #8 301_061226
  944. //OledClearArea(SEG2,PAGE2PIXEL(bPage), OLED_MAX_COL-SEG2,LINE1); // OK
  945. //if(pbLongFileName[1]==0) //short file name //Walace051227#1 
  946.   bPage=bPage; // for uncall warning // Jeff070125#3
  947. //tne 2006/11/07 #1
  948. #if(!_PM_DVR_)
  949. if(pFileStruct->pbLongFileName[1]==0) //short file name //Walace051227#1 
  950. #endif
  951. {
  952. //LcdCopyShortFileName(pbFileName);  //Walace051227#1 
  953. LcdCopyShortFileName(pFileStruct->pbFileName);
  954. gxfSourceUnicode=STRING_TYPE_ASCII;
  955. gxbShowTagBase=gxbLcdShowFileName;
  956. }
  957. #if(!_PM_DVR_)
  958. else
  959. {
  960. gxfSourceUnicode=STRING_TYPE_UNICODE;
  961. //gxbShowTagBase=pbLongFileName; //Walace051227#1 
  962. pFileStruct->pbLongFileName[0]=STRING_TYPE_UNICODE;//Walace060213#3
  963. gxbShowTagBase=pFileStruct->pbLongFileName;  //Walace051227#1 
  964. }
  965. #endif
  966. #if(OLED_FLIST_END_COLUMN!=MAX_COLNUM)
  967. gxbLcdLimitCol=OLED_FLIST_END_COLUMN;
  968. #endif
  969. //WHH #8 301_061226(start)
  970. //gxwShowTagPoint=StrShowString(gxbShowTagBase+2,OLED_FLIST_COL,PAGE2PIXEL(bPage),gxbShowTagBase[1])+2;
  971.        // WHH 070109
  972. #if(_PM_VD_PLAY_)
  973. gxwShowTagPoint=StrShowString(gxbShowTagBase+2,UI_FILST_STRING_START,199,gxbShowTagBase[1])+2;    
  974. #else   
  975. gxwShowTagPoint=StrShowString(gxbShowTagBase+2,UI_FILST_STRING_START,UI_FILST_ROOT_ROW+(UI_FILST_TREE_ROW)*(bPage),gxbShowTagBase[1])+2;
  976. #endif
  977. //WHH #8 301_061226(end)
  978. //Walace060213#3 start
  979. //WHH #8 301_061226
  980. //if((OLED_FLIST_COL+StrStrAnsiLen(gxbShowTagBase+2,gxbShowTagBase[1]))<=(OLED_FLIST_END_COLUMN+1))
  981. if((UI_FILST_STRING_START+StrStrAnsiLen(gxbShowTagBase+2,gxbShowTagBase[1]))<=(OLED_FLIST_END_COLUMN+1))
  982. gfScrollFlag=FALSE;
  983. else
  984. gfScrollFlag=TRUE;
  985. //Walace060213#3 end
  986. #if(OLED_FLIST_END_COLUMN!=MAX_COLNUM)
  987. gxbLcdLimitCol=MAX_COLNUM;
  988. #endif
  989. gxbLcdTagScrollPix=gxbLcdDispLimPix;
  990. gxbTagScrollDelay=LCD_FLIST_START_DELAY;
  991. gxfSourceUnicode=STRING_TYPE_ASCII;
  992. }
  993. #endif  //(_PM_PLAY_|_PM_SYS_)
  994. //UI for class
  995. #if(_PM_CLIST_)
  996. API void LcdShowClassList(PBYTE pbClassName,BYTE bPage) large
  997. {
  998. // WHH #14 301_070106
  999. //OledClearArea(OLED_FLIST_COL,PAGE2PIXEL(bPage), OLED_FLIST_END_COLUMN-OLED_FLIST_COL+1,LINE1); // OK
  1000. // if(pbClassName[1]==0) //Walace051227#1 Remove
  1001. // return;
  1002. gxfSourceUnicode=pbClassName[0];
  1003. //gxbShowTagBase[0]=pbClassName[0]; //Walace060213#3 //tne 2006/03/25 #1
  1004. gxbShowTagBase=pbClassName;
  1005. #if(OLED_FLIST_END_COLUMN!=MAX_COLNUM)
  1006. gxbLcdLimitCol=OLED_FLIST_END_COLUMN;
  1007. #endif
  1008. //WHH #13 301_070107
  1009. //gxwShowTagPoint=StrShowString(gxbShowTagBase+2,OLED_FLIST_COL,PAGE2PIXEL(bPage),gxbShowTagBase[1])+2;
  1010. gxwShowTagPoint=StrShowString(gxbShowTagBase+2,UI_CLASSLST_STRING_START,UI_CLASSLST_START_ROW+(UI_CLASSLST_TREE_ROW)*(bPage),gxbShowTagBase[1])+2;
  1011. #if(OLED_FLIST_END_COLUMN!=MAX_COLNUM)
  1012. gxbLcdLimitCol=MAX_COLNUM;
  1013. #endif
  1014. //Walace060213#3 start
  1015. //if((OLED_FLIST_COL+StrStrAnsiLen(gxbShowTagBase+2,gxbShowTagBase[1]))<=(OLED_FLIST_END_COLUMN+1))
  1016. if((UI_CLASSLST_STRING_START+StrStrAnsiLen(gxbShowTagBase+2,gxbShowTagBase[1]))<=(OLED_FLIST_END_COLUMN+1)) //WHH #13 301_070107
  1017. gfScrollFlag=FALSE;
  1018. else
  1019. gfScrollFlag=TRUE;
  1020. //Walace060213#3 end
  1021. gxbLcdTagScrollPix=gxbLcdDispLimPix;
  1022. gxfSourceUnicode=STRING_TYPE_ASCII;
  1023. gxbTagScrollDelay=LCD_FLIST_START_DELAY;
  1024. }
  1025. #endif
  1026. #if(_PM_HST_)
  1027. /*--------------------------------------------------------------------------
  1028. Description:
  1029. Display a file name in file list in HOST module
  1030. Arguments:
  1031. bStartWord:Which word should file name start
  1032. When select source file, this is 4
  1033. When select target dir, this is 2
  1034. When it set LCD_AUTO_CENTER_COL, it will adjust to center
  1035. Global arguments:
  1036. Returns: 
  1037. --------------------------------------------------------------------------*/
  1038. //tne lcd scroll2
  1039. API void LcdShowFileList(PBYTE pbFileName,BYTE bPage,BYTE bStartWord) large
  1040. {
  1041. #if(OLED_FLIST_END_COLUMN!=MAX_COLNUM)
  1042. gxbLcdLimitCol=OLED_FLIST_END_COLUMN;
  1043. #endif
  1044. if(pbFileName[0]==0) //short file name
  1045. {
  1046. LcdCopyShortFileName(pbFileName+2); //050803
  1047. if(bStartWord==LCD_AUTO_CENTER_COL)
  1048. {
  1049. bStartWord = (OLED_MAX_SEGS - gxbLcdShowFileName[1])>>1;
  1050. OledClearArea(SEG0,PAGE2PIXEL(bPage),OLED_MAX_COL-SEG0,LINE1);
  1051. }
  1052. else
  1053. {
  1054.        OledClearArea(SEG2PIXEL(bStartWord),PAGE2PIXEL(bPage),OLED_MAX_COL-SEG2PIXEL(bStartWord),LINE1); //OK
  1055. }
  1056. gxfSourceUnicode=STRING_TYPE_ASCII;
  1057. gxbShowTagBase=gxbLcdShowFileName;
  1058. gxwShowTagPoint=StrShowString(gxbShowTagBase+2,SEG2PIXEL(bStartWord),PAGE2PIXEL(bPage),gxbShowTagBase[1])+2;
  1059. }
  1060. else //050803: long file name
  1061. {
  1062. gxfSourceUnicode=STRING_TYPE_UNICODE;
  1063. gxbShowTagBase=pbFileName;
  1064. gxbShowTagBase[0]=STRING_TYPE_UNICODE; //Walace060213#3
  1065. gxwShowTagPoint=StrShowString(gxbShowTagBase+2,OLED_FLIST_COL,PAGE2PIXEL(bPage),gxbShowTagBase[1])+2;
  1066. }
  1067. //Walace060213#3 start
  1068. if((OLED_FLIST_COL+StrStrAnsiLen(gxbShowTagBase+2,gxbShowTagBase[1]))<=(OLED_FLIST_END_COLUMN+1))
  1069. gfScrollFlag=FALSE;
  1070. else
  1071. gfScrollFlag=TRUE;
  1072. //Walace060213#3 end
  1073. #if(OLED_FLIST_END_COLUMN!=MAX_COLNUM)
  1074. //gxbLcdLimitCol=OLED_FLIST_END_COLUMN; //Walace051227#1 Remove
  1075. gxbLcdLimitCol=MAX_COLNUM;
  1076. #endif
  1077. gxbLcdTagScrollPix=gxbLcdDispLimPix;
  1078. gxbTagScrollDelay=LCD_FLIST_START_DELAY;
  1079. gxfSourceUnicode=STRING_TYPE_ASCII;
  1080. }
  1081. #endif
  1082. //#if(_PM_FLIST_|_PM_PHOTO_|_PM_SYS_|(_PM_VIDEO_&(!_PM_VD_MENU_)|_PM_CLIST_|_PM_HST_)
  1083. #if(_PM_FLIST_|_PM_PHOTO_|_PM_SYS_|(_PM_VIDEO_&_PM_VD_LIST_)|_PM_CLIST_|_PM_HST_) // WHH 070128
  1084. /*--------------------------------------------------------------------------
  1085. Description:
  1086. Scroll long file name in file list
  1087. Arguments:
  1088. pbFileName: display long file name array
  1089. bPage: display lcd page
  1090. Global arguments:
  1091. This function use Tag global variable
  1092. gxbTagScrollDelay
  1093. gxwShowTagPoint
  1094. gxbLcdTagScrollPix
  1095. Returns: 
  1096. --------------------------------------------------------------------------*/
  1097. //#if(_PM_FLIST_|_PM_PHOTO_|_PM_SYS_|_PM_VIDEO_)  // Jeff070125#5
  1098. #if(_PM_FLIST_|_PM_PHOTO_|_PM_SYS_|_PM_VD_LIST_)//|_PM_VD_MENU_)  // WHH 070128
  1099. //Walace051227#1
  1100. API BOOL LcdScrollFileList(struct FILE_INF_DATA xdata * pFileStruct, BYTE bPage,BOOL fReverse) large
  1101. //#else //#if(_PM_CLIST_|_PM_HST_|)
  1102. #else
  1103. API BOOL LcdScrollFileList(PBYTE pbFileName, BYTE bPage,BOOL fReverse) large
  1104. #endif
  1105. {
  1106. BYTE bWidth;
  1107. fReverse=fReverse;   // for uncall warning // Jeff07125#3
  1108. if(gxbTagScrollDelay) // Need More Delay
  1109. {
  1110. gxbTagScrollDelay--;
  1111. return FALSE;
  1112. }
  1113. //Walace051227#1 Remove start
  1114. /*
  1115.        #if(_PM_HST_) //Walace051027 #2
  1116. if(pbFileName[0]==0)  //short file name
  1117. return;
  1118. #elif(_PM_CLIST_)
  1119. #else
  1120. if(pbFileName[1]==0)  //short file name
  1121. return;
  1122. #endif
  1123. */
  1124. //Walace051227#1 Remove end
  1125. //No more scroll... display again
  1126. //if((gxwShowTagPoint>=pbFileName[1]+2))
  1127. if((gxwShowTagPoint>=gxbShowTagBase[1]+2))
  1128. {
  1129. #if(_PM_HST_) //050804
  1130.        /*  Walace051027 #2
  1131. if(pbFileName[0]==0)
  1132.     return;
  1133. */
  1134. // WHH #8 301_061226
  1135. gxwBGColor=UI_FILST_LIGHT_COLOT;
  1136. LcdShowFileList(pbFileName,bPage,2);
  1137. gxwBGColor=OLED_BG_COLOR;
  1138. // WHH #8 301_061226(end)
  1139. #elif(_PM_CLIST_)
  1140. // WHH #8 301_061226
  1141. gxwBGColor=UI_FILST_LIGHT_COLOT;
  1142. LcdShowClassList(pbFileName,bPage);
  1143.      gxwBGColor=OLED_BG_COLOR;
  1144. // WHH #8 301_061226(end)
  1145. #else
  1146. //LcdShowFileList(NULL,pbFileName,bPage); //Walace051227#1
  1147. // WHH #8 301_061226(start)
  1148. gxwBGColor=UI_FILST_LIGHT_COLOT;
  1149. LcdShowFileList(pFileStruct,bPage);
  1150. gxwBGColor=OLED_BG_COLOR;
  1151. // WHH #8 301_061226(end)
  1152. #endif
  1153. //if(fReverse) //Walace051227#1
  1154. //OledReverse(OLED_FLIST_COL,PAGE2PIXEL(bPage),OLED_FLIST_END_COLUMN-OLED_FLIST_COL+1,OLED_FLIST_HEIGHT);
  1155. // WHH #8 301_061226(end)
  1156. return TRUE;
  1157. }
  1158. // WHH #8 301_061226(start)
  1159. //OLED_SCROLL_TEXT(OLED_FLIST_COL,PAGE2PIXEL(bPage),OLED_TAG_END_COLUMN-OLED_FLIST_COL+1,OLED_FLIST_HEIGHT); //Walace060907#3
  1160. //OLED_SCROLL_TEXT(OLED_FLIST_COL,PAGE2PIXEL(bPage),OLED_FLIST_END_COLUMN-OLED_FLIST_COL+1,OLED_FLIST_HEIGHT); //Walace060907#3
  1161.        
  1162. // WHH 07019
  1163. #if(_PM_VD_PLAY_)
  1164. OLED_SCROLL_TEXT(UI_FILST_STRING_START,199,OLED_FLIST_END_COLUMN-UI_FILST_STRING_START+1,UI_FILST_ROW);  
  1165. #else
  1166. OLED_SCROLL_TEXT(UI_FILST_STRING_START,UI_FILST_ROOT_ROW+(UI_FILST_TREE_ROW)*(bPage),OLED_FLIST_END_COLUMN-UI_FILST_STRING_START+1,UI_FILST_ROW); //Walace060907#3
  1167. #endif
  1168. // WHH #8 301_061226(end)
  1169. //gxfSourceUnicode=pbFileName[0];   //Walace051226#1 mark
  1170.        gxfSourceUnicode=gxbShowTagBase[0];  //Walace051226#1 add
  1171. #if(OLED_FLIST_END_COLUMN!=MAX_COLNUM)
  1172. gxbLcdLimitCol=OLED_FLIST_END_COLUMN;
  1173. #endif
  1174. bWidth=OLED_FLIST_END_COLUMN-gxbLcdTagScrollPix-LCD_SCROLL_WIDTH+1;
  1175. //WHH #8 301_061226(start)
  1176. //gxwShowTagPoint+= StrShowString(gxbShowTagBase+gxwShowTagPoint,bWidth,PAGE2PIXEL(bPage),1);
  1177. // WHH 07019
  1178. #if(_PM_VD_PLAY_)
  1179. gxwShowTagPoint+= StrShowString(gxbShowTagBase+gxwShowTagPoint,bWidth,199,1);  
  1180. #else
  1181. gxwBGColor=UI_FILST_LIGHT_COLOT;
  1182. gxwShowTagPoint+= StrShowString(gxbShowTagBase+gxwShowTagPoint,bWidth,UI_FILST_ROOT_ROW+(UI_FILST_TREE_ROW)*(bPage),1);
  1183. gxwBGColor=OLED_BG_COLOR;
  1184. #endif
  1185. //if(fReverse)  //Walace051227#1
  1186. //    OledReverse(bWidth,PAGE2PIXEL(bPage),OLED_FLIST_END_COLUMN-bWidth+1,OLED_FLIST_HEIGHT);
  1187. //WHH #8 301_061226(end)
  1188. #if(OLED_FLIST_END_COLUMN!=MAX_COLNUM)
  1189. gxbLcdLimitCol=MAX_COLNUM;
  1190. #endif
  1191. gxbLcdTagScrollPix = gxbLcdDispLimPix;
  1192.        gxfSourceUnicode=STRING_TYPE_ASCII;  //Walace051227#1
  1193.    
  1194. //if((gxwShowTagPoint>=pbFileName[1]+2))    //Walace051227#1
  1195. if(gxwShowTagPoint>=gxbShowTagBase[1]+2) // Scroll over...
  1196. {
  1197. gxbTagScrollDelay=LCD_FLIST_END_DELAY; // Delay more time to see at least
  1198. return TRUE; //Walace051227#1
  1199. }
  1200. else
  1201. {
  1202. #if(LCD_FLIST_NORMAL_DELAY)
  1203. gxbTagScrollDelay=LCD_FLIST_NORMAL_DELAY;
  1204. #endif
  1205. return FALSE; //Walace051227#1
  1206. }
  1207. }
  1208. #endif
  1209. /*--------------------------------------------------------------------------
  1210. Description:
  1211. Display a file name in file list
  1212. Arguments:
  1213. Global arguments:o
  1214. Returns: 
  1215. --------------------------------------------------------------------------*/
  1216. /*
  1217. //tne lcd scroll2
  1218. API void LcdShowFileList(struct FILE_INF_DATA xdata * pFileStruct,BYTE bPage) large
  1219. {
  1220. OledClearArea(SEG2,PAGE2PIXEL(bPage), OLED_MAX_COL-SEG2,LINE1); // OK
  1221. if(pFileStruct->pbLongFileName[1]==0) //short file name
  1222. {
  1223. LcdCopyShortFileName(pFileStruct->pbFileName);
  1224. gxfSourceUnicode=STRING_TYPE_ASCII;
  1225. gxbShowTagBase=gxbLcdShowFileName;
  1226. }
  1227. else
  1228. {
  1229. gxfSourceUnicode=STRING_TYPE_UNICODE;
  1230. gxbShowTagBase=pFileStruct->pbLongFileName;
  1231. }
  1232. #if(OLED_FLIST_END_COLUMN!=MAX_COLNUM)
  1233. gxbLcdLimitCol=OLED_FLIST_END_COLUMN;
  1234. #endif
  1235.        gxwShowTagPoint=StrShowString(gxbShowTagBase+2,OLED_FLIST_COL,PAGE2PIXEL(bPage),gxbShowTagBase[1])+2;
  1236. #if(OLED_FLIST_END_COLUMN!=MAX_COLNUM)
  1237. gxbLcdLimitCol=MAX_COLNUM;
  1238. #endif
  1239. gxbLcdTagScrollPix=gxbLcdDispLimPix;
  1240. gxbTagScrollDelay=LCD_FLIST_START_DELAY;
  1241. gxfSourceUnicode=STRING_TYPE_ASCII;
  1242. }
  1243. */
  1244. //#if(_PM_VIDEO_)
  1245. /*--------------------------------------------------------------------------
  1246. Description:
  1247. Scroll long file name in file list
  1248. Arguments:
  1249. pbFileName: display long file name array
  1250. bPage: display lcd page
  1251. Global arguments:
  1252. This function use Tag global variable
  1253. gxbTagScrollDelay
  1254. gxwShowTagPoint
  1255. gxbLcdTagScrollPix
  1256. Returns: 
  1257. --------------------------------------------------------------------------*/
  1258. /*
  1259. API BOOL LcdScrollFileList(struct FILE_INF_DATA xdata * pFileStruct, BYTE bPage,BOOL fReverse) large
  1260. {
  1261. BYTE bWidth;
  1262. if(gxbTagScrollDelay) // Need More Delay
  1263. {
  1264. gxbTagScrollDelay--;
  1265. return FALSE;
  1266. }
  1267. //Walace051226#1 Remove
  1268. //if(pbFileName[1]==0)  //short file name
  1269. //return;
  1270. //No more scroll... display again
  1271. if((gxwShowTagPoint>=gxbShowTagBase[1]+2))
  1272. {
  1273. LcdShowFileList(pFileStruct,bPage);
  1274. if(fReverse)
  1275.         OledReverse(OLED_FLIST_COL,PAGE2PIXEL(bPage),OLED_FLIST_END_COLUMN-OLED_FLIST_COL+1,OLED_FLIST_HEIGHT);
  1276. return FALSE;
  1277. }
  1278. OLED_SCROLL_TEXT(OLED_FLIST_COL,PAGE2PIXEL(bPage),OLED_TAG_END_COLUMN-OLED_FLIST_COL+1,OLED_FLIST_HEIGHT);
  1279. //Walace051226#1  //gxbShowTagBase[0]
  1280. gxfSourceUnicode=gxbShowTagBase[0];
  1281. #if(OLED_FLIST_END_COLUMN!=MAX_COLNUM)
  1282. gxbLcdLimitCol=OLED_FLIST_END_COLUMN;
  1283. #endif
  1284. bWidth=OLED_FLIST_END_COLUMN-gxbLcdTagScrollPix-LCD_SCROLL_WIDTH+1;
  1285. gxwShowTagPoint += StrShowString(gxbShowTagBase+gxwShowTagPoint,bWidth,PAGE2PIXEL(bPage),1);
  1286. if(fReverse)
  1287.         OledReverse(bWidth,PAGE2PIXEL(bPage),OLED_FLIST_END_COLUMN-bWidth+1,OLED_FLIST_HEIGHT);
  1288. #if(OLED_FLIST_END_COLUMN!=MAX_COLNUM)
  1289. gxbLcdLimitCol=MAX_COLNUM;
  1290. #endif
  1291. gxbLcdTagScrollPix = gxbLcdDispLimPix;
  1292. gxfSourceUnicode=STRING_TYPE_ASCII;
  1293. ////Walace051226#1  //gxbShowTagBase[0]
  1294. if(gxwShowTagPoint>=gxbShowTagBase[1]+2) // Scroll over...
  1295. {
  1296. gxbTagScrollDelay=LCD_FLIST_END_DELAY; // Delay more time to see at least
  1297. return TRUE;
  1298. }
  1299. else
  1300. {
  1301. #if(LCD_FLIST_NORMAL_DELAY)
  1302. gxbTagScrollDelay=LCD_FLIST_NORMAL_DELAY;
  1303. #endif
  1304. return FALSE;
  1305. }
  1306. }
  1307. */
  1308. //#endif
  1309. //#if(_PM_PLAY_|_PM_REC_|_PM_FM_|_PM_SYS_|((_PM_SAVE_)&UI_USE_MODE_KEY)|_PM_HST_|_PM_VIDEO_|_PM_PHOTO_) //tne 2005/12/17
  1310. //#if(_PM_PLAY_|_PM_REC_|_PM_FM_|_PM_SYS_|_PM_HST_|_PM_VIDEO_|_PM_PHOTO_|_PM_CUSTOM_|_PM_PLAY_DEL_|_PM_DIR_DEL_) //WHH #4 301_061225
  1311. #if(_PM_PLAY_|_PM_REC_|_PM_FM_|_PM_SYS_|_PM_HST_|_PM_VIDEO_|_PM_PHOTO_|_PM_CUSTOM_|_PM_SAVE_) //WHH #4 301_061225  //tne 2007/01/24 #4
  1312. /*--------------------------------------------------------------------------
  1313. Description:
  1314. Get a Unicode String Length at Ansi mode.
  1315. For example, a string include 2 chinese words & 1 english word
  1316. The unicode string length is 6, and ansi string length is 5.
  1317. Arguments:
  1318. pbString: Unicode string
  1319. bLen: String Length in Unicode mode
  1320. Global arguments:
  1321. Returns: 
  1322. String Length in Ansi mode
  1323. --------------------------------------------------------------------------*/
  1324. API WORD StrStrAnsiLen(PBYTE pbString,BYTE bLen) //Walace060310#2
  1325. {
  1326. BYTE bI;
  1327. WORD wTotalLen; //Walace060310#2
  1328. wTotalLen=0;
  1329. if(gxfSourceUnicode==STRING_TYPE_UNICODE)
  1330. {
  1331. for(bI=1;bI<bLen;bI+=2)
  1332. {
  1333. if( (pbString[bI]==0) || (pbString[bI]==0x04) )
  1334. wTotalLen+=LCD_SMALL_FONT_WIDTH;
  1335. else
  1336. wTotalLen+=LCD_BIG_FONT_WIDTH;
  1337. }
  1338. }
  1339. else
  1340. {
  1341. //count CJK string len
  1342. if( (gxbLangueType==LANGUAGE_TYPE_TW) ||
  1343. (gxbLangueType==LANGUAGE_TYPE_CN) ||
  1344. (gxbLangueType==LANGUAGE_TYPE_JP) ||
  1345. (gxbLangueType==LANGUAGE_TYPE_KS) )
  1346. {
  1347. for(bI=0;bI<bLen;bI++)
  1348. {
  1349. if(pbString[bI]<0x80)
  1350. { wTotalLen=wTotalLen+LCD_SMALL_FONT_WIDTH; }
  1351. else
  1352. {
  1353. wTotalLen=wTotalLen+LCD_BIG_FONT_WIDTH;
  1354. bI++;
  1355. }
  1356. }
  1357. }
  1358. else
  1359. {
  1360. wTotalLen=bLen*LCD_SMALL_FONT_WIDTH;
  1361. }
  1362. }
  1363. return wTotalLen; //Walace060310#2
  1364. }
  1365. /*--------------------------------------------------------------------------
  1366. Description:
  1367. Show system string form flash
  1368. Note. can't across 2 segment!!
  1369. Arguments:
  1370. wStrNum: String number
  1371. bPage: show locate page
  1372. bColNum: show locate col(Note.If use LCD_AUTO_CENTER_COL, will auto center)
  1373. bLen: string len
  1374. Global arguments:
  1375. gxbStringBuffer String buffer
  1376. gxbLangueType Use language type
  1377. Returns: 
  1378. BYTE: System string length pixel
  1379. --------------------------------------------------------------------------*/
  1380. #if(_PM_FM_|_PM_PHOTO_|_PM_VD_MENU_)
  1381. API BYTE StrShowSysString(WORD wStrNum,BYTE bColStart,BYTE bRowStart) large  //Walace060918#1
  1382. #else
  1383. API BYTE StrShowSysString(WORD wStrNum,BYTE bColStart,BYTE bRowStart)  //Walace060918#1
  1384. #endif
  1385. #if(USE_SYS_STR_SCROLL&(_PM_MENU_|_PM_SYS_|_PM_FM_|_PM_VD_MENU_))
  1386. {
  1387. BYTE bI;
  1388. WORD wSector;
  1389. WORD wTemp;
  1390. #if(_PM_PLAY_MAIN_)
  1391. // XBYTE xbgxbbuf[16];
  1392. #else
  1393. #define xbgxbbuf gxbStrBase
  1394. #endif
  1395. #define wOffset wStrNum
  1396. #define bLen gxbFontData[wOffset]
  1397. wSector = wStrNum/SYS_STR_NUM_PER_SEC;
  1398. wOffset = (wStrNum%SYS_STR_NUM_PER_SEC)*(SYS_STR_MAX_WORDS+1);
  1399. // bSector=(wOffset>>9);
  1400. // wOffset=(wOffset&0x1FF);
  1401. NandReadPhySec(gxwStringTable+wSector,1,SRAM_FONT_ADDR);
  1402. for(bI=0;bI<bLen;bI++)
  1403. gxbStringBuffer[bI]=gxbFontData[bI+wOffset+1];
  1404. if((gxbLangueType==LANGUAGE_TYPE_HEB)||(gxbLangueType==LANGUAGE_TYPE_ARA))
  1405. {
  1406. ;
  1407. }
  1408. //tne 2005/08/03
  1409. //System string code type (Unicode or ASCII)
  1410. switch(gxbLangueType)
  1411. {
  1412. default:
  1413. gxfSourceUnicode=STRING_TYPE_ASCII;
  1414. break;
  1415. //case ??
  1416. // gxfSourceUnicode=STRING_TYPE_UNICODE;
  1417. }
  1418. //gxfSourceUnicode = cbSysStrCodeType[gxbLangueType];
  1419. //use bSector to keep string len for return
  1420.        wSector=StrStrAnsiLen(gxbStringBuffer,bLen);
  1421. if((wSector)>LCD_STR_WIDTH)
  1422. {
  1423. gxbSysStringScrollTag=1;
  1424. gxbStringUnicode=gxfSourceUnicode;
  1425. gxbStringLen=bLen;
  1426. gxbStringRow=bRowStart;
  1427. if(((gxbLangueType!=LANGUAGE_TYPE_HEB)&&(gxbLangueType!=LANGUAGE_TYPE_ARA))||((gxbLangueType==LANGUAGE_TYPE_HEB)&&(!gxbHebExistFlag))
  1428. ||((gxbLangueType==LANGUAGE_TYPE_ARA)&&(!gxbHebExistFlag)))
  1429. {
  1430. if(bColStart==LCD_AUTO_CENTER_COL)
  1431. {
  1432. gxbStringColStart=LCD_STR_START_COLUMN;
  1433. }
  1434. else
  1435. {
  1436. gxbStringColStart=bColStart;
  1437. }
  1438. gxbStringPoint=StrShowString(gxbStringBuffer,gxbStringColStart,gxbStringRow,((LCD_STR_END_COLUMN-gxbStringColStart+1)/8)*(gxbStringUnicode+1));
  1439. gxbLcdStrScrollPix=0;
  1440.          gxbSysStringScrollDelay=LCD_STR_START_DELAY;
  1441. }
  1442. else
  1443. {
  1444. if(bColStart==LCD_AUTO_CENTER_COL)
  1445. {
  1446. gxbStringColStart=LCD_STR_END_COLUMN;
  1447. bColStart=LCD_STR_END_COLUMN;
  1448. }
  1449. else
  1450. {
  1451. gxbStringColStart=LCD_STR_END_COLUMN-bColStart;
  1452. }
  1453. gxbStringPoint=StrShowString(gxbStringBuffer,gxbStringColStart,gxbStringRow,((gxbStringColStart-LCD_STR_START_COLUMN+1)/8)*(gxbStringUnicode+1));
  1454. gxbLcdStrScrollPix=0;
  1455.        gxbSysStringScrollDelay=LCD_STR_START_DELAY;
  1456. }
  1457. }
  1458. else
  1459. {
  1460. gxbSysStringScrollTag=0;
  1461. if(((gxbLangueType!=LANGUAGE_TYPE_HEB)&&(gxbLangueType!=LANGUAGE_TYPE_ARA))||((gxbLangueType==LANGUAGE_TYPE_HEB)&&(!gxbHebExistFlag))
  1462. ||((gxbLangueType==LANGUAGE_TYPE_ARA)&&(!gxbHebExistFlag)))
  1463. {
  1464.  if(bColStart==LCD_AUTO_CENTER_COL)               
  1465. StrShowString(gxbStringBuffer,LcdCenterColumn((BYTE)wSector),bRowStart,bLen);             
  1466.              else
  1467.       StrShowString(gxbStringBuffer,bColStart,bRowStart,bLen);
  1468. }
  1469.         else
  1470.         {
  1471.          if(bColStart==LCD_AUTO_CENTER_COL)               
  1472. StrShowString(gxbStringBuffer,MAX_COLNUM-LcdCenterColumn((BYTE)wSector),bRowStart,bLen);             
  1473.                   else
  1474.                   {    
  1475.                    if (wTemp == SYS_STR_TAG||wTemp == SYS_STR_ARTIST||wTemp==SYS_STR_ALBUM||wTemp==SYS_STR_FILE)
  1476.                    StrShowString(gxbStringBuffer,OLED_TAG_END_COLUMN,bRowStart,bLen);          
  1477.                   
  1478.                    else                  
  1479.                    StrShowString(gxbStringBuffer,LCD_STR_END_COLUMN,bRowStart,bLen);                  
  1480.                   }
  1481.          }
  1482. }
  1483. gxfSourceUnicode = STRING_TYPE_ASCII;
  1484. return wSector;
  1485. #undef wOffset
  1486. #undef bLen
  1487. }
  1488. #else
  1489. {
  1490. BYTE bI;
  1491. WORD wSector;
  1492. //WORD wTemp;
  1493. #if(_PM_PLAY_MAIN_)
  1494. // XBYTE xbgxbbuf[16];
  1495. #else
  1496. #define xbgxbbuf gxbStrBase
  1497. #endif
  1498. #define wOffset wStrNum
  1499. #define bLen gxbFontData[wOffset]
  1500. wSector = wStrNum/SYS_STR_NUM_PER_SEC;
  1501. wOffset = (wStrNum%SYS_STR_NUM_PER_SEC)*(SYS_STR_MAX_WORDS+1);
  1502. // bSector=(wOffset>>9);
  1503. // wOffset=(wOffset&0x1FF);
  1504. NandReadPhySec(gxwStringTable+wSector,1,SRAM_FONT_ADDR);
  1505. for(bI=0;bI<bLen;bI++)
  1506. gxbStringBuffer[bI]=gxbFontData[bI+wOffset+1];
  1507. if((gxbLangueType==LANGUAGE_TYPE_HEB)||(gxbLangueType==LANGUAGE_TYPE_ARA))
  1508. {
  1509. ;
  1510. }
  1511. //tne 2005/08/03
  1512. //System string code type (Unicode or ASCII)
  1513. switch(gxbLangueType)
  1514. {
  1515. default:
  1516. gxfSourceUnicode=STRING_TYPE_ASCII;
  1517. break;
  1518. //case ??
  1519. // gxfSourceUnicode=STRING_TYPE_UNICODE;
  1520. }
  1521. //gxfSourceUnicode = cbSysStrCodeType[gxbLangueType];
  1522. //use bSector to keep string len for return
  1523.        wSector=StrStrAnsiLen(gxbStringBuffer,bLen);
  1524. if(bColStart==LCD_AUTO_CENTER_COL)
  1525. StrShowString(gxbStringBuffer,LcdCenterColumn(wSector),bRowStart,bLen);
  1526. else
  1527.        StrShowString(gxbStringBuffer,bColStart,bRowStart,bLen);
  1528. gxfSourceUnicode = STRING_TYPE_ASCII;
  1529. return wSector;
  1530. #undef wOffset
  1531. #undef bLen
  1532. }
  1533. #endif
  1534. #endif
  1535. #if((_PM_PLAY_|_PM_SLS_)&!_PM_PLAY_PRC_) //tne 2006/02/24
  1536. //Check last cut word for CJK (Big5,GB,JIS...), If a CJK word was cut, return FALSE 
  1537. BOOL LcdChkCjkCutWord(PBYTE pbString, BYTE bLen)
  1538. {
  1539. BYTE bI;
  1540. if( (gxbLangueType==LANGUAGE_TYPE_TW) ||
  1541. (gxbLangueType==LANGUAGE_TYPE_CN) ||
  1542. (gxbLangueType==LANGUAGE_TYPE_JP) ||
  1543. (gxbLangueType==LANGUAGE_TYPE_KS) )
  1544. {
  1545. bI=0;
  1546. while(bI<bLen)
  1547. {
  1548. if(pbString[bI]<0x80)
  1549. bI++;
  1550. else
  1551. bI+=2;
  1552. }
  1553. if(bI>=(bLen+1)) //last word was cut
  1554. return FALSE;
  1555. //pbString[bLen-1]=' ';
  1556. }
  1557. return TRUE;
  1558. }
  1559. #endif
  1560. #if(_PM_PLAY_&UI_DISP_DIR_NAME&!_PM_MENU_)
  1561. /*--------------------------------------------------------------------------
  1562. Description:
  1563. Display dir-name
  1564. Arguments:
  1565. Global arguments:
  1566. gxbDispDirNameBuf
  1567. Returns: 
  1568. --------------------------------------------------------------------------*/
  1569. //CWORD cwIconDispDir[]={ICON_ROOT_DIR};
  1570. API void LcdShowDirName(void) large
  1571. {
  1572. //LcdCopyShortFileName
  1573. /*
  1574. LcdClearBlock(6,0,2,MAX_COLNUM+1);
  1575. LcdShowSysFont(cwIconDispDir,6,0,1);
  1576. if(gxbDispDirNameBuf[1]==0) //Root
  1577. { LcdShowSysString(SYS_STR_ROOT_DIR,6,16); }
  1578. else
  1579. {
  1580. gxfSourceUnicode=gxbDispDirNameBuf[0];
  1581. if(gxfSourceUnicode==STRING_TYPE_ASCII) //short file name
  1582. {
  1583. LcdCopyShortFileName(gxbDispDirNameBuf+2);
  1584. LcdShowString(gxbLcdShowFileName+2,6,16,gxbLcdShowFileName[1]);
  1585. }
  1586. else
  1587. { LcdShowString(gxbDispDirNameBuf+2,6,16,gxbDispDirNameBuf[1]); }
  1588. }
  1589. */
  1590. ;
  1591. }
  1592. #endif