コード例 #1
0
Boolean VMacResFile::GetString(VString& outString, sLONG inID) const
{
	outString.Clear();

	if (!testAssert(fRefNum != -1))
		return false;
	
	if (!testAssert(inID >= -32768 && inID <= 32767))
		return false;

	sWORD	curres = ::CurResFile();
	if (curres != fRefNum)
		::UseResFile(fRefNum);

	Handle data = fUseResourceChain ? ::GetResource('STR ', (short) inID) : ::Get1Resource('STR ', (short) inID);

	if (curres != fRefNum)
		::UseResFile(curres);
		
	Boolean isOK = false;
	if (testAssert(data != NULL))
	{
		if (testAssert(*data != NULL))
		{
			::HLock(data);
			outString.MAC_FromMacPString((StringPtr) *data);
			::HUnlock(data);
			isOK = true;
		}
	}
	return isOK;
}
コード例 #2
0
void VMacResourceIterator::GetCurrentResourceName(VString& outName)
{
	if (!testAssert(fPos >= 1 && fPos <= fIDs.GetCount()))
		return;

	sWORD	refnum = fRefNums.GetWord(fPos);
	sWORD	id = fIDs.GetWord(fPos);
	
	sWORD	curres = ::CurResFile();
	if (curres != refnum)
		::UseResFile(refnum);

	::SetResLoad(false);
	Handle data = ::Get1Resource(fType, id);
	OSErr macError = ::ResError();
	::SetResLoad(true);

	if (curres != refnum)
		::UseResFile(curres);

	if (data != NULL)
	{
		ResType type;
		sWORD	id2;
		Str255 spName;
		::GetResInfo(data, &id2, &type, spName);
		macError = ::ResError();
		if (testAssert(macError == noErr))
			outName.MAC_FromMacPString(spName);
	}
}
コード例 #3
0
VError VMacResFile::GetResourceListNames(const VString& inType, VArrayString& outNames) const
{
OSErr macError = noErr;

	outNames.SetCount(0);

	if (!testAssert(fRefNum != -1))
		return VE_STREAM_NOT_OPENED;
	
	ResType type = inType.GetOsType();
	if (type == 0)
		return VE_INVALID_PARAMETER;
	
	sWORD	oldref = ::CurResFile();
	sWORD	ref = fRefNum;
	while(ref != -1 && ref != 0)
	{
		::UseResFile(ref);
		sWORD	count = ::Count1Resources(type);
		::UseResFile(oldref);
		
		for(sWORD	i = 1 ; i <= count ; ++i)
		{
			::UseResFile(ref);
			::SetResLoad(false);
			Handle data = ::Get1IndResource(type, i);
			macError = ::ResError();
			::SetResLoad(true);
			::UseResFile(oldref); // one must restore proper context before calling VArrayValue::AppendWord

			if (data != NULL)
			{
				ResType type2;
				sWORD	id;
				Str255 spName;
				::GetResInfo(data, &id, &type2, spName);
				macError = ::ResError();
				if (macError == noErr && spName[0] > 0)
				{
					VString name;
					name.MAC_FromMacPString(spName);
					if (outNames.Find(name) == -1)
						outNames.AppendString(name);
				}
			}
		}
		
		if (!fUseResourceChain)
			break;
		else
		{
			macError = ::GetNextResourceFile(ref, &ref); // returns ref = 0 and noerror at the end
			if (!testAssert(macError == noErr))
				break;
		}
	}
	return VE_OK;
}
コード例 #4
0
Boolean VMacResFile::GetString(VString& outString, sLONG inID, sLONG inIndex) const
{
	outString.Clear();

	if (!testAssert(fRefNum != -1))
		return false;
	
	if (!testAssert(inID >= -32768 && inID <= 32767 && inIndex > 0))
		return false;

	Boolean isOK = false;

	sWORD	curres = ::CurResFile();
	if (curres != fRefNum)
		::UseResFile(fRefNum);
		
	if (fReadOnly && (fLastStringListID == inID) && (fLastStringList != NULL))
	{
		if (*fLastStringList == NULL)
			::LoadResource(fLastStringList);
	}
	else
	{
		fLastStringListID = (short) inID;
		fLastStringList = fUseResourceChain ? ::GetResource('STR#', fLastStringListID) : ::Get1Resource('STR#', fLastStringListID);
	}
	
	if (curres != fRefNum)
		::UseResFile(curres);

	if (testAssert(fLastStringList != NULL))
	{
		if (testAssert(*fLastStringList != NULL))
		{
			::HLock(fLastStringList);
	
			sLONG count = **(sWORD**) fLastStringList;
			if (count >= inIndex)
			{
				StringPtr strs = (StringPtr) *fLastStringList + sizeof(sWORD);
				while(--inIndex)
					strs += strs[0] + 1;
				outString.MAC_FromMacPString(strs);
				isOK = true;
			}
	
			::HUnlock(fLastStringList);
		}
	}
	return isOK;
}
コード例 #5
0
VError VMacResFile::GetResourceName(const VString& inType, sLONG inID, VString& outName) const
{
	outName.Clear();
	Handle data = NULL;
	VError error = _GetResource(inType, inID, &data);
	if (error == VE_OK)
	{
		ResType type;
		sWORD	id;
		Str255 spName;
		::GetResInfo(data, &id, &type, spName);
		OSErr macError = ::ResError();
		if (testAssert(macError == noErr))
		{
			outName.MAC_FromMacPString(spName);
		} else
			error = VErrorBase::NativeErrorToVError((VNativeError)macError);
	}
	return error;
}