Пример #1
0
std::list<const char*> C4AulScriptEngine::GetFunctionNames(C4PropList * p)
{
	std::list<const char*> functions;
	std::list<const char*> global_functions;
	auto sort_alpha = [](const char * const &a, const char * const &b) -> bool { return strcmp(a, b) < 0; };
	if (!p) p = GetPropList();
	const C4ValueArray * a = p->GetProperties();
	for (int i = 0; i < a->GetSize(); ++i)
	{
		C4String * key = (*a)[i].getStr();
		if (!key) continue;
		C4AulFunc * f = p->GetFunc(key);
		if (!f) continue;
		if (!f->GetPublic()) continue;
		if (!::ScriptEngine.GetPropList()->HasProperty(key))
			functions.push_back(key->GetCStr());
		else
			global_functions.push_back(key->GetCStr());
	}
	delete a;
	functions.sort(sort_alpha);
	if (!functions.empty() && !global_functions.empty()) functions.push_back(0); // separator
	global_functions.sort(sort_alpha);
	functions.splice(functions.end(), global_functions);
	return functions;
}
Пример #2
0
void C4AulScriptEngine::Link(C4DefList *rDefs)
{
	try
	{
		// resolve appends
		for (C4AulScript *s = Child0; s; s = s->Next)
			s->ResolveAppends(rDefs);

		// resolve includes
		for (C4AulScript *s = Child0; s; s = s->Next)
			s->ResolveIncludes(rDefs);

		// parse the scripts to byte code
		for (C4AulScript *s = Child0; s; s = s->Next)
			s->Parse();

		// engine is always parsed (for global funcs)
		State = ASS_PARSED;

		if (rDefs)
			rDefs->CallEveryDefinition();

		// Done modifying the proplists now
		for (C4AulScript *s = Child0; s; s = s->Next)
			s->GetPropList()->Freeze();
		GetPropList()->Freeze();
	}
	catch (C4AulError &err)
	{
		// error??! show it!
		err.show();
	}


}
Пример #3
0
BOOL CHtmlProperties::Show( CReg *pReg)
{
	EndEdit();

	// Destroy properties list
	GetPropList().Destroy();

	// Lose list items
	GetListCtrl().Destroy();

	// Rebuild header
	GetListCtrl().GetHeader().Destroy();
	GetListCtrl().GetHeader().AddHeaderItem( 120, "Name" );
	GetListCtrl().GetHeader().AddHeaderItem( 120, "Value" );

	if ( pReg == NULL ) 
	{	LoadList();
		RedrawWindow();
		return FALSE;
	} // end if

	// Add variables
	AddKey( pReg, pReg->GetKey( "vars" ) );
	AddKey( pReg, pReg->GetKey( "lvars" ) );
	AddKey( pReg, pReg->GetKey( "dvars" ) );

//	AddDynamic( pReg );

	// Loadup the list
	LoadList();

	RedrawWindow();

	return TRUE;
}
Пример #4
0
void C4AulScriptEngine::UnLink()
{
	warnCnt = errCnt = lineCnt = 0;

	// unlink scripts
	for (C4AulScript *s = Child0; s; s = s->Next)
		s->UnLink();
	GetPropList()->Thaw();
	if (State > ASS_PREPARSED) State = ASS_PREPARSED;
	// Do not clear global variables and constants, because they are registered by the
	// preparser or other parts. Note that keeping those fields means that you cannot delete a global
	// variable or constant at runtime by removing it from the script.
}
Пример #5
0
void C4ScriptHost::UnLink()
{
	C4PropList * p = GetPropList();
	if (p)
	{
		p->C4PropList::Clear();
		p->SetProperty(P_Prototype, C4VPropList(Engine->GetPropList()));
	}

	// includes will have to be re-resolved now
	IncludesResolved = false;

	if (State > ASS_PREPARSED) State = ASS_PREPARSED;
}
Пример #6
0
void C4MapScriptHost::AddEngineFunctions()
{
	// adds all engine functions to the MapLayer context
	C4PropListStatic * p = GetPropList();
	::AddFunc(p, "Draw", FnLayerDraw);
	::AddFunc(p, "Blit", FnLayerBlit);
	::AddFunc(p, "CreateLayer", FnCreateLayer);
	::AddFunc(p, "Duplicate", FnLayerDuplicate);
	::AddFunc(p, "GetMaterialTextureIndex", FnLayerGetMaterialTextureIndex);
	::AddFunc(p, "GetDefaultBackgroundIndex", FnLayerGetDefaultBackgroundIndex);
	::AddFunc(p, "GetPixel", FnLayerGetPixel);
	::AddFunc(p, "GetBackPixel", FnLayerGetBackPixel);
	::AddFunc(p, "SetPixel", FnLayerSetPixel);
	::AddFunc(p, "GetPixelCount", FnLayerGetPixelCount);
	::AddFunc(p, "Resize", FnLayerResize);
	::AddFunc(p, "FindPosition", FnLayerFindPosition);
	::AddFunc(p, "CreateMatTexMask", FnLayerCreateMatTexMask);
}
Пример #7
0
// ResolveAppends and ResolveIncludes must be called both
// for each script. ResolveAppends has to be called first!
bool C4ScriptHost::ResolveAppends(C4DefList *rDefs)
{
	// resolve local appends
	if (State != ASS_PREPARSED) return false;
	for (std::list<StdCopyStrBuf>::iterator a = Appends.begin(); a != Appends.end(); ++a)
	{
		if (*a != "*" || !rDefs)
		{
			C4Def *Def = rDefs ? rDefs->GetByName(*a) : NULL;
			if (Def)
			{
				if (std::find(Def->Script.SourceScripts.begin(), Def->Script.SourceScripts.end(), GetScriptHost()) == Def->Script.SourceScripts.end())
					Def->Script.SourceScripts.push_back(GetScriptHost());
			}
			else
			{
				// save id in buffer because AulWarn will use the buffer of C4IdText
				// to get the id of the object in which the error occurs...
				// (stupid static buffers...)
				Warn("#appendto %s not found", a->getData());
			}
		}
		else
		{
			// append to all defs
			for (int i = 0; i < rDefs->GetDefCount(); i++)
			{
				C4Def *pDef = rDefs->GetDef(i);
				if (!pDef) break;
				if (pDef == GetPropList()) continue;
				// append
				if (std::find(pDef->Script.SourceScripts.begin(), pDef->Script.SourceScripts.end(), GetScriptHost()) == pDef->Script.SourceScripts.end())
					pDef->Script.SourceScripts.push_back(GetScriptHost());
			}
		}
	}
	return true;
}
Пример #8
0
BOOL CVpProperties::Show(LPFX pfx)
{
	EndEdit();

	// Destroy properties list
	GetPropList().Destroy();

	// Lose list items
	GetListCtrl().Destroy();

	// Rebuild header
	GetListCtrl().GetHeader().Destroy();
	GetListCtrl().GetHeader().AddHeaderItem( 120, "Name" );
	GetListCtrl().GetHeader().AddHeaderItem( 120, "Value" );

	// Is there an object?
	if ( pfx == NULL ) 
	{	RedrawWindow();
		return FALSE;
	} // end if

	switch( pfx->type )
	{
		case FXTYPE_TEXT:

			// Add text group
			GetPropList().Add( PROPTYPE_GROUP, 0, 0, "Text", NULL, 0 );

			// Add properties
			GetPropList().Add(	PROPTYPE_STR, PROPEDIT_EDIT,
								0, "Text", 
								pfx->data, sizeof( pfx->data ) );

			break;

		case FXTYPE_TIME:

			// Add text group
			GetPropList().Add( PROPTYPE_GROUP, 0, 0, "Time", NULL, 0 );

			GetPropList().Add(	PROPTYPE_FLAG, PROPEDIT_CHECK,
								0, "Style", 
								&pfx->f1, sizeof( pfx->f1 ), 0, 0,
								FXF1_ANALOG, "Analog", "Digital" );

			GetPropList().Add(	PROPTYPE_FLAG, PROPEDIT_CHECK,
								0, "Time Zone", 
								&pfx->f1, sizeof( pfx->f1 ), 0, 0,
								FXF1_GMT, "GMT", "Local" );

			GetPropList().Add(	PROPTYPE_STR, PROPEDIT_EDIT,
								0, "Format", 
								&pfx->sep, sizeof( pfx->sep ) );

			break;

		case FXTYPE_DATE:

			// Add text group
			GetPropList().Add( PROPTYPE_GROUP, 0, 0, "Date", NULL, 0 );

			GetPropList().Add(	PROPTYPE_FLAG, PROPEDIT_CHECK,
								0, "Style", 
								&pfx->f1, sizeof( pfx->f1 ), 0, 0,
								FXF1_ANALOGCAL, "Analog", "Digital" );

			GetPropList().Add(	PROPTYPE_FLAG, PROPEDIT_CHECK,
								0, "Time Zone", 
								&pfx->f1, sizeof( pfx->f1 ), 0, 0,
								FXF1_GMT, "GMT", "Local" );

			GetPropList().Add(	PROPTYPE_STR, PROPEDIT_EDIT,
								0, "Format String", 
								&pfx->sep, sizeof( pfx->sep ) );
			break;

		
		case FXTYPE_SCREENSHOT :

			// Add text group
			GetPropList().Add( PROPTYPE_GROUP, 0, 0, "Screenshot", NULL, 0 );

			GetPropList().Add(	PROPTYPE_STR, PROPEDIT_COMBO,
								1, "Window Name", 
								&pfx->data, sizeof( pfx->data ),
								0, 0, 0, NULL, NULL, TRUE );
			break;

		case FXTYPE_URL :

			// Add text group
			GetPropList().Add( PROPTYPE_GROUP, 0, 0, "Internet Image", NULL, 0 );

			GetPropList().Add(	PROPTYPE_STR, PROPEDIT_EDIT,
								1, "URL", 
								&pfx->data, sizeof( pfx->data ),
								0, 0, 0, NULL, NULL, TRUE );
			break;

		case FXTYPE_VIDEO :

			// Add text group
			GetPropList().Add( PROPTYPE_GROUP, 0, 0, "Video", NULL, 0 );

			GetPropList().Add(	PROPTYPE_DWORD, PROPEDIT_COMBO,
								2, "Video Driver", 
								&pfx->driver, sizeof( pfx->driver ),
								0, 0, 0, NULL, NULL, TRUE );
			break;

		case FXTYPE_IMAGE:
		case FXTYPE_WATERMARK:

			// Add text group
			GetPropList().Add( PROPTYPE_GROUP, 0, 0, "Image", NULL, 0 );

			GetPropList().Add(	PROPTYPE_FILE, PROPEDIT_FILE, 
								0, "Image", 
								pfx->data, sizeof( pfx->data ) );

			GetPropList().Add(	PROPTYPE_FLAG, PROPEDIT_CHECK,
								0, "Real Size", 
								&pfx->f1, sizeof( pfx->f1 ), 0, 0,
								FXF1_REALSIZE, "True", "False" );

			break;

		case FXTYPE_RECT:

			// Add text group
			GetPropList().Add( PROPTYPE_GROUP, 0, 0, "Rectangle", NULL, 0 );

			GetPropList().Add(	PROPTYPE_RGB, PROPEDIT_RGB, 
								0, "Background Color", 
								&pfx->bck, sizeof( pfx->bck ) );

			GetPropList().Add(	PROPTYPE_FLAG, PROPEDIT_CHECK,
								0, "Border", 
								&pfx->f1, sizeof( pfx->f1 ), 0, 0,
								FXF1_BORDER, "True", "False" );

			GetPropList().Add(	PROPTYPE_FLAG, PROPEDIT_CHECK,
								0, "Border Type", 
								&pfx->f1, sizeof( pfx->f1 ), 0, 0,
								FXF1_FOUNDERED, "Foundered", "Normal" );

			break;

	} // end switch

	switch( pfx->type )
	{

		case FXTYPE_IMAGE:
		case FXTYPE_WATERMARK:

		case FXTYPE_VIDEO :
		case FXTYPE_SCREENSHOT:

		case FXTYPE_URL :

			// Add text group
			GetPropList().Add( PROPTYPE_GROUP, 0, 0, "Image Properties", NULL, 0 );

			GetPropList().Add(	PROPTYPE_DWORD, PROPEDIT_SLIDER, 
								0, "Translucency", 
								&pfx->translucency, sizeof( pfx->translucency ), 0, 10000 );

			GetPropList().Add(	PROPTYPE_FLAG, PROPEDIT_CHECK,
								0, "Transparency", 
								&pfx->f1, sizeof( pfx->f1 ), 0, 0,
								FXF1_TRANSPARENCY, "True", "False" );

			GetPropList().Add(	PROPTYPE_DWORD, PROPEDIT_SLIDER, 
								0, "Chroma (+)", 
								&pfx->cpos, sizeof( pfx->cpos ), 0, 255 );
			
			GetPropList().Add(	PROPTYPE_DWORD, PROPEDIT_SLIDER,  
								0, "Chroma (--)", 
								&pfx->cneg, sizeof( pfx->cneg ), 0, 255 );

			GetPropList().Add(	PROPTYPE_RGB, PROPEDIT_RGB, 
								0, "Chroma Key", 
								&pfx->trans, sizeof( pfx->trans ) );

			GetPropList().Add(	PROPTYPE_FLAG, PROPEDIT_CHECK,
								0, "Aspect Ratio", 
								&pfx->f1, sizeof( pfx->f1 ), 0, 0,
								FXF1_ASPECT, "Maintain", "Ignore" );


			GetPropList().Add(	PROPTYPE_FLAG, PROPEDIT_CHECK,
								0, "Border", 
								&pfx->f1, sizeof( pfx->f1 ), 0, 0,
								FXF1_BORDER, "True", "False" );

			GetPropList().Add(	PROPTYPE_FLAG, PROPEDIT_CHECK,
								0, "Border Type", 
								&pfx->f1, sizeof( pfx->f1 ), 0, 0,
								FXF1_FOUNDERED, "Foundered", "Normal" );

			
			break;


		case FXTYPE_TIME:
		case FXTYPE_DATE:
		case FXTYPE_STEXT:
		case FXTYPE_TEXT:

			// Add text group
			GetPropList().Add( PROPTYPE_GROUP, 0, 0, "Image Properties", NULL, 0 );

			GetPropList().Add(	PROPTYPE_DWORD, PROPEDIT_SLIDER, 
								0, "Translucency", 
								&pfx->translucency, sizeof( pfx->translucency ), 0, 10000 );

			GetPropList().Add(	PROPTYPE_FLAG, PROPEDIT_CHECK,
								0, "Background", 
								&pfx->f1, sizeof( pfx->f1 ), 0, 0,
								FXF1_BCK, "True", "False" );

			GetPropList().Add(	PROPTYPE_RGB, PROPEDIT_RGB, 
								0, "Background Color", 
								&pfx->bck, sizeof( pfx->bck ) );

			GetPropList().Add(	PROPTYPE_RGB, PROPEDIT_RGB, 
								0, "Foreground", 
								&pfx->rgb, sizeof( pfx->rgb ) );

			GetPropList().Add(	PROPTYPE_FLAG, PROPEDIT_CHECK,
								0, "Border", 
								&pfx->f1, sizeof( pfx->f1 ), 0, 0,
								FXF1_BORDER, "True", "False" );

			GetPropList().Add(	PROPTYPE_FLAG, PROPEDIT_CHECK,
								0, "Border Type", 
								&pfx->f1, sizeof( pfx->f1 ), 0, 0,
								FXF1_FOUNDERED, "Foundered", "Normal" );

			// Add text group
			GetPropList().Add( PROPTYPE_GROUP, 0, 0, "Text Properties", NULL, 0 );

			// Add properties
			GetPropList().Add(	PROPTYPE_FONT, PROPEDIT_FONT, 
								0, "Font", 
								&pfx->lf, sizeof( pfx->lf ) );

			GetPropList().Add(	PROPTYPE_LONG, PROPEDIT_SLIDER, 
								0, "Shadow", 
								&pfx->shadow, sizeof( pfx->shadow ), -12, 12 );

			GetPropList().Add(	PROPTYPE_LONG, PROPEDIT_EDIT, 
								0, "Rotation", 
								&pfx->lf.lfEscapement, sizeof( pfx->lf.lfEscapement ), 0, 3600 );


			GetPropList().Add(	PROPTYPE_FLAG, PROPEDIT_CHECK,
								0, "Single Line", 
								&pfx->flags, sizeof( pfx->flags ), 0, 0,
								DT_SINGLELINE, "True", "False" );

			GetPropList().Add(	PROPTYPE_FLAG, PROPEDIT_CHECK,
								0, "Word Break", 
								&pfx->flags, sizeof( pfx->flags ), 0, 0,
								DT_WORDBREAK, "True", "False" );

			GetPropList().Add(	PROPTYPE_FLAG, PROPEDIT_CHECK,
								0, "Multiline Center", 
								&pfx->flags, sizeof( pfx->flags ), 0, 0,
								EDT_MULTICENTER, "True", "False" );

			GetPropList().Add(	PROPTYPE_FLAG, PROPEDIT_CHECK,
								0, "Escapement Center", 
								&pfx->flags, sizeof( pfx->flags ), 0, 0,
								EDT_ESCAPEMENTCENTER, "True", "False" );

			GetPropList().Add(	PROPTYPE_FLAG, PROPEDIT_CHECK,
								0, "No Clipping", 
								&pfx->flags, sizeof( pfx->flags ), 0, 0,
								DT_NOCLIP, "True", "False" );

			GetPropList().Add(	PROPTYPE_FLAG, PROPEDIT_CHECK,
								0, "Path Ellipsis", 
								&pfx->flags, sizeof( pfx->flags ), 0, 0,
								DT_PATH_ELLIPSIS, "True", "False" );

			GetPropList().Add(	PROPTYPE_FLAG, PROPEDIT_CHECK,
								0, "Like Edit Ctrl", 
								&pfx->flags, sizeof( pfx->flags ), 0, 0,
								DT_EDITCONTROL, "True", "False" );

			GetPropList().Add(	PROPTYPE_FLAG, PROPEDIT_CHECK,
								0, "End Ellipsis", 
								&pfx->flags, sizeof( pfx->flags ), 0, 0,
								DT_END_ELLIPSIS, "True", "False" );

			GetPropList().Add(	PROPTYPE_FLAG, PROPEDIT_CHECK,
								0, "Expand Tabs", 
								&pfx->flags, sizeof( pfx->flags ), 0, 0,
								DT_EXPANDTABS, "True", "False" );

			GetPropList().Add(	PROPTYPE_FLAG, PROPEDIT_CHECK,
								0, "External Leading", 
								&pfx->flags, sizeof( pfx->flags ), 0, 0,
								DT_EXTERNALLEADING, "True", "False" );

			GetPropList().Add(	PROPTYPE_FLAG, PROPEDIT_CHECK,
								0, "No Prefix", 
								&pfx->flags, sizeof( pfx->flags ), 0, 0,
								DT_NOPREFIX, "True", "False" );

			GetPropList().Add(	PROPTYPE_FLAG, PROPEDIT_CHECK,
								0, "Right To Left", 
								&pfx->flags, sizeof( pfx->flags ), 0, 0,
								DT_RTLREADING, "True", "False" );

			break;


	} // end switch

	// Loadup the list
	LoadList();

	RedrawWindow();

	return TRUE;
}
Пример #9
0
BOOL CHtmlProperties::AddKey(CReg *pReg, CRKey *pRk)
{
	CRKey *pType = pReg->GetKey( "type" );

	if ( pRk != NULL )
	{
		char type[ CWF_STRSIZE ];
		LPREGVALUE prv = NULL;
		while ( ( prv = (LPREGVALUE)pRk->GetNext( prv ) ) != NULL )
		{		
			// Get type
			if ( pType == NULL ) m_dwParams = 0, m_szParams[ 0 ][ 0 ] = 0;

			// Get variable type
			else if ( pType->Get( prv->cpkey, type, sizeof( type ) ) )
				GetParams( type );

			// No params
			else m_dwParams = 0, m_szParams[ 0 ][ 0 ] = 0;
											
			// Image
			if ( m_dwParams > 0 )
			{
				// Check for group name
				if ( *prv->cpkey == '*' )
					GetPropList().Add( PROPTYPE_GROUP, 0, 0, &prv->cpkey[ 1 ], NULL, 0 );

				else if ( !strcmpi( m_szParams[ 0 ], "image" ) )
					GetPropList().Add(	PROPTYPE_FILE, PROPEDIT_COMBOEDIT, 1,
										prv->cpkey, prv->data, prv->size );

				else if ( !strcmpi( m_szParams[ 0 ], "diskimg" ) )
					GetPropList().Add(	PROPTYPE_FILE, PROPEDIT_FILE, 0,
										prv->cpkey, prv->data, prv->size );

				else if ( !strcmpi( m_szParams[ 0 ], "rgb" ) )
					GetPropList().Add(	PROPTYPE_RGBSTR, PROPEDIT_RGB, 0,
										prv->cpkey, prv->data, prv->size );

				else if ( !strcmpi( m_szParams[ 0 ], "slider" ) )
				{
					if ( m_dwParams < 2 ) m_lParams[ 1 ] = 0;
					if ( m_dwParams < 3 ) m_lParams[ 2 ] = 100;

					GetPropList().Add(	PROPTYPE_STR, PROPEDIT_SLIDER, 0,
										prv->cpkey, prv->data, prv->size,
										m_lParams[ 1 ], m_lParams[ 2 ] );
				} // end else if

				else if ( !strcmpi( m_szParams[ 0 ], "combo" ) )
					GetPropList().Add(	PROPTYPE_STR, PROPEDIT_COMBO, 2,
										prv->cpkey, prv->data, prv->size );


				// String
				else GetPropList().Add(	PROPTYPE_STR, PROPEDIT_EDIT, 0,
										prv->cpkey, prv->data, prv->size );
			
			} // end if

			// Check for group name
			else if ( *prv->cpkey == '*' )
				GetPropList().Add( PROPTYPE_GROUP, 0, 0, &prv->cpkey[ 1 ], NULL, 0 );

			else if ( *prv->pcdata == '#' )
			{
				GetPropList().Add(	PROPTYPE_RGBSTR, PROPEDIT_RGB, 0,
									prv->cpkey, prv->data, prv->size );
			} // end if

			// Assume string
			else GetPropList().Add(	PROPTYPE_STR, PROPEDIT_EDIT, 0,
									prv->cpkey, prv->data, prv->size );

		} // end while

	} // end if

	return TRUE;

/*	if ( pRk == NULL ) return FALSE;

	LPREGVALUE prv = NULL;
	while ( ( prv = (LPREGVALUE)pRk->GetNext( prv ) ) != NULL )
	{		
		if ( prv->data != NULL )
		{
			// Check for group name
			if ( *prv->cpkey == '*' )
				GetPropList().Add( PROPTYPE_GROUP, 0, 0, &prv->cpkey[ 1 ], NULL, 0 );

			else if ( *prv->pcdata == '#' )
			{
				GetPropList().Add(	PROPTYPE_RGBSTR, PROPEDIT_RGB, 0,
									prv->cpkey, prv->data, prv->size );
			} // end if

			// Add the property
			else GetPropList().Add(	PROPTYPE_STR, PROPEDIT_EDIT, 0,
									prv->cpkey, prv->data, prv->size );
		} // end if
		
	} // end while

	return TRUE;
*/
}