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

📄 psl_process_key.cpp

📁 这是DVD中伺服部分的核心代码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
                pPSL->pSetupMenu->pActiveButton->fSelected = TRUE;
            }
        }
        else
        {
            /* set the active button to the top button of the menu */
            pPSL->pSetupMenu->pActiveButton = &pPSL->pSetupMenu->pActiveTab->pSubButton[1];
            pPSL->pSetupMenu->pActiveButton->fSelected = TRUE;
        }

        /* If the new active button is the password button then initialize password information */
        if (pPSL->pSetupMenu->pActiveButton->tButtonType == PSL_BUTTON_PWD)
        {
            /* reset entered password */
            pPSL->pSetupMenu->pActiveButton->ulInfo = 0;

            /* reset the string */
            if (PslScreenLayoutSetButtonText(pPSL->pSetupMenu->pActiveButton, " _  _  _  _ ") != PSL_SUCCESS)
            {
                DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessKeySetupMenuLeft: Failed to set button text\n"));
                return (PSL_FAILURE);
            }

            /* reset the tmp password */
            m_ulTempPassword = 0;

            /* Check if parental password is set.  If it is not, allow user to set it */
            if (PslDataGetParentalPassword(pPSL) == 0xffffffff)
            {
                pPSL->pSetupMenu->pActiveTab->pSubButton[0].ulInfo = PSL_PWD_CREATE;
                if (PslScreenLayoutSetButtonText(&pPSL->pSetupMenu->pActiveTab->pSubButton[0], "Create Password") != PSL_SUCCESS)
                {
                    DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessKeySetupMenuLeft: Failed to set button text\n"));
                    return (PSL_FAILURE);
                }
            }
            else
            {
                pPSL->pSetupMenu->pActiveTab->pSubButton[0].ulInfo = PSL_PWD_LOCKED;
                if (PslScreenLayoutSetButtonText(&pPSL->pSetupMenu->pActiveTab->pSubButton[0], "Password") != PSL_SUCCESS)
                {
                    DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessKeySetupMenuLeft: Failed to set button text\n"));
                    return (PSL_FAILURE);
                }
            }

            /* set parental menu mapping so buttons can not be navigated */
            pPSL->pSetupMenu->pActiveButton->pBelowButton = &pPSL->pSetupMenu->pActiveTab->pSubButton[6];
            pPSL->pSetupMenu->pActiveTab->pSubButton[6].pAboveButton = pPSL->pSetupMenu->pActiveButton;
        }

        /* redraw the menu */
        if (PslScreenLayoutDrawSetupMenu(pPSL) != PSL_SUCCESS)
        {
            DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessKeySetupMenuLeft: Failed to draw setup menu!\n"));
            return (PSL_FAILURE);
        }
    }

    return (PSL_SUCCESS);
}

/**
 * PslProcessKeySetupMenuRight -- Process the right command for setup menu
 *
 * @param
 *      pPSL    - handle to internal PSL data
 *
 * @retval
 *    PSL_SUCCESS if successful
 *    PSL_FAILURE if not successful
 */
