📄 osd.c
字号:
{
#ifndef NO_OSD
// align the last char to right
// space + mm:ss = 6 chars
//BC5380
__iCol-= ((6*ENGLISH_COLUMNS) + _OSD_GetTotalColumns(bIndex));
// build the text OSD to bitmap 1 from offset 0
_bIndexOffset=0;
_btBitmapRAM=1;
_bIndexArray=bIndex;
_OSD_BuildNewFonts ();
// must record the original data
// should if _bRMessageArray will be changed later
_bIndexOffset=bIndex[0];
__iCol+=ENGLISH_COLUMNS; //add one space
// __:__ = 5 chars
_bRMessageArray[0]=5;
_bRMessageArray[1]=(bMin/10)+CHAR_0; // mm
_bRMessageArray[2]=(bMin%10)+CHAR_0;
_bRMessageArray[3]=CHAR_MOUHOW;
_bRMessageArray[4]=(bSec/10)+CHAR_0; // ss
_bRMessageArray[5]=(bSec%10)+CHAR_0;
if (bMessage==MSG_GOTOTIME)
{
#ifndef GOTOTIME_LEFTTORIGHT
// the input sequence is from right to left
switch(_bTimeIndex)
{
case 0: //__:_x, update the 1 digit as input value
_bRMessageArray[5]=CHAR_UNDERLINE;
case 1: //__:xx, update the 1&2 digits as input value
_bRMessageArray[4]=CHAR_UNDERLINE;
case 2: //_x:xx, update the 1&2&3 digits as input value
_bRMessageArray[2]=CHAR_UNDERLINE;
case 3: //xx:xx, update the 4 digits as input value
_bRMessageArray[1]=CHAR_UNDERLINE;
break;
}
#else
// the input sequence is from left to right
switch(_bTimeIndex)
{
case 0: //x_:__
_bRMessageArray[1]=CHAR_UNDERLINE;
case 1: //xx:__
_bRMessageArray[2]=CHAR_UNDERLINE;
case 2: //xx:x_
_bRMessageArray[4]=CHAR_UNDERLINE;
case 3: //xx:xx
_bRMessageArray[5]=CHAR_UNDERLINE;
break;
}
#endif //#ifndef GOTOTIME_LEFTTORIGHT
}
#ifdef OSD_VERSION2
// set reverse effect except the first N chars
_wReverseFrom=0;
#endif
_btBitmapRAM=1;
_bIndexArray=_bRMessageArray;
_OSD_BuildNewFonts();
#endif //#ifndef NO_OSD
}
void _OSD_ShowDiscType(BYTE bCorner)
{
#ifndef NO_OSD
WORD wDiscType;
wDiscType=gcShowStatus.wDiscTypeVer;
if (wDiscType==NO_DISC_IN_DRIVE)
{
if (bCorner==RIGHT_UPPER)
{
//BC5380
__iCol-=(_OSD_GetTotalColumns(aMsgWeiFang)+_OSD_GetTotalColumns(aMsgDisc));
#ifdef ENGLISH_OSD
__iCol-=ENGLISH_COLUMNS;
#endif //#ifdef ENGLISH_OSD
}
_bIndexOffset=0;
_btBitmapRAM=1;
_bIndexArray=aMsgWeiFang;
_OSD_BuildNewFonts();
#ifdef ENGLISH_OSD
__iCol+=ENGLISH_COLUMNS;
#endif //#ifdef ENGLISH_OSD
_bIndexOffset=aMsgNo[0];
_btBitmapRAM=1;
_bIndexArray=aMsgDisc;
_OSD_BuildNewFonts();
return;
}
_bIndexArray=NULL;
switch(LOBYTE(wDiscType))
{
case BOOK_CDDA:
_bIndexArray=aMsgCDDA;
case BOOK_CDI:
if (!_bIndexArray)
_bIndexArray=aMsgCDI;
if (bCorner==RIGHT_UPPER)
__iCol-= _OSD_GetTotalColumns(bIndexArray);
_bIndexOffset=0;
_btBitmapRAM=1;
_OSD_BuildNewFonts();
break;
case BOOK_VCD:
if ((HIBYTE(wDiscType)) == (HIBYTE(VCD_KARAOKE)))
{
// KARAOKE CD= VCD 1.0
wDiscType=MAKEWORD(BOOK_VCD,HIBYTE(VCD_1_0));
}
if (bCorner==RIGHT_UPPER)
__iCol-= (7*ENGLISH_COLUMNS);
_bIndexOffset=0;
_btBitmapRAM=1;
_bIndexArray=aMsgVCD;
_OSD_BuildNewFonts();//aMsgVCD);//, 1, PART1);
_iCol++;
switch(HIBYTE(wDiscType))
{
case (HIBYTE(VCD_1_0)):
_bIndexArray=aMsgVCD10;
break;
case (HIBYTE(VCD_1_1)):
// for MP2, VCD100
if (gbtMP2Title)
_bIndexArray=aMsgVCD100;
else
_bIndexArray=aMsgVCD11;
break;
case (HIBYTE(VCD_2_0)):
// for MP2, VCD100
if (gbtMP2Title)
_bIndexArray=aMsgVCD100;
else
_bIndexArray=aMsgVCD20;
break;
}
_bIndexOffset=3;
_btBitmapRAM=1;
_OSD_BuildNewFonts();
break;
}
#endif //#ifndef NO_OSD
}
// *********************************************************************
// Function : _Power10
// Description : Calculate the value of 10 power N
// Arguments : cPower : the power value
// Return : the value
// Side Effect :
// *********************************************************************
WORD _Power10(char cPower)
{
WORD wPower10;
wPower10=1;
// must define as char, has signed
for (cPower;cPower>0;cPower--)
{
wPower10*=10;
}
return wPower10;
}
// *********************************************************************
// Function : _OSD_SetNumber
// Description : Convert each digit of number to index value
// Arguments : wNumber : number
// Return : digits of number
// Side Effect : The index array are stored at _bRMessageArray
// *********************************************************************
BYTE _OSD_SetNumber(WORD wNumber)
{
BYTE bDigitArray[5];
// must define char, has signed
char bDigits;
// must define char, has signed
char bIndex;
// the max. number is 65535
// calculate the number of digits
for (bDigits=5;bDigits>=1;bDigits--)
{
if ( wNumber/_Power10(bDigits-1) )
{
break;
}
}
// 0 means one digit
if (!bDigits)
bDigits=1;
// store each digit value to bDigitArray;
// bDigitArray[0] store the LSB digit
for (bIndex=4;bIndex>=0;bIndex--)
{
bDigitArray[bIndex]= wNumber/_Power10(bIndex);
if (bIndex)
wNumber%=_Power10(bIndex);
}
_bRMessageArray[0]=bDigits;
// store the number index to _bRMessageArray
// _bRMessageArray[1] must be the MSB digit
for (bIndex=bDigits; bIndex >= 1; bIndex--)
{
_bRMessageArray[bIndex]=bDigitArray[bDigits-bIndex]+CHAR_0;
}
// return the number of digits
return _bRMessageArray[0];
}
#ifndef NO_OSD
void _OSD_ShowNumber(WORD wNumber)
{
_OSD_SetNumber(wNumber); // echo 7 level
_bIndexArray=_bRMessageArray;
_bIndexOffset=0;
_btBitmapRAM=0;
_OSD_BuildNewFonts();
}
void _OSD_ShowSymbol(WORD wIndex)
{
_bInternalIndex=wIndex;
_OSD_SetDisplayArray(NULL, 0);
}
void _OSD_ShowExternalSymbol(WORD wIndex, BYTE bIndex, BIT btRam)
{
_bRMessageArray[0]=1;
_bRMessageArray[1]=wIndex;
_bIndexOffset=bIndex;
_btBitmapRAM=btRam;
_bIndexArray=_bRMessageArray;
_OSD_BuildNewFonts();
}
#if 1//def OSD_DISPLAY_TWO_MODE
// according to the _bIndexArray index
// convert to the display ram data
void _OSD_CopyIndex(BYTE bIndex, BYTE bBitmapIndex[])
{
strncpy ( bBitmapIndex+bIndex+1, (char *)(_bIndexArray+1), _bIndexArray[0] );
bBitmapIndex[0]+=_bIndexArray[0];
}
void _OSD_StoreDisplayData()
{
for (k=0;k<_bIndexArray[0];k++)
{
// a display char need row/col/index/which bitmap RAM information
// the __iRow/__iCol values are already set before calling
// BC5380
if (_bIndexArray[k+1] >= EXTERN_FONT_INDEX) // internal bitmap ROM
{
_bReAssignIndex=TRUE;
}
else
_bInternalIndex=_bIndexArray[k+1];
if (k >=_wReverseFrom)
{
_dwReverseEffect=OSD_REVERSE_ON;
}
_OSD_SetDisplayArray(_bIndexOffset+k, _btBitmapRAM);
}
}
#endif //
void _OSD_ShowDisplay2()
//void _OSD_ShowDisplayMode(BYTE bMode)
{
BYTE bSec, bMin;
BYTE bShowTime;
int i;
BYTE bRealTrack;
BYTE bDoBoth=1;
_btDisplayMode2=1;
// the center message is DISPLAY
_bShowCEMessage=MSG_DISPLAY;
if (_btREVERSEON)
_dwReverseEffect = OSD_REVERSE_ON;
else
_dwReverseEffect = OSD_REVERSE_OFF;
#ifndef NO_OSD
bShowTime=TRUE;
//gcShowStatus.bCurrentTrack should not be destroyed
bRealTrack= gcShowStatus.bCurrentTrack;
if (gcShowStatus.bPlayingMode==MSG_STOP)
{
if ( (gcShowStatus.bPBCMode) ||
(gcShowStatus.wDiscTypeVer==NO_DISC_IN_DRIVE) )
{
gcShowStatus.bCurrentTrack=0;
bShowTime=FALSE;
}
else
{
gcShowStatus.bCurrentTrack=gcShowStatus.bTotalTracks;
gcShowStatus.wCurrentTime=gcShowStatus.wTotalTime;
bShowTime=TRUE;
}
}
else
{
if (gcShowStatus.bStill)
bShowTime=FALSE;
}
// first, store the bitmap index to _bLMessageArray
// bitmap 0 (11 chars)
// 0-3, for play mode
// 4-5, for TV
// 6-7, for tracks
// 8-9, for volume
// 10, for left
// bitmap 1 (14 chars)
// 0-3, for no disc
// 4-5, for echo
// 6-8, for (), up
// 9-12, for surround
// 13, for right
// PLAY TRACK-TIME TV 4-1
// PBC
// DISC TRACKS 4-1, 1-0
// ECHO 2-1
// SPECIAL(up, (, ), +/-) 4-0
// KEY 2-0
// SURROUND 4-0
// AUDIO 1-0
// VOL 2-0
_dwColorIndex=COLOR_FOR_RU;
// disc type
if (__btTVType==PAL_TV)
__iRow=2;
else
__iRow=1 ; //++;
__iCol=DISPLAY_MODE2_1ST_COL;
// it always use from index 0 of bitmap 1
// and will prepare data to display array
_OSD_ShowDiscType(CENTER_CORNER);
//4. total tracks
__iCol=DISPLAY_MODE2_2ND_COL+8;
if (gcShowStatus.wDiscTypeVer!=NO_DISC_IN_DRIVE)
{
_OSD_ShowNumber(gcShowStatus.bTotalTracks);
// _OSD_ShowExternalSymbol(CHAR_TRACKS, MODE2_TRACKS_START, MODE2_TRACKS_RAM);
#ifdef ENGLISH_OSD
_OSD_ShowSymbol(CH
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -