diff --git a/LibCmo/LibCmo.vcxproj b/LibCmo/LibCmo.vcxproj
new file mode 100644
index 0000000..f9023c8
--- /dev/null
+++ b/LibCmo/LibCmo.vcxproj
@@ -0,0 +1,181 @@
+
+
+
+
+ Debug
+ Win32
+
+
+ Release
+ Win32
+
+
+ Debug
+ x64
+
+
+ Release
+ x64
+
+
+
+ 16.0
+ Win32Proj
+ {70f64f8d-099c-4c21-b29c-0a8f1e22fb2e}
+ LibCmo
+ 10.0
+
+
+
+ DynamicLibrary
+ true
+ v142
+ Unicode
+
+
+ DynamicLibrary
+ false
+ v142
+ true
+ Unicode
+
+
+ DynamicLibrary
+ true
+ v142
+ Unicode
+
+
+ DynamicLibrary
+ false
+ v142
+ true
+ Unicode
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ true
+ $(SolutionDir)out\$(Platform)\$(Configuration)\$(ProjectName)\
+ $(SolutionDir)temp\$(Platform)\$(Configuration)\$(ProjectName)\
+
+
+ false
+ $(SolutionDir)out\$(Platform)\$(Configuration)\$(ProjectName)\
+ $(SolutionDir)temp\$(Platform)\$(Configuration)\$(ProjectName)\
+
+
+ true
+ $(SolutionDir)out\$(Platform)\$(Configuration)\$(ProjectName)\
+ $(SolutionDir)temp\$(Platform)\$(Configuration)\$(ProjectName)\
+
+
+ false
+ $(SolutionDir)out\$(Platform)\$(Configuration)\$(ProjectName)\
+ $(SolutionDir)temp\$(Platform)\$(Configuration)\$(ProjectName)\
+
+
+
+ Level3
+ true
+ LIBCMO_EXPORTING;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ true
+ CompileAsC
+ $(ZLIB_PATH);$(GLIB_EXTRA_INCLUDE_PATH);$(GLIB_INCLUDE_PATH);%(AdditionalIncludeDirectories)
+
+
+ Console
+ true
+ $(ZLIB_PATH)\contrib\vstudio\vc14\x86\ZlibDllReleaseWithoutAsm;$(GLIB_WIN32_LIB_PATH);%(AdditionalLibraryDirectories)
+ glib-2.0.lib;zlibwapi.lib;%(AdditionalDependencies)
+
+
+
+
+ Level3
+ true
+ true
+ true
+ LIBCMO_EXPORTING;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ true
+ CompileAsC
+ $(ZLIB_PATH);$(GLIB_EXTRA_INCLUDE_PATH);$(GLIB_INCLUDE_PATH);%(AdditionalIncludeDirectories)
+
+
+ Console
+ true
+ true
+ true
+ $(ZLIB_PATH)\contrib\vstudio\vc14\x86\ZlibDllReleaseWithoutAsm;$(GLIB_WIN32_LIB_PATH);%(AdditionalLibraryDirectories)
+ glib-2.0.lib;zlibwapi.lib;%(AdditionalDependencies)
+
+
+
+
+ Level3
+ true
+ LIBCMO_EXPORTING;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ true
+ CompileAsC
+ $(ZLIB_PATH);$(GLIB_EXTRA_INCLUDE_PATH);$(GLIB_INCLUDE_PATH);%(AdditionalIncludeDirectories)
+
+
+ Console
+ true
+ $(ZLIB_PATH)\contrib\vstudio\vc14\x64\ZlibDllReleaseWithoutAsm;$(GLIB_WIN64_LIB_PATH)
+ glib-2.0.lib;zlibwapi.lib;%(AdditionalDependencies)
+
+
+
+
+ Level3
+ true
+ true
+ true
+ LIBCMO_EXPORTING;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ true
+ CompileAsC
+ $(ZLIB_PATH);$(GLIB_EXTRA_INCLUDE_PATH);$(GLIB_INCLUDE_PATH);%(AdditionalIncludeDirectories)
+
+
+ Console
+ true
+ true
+ true
+ $(ZLIB_PATH)\contrib\vstudio\vc14\x64\ZlibDllReleaseWithoutAsm;$(GLIB_WIN64_LIB_PATH)
+ glib-2.0.lib;zlibwapi.lib;%(AdditionalDependencies)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/LibCmo/LibCmo.vcxproj.filters b/LibCmo/LibCmo.vcxproj.filters
new file mode 100644
index 0000000..a99f427
--- /dev/null
+++ b/LibCmo/LibCmo.vcxproj.filters
@@ -0,0 +1,36 @@
+
+
+
+
+ {4FC737F1-C7A5-4376-A066-2A32D752A2FF}
+ cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx
+
+
+ {93995380-89BD-4b04-88EB-625FBE52EBFB}
+ h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd
+
+
+ {67DA6AB6-F800-4c08-8B7A-83BB121AAD01}
+ rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms
+
+
+
+
+ Sources
+
+
+
+
+ Headers
+
+
+ Headers
+
+
+ Headers
+
+
+ Headers
+
+
+
\ No newline at end of file
diff --git a/LibCmo/VTConstants.h b/LibCmo/VTConstants.h
new file mode 100644
index 0000000..64bbd22
--- /dev/null
+++ b/LibCmo/VTConstants.h
@@ -0,0 +1,6 @@
+#pragma once
+
+#include
+#include
+
+#define CKERROR int32_t
diff --git a/LibCmo/VTReader.c b/LibCmo/VTReader.c
new file mode 100644
index 0000000..ed86231
--- /dev/null
+++ b/LibCmo/VTReader.c
@@ -0,0 +1,9 @@
+#include "VTReader.h"
+
+CKERROR ReadFileHeaders(void) {
+ return 0;
+}
+
+CKERROR Load(void) {
+ return 0;
+}
diff --git a/LibCmo/VTReader.h b/LibCmo/VTReader.h
new file mode 100644
index 0000000..7dce9a8
--- /dev/null
+++ b/LibCmo/VTReader.h
@@ -0,0 +1,8 @@
+#pragma once
+
+#include "VTUtils.h"
+#include "VTConstants.h"
+
+LIBCMO_EXPORT CKERROR ReadFileHeaders(void);
+LIBCMO_EXPORT CKERROR Load(void);
+
diff --git a/LibCmo/VTStruct.h b/LibCmo/VTStruct.h
new file mode 100644
index 0000000..6f70f09
--- /dev/null
+++ b/LibCmo/VTStruct.h
@@ -0,0 +1 @@
+#pragma once
diff --git a/LibCmo/VTUtils.h b/LibCmo/VTUtils.h
new file mode 100644
index 0000000..d108d88
--- /dev/null
+++ b/LibCmo/VTUtils.h
@@ -0,0 +1,36 @@
+#pragma once
+
+// https://stackoverflow.com/questions/2164827/explicitly-exporting-shared-library-functions-in-linux
+// generate import export macro
+#if defined(_MSC_VER)
+// Microsoft
+#define LIBCMO_RAW_EXPORT __declspec(dllexport)
+#define LIBCMO_RAW_IMPORT __declspec(dllimport)
+#elif defined(__GNUC__)
+// GCC
+#define LIBCMO_RAW_EXPORT __attribute__((visibility("default")))
+#define LIBCMO_RAW_IMPORT
+#elif defined(__clang__)
+// GCC
+#define LIBCMO_RAW_EXPORT __attribute__((visibility("default")))
+#define LIBCMO_RAW_IMPORT
+#else
+// do nothing and hope for the best?
+#define LIBCMO_RAW_EXPORT
+#define LIBCMO_RAW_IMPORT
+#pragma warning Unknown dynamic link import/export semantics.
+#endif
+
+// choosee proper style
+#if defined(LIBCMO_EXPORTING)
+#define LIBCMO_NAKED_EXPORT LIBCMO_RAW_EXPORT
+#else
+#define LIBCMO_NAKED_EXPORT LIBCMO_RAW_IMPORT
+#endif
+
+// some work for cpp
+#if defined(__cplusplus)
+#define LIBCMO_EXPORT extern "C" LIBCMO_NAKED_EXPORT
+#else
+#define LIBCMO_EXPORT LIBCMO_NAKED_EXPORT
+#endif
diff --git a/LibRef.props b/LibRef.props
new file mode 100644
index 0000000..37000c7
--- /dev/null
+++ b/LibRef.props
@@ -0,0 +1,46 @@
+
+
+
+
+ D:\CppLib\GLib\Win32\include\glib-2.0
+ D:\CppLib\GLib\Win32\lib\glib-2.0\include
+ D:\CppLib\GLib\Win32\lib
+ D:\CppLib\GLib\x64\lib
+
+ D:\CppLib\SQLite\sqlite-amalgamation-3400100
+ D:\CppLib\SQLite\sqlite-dll-win32-x86-3400100
+ D:\CppLib\SQLite\sqlite-dll-win64-x64-3400100
+
+ D:\zlib
+
+
+
+
+
+ $(GLIB_INCLUDE_PATH)
+
+
+ $(GLIB_EXTRA_INCLUDE_PATH)
+
+
+ $(GLIB_WIN32_LIB_PATH)
+
+
+ $(GLIB_WIN64_LIB_PATH)
+
+
+
+ $(SQLITE_HEADER_PATH)
+
+
+ $(SQLITE_WIN32_LIB_PATH)
+
+
+ $(SQLITE_WIN64_LIB_PATH)
+
+
+
+ $(ZLIB_PATH)
+
+
+
\ No newline at end of file
diff --git a/Unvirt/Unvirt.vcxproj b/Unvirt/Unvirt.vcxproj
new file mode 100644
index 0000000..41d95b3
--- /dev/null
+++ b/Unvirt/Unvirt.vcxproj
@@ -0,0 +1,175 @@
+
+
+
+
+ Debug
+ Win32
+
+
+ Release
+ Win32
+
+
+ Debug
+ x64
+
+
+ Release
+ x64
+
+
+
+ 16.0
+ Win32Proj
+ {77e7adb6-0d0c-4ba4-8de7-a284c7f83941}
+ Unvirt
+ 10.0
+
+
+
+ Application
+ true
+ v142
+ Unicode
+
+
+ Application
+ false
+ v142
+ true
+ Unicode
+
+
+ Application
+ true
+ v142
+ Unicode
+
+
+ Application
+ false
+ v142
+ true
+ Unicode
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ true
+ $(SolutionDir)out\$(Platform)\$(Configuration)\$(ProjectName)\
+ $(SolutionDir)temp\$(Platform)\$(Configuration)\$(ProjectName)\
+
+
+ false
+ $(SolutionDir)out\$(Platform)\$(Configuration)\$(ProjectName)\
+ $(SolutionDir)temp\$(Platform)\$(Configuration)\$(ProjectName)\
+
+
+ true
+ $(SolutionDir)out\$(Platform)\$(Configuration)\$(ProjectName)\
+ $(SolutionDir)temp\$(Platform)\$(Configuration)\$(ProjectName)\
+
+
+ false
+ $(SolutionDir)out\$(Platform)\$(Configuration)\$(ProjectName)\
+ $(SolutionDir)temp\$(Platform)\$(Configuration)\$(ProjectName)\
+
+
+
+ Level3
+ true
+ _CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ true
+ CompileAsC
+ ../LibCmo;$(SQLITE_HEADER_PATH);$(GLIB_EXTRA_INCLUDE_PATH);$(GLIB_INCLUDE_PATH);%(AdditionalIncludeDirectories)
+
+
+ Console
+ true
+ glib-2.0.lib;sqlite3.lib;LibCmo.lib;%(AdditionalDependencies)
+ $(SolutionDir)out\$(Platform)\$(Configuration)\LibCmo;$(SQLITE_WIN32_LIB_PATH);$(GLIB_WIN32_LIB_PATH)
+
+
+
+
+ Level3
+ true
+ true
+ true
+ _CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ true
+ CompileAsC
+ ../LibCmo;$(SQLITE_HEADER_PATH);$(GLIB_EXTRA_INCLUDE_PATH);$(GLIB_INCLUDE_PATH);%(AdditionalIncludeDirectories)
+
+
+ Console
+ true
+ true
+ true
+ glib-2.0.lib;sqlite3.lib;LibCmo.lib;%(AdditionalDependencies)
+ $(SolutionDir)out\$(Platform)\$(Configuration)\LibCmo;$(SQLITE_WIN32_LIB_PATH);$(GLIB_WIN32_LIB_PATH)
+
+
+
+
+ Level3
+ true
+ _CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ true
+ CompileAsC
+ ../LibCmo;$(SQLITE_HEADER_PATH);$(GLIB_EXTRA_INCLUDE_PATH);$(GLIB_INCLUDE_PATH);%(AdditionalIncludeDirectories)
+
+
+ Console
+ true
+ glib-2.0.lib;sqlite3.lib;LibCmo.lib;%(AdditionalDependencies)
+ $(SolutionDir)out\$(Platform)\$(Configuration)\LibCmo;$(SQLITE_WIN64_LIB_PATH);$(GLIB_WIN64_LIB_PATH)
+
+
+
+
+ Level3
+ true
+ true
+ true
+ _CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ true
+ CompileAsC
+ ../LibCmo;$(SQLITE_HEADER_PATH);$(GLIB_EXTRA_INCLUDE_PATH);$(GLIB_INCLUDE_PATH);%(AdditionalIncludeDirectories)
+
+
+ Console
+ true
+ true
+ true
+ glib-2.0.lib;sqlite3.lib;LibCmo.lib;%(AdditionalDependencies)
+ $(SolutionDir)out\$(Platform)\$(Configuration)\LibCmo;$(SQLITE_WIN64_LIB_PATH);$(GLIB_WIN64_LIB_PATH)
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Unvirt/Unvirt.vcxproj.filters b/Unvirt/Unvirt.vcxproj.filters
new file mode 100644
index 0000000..c193301
--- /dev/null
+++ b/Unvirt/Unvirt.vcxproj.filters
@@ -0,0 +1,22 @@
+
+
+
+
+ {4FC737F1-C7A5-4376-A066-2A32D752A2FF}
+ cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx
+
+
+ {93995380-89BD-4b04-88EB-625FBE52EBFB}
+ h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd
+
+
+ {67DA6AB6-F800-4c08-8B7A-83BB121AAD01}
+ rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms
+
+
+
+
+ Sources
+
+
+
\ No newline at end of file
diff --git a/Unvirt/unvirt.c b/Unvirt/unvirt.c
new file mode 100644
index 0000000..d1700b5
--- /dev/null
+++ b/Unvirt/unvirt.c
@@ -0,0 +1,5 @@
+
+int main(int argc, char* argv[]) {
+
+ return 0;
+}
diff --git a/libcmo21.sln b/libcmo21.sln
index 0369d0e..e3c3f2d 100644
--- a/libcmo21.sln
+++ b/libcmo21.sln
@@ -5,14 +5,46 @@ VisualStudioVersion = 16.0.31702.278
MinimumVisualStudioVersion = 10.0.40219.1
Project("{888888A0-9F3D-457C-B088-3A5042F75D52}") = "PyCmo", "PyCmo\PyCmo.pyproj", "{ADC519E8-5F1B-427D-8E5C-1FABCB6147FB}"
EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "LibCmo", "LibCmo\LibCmo.vcxproj", "{70F64F8D-099C-4C21-B29C-0A8F1E22FB2E}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Unvirt", "Unvirt\Unvirt.vcxproj", "{77E7ADB6-0D0C-4BA4-8DE7-A284C7F83941}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
+ Debug|x64 = Debug|x64
+ Debug|x86 = Debug|x86
Release|Any CPU = Release|Any CPU
+ Release|x64 = Release|x64
+ Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{ADC519E8-5F1B-427D-8E5C-1FABCB6147FB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {ADC519E8-5F1B-427D-8E5C-1FABCB6147FB}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {ADC519E8-5F1B-427D-8E5C-1FABCB6147FB}.Debug|x86.ActiveCfg = Debug|Any CPU
{ADC519E8-5F1B-427D-8E5C-1FABCB6147FB}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {ADC519E8-5F1B-427D-8E5C-1FABCB6147FB}.Release|x64.ActiveCfg = Release|Any CPU
+ {ADC519E8-5F1B-427D-8E5C-1FABCB6147FB}.Release|x86.ActiveCfg = Release|Any CPU
+ {70F64F8D-099C-4C21-B29C-0A8F1E22FB2E}.Debug|Any CPU.ActiveCfg = Debug|Win32
+ {70F64F8D-099C-4C21-B29C-0A8F1E22FB2E}.Debug|x64.ActiveCfg = Debug|x64
+ {70F64F8D-099C-4C21-B29C-0A8F1E22FB2E}.Debug|x64.Build.0 = Debug|x64
+ {70F64F8D-099C-4C21-B29C-0A8F1E22FB2E}.Debug|x86.ActiveCfg = Debug|Win32
+ {70F64F8D-099C-4C21-B29C-0A8F1E22FB2E}.Debug|x86.Build.0 = Debug|Win32
+ {70F64F8D-099C-4C21-B29C-0A8F1E22FB2E}.Release|Any CPU.ActiveCfg = Release|Win32
+ {70F64F8D-099C-4C21-B29C-0A8F1E22FB2E}.Release|x64.ActiveCfg = Release|x64
+ {70F64F8D-099C-4C21-B29C-0A8F1E22FB2E}.Release|x64.Build.0 = Release|x64
+ {70F64F8D-099C-4C21-B29C-0A8F1E22FB2E}.Release|x86.ActiveCfg = Release|Win32
+ {70F64F8D-099C-4C21-B29C-0A8F1E22FB2E}.Release|x86.Build.0 = Release|Win32
+ {77E7ADB6-0D0C-4BA4-8DE7-A284C7F83941}.Debug|Any CPU.ActiveCfg = Debug|Win32
+ {77E7ADB6-0D0C-4BA4-8DE7-A284C7F83941}.Debug|x64.ActiveCfg = Debug|x64
+ {77E7ADB6-0D0C-4BA4-8DE7-A284C7F83941}.Debug|x64.Build.0 = Debug|x64
+ {77E7ADB6-0D0C-4BA4-8DE7-A284C7F83941}.Debug|x86.ActiveCfg = Debug|Win32
+ {77E7ADB6-0D0C-4BA4-8DE7-A284C7F83941}.Debug|x86.Build.0 = Debug|Win32
+ {77E7ADB6-0D0C-4BA4-8DE7-A284C7F83941}.Release|Any CPU.ActiveCfg = Release|Win32
+ {77E7ADB6-0D0C-4BA4-8DE7-A284C7F83941}.Release|x64.ActiveCfg = Release|x64
+ {77E7ADB6-0D0C-4BA4-8DE7-A284C7F83941}.Release|x64.Build.0 = Release|x64
+ {77E7ADB6-0D0C-4BA4-8DE7-A284C7F83941}.Release|x86.ActiveCfg = Release|Win32
+ {77E7ADB6-0D0C-4BA4-8DE7-A284C7F83941}.Release|x86.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE