⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 osdbmark.c

📁 ct952 source code use for Digital Frame Photo
💻 C
📖 第 1 页 / 共 3 页
字号:
#include    "winav.h"#include    "input.h"#include    "utl.h"#include    "osd.h"#include    "hal.h"#include    "cc.h"#include    "infofilter.h"#include    "linear.h"#include    "navigate.h"#include    "cell.h"#include    "gdi.h"#include "fontindex.h" //++CoCo2.37P#include    "osdbmark.h"#include    "osdprgm.h"#include    "osddsply.h"#include    "osdnd.h"#include    "setup.h"#include    "disp.h"#include "notransl.h"#ifdef SUPPORT_BOOKMARK#ifndef NO_DISC_MODE //CoCo2.37p#define OSDBMARK_MAIN_FILE#include "OSDString\\strextrn.h"extern  BYTE    __bTimeHour;extern  BYTE    __bTimeMin;extern  BYTE    __bTimeSec;extern  BYTE    __bGoToTimeNO;// Need to add "extern" in the future, use OSDPRGM insteadly// Note : The number in seconde element must be the same as the osdstr.h/*extern WORD aTitle[][7];extern WORD aChapter[][10];extern WORD aClear[][8];*/extern WORD aTitle[];extern WORD aChapter[];extern WORD aClear[];extern WORD aColon[];extern WORD aPlayIcon[];extern WORD aArrowDown[];extern WORD aArrowUp[]; extern WORD aClearIcon[];extern PARM_FRAME       _PRGM_FrameAttr;extern PARM_DRAW_STRING _PRGM_StrAttr;extern PARM_RECT        _PRGM_RectAttr;//#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       7#else#define MAX_ENTRY_NUM_SHOWN_IN_MAIN_FRAME       7 #endif// Brian1.24, this value will offset the entire Program UI#define BOOMKARK_GLOBAL_OFFSET     (20)#define ENTRY_HEIGHT        26 #define FRAME_THICKNESS     2  #define ARROW_HEIGHT        22    #ifdef PRESTOP_BEFORE_SETUP_AND_PROGRAM#define BOOKMARK_WIDTH       560 //#define BOOKMARK_HEIGHT      410#define BOOKMARK_HEIGHT     350#define BMARK_FRAME_X0      (BOOMKARK_GLOBAL_OFFSET) // Brian1.24//#define BMARK_FRAME_Y0	    (0)  #define BMARK_FRAME_Y0	    (OSDND_UPPER_BACKGROUND_BOTTOM + (8 - OSDND_UPPER_BACKGROUND_BOTTOM%8))#define BMARK_FRAME_X1      (BOOKMARK_WIDTH + BMARK_FRAME_X0) #define BMARK_FRAME_Y1      (BOOKMARK_HEIGHT + BMARK_FRAME_Y0)     #else#define BMARK_FRAME_X0      (50+BOOMKARK_GLOBAL_OFFSET) // Brian1.24#define BMARK_FRAME_Y0	    (OSDND_UPPER_BACKGROUND_BOTTOM + 1)  #define BMARK_FRAME_X1      (590+BOOMKARK_GLOBAL_OFFSET) // Brian1.24#define BMARK_FRAME_Y1      (OSDND_BOTTOM_BACKGROUND_START_V - 1)     #endif#define CENTER_FRAME_X0     BMARK_FRAME_X0#define CENTER_FRAME_Y0     (BMARK_FRAME_Y0 + 41)#define CENTER_FRAME_X1     BMARK_FRAME_X1#define CENTER_FRAME_Y1     (BMARK_FRAME_Y1 - 41)#define FRAME_Y0            (BMARK_FRAME_Y0 + 3 * ENTRY_HEIGHT + 5)#define MAIN_FRAME_X0       (80+BOOMKARK_GLOBAL_OFFSET) // Brian1.24#define MAIN_FRAME_Y0       FRAME_Y0#define MAIN_FRAME_X1       (320+BOOMKARK_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 CLEAR_HIGHLIGHT		0#define SET_HIGHLIGHT		1WORD _wOSDBOOKMARKString[8];WORD _wBookMark_Chapter[BOOKMARK_NO + 1];//Internal Functionsstatic void _ShowMainList(void);static void _ShowOneEntry(WORD wEntry);static void _ShowOneEntryNumber(WORD wNumber);static void _ShowTitleChapterTime(void);extern void _InitRect(PURECT pRect, WORD wLeft, WORD wTop, WORD wRight, WORD wBottom); //--CoCo1.20, reduce code size.static void _SetClearHighlight(BYTE bFlag);void _OSDBOOKMARK_ShowUI(void);void _OSDBOOKMARK_ClearUI(void);void _OSDBOOKMARK_DrawFrames(void);void _OSDBOOKMARK_InitPalette(void);void _OSDBOOKMARK_ProceedToNextMainEntry(void); //Kevin1.23DMTech//show entry fromextern BYTE    _bMainStart;     //current pos extern BYTE    _bMainHighlightPos; extern BYTE  __bTemp;BYTE    _bOSDBOOKMARKTemp, _bOSDBOOKMARKTemp1; //for temp use//  ****************************************************************************//  Function    :   OSDBOOKMARK_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 OSDBOOKMARK_Exit(BYTE bExitMode){    switch (bExitMode)    {    case OSD_UI_EXIT_ALL:        _OSDBOOKMARK_ClearUI();    case OSD_UI_EXIT_CONTROL_ONLY:        __wBookMark[0] = 0;        __btBookMark = FALSE;        break;    default:        break;    }}//  ****************************************************************************//  Function    :   OSDBOOKMARK_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 OSDBOOKMARK_ProcessKey(void){    BYTE bKeyStatus = INVALID_KEY;    DWORD dwCheckStill;    if ((__wDiscType & BOOK_PICTURECD) ||        (__bKeySource != KEY_FROM_ISR)) return KEY_BYPASS;    if (! ((__bKey == KEY_BOOKMARK) || __btBookMark) )    {        return KEY_BYPASS;    }    bKeyStatus = INVALID_KEY;    switch (__bKey)    {		///// Enter the following cases when in bookmark mode /////    case KEY_TVMODE:    case KEY_MUTE:    case KEY_VOL_UP:    case KEY_VOL_DOWN:    case KEY_KEYUP:    case KEY_KEYDOWN:    case KEY_PROGRAM:    case KEY_GOTOTIME:    case KEY_NO_KEY:        bKeyStatus = KEY_BYPASS;        break;    case KEY_UP:        __wBookMark[0]--;        if (__wBookMark[0] <= BOOKMARK_NO && __wBookMark[0] >= 1)        {            _SetClearHighlight(CLEAR_HIGHLIGHT);            if (_bMainHighlightPos>1)                _bMainHighlightPos--;             else            {#ifdef SUPPORT_CLEARALL_IN_PROGRAM                if (_bMainStart>0)#else                if (_bMainStart>1)#endif                {                       _bMainStart--;                    _ShowMainList();                 }                }                                            _SetClearHighlight(SET_HIGHLIGHT);        }        if ( __wBookMark[0] >BOOKMARK_NO)            __wBookMark[0]=BOOKMARK_NO;        if ( __wBookMark[0] <1)            __wBookMark[0]=1;        _ShowTitleChapterTime();        bKeyStatus = KEY_NO_KEY;        break;				    case KEY_DOWN:        __wBookMark[0]++;        if (__wBookMark[0] <= BOOKMARK_NO && __wBookMark[0] >= 1)        {            _SetClearHighlight(CLEAR_HIGHLIGHT);            _OSDBOOKMARK_ProceedToNextMainEntry();            _SetClearHighlight(SET_HIGHLIGHT);        }        if ( __wBookMark[0] >BOOKMARK_NO)            __wBookMark[0]=BOOKMARK_NO;        if ( __wBookMark[0] <1)            __wBookMark[0]=1;        _ShowTitleChapterTime();         bKeyStatus = KEY_NO_KEY;        break;						//Kevin1.05-3, page down    case KEY_NEXT:        _SetClearHighlight(CLEAR_HIGHLIGHT);		        if (_bMainStart-1+2*MAX_ENTRY_NUM_SHOWN_IN_MAIN_FRAME<=MAX_PROG_ITEM) //scroll down a whole page        {             _bMainStart += MAX_ENTRY_NUM_SHOWN_IN_MAIN_FRAME; //            __wBookMark[0] += MAX_ENTRY_NUM_SHOWN_IN_MAIN_FRAME;            //_bMainHighlightPos remains the same            _ShowMainList();        }        else if (_bMainStart+_bMainHighlightPos-1+MAX_ENTRY_NUM_SHOWN_IN_MAIN_FRAME<=MAX_PROG_ITEM) //scroll down not a whole page        {               _bMainStart=MAX_PROG_ITEM-MAX_ENTRY_NUM_SHOWN_IN_MAIN_FRAME+1;            // _bMainHighlightPos remains the same             //_bMainHighlightPos = _bMainStart+_bMainHighlightPos-1+MAX_ENTRY_NUM_SHOWN_IN_MAIN_FRAME-_bMainStart+1;				            _ShowMainList();        }         else if (_bMainStart+MAX_ENTRY_NUM_SHOWN_IN_MAIN_FRAME-1<MAX_PROG_ITEM) //scroll down not a whole page        {            _bMainStart=MAX_PROG_ITEM-MAX_ENTRY_NUM_SHOWN_IN_MAIN_FRAME+1;            // _bMainHighlightPos remains the same            //_bMainHighlightPos =MAX_PROG_ITEM-_bMainStart+1;   //last one            _ShowMainList();        } #ifdef SUPPORT_CIRCULAR_WRAP #ifdef SUPPORT_CLEARALL_IN_PROGRAM            else if (_bMainStart!=0) //avoid unnecessary redraw            {                _bMainStart = 0;                 _bMainHighlightPos = 2; //highlight 1. __-__  #else            else if (_bMainStart!=1) //avoid unnecessary redraw            {		_bMainStart = 1; 		_bMainHighlightPos = 1; //highlight 1. __-__ #endif 		_ShowMainList();            }#endif			        __wBookMark[0] = _bMainStart + _bMainHighlightPos - 1;	_SetClearHighlight(SET_HIGHLIGHT);        _ShowTitleChapterTime();	bKeyStatus = KEY_NO_KEY;	break;									//Kevin1.05-3, page up    case KEY_PREV:        _SetClearHighlight(CLEAR_HIGHLIGHT);		        if (_bMainStart>MAX_ENTRY_NUM_SHOWN_IN_MAIN_FRAME) //scroll up a whole page        {             _bMainStart -= MAX_ENTRY_NUM_SHOWN_IN_MAIN_FRAME; //            __wBookMark[0] -= MAX_ENTRY_NUM_SHOWN_IN_MAIN_FRAME;            //_bMainHighlightPos remains the same            _ShowMainList();        }        else if (_bMainStart+_bMainHighlightPos-1>MAX_ENTRY_NUM_SHOWN_IN_MAIN_FRAME) //scroll down not a whole page        {#ifdef SUPPORT_CLEARALL_IN_PROGRAM            _bMainStart=0;#else            _bMainStart=1;#endif            //_bMainHighlightPos = _bMainStart+_bMainHighlightPos-1-MAX_ENTRY_NUM_SHOWN_IN_MAIN_FRAME;               _ShowMainList();        }        else if (_bMainStart!=1) //scroll down not a whole page        {#ifdef SUPPORT_CLEARALL_IN_PROGRAM            _bMainStart=0;            _bMainHighlightPos=2;   //first one#else            _bMainStart=1;            _bMainHighlightPos=1;   //first one#endif            _ShowMainList();        } #ifdef SUPPORT_CIRCULAR_WRAP         else if (MAX_PROG_ITEM>MAX_ENTRY_NUM_SHOWN_IN_MAIN_FRAME)        {            _bMainStart=MAX_PROG_ITEM-MAX_ENTRY_NUM_SHOWN_IN_MAIN_FRAME+1;            _bMainHighlightPos=MAX_ENTRY_NUM_SHOWN_IN_MAIN_FRAME;            _ShowMainList();        }#endif           			        __wBookMark[0] = _bMainStart + _bMainHighlightPos - 1;        _SetClearHighlight(SET_HIGHLIGHT);        _ShowTitleChapterTime();        bKeyStatus = KEY_NO_KEY;        break;				    case KEY_LEFT:    case KEY_RIGHT:        break;				    case KEY_ENTER: //Kevin1.07, combine all the following keys    case KEY_PLAY_PAUSE: //Kevin1.06, add    case KEY_PLAY: //Kevin0.87, KEY_PLAY act as KEY_ENTER for some cases        //playing time        if (__wBookMark[__wBookMark[0]]!=0) //playing time        {            __bTimeHour= HIBYTE(__wBookMark[__wBookMark[0]]) /60 ;            __bTimeMin=  HIBYTE(__wBookMark[__wBookMark[0]]) %60 ;            __bTimeSec=  LOBYTE(__wBookMark[__wBookMark[0]]) ;            __bTitle=__bBookMark_Title[__wBookMark[0]];#ifdef SUPPORT_STILLRSM            //Aron2.38, prepare to bookmark to the still content            if(__bBookMarkIsStill[__wBookMark[0]] )            {                __bStillRSM = TRUE;                __bModeCELLTimeSearch= CELL_TIME_VOBU;                __dwTimeCELLTimeSearch= __dwBookMarkVOBU[__wBookMark[0]];                             }#endif                        __bKey = KEY_GOTOTIME_VALUE;            __btBookMark=FALSE;            _OSDBOOKMARK_ClearUI();            OSD_ChangeUI(OSD_UI_BOOKMARK, OSD_EXIT_UI);            bKeyStatus = KEY_TODO;        }        else //record time        {            if ( (__wDiscType & BOOK_DVD) )            {                // DVD_099bMicky, must give title parameter for UOP query                __bUOP_Parameter = __bTitle;                // must check Time Search#ifdef SUPPORT_STILLRSM                // Alex1.24, don't record bookmark time when non-title domain                if ( ! NV_QueryUOP (UOP_CAN_TIME_SEARCH) || (__bDomain !=TT_DOM) )#else                HAL_ReadInfo(HAL_INFO_STILL, &dwCheckStill);                                // Aron2.37, do not allow doing bookmark when playing still picture                // Alex1.24, don't record bookmark time when non-title domain                if ( ! NV_QueryUOP (UOP_CAN_TIME_SEARCH) || (__bDomain !=TT_DOM) || dwCheckStill )#endif                {                    bKeyStatus = INVALID_KEY;                    break;                }            }            // Alex1.24, don't record bookmark time when segment play item            else if (__wPlayItem > 999 )    // segment playitem            {                bKeyStatus = INVALID_KEY;                break;            }            _SetClearHighlight(CLEAR_HIGHLIGHT);            //VCD ,CDDA only use ABSTime            if (__wDiscType !=BOOK_DVD)            {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -