📄 osdprgm.c
字号:
#include "winav.h"#include "input.h"#include "disp.h"#include "osd.h"#include "hal.h"#include "cc.h"#include "gdi.h"#include "fontindex.h" //++CoCo2.37P#include "dvdinfo.h"#include "linear.h"#include "navigate.h"#include "OSDPRGM.h"#include "infofilter.h"#include "utl.h"#include "osddsply.h"#include "osdnd.h"#include "setup.h"#include "notransl.h"#ifndef NO_PROGRAM_UI //++CoCo2.37p#ifndef NO_DISC_MODE //CoCo2.37p#define OSDPRGM_MAIN_FILE#include "OSDString\\strextrn.h"PARM_FRAME _PRGM_FrameAttr;PARM_DRAW_STRING _PRGM_StrAttr;PARM_RECT _PRGM_RectAttr;//show entry fromBYTE _bMainStart; BYTE _bMainHighlightPos; #ifdef SUPPORT_CLEARALL_IN_PROGRAM#define MAX_ENTRY_NUM_SHOWN_IN_MAIN_FRAME 6 #define MAX_ENTRY_NUM_SHOWN_IN_TITLE_FRAME 5 #define MAX_ENTRY_NUM_SHOWN_IN_CHAPTER_FRAME 5 #else#define MAX_ENTRY_NUM_SHOWN_IN_MAIN_FRAME 7 #define MAX_ENTRY_NUM_SHOWN_IN_TITLE_FRAME 5 #define MAX_ENTRY_NUM_SHOWN_IN_CHAPTER_FRAME 5 #endif// This value will offset the entire Program UI#define PROGRAM_GLOBAL_OFFSET_X (0) #define ENTRY_HEIGHT 26 #define FRAME_THICKNESS 2 #define ARROW_HEIGHT 22#ifdef PRESTOP_BEFORE_SETUP_AND_PROGRAM#define PROGRAM_WIDTH 612 #define PROGRAM_HEIGHT 350#define PRGM_FRAME_X0 (PROGRAM_GLOBAL_OFFSET_X)#define PRGM_FRAME_Y0 (OSDND_UPPER_BACKGROUND_BOTTOM + (8 - OSDND_UPPER_BACKGROUND_BOTTOM%8)) #define PRGM_FRAME_X1 (PROGRAM_WIDTH + PROGRAM_GLOBAL_OFFSET_X)#define PRGM_FRAME_Y1 (PROGRAM_HEIGHT + PRGM_FRAME_Y0)#else#define PRGM_FRAME_X0 (PROGRAM_GLOBAL_OFFSET_X)#define PRGM_FRAME_Y0 (OSDND_UPPER_BACKGROUND_BOTTOM + 1) #define PRGM_FRAME_X1 (616+PROGRAM_GLOBAL_OFFSET_X)#define PRGM_FRAME_Y1 (OSDND_BOTTOM_BACKGROUND_START_V - 1) #define PROGRAM_WIDTH (PRGM_FRAME_X1 - PRGM_FRAME_X0)#define PROGRAM_HEIGHT (PRGM_FRAME_Y1 - PRGM_FRAME_Y0)#endif // #ifdef PRESTOP_BEFORE_SETUP_AND_PROGRAM#define CENTER_FRAME_X0 PRGM_FRAME_X0 #define CENTER_FRAME_Y0 (PRGM_FRAME_Y0 + 41) #define CENTER_FRAME_X1 PRGM_FRAME_X1 #define CENTER_FRAME_Y1 (PRGM_FRAME_Y1 - 41) #define FRAME_Y0 (PRGM_FRAME_Y0 + 3 * ENTRY_HEIGHT + 5) #define MAIN_FRAME_X0 (40+PROGRAM_GLOBAL_OFFSET_X) #define MAIN_FRAME_Y0 FRAME_Y0#define MAIN_FRAME_X1 (280+PROGRAM_GLOBAL_OFFSET_X)#define MAIN_FRAME_Y1 (MAIN_FRAME_Y0+MAX_ENTRY_NUM_SHOWN_IN_MAIN_FRAME*ENTRY_HEIGHT+2*FRAME_THICKNESS)#define TITLE_FRAME_X0 (340+PROGRAM_GLOBAL_OFFSET_X)#ifdef SUPPORT_CLEARALL_IN_PROGRAM#define TITLE_FRAME_Y0 (FRAME_Y0+ENTRY_HEIGHT*2+FRAME_THICKNESS)#else#define TITLE_FRAME_Y0 (FRAME_Y0+ENTRY_HEIGHT*2)#endif#define TITLE_FRAME_X1 (400+PROGRAM_GLOBAL_OFFSET_X)#define TITLE_FRAME_Y1 (TITLE_FRAME_Y0+MAX_ENTRY_NUM_SHOWN_IN_TITLE_FRAME*ENTRY_HEIGHT+2*FRAME_THICKNESS)#define CHAPTER_FRAME_X0 (440+PROGRAM_GLOBAL_OFFSET_X)#ifdef SUPPORT_CLEARALL_IN_PROGRAM#define CHAPTER_FRAME_Y0 (FRAME_Y0+ENTRY_HEIGHT*2+FRAME_THICKNESS)#else#define CHAPTER_FRAME_Y0 (FRAME_Y0+ENTRY_HEIGHT*2)#endif#define CHAPTER_FRAME_X1 (520+PROGRAM_GLOBAL_OFFSET_X)#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_INPUT 2#define TITLE_FRAME 3#define CHAPTER_INPUT 4#define CHAPTER_FRAME 5 #define CLEAR_HIGHLIGHT 0#define SET_HIGHLIGHT 1WORD _wOSDPRGMString[8];//// for testing#include "ctkav_disp.h"#include "ctkav.h"extern DWORD _dwGDIPalette[256];DWORD dwTmp, *pdwPtr;//Internal Functionsstatic void _ShowInput(BYTE bInput, BYTE bBgColor);static void _ShowOneEntry(WORD wEntry);static void _ShowMainList(void);static void _ShowTitleList(void);static void _ShowChapterList(void);static void _SetClearHighlight(BYTE bFlag);void _OSDPRGM_ShowUI(void);void _OSDPRGM_ClearUI(void);void _OSDPRGM_DrawFrames(void);void _OSDPRGM_InitPalette(void);void _OSDPRGM_InitRect(PURECT pRect, WORD wLeft, WORD wTop, WORD wRight, WORD wBottom);void _OSDPRGM_OutputNum(WORD wNum, BYTE bDigit); //CoCo1.21void _OSDPRGM_UpdateProgramChapter(BYTE bDigits); //CoCo1.21;void _OSDPRGM_UpdateChapterList(void); //CoCo1.21void _OSDPRGM_UpdateTitleList(void); //CoCo1.21void _OSDPRGM_ProceedToNextMainEntry(void); //Kevin1.23DMTechvoid _OSDPRGM_FillRect(WORD wLeft, WORD wTop, WORD wRight, WORD wBottom); //CoCo1.20, reduce code size.void _OSDPRGM_DrawFrame(WORD wLeft, WORD wTop, WORD wRight, WORD wBottom); //CoCo1.20, reduce code size.void _OSDPRGM_DrawString(void); //CoCo1.20, reduce code size.void _OSDPRGM_SetStringPos(WORD wX, WORD wY); //CoCo1.20, reduce code size.void _OSDPRGM_DrawDynamicString(WORD *pwString); //CoCo1.20, reduce code size.extern void _InitRect(PURECT pRect, WORD wLeft, WORD wTop, WORD wRight, WORD wBottom); //CoCo1.20, reduce code size.//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 _bTitleStart; WORD _wChapterStart; //current pos BYTE _bTitleHighlightPos;WORD _wChapterHighlightPos;//current frame BYTE _bCurrentFrame;extern BYTE __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 necessay#ifdef PRESTOP_BEFORE_SETUP_AND_PROGRAMextern BYTE __bPreCountStop;#endif#define PROGRAM_NUM_CURSOR_TITLE 0x1#define PROGRAM_NUM_CURSOR_CHAPTER 0x2 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_Exit// Description : The OSD kernel will call this function to exit normally.// : This function can NOT send OSD_ChangeUI(xxx, OSD_EXIT_UI) to// : notify OSD kernel it exits.// Arguments : bExitMode // OSD_UI_EXIT_ALL : Exit control and clear the UI.// OSD_UI_EXIT_CONTROL_ONLY : Exit control only.// Return : // Side Effect :// ****************************************************************************void OSDPRGM_Exit(BYTE bExitMode){ switch (bExitMode) { case OSD_UI_EXIT_ALL: GDI_DeactivateRegion(); _OSDPRGM_ClearUI(); case OSD_UI_EXIT_CONTROL_ONLY: LINEAR_Program(LINEAR_PROGRAM_CLEAR, NULL_0); break; default: break; }}// ****************************************************************************// Function : OSDPRGM_ProcessKey// Description : Process the input key while in DVD/VCD Program mode// Arguments : // Return : KEY_NO_KEY , the input key is processed// : INVALID_KEY , the input key is not allowed under this mode// : KEY_xxx , main program needs to do more processing for the key.// Side Effect :// ****************************************************************************BYTE OSDPRGM_ProcessKey(void){ BYTE bKeyStatus; if ((__wDiscType & BOOK_PICTURECD) || (__bKeySource != KEY_FROM_ISR))return KEY_BYPASS; if (! ((__bKey == KEY_PROGRAM) || __btInputProgram)) { return KEY_BYPASS; } bKeyStatus = KEY_INVALID; switch (__bKey) { case KEY_TVMODE:/* case KEY_MUTE: case KEY_VOL_UP: case KEY_VOL_DOWN: case KEY_KEYUP: case KEY_KEYDOWN:*/ case KEY_GOTOTIME: case KEY_BOOKMARK: case KEY_NO_KEY: bKeyStatus = KEY_BYPASS; break; case KEY_SETUP:#ifdef SUPPORT_PRGM_NUM_INPUT //Kevin1.06 _OSDPRGM_ProcessNumInput(PRGM_NUMBERINPUT_CLEAR, NULL_0);#endif bKeyStatus = KEY_BYPASS; break; case KEY_PBC: if (__btInputProgram) { OSDPRGM_Exit(OSD_UI_EXIT_ALL); OSD_ChangeUI(OSD_UI_DVD_PROGRAM, OSD_EXIT_UI); } bKeyStatus = KEY_BYPASS; break; case KEY_UP:/*#ifdef SUPPORT_PRGM_NUM_INPUT //Kevin1.06 _OSDPRGM_ProcessNumInput(PRGM_NUMBERINPUT_CHECK, NULL);#endif*/ if (_bCurrentFrame==MAIN_FRAME) { #ifdef SUPPORT_PRGM_NUM_INPUT //Kevin1.06 _OSDPRGM_ProcessNumInput(PRGM_NUMBERINPUT_CHECK, NULL_0); _OSDPRGM_ProcessNumInput(PRGM_NUMBERINPUT_CLEAR, NULL_0);#endif _SetClearHighlight(CLEAR_HIGHLIGHT); if (_bMainHighlightPos>1) _bMainHighlightPos--; else {#ifdef SUPPORT_CLEARALL_IN_PROGRAM if (_bMainStart>0)#else if (_bMainStart>1)#endif { _bMainStart--; _ShowMainList(); } } } else if (_bCurrentFrame==TITLE_FRAME) { #ifdef SUPPORT_PRGM_NUM_INPUT //Kevin1.06 _OSDPRGM_ProcessNumInput(PRGM_NUMBERINPUT_CHECK, NULL_0);#endif _SetClearHighlight(CLEAR_HIGHLIGHT); _bOSDPRGMTemp = TRUE; if (_bTitleHighlightPos>1) _bTitleHighlightPos--; else { if (_bTitleStart>1) { _bTitleStart--; _ShowTitleList(); } else { _bOSDPRGMTemp = FALSE; // Move to TITLE_INPUT _bCurrentFrame = TITLE_INPUT; } } if (__wDiscType & BOOK_DVD) { if (_bOSDPRGMTemp) { DVD_ParseInfo ( DVD_TOTAL_CHAPTERS, &__dwTemp, (WORD)(_bTitleStart+_bTitleHighlightPos-1) ); _wTotalChapter = (WORD)__dwTemp;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -