?? osdld.c
字號:
#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);
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -