📄 string_generate.c
字号:
szBuffStr[cBuffOffset++] = ' ';
szBuffStr[cBuffOffset++] = 'G';
szBuffStr[cBuffOffset++] = 'R';
szBuffStr[cBuffOffset++] = 'I';
szBuffStr[cBuffOffset++] = 'D';
szBuffStr[cBuffOffset++] = ':';
szBuffStr[cBuffOffset++] = ' ';
szBuffStr[cBuffOffset++] = '0' + lValue/10;
szBuffStr[cBuffOffset++] = '0' + lValue%10;
TerminateStringGenerationFunction(szBuffStr, cBuffOffset, cBuffSize);
}
#endif
UINT8 STR_GenerateOSDMESSAGEString(OSD_MESSAGES wMsg, UINT16* szBuffStr, UINT8 cBuffOffset, UINT8 cBuffSize)
{
WORD *pwStr;
UINT8 cStrLen;
ASSERT(NULL != szBuffStr);
pwStr = (WORD *)STRINGS_GetStringFromCurrentLanguage((UINT16)wMsg);
cStrLen = MIN(wcslen((const wchar_t *)pwStr), cBuffSize-1);
wcsncpy(szBuffStr+cBuffOffset, pwStr, cStrLen);
cBuffOffset += cStrLen;
TerminateStringGenerationFunction(szBuffStr, cBuffOffset, cBuffSize);
}
UINT8 STR_GenerateNumericAndTotalNumeric(INT16 sNum, INT16 sTotal, UINT16* szBuffStr, UINT8 cBuffOffset, UINT8 cBuffSize)
{
ASSERT(NULL != szBuffStr);
if (0 == sNum)
szBuffStr[cBuffOffset++] = L'-';
else
cBuffOffset = STR_GenerateNumericValue((INT32)sNum, szBuffStr, cBuffOffset, cBuffSize);
szBuffStr[cBuffOffset++] = L'/';
if (0 == sTotal)
szBuffStr[cBuffOffset++] = L'-';
else
cBuffOffset = STR_GenerateNumericValue((INT32)sTotal, szBuffStr, cBuffOffset, cBuffSize);
TerminateStringGenerationFunction(szBuffStr, cBuffOffset, cBuffSize);
}
/**************************************************************************
* Function : STR_GeneratItemAccessNumeric
*
* In :
*
* Out :
*
* Return :
*
* Desc :
***************************************************************************/
UINT8 STR_GeneratItemAccessNumeric(INT16 wUniChar, UINT16 sItem, UINT16 sTotalItems, UINT16* szBuffer, UINT8 cBuffOffset, UINT8 cBuffSize)
{
UINT8 cNumberDigitsTotal;
UINT8 cNumberDigitsItem;
UINT8 cBuffOffsetOriginal = cBuffOffset;
cNumberDigitsTotal = NUM_NumberLen(sTotalItems);
if (sItem == 0) //Invalid item inPut
{
cNumberDigitsItem = 0;
cBuffOffset = STR_GenerateRepeatChars(EMPTY_CHAR_FIXED_WIDTH, (INT16)(cNumberDigitsTotal - cNumberDigitsItem), szBuffer, cBuffOffset,cBuffSize);
}
else
{
#ifdef D_10P_KEY
cNumberDigitsItem = NUM_NumberLen(sItem&0x7fff);
if(sItem<10)
{
cBuffOffset = STR_GenerateRepeatChars(wUniChar, cNumberDigitsTotal - cNumberDigitsItem, szBuffer, cBuffOffset, cBuffSize);
cBuffOffset = STR_GenerateNumericValue(sItem, szBuffer, cBuffOffset, cBuffSize);
}
else
{ sItem&=0x7fff;
if(sItem>9 && cNumberDigitsTotal>2)
{
cBuffOffset = STR_GenerateRepeatChars(wUniChar, cNumberDigitsTotal - cNumberDigitsItem, szBuffer, cBuffOffset, cBuffSize);
cBuffOffset = STR_GenerateNumericValue(sItem, szBuffer, cBuffOffset, cBuffSize);
}
else
{
cBuffOffset = STR_GenerateNumericValue(sItem, szBuffer, cBuffOffset, cBuffSize);
cBuffOffset = STR_GenerateRepeatChars(wUniChar, cNumberDigitsTotal - cNumberDigitsItem, szBuffer, cBuffOffset, cBuffSize);
}
}
#else
cNumberDigitsItem = NUM_NumberLen(sItem);
cBuffOffset = STR_GenerateRepeatChars(wUniChar, cNumberDigitsTotal - cNumberDigitsItem, szBuffer, cBuffOffset, cBuffSize);
cBuffOffset = STR_GenerateNumericValue(sItem, szBuffer, cBuffOffset, cBuffSize);
#endif
}
szBuffer[cBuffOffset++] = L'/';
cBuffOffset = STR_GenerateNumericValue(sTotalItems, szBuffer, cBuffOffset, cBuffSize);
while (cBuffOffsetOriginal < cBuffOffset)
{
if (_IsDigit( szBuffer[cBuffOffsetOriginal] ))
szBuffer[cBuffOffsetOriginal] = DIGIT_TO_FIXED_WIDTH_DIGIT(szBuffer[cBuffOffsetOriginal]);
cBuffOffsetOriginal++;
}
TerminateStringGenerationFunction(szBuffer, cBuffOffset, cBuffSize);
}
#pragma argsused
UINT8 STR_GenerateUnicodeChar(INT16 wUniChar, UINT16* szBuffStr, UINT8 cBuffOffset, UINT8 cBuffSize)
{
ASSERT(NULL != szBuffStr);
szBuffStr[cBuffOffset++] = wUniChar;
TerminateStringGenerationFunction(szBuffStr, cBuffOffset, cBuffSize);
}
UINT8 STR_GenerateConstString(UINT16* pwStr, UINT16* szBuffStr, UINT8 cBuffOffset, UINT8 cBuffSize)
{
UINT8 cStrLen;
ASSERT(NULL != szBuffStr);
cStrLen = MIN(wcslen((const wchar_t *)pwStr), cBuffSize-1);
wcsncpy(szBuffStr+cBuffOffset, pwStr, cStrLen);
cBuffOffset += cStrLen;
TerminateStringGenerationFunction(szBuffStr, cBuffOffset, cBuffSize);
}
/**************************************************************************
* Function : STR_GenerateChipID
*
* In :
*
* Out :
*
* Return :
*
* Desc :
***************************************************************************/
#ifndef D_GINGER_I86
UINT8 STR_GenerateChipID( UINT16* szBuffStr, UINT8 cBuffOffset, UINT8 cBuffSize)
{
ASSERT(NULL != szBuffStr);
switch( CoreAPI_GetChipId() )
{
case ALL_APPLICABLE:
wcsncpy( szBuffStr , L"ALL APPLICABLE" , cBuffSize );
break;
case V966LD:
wcsncpy( szBuffStr , L"V966LD" , cBuffSize );
break;
case V966L:
wcsncpy( szBuffStr , L"V966L" , cBuffSize );
break;
case V966U:
wcsncpy( szBuffStr , L"V966U" , cBuffSize );
break;
case V966D:
wcsncpy( szBuffStr , L"V966D" , cBuffSize );
break;
case V962:
wcsncpy( szBuffStr , L"V962" , cBuffSize );
break;
}
cBuffOffset += wcslen((const wchar_t *)szBuffStr);
TerminateStringGenerationFunction(szBuffStr, cBuffOffset, cBuffSize);
}
#endif // not D_GINGER_I86
/**************************************************************************
* Function : STR_GeneratePlaybackTime
*
* In :
*
* Out :
*
* Return :
*
* Desc :
***************************************************************************/
UINT8 STR_GeneratePlaybackTime(UINT16 wSecond, UINT16* szBuffStr, UINT8 cBuffOffset, UINT8 cBuffSize)
{
ASSERT(NULL != szBuffStr);
if(INVALID_TIME == wSecond)
{
cBuffOffset = STR_GenerateOSDMESSAGEString(S_EMPTY_TIME, szBuffStr, cBuffOffset, cBuffSize);
}
else
{
UINT8 cHours;
UINT8 cMinutes;
//if(wSecond < 0)
// szBuffStr[cBuffOffset++] = L'-';
cHours = (UINT8)((UINT32)wSecond / 3600);
wSecond -= cHours * 3600;
cMinutes = (UINT8)((UINT32)wSecond / 60);
wSecond -= cMinutes * 60;
// use NUM_TO_FIXED_WIDTH_CHAR when correct font is generated
szBuffStr[cBuffOffset++] = (UINT16)NUM_TO_FIXED_WIDTH_CHAR(cHours / 10);
szBuffStr[cBuffOffset++] = (UINT16)NUM_TO_FIXED_WIDTH_CHAR(cHours % 10);
szBuffStr[cBuffOffset++] = L':';
szBuffStr[cBuffOffset++] = (UINT16)NUM_TO_FIXED_WIDTH_CHAR(cMinutes / 10);
szBuffStr[cBuffOffset++] = (UINT16)NUM_TO_FIXED_WIDTH_CHAR(cMinutes % 10);
szBuffStr[cBuffOffset++] = L':';
szBuffStr[cBuffOffset++] = (UINT16)NUM_TO_FIXED_WIDTH_CHAR((UINT8)(wSecond / 10));
szBuffStr[cBuffOffset++] = (UINT16)NUM_TO_FIXED_WIDTH_CHAR(wSecond % 10);
}
TerminateStringGenerationFunction(szBuffStr, cBuffOffset, cBuffSize);
}
/**************************************************************************
* Function : STR_GeneratePlaybackFastSpeed
*
* In :
*
* Out :
*
* Return :
*
* Desc :
***************************************************************************/
UINT8 STR_GeneratePlaybackFastSpeed(INT16 sSpeed, UINT16* szBuffStr, UINT8 cBuffOffset, UINT8 cBuffSize)
{
ASSERT(NULL != szBuffStr);
if (sSpeed < 0)
{
cBuffOffset = STR_GenerateUnicodeChar(PRIVATE_SYMBOL_BACKWARD, szBuffStr, cBuffOffset, cBuffSize);
sSpeed = -sSpeed;
}
else
{
cBuffOffset = STR_GenerateUnicodeChar(PRIVATE_SYMBOL_FORWARD, szBuffStr, cBuffOffset, cBuffSize);
}
szBuffStr[cBuffOffset++] = L'x';
szBuffStr[cBuffOffset++] = L' ';
cBuffOffset = STR_GenerateNumericValue(sSpeed, szBuffStr, cBuffOffset, cBuffSize);
TerminateStringGenerationFunction(szBuffStr, cBuffOffset, cBuffSize);
}
/**************************************************************************
* Function : STR_GeneratePlaybackSlowSpeed
*
* In :
*
* Out :
*
* Return :
*
* Desc :
***************************************************************************/
UINT8 STR_GeneratePlaybackSlowSpeed(INT16 sSpeed, UINT16* szBuffStr, UINT8 cBuffOffset, UINT8 cBuffSize)
{
ASSERT(NULL != szBuffStr);
if (sSpeed < 0)
{
cBuffOffset = STR_GenerateUnicodeChar(PRIVATE_SYMBOL_SLOW_BACKWARD, szBuffStr, cBuffOffset, cBuffSize);
sSpeed = -sSpeed;
}
else
{
cBuffOffset = STR_GenerateUnicodeChar(PRIVATE_SYMBOL_SLOW_FORWARD, szBuffStr, cBuffOffset, cBuffSize);
}
szBuffStr[cBuffOffset++] = L'1';
szBuffStr[cBuffOffset++] = L'/';
cBuffOffset = STR_GenerateNumericValue(sSpeed, szBuffStr, cBuffOffset, cBuffSize);
TerminateStringGenerationFunction(szBuffStr, cBuffOffset, cBuffSize);
}
UINT8 STR_GenerateZoom(INT16 sZoomLevel, UINT16* szBuffStr, UINT8 cBuffOffset, UINT8 cBuffSize)
{
ASSERT(NULL != szBuffStr);
if(sZoomLevel)
{
szBuffStr[cBuffOffset++] = NUM_TO_CHAR(sZoomLevel);
}
else
{
cBuffOffset = STR_GenerateOSDMESSAGEString(S_OFF, szBuffStr, cBuffOffset, cBuffSize);
}
TerminateStringGenerationFunction(szBuffStr, cBuffOffset, cBuffSize);
}
UINT8 STR_GenerateTVStandard(INT16 sStandard, UINT16* szBuffStr, UINT8 cBuffOffset, UINT8 cBuffSize)
{
ASSERT(NULL != szBuffStr);
switch(sStandard)
{
case TV_SYS_NTSC:
cBuffOffset = STR_GenerateOSDMESSAGEString(S_NTSC, szBuffStr, cBuffOffset, cBuffSize);
break;
case TV_SYS_AUTO:
cBuffOffset = STR_GenerateOSDMESSAGEString(S_AUTO, szBuffStr, cBuffOffset, cBuffSize);
break;
#ifdef SUPPORT_PAL_60
case TV_SYS_PAL60:
cBuffOffset = STR_GenerateOSDMESSAGEString(S_PAL60, szBuffStr, cBuffOffset, cBuffSize);
break;
#endif
#ifdef SUPPORT_PAL_M
case TV_SYS_PALM:
cBuffOffset = STR_GenerateOSDMESSAGEString(S_PALM, szBuffStr, cBuffOffset, cBuffSize);
break;
#endif
default:
cBuffOffset = STR_GenerateOSDMESSAGEString(S_PAL, szBuffStr, cBuffOffset, cBuffSize);
break;
}
TerminateStringGenerationFunction(szBuffStr, cBuffOffset, cBuffSize);
}
UINT8 STR_GenerateItemSpaceValue(OSD_MESSAGES sItem, OSD_MESSAGES sValue, UINT16* szBuffStr, UINT8 cBuffOffset, UINT8 cBuffSize)
{
ASSERT(NULL != szBuffStr);
cBuffOffset = STR_GenerateOSDMESSAGEString(sItem, szBuffStr, cBuffOffset, cBuffSize);
szBuffStr[cBuffOffset++] = UNICODE_SPACE;
cBuffOffset = STR_GenerateOSDMESSAGEString(sValue, szBuffStr, cBuffOffset, cBuffSize);
TerminateStringGenerationFunction(szBuffStr, cBuffOffset, cBuffSize);
}
UINT8 STR_GenerateSubtitleInfo(UINT16 wSubtitleNum, UINT16* szBuffStr, UINT8 cBuffOffset, UINT8 cBuffSize)
{
ASSERT(NULL != szBuffStr);
if(wSubtitleNum == 0)
{
cBuffOffset = STR_GenerateOSDMESSAGEString(S_OFF, szBuffStr, cBuffOffset, cBuffSize);
}
else
{
#ifdef DVD_VR_SUPPORT
if (DEC_DISC_TYPE_DVD_VR == CoreAPI_GetCurrentMediaType())
{
cBuffOffset = STR_GenerateOSDMESSAGEString(S_ON, szBuffStr, cBuffOffset, cBuffSize);
}
else
#endif //DVD_VR_SUPPORT
{
UINT8 szLang[MAX_LANGUAGE_NAME_ABBR];
UINT8 szLanguageNameFirstTwoChar[2];
UINT16 wLangCode ;
UINT8 cSubtitleFeatureIndx = 0;
cBuffOffset = STR_GenerateNumericAndTotalNumeric(wSubtitleNum, CoreAPI_GetTotalSubtitleNum(), szBuffStr, cBuffOffset, cBuffSize);
szBuffStr[cBuffOffset++] = UNICODE_SPACE;
if(CoreAPI_GetSubtitleLanguage(wSubtitleNum, szLang,MAX_LANGUAGE_NAME_ABBR))
{
if (_IsCapitialLetter(szLang[0]))
szLanguageNameFirstTwoChar[0] =_LetterCapitalToLower(szLang[0]);
else szLanguageNameFirstTwoChar[0] = szLang[0] ;
if (_IsCapitialLetter(szLang[1]))
szLanguageNameFirstTwoChar[1] = _LetterCapitalToLower(szLang[1]) ;
else szLanguageNameFirstTwoChar[1] = szLang[1] ;
wLangCode = MLC(szLanguageNameFirstTwoChar[0],szLanguageNameFirstTwoChar[1]);
if (eClipType_None == CoreAPI_GetCurrentClipType() )//DVD
{
cBuffOffset = STR_GenerateLanguage(MLC(szLanguageNameFirstTwoChar[1],szLanguageNameFirstTwoChar[0]), szBuffStr, cBuffOffset, cBuffSize);
}
else if (eClipType_AVI == CoreAPI_GetCurrentClipType())//AVI
{
if(EXTENTED_LANGUAGE_CODE != wLangCode)
{
if(!(szLang[2]) )
{
cBuffOffset = STR_GenerateLanguage(wLangCode, szBuffStr, cBuffOffset, cBuffSize);
szBuffStr[cBuffOffset++] = UNICODE_SPACE;
}
}
else// extent language code
{
cBuffOffset += CoreAPI_GetAVISubtitleLanguageExt(wSubtitleNum, szBuffStr + cBuffOffset,UNISTR_LENGTH_MAX-cBuffOffset);
szBuffStr[cBuffOffset++] = UNICODE_SPACE;
}
wLangCode = ERROR_SUBTITLE_FEATURE_CODE;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -