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

📄 osdld.c

📁 车载电子影音系统dvd播放系统原程序代码
💻 C
📖 第 1 页 / 共 3 页
字号:
#include "winav.h"
#include <string.h>
#include "cc.h"
#include "cdinfo.h"
#include "hal.h"
#include "chips.h"
#include "navigate.h"
#include "setup.h"
#include "fmanager.h"
#include "osd.h"
#include "gdi.h"
#include "OSDLD.h"
#include "thumb.h"
#include "linear.h"

//***************************************************************************
//Note: Don't translate the following strings.
//The following messages are just for char transformation.
WORD code aLDRemain[][2] = {{1, CHAR_DASH_26},
                           {1, CHAR_DASH}};
WORD code aLDTimeSpace[][2] = {{1, CHAR_SPACE_26},
                             {1, CHAR_SPACE}};
WORD code aLDSlash[][2] = {{1, CHAR_SLASH_26},
                           {1, CHAR_SLASH}};
WORD code aLDUnknownTitlChapter[][6] = {{5, CHAR_DASH_26, CHAR_DASH_26, CHAR_SLASH_26, CHAR_DASH_26, CHAR_DASH_26},
                                        {5, CHAR_DASH, CHAR_DASH, CHAR_SLASH, CHAR_DASH, CHAR_DASH}};
//***************************************************************************

extern BYTE    DATA    _bOSDLang;
extern STATUS  gcShowStatus;
extern WORD _wOSDFMMaxStringSpace; //CoCo.236, support UNICODE string.
extern BYTE __bJolietTitle; //CoCo.236, support UNICODE string.
extern BYTE _bSpecialMode; //CoCo2.37
#ifdef PRESTOP_BEFORE_SETUP_AND_PROGRAM	//xuli2.37
extern BYTE __bPreCountStop;
extern BYTE __bProgramStop;
#endif

extern void Service_420(void);
extern WORD _wOSDVPShowTime;
extern BYTE _bOSDVPShowAllTime;
//jyliu.temp
BYTE __bNextOSD=0;

#ifndef GDI_4_BIT_OSD
//***************************************************************************
//  Function    :   _OSDLD_InitializeGDI
//  Abstract    :   This function will initialize the palette and draw the background 
//              :   for one-line display.
//  Arguments   :   none.
//  Return		:   none.
//  Side Effect :
//  Notes       :   
//***************************************************************************
void _OSDLD_InitializeGDI(void)
{    
    //Set the palette entry.
    GDI_ChangePALEntry(OSDLD_PALETTE_ENTRY_GENERAL_BACKGROUND, OSDLD_PALETTE_COLOR_GENERAL_BACKGROUND, TRUE);
    GDI_ChangePALEntry(OSDLD_PALETTE_ENTRY_REGION_TITLE_ITEM, OSDLD_PALETTE_COLOR_REGION_TITLE_ITEM, FALSE);
    GDI_ChangePALEntry(OSDLD_PALETTE_ENTRY_REGION_TITLE_INFO, OSDLD_PALETTE_COLOR_REGION_TITLE_INFO, FALSE);
    GDI_ChangePALEntry(OSDLD_PALETTE_ENTRY_REGION_CHAPTER_ITEM, OSDLD_PALETTE_COLOR_REGION_CHAPTER_ITEM, FALSE);
    GDI_ChangePALEntry(OSDLD_PALETTE_ENTRY_REGION_CHAPTER_INFO, OSDLD_PALETTE_COLOR_REGION_CHAPTER_INFO, FALSE);
    GDI_ChangePALEntry(OSDLD_PALETTE_ENTRY_REGION_TIME, OSDLD_PALETTE_COLOR_REGION_TIME, FALSE);
    GDI_ChangePALEntry(OSDLD_PALETTE_ENTRY_REGION_FOLDER_ITEM, OSDLD_PALETTE_COLOR_REGION_FOLDER_ITEM, FALSE);
    GDI_ChangePALEntry(OSDLD_PALETTE_ENTRY_REGION_FOLDER_INFO, OSDLD_PALETTE_COLOR_REGION_FOLDER_INFO, FALSE);
}
#endif

//***************************************************************************
//  Function    :   _OSDLD_ClearRegion
//  Abstract    :   This function will clear the region for one-line display.
//  Arguments   :   bClearRegion: The region that you want to clear.
//              :   bPos: The relative position of the region that you want to clear.
//  Return		:   none.
//  Side Effect :   none.
//  Notes       :   
//***************************************************************************
void _OSDLD_ClearRegion(BYTE bClearRegion, BYTE bPos)
{
    switch (bClearRegion)
    {
    case OSDLD_REGION_ALL:
        SET_RECT(__GDIParm.u.RectParm.rect, OSDLD_START_H, OSDLD_START_V, (OSDLD_START_H+OSDLD_WIDTH), (OSDLD_START_V+OSDLD_HEIGHT-1));
        break;
    case OSDLD_REGION_TITLE:
        SET_RECT(__GDIParm.u.RectParm.rect, 
            (OSDLD_REGION_TITLE_START_H+bPos), 
            OSDLD_START_V, 
            (OSDLD_REGION_TITLE_START_H+OSDLD_REGION_TITLE_WIDTH),
            (OSDLD_START_V+OSDLD_HEIGHT-1));
        break;
    case OSDLD_REGION_CHAPTER:
        SET_RECT(__GDIParm.u.RectParm.rect, 
            (OSDLD_REGION_CHAPTER_START_H+bPos), 
            OSDLD_START_V, 
            (OSDLD_REGION_CHAPTER_START_H+OSDLD_REGION_CHAPTER_WIDTH),
            (OSDLD_START_V+OSDLD_HEIGHT-1));
        break;
    case OSDLD_REGION_TIME:
        SET_RECT(__GDIParm.u.RectParm.rect, 
            (OSDLD_REGION_TIME_START_H+bPos), 
            OSDLD_START_V, 
            (OSDLD_REGION_TIME_START_H+OSDLD_REGION_TIME_WIDTH),
            (OSDLD_START_V+OSDLD_HEIGHT-1));
        break;
    case OSDLD_REGION_PROGRAM: //CoCo1.07, add program icon 
        SET_RECT(__GDIParm.u.RectParm.rect, 
            (OSDLD_REGION_PROGRAM_START_H+bPos), 
            OSDLD_START_V, 
            (OSDLD_REGION_PROGRAM_START_H+OSDLD_REGION_PROGRAM_WIDTH),
            (OSDLD_START_V+OSDLD_HEIGHT-1));
        break;
    case OSDLD_REGION_FOLDER:
        SET_RECT(__GDIParm.u.RectParm.rect, 
            (OSDLD_REGION_FOLDER_START_H+bPos), 
            OSDLD_START_V, 
            (OSDLD_REGION_FOLDER_START_H+OSDLD_REGION_FOLDER_WIDTH),
            (OSDLD_START_V+OSDLD_HEIGHT-1));
        break;
    case OSDLD_REGION_TRACK:
        SET_RECT(__GDIParm.u.RectParm.rect, 
            (OSDLD_REGION_TRACK_START_H+bPos), 
            OSDLD_START_V, 
            (OSDLD_REGION_TRACK_START_H+OSDLD_REGION_TRACK_WIDTH),
            (OSDLD_START_V+OSDLD_HEIGHT-1));
        break;
        //CoCo2.37
    case OSDLD_REGION_TITLE_MENU:
        SET_RECT(__GDIParm.u.RectParm.rect, 
            (OSDLD_REGION_TITLE_MENU_START_H+bPos), 
            OSDLD_START_V, 
            (OSDLD_REGION_TITLE_MENU_START_H+OSDLD_REGION_TITLE_MENU_WIDTH),
            (OSDLD_START_V+OSDLD_HEIGHT-1));
        break;
    default:
        break;
    }
 
    __GDIParm.u.RectParm.bColor = OSDLD_PALETTE_ENTRY_GENERAL_BACKGROUND;
    
    GDI_FillRect((PPARM_RECT)&__GDIParm);
}


//***************************************************************************
//  Function    :   _OSDLD_ShowItem
//  Abstract    :   This function will show the item according to bMessage.
//  Arguments   :   bMessage: The message.
//  Return		:   none.
//  Side Effect :   none.
//  Notes       :   
//***************************************************************************
void _OSDLD_ShowItem(BYTE bMessage)
{
    _wOSDVPHPos = 0;

    _OSDLD_OutputString(bMessage);

    switch (bMessage)
    {
    case MSG_TITLE:
        _bOSDVPTemp = OSDLD_REGION_TITLE;
        break;
    case MSG_TRACK:
        _bOSDVPTemp = OSDLD_REGION_TRACK;
        break;
    case MSG_CHAPTER:
        _bOSDVPTemp = OSDLD_REGION_CHAPTER;
        break;
    case MSG_FOLDER:
        _bOSDVPTemp = OSDLD_REGION_FOLDER;
        break;
    default:
        break;
    }

    _OSDLD_DrawRegion(_bOSDVPTemp, OSDLD_UPDATE_ITEM, (BYTE)_wOSDVPHPos);
}

//***************************************************************************
//  Function    :   _OSDLD_ShowInfo
//  Abstract    :   This function will show the info. according to the message.
//  Arguments   :   bMessage: The message.
//  Return		:   none.
//  Side Effect :   none.
//  Notes       :   
//***************************************************************************
void _OSDLD_ShowInfo(BYTE bMessage)
{    
    if (_bSpecialMode)
    {
        if (!((__bDomain==VTSM_DOM) || (__bDomain==VMGM_DOM)))
        {
            if (bMessage == MSG_TITLE) //Recover "title" and "chapter" item.
            {
                _OSDLD_ShowItem(MSG_TITLE);
                _OSDLD_ShowItem(MSG_CHAPTER);
                _bSpecialMode = FALSE;
            }
        }
    }

    _OSDLD_GetInfoPos(bMessage);

    switch (bMessage)
    {
    case MSG_TITLE:
        //CoCo2.37
        if((__bDomain==VTSM_DOM) || (__bDomain==VMGM_DOM)) // Root Menu
        {
            _bSpecialMode = TRUE;
            _OSDLD_ShowTitleMenu();
        }
        else            
            _OSDLD_ShowTitleInfo();
        break;
    case MSG_CHAPTER:
        //CoCo2.37
        if ((__bDomain==VTSM_DOM) || (__bDomain==VMGM_DOM))
            return; //Don't show the chapter info. in title menu/DVD menu.

        _OSDLD_ShowChapterInfo();
        break;
    case MSG_TRACK:
        _OSDLD_ShowTrackInfo();
        break;
    case MSG_FOLDER:
        _OSDLD_ShowFolderInfo();
        break;
	case MSG_PROGRAM: //CoCo1.07, add program icon 
        if (__btPlayingProgram)
		{
			GDI_CopyCodeString(aLDProgramSymbol);
			_OSDLD_DrawRegion(OSDLD_REGION_PROGRAM, OSDLD_UPDATE_INFO, 0);
		}
        else
            _OSDLD_ClearRegion(OSDLD_REGION_PROGRAM, 0);
		break;
    default:
        break;
    }

}

