📄 osdprgm.c
字号:
#include "winav.h"#include "input.h"#include "osd.h"#include "hal.h"#include "cc.h"#include "gdi.h"#include "dvdinfo.h"#include "cdinfo.h"#include "linear.h"#include "navigate.h"#include "fmanager.h" //Kevin1.10#include "thumb.h" //Kevin1.10// Brian2.37, Program UI need to use 16 pixel CHAR_SPACE#ifdef SUPPORT_FONT_26#undef CHAR_SPACE#define CHAR_SPACE CHAR_SPACE16#endif#ifdef CT908_UI// Brian1.00, move to String.*#define OSDPRGM_MAIN_FILE#include "string.lan" // Brian1.07, use .lan file to include the string fileWORD code aDigit[] = {CHAR_0, CHAR_1, CHAR_2, CHAR_3, CHAR_4, CHAR_5, CHAR_6, CHAR_7, CHAR_8, CHAR_9};WORD code aArrowDown[] = {1, CHAR_N_DWN_16}; WORD code aArrowUp[] = {1, CHAR_N_UP_16}; #ifdef SUPPORT_SIMPLE_FM_PROGRAM //Kevin1.10 WORD code aDir[] = {1, CHAR_OPENFOLDER_26};WORD code aFile[] = {1, CHAR_N_TITLE};#endif//Brian1.00, move to String.*/*WORD code aProgram[][8]={ {7, CHAR_P, CHAR_R, CHAR_O, CHAR_G, CHAR_R, CHAR_A, CHAR_M}, {2, CHAR_BIAN, CHAR_ALBUM2} }; WORD code aPrgmInstr[][23] = { {22, CHAR_N_LEFT, CHAR_N_UP, CHAR_N_RIGHT, CHAR_N_DOWN, CHAR_MOUHOW, CHAR_SPACE_26, CHAR_S_26, CHAR_ee_26, CHAR_ll_26, CHAR_ee_26, CHAR_cc_26, CHAR_tt_26, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_N_PLAY, CHAR_MOUHOW, CHAR_SPACE_26, CHAR_P_26, CHAR_ll_26, CHAR_aa_26, CHAR_yy_26}, {16, CHAR_N_LEFT, CHAR_N_UP, CHAR_N_RIGHT, CHAR_N_DOWN, CHAR_MOUHOW, CHAR_SPACE_26, CHAR_SELECT1, CHAR_SELECT2, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_N_PLAY, CHAR_MOUHOW, CHAR_SPACE_26, CHAR_PLAY1, CHAR_PLAY2} }; WORD code aTitle[][6] = { {5, CHAR_T_26, CHAR_ii_26, CHAR_tt_26, CHAR_ll_26, CHAR_ee_26}, {2, CHAR_TITLE1, CHAR_TITLE2} };WORD code aChapter[][8] = { {7, CHAR_C_26, CHAR_hh_26, CHAR_aa_26, CHAR_pp_26, CHAR_tt_26, CHAR_ee_26, CHAR_rr_26}, {2, CHAR_CHAPTER1, CHAR_CHAPTER2} };WORD code aTrack[][6] = { {5, CHAR_T_26, CHAR_rr_26, CHAR_aa_26, CHAR_cc_26, CHAR_kk_26}, {2, CHAR_SINGLE2, CHAR_MU} };*/ extern BYTE DATA _bOSDLang;//#define SUPPORT_PRGM_NUM_INPUT //Kevin1.06 //Kevin1.24, move to customer.h//#define SUPPORT_CLEARALL_IN_PROGRAM//#define SUPPORT_CIRCULAR_WRAP //Kevin1.05, add#ifdef SUPPORT_CLEARALL_IN_PROGRAM#define MAX_ENTRY_NUM_SHOWN_IN_MAIN_FRAME 6 //7#define MAX_ENTRY_NUM_SHOWN_IN_TITLE_FRAME 5 //6#define MAX_ENTRY_NUM_SHOWN_IN_CHAPTER_FRAME 5 //6#else#define MAX_ENTRY_NUM_SHOWN_IN_MAIN_FRAME 5 //6#define MAX_ENTRY_NUM_SHOWN_IN_TITLE_FRAME 5 //6#define MAX_ENTRY_NUM_SHOWN_IN_CHAPTER_FRAME 5 //6#endif// Brian1.24, this value will offset the entire Program UI#define PROGRAM_GLOBAL_OFFSET (-16) //0#include "osdvp.h"// Brian2.37#ifdef SUPPORT_FONT_26#define ENTRY_HEIGHT 26#else#define ENTRY_HEIGHT 32#endif#define FRAME_THICKNESS 2 #define ARROW_HEIGHT 20 #define PRGM_FRAME_X0 (50+PROGRAM_GLOBAL_OFFSET) // Brian1.24#define PRGM_FRAME_Y0 OSDLD_START_V //60//30#ifdef USE_LARGE_FONT //CoCo2.30, tune the background for large font#define PRGM_FRAME_X1 (600+PROGRAM_GLOBAL_OFFSET) // Brian1.24#else#define PRGM_FRAME_X1 (590+PROGRAM_GLOBAL_OFFSET) // Brian1.24#endif#define PRGM_FRAME_Y1 395//400 #define MAIN_FRAME_X0 (100+PROGRAM_GLOBAL_OFFSET) // Brian1.24//#define MAIN_FRAME_Y0 130 //100#define FRAME_Y0 136 //130 //100///#ifdef SUPPORT_CLEARALL_IN_PROGRAM#define MAIN_FRAME_Y0 FRAME_Y0///#else///#define MAIN_FRAME_Y0 FRAME_Y0+ENTRY_HEIGHT///#endif#define MAIN_FRAME_X1 (350+PROGRAM_GLOBAL_OFFSET) // Brian1.24 //390#define MAIN_FRAME_Y1 MAIN_FRAME_Y0+MAX_ENTRY_NUM_SHOWN_IN_MAIN_FRAME*ENTRY_HEIGHT+2*FRAME_THICKNESS #define TITLE_FRAME_X0 (380+PROGRAM_GLOBAL_OFFSET) // Brian1.24 //410//#define TITLE_FRAME_Y0 MAIN_FRAME_Y0+ENTRY_HEIGHT#ifdef SUPPORT_CLEARALL_IN_PROGRAM#define TITLE_FRAME_Y0 FRAME_Y0+ENTRY_HEIGHT#else#define TITLE_FRAME_Y0 FRAME_Y0#endif#define TITLE_FRAME_X1 (450+PROGRAM_GLOBAL_OFFSET) // Brian1.24 //470#define TITLE_FRAME_Y1 TITLE_FRAME_Y0+MAX_ENTRY_NUM_SHOWN_IN_TITLE_FRAME*ENTRY_HEIGHT+2*FRAME_THICKNESS #ifdef SUPPORT_FONT_26 #define CHAPTER_FRAME_X0 (470+PROGRAM_GLOBAL_OFFSET) // Brian1.24 //490#else#define CHAPTER_FRAME_X0 (480+PROGRAM_GLOBAL_OFFSET) // Brian1.24 //490#endif//#define CHAPTER_FRAME_Y0 MAIN_FRAME_Y0+ENTRY_HEIGHT#ifdef SUPPORT_CLEARALL_IN_PROGRAM#define CHAPTER_FRAME_Y0 FRAME_Y0+ENTRY_HEIGHT#else#define CHAPTER_FRAME_Y0 FRAME_Y0#endif#define CHAPTER_FRAME_X1 (570+PROGRAM_GLOBAL_OFFSET) // Brian1.24 //550 //Kevin1.00 CHAPTER_FRAME_X1 for CDROM_M1. CHAPTER_FRAME_X1-20 for others#define CHAPTER_FRAME_Y1 CHAPTER_FRAME_Y0+MAX_ENTRY_NUM_SHOWN_IN_CHAPTER_FRAME*ENTRY_HEIGHT+2*FRAME_THICKNESS #define MAIN_FRAME 1#define TITLE_FRAME 2#define CHAPTER_FRAME 3#define CLEAR_HIGHLIGHT 0#define SET_HIGHLIGHT 1//Internal Functionsstatic void _ShowOneEntry(WORD wEntry);static void _ShowMainList(void);static void _ShowTitleList(void);static void _ShowChapterList(void);static void _SetClearHighlight(BYTE bFlag);void _OSDPRGM_OutputNum(WORD wNum, BYTE bDigit); //CoCo1.21void _OSDPRGM_InitialOutputString(WORD wChar); //CoCo1.21void _OSDPRGM_UpdateProgramChapter(BYTE bDigits); //CoCo1.21;void _OSDPRGM_UpdateChapterList(void); //CoCo1.21void _OSDPRGM_UpdateTitleList(void); //CoCo1.21void _OSDPRGM_ProceedToNextMainEntry(void); //Kevin1.23DMTech//MAX_PROG_ITEM //total # of tracks to be programmedBYTE _bTotalTitle; //total # of titles in the discWORD _wTotalChapter; //total # of chapters corresponding to the selected title//show entry fromBYTE _bMainStart; BYTE _bTitleStart; WORD _wChapterStart; //current pos BYTE _bMainHighlightPos; BYTE _bTitleHighlightPos;WORD _wChapterHighlightPos;//current frame BYTE _bCurrentFrame;extern BYTE IDATA __bTemp;BYTE _bOSDPRGMTemp, _bOSDPRGMTemp1; //for temp useWORD _wOSDPRGMTemp;#ifdef SUPPORT_PRGM_NUM_INPUT //Kevin1.06extern WORD __wNumberQueue; //declare a local var in OSDPRGM later => not necessayBYTE __bProgramTitle; WORD __wProgramChapter; BYTE _bPrgmDigitPos; #define PROGRAM_NUM_CURSOR_TITLE 0x1#define PROGRAM_NUM_CURSOR_CHAPTER 0x2 //static void _TitleChapterNumErr(BYTE bTitleOrChapter);static void _TitleChapterNumErr(void); //CoCo1.21, modify the function prototype#define TITLE_NUM_ERROR 0x1#define CHAPTER_NUM_ERROR 0x2#define TITLE_CHAPTER_NUM_ERROR (TITLE_NUM_ERROR | CHAPTER_NUM_ERROR)static BYTE _OSDPRGM_ProcessNumInput(BYTE bKey, WORD wParam);#define PRGM_NUMBERINPUT_CHECK 1#define PRGM_NUMBERINPUT_CLEAR 2#define PRGM_NUMBERINPUT_NUMBER 3#endif //#ifdef SUPPORT_PRGM_NUM_INPUT// *********************************************************************************// Function : OSDPRGM_Display// Description : Display UI when Enter/Exit Program UI// Arguments : bMessage, MSG_SETPROGRAM/MSG_CLEARPROGRAM// Return : None// Side Effect : None// *********************************************************************************//void OSDPRGM_Display(bMessage, wParam, bSec) //--CoCo, modify the function declaraction to remove unused argumentvoid OSDPRGM_Display(bMessage){ //Kevin1.00, fix the video hang/audio broken when invoking Program GUI HAL_PreFillBuffer(HAL_FILL_AV_BUFFER, NULL); if (bMessage == MSG_SETPROGRAM) //Enter Program UI { #ifdef MINI_OSD_REGION //CoCo2.30, borrow frame buffer to show OSD. GDI_ClearRegion(0); // clera the mini OSD region __bColorMode = COLOR_MODE_4_BIT; __dwRegionHeight = GDI_REGION_HEIGHT; // 460 // Need to set to the correct DRAM address __dwRegionTAddr = W99AV_ADDR_MPEG_FRAME_FOR_OS_T; //Use frame buffer. //0x35A00+0x26100(LOGO) __dwRegionBAddr = W99AV_ADDR_MPEG_FRAME_FOR_OS_B; //Use frame buffer. //0x5BB00+0x9A80((0x6F000-0x5BB00)/2) GDI_ClearRegion_By_RISC(0); GDI_InitialRegion (0); // initialize region to set it to 8-bit mode#endif GDI_SetMixRatio(GDI_GENERAL_MIX_RATIO); GDI_SetCurrentRegion(0); GDI_ActivateRegion(); //Initialization of Variables #ifdef SUPPORT_CLEARALL_IN_PROGRAM _bMainStart = 0; #else _bMainStart = 1; #endif _bTitleStart = 1; _wChapterStart = 1; #ifdef SUPPORT_CLEARALL_IN_PROGRAM _bMainHighlightPos = 2; //highlight 1. __-__ #else _bMainHighlightPos = 1; //highlight 1. __-__ #endif _bTitleHighlightPos = 1; _wChapterHighlightPos = 1; _bCurrentFrame = MAIN_FRAME; //outter frame GDI_FILL_RECT(PRGM_FRAME_X0, PRGM_FRAME_Y0, PRGM_FRAME_X1, PRGM_FRAME_Y1, GDI_ENTRY_4B_COLOR_GENERAL_BG_BLUE ); //Alan2.37, fix the drawing UI slowly when playing CDDA in Anti-Shock#ifndef SUPPORT_ANTISHOCK //Kevin1.00, fix the video hang/audio broken when invoking Program GUI HAL_PreFillBuffer(HAL_FILL_AV_BUFFER, NULL);#else if (BOOK_CDDA != __wDiscType) { HAL_PreFillBuffer(HAL_FILL_AV_BUFFER, NULL); }#endif GDI_SetTextColor(TEXT_BG_COLOR, GDI_ENTRY_4B_COLOR_GENERAL_BG_BLUE); GDI_SetTextColor(TEXT_FG_COLOR, GDI_ENTRY_4B_COLOR_WHITE); GDI_OUTPUT_TEXT(PRGM_FRAME_X0+25, PRGM_FRAME_Y0+20, aProgram[_bOSDLang]); GDI_OUTPUT_TEXT(PRGM_FRAME_X0+25, PRGM_FRAME_Y1-40, aPrgmInstr[_bOSDLang]); if (__wDiscType & BOOK_DVD) { GDI_OUTPUT_TEXT(TITLE_FRAME_X0, TITLE_FRAME_Y0-55, aTitle[_bOSDLang]); GDI_OUTPUT_TEXT(CHAPTER_FRAME_X0, CHAPTER_FRAME_Y0-55, aChapter[_bOSDLang]); } else if (!(__wDiscType & CDROM_M1)) //BOOK_VCD { GDI_OUTPUT_TEXT(TITLE_FRAME_X0, TITLE_FRAME_Y0-55, aTrack[_bOSDLang]); } #ifdef SUPPORT_SIMPLE_FM_PROGRAM //Kevin1.10 else { GDI_SetTextColor(TEXT_SHADOW_COLOR_1, GDI_ENTRY_4B_COLOR_GENERAL_BG_BLUE); //aDir&aFile is 4-color icon GDI_SetTextColor(TEXT_SHADOW_COLOR_2, GDI_ENTRY_4B_COLOR_WHITE); GDI_OUTPUT_TEXT(TITLE_FRAME_X0, TITLE_FRAME_Y0-55, aDir); GDI_OUTPUT_TEXT(CHAPTER_FRAME_X0, CHAPTER_FRAME_Y0-55, aFile); }#endif GDI_SetTextColor(TEXT_FG_COLOR, GDI_ENTRY_4B_COLOR_BLACK); //other texts always use BLACK color //main frame _ShowMainList(); _SetClearHighlight(SET_HIGHLIGHT); //title frame //uncomment when DVD/VCD is in the loader //DVD_ParseInfo ( DVD_TOTAL_TITLES, &__dwTemp, NULL ); //_bTotalTitle = (BYTE)__dwTemp; if (__wDiscType & BOOK_DVD) _bTotalTitle=__bTitle_Ns; //else if (__wDiscType & CDROM_M1) //PicCD/JPEG/MP3 // return; //later move to caller of OSDPRGM_Display()/OSDPRGM_ProcessKey() else if (__wDiscType & BOOK_CDDA) _bTotalTitle=(BYTE)__wTrackEnd; else if (!(__wDiscType & CDROM_M1)) //BOOK_VCD/BOOK_CVD/BOOK_SVCD _bTotalTitle=(BYTE)__wTrackEnd-1;#ifdef SUPPORT_SIMPLE_FM_PROGRAM //Kevin1.10 else //CDROM_M1 _bTotalTitle=__bFMTotalDirs;#endif _ShowTitleList(); _bCurrentFrame = MAIN_FRAME; /////highlight remains in the Main Frame //chapter frame: shown when a title is highlighted #ifdef SUPPORT_PRGM_NUM_INPUT //Kevin1.06 _OSDPRGM_ProcessNumInput(PRGM_NUMBERINPUT_CLEAR, NULL); //clear global vairables for number input #endif } else if (bMessage == MSG_CLEARPROGRAM) //Exit Program UI { //clear Search IR region GDI_FILL_RECT(PRGM_FRAME_X0, PRGM_FRAME_Y0, PRGM_FRAME_X1, PRGM_FRAME_Y1, GDI_ENTRY_4B_COLOR_TRANSPARENT ); }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -