示例#1
0
//----------------------------------------------------------------------------------------
// Create default filter settings
// Function result:		filter settings oder 0 (not enough memory)
//----------------------------------------------------------------------------------------
static FILTER_PARAM	filter_new_settings(FI_REF fi, const BaseContainer* t_bc)
{
	PRIVATE_SETTINGS* settings;

	settings = NewMemClear(PRIVATE_SETTINGS, 1);
	if (settings)
	{
		settings->magic = PRIVATE_SETTINGS_MAGIC;
		settings->matrix_opacity = 1.0;
		settings->angle = DFLT_ANGLE;
		settings->scale_matrix = true;
		settings->type = 0;
		settings->tile_flags = TILE_REPEAT_BORDER;

		settings->emr = 0;												// no effect matrix so far
		settings->emr_lock = Semaphore::Alloc();	// create a semaphore for the matrix object

		if (settings->emr_lock == 0)							// failed to allocate the semaphore?
		{
			DeleteMem(settings);
			settings = 0;
		}
	}

	return (FILTER_PARAM)settings;
}
示例#2
0
Bool CDynamicStringSet::ReadElement(BaseFile* pFile, String* pElement, Int32 lLevel)
{
#ifdef __API_INTERN__
	Int32  len=0;
	Char	*c = nullptr;

	if (!pFile->ReadInt32(&len)) return false;
	if (!len) { *pElement=String(); return true; }

	c = NewMemClear(Char, len);
	if (!c)
	{
		return false;
	}
	if (!pFile->ReadBytes(c,len))
	{
		DeleteMem(c);
		return false;
	}

	pElement->SetCString(c,len-1);
	DeleteMem(c);

	return true;
#else
	return pFile->ReadString(pElement) != 0;
#endif // __API_INTERN__
}
示例#3
0
static
Float
getMedian(const GeDynamicArray<Vector> &points, const Int32 *pnts, Int32 numPoints, Random &rng, INT axis, Sorter &sorter)
{
	Int32 maxSamples = 20;
	Int32 numSamples = numPoints < maxSamples ? numPoints : maxSamples;
	Float* samples = NewMemClear(Float,numSamples);
	for(Int32 i=0;i<numSamples;i++){
		Float val = rng.Get01();
		Int32 a = val * (numPoints-1);
		switch(axis){
			case 0:
				samples[i] = points[pnts[a]].x;
				break;
			case 1:
				samples[i] = points[pnts[a]].y;
				break;
			case 2:
				samples[i] = points[pnts[a]].z;
				break;
		}
		
	}
	sorter.Sort(samples,numSamples,sizeof(Float));
	Float ret = samples[numSamples/2];
	DeleteMem(samples);
	return ret;
}
示例#4
0
Bool CDynamicFilenameArray::ReadElement(BaseFile* pFile, Filename* pElement, Int32 lLevel)
{
#ifdef __API_INTERN__
	Int32  len=0;
	Char	*c = nullptr;

	if (!pFile->ReadInt32(&len)) return false;
	if (!len) { *pElement = Filename(); return true; }

	c = NewMemClear(Char, len);
	if (!c)
	{
		return false;
	}
	if (!pFile->ReadBytes(c,len))
	{
		DeleteMem(c);
		return false;
	}

	String str;
	str.SetCString(c, len-1);
	*pElement = Filename(str);
	DeleteMem(c);

	return true;
#else
	return pFile->ReadFilename(pElement) != 0;
#endif // __API_INTERN__
}
示例#5
0
/*********************************************************************\
	Function name    : CLanguageList::Init
	Description      :
	Created at       : 26.09.01, @ 16:11:23
	Created by       : Thomas Kunert
	Modified by      :
\*********************************************************************/
void CLanguageList::Init()
{
	Filename resourcepath = GeGetStartupPath() + Filename("resource");

	if (GetC4DVersion() >= 16000) {
		// R16 has a new resource directory structure. The c4d_language.str
		// files we are searching for are in resource/modules/c4dplugin/strings_xx.
		// Fix for https://github.com/nr-plugins/resedit/issues/4
		resourcepath = resourcepath + "modules" + "c4dplugin";
	}

	AutoAlloc <BrowseFiles> pBrowse;
	pBrowse->Init(resourcepath, false);

	while (pBrowse->GetNext())
	{
		if (pBrowse->IsDir())
		{
			Filename fn = pBrowse->GetFilename();
			if (fn.GetString().SubStr(0, 8).ToLower() == "strings_")
			{
				String idx = fn.GetString();
				idx.Delete(0, 8);

				Filename stringname = resourcepath + fn+Filename("c4d_language.str");
				AutoAlloc <BaseFile> pFile;
				if (!pFile)
					return;
				if (!GeFExist(stringname))
				{
					GeOutString("Missing c4d_language.str to identify the string directory!!!", GEMB_ICONEXCLAMATION);
				}
				else if (pFile->Open(stringname))
				{
					Int32 len = pFile->GetLength();
					Char *buffer = NewMemClear(Char,len + 2);
					if (buffer)
					{
						pFile->ReadBytes(buffer,len);
						buffer[len]=0;

						Int32 i;

						for (i = 0; i < len && buffer[i] >= ' '; i++) { }
						buffer[i] = 0;

						for (i--; i > 0 && buffer[i]== ' '; i--) { }
						buffer[i + 1] = 0;

						AddLanguage(buffer, idx);
						DeleteMem(buffer);
					}
				}
			}
		}
	}

	CriticalAssert(GetNumLanguages() > 0);
}
示例#6
0
String EncryptPassword(const String& str)
{
	Int32 lLen = str.GetCStringLen(STRINGENCODING_8BIT);
	if (lLen <= 0)
		return str;

	Int32 lCryptLen = (lLen + 256) / 256;
	lCryptLen *= 256;
	Int32 i;
	Random rnd;
	rnd.Init(97355832);
	Int32 plKey[30];
	char ch[3];
	String strCrypt;

	GeCipher256 c;

	char* pchPassword = NewMemClear(Char,lCryptLen);
	if (!pchPassword)
		return str;
	str.GetCString(pchPassword, lLen + 1, STRINGENCODING_8BIT);
	pchPassword[lLen] = 0;
	for (i = 0; i < lCryptLen; i++)
	{
		rnd.Get01();
		pchPassword[i] ^= (rnd.GetSeed() & 0xff);
	}

	rnd.Init(956612571);
	for (i = 0; i < 30; i++)
	{
		rnd.Get01();
		plKey[i] = rnd.GetSeed();
		lIntel(&(plKey[i]));
	}

	if (!c.Open((UChar*)plKey, sizeof(plKey), true))
	{
		DeleteMem(pchPassword);
		return str;
	}

	for (i = 0; i < lCryptLen; i += 256)
		c.Encrypt((UChar*)&pchPassword[i], 256);

	for (i = 0; i < lCryptLen; i++)
	{
		sprintf_safe(ch, sizeof(ch), "%02x", ((int)pchPassword[i]) & 0xff);
		DebugAssert(ch[2] == 0);
		strCrypt += ch;
	}

	DeleteMem(pchPassword);
	return strCrypt;
}
示例#7
0
void
buildKDTree(const GeDynamicArray<Vector> &points, KDNode **nodes, Random &rng)
{
	Sorter sorter;
	Int32 *pnts = NewMemClear(Int32,points.GetCount());
	Int32 numPoints = points.GetCount();
	for(Int32 i=0;i<numPoints;i++){
		pnts[i] = i;
	}
	*nodes = recursiveBuild(points,pnts,numPoints,rng,0,sorter);
}
示例#8
0
/*********************************************************************\
	Function name    : CLanguageList::Init
	Description      :
	Created at       : 26.09.01, @ 16:11:23
	Created by       : Thomas Kunert
	Modified by      :
\*********************************************************************/
void CLanguageList::Init()
{
	Filename resourcepath = GeGetStartupPath() + Filename("resource");
	AutoAlloc <BrowseFiles> pBrowse;
	pBrowse->Init(resourcepath, false);

	while (pBrowse->GetNext())
	{
		if (pBrowse->IsDir())
		{
			Filename fn = pBrowse->GetFilename();
			if (fn.GetString().SubStr(0, 8).ToLower() == "strings_")
			{
				String idx = fn.GetString();
				idx.Delete(0, 8);

				Filename stringname = resourcepath + fn+Filename("c4d_language.str");
				AutoAlloc <BaseFile> pFile;
				if (!pFile)
					return;
				if (!GeFExist(stringname))
				{
					GeOutString("Missing c4d_language.str to identify the string directory!!!", GEMB_ICONEXCLAMATION);
				}
				else if (pFile->Open(stringname))
				{
					Int32 len = pFile->GetLength();
					Char *buffer = NewMemClear(Char,len + 2);
					if (buffer)
					{
						pFile->ReadBytes(buffer,len);
						buffer[len]=0;

						Int32 i;

						for (i = 0; i < len && buffer[i] >= ' '; i++) { }
						buffer[i] = 0;

						for (i--; i > 0 && buffer[i]== ' '; i--) { }
						buffer[i + 1] = 0;

						AddLanguage(buffer, idx);
						DeleteMem(buffer);
					}
				}
			}
		}
	}
}
示例#9
0
Bool CDynamicStringArray::WriteElement(BaseFile* pFile, const String* pElement) const
{
#ifdef __API_INTERN__
	Bool ok;
	Int32 len  = pElement->GetCStringLen()+1;
	Char *mem = NewMemClear(Char, len);
	if (!mem)
	{
		return false;
	}
	pElement->GetCString(mem, len);
	ok = pFile->WriteInt32(len) && pFile->WriteBytes(mem,len);
	DeleteMem(mem);

	return ok;
#else
	return pFile->WriteString(*pElement) != 0;
#endif // __API_INTERN__
}
示例#10
0
IMAGERESULT BFFSaverData::Save(const Filename& name, BaseBitmap* bm, BaseContainer* data, SAVEBIT savebits)
{
	Int32	 y, bw, bh;
	Bool	 ok = true;
	UChar* line = nullptr;
	AutoAlloc<BaseFile> file;
	if (!file)
		return IMAGERESULT_OUTOFMEMORY;

	if (!file->Open(name, FILEOPEN_WRITE, FILEDIALOG_NONE, BYTEORDER_MOTOROLA))
		return IMAGERESULT_FILEERROR;

	bw = bm->GetBw();
	bh = bm->GetBh();

	file->WriteInt32(0x42464600);
	file->WriteInt32(bw);
	file->WriteInt32(bh);

	if (bw > 0)
		line = NewMemClear(UChar, 3 * bw);
	if (!line)
	{
		DeleteMem(line);
		return IMAGERESULT_OUTOFMEMORY;
	}

	for (y = 0; y < bh; y++)
	{
		bm->GetPixelCnt(0, y, bw, line, COLORBYTES_RGB, COLORMODE_RGB, PIXELCNT_0);
		file->WriteBytes(line, bw * 3);
	}

	ok = file->GetError() == FILEERROR_NONE;
	DeleteMem(line);

	return ok ? IMAGERESULT_OK : IMAGERESULT_FILEERROR;
}
示例#11
0
IMAGERESULT BFFLoaderData::Load(const Filename& name, BaseBitmap* bm, Int32 frame)
{
	Int32	 y, bw, bh, header;
	Bool	 ok = true;
	UChar* line = nullptr;
	AutoAlloc<BaseFile>	file;
	if (!file)
		return IMAGERESULT_OUTOFMEMORY;

	if (!file->Open(name, FILEOPEN_READ, FILEDIALOG_NONE, BYTEORDER_MOTOROLA))
		return IMAGERESULT_FILEERROR;

	file->ReadInt32(&header);
	file->ReadInt32(&bw);
	file->ReadInt32(&bh);

	if (bw > 0)
		line = NewMemClear(UChar, 3 * bw);

	if (bm->Init(bw, bh, 24) != IMAGERESULT_OK || !line)
	{
		DeleteMem(line);
		return IMAGERESULT_OUTOFMEMORY;
	}

	for (y = 0; y < bh && ok; y++)
	{
		// check if current thread is canceled and return IMAGERESULT_THREADCANCELED
		file->ReadBytes(line, bw * 3);
		ok = bm->SetPixelCnt(0, y, bw, line, COLORBYTES_RGB, COLORMODE_RGB, PIXELCNT_0);
	}

	ok = ok && file->GetError() == FILEERROR_NONE;
	DeleteMem(line);

	return ok ? IMAGERESULT_OK : IMAGERESULT_FILEERROR;
}
示例#12
0
Bool DiffDistriDialog::Command(Int32 id, const BaseContainer &msg)
{
	switch (id)
	{
	case IDC_DIFF_DISTRI_NEW_BTN:
		{
			Filename fn;
			if (fn.FileSelect(FILESELECTTYPE_ANYTHING, FILESELECT_LOAD, GeLoadString(IDS_DIFF_DISTRI_CHOOSE)))
			{
				if (!fn.CheckSuffix("zip"))
				{
					GeOutString(GeLoadString(IDS_DIFF_DISTRI_INVALID_SUFFIX), GEMB_OK | GEMB_ICONSTOP);
				}
				else
				{
					g_pResEditPrefs->arOldFiles.AddFilename(fn);
					m_pTreeView->Refresh();
				}
			}
		}
		break;

	case IDC_DIFF_DISTRI_REMOVE_BTN:
		if (m_fnSelection.Content())
		{
			g_pResEditPrefs->arOldFiles.RemoveFilename(m_fnSelection);
			m_fnSelection = Filename();
			m_pTreeView->Refresh();
		}
		break;

	case IDC_DIFF_DISTRI_NEWZIP_EDIT:
		g_pResEditPrefs->fnNewZip = m_pNewZipEdit->GetData().GetValue().GetFilename();
		break;

	case IDC_DIFF_DISTRI_DESTPATH_EDIT:
		{
			Filename fnDestZip = m_pDestPathEdit->GetData().GetValue().GetFilename();
			g_pResEditPrefs->fnDestZip = fnDestZip;
			g_pResEditPrefs->fnDestZip.SetSuffix("zip");
			if (fnDestZip.Content() && g_pResEditPrefs->fnDestZip != fnDestZip)
				m_pDestPathEdit->SetData(TriState<GeData>(g_pResEditPrefs->fnDestZip));
		}
		break;

	case IDC_OK:
		{
			GeData d;
			String strPassword;
			Int32 lLen = 0;
			char* pchPassword = nullptr;

			Filename fnDestZip = m_pDestPathEdit->GetData().GetValue().GetFilename();
			g_pResEditPrefs->fnNewZip = m_pNewZipEdit->GetData().GetValue().GetFilename();
			g_pResEditPrefs->fnDestZip = fnDestZip;
			g_pResEditPrefs->fnDestZip.SetSuffix("zip");
			if (fnDestZip.Content() && g_pResEditPrefs->fnDestZip != fnDestZip)
				m_pDestPathEdit->SetData(TriState<GeData>(g_pResEditPrefs->fnDestZip));
			GetString(IDC_DIFF_DISTRI_PASSWORD_EDIT, strPassword);

			lLen = strPassword.GetCStringLen(STRINGENCODING_8BIT);
			if (lLen)
			{
				pchPassword = NewMemClear(Char,lLen + 2);
				if (pchPassword)
					strPassword.GetCString(pchPassword, lLen + 1, STRINGENCODING_8BIT);
			}

			if (!g_pResEditPrefs->arOldFiles.GetElementCount())
			{
				GeOutString(GeLoadString(IDS_DIFF_DISTRI_NO_OLD), GEMB_ICONSTOP);
				DeleteMem(pchPassword);
				break;
			}
			if (!g_pResEditPrefs->fnNewZip.Content())
			{
				GeOutString(GeLoadString(IDS_DIFF_DISTRI_NO_NEW), GEMB_ICONSTOP);
				DeleteMem(pchPassword);
				break;
			}
			if (!g_pResEditPrefs->fnDestZip.Content())
			{
				GeOutString(GeLoadString(IDS_DIFF_DISTRI_NO_DEST), GEMB_ICONSTOP);
				DeleteMem(pchPassword);
				break;
			}

			if (!DiffZipFiles(g_pResEditPrefs->arOldFiles, g_pResEditPrefs->fnNewZip, g_pResEditPrefs->fnDestZip, pchPassword))
				GeOutString(GeLoadString(IDS_DIFF_DISTRI_FAILED, g_pResEditPrefs->fnNewZip.GetString(), g_pResEditPrefs->fnDestZip.GetString()), GEMB_OK | GEMB_ICONEXCLAMATION);
			DeleteMem(pchPassword);
		}
		break;

	case IDC_CANCEL:
		Close();
		break;

	default:
		break;
	}

	return true;
}
示例#13
0
static
KDNode *
recursiveBuild(const GeDynamicArray<Vector> &points, const Int32 *pnts, Int32 numPoints, Random &rng, INT depth, Sorter &sorter)
{
	KDNode *node =NewMemClear(KDNode,1);
	Int32 minNodeEntries = 4;
	Int32 maxDepth = 10;
	if(numPoints > minNodeEntries && depth < maxDepth){
		INT axis = depth%3;
		Float splitPos = getMedian(points,pnts,numPoints,rng,axis,sorter);
		Int32 numLeft = 0;
		for(Int32 i=0;i<numPoints;i++){
			switch(axis){
				case 0:
					if(points[pnts[i]].x < splitPos){
						numLeft++;
					}
					break;
				case 1:
					if(points[pnts[i]].y < splitPos){
						numLeft++;
					}
					break;
				case 2:
					if(points[pnts[i]].z < splitPos){
						numLeft++;
					}
					break;
			}
			
		}
		Int32 *lPoints = NewMemClear(Int32,numLeft);
		Int32 *rPoints = NewMemClear(Int32,numPoints - numLeft);
		Int32 lPos=0;
		Int32 rPos=0;
		for(Int32 i=0;i<numPoints;i++){
			Float val = 0;
			switch(axis){
				case 0:
					val = points[pnts[i]].x;
					break;
				case 1:
					val = points[pnts[i]].y;
					break;
				case 2:
					val = points[pnts[i]].z;
					break;
			}
			if(val < splitPos){
				lPoints[lPos] = pnts[i];
				lPos++;
			}
			else{
				rPoints[rPos] = pnts[i];
				rPos++;
			}
		}
		node->initInterior(splitPos);
		node->m_lChild = recursiveBuild(points,lPoints,numLeft,rng,depth+1,sorter);
		node->m_rChild = recursiveBuild(points,rPoints,numPoints-numLeft,rng,depth+1,sorter);
		DeleteMem(pnts);
	}
	else{
		node->initLeaf(pnts,numPoints);
	}
	return node;
}
示例#14
0
String DecryptPassword(const String &str)
{
	Int32 lLen = str.GetCStringLen(STRINGENCODING_8BIT);
	if (lLen <= 0)
		return str;

	if (lLen % 512)
	{
		DebugAssert(false);
		return "";
	}

	GeCipher256 c;
	Random rnd;
	Int32 plKey[30];

	char *pchCryptPassword = nullptr, *pchPassword = nullptr;

	pchCryptPassword = NewMemClear(Char,lLen + 2);
	pchPassword = (lLen > 1) ? NewMemClear(Char,lLen / 2) : nullptr;
	if (!pchCryptPassword || !pchPassword)
	{
		DeleteMem(pchCryptPassword);
		DeleteMem(pchPassword);
		return "";
	}

	Int32 i;
	int n;
	str.GetCString(pchCryptPassword, lLen + 1, STRINGENCODING_8BIT);
	lLen /= 2;
	for (i = 0; i < lLen; i++)
	{
		sscanf(&pchCryptPassword[2 * i], "%02x", &n);
		DebugAssert(n >= 0 && n < 256);
		pchPassword[i] = (char)n;
	}

	rnd.Init(956612571);
	for (i = 0; i < 30; i++)
	{
		rnd.Get01();
		plKey[i] = rnd.GetSeed();
		lIntel(&(plKey[i]));
	}

	if (!c.Open((UChar*)plKey, sizeof(plKey), true))
	{
		DeleteMem(pchCryptPassword);
		DeleteMem(pchPassword);
		return "";
	}
	for (i = 0; i < lLen; i += 256)
		c.Decrypt((UChar*)&pchPassword[i], 256);

	rnd.Init(97355832);
	for (i = 0; i < lLen; i++)
	{
		rnd.Get01();
		pchPassword[i] ^= (rnd.GetSeed() & 0xff);
	}

	String strDecrypt = pchPassword;

	DeleteMem(pchCryptPassword);
	DeleteMem(pchPassword);

	return strDecrypt;
}