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

📄 osdld.c

📁 车载电子影音系统dvd播放系统原程序代码
💻 C
📖 第 1 页 / 共 3 页
字号:
        break;
    case MSG_TITLE:
    case MSG_CHAPTER:
    case MSG_TRACK:
	case MSG_PROGRAM:
        _OSDLD_ShowInfo(bMessage);
        if (__wDiscType & CDROM_M1)
        {
            _OSDLD_ShowInfo(MSG_FOLDER);     
            
            //CoCo1.07, clear time region. If playing from MP3 to JPEG, need to clear the "time" region.
            _OSDLD_ClearRegion(OSDLD_REGION_TIME, 0);
        }
        break;
    case MSG_CLEAR_ALL:
        SET_RECT(__GDIParm.u.RectParm.rect, OSDLD_START_H, OSDLD_START_V, (OSDLD_START_H+OSDLD_WIDTH), (OSDLD_START_V+OSDLD_HEIGHT-1));
        _OSD_FillTransparentRegion();
        break;
    case MSG_ABSTIME:
    case MSG_RELTIME:
    case MSG_TITLE_TIME:
    case MSG_CHAPTER_TIME:
    case MSG_REMAIN_ABSTIME:
    case MSG_REMAIN_RELTIME:
    case MSG_REMAIN_TITLE_TIME:
    case MSG_REMAIN_CHAPTER_TIME:  
        //CoCo1.24a, add the judgement by LJY's comment.
        //To avoid showing transient OSD time for gototime.
        if (__bSearchMode == SEARCH_MODE_OFF)
            _OSDLD_ShowTime();
        break;
    case MSG_STOP:
        _wOSDInfo = gcShowStatus.wCurrentTrack;
#ifdef PRESTOP_BEFORE_SETUP_AND_PROGRAM	//xuli2.37, when setup/program stop, do not show -:--:--
			if((!__bSetupMode) && (__bProgramStop==0))
#endif		
        _OSDLD_UpdateUnknownRegions();
        _wOSDVPShowTime = 0xFFFF; //CoCo2.38, reset the time when MSG_STOP.
        _bOSDVPShowAllTime = TRUE;
    default:
        GDI_LinkPseudoRegion(FALSE);
        return FALSE;
    }

    GDI_LinkPseudoRegion(FALSE);

    return TRUE;
}

//***************************************************************************
//  Function    :   _OSDLD_UpdateUnknownRegions
//  Abstract    :   This function will update the unknown status for all regions.
//  Arguments   :   none.
//  Return		:   none.
//  Side Effect :   none.
//  Notes       :   
//***************************************************************************
void _OSDLD_UpdateUnknownRegions(void)
{
    //show unknown status
    if (__wDiscType & BOOK_DVD)
    {
#ifdef SHOW_UNKNOWN_STATE_WHEN_STOP
        //Update the title/chapter item again because we may stop from Title Menu or Root Menu.
        _OSDLD_ShowItem(MSG_TITLE);
        _OSDLD_ShowItem(MSG_CHAPTER);

        _OSDLD_ShowUnknownTitle();
        _OSDLD_ShowUnknownChapter();
#else
        _OSDLD_ShowInfo(MSG_TITLE);
        _OSDLD_ShowInfo(MSG_CHAPTER);
#endif
    }
    else
    {
#ifdef SHOW_UNKNOWN_STATE_WHEN_STOP
        _OSDLD_ShowUnknownTrack(); 
#else
        if ((__bCountStop == 2) && (!(__wDiscType & BOOK_CDROM)))
            _OSDLD_ShowUnknownTrack(); 
        else
            _OSDLD_ShowInfo(MSG_TRACK);
#endif
    }
    
    _OSDLD_ShowUnknownTime();

    //CoCo1.07, Update the program status in stop mode.
    _OSDLD_ShowInfo(MSG_PROGRAM);    
}

