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

📄 osd.c

📁 winboard vcd software
💻 C
📖 第 1 页 / 共 5 页
字号:
{
#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 + -