//***************************************************************************
//  Function    :   OSDLD_Update
//  Abstract    :   Call this function when you want to update the one-line display.
//  Arguments   :   bMessage: the message.
//              :   wParam: The parameter of the message.
//  Return		:   TRUE: The message has been updated to the one-line display.
//              :   FALSE: The message is not supported.
//  Side Effect :   none.
//  Notes       :   
//***************************************************************************
BYTE OSDLD_Update(BYTE bMessage, WORD wParam)
{
    _bOSDMsg = bMessage;
    _wOSDInfo = wParam;

    GDI_LinkPseudoRegion(TRUE);

    _OSDLD_GetInfoPos(bMessage);

    switch (bMessage)
    {
    case MSG_INITIAL:
        _OSDLD_Initial();
        break;
#ifndef GDI_4_BIT_OSD
    case MSG_INITIAL_PALETTE:
        _OSDLD_InitializeGDI();
        break;
#endif
    case MSG_SHOWDISPLAY: //CoCo1.26, add new message for Display mode.
        if (__wDiscType == NO_DISC_IN_DRIVE)  
        {
            _OSDLD_ShowItem(MSG_TRACK);
            _wOSDVPHPos = GDI_GetStringWidth();
            GDI_CopyCodeString(aLDUnknownTrack);
            _OSDLD_DrawRegion(OSDLD_REGION_TRACK, OSDLD_UPDATE_INFO, (BYTE)_wOSDVPHPos);
            _OSDLD_ShowUnknownTime();
            GDI_LinkPseudoRegion(FALSE);
            return FALSE;
        }
        else
        {
            if (__wDiscType & BOOK_DVD)
            {
                _OSDLD_ShowItem(MSG_TITLE);
                _OSDLD_ShowItem(MSG_CHAPTER);
                
#ifndef PRESTOP_BEFORE_SETUP_AND_PROGRAM	//xuli2.37, after exit setup/program, do not show -:--:--
                if (__bCountStop != 0) //pre-stop or stop mode
#else
				if (((!__bSetupMode && (__bCountStop!=0))
					||(__bSetupMode && (__bPreCountStop!=0)))
					&& (__bProgramStop==0))
#endif
                {
                    _OSDLD_UpdateUnknownRegions();
                }
                else
                {
                    //update "Chapter" item
                    _OSDLD_ShowInfo(MSG_TITLE);
                    _OSDLD_ShowInfo(MSG_CHAPTER);

                    // brian0.91 
                    _bOSDMsg = __bShowTimeType;
                    _OSDLD_ShowTime();
                }
            }
            else
            {
                _OSDLD_ShowItem(MSG_TRACK);
                // brian
                // put Current Track info into _wOSDInfo
                _wOSDInfo = gcShowStatus.wCurrentTrack;
#ifndef PRESTOP_BEFORE_SETUP_AND_PROGRAM	//xuli2.37, after exit setup/program, do not show -:--:--
                if (__bCountStop != 0) //pre-stop or stop mode
#else
				if(((!__bSetupMode && (__bCountStop!=0))
					||(__bSetupMode && (__bPreCountStop!=0) ))
					&& (__bProgramStop==0))
#endif
                    _OSDLD_UpdateUnknownRegions();
                else
                {
                    _OSDLD_ShowInfo(MSG_TRACK);

                    // brian0.91 
                    //if (!(__wDiscType & CDROM_M1)) // JPEG don't show time
                    //LJY1.20, Gototime also not show, otherwise the incorrect time would be displayed due to gototime not yet finished.
//alex1.22a,20040204 combine gototime , search,bookmark
//Remvoe __btGoToTime , use bSearchMode  in OSDLD_Update
/**********************************************************************/
//                    if (!(__wDiscType & CDROM_M1) && (!__btGoToTime)) 
                    if (!(__wDiscType & CDROM_M1) && (!__bSearchMode)) 
/**********************************************************************/
                    {                       
                        _bOSDMsg = __bShowTimeType;
                        _OSDLD_ShowTime();
                    }
                }

                if (__wDiscType & CDROM_M1)
                {
                    _OSDLD_ShowItem(MSG_FOLDER);
                    _OSDLD_ShowInfo(MSG_FOLDER);                    
                }
            }

			_OSDLD_ShowInfo(MSG_PROGRAM);
        }

⌨️ 快捷键说明

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