示例#1
0
bool DirectiveString(ArgumentList& List, int flags)
{
	ArgumentList NewList;

	if (Global.Table.isLoaded() == false)
	{
		Logger::printError(Logger::Error,L"No table opened");
		return false;
	}

	for (size_t i = 0; i < List.size(); i++)
	{
		if (List[i].isString)
		{
			ByteArray data = Global.Table.encodeString(List[i].text,false);

			if (data.size() == 0 && List[i].text.size() != 0)
			{
				Logger::printError(Logger::Error,L"Failed to encode string");
				return false;
			}

			for (int i = 0; i < data.size(); i++)
			{
				wchar_t str[32];
				swprintf(str,32,L"0x%02X",data[i]);
				NewList.add(str,false);
			}
		} else {
			NewList.add(List[i].text,false);
		}
	}

	if ((flags & DIRECTIVE_STR_NOTERMINATION) == 0)
	{
		ByteArray data = Global.Table.encodeTermination();
		for (int i = 0; i < data.size(); i++)
		{
			wchar_t str[32];
			swprintf(str,32,L"0x%02X",data[i]);
			NewList.add(str,false);
		}
	}

	CDirectiveData* Data = new CDirectiveData(NewList,1,false);
	AddAssemblerCommand(Data);
	return true;
}