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

📄 osdnd.c

📁 车载电子影音系统dvd播放系统原程序代码
💻 C
📖 第 1 页 / 共 5 页
字号:
#include "winav.h"
#include "CTString.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 "OSDND.h"
#include "thumb.h"
#include "Digest.h"
#include "linear.h"
#include "utl.h"

//***************************************************************************
//Note: Don't translate the following strings.
//The following messages are just for char transformation.
WORD code aNumbers[][10] = {{CHAR_0_26, CHAR_1_26, CHAR_2_26, CHAR_3_26, CHAR_4_26, CHAR_5_26, CHAR_6_26, CHAR_7_26, CHAR_8_26, CHAR_9_26},
                            {CHAR_0, CHAR_1, CHAR_2, CHAR_3, CHAR_4, CHAR_5, CHAR_6, CHAR_7, CHAR_8, CHAR_9}};                              
WORD code aUppercase[][26] = {{CHAR_A_26, CHAR_B_26, CHAR_C_26, CHAR_D_26, CHAR_E_26, CHAR_F_26, CHAR_G_26, CHAR_H_26, CHAR_I_26, CHAR_J_26, CHAR_K_26, CHAR_L_26, CHAR_M_26, CHAR_N_26, CHAR_O_26, CHAR_P_26, CHAR_Q_26, CHAR_R_26, CHAR_S_26, CHAR_T_26, CHAR_U_26, CHAR_V_26, CHAR_W_26, CHAR_X_26, CHAR_Y_26, CHAR_Z_26},
                              {CHAR_A, CHAR_B, CHAR_C, CHAR_D, CHAR_E, CHAR_F, CHAR_G, CHAR_H, CHAR_I, CHAR_J, CHAR_K, CHAR_L, CHAR_M, CHAR_N, CHAR_O, CHAR_P, CHAR_Q, CHAR_R, CHAR_S, CHAR_T, CHAR_U, CHAR_V, CHAR_W, CHAR_X, CHAR_Y, CHAR_Z}};
WORD code aLowercase[][26] = {{CHAR_aa_26, CHAR_bb_26, CHAR_cc_26, CHAR_dd_26, CHAR_ee_26, CHAR_ff_26, CHAR_gg_26, CHAR_hh_26, CHAR_ii_26, CHAR_jj_26, CHAR_kk_26, CHAR_ll_26, CHAR_mm_26, CHAR_nn_26, CHAR_oo_26, CHAR_pp_26, CHAR_qq_26, CHAR_rr_26, CHAR_ss_26, CHAR_tt_26, CHAR_uu_26, CHAR_vv_26, CHAR_ww_26, CHAR_xx_26, CHAR_yy_26, CHAR_zz_26}, 
                              {CHAR_aa, CHAR_bb, CHAR_cc, CHAR_dd, CHAR_ee, CHAR_ff, CHAR_gg, CHAR_hh, CHAR_ii, CHAR_jj, CHAR_kk, CHAR_ll, CHAR_mm, CHAR_nn, CHAR_oo, CHAR_pp, CHAR_qq, CHAR_rr, CHAR_ss, CHAR_tt, CHAR_uu, CHAR_vv, CHAR_ww, CHAR_xx, CHAR_yy, CHAR_zz}};
WORD code aUnderline[] = {CHAR_UNDER_26,CHAR_UNDERLIN};
WORD code aSlash[] = {CHAR_SLASH_26, CHAR_SLASH};
WORD code aDot[] = {CHAR_DOT_26, CHAR_DOT};
WORD code aDash[] = {CHAR_DASH_26, CHAR_DASH};
WORD code aPlus[] = {CHAR_PLUS_26, CHAR_PLUS}; 
WORD code aMouhow[] = {CHAR_MH_26, CHAR_MOUHOW};
WORD code aSpace[] = {CHAR_SPACE_26, CHAR_SPACE};
WORD code aRemain[][2] = {{1, CHAR_DASH_26},
                           {1, CHAR_DASH}};
WORD code a51Channel[][6] = {{5, CHAR_5_26, CHAR_DOT_26, CHAR_1_26, CHAR_C_26, CHAR_H_26},
                               {5, CHAR_5, CHAR_DOT, CHAR_1, CHAR_C, CHAR_H}};