PSL_STATUS  PslProcessKeySetupMenuRight(PSL_HANDLE *pPSL)
{
    /* Check for a valid psl handle and setup menu data */
    if ( (pPSL == NULL) || (pPSL->pSetupMenu == NULL) )
    {
        DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessKeySetupMenuRight: NULL pointer!\n"));
        return (PSL_FAILURE);
    }

    if ( (pPSL->pSetupMenu->pActiveButton->tButtonType != PSL_BUTTON_OPTION) && 
         (pPSL->pSetupMenu->pActiveTab->pRightButton != NULL) )
    {
        /* unselect active button */
        pPSL->pSetupMenu->pActiveButton->fSelected = FALSE;

        /* change the active tab */
        pPSL->pSetupMenu->pActiveTab->fSelected = FALSE;
        pPSL->pSetupMenu->pActiveTab = pPSL->pSetupMenu->pActiveTab->pRightButton;
        pPSL->pSetupMenu->pActiveTab->fSelected = TRUE;

        if (pPSL->pSetupMenu->pActiveTab == &pPSL->pSetupMenu->pTab[1])
        {
            ULONG ulNavState = PslExternalGetNavStatus();

            /* 
             * Video setting buttons can only be navigated to if player is stopped.
             * If player is stopped, map buttons so they can be navigated.
             * Otherwise, map the buttons so they cannot be navigated to.
             */
            if ( (ulNavState == PSL_STATUS_FULLSTOP) || 
                 (ulNavState == PSL_STATUS_OPEN) ||
                 (ulNavState == PSL_STATUS_NO_DISC) )
            {
                pPSL->pSetupMenu->pActiveTab->pSubButton[4].pBelowButton = &pPSL->pSetupMenu->pTab[1].pSubButton[1];
                pPSL->pSetupMenu->pActiveTab->pSubButton[4].pAboveButton = &pPSL->pSetupMenu->pTab[1].pSubButton[3];
                pPSL->pSetupMenu->pActiveButton = &pPSL->pSetupMenu->pActiveTab->pSubButton[1];
                pPSL->pSetupMenu->pActiveButton->fSelected = TRUE;
            }
            else
            {
                pPSL->pSetupMenu->pActiveTab->pSubButton[4].pBelowButton = NULL;
                pPSL->pSetupMenu->pActiveTab->pSubButton[4].pAboveButton = NULL;
                pPSL->pSetupMenu->pActiveButton = &pPSL->pSetupMenu->pActiveTab->pSubButton[4];
                pPSL->pSetupMenu->pActiveButton->fSelected = TRUE;
            }
        }
        else
        {
            /* set the active button to the top button of menu */
            pPSL->pSetupMenu->pActiveButton = &pPSL->pSetupMenu->pActiveTab->pSubButton[1];
            pPSL->pSetupMenu->pActiveButton->fSelected = TRUE;
        }

        /* If the new active button is the password button then initialize password information */
        if (pPSL->pSetupMenu->pActiveButton->tButtonType == PSL_BUTTON_PWD)
        {
            /* reset entered password */
            pPSL->pSetupMenu->pActiveButton->ulInfo = 0;

            /* reset the string */
            if (PslScreenLayoutSetButtonText(pPSL->pSetupMenu->pActiveButton, " _  _  _  _ ") != PSL_SUCCESS)
            {
                DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessKeySetupMenuLeft: Failed to set button text\n"));
                return (PSL_FAILURE);
            }

            /* reset the tmp password */
            m_ulTempPassword = 0;

            /* Check if parental password is set.  If it is not, allow user to set it */
            if (PslDataGetParentalPassword(pPSL) == 0xffffffff)
            {
                pPSL->pSetupMenu->pActiveTab->pSubButton[0].ulInfo = PSL_PWD_CREATE;
                if (PslScreenLayoutSetButtonText(&pPSL->pSetupMenu->pActiveTab->pSubButton[0], "Create Password") != PSL_SUCCESS)
                {
                    DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessKeySetupMenuLeft: Failed to set button text\n"));
                    return (PSL_FAILURE);
                }
            }
            else
            {
                pPSL->pSetupMenu->pActiveTab->pSubButton[0].ulInfo = PSL_PWD_LOCKED;
                if (PslScreenLayoutSetButtonText(&pPSL->pSetupMenu->pActiveTab->pSubButton[0], "Password") != PSL_SUCCESS)
                {
                    DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessKeySetupMenuLeft: Failed to set button text\n"));
                    return (PSL_FAILURE);
                }
            }

            /* set parental menu mapping so buttons can not be navigated */
            pPSL->pSetupMenu->pActiveButton->pBelowButton = &pPSL->pSetupMenu->pActiveTab->pSubButton[6];
            pPSL->pSetupMenu->pActiveTab->pSubButton[6].pAboveButton = pPSL->pSetupMenu->pActiveButton;
        }

        /* redraw the menu */
        if (PslScreenLayoutDrawSetupMenu(pPSL) != PSL_SUCCESS)
        {
            DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessKeySetupMenuRight: Failed to draw setup menu!\n"));
            return (PSL_FAILURE);
        }
    }

    return (PSL_SUCCESS);
}

/**
 * PslProcessKeySetupMenuSelect -- Process the select command for setup menu
 *
 * @param
 *      pPSL    - handle to internal PSL data
 *
 * @retval
 *    PSL_SUCCESS if successful
 *    PSL_FAILURE if not successful
 */