//***************************************************************************
//  Function    :   _OSDLD_OutputString
//  Abstract    :   This function will output the string of the item according to bMessage.
//  Arguments   :   bMessage: The message.
//  Return		:   none.
//  Side Effect :   none.
//  Notes       :   
//***************************************************************************
void _OSDLD_OutputString(BYTE bMessage)
{
    switch (bMessage)
    {
    case MSG_TITLE: //update title region
        GDI_CopyCodeString(aLDTitle[_bOSDLang]);
        break;
    case MSG_CHAPTER:
        GDI_CopyCodeString(aLDChapter[_bOSDLang]);
        break;
    case MSG_TRACK:
        GDI_CopyCodeString(aLDTrack[_bOSDLang]);
        break;
    case MSG_FOLDER:
        GDI_SetTextColor(TEXT_FG_COLOR, OSDLD_PALETTE_ENTRY_GENERAL_BACKGROUND);
        GDI_SetTextColor(TEXT_SHADOW_COLOR_1, GDI_ENTRY_4B_COLOR_BLACK);
        GDI_SetTextColor(TEXT_SHADOW_COLOR_2, GDI_ENTRY_4B_COLOR_WHITE);    
        GDI_CopyCodeString(aLDOpenFolderIcon);
        _OSDLD_DrawRegion(OSDLD_REGION_FOLDER, OSDLD_UPDATE_ICON, 0);
        //No shadow
        GDI_SetTextColor(TEXT_SHADOW_COLOR_1, OSDLD_PALETTE_ENTRY_GENERAL_BACKGROUND);
        GDI_SetTextColor(TEXT_SHADOW_COLOR_2, OSDLD_PALETTE_ENTRY_GENERAL_BACKGROUND);
        _wOSDVPHPos += GDI_GetStringWidth();
        GDI_CopyCodeString(aLDFolderItem);
        break;
    default:
        break;
    }
}

//***************************************************************************
//  Function    :   _OSDLD_ShowTitleInfo
//  Abstract    :   This function will show the info. of the title.
//  Arguments   :   none.
//  Return		:   none.
//  Side Effect :   none.
//  Notes       :   
//***************************************************************************
void _OSDLD_ShowTitleInfo(void)
{
    _bOSDIndex = 1;
    //_bDispTitle or __bTitle for current value?
    OSD_OutputNumFromIndex(__bTitle, OSDLD_REGION_TITLE_NUMBER_INDEX);
    __wGDIString[_bOSDIndex++] = aLDSlash[OSDLD_REGION_TITLE_NUMBER_INDEX][1]; //to be modified to "/"
    OSD_OutputNumFromIndex(__bTitle_Ns, OSDLD_REGION_TITLE_NUMBER_INDEX);

    _OSDLD_DrawRegion(OSDLD_REGION_TITLE, OSDLD_UPDATE_INFO, (BYTE)_wOSDVPHPos); 
}   

//CoCo2.37
//***************************************************************************
//  Function    :   _OSDLD_ShowTitleMenu
//  Abstract    :   
//  Arguments   :   none.
//  Return		:   none.
//  Side Effect :   none.
//  Notes       :   
//***************************************************************************
void _OSDLD_ShowTitleMenu(void)
{
    if (__bDomain == VTSM_DOM) // Root Menu
    {
        GDI_CopyCodeString(aVPRootMenu[_bOSDLang]);
    }
    else if (__bDomain == VMGM_DOM)  // Title Menu
    {
        GDI_CopyCodeString(aVPTitleMenu[_bOSDLang]);
    }

    _OSDLD_DrawRegion(OSDLD_REGION_TITLE_MENU, OSDLD_UPDATE_ITEM, 0); 
}   


//***************************************************************************
//  Function    :   _OSDLD_ShowChapterInfo
//  Abstract    :   This function will show the info. of the chapter.
//  Arguments   :   none.
//  Return		:   none.
//  Side Effect :   none.
//  Notes       :   
//***************************************************************************
void _OSDLD_ShowChapterInfo(void)
{
    _bOSDIndex = 1;
    //_wDispChapter or __wChapter?
    OSD_OutputNumFromIndex(__wChapter, OSDLD_REGION_CHAPTER_NUMBER_INDEX);
    __wGDIString[_bOSDIndex++] = aLDSlash[OSDLD_REGION_CHAPTER_NUMBER_INDEX][1]; //to be modified to "/"
    //_wDispChapter_Ns_Title or __wChapter_Ns_Title?
    OSD_OutputNumFromIndex(__wChapter_Ns_Title, OSDLD_REGION_CHAPTER_NUMBER_INDEX);

    _OSDLD_DrawRegion(OSDLD_REGION_CHAPTER, OSDLD_UPDATE_INFO, (BYTE)_wOSDVPHPos); 
}

//***************************************************************************
//  Function    :   _OSDLD_ShowTrackInfo
//  Abstract    :   This function will show the info. of track.
//  Arguments   :   none.
//  Return		:   none.
//  Side Effect :   none.
//  Notes       :   
//***************************************************************************
void _OSDLD_ShowTrackInfo(void)
{
    if (_wOSDInfo != 0)
    {
        OSD_OutputNum(_wOSDInfo, OSDLD_REGION_TITLE_NUMBER_INDEX);
    }
    else
        GDI_CopyCodeString(aLDUnknownTrack);

    _OSDLD_DrawRegion(OSDLD_REGION_TRACK, OSDLD_UPDATE_INFO, (BYTE)_wOSDVPHPos);
            
    _wOSDVPHPos += GDI_GetStringWidth();
    GDI_CopyCodeString(aLDSlash[OSDLD_REGION_TRACK_NUMBER_INDEX]);
    _OSDLD_DrawRegion(OSDLD_REGION_TRACK, OSDLD_UPDATE_INFO, (BYTE)_wOSDVPHPos);
    _wOSDVPHPos += GDI_GetStringWidth();

    if (__wDiscType & CDROM_M1)    
        OSD_OutputNum(__pwFMFilesOfDir[__bFMPlayingDir], OSDLD_REGION_TRACK_NUMBER_INDEX);
    else //VCD
    {
        if (_wOSDInfo != 0)
            OSD_OutputNum(gcShowStatus.wTotalTracks, OSDLD_REGION_TRACK_NUMBER_INDEX);
        else
            GDI_CopyCodeString(aLDUnknownTrack);
    }

    _OSDLD_DrawRegion(OSDLD_REGION_TRACK, OSDLD_UPDATE_INFO, (BYTE)_wOSDVPHPos);
}