WORD code a71Channel[][6] = {{5, CHAR_7_26, CHAR_DOT_26, CHAR_1_26, CHAR_C_26, CHAR_H_26},
                               {5, CHAR_7, CHAR_DOT, CHAR_1, CHAR_C, CHAR_H}};    
WORD code a2Channel[][4] = {{3, CHAR_2_26, CHAR_C_26, CHAR_H_26},
                              {3, CHAR_2, CHAR_C, CHAR_H}};
WORD code aChannel[][3] = {{2, CHAR_C_26, CHAR_H_26},
                           {2, CHAR_C, CHAR_H}};
WORD code aMPEG[][5] = {{4, CHAR_M_26, CHAR_P_26, CHAR_E_26, CHAR_G_26},
                          {4, CHAR_M, CHAR_P, CHAR_E, CHAR_G}};
WORD code aAC3[][4] = {{3, CHAR_A_26, CHAR_C_26,CHAR_3_26},
                         {3, CHAR_A, CHAR_C,CHAR_3}};
WORD code aLPCM[][5] = {{4, CHAR_L_26, CHAR_P_26, CHAR_C_26, CHAR_M_26},
                          {4, CHAR_L, CHAR_P, CHAR_C, CHAR_M}};
WORD code aDTS[][4] = {{3, CHAR_D_26, CHAR_T_26, CHAR_S_26},
                         {3, CHAR_D, CHAR_T, CHAR_S}};
WORD code aSDDS[][5] = {{4, CHAR_S_26, CHAR_D_26, CHAR_D_26, CHAR_S_26},
                          {4, CHAR_S, CHAR_D, CHAR_D, CHAR_S}};
//show debug message
WORD code aVersion[] = {4, CHAR_V, CHAR_E, CHAR_R, CHAR_SPACE};
WORD code aError[] = {4, CHAR_E, CHAR_R, CHAR_R, CHAR_SPACE};
#ifdef SUPPORT_RISC_DETECT_ERROR
WORD code aDecodeError[] = {11, CHAR_D, CHAR_ee, CHAR_cc, CHAR_oo, CHAR_dd, CHAR_ee, CHAR_SPACE, CHAR_E, CHAR_rr, CHAR_rr, CHAR_MOUHOW};
#endif

WORD code aNDSlideTransitionTime[] = {2, CHAR_N_SCANF, CHAR_xx};
//CoCo1.22, add OSD_ERR_DATA and OSD_ERR_PARENTAL case for MSG_INVALID
WORD code aNDErrorData[] = {10, CHAR_E, CHAR_rr, CHAR_rr, CHAR_oo, CHAR_rr, CHAR_SPACE, CHAR_D, CHAR_aa, CHAR_tt, CHAR_aa};
WORD code aNDErrorParental[] = {14, CHAR_E, CHAR_rr, CHAR_rr, CHAR_oo, CHAR_rr, CHAR_SPACE, CHAR_P, CHAR_aa, CHAR_rr, CHAR_ee, CHAR_nn, CHAR_tt, CHAR_aa, CHAR_ll};
//CoCo1.21, support MSG_PROGRAM_PLAY, add this string here because we don't support multi-language verison for this string.
WORD code aNDProgramPlay[] = {12, CHAR_P, CHAR_rr, CHAR_oo, CHAR_gg, CHAR_rr, CHAR_aa, CHAR_mm, CHAR_SPACE, CHAR_P, CHAR_ll, CHAR_aa, CHAR_yy};
WORD code aNDIntro[] = {5, CHAR_I, CHAR_N, CHAR_T, CHAR_R, CHAR_O};
#ifndef SUPPORT_JPEG_EFFECT_NAME
WORD code aNDJPEGEffect[] = {7, CHAR_E, CHAR_ff, CHAR_ff, CHAR_ee, CHAR_cc, CHAR_tt, CHAR_SPACE};
#endif
//CoCo1.23, add new string for MSG_FULLSCREEN
WORD code aNDFullScreenOn[] = {14, CHAR_F, CHAR_uu, CHAR_ll, CHAR_ll, CHAR_SPACE, CHAR_S, CHAR_cc, CHAR_rr, CHAR_ee, CHAR_ee, CHAR_nn, CHAR_SPACE, CHAR_O, CHAR_nn};
WORD code aNDFullScreenOff[] = {14, CHAR_F, CHAR_uu, CHAR_ll, CHAR_ll, CHAR_SPACE, CHAR_S, CHAR_cc, CHAR_rr, CHAR_ee, CHAR_ee, CHAR_nn, CHAR_SPACE, CHAR_O, CHAR_ff, CHAR_ff};
//CoCo1.23, for MSG_AUDIO_OUTPUT_CTL
WORD code aNDAnalogOff[] = {10, CHAR_A, CHAR_nn, CHAR_aa, CHAR_ll, CHAR_oo, CHAR_gg, CHAR_SPACE, CHAR_O, CHAR_ff, CHAR_ff};
WORD code aNDSpeed[] = {1, CHAR_xx};
WORD code aNDSlash[] = {1, CHAR_SLASH};
WORD code aNDDash[] = {1, CHAR_DASH};
WORD code aNDPlus[] = {1, CHAR_PLUS};
//***************************************************************************