PSL_STATUS  PslProcessKeySetupMenuSelect(PSL_HANDLE *pPSL)
{
    /* Check for a valid psl handle and setup menu data */
    if ( (pPSL == NULL) || (pPSL->pSetupMenu == NULL) )
    {
        DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessKeySetupMenuSelect: NULL pointer!\n"));
        return (PSL_FAILURE);
    }
    
    if (pPSL->pSetupMenu->pActiveButton->tButtonType == PSL_BUTTON_OPTION)
    {   
        /* 
         * Set the configuration setting associated with the button by
         * firing the function pointer for this button.
         */
        if (pPSL->pSetupMenu->pActiveButton->pDataFunction != NULL)
        {
            ( (PSL_DATA_FUNC)pPSL->pSetupMenu->pActiveButton->pDataFunction) (pPSL, pPSL->pSetupMenu->pActiveButton->ulInfo);
        }

        /* set the settings button to the selected option */
        if (PslScreenLayoutSetButtonSetting(pPSL->pSetupMenu->pActiveButton->pLeftButton, 
                                            pPSL->pSetupMenu->pActiveButton) != PSL_SUCCESS)
        {
            DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessKeySetupMenuSelect: Failure setting the button setting!\n"));
            return (PSL_FAILURE);
        }

        /* set active button to settings button */
        pPSL->pSetupMenu->pActiveButton->fSelected = FALSE;
        pPSL->pSetupMenu->pActiveButton = pPSL->pSetupMenu->pActiveButton->pLeftButton;
        pPSL->pSetupMenu->pActiveButton->fSelected = TRUE;

        /* If country standard setting was changed, reset the parental level options */
        if (pPSL->pSetupMenu->pActiveButton == &pPSL->pSetupMenu->pTab[3].pSubButton[5])
        {
            ULONG ulSetting;

            /* Get country standard setting */
            ulSetting = PslDataGetCountryStandard(pPSL);

            if (ulSetting == 1)
            {
                if (PslScreenLayoutSetButtonText(&pPSL->pSetupMenu->pTab[3].pSubButton[3].pSubButton[1], "G") != PSL_SUCCESS)
                {
                    DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessKeySetupMenuSelect: Failed to set button text\n"));
                    return (PSL_FAILURE);
                }

                if (PslScreenLayoutSetButtonText(&pPSL->pSetupMenu->pTab[3].pSubButton[3].pSubButton[2], "2") != PSL_SUCCESS)
                {
                    DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessKeySetupMenuSelect: Failed to set button text\n"));
                    return (PSL_FAILURE);
                }

                if (PslScreenLayoutSetButtonText(&pPSL->pSetupMenu->pTab[3].pSubButton[3].pSubButton[3], "PG") != PSL_SUCCESS)
                {
                    DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessKeySetupMenuSelect: Failed to set button text\n"));
                    return (PSL_FAILURE);
                }

                if (PslScreenLayoutSetButtonText(&pPSL->pSetupMenu->pTab[3].pSubButton[3].pSubButton[4], "PG-13") != PSL_SUCCESS)
                {
                    DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessKeySetupMenuSelect: Failed to set button text\n"));
                    return (PSL_FAILURE);
                }

                if (PslScreenLayoutSetButtonText(&pPSL->pSetupMenu->pTab[3].pSubButton[3].pSubButton[5], "5") != PSL_SUCCESS)
                {
                    DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessKeySetupMenuSelect: Failed to set button text\n"));
                    return (PSL_FAILURE);
                }

                if (PslScreenLayoutSetButtonText(&pPSL->pSetupMenu->pTab[3].pSubButton[3].pSubButton[6], "R") != PSL_SUCCESS)
                {
                    DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessKeySetupMenuSelect: Failed to set button text\n"));
                    return (PSL_FAILURE);
                }

                if (PslScreenLayoutSetButtonText(&pPSL->pSetupMenu->pTab[3].pSubButton[3].pSubButton[7], "NC-17") != PSL_SUCCESS)
                {
                    DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessKeySetupMenuSelect: Failed to set button text\n"));
                    return (PSL_FAILURE);
                }

                if (PslScreenLayoutSetButtonText(&pPSL->pSetupMenu->pTab[3].pSubButton[3].pSubButton[8], "8") != PSL_SUCCESS)
                {
                    DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessKeySetupMenuSelect: Failed to set button text\n"));
                    return (PSL_FAILURE);
                }

                /* Get parental level setting and set button text */
                ulSetting = PslDataGetParentalLevel(pPSL);

                switch (ulSetting)
                {
                case 1:
                    if (PslScreenLayoutSetButtonText(&pPSL->pSetupMenu->pTab[3].pSubButton[3], "G") != PSL_SUCCESS)
                    {
                        DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessKeySetupMenuSelect: Failed to set button text\n"));
                        return (PSL_FAILURE);
                    }
                    break;
                case 2:
                    if (PslScreenLayoutSetButtonText(&pPSL->pSetupMenu->pTab[3].pSubButton[3], "2") != PSL_SUCCESS)
                    {
                        DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessKeySetupMenuSelect: Failed to set button text\n"));
                        return (PSL_FAILURE);
                    }
                    break;
                case 3:
                    if (PslScreenLayoutSetButtonText(&pPSL->pSetupMenu->pTab[3].pSubButton[3], "PG") != PSL_SUCCESS)
                    {
                        DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessKeySetupMenuSelect: Failed to set button text\n"));
                        return (PSL_FAILURE);
                    }
                    break;
                case 4:

⌨️ 快捷键说明

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