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

📄 string_generate.c

📁 Zoran V966 DVD 解码 Soc芯片的源程序
💻 C
📖 第 1 页 / 共 4 页
字号:
	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 + -