#ifdef COLOR_BAR // Xuli1.05
DWORD code PalVal_ColorBar[16]=    // Xuli1.05 power-on color bar palette, blue
{
0x54e7ff,0x54d9ff,0x53cbff,0x52beff,
0x52adff,0x529fff,0x5290ff,0x5282ff,
0x5290ff,0x529fff,0x52adff,0x52beff,
0x53cbff,0x54d9ff,0x54e7ff,0
};
WORD _wColorCnt; //Xuli1.05 color bar color entry offset
#endif

//OSD global variables
BYTE __bOSDFg;
BYTE __bOSDBg;
WORD __wOSDUpVPos;
WORD __wOSDUpHPos;
WORD __wOSDBottomVPos;
WORD __wOSDBottomHPos;

extern BYTE __bSurround;        // Record Surround kind //CoCo1.21
extern BYTE    DATA    _bOSDLang;
extern STATUS  gcShowStatus;
extern BYTE    _bSpeedFactor; 
extern BYTE    DATA    _bOSDLang;
extern BYTE    _bWaitingCnt;
extern BYTE _bVolDisplayed;
extern BYTE __bTotPageNO;
#ifdef SHOW_POWERON_BAR //Xuli1.05
extern WORD __wPwrOnTimer; //power-on bar trigger timer
#endif
#ifdef SHOW_6_DISPLAY_MODE
extern BYTE __bDiscHDCDType;
#endif

#ifdef SUPPORT_TUNE_DRAM_CLOCK_PHASE //CoCo2.32, add the code to support tuning the DRAM clock phase.
extern DWORD __dwDRAMClockPhaseValue;         
#endif

