예제 #1
0
static void CM_NEAR freeSymbols(const void *symbol, SessionGlobalDataPtr sessionData)
{
	void *lLink, *rLink;
	
	if (symbol) {																/* if we got a symbol...									*/
		lLink = ((SymbolLinksPtr)symbol)->lLink;	/* get the two links...										*/
		rLink = ((SymbolLinksPtr)symbol)->rLink;
		
		freeSymbols(lLink, sessionData);					/* ...follow the left link down						*/
		SessionFree(symbol);											/* ...free a symbol												*/
		freeSymbols(rLink, sessionData);					/* ...do same for the right links					*/
	}
}
예제 #2
0
// ============================================================================
bool loadSymbols(void)
{
	if (bSymbolsLoaded == false)
	{
		if (loadScilabDlls())
		{
			dynlib_Windows_Main = (Windows_MainPROC) GetProcAddress(hScilab_WindowsDll, WINDOWS_MAIN);
			dynlib_setVisibleMainWindow = (setVisibleMainWindowPROC) GetProcAddress(hGuiDll, SETVISIBLEMAINWINDOW);
			dynlib_StorePrioritaryCommandWithFlag = (StorePrioritaryCommandWithFlagPROC) GetProcAddress(hLibScilabDll, STOREPRIORITYCOMMANDWITHFLAG);
			dynlib_isEmptyCommandQueue = (isEmptyCommandQueuePROC) GetProcAddress(hLibScilabDll, ISEMPTYCOMMANDQUEUE);
			dynlib_scirun = (scirunPROC) GetProcAddress(hLibScilabDll, SCIRUN);
			pvApiCtx = (StrCtx *)(GetProcAddress(hApi_ScilabDll, "pvApiCtx"));
			dynlib_createNamedScalarDouble = (createNamedScalarDoublePROC) GetProcAddress(hApi_ScilabDll, CREATENAMEDSCALARDOUBLE);
			dynlib_isNamedVarExist = (isNamedVarExistPROC) GetProcAddress(hApi_ScilabDll, ISNAMEDVAREXIST);
			dynlib_isNamedEmptyMatrix = (isNamedEmptyMatrixPROC) GetProcAddress(hApi_ScilabDll, ISNAMEDEMPTYMATRIX);
			dynlib_getNamedScalarDouble = (getNamedScalarDoublePROC) GetProcAddress(hApi_ScilabDll, GETNAMEDSCALARDOUBLE);
			dynlib_createNamedSingleWideString = (createNamedSingleWideStringPROC) GetProcAddress(hApi_ScilabDll, CREATENAMEDSINGLEWIDESTRING);
			dynlib_getAllocatedNamedSingleWideString = (getAllocatedNamedSingleWideStringPROC)GetProcAddress(hApi_ScilabDll, GETALLOCATEDNAMEDSINGLEWIDESTRING);
			dynlib_freeAllocatedSingleWideString = (freeAllocatedSingleWideStringPROC)GetProcAddress(hApi_ScilabDll, FREEALLOCATEDSINGLEWIDESTRING);

			dynlib_getNamedScalarBoolean = (getNamedScalarBooleanPROC)GetProcAddress(hApi_ScilabDll, GETNAMEDSCALARBOOLEAN);
			dynlib_createNamedScalarBoolean = (createNamedScalarBooleanPROC)GetProcAddress(hApi_ScilabDll, CREATENAMEDSCALARBOOLEAN);

			dynlib_readNamedComplexMatrixOfDouble = (readNamedComplexMatrixOfDoublePROC)GetProcAddress(hApi_ScilabDll, READNAMEDCOMPLEXMATRIXOFDOUBLE);
			dynlib_createNamedMatrixOfDouble = (createNamedMatrixOfDoublePROC)GetProcAddress(hApi_ScilabDll, CREATENAMEDMATRIXOFDOUBLE);
			dynlib_readNamedMatrixOfDouble = (readNamedMatrixOfDoublePROC)GetProcAddress(hApi_ScilabDll, READNAMEDMATRIXOFDOUBLE);

			dynlib_getLastErrorValue = (getLastErrorValuePROC) GetProcAddress(hOutput_StreamDll, GETLASTERRORVALUE);

			if (dynlib_Windows_Main &&
				dynlib_setVisibleMainWindow &&
				dynlib_StorePrioritaryCommandWithFlag &&
				dynlib_isEmptyCommandQueue &&
				dynlib_scirun &&
				pvApiCtx &&
				dynlib_createNamedScalarDouble &&
				dynlib_isNamedVarExist &&
				dynlib_isNamedEmptyMatrix &&
				dynlib_getNamedScalarDouble &&
				dynlib_getLastErrorValue &&
				dynlib_createNamedSingleWideString &&
				dynlib_getAllocatedNamedSingleWideString &&
				dynlib_freeAllocatedSingleWideString &&
				dynlib_getNamedScalarBoolean &&
				dynlib_createNamedScalarBoolean &&
				dynlib_readNamedComplexMatrixOfDouble &&
				dynlib_createNamedMatrixOfDouble &&
				dynlib_readNamedMatrixOfDouble)
			{
				bSymbolsLoaded = true;
			}
			else
			{
				bSymbolsLoaded = freeSymbols(false);
			}
		}
		else
		{
			bSymbolsLoaded = false;
		}
	}
	return bSymbolsLoaded;
}
예제 #3
0
void cmFreeAllSymbols(void **root, SessionGlobalDataPtr sessionData)
{
	freeSymbols(*root, sessionData);
	*root = NULL;
}