From 1948342aa869ad284d3bed11abbec03bc56ac612 Mon Sep 17 00:00:00 2001 From: Chris Xiong Date: Tue, 27 Feb 2018 01:00:47 +0800 Subject: the fscking initial commit. --- Callback.cpp | 32 +++ Callback.h | 3 + Editor.cpp | 108 ++++++++ Editor.def | 8 + Editor.h | 51 ++++ Fsck.rc | 286 +++++++++++++++++++++ Fsck.vcxproj | 187 ++++++++++++++ LICENSE.TXT | 24 ++ Menu.cpp | 652 ++++++++++++++++++++++++++++++++++++++++++++++++ Menu.h | 13 + README.md | 16 ++ Script Materializer.sln | 25 ++ StdAfx.cpp | 8 + StdAfx.h | 40 +++ icon1.ico | Bin 0 -> 1406 bytes resource.h | 18 ++ 16 files changed, 1471 insertions(+) create mode 100644 Callback.cpp create mode 100644 Callback.h create mode 100644 Editor.cpp create mode 100644 Editor.def create mode 100644 Editor.h create mode 100644 Fsck.rc create mode 100644 Fsck.vcxproj create mode 100644 LICENSE.TXT create mode 100644 Menu.cpp create mode 100644 Menu.h create mode 100644 README.md create mode 100644 Script Materializer.sln create mode 100644 StdAfx.cpp create mode 100644 StdAfx.h create mode 100644 icon1.ico create mode 100644 resource.h diff --git a/Callback.cpp b/Callback.cpp new file mode 100644 index 0000000..b96a30a --- /dev/null +++ b/Callback.cpp @@ -0,0 +1,32 @@ +#include "stdafx.h" +#include "Callback.h" +#include "Menu.h" + +//static plugin interface that allow direct communication with Virtools Dev +PluginInterface* s_Plugininterface = NULL; + + +//main plugin callback for Virtools Dev +void PluginCallback(PluginInfo::CALLBACK_REASON reason,PluginInterface* plugininterface) +{ + switch(reason) + { + case PluginInfo::CR_LOAD: + { + s_Plugininterface = plugininterface; + InitMenu(); + UpdateMenu(); + }break; + case PluginInfo::CR_UNLOAD: + { + RemoveMenu(); + s_Plugininterface = NULL; + }break; + case PluginInfo::CR_NEWCOMPOSITIONNAME: + { + }break; + case PluginInfo::CR_NOTIFICATION: + { + }break; + } +} diff --git a/Callback.h b/Callback.h new file mode 100644 index 0000000..f023e88 --- /dev/null +++ b/Callback.h @@ -0,0 +1,3 @@ +#pragma once + +void PluginCallback(PluginInfo::CALLBACK_REASON reason,PluginInterface* plugininterface); diff --git a/Editor.cpp b/Editor.cpp new file mode 100644 index 0000000..2441245 --- /dev/null +++ b/Editor.cpp @@ -0,0 +1,108 @@ +// Editor.cpp : Defines the initialization routines for the DLL. +// + +#include "stdafx.h" +#include "Editor.h" +#include "Callback.h" + +#ifdef _MFCDEBUGNEW +#ifdef _DEBUG +#define new DEBUG_NEW +#undef THIS_FILE +static char THIS_FILE[] = __FILE__; +#endif +#endif + +TestEditorDlg* g_Editor = NULL; +TestToolbarDlg* g_Toolbar = NULL; + +//---------------------------------------- +//The Plugin Info structure that must be filled for Virtools Dev to load effectively the plugin +PluginInfo g_PluginInfo0; + +//Returns the number of plugin contained in this dll +//this function must be exported (have a .def file with its name or use __declspec( dllexport ) +int GetVirtoolsPluginInfoCount() +{ + return 1; +} + +//returns the ptr of the (index)th plugininfo structure of this dll +//this function must be exported (have a .def file with its name or use __declspec( dllexport ) +PluginInfo* GetVirtoolsPluginInfo(int index) +{ + switch(index) + { + case 0: + return &g_PluginInfo0; + } + return NULL; +} + +// +// Note! +// +// If this DLL is dynamically linked against the MFC +// DLLs, any functions exported from this DLL which +// call into MFC must have the AFX_MANAGE_STATE macro +// added at the very beginning of the function. +// +// For example: +// +// extern "C" BOOL PASCAL EXPORT ExportedFunction() +// { +// AFX_MANAGE_STATE(AfxGetStaticModuleState()); +// // normal function body here +// } +// +// It is very important that this macro appear in each +// function, prior to any calls into MFC. This means that +// it must appear as the first statement within the +// function, even before any object variable declarations +// as their constructors may generate calls into the MFC +// DLL. +// +// Please see MFC Technical Notes 33 and 58 for additional +// details. +// + +///////////////////////////////////////////////////////////////////////////// +// CTestEditorApp + +BEGIN_MESSAGE_MAP(CTestEditorApp, CWinApp) + //{{AFX_MSG_MAP(CTestEditorApp) + // NOTE - the ClassWizard will add and remove mapping macros here. + // DO NOT EDIT what you see in these blocks of generated code! + //}}AFX_MSG_MAP +END_MESSAGE_MAP() + +///////////////////////////////////////////////////////////////////////////// +// CTestEditorApp construction + +CTestEditorApp::CTestEditorApp() +{ +} + +///////////////////////////////////////////////////////////////////////////// +// The one and only CTestEditorApp object + +CTestEditorApp theApp; + +BOOL CTestEditorApp::InitInstance() +{ + // TODO: Add your specialized code here and/or call the base class + + strcpy(g_PluginInfo0.m_Name,"Script Materializer"); + g_PluginInfo0.m_PluginType = PluginInfo::PT_EDITOR; + g_PluginInfo0.m_PluginType = (PluginInfo::PLUGIN_TYPE)(g_PluginInfo0.m_PluginType | PluginInfo::PTF_RECEIVENOTIFICATION); + g_PluginInfo0.m_PluginCallback = PluginCallback; + + return CWinApp::InitInstance(); +} + +int CTestEditorApp::ExitInstance() +{ + // TODO: Add your specialized code here and/or call the base class + + return CWinApp::ExitInstance(); +} diff --git a/Editor.def b/Editor.def new file mode 100644 index 0000000..3ac3e6d --- /dev/null +++ b/Editor.def @@ -0,0 +1,8 @@ +; Editor.def : Declares the module parameters for the DLL. + +LIBRARY "Editor" +DESCRIPTION 'Editor Windows Dynamic Link Library' + +EXPORTS + GetVirtoolsPluginInfoCount + GetVirtoolsPluginInfo diff --git a/Editor.h b/Editor.h new file mode 100644 index 0000000..17aa73a --- /dev/null +++ b/Editor.h @@ -0,0 +1,51 @@ +// TestEditor.h : main header file for the EDITOR DLL +// + +#pragma once + +#ifndef __AFXWIN_H__ + #error include 'stdafx.h' before including this file for PCH +#endif + +#include "resource.h" // main symbols + +class TestEditorDlg; +class TestToolbarDlg; + +extern TestEditorDlg* g_Editor; +extern TestToolbarDlg* g_Toolbar; + +//plugin interface for communication with Virtools Dev +extern PluginInterface* s_Plugininterface; + +///////////////////////////////////////////////////////////////////////////// +// CEditorApp +// See Editor.cpp for the implementation of this class +// + +class CTestEditorApp : public CWinApp +{ + +public: + CTestEditorApp(); + +// Overrides + // ClassWizard generated virtual function overrides + //{{AFX_VIRTUAL(TestCEditorApp) + public: + virtual BOOL InitInstance(); + virtual int ExitInstance(); + //}}AFX_VIRTUAL + + //{{AFX_MSG(TestCEditorApp) + // NOTE - the ClassWizard will add and remove member functions here. + // DO NOT EDIT what you see in these blocks of generated code ! + //}}AFX_MSG + DECLARE_MESSAGE_MAP() +}; + + +///////////////////////////////////////////////////////////////////////////// + +//{{AFX_INSERT_LOCATION}} +// Microsoft Visual C++ will insert additional declarations immediately before the previous line. diff --git a/Fsck.rc b/Fsck.rc new file mode 100644 index 0000000..6061dc8 --- /dev/null +++ b/Fsck.rc @@ -0,0 +1,286 @@ +//Microsoft Developer Studio generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "afxres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (U.S.) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US +#pragma code_page(1252) +#endif //_WIN32 + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE DISCARDABLE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE DISCARDABLE +BEGIN + "#include ""afxres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE DISCARDABLE +BEGIN + "#define _AFX_NO_SPLITTER_RESOURCES\r\n" + "#define _AFX_NO_OLE_RESOURCES\r\n" + "#define _AFX_NO_TRACKER_RESOURCES\r\n" + "#define _AFX_NO_PROPERTY_RESOURCES\r\n" + "\r\n" + "#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)\r\n" + "#ifdef _WIN32\r\n" + "LANGUAGE 9, 1\r\n" + "#pragma code_page(1252)\r\n" + "#endif //_WIN32\r\n" +// "#include ""res\\TestEditor.rc2"" // non-Microsoft Visual C++ edited resources\r\n" + "#include ""afxres.rc"" // Standard components\r\n" + "#endif\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +#ifndef _MAC +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +VS_VERSION_INFO VERSIONINFO + FILEVERSION 0,01 + PRODUCTVERSION 0,01 + FILEFLAGSMASK 0x3fL +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x4L + FILETYPE 0x2L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904B0" + BEGIN + VALUE "CompanyName", "Chrisoft\0" + VALUE "FileDescription", "Fsck DLL\0" + VALUE "FileVersion", "0.01\0" + VALUE "InternalName", "Script Materializer\0" + VALUE "LegalCopyright", "2018 Chrisoft\0" + VALUE "OriginalFilename", "Script Materializer.dll\0" + VALUE "ProductName", "Fsck for Virtools\0" + VALUE "ProductVersion", "0.01\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1200 + END +END + +#endif // !_MAC + + +///////////////////////////////////////////////////////////////////////////// +// +// Dialog +// + +IDD_EDITOR DIALOG DISCARDABLE 0, 0, 186, 97 +STYLE WS_CHILD +FONT 8, "MS Sans Serif" +BEGIN +END + +IDD_TOOLBAR DIALOG DISCARDABLE 0, 0, 186, 97 +STYLE WS_CHILD +FONT 8, "MS Sans Serif" +BEGIN +END + + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +IDI_EDITORICON ICON DISCARDABLE "icon1.ico" +#endif // English (U.S.) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// +#define _AFX_NO_SPLITTER_RESOURCES +#define _AFX_NO_OLE_RESOURCES +#define _AFX_NO_TRACKER_RESOURCES +#define _AFX_NO_PROPERTY_RESOURCES + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 +LANGUAGE 9, 1 +#pragma code_page(1252) +#endif //_WIN32 +//#include "res\TestEditor.rc2" // non-Microsoft Visual C++ edited resources +#include "afxres.rc" // Standard components +#endif + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Fsck.vcxproj b/Fsck.vcxproj new file mode 100644 index 0000000..2656938 --- /dev/null +++ b/Fsck.vcxproj @@ -0,0 +1,187 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {D20B1C85-814D-4F05-A840-634F9E062019} + + + . + + MFCProj + Script Materializer + 10.0.16299.0 + + + + DynamicLibrary + v141 + Dynamic + MultiByte + + + DynamicLibrary + v141 + Dynamic + MultiByte + + + + + + + + + + + + + <_ProjectFileVersion>15.0.27130.2020 + + + ..\..\..\Temp\$(Platform)\$(ProjectName)\$(Configuration)\ + ..\..\..\Temp\$(Platform)\$(ProjectName)\$(Configuration)\ + false + + + ..\..\..\Temp\$(Platform)\$(ProjectName)\$(Configuration)\ + ..\..\..\Temp\$(Platform)\$(ProjectName)\$(Configuration)\ + true + + + + MaxSpeed + OnlyExplicitInline + ..\..\InterfaceControls\include;..\..\..\Includes;..\..\CKControls;..\..\..\Behaviors\VSLManager;..\..\..\VSL;../DllEditorLib;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + MultiThreadedDLL + true + Use + stdafx.h + $(IntDir)$(ProjectName).pch + + $(IntDir) + $(OutDir)$(ProjectName).pdb + Level3 + true + ProgramDatabase + Default + + + vxmath.lib;DllEditor.lib;ck2.lib;InterfaceControls.lib;CKControls.lib;%(AdditionalDependencies) + ..\..\..\..\InterfacePlugins\$(ProjectName).dll + true + ..\..\..\Lib\$(Platform)\Release;%(AdditionalLibraryDirectories) + .\TestEditor.def + true + ..\..\..\..\InterfacePlugins\$(ProjectName).pdb + Windows + $(OutDir)$(ProjectName).lib + MachineX86 + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Release/Test.tlb + + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + + + Disabled + ..\..\InterfaceControls\include;E:\Virtools Dev 3.5 Full\Sdk\Includes;..\..\CKControls;..\..\..\Behaviors\VSLManager;..\..\..\VSL;../DllEditorLib;\\devserver\dev\PlatformSDK\include;.\jsoncpp-1.8.4\include;%(AdditionalIncludeDirectories) + WIN32;_WINDOWS;_USRDLL;VX_MEM_RELEASE;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDLL + Use + stdafx.h + $(IntDir)$(ProjectName).pch + + $(IntDir) + $(OutDir)$(ProjectName).pdb + Level3 + true + EditAndContinue + Default + + + vxmath.lib;DllEditor.lib;ck2.lib;InterfaceControls.lib;CKControls.lib;lib_json.lib;%(AdditionalDependencies) + E:\Virtools Dev 3.5 Full\InterfacePlugins\$(ProjectName).dll + true + E:\Virtools Dev 3.5 Full\Sdk\Lib\$(Platform)\Release;.\jsoncpp-1.8.4\makefiles\msvc2010\Release;%(AdditionalLibraryDirectories) + .\Editor.def + true + ..\..\..\..\InterfacePlugins\$(ProjectName).pdb + Windows + $(OutDir)$(ProjectName).lib + MachineX86 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/Test.tlb + + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + + + Disabled + EnableFastChecks + Create + MaxSpeed + Create + + + Disabled + EnableFastChecks + MaxSpeed + + + + Disabled + EnableFastChecks + MaxSpeed + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/LICENSE.TXT b/LICENSE.TXT new file mode 100644 index 0000000..e9d14b5 --- /dev/null +++ b/LICENSE.TXT @@ -0,0 +1,24 @@ +Copyright (c) 2018, Chris Xiong +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of the copyright holder nor the names of its + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/Menu.cpp b/Menu.cpp new file mode 100644 index 0000000..0a34679 --- /dev/null +++ b/Menu.cpp @@ -0,0 +1,652 @@ +//Interface plugin for Virtools Dev/3DVIA Virtools +//Virtools Script2Json & Building Block toolbox +//By Chris Xiong, 2018 +//License: 3-Clause BSD +/* +Copyright (c) 2018, Chris Xiong +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of the copyright holder nor the names of its + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +#include "stdafx.h" +#include "Menu.h" +#include +#include +#include +#include +#include "json/json.h" + +extern PluginInterface* s_Plugininterface; + +void PluginMenuCallback(int commandID); + +//static main menu +CMenu* s_MainMenu = NULL; + +#define PLUGINMENU_MAXENTRIES 20 //put there the max entries your menu may use + +//adds the menu to Virtools Dev main menu +void InitMenu() +{ + if (!s_Plugininterface) + return; + + s_MainMenu = s_Plugininterface->AddPluginMenu(STR_MAINMENUNAME,PLUGINMENU_MAXENTRIES,NULL,(VoidFunc1Param)PluginMenuCallback); +} + +//removes the menu from Virtools Dev main menu +void RemoveMenu() +{ + if (!s_Plugininterface || !s_MainMenu) + return; + + s_Plugininterface->RemovePluginMenu(s_MainMenu); +} + +//up to user. +//(May be called on new composition notification for instance) +//Note that first commandID can be 0 +//but last command ID must be lesser thanPLUGINMENU_MAXENTRIES +void UpdateMenu() +{ + s_Plugininterface->ClearPluginMenu(s_MainMenu); //clear menu + + s_Plugininterface->AddPluginMenuItem(s_MainMenu,0,"Fsck /dev/sda1");//dump to json + s_Plugininterface->AddPluginMenuItem(s_MainMenu,-1,NULL,TRUE); + + //note : sub menu must have independent command ids that must be >=0 + CMenu* sub0 = s_Plugininterface->AddPluginMenuItem(s_MainMenu,0,"Fsck /dev/sdb",FALSE,TRUE);//bb manipulation + + s_Plugininterface->AddPluginMenuItem(sub0,1,"Fsck /dev/sdb1");//modify bb proto + s_Plugininterface->AddPluginMenuItem(sub0,2,"Fsck /dev/sdb2");//not implemented + + s_Plugininterface->AddPluginMenuItem(s_MainMenu,-1,NULL,TRUE); + s_Plugininterface->AddPluginMenuItem(s_MainMenu,10,"Exit Fsck"); + + s_Plugininterface->UpdatePluginMenu(s_MainMenu); //update menu,always needed when you finished to update the menu + //unless you want the menu not to have Virtools Dev main menu color scheme. +} + +//bool clone_script(CKParameter* source_script,CKParameter* dest_script); +//bool clone_behavior(CKBehavior* src,CKBehavior* dest,CKBehavior* destpar); +bool dump_script(CKParameter* script); +bool dump_behavior(CKBehavior* src,Json::Value* dest,Json::Value* destpar); +bool CKParameter2Json(CKParameter* p,Json::Value &v); +void modify_bb_guid(); + +//fill with your command IDs and your actions +void PluginMenuCallback(int commandID) +{ + switch(commandID) + { + case 0: + { + AFX_MANAGE_STATE(AfxGetStaticModuleState()); + CKContext* ctx=s_Plugininterface->GetCKContext(); + ParamEditDlg shitdialog(ctx); + shitdialog.SetTitle("Pick the shit you want to materialize"); + CKParameter* srcshit=(CKParameter*)ctx->CreateObject(CKCID_PARAMETER,"source shit"); + //CKParameter* destshit=(CKParameter*)ctx->CreateObject(CKCID_PARAMETER,"dest shit"); + srcshit->SetGUID(CKPGUID_SCRIPT); + //destshit->SetGUID(CKPGUID_SCRIPT); + shitdialog.SetParameter(srcshit); + shitdialog.DoModal(); + //shitdialog.SetParameter(destshit); + //shitdialog.DoModal(); + //clone_script(srcshit,destshit); + dump_script(srcshit); + ctx->DestroyObject(srcshit); + //ctx->DestroyObject(destshit); + } + break; + case 1: + modify_bb_guid(); + break; + case 10: + s_Plugininterface->GetCKContext()->OutputToConsole( + "Fsck for Virtools 0.01\n" + "A FileSystem Consistency Korruption tool.\n" + "By Chris Xiong, 2018\n" + "No warranty of any fscking kind comes with this fsck.\n\n" + "Copyright (c) 2018, Chris Xiong\n" + "All rights reserved.\n" + "\n" + "Redistribution and use in source and binary forms, with or without\n" + "modification, are permitted provided that the following conditions are met:\n" + " * Redistributions of source code must retain the above copyright\n" + " notice, this list of conditions and the following disclaimer.\n" + " * Redistributions in binary form must reproduce the above copyright\n" + " notice, this list of conditions and the following disclaimer in the\n" + " documentation and/or other materials provided with the distribution.\n" + " * Neither the name of the copyright holder nor the names of its\n" + " contributors may be used to endorse or promote products derived from\n" + " this software without specific prior written permission.\n" + "\n" + "THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n" + "ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n" + "WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n" + "DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n" + "FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n" + "DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n" + "SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED\n" + "AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n" + "(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n" + "SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." + ); + break; + } +} + +template +struct rob +{ + friend typename Tag::type get(Tag) + {return M;} +}; +struct Behavior_blockdata +{ + typedef BehaviorBlockData* CKBehavior::*type; + friend type get(Behavior_blockdata); +}; +template struct rob; +void modify_bb_guid() +{ + AFX_MANAGE_STATE(AfxGetStaticModuleState()); + CKContext* ctx=s_Plugininterface->GetCKContext(); + MultiParamEditDlg shitdialog(ctx); + CKParameter* bb=(CKParameter*)ctx->CreateObject(CKCID_PARAMETER,"Building block"); + CKParameter* g1=(CKParameter*)ctx->CreateObject(CKCID_PARAMETER,"GUID upper part (as int32_t)"); + CKParameter* g2=(CKParameter*)ctx->CreateObject(CKCID_PARAMETER,"GUID lower part (as int32_t)"); + bb->SetGUID(CKPGUID_BEHAVIOR); + g1->SetGUID(CKPGUID_INT); + g2->SetGUID(CKPGUID_INT); + shitdialog.AddParameter(bb); + shitdialog.AddParameter(g1); + shitdialog.AddParameter(g2); + shitdialog.SetTitle("Fscking a building block up"); + shitdialog.DoModal(); + CKBehavior* bbr=(CKBehavior*)bb->GetValueObject(); + /*Some stupid reverse engineering goes on here + CKFile* f=bb->GetCKContext()->CreateCKFile(); + bbr->PreSave(f,0); + CKStateChunk* c=bbr->Save(f,0); + int dl=c->ConvertToBuffer(NULL); + char* dump=new char[dl+1]; + c->ConvertToBuffer((void*)dump); + if(bbr->GetPrototypeGuid().d1&&bbr->GetPrototypeGuid().d2) + {//looks for proto GUID + CKGUID og=bbr->GetPrototypeGuid(); + for(int i=0;i(dump+i),*reinterpret_cast(dump+i+4))==og) + ctx->OutputToConsoleEx("found proto GUID at offset %d",i); + } + } + if(bbr->GetOwner()) + {//looks for owner + CK_ID ow=bbr->GetOwner()->GetID(); + for(int i=0;i(dump+i)==ow) + ctx->OutputToConsoleEx("found owner id at offset %d",i); + } + } + if(bbr->GetParent()) + {//looks for parent behavior + CK_ID par=bbr->GetParent()->GetID(); + for(int i=0;i(dump+i)==par) + ctx->OutputToConsoleEx("found parent behavior id at offset %d",i); + } + } + delete[] dump;*/ + BehaviorBlockData* bbd=bbr->*get(Behavior_blockdata()); + /*char dump[128];memcpy(dump,bbd,sizeof(dump)); + CKGUID og=bbr->GetPrototypeGuid();int f=-10000000; + for(int i=0;i<31;++i){ + if(CKGUID(dump[i],dump[i+1])==og){f=i;break;} + if(CKGUID(dump[i+1],dump[i])==og){f=-i-1;break;} + } + ctx->OutputToConsoleEx(f>-10000000?"found at offset %d!":"not found",f);*/ + CKGUID g;memcpy(&g.d1,g1->GetReadDataPtr(),sizeof(g.d1)); + memcpy(&g.d2,g2->GetReadDataPtr(),sizeof(g.d2)); + if(bbd)memcpy(bbd,&g.d,sizeof(&g.d)); + bbr->NotifyEdition();//does not work... shit + ctx->OutputToConsole("Copy and paste the selected behavior to generate modified building blocks!"); + ctx->DestroyObject(bb); + ctx->DestroyObject(g1); + ctx->DestroyObject(g2); +} + +//static CKBeObject *destowner=NULL; + +/*bool clone_script(CKParameter* source_script,CKParameter* dest_script) +{ + CKContext* ctx=source_script->GetCKContext(); + CKBehavior* src=(CKBehavior*)source_script->GetValueObject(); + CKBehavior* dest=(CKBehavior*)dest_script->GetValueObject(); + if(!src||!dest)return false; + destowner=NULL; + clone_behavior(src,dest,NULL); + return false; +}*/ +bool dump_script(CKParameter* script) +{ + Json::Value ret; + CKContext* ctx=script->GetCKContext(); + CKBehavior* src=(CKBehavior*)script->GetValueObject(); + if(!src)return false; + dump_behavior(src,&ret,NULL); + Json::StreamWriterBuilder w; + std::ostringstream os; + Json::StreamWriter* sw=w.newStreamWriter(); + sw->write(ret,&os); + std::string stret=os.str(); + char* ck2isstupid=new char[stret.length()+1]; + ck2isstupid[stret.length()]=0; + memcpy(ck2isstupid,stret.c_str(),stret.length()); + char strFilter[]={"JSON (*.json)|*.json|"}; + CFileDialog FileDlg(FALSE,CString(".json"),NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,CString(strFilter)); + FileDlg.m_ofn.lpstrTitle="Save the fucking JSON"; + FileDlg.DoModal(); + CString p=FileDlg.GetFolderPath()+TEXT("\\")+FileDlg.GetFileName(); + CFile f;f.Open(p.GetString(),CFile::modeCreate|CFile::modeReadWrite); + f.Write(ck2isstupid,stret.length());f.Close(); + ctx->OutputToConsole("Done!",true); + OutputDebugStringA(ck2isstupid); + delete[] ck2isstupid; + delete sw; + return true; +} + +const char* beht2str(CK_BEHAVIOR_TYPE t) +{ + switch(t) + { + case CKBEHAVIORTYPE_BASE:return "block"; + case CKBEHAVIORTYPE_BEHAVIOR:return "graph"; + case CKBEHAVIORTYPE_SCRIPT:return "script"; + } + return "shit"; +} + +void printdumb(const char* fmt,...) +{ + char s[1024]; + va_list args; + va_start(args,fmt); + vsnprintf(s,1024,fmt,args); + OutputDebugStringA(s); + va_end(args); +} + +#define rienabranler(a,b) (a?a->b()?a->b():"(noname)":"--NULL--") +#define rienabranleri(a,b) (a?a->b()?a->b():-1:-1) +void dump_parameter_in(CKParameterIn* pin,Json::Value& v) +{ + v["id"]=Json::Value(pin->GetID()); + v["name"]=Json::Value(pin->GetName()); + v["type"]=Json::Value(pin->GetCKContext()->GetParameterManager()->ParameterGuidToName(pin->GetGUID())); + v["type_guid"]=Json::Value(); + v["type_guid"][0]=Json::Value(pin->GetGUID().d1); + v["type_guid"][1]=Json::Value(pin->GetGUID().d2); + v["real_source_id"]=Json::Value(rienabranleri(pin->GetRealSource(),GetID)); + v["direct_source_id"]=Json::Value(rienabranleri(pin->GetDirectSource(),GetID)); + v["shared_source_id"]=Json::Value(rienabranleri(pin->GetSharedSource(),GetID)); +} +void dump_parameter_out(CKParameterOut* pout,Json::Value& v) +{ + v["id"]=Json::Value(pout->GetID()); + v["name"]=Json::Value(pout->GetName()); + v["type"]=Json::Value(pout->GetCKContext()->GetParameterManager()->ParameterGuidToName(pout->GetGUID())); + v["type_guid"]=Json::Value(); + v["type_guid"][0]=Json::Value(pout->GetGUID().d1); + v["type_guid"][1]=Json::Value(pout->GetGUID().d2); + v["dest"]=Json::Value(); + for(int i=0,c=pout->GetDestinationCount();iGetDestination(i)->GetID(); +} +bool dump_behavior(CKBehavior* src,Json::Value* dest,Json::Value* destpar) +{ + printdumb("type: %s, sub count: %d, name: %s, proto: %s\n",beht2str(src->GetType()), + src->GetSubBehaviorCount(), + src->GetName(), + src->GetPrototypeName()?src->GetPrototypeName():"null" + ); + Json::Value& dst=*dest; + dst["type"]=Json::Value(src->GetType()); + if(src->GetType()==CKBEHAVIORTYPE_BASE) + { + dst["proto_guid"]=Json::Value(); + dst["proto_guid"][0]=Json::Value(src->GetPrototypeGuid().d1); + dst["proto_guid"][1]=Json::Value(src->GetPrototypeGuid().d2); + } + dst["name"]=Json::Value(std::string(src->GetName())); + dst["flags"]=Json::Value(Json::UInt(src->GetFlags())); + dst["priority"]=Json::Value(src->GetPriority()); + dst["version"]=Json::Value(src->GetVersion()); + if(src->IsUsingTarget()) + { + dst["target"]=src->GetTargetParameter()->GetRealSource()->GetID(); + } + if(std::string(src->GetName())==std::string("Op")&&src->GetLocalParameterCount()>2) + { + CKGUID g;memcpy(&g.d1,src->GetLocalParameter(1)->GetReadDataPtr(false),sizeof(g.d1)); + memcpy(&g.d2,src->GetLocalParameter(2)->GetReadDataPtr(false),sizeof(g.d2)); + dst["op_type"]=Json::Value(std::string(src->GetCKContext()->GetParameterManager()-> + OperationGuidToName(g))); + } + if(src->GetInputCount()) + { + dst["inputs"]=Json::Value(); + for(int i=0,c=src->GetInputCount();iGetInput(i)->GetName())); + v["id"]=Json::Value(src->GetInput(i)->GetID()); + } + } + if(src->GetOutputCount()) + { + dst["outputs"]=Json::Value(); + for(int i=0,c=src->GetOutputCount();iGetOutput(i)->GetName())); + v["id"]=Json::Value(src->GetOutput(i)->GetID()); + } + } + if(src->GetSubBehaviorCount()) + { + dst["subbehavior"]=Json::Value(); + for(int i=0,c=src->GetSubBehaviorCount();iGetSubBehavior(i),&dst["subbehavior"][i],NULL); + } + } + if(src->GetSubBehaviorLinkCount()) + { + dst["behavior_link"]=Json::Value(); + for(int i=0,c=src->GetSubBehaviorLinkCount();iGetSubBehaviorLink(i)->GetInBehaviorIO()->GetID()); + v["out"]=Json::Value(src->GetSubBehaviorLink(i)->GetOutBehaviorIO()->GetID()); + v["delay"]=Json::Value(src->GetSubBehaviorLink(i)->GetInitialActivationDelay()); + } + } + if(src->GetLocalParameterCount()) + { + dst["local_parameter"]=Json::Value(); + for(int i=0,c=src->GetLocalParameterCount();iGetLocalParameter(i)->GetID()); + v["name"]=Json::Value(rienabranler(src->GetLocalParameter(i),GetName)); + if(src->IsLocalParameterSetting(i)) + v["issetting"]=Json::Value(1); + CKParameter2Json(src->GetLocalParameter(i),v); + } + } + if(src->GetInputParameterCount()) + { + dst["input_parameter"]=Json::Value(); + for(int i=0,c=src->GetInputParameterCount();iGetInputParameter(i),v); + } + } + if(src->GetOutputParameterCount()) + { + dst["output_parameter"]=Json::Value(); + for(int i=0,c=src->GetOutputParameterCount();iGetOutputParameter(i),v); + } + } + if(src->GetParameterOperationCount()) + { + dst["parameter_operation"]=Json::Value(); + for(int i=0,c=src->GetParameterOperationCount();iGetCKContext()->GetParameterManager()-> + OperationGuidToName(src->GetParameterOperation(i)->GetOperationGuid()))); + CKGUID g=src->GetParameterOperation(i)->GetOperationGuid(); + char s[64];snprintf(s,64,"0x%x,0x%x",g.d1,g.d2); + v["op_guid"]=Json::Value(s); + v["p1"]=Json::Value(); + dump_parameter_in(src->GetParameterOperation(i)->GetInParameter1(),v["p1"]); + dump_parameter_in(src->GetParameterOperation(i)->GetInParameter2(),v["p2"]); + dump_parameter_out(src->GetParameterOperation(i)->GetOutParameter(),v); + } + } + return true; +} + +//typedef std::map> shitmap; + +/*bool clone_behavior(CKBehavior* src,CKBehavior* dest,CKBehavior* destpar) +//This is still incomplete (does not clone any parameters), yet it refuses to work. +{ + printdumb("type: %s, sub count: %d, proto: %s\n",beht2str(src->GetType()), + src->GetSubBehaviorCount(), + src->GetPrototypeName()?src->GetPrototypeName():"null" + ); + //copy properties src -> dest + shitmap sm; + if(src->GetType()==CKBEHAVIORTYPE_BASE) + { + dest->InitFromPrototype(src->GetPrototype()); + dest->InitFctPtrFromPrototype(src->GetPrototype()); + } + else dest->SetType(src->GetType()); + dest->SetFlags(src->GetFlags()); + dest->SetPriority(src->GetPriority()); + dest->SetVersion(src->GetVersion()); + //if(dest->GetOwner())destowner=dest->GetOwner(); + //else if(destowner)destowner->AddScript(dest);else printdumb("fuck\n"); + if(src->GetType()==CKBEHAVIORTYPE_BEHAVIOR) + { + for(int i=0;iGetOutputCount();++i) + { + dest->AddOutput(src->GetOutput(i)->GetName()); + sm[src->GetOutput(i)]=std::make_pair(dest,-i-1); + } + for(int i=0;iGetInputCount();++i) + { + dest->AddInput(src->GetInput(i)->GetName()); + sm[src->GetInput(i)]=std::make_pair(dest,i); + } + //also do this for parameters + } + if(src->GetType()==CKBEHAVIORTYPE_SCRIPT) + { + sm[src->GetInput(0)]=std::make_pair(dest,0); + } + if(destpar){CKERROR r=destpar->AddSubBehavior(dest);if(r!=CK_OK)printdumb("add sub behavior failed: %d - %s\n",r,CKErrorToString(r));} + printdumb("src fnc: %p, dest fnc: %p\n",src->GetFunction(),dest->GetFunction()); + printdumb("src owner: %s, dest owner: %s\n",rienabranler(src->GetOwner(),GetName),rienabranler(dest->GetOwner(),GetName)); + printdumb("src target: %s, dest target: %s\n",rienabranler(src->GetTarget(),GetName),rienabranler(dest->GetTarget(),GetName)); + printdumb("src ver: %x, dest ver: %x\n",src->GetVersion(),dest->GetVersion()); + printdumb("src root: %s, dest root: %s\n",rienabranler(src->GetOwnerScript(),GetName),rienabranler(dest->GetOwnerScript(),GetName)); + printdumb("==============================================\n"); + int c=src->GetSubBehaviorCount(); + for(int i=0;iGetSubBehavior(i); + //create dest for current shit + CKBehavior* curdest=(CKBehavior*)src->GetCKContext()->CreateObject(CKCID_BEHAVIOR,cur->GetName()); + int ic=cur->GetInputCount(),oc=cur->GetOutputCount(); + for(int j=0;jGetInput(j)]=std::make_pair(curdest,j); + for(int j=0;jGetOutput(j)]=std::make_pair(curdest,-j-1); + clone_behavior(cur,curdest,dest); + } + c=src->GetSubBehaviorLinkCount(); + for(int i=0;iGetSubBehaviorLink(i); + CKBehaviorLink* dst=(CKBehaviorLink*)src->GetCKContext()->CreateObject(CKCID_BEHAVIORLINK,""); + dst->SetInitialActivationDelay(cur->GetInitialActivationDelay()); + dst->SetActivationDelay(cur->GetActivationDelay()); + if(sm.find(cur->GetInBehaviorIO())==sm.end()||sm.find(cur->GetOutBehaviorIO())==sm.end()) + { + printdumb("fuck shit! at least one of these behavior io is not found in the map:" + " %s:%s %s:%s\n",cur->GetInBehaviorIO()->GetOwner()->GetName(),cur->GetInBehaviorIO()->GetName(), + cur->GetOutBehaviorIO()->GetOwner()->GetName(),cur->GetOutBehaviorIO()->GetName()); + continue; + } + dst->SetInBehaviorIO( + sm[cur->GetInBehaviorIO()].second<0? + sm[cur->GetInBehaviorIO()].first->GetOutput(-sm[cur->GetInBehaviorIO()].second-1): + sm[cur->GetInBehaviorIO()].first->GetInput(sm[cur->GetInBehaviorIO()].second) + ); + dst->SetOutBehaviorIO( + sm[cur->GetOutBehaviorIO()].second<0? + sm[cur->GetOutBehaviorIO()].first->GetOutput(-sm[cur->GetOutBehaviorIO()].second-1): + sm[cur->GetOutBehaviorIO()].first->GetInput(sm[cur->GetOutBehaviorIO()].second) + ); + } + return true; +}*/ + +bool CKParameter2Json(CKParameter* p,Json::Value &v) +{ + CKGUID t=p->GetGUID();bool u=0; + if(t.d1&t.d2) + v["type"]=Json::Value(std::string(p->GetCKContext()->GetParameterManager()->ParameterGuidToName(t))); + else v["type"]=Json::Value("unknown"); + if(v["type"]==Json::Value("unknown")) + { + char s[64];snprintf(s,64,"unknown: 0x%x, 0x%x",p->GetGUID().d1,p->GetGUID().d2); + v["type"]=Json::Value(s); + u=1; + } + //nothing + if(t==CKPGUID_NONE) + {return true;} + if(p->GetParameterClassID()&&p->GetValueObject(false)) + { + v["data"]=Json::Value(); + v["data"]["id"]=Json::Value(p->GetValueObject(false)->GetID()); + v["data"]["name"]=p->GetValueObject(false)->GetName(); + v["data"]["type"]=p->GetValueObject(false)->GetClassNameA(); + return true; + } + //float + if(t==CKPGUID_FLOAT||t==CKPGUID_ANGLE||t==CKPGUID_PERCENTAGE||t==CKPGUID_TIME + ||t==CKPGUID_FLOATSLIDER) + { + v["data"]=Json::Value(*(float*)(p->GetReadDataPtr(false))); + return true; + } + //int + if(t==CKPGUID_INT||t==CKPGUID_KEY||t==CKPGUID_BOOL||t==CKPGUID_ID||t==CKPGUID_POINTER + ||t==CKPGUID_MESSAGE||t==CKPGUID_ATTRIBUTE||t==CKPGUID_BLENDMODE||t==CKPGUID_FILTERMODE + ||t==CKPGUID_BLENDFACTOR||t==CKPGUID_FILLMODE||t==CKPGUID_LITMODE||t==CKPGUID_SHADEMODE + ||t==CKPGUID_ADDRESSMODE||t==CKPGUID_WRAPMODE||t==CKPGUID_3DSPRITEMODE||t==CKPGUID_FOGMODE + ||t==CKPGUID_LIGHTTYPE||t==CKPGUID_SPRITEALIGN||t==CKPGUID_DIRECTION||t==CKPGUID_LAYERTYPE + ||t==CKPGUID_COMPOPERATOR||t==CKPGUID_BINARYOPERATOR||t==CKPGUID_SETOPERATOR + ||t==CKPGUID_OBSTACLEPRECISION||t==CKPGUID_OBSTACLEPRECISIONBEH) + { + v["data"]=Json::Value(*(int*)(p->GetReadDataPtr(false))); + return true; + } + if(t==CKPGUID_VECTOR) + { + VxVector vec; + memcpy(&vec,p->GetReadDataPtr(false),sizeof(vec)); + v["data"]=Json::Value();v["data"]["x"]=vec.x; + v["data"]["y"]=vec.y;v["data"]["z"]=vec.z; + return true; + } + if(t==CKPGUID_2DVECTOR) + { + Vx2DVector vec; + memcpy(&vec,p->GetReadDataPtr(false),sizeof(vec)); + v["data"]=Json::Value();v["data"]["x"]=vec.x; + v["data"]["y"]=vec.y; + return true; + } + if(t==CKPGUID_MATRIX) + { + VxMatrix mat; + memcpy(&mat,p->GetReadDataPtr(false),sizeof(mat)); + v["data"]=Json::Value();for(int i=0;i<4;++i)v["data"][i]=Json::Value(); + for(int i=0;i<4;++i)for(int j=0;j<4;++j)v["data"][i][j]=Json::Value(mat[i][j]); + return true; + } + if(t==CKPGUID_COLOR) + { + VxColor col; + memcpy(&col,p->GetReadDataPtr(false),sizeof(col)); + v["data"]=Json::Value();v["data"]["r"]=col.r; + v["data"]["g"]=col.g;v["data"]["b"]=col.b; + v["data"]["a"]=col.a; + return true; + } + if(t==CKPGUID_2DCURVE) + { + Json::Value &vv=v["data"]=Json::Value(); + CK2dCurve *c;memcpy(&c,p->GetReadDataPtr(false),sizeof(c)); + for(int i=0,cc=c->GetControlPointCount();iGetControlPoint(i)->GetPosition().x); + vv[i]["pos"]["y"]=Json::Value(c->GetControlPoint(i)->GetPosition().y); + vv[i]["islinear"]=Json::Value(c->GetControlPoint(i)->IsLinear()); + if(c->GetControlPoint(i)->IsTCB()) + { + vv[i]["bias"]=Json::Value(c->GetControlPoint(i)->GetBias()); + vv[i]["continuity"]=Json::Value(c->GetControlPoint(i)->GetContinuity()); + vv[i]["tension"]=Json::Value(c->GetControlPoint(i)->GetTension()); + } + else + { + vv[i]["intangent"]=Json::Value(); + vv[i]["intangent"]["x"]=Json::Value(c->GetControlPoint(i)->GetInTangent().x); + vv[i]["intangent"]["y"]=Json::Value(c->GetControlPoint(i)->GetInTangent().y); + vv[i]["outtangent"]=Json::Value(); + vv[i]["outtangent"]["x"]=Json::Value(c->GetControlPoint(i)->GetOutTangent().x); + vv[i]["outtangent"]["y"]=Json::Value(c->GetControlPoint(i)->GetOutTangent().y); + } + } + } + u=1;//if it gets here, we have no idea what it really is. so simply dump it. + //buffer-like + if(u||t==CKPGUID_VOIDBUF||t==CKPGUID_STRING||t==CKPGUID_SHADER||t==CKPGUID_TECHNIQUE||t==CKPGUID_PASS) + { + std::string d((char*)p->GetReadDataPtr(false),p->GetDataSize()); + v["data"]=Json::Value(d); + v["length"]=Json::Value(p->GetDataSize()); + return true; + } + return false; +} \ No newline at end of file diff --git a/Menu.h b/Menu.h new file mode 100644 index 0000000..90e4fa5 --- /dev/null +++ b/Menu.h @@ -0,0 +1,13 @@ +#pragma once + +//by default these functions are called in Testcallback.cpp +//if you do not use callback (do not have Testcallback.cpp), you should call these functions manually + +//to add a menu in Virtools Dev main menu. +void InitMenu(); +//to remove the menu from Virtools Dev main menu +void RemoveMenu(); +//to fill menu with your own commands +void UpdateMenu(); + +#define STR_MAINMENUNAME "Fsck" diff --git a/README.md b/README.md new file mode 100644 index 0000000..88e4f7d --- /dev/null +++ b/README.md @@ -0,0 +1,16 @@ +# Script Materializer +a.k.a. Fsck for Virtools + +## Functionality + - Dumping behavior scripts to JSON + - Spawning building blocks with custom GUID (may not work) + - ~~Destroying your hard disk~~ + +## Building + 0. Dependencies: Virtools SDK and jsoncpp + 1. Change those fscking hardcoded absolute paths in the project + 2. Hit "Build Solution"! + 3. ~~Wait for your hard disk to be destroyed~~ + +## License + 3-Clause BSD diff --git a/Script Materializer.sln b/Script Materializer.sln new file mode 100644 index 0000000..9e5ada5 --- /dev/null +++ b/Script Materializer.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +VisualStudioVersion = 15.0.27130.2027 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Script Materializer", "Fsck.vcxproj", "{D20B1C85-814D-4F05-A840-634F9E062019}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x86 = Debug|x86 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {D20B1C85-814D-4F05-A840-634F9E062019}.Debug|x86.ActiveCfg = Debug|Win32 + {D20B1C85-814D-4F05-A840-634F9E062019}.Debug|x86.Build.0 = Debug|Win32 + {D20B1C85-814D-4F05-A840-634F9E062019}.Release|x86.ActiveCfg = Release|Win32 + {D20B1C85-814D-4F05-A840-634F9E062019}.Release|x86.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {B5AF39CC-9760-44F6-82D9-A1734AE804FD} + EndGlobalSection +EndGlobal diff --git a/StdAfx.cpp b/StdAfx.cpp new file mode 100644 index 0000000..fe8433d --- /dev/null +++ b/StdAfx.cpp @@ -0,0 +1,8 @@ +// stdafx.cpp : source file that includes just the standard includes +// Editor.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + + + diff --git a/StdAfx.h b/StdAfx.h new file mode 100644 index 0000000..24177be --- /dev/null +++ b/StdAfx.h @@ -0,0 +1,40 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +// +#pragma once + +#define VC_EXTRALEAN // Exclude rarely-used stuff from Windows headers + +#include // MFC core and standard components +#include // MFC extensions + +#ifndef _AFX_NO_OLE_SUPPORT +#include // MFC OLE classes +#include // MFC OLE dialog classes +#include // MFC Automation classes +#endif // _AFX_NO_OLE_SUPPORT + + +#ifndef _AFX_NO_DB_SUPPORT +#include // MFC ODBC database classes +#endif // _AFX_NO_DB_SUPPORT + +#ifndef _AFX_NO_DAO_SUPPORT +#include // MFC DAO database classes +#endif // _AFX_NO_DAO_SUPPORT + +#include // MFC support for Internet Explorer 4 Common Controls +#ifndef _AFX_NO_AFXCMN_SUPPORT +#include // MFC support for Windows Common Controls +#endif // _AFX_NO_AFXCMN_SUPPORT + +//PLUGIN PRECOMPILED HEADER INCLUDED +#include "CKAll.h" +#include "VIControls.h" +#include "CKControlsAll.h" +#include "VEP_ScriptActionMenu.h" +#include "VEP_KeyboardShortcutManager.h" +#include "VEP_All.h" + +using namespace CKControl; diff --git a/icon1.ico b/icon1.ico new file mode 100644 index 0000000..fbd3e17 Binary files /dev/null and b/icon1.ico differ diff --git a/resource.h b/resource.h new file mode 100644 index 0000000..be2a9de --- /dev/null +++ b/resource.h @@ -0,0 +1,18 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Developer Studio generated include file. +// Used by Editor.rc +// +//#define IDD_EDITOR 10000 +//#define IDD_TOOLBAR 10001 +//#define IDI_EDITORICON 10002 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 10003 +#define _APS_NEXT_COMMAND_VALUE 32771 +#define _APS_NEXT_CONTROL_VALUE 10000 +#define _APS_NEXT_SYMED_VALUE 10000 +#endif +#endif -- cgit v1.2.3