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; }
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(); } }
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; }
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. }
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; }
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); }
// 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; }
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; }
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; */ }