//***************************************************************************
//  Function    :   _OSDLD_ShowFolderInfo
//  Abstract    :   This function will show current playing folder.
//  Arguments   :   none.
//  Return		:   none.
//  Side Effect :   none.
//  Notes       :   
//***************************************************************************
void _OSDLD_ShowFolderInfo(void)
{
    //dir name
    __bTemp = 0;

    GDI_CopyCodeString(aLDOpenFolderIcon);
    __wTemp = OSDLD_REGION_FOLDER_WIDTH - GDI_GetStringWidth();
    GDI_CopyCodeString(aLDFolderItem);
    __wTemp -= GDI_GetStringWidth();

#ifdef SUPPORT_UNICODE //CoCo2.36, support UNICODE string.
    _wOSDFMMaxStringSpace = __wTemp;
    while (__bTemp < FM_MAX_DIRNAME_LENGTH)
    {
        if (__bJolietTitle) //UNICODE
        {
            if ((__pFMDirNameList[__bFMPlayingDir].cName[__bTemp] == '\0') && (__pFMDirNameList[__bFMPlayingDir].cName[__bTemp+1] == '\0'))
                break;

            __wGDIString[__bTemp/2+1] = MAKEWORD(__pFMDirNameList[__bFMPlayingDir].cName[__bTemp+1], __pFMDirNameList[__bFMPlayingDir].cName[__bTemp]);
            __bTemp += 2;
        }
        else //ASCII
        {
            if (__pFMDirNameList[__bFMPlayingDir].cName[__bTemp] == '\0')
                break;

            __wGDIString[__bTemp+1] = __pFMDirNameList[__bFMPlayingDir].cName[__bTemp];
            __bTemp++;
        }
    }

    if (__bJolietTitle)
        __wGDIString[0] = (__bTemp >> 1);    
    else
        __wGDIString[0] = __bTemp;
#else
    while (__pFMDirNameList[__bFMPlayingDir].cName[__bTemp] != '\0')
    {
        __wGDIString[__bTemp+1] = OSD_TransformChar(__pFMDirNameList[__bFMPlayingDir].cName[__bTemp], OSDLD_REGION_FOLDER_FONT_INDEX);

		if (__wTemp > ((__wGDIString[__bTemp+1] & 0xF000) >> 10))
		{
			__wTemp -= ((__wGDIString[__bTemp+1] & 0xF000) >> 10);
			__bTemp++;
		}
        else
            break;

        if (__bTemp > OSDLD_MAX_DIRNAME_LENGTH)
        {
            __bTemp = OSDLD_MAX_DIRNAME_LENGTH;
            break;
        }
    }
#endif

    __wGDIString[0] = __bTemp;

    _OSDLD_DrawRegion(OSDLD_REGION_FOLDER, OSDLD_UPDATE_INFO, (BYTE)_wOSDVPHPos);

    /*
    _wOSDVPHPos += GDI_GetStringWidth();
    GDI_CopyCodeString(aLDFolderPath);
    _OSDLD_DrawRegion(OSDLD_REGION_FOLDER, OSDLD_UPDATE_INFO, (BYTE)_wOSDVPHPos);
    
    //file name
    _wOSDVPHPos += GDI_GetStringWidth();
    _OSDFM_CopyFileString((WORD)(__wPlayItem-1), OSDLD_REGION_FOLDER_FONT_INDEX);
    _OSDLD_DrawRegion(OSDLD_REGION_FOLDER, OSDLD_UPDATE_INFO, (BYTE)_wOSDVPHPos);
    */
}

//***************************************************************************
//  Function    :   _OSDLD_DrawRegion
//  Abstract    :   This function will draw the region.
//  Arguments   :   bRegion: The region you want to draw.
//              :   bType: OSDLD_UPDATE_ITEM: You want to draw the item.
//              :          OSDLD_UPDATE_INFO: You want to draw the info.
//              :   bPos: The relative position of the region.
//  Return		:   none.
//  Side Effect :   none.
//  Notes       :   
//***************************************************************************
// Brian1.21,
// limit color usage in Display mode
// for Item ==> use WHITE color
// for Info ==> use YELLOW color
// for Status icons ==> use ORANGE color

#ifndef SUPPORT_COLORFUL_DISPLAY_MODE

void _OSDLD_DrawRegion(BYTE bRegion, BYTE bType, BYTE bPos)
{
    //clear all region except time region.
    if (bRegion != OSDLD_REGION_TIME)
        _OSDLD_ClearRegion(bRegion, bPos);

    GDI_SetTextColor(TEXT_BG_COLOR, OSDLD_PALETTE_ENTRY_GENERAL_BACKGROUND);
    _wOSDVPTemp = OSDLD_START_V + ((OSDLD_HEIGHT - GDI_GetStringHeight()) >> 1);

    // Brian1.21, assign Foreground color
    if (bRegion == OSDLD_REGION_PROGRAM)
        GDI_SetTextColor(TEXT_FG_COLOR, OSDLD_REGION_PROGRAM_COLOR); // Organg
    else
    if (bType == OSDLD_UPDATE_INFO)
    {
        GDI_SetTextColor(TEXT_FG_COLOR, OSDLD_REGION_TITLE_INFO_COLOR); // Yellow
    }
    else
    {
        GDI_SetTextColor(TEXT_FG_COLOR, OSDLD_REGION_TITLE_ITEM_COLOR); // White
    }

    
    switch (bRegion)

⌨️ 快捷键说明

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