//The following functions is for normal display
//***************************************************************************
//  Function    :   OSDND_GetMessagePos
//  Abstract    :   Call this function to get the type of the message.
//  Arguments   :   bMessage: the message.
//  Return		:   OSDND_UPPER_RIGHT_REGION: The upper right message.
//              :   OSDND_BOTTOM_REGION: The bottom message.
//              :   OSDND_UNKNOWN_REGION: unknown region.
//  Side Effect :   none.
//  Notes       :   
//***************************************************************************
BYTE OSDND_GetMessagePos(BYTE bMessage)
{
    switch (bMessage)
    {
    case MSG_DISCTYPE:
    case MSG_WAITING: 
    case MSG_OPEN:
    case MSG_NEXT:
    case MSG_PREV:
    case MSG_RETURN:
    case MSG_PLAYING:
    case MSG_STOP:
    case MSG_PAUSE:
    case MSG_FAST:
    case MSG_STEP:
    case MSG_FREEZE:
    case MSG_REPEAT:
    case MSG_REPEATAB:
    case MSG_RANDOM:
    case MSG_PBC:
    case MSG_TVMODE:
    case MSG_RESUME:
    case MSG_MENU:
    case MSG_ZOOM:
    case MSG_ZOOMMOVE:
    case MSG_VIDEO_OUTPUT:
    case MSG_SCANFORWARD:
    case MSG_SCANBACKWARD:
    case MSG_SLOW:        
    case MSG_INVALID:
    case MSG_TRACK:
    case MSG_NUMBER:
    case MSG_VOCAL:
    case MSG_AUTOVOCAL:
    case MSG_VOICECANCEL:
    case MSG_KARAOKE:
    case MSG_ROTATE:
    case MSG_FLIP:
    case MSG_JPEG_EFFECT:
    case MSG_ABSTIME:
    case MSG_RELTIME:
    case MSG_REMAIN_ABSTIME:
    case MSG_REMAIN_RELTIME:
    case MSG_TITLE_TIME:
    case MSG_REMAIN_TITLE_TIME:
    case MSG_CHAPTER_TIME:
    case MSG_REMAIN_CHAPTER_TIME:
    case MSG_KEY10:
    case MSG_PSCAN:
    case MSG_STRING:
    case MSG_VERSION:
    case MSG_ERRCODE:
#ifdef SUPPORT_RISC_DETECT_ERROR
    case MSG_DECODE_ERROR:
#endif
    case MSG_ABNORMAL_DISC:
    case MSG_SELECTIONLIST: 
#ifdef  SUPPORT_PROGRAM_PLAY_INFO //CoCo1.21
	case MSG_PROGRAM_PLAY:
#endif //SUPPORT_PROGRAM_PLAY_INFO
	case MSG_INTRO: //CoCo1.21
	case MSG_FULLSCREEN:
        return OSDND_UPPER_RIGHT_REGION;
    //The bottom message
    case MSG_AUDIO:
    case MSG_VOLUME:
    case MSG_MUTE:
    case MSG_KEY: //CoCo1.00, OSD module just define one message for KEY_UP, KEY_DOWN and KEY_NORMAL
    case MSG_ECHO:
    case MSG_SURROUND:
#ifdef KARAOKE
    case MSG_3D:
#endif
    case MSG_ANGLE_CTL:
    case MSG_SOUND_EFFECT:
    case MSG_AST_CTL:
    case MSG_SPST_CTL:
	case MSG_AUDIO_OUTPUT_CTL: //CoCo1.21
        return OSDND_BOTTOM_REGION;
    default:
        return OSDND_UNKNOWN_REGION;
    }   
}

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

    GDI_LinkPseudoRegion(TRUE);

    GDI_SetCurrentRegion(0); //use region 0
    
    if (OSDND_GetMessagePos(bMessage) == OSDND_UPPER_RIGHT_REGION)
    {
		// Brian, Don't need to clear region
        //_OSDND_ClearRegion(OSDND_UPPER_RIGHT_REGION);
        GDI_SetTextColor(TEXT_BG_COLOR, __bOSDBg);        
        GDI_SetTextColor(TEXT_FG_COLOR, __bOSDFg);
        //No shadow
        GDI_SetTextColor(TEXT_SHADOW_COLOR_1, __bOSDBg);
        GDI_SetTextColor(TEXT_SHADOW_COLOR_2, __bOSDBg);
        _wOSDVPHPos = __wOSDUpHPos;
        _OSDND_ShowUpperRightMessage();
    }
    else if (OSDND_GetMessagePos(bMessage) == OSDND_BOTTOM_REGION)
    {
		// Brian, Don't need to clear region
        //_OSDND_ClearRegion(OSDND_BOTTOM_REGION);
        //GDI_SetTextColor(TEXT_BG_COLOR, OSDND_PALETTE_ENTRY_BACKGROUND);        
        GDI_SetTextColor(TEXT_BG_COLOR, __bOSDBg);
        GDI_SetTextColor(TEXT_FG_COLOR, OSDND_PALETTE_ENTRY_BOTTOM_STRING);
        //No shadow
        GDI_SetTextColor(TEXT_SHADOW_COLOR_1, __bOSDBg);
        GDI_SetTextColor(TEXT_SHADOW_COLOR_2, __bOSDBg);
        _wOSDVPHPos = __wOSDBottomHPos;
        _OSDND_ShowBottomMessage();
    }
    else
    {
        switch (bMessage)
        {
        case MSG_DEFAULT_STATE:
            _OSDND_DefaultState();
            break;
#ifndef GDI_4_BIT_OSD
        case MSG_INITIAL_PALETTE:        
            _OSDND_InitializeGDI();
            break;
#endif            
        case MSG_CLEAR:        
            _OSDND_ClearRegion(OSDND_GetMessagePos((BYTE)_wOSDInfo));
            break;
        default:
            GDI_LinkPseudoRegion(FALSE);
            return FALSE;
        }
    }

    GDI_ActivateRegion(); //open GDI

    GDI_LinkPseudoRegion(FALSE);

    return TRUE;
}

//***************************************************************************
//  Function    :   _OSDND_ShowUpperRightMessage
//  Abstract    :   
//  Arguments   :   
//  Return		:   none.
//  Side Effect :   none.
//  Notes       :   
//***************************************************************************
void _OSDND_ShowUpperRightMessage(void)
{
    switch (_bOSDMsg)
    {
    case MSG_DISCTYPE:
        if (__wDiscType == NO_DISC_IN_DRIVE)
        {
            _OSDND_OutputTextEx(aNDNoDisc[_bOSDLang]);
            return;
        }
        else
            _OSDND_ShowDiscType();
        break;
    case MSG_WAITING: 
        _wOSDVPHPos -= _OSDND_ShowWaitingState();
        GDI_DRAW_STRING(_wOSDVPHPos, __wOSDUpVPos);
        _OSDND_OutputTextEx(aNDWait[_bOSDLang]);
        return;
    case MSG_OPEN:
    case MSG_NEXT:
    case MSG_PREV:
    case MSG_RETURN:
    case MSG_PLAYING:
    case MSG_STOP:
    case MSG_PAUSE:
    case MSG_FAST:
    case MSG_STEP:
    case MSG_FREEZE:
    case MSG_REPEAT:
    case MSG_REPEATAB:
    case MSG_RANDOM:
    case MSG_PBC:
    case MSG_TVMODE:
    case MSG_RESUME:
    case MSG_MENU:
    case MSG_ZOOM:
    case MSG_ZOOMMOVE:
    case MSG_VIDEO_OUTPUT:
    case MSG_VOCAL:
    case MSG_AUTOVOCAL:
    case MSG_VOICECANCEL:
    case MSG_KARAOKE: 
    case MSG_INVALID:
    case MSG_SCANFORWARD:
    case MSG_SCANBACKWARD:
    case MSG_SLOW:
    case MSG_JPEG_EFFECT:
    case MSG_ROTATE:
    case MSG_FLIP:
    case MSG_PSCAN:
	case MSG_INTRO:
        _OSDND_OutputKeyString();
        return; 
    case MSG_ABNORMAL_DISC:
        _OSDND_OutputErrorDisc();
        return;
    case MSG_KEY10:
        _OSDND_Show10Plus();
        break;  
    case MSG_TRACK:
    case MSG_NUMBER:
        OSD_OutputNum(_wOSDInfo, OSDND_FONT_INDEX);
        break;
    case MSG_SELECTIONLIST:
        _OSDND_ShowSelection();
        break;
    //show time
    case MSG_RELTIME:
    case MSG_REMAIN_ABSTIME:
    case MSG_REMAIN_RELTIME:
    case MSG_TITLE_TIME:
    case MSG_REMAIN_TITLE_TIME:
    case MSG_CHAPTER_TIME:
    case MSG_REMAIN_CHAPTER_TIME:
        _OSDND_ShowTime();
        break;
    case MSG_STRING:
        _OSDND_ShowString();
        break;
    case MSG_VERSION:        // will show "VER xxxxx"
    case MSG_ERRCODE:        // will show "ERR xxx"
#ifdef SUPPORT_RISC_DETECT_ERROR
    case MSG_DECODE_ERROR:
#endif
        _OSDND_ShowDebugNum();
        break;
	//CoCo1.21, add this message to support "Program Play" string.
	//For code reduction, will not support multi-language for this message.
#ifdef  SUPPORT_PROGRAM_PLAY_INFO //CoCo1.21
	case MSG_PROGRAM_PLAY: 
		_OSDND_OutputTextEx(aNDProgramPlay);
		break;
#endif //SUPPORT_PROGRAM_PLAY_INFO
    default:
        return;
    }   

    _OSDND_OutputUpString();
}

//***************************************************************************
//  Function    :   _OSDND_ShowBottomMessage
//  Abstract    :   

⌨️ 快捷键说明

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