From a0034b8fa86c13040aaaf798b8304c161b328944 Mon Sep 17 00:00:00 2001 From: Matt Nadareski Date: Fri, 2 Apr 2021 15:34:47 -0700 Subject: [PATCH] Use submodule for hllib --- .gitmodules | 3 + BurnOutSharp/BurnOutSharp.csproj | 3 + .../External/HLLib.bak/HLExtract.Net/HLLib.cs | 1663 ----------------- .../HLLib.bak/HLExtract.Net/Program.cs | 1158 ------------ BurnOutSharp/External/hllib | 1 + BurnOutSharp/FileType/Valve.cs | 1142 ++++++++++- 6 files changed, 1147 insertions(+), 2823 deletions(-) delete mode 100644 BurnOutSharp/External/HLLib.bak/HLExtract.Net/HLLib.cs delete mode 100644 BurnOutSharp/External/HLLib.bak/HLExtract.Net/Program.cs create mode 160000 BurnOutSharp/External/hllib diff --git a/.gitmodules b/.gitmodules index 18897742..e5249ae4 100644 --- a/.gitmodules +++ b/.gitmodules @@ -4,3 +4,6 @@ [submodule "BurnOutSharp/External/libmspack4n"] path = BurnOutSharp/External/libmspack4n url = https://github.com/activescott/libmspack4n.git +[submodule "BurnOutSharp/External/hllib"] + path = BurnOutSharp/External/hllib + url = https://github.com/RavuAlHemio/hllib.git diff --git a/BurnOutSharp/BurnOutSharp.csproj b/BurnOutSharp/BurnOutSharp.csproj index 2c8bdb9c..928f36a8 100644 --- a/BurnOutSharp/BurnOutSharp.csproj +++ b/BurnOutSharp/BurnOutSharp.csproj @@ -33,6 +33,9 @@ $(DefaultItemExcludes); **\AssemblyInfo.cs; + External\hllib\HLExtract\**\*; + External\hllib\HLExtract.Net\Program.cs; + External\hllib\HLLib\**\*; External\LessIO\src\LessIO.Tests\**\*; External\libmspack4n\lib\**\*; External\libmspack4n\libmspack4ntest\**\* diff --git a/BurnOutSharp/External/HLLib.bak/HLExtract.Net/HLLib.cs b/BurnOutSharp/External/HLLib.bak/HLExtract.Net/HLLib.cs deleted file mode 100644 index c3315d05..00000000 --- a/BurnOutSharp/External/HLLib.bak/HLExtract.Net/HLLib.cs +++ /dev/null @@ -1,1663 +0,0 @@ -/* - * HLExtract.Net - * Copyright (C) 2008-2012 Ryan Gregg - - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - */ - -using System; -using System.Runtime.InteropServices; - -public sealed class HLLib -{ - #region Constants - public const int HL_VERSION_NUMBER = ((2 << 24) | (4 << 16) | (6 << 8) | 0); - public const string HL_VERSION_STRING = "2.4.6"; - - public const uint HL_ID_INVALID = 0xffffffff; - - public const uint HL_DEFAULT_PACKAGE_TEST_BUFFER_SIZE = 8; - public const uint HL_DEFAULT_VIEW_SIZE = 131072; - public const uint HL_DEFAULT_COPY_BUFFER_SIZE = 131072; - #endregion - - #region Enumerations - public enum HLOption : uint - { - HL_VERSION = 0, - HL_ERROR, - HL_ERROR_SYSTEM, - HL_ERROR_SHORT_FORMATED, - HL_ERROR_LONG_FORMATED, - HL_PROC_OPEN, - HL_PROC_CLOSE, - HL_PROC_READ, - HL_PROC_WRITE, - HL_PROC_SEEK, - HL_PROC_TELL, - HL_PROC_SIZE, - HL_PROC_EXTRACT_ITEM_START, - HL_PROC_EXTRACT_ITEM_END, - HL_PROC_EXTRACT_FILE_PROGRESS, - HL_PROC_VALIDATE_FILE_PROGRESS, - HL_OVERWRITE_FILES, - HL_PACKAGE_BOUND, - HL_PACKAGE_ID, - HL_PACKAGE_SIZE, - HL_PACKAGE_TOTAL_ALLOCATIONS, - HL_PACKAGE_TOTAL_MEMORY_ALLOCATED, - HL_PACKAGE_TOTAL_MEMORY_USED, - HL_READ_ENCRYPTED, - HL_FORCE_DEFRAGMENT, - HL_PROC_DEFRAGMENT_PROGRESS, - HL_PROC_DEFRAGMENT_PROGRESS_EX, - HL_PROC_SEEK_EX, - HL_PROC_TELL_EX, - HL_PROC_SIZE_EX - } - - public enum HLFileMode : uint - { - HL_MODE_INVALID = 0x00, - HL_MODE_READ = 0x01, - HL_MODE_WRITE = 0x02, - HL_MODE_CREATE = 0x04, - HL_MODE_VOLATILE = 0x08, - HL_MODE_NO_FILEMAPPING = 0x10, - HL_MODE_QUICK_FILEMAPPING = 0x20 - } - - public enum HLSeekMode : uint - { - HL_SEEK_BEGINNING = 0, - HL_SEEK_CURRENT, - HL_SEEK_END - } - - public enum HLDirectoryItemType : uint - { - HL_ITEM_NONE = 0, - HL_ITEM_FOLDER, - HL_ITEM_FILE - } - - public enum HLSortOrder : uint - { - HL_ORDER_ASCENDING = 0, - HL_ORDER_DESCENDING - } - - public enum HLSortField : uint - { - HL_FIELD_NAME = 0, - HL_FIELD_SIZE - } - - public enum HLFindType : uint - { - HL_FIND_FILES = 0x01, - HL_FIND_FOLDERS = 0x02, - HL_FIND_NO_RECURSE = 0x04, - HL_FIND_CASE_SENSITIVE = 0x08, - HL_FIND_MODE_STRING = 0x10, - HL_FIND_MODE_SUBSTRING = 0x20, - HL_FIND_MODE_WILDCARD = 0x00, - HL_FIND_ALL = HL_FIND_FILES | HL_FIND_FOLDERS - } - - public enum HLStreamType : uint - { - HL_STREAM_NONE = 0, - HL_STREAM_FILE, - HL_STREAM_GCF, - HL_STREAM_MAPPING, - HL_STREAM_MEMORY, - HL_STREAM_PROC, - HL_STREAM_NULL - } - - public enum HLMappingType : uint - { - HL_MAPPING_NONE = 0, - HL_MAPPING_FILE, - HL_MAPPING_MEMORY, - HL_MAPPING_STREAM - } - - public enum HLPackageType : uint - { - HL_PACKAGE_NONE = 0, - HL_PACKAGE_BSP, - HL_PACKAGE_GCF, - HL_PACKAGE_PAK, - HL_PACKAGE_VBSP, - HL_PACKAGE_WAD, - HL_PACKAGE_XZP, - HL_PACKAGE_ZIP, - HL_PACKAGE_NCF, - HL_PACKAGE_VPK, - HL_PACKAGE_SGA - } - - public enum HLAttributeType : uint - { - HL_ATTRIBUTE_INVALID = 0, - HL_ATTRIBUTE_BOOLEAN, - HL_ATTRIBUTE_INTEGER, - HL_ATTRIBUTE_UNSIGNED_INTEGER, - HL_ATTRIBUTE_FLOAT, - HL_ATTRIBUTE_STRING - } - - public enum HLPackageAttribute : uint - { - HL_BSP_PACKAGE_VERSION = 0, - HL_BSP_PACKAGE_COUNT, - HL_BSP_ITEM_WIDTH = 0, - HL_BSP_ITEM_HEIGHT, - HL_BSP_ITEM_PALETTE_ENTRIES, - HL_BSP_ITEM_COUNT, - - HL_GCF_PACKAGE_VERSION = 0, - HL_GCF_PACKAGE_ID, - HL_GCF_PACKAGE_ALLOCATED_BLOCKS, - HL_GCF_PACKAGE_USED_BLOCKS, - HL_GCF_PACKAGE_BLOCK_LENGTH, - HL_GCF_PACKAGE_LAST_VERSION_PLAYED, - HL_GCF_PACKAGE_COUNT, - HL_GCF_ITEM_ENCRYPTED = 0, - HL_GCF_ITEM_COPY_LOCAL, - HL_GCF_ITEM_OVERWRITE_LOCAL, - HL_GCF_ITEM_BACKUP_LOCAL, - HL_GCF_ITEM_FLAGS, - HL_GCF_ITEM_FRAGMENTATION, - HL_GCF_ITEM_COUNT, - - HL_NCF_PACKAGE_VERSION = 0, - HL_NCF_PACKAGE_ID, - HL_NCF_PACKAGE_LAST_VERSION_PLAYED, - HL_NCF_PACKAGE_COUNT, - HL_NCF_ITEM_ENCRYPTED = 0, - HL_NCF_ITEM_COPY_LOCAL, - HL_NCF_ITEM_OVERWRITE_LOCAL, - HL_NCF_ITEM_BACKUP_LOCAL, - HL_NCF_ITEM_FLAGS, - HL_NCF_ITEM_COUNT, - - HL_PAK_PACKAGE_COUNT = 0, - HL_PAK_ITEM_COUNT = 0, - - HL_SGA_PACKAGE_VERSION_MAJOR = 0, - HL_SGA_PACKAGE_VERSION_MINOR, - HL_SGA_PACKAGE_MD5_FILE, - HL_SGA_PACKAGE_NAME, - HL_SGA_PACKAGE_MD5_HEADER, - HL_SGA_PACKAGE_COUNT, - HL_SGA_ITEM_SECTION_ALIAS = 0, - HL_SGA_ITEM_SECTION_NAME, - HL_SGA_ITEM_MODIFIED, - HL_SGA_ITEM_TYPE, - HL_SGA_ITEM_CRC, - HL_SGA_ITEM_VERIFICATION, - HL_SGA_ITEM_COUNT, - - HL_VBSP_PACKAGE_VERSION = 0, - HL_VBSP_PACKAGE_MAP_REVISION, - HL_VBSP_PACKAGE_COUNT, - HL_VBSP_ITEM_VERSION = 0, - HL_VBSP_ITEM_FOUR_CC, - HL_VBSP_ZIP_PACKAGE_DISK, - HL_VBSP_ZIP_PACKAGE_COMMENT, - HL_VBSP_ZIP_ITEM_CREATE_VERSION, - HL_VBSP_ZIP_ITEM_EXTRACT_VERSION, - HL_VBSP_ZIP_ITEM_FLAGS, - HL_VBSP_ZIP_ITEM_COMPRESSION_METHOD, - HL_VBSP_ZIP_ITEM_CRC, - HL_VBSP_ZIP_ITEM_DISK, - HL_VBSP_ZIP_ITEM_COMMENT, - HL_VBSP_ITEM_COUNT, - - HL_VPK_PACKAGE_COUNT = 0, - HL_VPK_ITEM_PRELOAD_BYTES = 0, - HL_VPK_ITEM_ARCHIVE, - HL_VPK_ITEM_CRC, - HL_VPK_ITEM_COUNT, - - HL_WAD_PACKAGE_VERSION = 0, - HL_WAD_PACKAGE_COUNT, - HL_WAD_ITEM_WIDTH = 0, - HL_WAD_ITEM_HEIGHT, - HL_WAD_ITEM_PALETTE_ENTRIES, - HL_WAD_ITEM_MIPMAPS, - HL_WAD_ITEM_COMPRESSED, - HL_WAD_ITEM_TYPE, - HL_WAD_ITEM_COUNT, - - HL_XZP_PACKAGE_VERSION = 0, - HL_XZP_PACKAGE_PRELOAD_BYTES, - HL_XZP_PACKAGE_COUNT, - HL_XZP_ITEM_CREATED = 0, - HL_XZP_ITEM_PRELOAD_BYTES, - HL_XZP_ITEM_COUNT, - - HL_ZIP_PACKAGE_DISK = 0, - HL_ZIP_PACKAGE_COMMENT, - HL_ZIP_PACKAGE_COUNT, - HL_ZIP_ITEM_CREATE_VERSION = 0, - HL_ZIP_ITEM_EXTRACT_VERSION, - HL_ZIP_ITEM_FLAGS, - HL_ZIP_ITEM_COMPRESSION_METHOD, - HL_ZIP_ITEM_CRC, - HL_ZIP_ITEM_DISK, - HL_ZIP_ITEM_COMMENT, - HL_ZIP_ITEM_COUNT - } - - public enum HLValidation - { - HL_VALIDATES_OK = 0, - HL_VALIDATES_ASSUMED_OK, - HL_VALIDATES_INCOMPLETE, - HL_VALIDATES_CORRUPT, - HL_VALIDATES_CANCELED, - HL_VALIDATES_ERROR - } - #endregion - - #region Structures - [StructLayout(LayoutKind.Sequential,Pack=1,Size=512)] - public struct HLAttribute - { - public HLAttributeType eAttributeType; - [MarshalAs(UnmanagedType.ByValArray, SizeConst=252)] - public byte[] lpName; - [MarshalAs(UnmanagedType.ByValArray, SizeConst=256)] - public byte[] lpValue; - - public string GetName() - { - int iLength = 0; - while(lpName[iLength] != 0) - { - iLength++; - } - try - { - return System.Text.Encoding.ASCII.GetString(lpName, 0, iLength); - } - catch - { - return string.Empty; - } - } - - public object GetData() - { - switch (eAttributeType) - { - case HLAttributeType.HL_ATTRIBUTE_BOOLEAN: - return hlAttributeGetBoolean(ref this); - case HLAttributeType.HL_ATTRIBUTE_INTEGER: - return hlAttributeGetInteger(ref this); - case HLAttributeType.HL_ATTRIBUTE_UNSIGNED_INTEGER: - return hlAttributeGetUnsignedInteger(ref this); - case HLAttributeType.HL_ATTRIBUTE_FLOAT: - return hlAttributeGetFloat(ref this); - case HLAttributeType.HL_ATTRIBUTE_STRING: - return hlAttributeGetString(ref this); - default: - return null; - } - } - - public override string ToString() - { - switch (eAttributeType) - { - case HLAttributeType.HL_ATTRIBUTE_BOOLEAN: - return hlAttributeGetBoolean(ref this).ToString(); - case HLAttributeType.HL_ATTRIBUTE_INTEGER: - return hlAttributeGetInteger(ref this).ToString("#,##0"); - case HLAttributeType.HL_ATTRIBUTE_UNSIGNED_INTEGER: - if (lpValue[4] == 0) - { - return hlAttributeGetUnsignedInteger(ref this).ToString("#,##0"); - } - else // Display as hexadecimal. - { - return "0x" + hlAttributeGetUnsignedInteger(ref this).ToString("x8"); - } - case HLAttributeType.HL_ATTRIBUTE_FLOAT: - return hlAttributeGetFloat(ref this).ToString("#,##0.00000000"); - case HLAttributeType.HL_ATTRIBUTE_STRING: - return hlAttributeGetString(ref this); - default: - return string.Empty; - } - } - } - #endregion - - #region Callback Functions - // - // Important: Callback functions cannot use IntPtr. Instead, I use [MarshalAs(UnmanagedType.I4)]int. - // Convert IntPtr objects using IntPtr.ToInt32(). Convert int objects to IntPtr using new IntPtr(int). - // This obviously only works on 32 bit builds of HLLib. - // - - [UnmanagedFunctionPointerAttribute(CallingConvention.Cdecl)] - [return:MarshalAs(UnmanagedType.U1)] - public delegate bool HLOpenProc(uint uiMode, IntPtr pUserData); - [UnmanagedFunctionPointerAttribute(CallingConvention.Cdecl)] - [return:MarshalAs(UnmanagedType.U1)] - public delegate bool HLCloseProc(IntPtr pUserData); - [UnmanagedFunctionPointerAttribute(CallingConvention.Cdecl)] - public delegate uint HLReadProc(IntPtr lpData, uint uiBytes, IntPtr pUserData); - [UnmanagedFunctionPointerAttribute(CallingConvention.Cdecl)] - public delegate uint HLWriteProc(IntPtr lpData, uint uiBytes, IntPtr pUserData); - [UnmanagedFunctionPointerAttribute(CallingConvention.Cdecl)] - public delegate uint HLSeekProc(long iOffset, HLSeekMode eSeekMode, IntPtr pUserData); - [UnmanagedFunctionPointerAttribute(CallingConvention.Cdecl)] - public delegate ulong HLSeekExProc(Int64 iOffset, HLSeekMode eSeekMode, IntPtr pUserData); - [UnmanagedFunctionPointerAttribute(CallingConvention.Cdecl)] - public delegate uint HLTellProc(IntPtr pUserData); - [UnmanagedFunctionPointerAttribute(CallingConvention.Cdecl)] - public delegate ulong HLTellExProc(IntPtr pUserData); - [UnmanagedFunctionPointerAttribute(CallingConvention.Cdecl)] - public delegate uint HLSizeProc(IntPtr pUserData); - [UnmanagedFunctionPointerAttribute(CallingConvention.Cdecl)] - public delegate ulong HLSizeExProc(IntPtr pUserData); - - [UnmanagedFunctionPointerAttribute(CallingConvention.Cdecl)] - public delegate void HLExtractItemStartProc(IntPtr pItem); - [UnmanagedFunctionPointerAttribute(CallingConvention.Cdecl)] - public delegate void HLExtractItemEndProc(IntPtr pItem, [MarshalAs(UnmanagedType.U1)]bool bSuccess); - [UnmanagedFunctionPointerAttribute(CallingConvention.Cdecl)] - public delegate void HLExtractFileProgressProc(IntPtr pFile, uint uiBytesExtracted, uint uiBytesTotal, [MarshalAs(UnmanagedType.U1)]ref bool bCancel); - [UnmanagedFunctionPointerAttribute(CallingConvention.Cdecl)] - public delegate void HLValidateFileProgressProc(IntPtr pFile, uint uiBytesValidated, uint uiBytesTotal, [MarshalAs(UnmanagedType.U1)]ref bool pCancel); - [UnmanagedFunctionPointerAttribute(CallingConvention.Cdecl)] - public delegate void HLDefragmentFileProgressProc(IntPtr pFile, uint uiFilesDefragmented, uint uiFilesTotal, uint uiBytesDefragmented, uint uiBytesTotal, [MarshalAs(UnmanagedType.U1)]ref bool pCancel); - [UnmanagedFunctionPointerAttribute(CallingConvention.Cdecl)] - public delegate void HLDefragmentFileProgressExProc(IntPtr pFile, uint uiFilesDefragmented, uint uiFilesTotal, UInt64 uiBytesDefragmented, UInt64 uiBytesTotal, [MarshalAs(UnmanagedType.U1)]ref bool pCancel); - #endregion - - #region Functions - public static bool IsWow64() - { - return IntPtr.Size == 8; - } - - // - // VTFLib - // - - public static void hlInitialize() - { - if (IsWow64()) x64.hlInitialize(); else x86.hlInitialize(); - } - public static void hlShutdown() - { - if (IsWow64()) x64.hlShutdown(); else x86.hlShutdown(); - } - - // - // Get/Set - // - - public static bool hlGetBoolean(HLOption eOption) - { - if (IsWow64()) return x64.hlGetBoolean(eOption); else return x86.hlGetBoolean(eOption); - } - public static bool hlGetBooleanValidate(HLOption eOption, out bool pValue) - { - if (IsWow64()) return x64.hlGetBooleanValidate(eOption, out pValue); else return x86.hlGetBooleanValidate(eOption, out pValue); - } - public static void hlSetBoolean(HLOption eOption, bool bValue) - { - if (IsWow64()) x64.hlSetBoolean(eOption, bValue); else x86.hlSetBoolean(eOption, bValue); - } - - public static int hlGetInteger(HLOption eOption) - { - if (IsWow64()) return x64.hlGetInteger(eOption); else return x86.hlGetInteger(eOption); - } - public static bool hlGetIntegerValidate(HLOption eOption, out int pValue) - { - if (IsWow64()) return x64.hlGetIntegerValidate(eOption, out pValue); else return x86.hlGetIntegerValidate(eOption, out pValue); - } - public static void hlSetInteger(HLOption eOption, int iValue) - { - if (IsWow64()) x64.hlSetInteger(eOption, iValue); else x86.hlSetInteger(eOption, iValue); - } - - public static uint hlGetUnsignedInteger(HLOption eOption) - { - if (IsWow64()) return x64.hlGetUnsignedInteger(eOption); else return x86.hlGetUnsignedInteger(eOption); - } - public static bool hlGetUnsignedIntegerValidate(HLOption eOption, out uint pValue) - { - if (IsWow64()) return x64.hlGetUnsignedIntegerValidate(eOption, out pValue); else return x86.hlGetUnsignedIntegerValidate(eOption, out pValue); - } - public static void hlSetUnsignedInteger(HLOption eOption, uint uiValue) - { - if (IsWow64()) x64.hlSetUnsignedInteger(eOption, uiValue); else x86.hlSetUnsignedInteger(eOption, uiValue); - } - - public static long hlGetLong(HLOption eOption) - { - if (IsWow64()) return x64.hlGetLong(eOption); else return x86.hlGetLong(eOption); - } - public static bool hlGetLongValidate(HLOption eOption, out long pValue) - { - if (IsWow64()) return x64.hlGetLongValidate(eOption, out pValue); else return x86.hlGetLongValidate(eOption, out pValue); - } - public static void hlSetLong(HLOption eOption, long iValue) - { - if (IsWow64()) x64.hlSetLong(eOption, iValue); else x86.hlSetLong(eOption, iValue); - } - - public static ulong hlGetUnsignedLong(HLOption eOption) - { - if (IsWow64()) return x64.hlGetUnsignedLong(eOption); else return x86.hlGetUnsignedLong(eOption); - } - public static bool hlGetUnsignedLongValidate(HLOption eOption, out ulong pValue) - { - if (IsWow64()) return x64.hlGetUnsignedLongValidate(eOption, out pValue); else return x86.hlGetUnsignedLongValidate(eOption, out pValue); - } - public static void hlSetUnsignedLong(HLOption eOption, ulong uiValue) - { - if (IsWow64()) x64.hlSetUnsignedLong(eOption, uiValue); else x86.hlSetUnsignedLong(eOption, uiValue); - } - - public static float hlGetFloat(HLOption eOption) - { - if (IsWow64()) return x64.hlGetFloat(eOption); else return x86.hlGetFloat(eOption); - } - public static bool hlGetFloatValidate(HLOption eOption, out float pValue) - { - if (IsWow64()) return x64.hlGetFloatValidate(eOption, out pValue); else return x86.hlGetFloatValidate(eOption, out pValue); - } - public static void hlSetFloat(HLOption eOption, float pValue) - { - if (IsWow64()) x64.hlSetFloat(eOption, pValue); else x86.hlSetFloat(eOption, pValue); - } - - public static string hlGetString(HLOption eOption) - { - IntPtr lpString; - if (IsWow64()) lpString = x64.hlGetString(eOption); else lpString = x86.hlGetString(eOption); - return lpString == IntPtr.Zero ? string.Empty : Marshal.PtrToStringAnsi(lpString); - } - public static bool hlGetStringValidate(HLOption eOption, out string pValue) - { - if (IsWow64()) return x64.hlGetStringValidate(eOption, out pValue); else return x86.hlGetStringValidate(eOption, out pValue); - } - public static void hlSetString(HLOption eOption, string lpValue) - { - if (IsWow64()) x64.hlSetString(eOption, lpValue); else x86.hlSetString(eOption, lpValue); - } - - public static IntPtr hlGetVoid(HLOption eOption) - { - if (IsWow64()) return x64.hlGetVoid(eOption); else return x86.hlGetVoid(eOption); - } - public static bool hlGetVoidValidate(HLOption eOption, out IntPtr pValue) - { - if (IsWow64()) return x64.hlGetVoidValidate(eOption, out pValue); else return x86.hlGetVoidValidate(eOption, out pValue); - } - public static void hlSetVoid(HLOption eOption, IntPtr lpValue) - { - if (IsWow64()) x64.hlSetVoid(eOption, lpValue); else x86.hlSetVoid(eOption, lpValue); - } - - // - // Attributes - // - - public static bool hlAttributeGetBoolean(ref HLAttribute pAttribute) - { - if (IsWow64()) return x64.hlAttributeGetBoolean(ref pAttribute); else return x86.hlAttributeGetBoolean(ref pAttribute); - } - public static void hlAttributeSetBoolean(ref HLAttribute pAttribute, string lpName, bool bValue) - { - if (IsWow64()) x64.hlAttributeSetBoolean(ref pAttribute, lpName, bValue); else x86.hlAttributeSetBoolean(ref pAttribute, lpName, bValue); - } - - public static int hlAttributeGetInteger(ref HLAttribute pAttribute) - { - if (IsWow64()) return x64.hlAttributeGetInteger(ref pAttribute); else return x86.hlAttributeGetInteger(ref pAttribute); - } - public static void hlAttributeSetInteger(ref HLAttribute pAttribute, string lpName, int iValue) - { - if (IsWow64()) x64.hlAttributeSetInteger(ref pAttribute, lpName, iValue); else x86.hlAttributeSetInteger(ref pAttribute, lpName, iValue); - } - - public static uint hlAttributeGetUnsignedInteger(ref HLAttribute pAttribute) - { - if (IsWow64()) return x64.hlAttributeGetUnsignedInteger(ref pAttribute); else return x86.hlAttributeGetUnsignedInteger(ref pAttribute); - } - public static void hlAttributeSetUnsignedInteger(ref HLAttribute pAttribute, string lpName, uint uiValue, bool bHexadecimal) - { - if (IsWow64()) x64.hlAttributeSetUnsignedInteger(ref pAttribute, lpName, uiValue, bHexadecimal); else x86.hlAttributeSetUnsignedInteger(ref pAttribute, lpName, uiValue, bHexadecimal); - } - - public static float hlAttributeGetFloat(ref HLAttribute pAttribute) - { - if (IsWow64()) return x64.hlAttributeGetFloat(ref pAttribute); else return x86.hlAttributeGetFloat(ref pAttribute); - } - public static void hlAttributeSetFloat(ref HLAttribute pAttribute, string lpName, float fValue) - { - if (IsWow64()) x64.hlAttributeSetFloat(ref pAttribute, lpName, fValue); else x86.hlAttributeSetFloat(ref pAttribute, lpName, fValue); - } - - public static string hlAttributeGetString(ref HLAttribute pAttribute) - { - IntPtr lpString; - if (IsWow64()) lpString = x64.hlAttributeGetString(ref pAttribute); else lpString = x86.hlAttributeGetString(ref pAttribute); - return lpString == IntPtr.Zero ? string.Empty : Marshal.PtrToStringAnsi(lpString); - } - public static void hlAttributeSetString(ref HLAttribute pAttribute, string lpName, string lpValue) - { - if (IsWow64()) x64.hlAttributeSetString(ref pAttribute, lpName, lpValue); else x86.hlAttributeSetString(ref pAttribute, lpName, lpValue); - } - - // - // Directory Item - // - - public static HLDirectoryItemType hlItemGetType(IntPtr pItem) - { - if (IsWow64()) return x64.hlItemGetType(pItem); else return x86.hlItemGetType(pItem); - } - - public static string hlItemGetName(IntPtr pItem) - { - IntPtr lpString; - if (IsWow64()) lpString = x64.hlItemGetName(pItem); else lpString = x86.hlItemGetName(pItem); - return lpString == IntPtr.Zero ? string.Empty : Marshal.PtrToStringAnsi(lpString); - } - public static uint hlItemGetID(IntPtr pItem) - { - if (IsWow64()) return x64.hlItemGetID(pItem); else return x86.hlItemGetID(pItem); - } - public static IntPtr hlItemGetData(IntPtr pItem) - { - if (IsWow64()) return x64.hlItemGetData(pItem); else return x86.hlItemGetData(pItem); - } - - public static uint hlItemGetPackage(IntPtr pItem) - { - if (IsWow64()) return x64.hlItemGetPackage(pItem); else return x86.hlItemGetPackage(pItem); - } - public static IntPtr hlItemGetParent(IntPtr pItem) - { - if (IsWow64()) return x64.hlItemGetParent(pItem); else return x86.hlItemGetParent(pItem); - } - - public static bool hlItemGetSize(IntPtr pItem, out uint pSize) - { - if (IsWow64()) return x64.hlItemGetSize(pItem, out pSize); else return x86.hlItemGetSize(pItem, out pSize); - } - public static bool hlItemGetSizeEx(IntPtr pItem, out UInt64 pSize) - { - if (IsWow64()) return x64.hlItemGetSizeEx(pItem, out pSize); else return x86.hlItemGetSizeEx(pItem, out pSize); - } - public static bool hlItemGetSizeOnDisk(IntPtr pItem, out uint pSize) - { - if (IsWow64()) return x64.hlItemGetSizeOnDisk(pItem, out pSize); else return x86.hlItemGetSizeOnDisk(pItem, out pSize); - } - public static bool hlItemGetSizeOnDiskEx(IntPtr pItem, out UInt64 pSize) - { - if (IsWow64()) return x64.hlItemGetSizeOnDiskEx(pItem, out pSize); else return x86.hlItemGetSizeOnDiskEx(pItem, out pSize); - } - - public static bool hlItemGetPath(IntPtr pItem, IntPtr lpPath, uint uiPathSize) - { - if (IsWow64()) return x64.hlItemGetPath(pItem, lpPath, uiPathSize); else return x86.hlItemGetPath(pItem, lpPath, uiPathSize); - } - public static bool hlItemExtract(IntPtr pItem, string lpPath) - { - if (IsWow64()) return x64.hlItemExtract(pItem, lpPath); else return x86.hlItemExtract(pItem, lpPath); - } - - // - // Directory Folder - // - - public static uint hlFolderGetCount(IntPtr pItem) - { - if (IsWow64()) return x64.hlFolderGetCount(pItem); else return x86.hlFolderGetCount(pItem); - } - - public static IntPtr hlFolderGetItem(IntPtr pItem, uint uiIndex) - { - if (IsWow64()) return x64.hlFolderGetItem(pItem, uiIndex); else return x86.hlFolderGetItem(pItem, uiIndex); - } - public static IntPtr hlFolderGetItemByName(IntPtr pItem, string lpName, HLFindType eFind) - { - if (IsWow64()) return x64.hlFolderGetItemByName(pItem, lpName, eFind); else return x86.hlFolderGetItemByName(pItem, lpName, eFind); - } - public static IntPtr hlFolderGetItemByPath(IntPtr pItem, string lpPath, HLFindType eFind) - { - if (IsWow64()) return x64.hlFolderGetItemByPath(pItem, lpPath, eFind); else return x86.hlFolderGetItemByPath(pItem, lpPath, eFind); - } - - public static void hlFolderSort(IntPtr pItem, HLSortField eField, HLSortOrder eOrder, bool bRecurse) - { - if (IsWow64()) x64.hlFolderSort(pItem, eField, eOrder, bRecurse); else x86.hlFolderSort(pItem, eField, eOrder, bRecurse); - } - - public static IntPtr hlFolderFindFirst(IntPtr pFolder, string lpSearch, HLFindType eFind) - { - if (IsWow64()) return x64.hlFolderFindFirst(pFolder, lpSearch, eFind); else return x86.hlFolderFindFirst(pFolder, lpSearch, eFind); - } - public static IntPtr hlFolderFindNext(IntPtr pFolder, IntPtr pItem, string lpSearch, HLFindType eFind) - { - if (IsWow64()) return x64.hlFolderFindNext(pFolder, pItem, lpSearch, eFind); else return x86.hlFolderFindNext(pFolder, pItem, lpSearch, eFind); - } - - public static uint hlFolderGetSize(IntPtr pItem, bool bRecurse) - { - if (IsWow64()) return x64.hlFolderGetSize(pItem, bRecurse); else return x86.hlFolderGetSize(pItem, bRecurse); - } - public static UInt64 hlFolderGetSizeEx(IntPtr pItem, bool bRecurse) - { - if (IsWow64()) return x64.hlFolderGetSizeEx(pItem, bRecurse); else return x86.hlFolderGetSizeEx(pItem, bRecurse); - } - public static uint hlFolderGetSizeOnDisk(IntPtr pItem, bool bRecurse) - { - if (IsWow64()) return x64.hlFolderGetSizeOnDisk(pItem, bRecurse); else return x86.hlFolderGetSizeOnDisk(pItem, bRecurse); - } - public static UInt64 hlFolderGetSizeOnDiskEx(IntPtr pItem, bool bRecurse) - { - if (IsWow64()) return x64.hlFolderGetSizeOnDiskEx(pItem, bRecurse); else return x86.hlFolderGetSizeOnDiskEx(pItem, bRecurse); - } - public static uint hlFolderGetFolderCount(IntPtr pItem, bool bRecurse) - { - if (IsWow64()) return x64.hlFolderGetFolderCount(pItem, bRecurse); else return x86.hlFolderGetFolderCount(pItem, bRecurse); - } - public static uint hlFolderGetFileCount(IntPtr pItem, bool bRecurse) - { - if (IsWow64()) return x64.hlFolderGetFileCount(pItem, bRecurse); else return x86.hlFolderGetFileCount(pItem, bRecurse); - } - - // - // Directory File - // - - public static uint hlFileGetExtractable(IntPtr pItem) - { - if (IsWow64()) return x64.hlFileGetExtractable(pItem); else return x86.hlFileGetExtractable(pItem); - } - public static HLValidation hlFileGetValidation(IntPtr pItem) - { - if (IsWow64()) return x64.hlFileGetValidation(pItem); else return x86.hlFileGetValidation(pItem); - } - public static uint hlFileGetSize(IntPtr pItem) - { - if (IsWow64()) return x64.hlFileGetSize(pItem); else return x86.hlFileGetSize(pItem); - } - public static uint hlFileGetSizeOnDisk(IntPtr pItem) - { - if (IsWow64()) return x64.hlFileGetSizeOnDisk(pItem); else return x86.hlFileGetSizeOnDisk(pItem); - } - - public static bool hlFileCreateStream(IntPtr pItem, out IntPtr pStream) - { - if (IsWow64()) return x64.hlFileCreateStream(pItem, out pStream); else return x86.hlFileCreateStream(pItem, out pStream); - } - public static void hlFileReleaseStream(IntPtr pItem, IntPtr pStream) - { - if (IsWow64()) x64.hlFileReleaseStream(pItem, pStream); else x86.hlFileReleaseStream(pItem, pStream); - } - - // - // Stream - // - - public static HLStreamType hlStreamGetType(IntPtr pStream) - { - if (IsWow64()) return x64.hlStreamGetType(pStream); else return x86.hlStreamGetType(pStream); - } - - public static bool hlStreamGetOpened(IntPtr pStream) - { - if (IsWow64()) return x64.hlStreamGetOpened(pStream); else return x86.hlStreamGetOpened(pStream); - } - public static uint hlStreamGetMode(IntPtr pStream) - { - if (IsWow64()) return x64.hlStreamGetMode(pStream); else return x86.hlStreamGetMode(pStream); - } - - public static bool hlStreamOpen(IntPtr pStream, uint uiMode) - { - if (IsWow64()) return x64.hlStreamOpen(pStream, uiMode); else return x86.hlStreamOpen(pStream, uiMode); - } - public static void hlStreamClose(IntPtr pStream) - { - if (IsWow64()) x64.hlStreamClose(pStream); else x86.hlStreamClose(pStream); - } - - public static uint hlStreamGetStreamSize(IntPtr pStream) - { - if (IsWow64()) return x64.hlStreamGetStreamSize(pStream); else return x86.hlStreamGetStreamSize(pStream); - } - public static ulong hlStreamGetStreamSizeEx(IntPtr pStream) - { - if (IsWow64()) return x64.hlStreamGetStreamSizeEx(pStream); else return x86.hlStreamGetStreamSizeEx(pStream); - } - public static uint hlStreamGetStreamPointer(IntPtr pStream) - { - if (IsWow64()) return x64.hlStreamGetStreamPointer(pStream); else return x86.hlStreamGetStreamPointer(pStream); - } - public static ulong hlStreamGetStreamPointerEx(IntPtr pStream) - { - if (IsWow64()) return x64.hlStreamGetStreamPointerEx(pStream); else return x86.hlStreamGetStreamPointerEx(pStream); - } - - public static uint hlStreamSeek(IntPtr pStream, long iOffset, HLSeekMode eSeekMode) - { - if (IsWow64()) return x64.hlStreamSeek(pStream, iOffset, eSeekMode); else return x86.hlStreamSeek(pStream, iOffset, eSeekMode); - } - public static ulong hlStreamSeekEx(IntPtr pStream, long iOffset, HLSeekMode eSeekMode) - { - if (IsWow64()) return x64.hlStreamSeekEx(pStream, iOffset, eSeekMode); else return x86.hlStreamSeekEx(pStream, iOffset, eSeekMode); - } - - public static bool hlStreamReadChar(IntPtr pStream, out char pChar) - { - if (IsWow64()) return x64.hlStreamReadChar(pStream, out pChar); else return x86.hlStreamReadChar(pStream, out pChar); - } - public static uint hlStreamRead(IntPtr pStream, IntPtr lpData, uint uiBytes) - { - if (IsWow64()) return x64.hlStreamRead(pStream, lpData, uiBytes); else return x86.hlStreamRead(pStream, lpData, uiBytes); - } - - public static bool hlStreamWriteChar(IntPtr pStream, char iChar) - { - if (IsWow64()) return x64.hlStreamWriteChar(pStream, iChar); else return x86.hlStreamWriteChar(pStream, iChar); - } - public static uint hlStreamWrite(IntPtr pStream, IntPtr lpData, uint uiBytes) - { - if (IsWow64()) return x64.hlStreamWrite(pStream, lpData, uiBytes); else return x86.hlStreamWrite(pStream, lpData, uiBytes); - } - - // - // Package - // - - public static bool hlBindPackage(uint uiPackage) - { - if (IsWow64()) return x64.hlBindPackage(uiPackage); else return x86.hlBindPackage(uiPackage); - } - - public static HLPackageType hlGetPackageTypeFromName(string lpName) - { - if (IsWow64()) return x64.hlGetPackageTypeFromName(lpName); else return x86.hlGetPackageTypeFromName(lpName); - } - public static HLPackageType hlGetPackageTypeFromMemory(IntPtr lpBuffer, uint uiBufferSize) - { - if (IsWow64()) return x64.hlGetPackageTypeFromMemory(lpBuffer, uiBufferSize); else return x86.hlGetPackageTypeFromMemory(lpBuffer, uiBufferSize); - } - public static HLPackageType hlGetPackageTypeFromStream(IntPtr pStream) - { - if (IsWow64()) return x64.hlGetPackageTypeFromStream(pStream); else return x86.hlGetPackageTypeFromStream(pStream); - } - - public static bool hlCreatePackage(HLPackageType ePackageType, out uint uiPackage) - { - if (IsWow64()) return x64.hlCreatePackage(ePackageType, out uiPackage); else return x86.hlCreatePackage(ePackageType, out uiPackage); - } - public static void hlDeletePackage(uint uiPackage) - { - if (IsWow64()) x64.hlDeletePackage(uiPackage); else x86.hlDeletePackage(uiPackage); - } - - public static HLPackageType hlPackageGetType() - { - if (IsWow64()) return x64.hlPackageGetType(); else return x86.hlPackageGetType(); - } - public static string hlPackageGetExtension() - { - IntPtr lpString; - if (IsWow64()) lpString = x64.hlPackageGetExtension(); else lpString = x86.hlPackageGetExtension(); - return lpString == IntPtr.Zero ? string.Empty : Marshal.PtrToStringAnsi(lpString); - } - public static string hlPackageGetDescription() - { - IntPtr lpString; - if (IsWow64()) lpString = x64.hlPackageGetDescription(); else lpString = x86.hlPackageGetDescription(); - return lpString == IntPtr.Zero ? string.Empty : Marshal.PtrToStringAnsi(lpString); - } - - public static bool hlPackageGetOpened() - { - if (IsWow64()) return x64.hlPackageGetOpened(); else return x86.hlPackageGetOpened(); - } - - public static bool hlPackageOpenFile(string lpFileName, uint uiMode) - { - if (IsWow64()) return x64.hlPackageOpenFile(lpFileName, uiMode); else return x86.hlPackageOpenFile(lpFileName, uiMode); - } - public static bool hlPackageOpenMemory(IntPtr lpData, uint uiBufferSize, uint uiMode) - { - if (IsWow64()) return x64.hlPackageOpenMemory(lpData, uiBufferSize, uiMode); else return x86.hlPackageOpenMemory(lpData, uiBufferSize, uiMode); - } - public static bool hlPackageOpenProc(IntPtr pUserData, uint uiMode) - { - if (IsWow64()) return x64.hlPackageOpenProc(pUserData, uiMode); else return x86.hlPackageOpenProc(pUserData, uiMode); - } - public static bool hlPackageOpenStream(IntPtr pStream, uint uiMode) - { - if (IsWow64()) return x64.hlPackageOpenStream(pStream, uiMode); else return x86.hlPackageOpenStream(pStream, uiMode); - } - public static void hlPackageClose() - { - if (IsWow64()) x64.hlPackageClose(); else x86.hlPackageClose(); - } - - public static bool hlPackageDefragment() - { - if (IsWow64()) return x64.hlPackageDefragment(); else return x86.hlPackageDefragment(); - } - - public static IntPtr hlPackageGetRoot() - { - if (IsWow64()) return x64.hlPackageGetRoot(); else return x86.hlPackageGetRoot(); - } - - public static uint hlPackageGetAttributeCount() - { - if (IsWow64()) return x64.hlPackageGetAttributeCount(); else return x86.hlPackageGetAttributeCount(); - } - public static string hlPackageGetAttributeName(HLPackageAttribute eAttribute) - { - IntPtr lpString; - if (IsWow64()) lpString = x64.hlPackageGetAttributeName(eAttribute); else lpString = x86.hlPackageGetAttributeName(eAttribute); - return lpString == IntPtr.Zero ? string.Empty : Marshal.PtrToStringAnsi(lpString); - } - public static bool hlPackageGetAttribute(HLPackageAttribute eAttribute, out HLAttribute pAttribute) - { - if (IsWow64()) return x64.hlPackageGetAttribute(eAttribute, out pAttribute); else return x86.hlPackageGetAttribute(eAttribute, out pAttribute); - } - - public static uint hlPackageGetItemAttributeCount() - { - if (IsWow64()) return x64.hlPackageGetItemAttributeCount(); else return x86.hlPackageGetItemAttributeCount(); - } - public static string hlPackageGetItemAttributeName(HLPackageAttribute eAttribute) - { - IntPtr lpString; - if (IsWow64()) lpString = x64.hlPackageGetItemAttributeName(eAttribute); else lpString = x86.hlPackageGetItemAttributeName(eAttribute); - return lpString == IntPtr.Zero ? string.Empty : Marshal.PtrToStringAnsi(lpString); - } - public static bool hlPackageGetItemAttribute(IntPtr pItem, HLPackageAttribute eAttribute, out HLAttribute pAttribute) - { - if (IsWow64()) return x64.hlPackageGetItemAttribute(pItem, eAttribute, out pAttribute); else return x86.hlPackageGetItemAttribute(pItem, eAttribute, out pAttribute); - } - - public static bool hlPackageGetExtractable(IntPtr pItem, out bool pExtractable) - { - if (IsWow64()) return x64.hlPackageGetExtractable(pItem, out pExtractable); else return x86.hlPackageGetExtractable(pItem, out pExtractable); - } - public static bool hlPackageGetFileSize(IntPtr pItem, out uint pSize) - { - if (IsWow64()) return x64.hlPackageGetFileSize(pItem, out pSize); else return x86.hlPackageGetFileSize(pItem, out pSize); - } - public static bool hlPackageGetFileSizeOnDisk(IntPtr pItem, out uint pSize) - { - if (IsWow64()) return x64.hlPackageGetFileSizeOnDisk(pItem, out pSize); else return x86.hlPackageGetFileSizeOnDisk(pItem, out pSize); - } - public static bool hlPackageCreateStream(IntPtr pItem, out IntPtr pStream) - { - if (IsWow64()) return x64.hlPackageCreateStream(pItem, out pStream); else return x86.hlPackageCreateStream(pItem, out pStream); - } - public static void hlPackageReleaseStream(IntPtr pStream) - { - if (IsWow64()) x64.hlPackageReleaseStream(pStream); else x86.hlPackageReleaseStream(pStream); - } - - public static string hlNCFFileGetRootPath() - { - IntPtr lpString; - if (IsWow64()) lpString = x64.hlNCFFileGetRootPath(); else lpString = x86.hlNCFFileGetRootPath(); - return lpString == IntPtr.Zero ? string.Empty : Marshal.PtrToStringAnsi(lpString); - } - public static void hlNCFFileSetRootPath(string lpRootPath) - { - if (IsWow64()) x64.hlNCFFileSetRootPath(lpRootPath); else x86.hlNCFFileSetRootPath(lpRootPath); - } - - public static bool hlWADFileGetImageSizePaletted(IntPtr pItem, out uint uiPaletteDataSize, out uint uiPixelDataSize) - { - if (IsWow64()) return x64.hlWADFileGetImageSizePaletted(pItem, out uiPaletteDataSize, out uiPixelDataSize); else return x86.hlWADFileGetImageSizePaletted(pItem, out uiPaletteDataSize, out uiPixelDataSize); - } - public static bool hlWADFileGetImageDataPaletted(IntPtr pItem, out uint uiWidth, out uint uiHeight, out IntPtr lpPaletteData, out IntPtr lpPixelData) - { - if (IsWow64()) return x64.hlWADFileGetImageDataPaletted(pItem, out uiWidth, out uiHeight, out lpPaletteData, out lpPixelData); else return x86.hlWADFileGetImageDataPaletted(pItem, out uiWidth, out uiHeight, out lpPaletteData, out lpPixelData); - } - public static bool hlWADFileGetImageSize(IntPtr pItem, out uint uiPixelDataSize) - { - if (IsWow64()) return x64.hlWADFileGetImageSize(pItem, out uiPixelDataSize); else return x86.hlWADFileGetImageSize(pItem, out uiPixelDataSize); - } - public static bool hlWADFileGetImageData(IntPtr pItem, out uint uiWidth, out uint uiHeight, out IntPtr lpPixelData) - { - if (IsWow64()) return x64.hlWADFileGetImageData(pItem, out uiWidth, out uiHeight, out lpPixelData); else return x86.hlWADFileGetImageData(pItem, out uiWidth, out uiHeight, out lpPixelData); - } - - private static class x86 - { - // - // VTFLib - // - - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern void hlInitialize(); - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern void hlShutdown(); - - // - // Get/Set - // - - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - [return: MarshalAs(UnmanagedType.U1)] - public static extern bool hlGetBoolean(HLOption eOption); - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - [return: MarshalAs(UnmanagedType.U1)] - public static extern bool hlGetBooleanValidate(HLOption eOption, [MarshalAs(UnmanagedType.U1)]out bool pValue); - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern void hlSetBoolean(HLOption eOption, [MarshalAs(UnmanagedType.U1)]bool bValue); - - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern int hlGetInteger(HLOption eOption); - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - [return: MarshalAs(UnmanagedType.U1)] - public static extern bool hlGetIntegerValidate(HLOption eOption, out int pValue); - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern void hlSetInteger(HLOption eOption, int iValue); - - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern uint hlGetUnsignedInteger(HLOption eOption); - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - [return: MarshalAs(UnmanagedType.U1)] - public static extern bool hlGetUnsignedIntegerValidate(HLOption eOption, out uint pValue); - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern void hlSetUnsignedInteger(HLOption eOption, uint uiValue); - - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi, EntryPoint = "hlGetLongLong")] - public static extern long hlGetLong(HLOption eOption); - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi, EntryPoint = "hlGetLongLongValidate")] - [return: MarshalAs(UnmanagedType.U1)] - public static extern bool hlGetLongValidate(HLOption eOption, out long pValue); - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi, EntryPoint = "hlSetLongLong")] - public static extern void hlSetLong(HLOption eOption, long iValue); - - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi, EntryPoint = "hlGetUnsignedLongLong")] - public static extern ulong hlGetUnsignedLong(HLOption eOption); - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi, EntryPoint = "hlGetUnsignedLongLongValidate")] - [return: MarshalAs(UnmanagedType.U1)] - public static extern bool hlGetUnsignedLongValidate(HLOption eOption, out ulong pValue); - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi, EntryPoint = "hlSetUnsignedLongLong")] - public static extern void hlSetUnsignedLong(HLOption eOption, ulong uiValue); - - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern float hlGetFloat(HLOption eOption); - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - [return: MarshalAs(UnmanagedType.U1)] - public static extern bool hlGetFloatValidate(HLOption eOption, out float pValue); - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern void hlSetFloat(HLOption eOption, float pValue); - - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern IntPtr hlGetString(HLOption eOption); - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - [return: MarshalAs(UnmanagedType.U1)] - public static extern bool hlGetStringValidate(HLOption eOption, out string pValue); - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern void hlSetString(HLOption eOption, [MarshalAs(UnmanagedType.LPStr)]string lpValue); - - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern IntPtr hlGetVoid(HLOption eOption); - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - [return: MarshalAs(UnmanagedType.U1)] - public static extern bool hlGetVoidValidate(HLOption eOption, out IntPtr pValue); - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern void hlSetVoid(HLOption eOption, IntPtr lpValue); - - // - // Attributes - // - - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - [return: MarshalAs(UnmanagedType.U1)] - public static extern bool hlAttributeGetBoolean(ref HLAttribute pAttribute); - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern void hlAttributeSetBoolean(ref HLAttribute pAttribute, [MarshalAs(UnmanagedType.LPStr)]string lpName, [MarshalAs(UnmanagedType.U1)]bool bValue); - - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern int hlAttributeGetInteger(ref HLAttribute pAttribute); - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern void hlAttributeSetInteger(ref HLAttribute pAttribute, [MarshalAs(UnmanagedType.LPStr)]string lpName, int iValue); - - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern uint hlAttributeGetUnsignedInteger(ref HLAttribute pAttribute); - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern void hlAttributeSetUnsignedInteger(ref HLAttribute pAttribute, [MarshalAs(UnmanagedType.LPStr)]string lpName, uint uiValue, [MarshalAs(UnmanagedType.U1)]bool bHexadecimal); - - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern float hlAttributeGetFloat(ref HLAttribute pAttribute); - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern void hlAttributeSetFloat(ref HLAttribute pAttribute, [MarshalAs(UnmanagedType.LPStr)]string lpName, float fValue); - - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern IntPtr hlAttributeGetString(ref HLAttribute pAttribute); - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern void hlAttributeSetString(ref HLAttribute pAttribute, [MarshalAs(UnmanagedType.LPStr)]string lpName, [MarshalAs(UnmanagedType.LPStr)]string lpValue); - - // - // Directory Item - // - - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern HLDirectoryItemType hlItemGetType(IntPtr pItem); - - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - //[return: MarshalAs(UnmanagedType.LPStr)] - public static extern IntPtr hlItemGetName(IntPtr pItem); - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern uint hlItemGetID(IntPtr pItem); - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern IntPtr hlItemGetData(IntPtr pItem); - - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern uint hlItemGetPackage(IntPtr pItem); - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern IntPtr hlItemGetParent(IntPtr pItem); - - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - [return: MarshalAs(UnmanagedType.U1)] - public static extern bool hlItemGetSize(IntPtr pItem, out uint pSize); - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - [return: MarshalAs(UnmanagedType.U1)] - public static extern bool hlItemGetSizeEx(IntPtr pItem, out UInt64 pSize); - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - [return: MarshalAs(UnmanagedType.U1)] - public static extern bool hlItemGetSizeOnDisk(IntPtr pItem, out uint pSize); - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - [return: MarshalAs(UnmanagedType.U1)] - public static extern bool hlItemGetSizeOnDiskEx(IntPtr pItem, out UInt64 pSize); - - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - [return: MarshalAs(UnmanagedType.U1)] - public static extern bool hlItemGetPath(IntPtr pItem, IntPtr lpPath, uint uiPathSize); - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - [return: MarshalAs(UnmanagedType.U1)] - public static extern bool hlItemExtract(IntPtr pItem, [MarshalAs(UnmanagedType.LPStr)]string lpPath); - - // - // Directory Folder - // - - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern uint hlFolderGetCount(IntPtr pItem); - - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern IntPtr hlFolderGetItem(IntPtr pItem, uint uiIndex); - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern IntPtr hlFolderGetItemByName(IntPtr pItem, [MarshalAs(UnmanagedType.LPStr)]string lpName, HLFindType eFind); - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern IntPtr hlFolderGetItemByPath(IntPtr pItem, [MarshalAs(UnmanagedType.LPStr)]string lpPath, HLFindType eFind); - - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern void hlFolderSort(IntPtr pItem, HLSortField eField, HLSortOrder eOrder, [MarshalAs(UnmanagedType.U1)]bool bRecurse); - - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern IntPtr hlFolderFindFirst(IntPtr pFolder, [MarshalAs(UnmanagedType.LPStr)]string lpSearch, HLFindType eFind); - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern IntPtr hlFolderFindNext(IntPtr pFolder, IntPtr pItem, [MarshalAs(UnmanagedType.LPStr)]string lpSearch, HLFindType eFind); - - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern uint hlFolderGetSize(IntPtr pItem, [MarshalAs(UnmanagedType.U1)]bool bRecurse); - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern UInt64 hlFolderGetSizeEx(IntPtr pItem, [MarshalAs(UnmanagedType.U1)]bool bRecurse); - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern uint hlFolderGetSizeOnDisk(IntPtr pItem, [MarshalAs(UnmanagedType.U1)]bool bRecurse); - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern UInt64 hlFolderGetSizeOnDiskEx(IntPtr pItem, [MarshalAs(UnmanagedType.U1)]bool bRecurse); - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern uint hlFolderGetFolderCount(IntPtr pItem, [MarshalAs(UnmanagedType.U1)]bool bRecurse); - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern uint hlFolderGetFileCount(IntPtr pItem, [MarshalAs(UnmanagedType.U1)]bool bRecurse); - - // - // Directory File - // - - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern uint hlFileGetExtractable(IntPtr pItem); - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern HLValidation hlFileGetValidation(IntPtr pItem); - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern uint hlFileGetSize(IntPtr pItem); - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern uint hlFileGetSizeOnDisk(IntPtr pItem); - - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - [return: MarshalAs(UnmanagedType.U1)] - public static extern bool hlFileCreateStream(IntPtr pItem, out IntPtr pStream); - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern void hlFileReleaseStream(IntPtr pItem, IntPtr pStream); - - // - // Stream - // - - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern HLStreamType hlStreamGetType(IntPtr pStream); - - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - [return: MarshalAs(UnmanagedType.U1)] - public static extern bool hlStreamGetOpened(IntPtr pStream); - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern uint hlStreamGetMode(IntPtr pStream); - - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - [return: MarshalAs(UnmanagedType.U1)] - public static extern bool hlStreamOpen(IntPtr pStream, uint uiMode); - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern void hlStreamClose(IntPtr pStream); - - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern uint hlStreamGetStreamSize(IntPtr pStream); - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern ulong hlStreamGetStreamSizeEx(IntPtr pStream); - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern uint hlStreamGetStreamPointer(IntPtr pStream); - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern ulong hlStreamGetStreamPointerEx(IntPtr pStream); - - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern uint hlStreamSeek(IntPtr pStream, long iOffset, HLSeekMode eSeekMode); - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern ulong hlStreamSeekEx(IntPtr pStream, long iOffset, HLSeekMode eSeekMode); - - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - [return: MarshalAs(UnmanagedType.U1)] - public static extern bool hlStreamReadChar(IntPtr pStream, out char pChar); - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern uint hlStreamRead(IntPtr pStream, IntPtr lpData, uint uiBytes); - - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - [return: MarshalAs(UnmanagedType.U1)] - public static extern bool hlStreamWriteChar(IntPtr pStream, char iChar); - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern uint hlStreamWrite(IntPtr pStream, IntPtr lpData, uint uiBytes); - - // - // Package - // - - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - [return: MarshalAs(UnmanagedType.U1)] - public static extern bool hlBindPackage(uint uiPackage); - - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern HLPackageType hlGetPackageTypeFromName([MarshalAs(UnmanagedType.LPStr)]string lpName); - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern HLPackageType hlGetPackageTypeFromMemory(IntPtr lpBuffer, uint uiBufferSize); - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern HLPackageType hlGetPackageTypeFromStream(IntPtr pStream); - - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - [return: MarshalAs(UnmanagedType.U1)] - public static extern bool hlCreatePackage(HLPackageType ePackageType, out uint uiPackage); - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern void hlDeletePackage(uint uiPackage); - - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern HLPackageType hlPackageGetType(); - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern IntPtr hlPackageGetExtension(); - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern IntPtr hlPackageGetDescription(); - - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - [return: MarshalAs(UnmanagedType.U1)] - public static extern bool hlPackageGetOpened(); - - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - [return: MarshalAs(UnmanagedType.U1)] - public static extern bool hlPackageOpenFile([MarshalAs(UnmanagedType.LPStr)]string lpFileName, uint uiMode); - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - [return: MarshalAs(UnmanagedType.U1)] - public static extern bool hlPackageOpenMemory(IntPtr lpData, uint uiBufferSize, uint uiMode); - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - [return: MarshalAs(UnmanagedType.U1)] - public static extern bool hlPackageOpenProc(IntPtr pUserData, uint uiMode); - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - [return: MarshalAs(UnmanagedType.U1)] - public static extern bool hlPackageOpenStream(IntPtr pStream, uint uiMode); - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern void hlPackageClose(); - - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - [return: MarshalAs(UnmanagedType.U1)] - public static extern bool hlPackageDefragment(); - - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern IntPtr hlPackageGetRoot(); - - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern uint hlPackageGetAttributeCount(); - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern IntPtr hlPackageGetAttributeName(HLPackageAttribute eAttribute); - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - [return: MarshalAs(UnmanagedType.U1)] - public static extern bool hlPackageGetAttribute(HLPackageAttribute eAttribute, out HLAttribute pAttribute); - - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern uint hlPackageGetItemAttributeCount(); - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern IntPtr hlPackageGetItemAttributeName(HLPackageAttribute eAttribute); - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - [return: MarshalAs(UnmanagedType.U1)] - public static extern bool hlPackageGetItemAttribute(IntPtr pItem, HLPackageAttribute eAttribute, out HLAttribute pAttribute); - - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - [return: MarshalAs(UnmanagedType.U1)] - public static extern bool hlPackageGetExtractable(IntPtr pItem, [MarshalAs(UnmanagedType.U1)]out bool pExtractable); - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - [return: MarshalAs(UnmanagedType.U1)] - public static extern bool hlPackageGetFileSize(IntPtr pItem, out uint pSize); - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - [return: MarshalAs(UnmanagedType.U1)] - public static extern bool hlPackageGetFileSizeOnDisk(IntPtr pItem, out uint pSize); - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - [return: MarshalAs(UnmanagedType.U1)] - public static extern bool hlPackageCreateStream(IntPtr pItem, out IntPtr pStream); - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern void hlPackageReleaseStream(IntPtr pStream); - - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern IntPtr hlNCFFileGetRootPath(); - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern void hlNCFFileSetRootPath([MarshalAs(UnmanagedType.LPStr)]string lpRootPath); - - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - [return: MarshalAs(UnmanagedType.U1)] - public static extern bool hlWADFileGetImageSizePaletted(IntPtr pItem, out uint uiPaletteDataSize, out uint uiPixelDataSize); - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - [return: MarshalAs(UnmanagedType.U1)] - public static extern bool hlWADFileGetImageDataPaletted(IntPtr pItemm, out uint uiWidth, out uint uiHeight, out IntPtr lpPaletteData, out IntPtr lpPixelData); - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - [return: MarshalAs(UnmanagedType.U1)] - public static extern bool hlWADFileGetImageSize(IntPtr pItem, out uint uiPixelDataSize); - [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - [return: MarshalAs(UnmanagedType.U1)] - public static extern bool hlWADFileGetImageData(IntPtr pItem, out uint uiWidth, out uint uiHeight, out IntPtr lpPixelData); - } - - private static class x64 - { - // - // VTFLib - // - - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern void hlInitialize(); - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern void hlShutdown(); - - // - // Get/Set - // - - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - [return: MarshalAs(UnmanagedType.U1)] - public static extern bool hlGetBoolean(HLOption eOption); - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - [return: MarshalAs(UnmanagedType.U1)] - public static extern bool hlGetBooleanValidate(HLOption eOption, [MarshalAs(UnmanagedType.U1)]out bool pValue); - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern void hlSetBoolean(HLOption eOption, [MarshalAs(UnmanagedType.U1)]bool bValue); - - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern int hlGetInteger(HLOption eOption); - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - [return: MarshalAs(UnmanagedType.U1)] - public static extern bool hlGetIntegerValidate(HLOption eOption, out int pValue); - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern void hlSetInteger(HLOption eOption, int iValue); - - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern uint hlGetUnsignedInteger(HLOption eOption); - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - [return: MarshalAs(UnmanagedType.U1)] - public static extern bool hlGetUnsignedIntegerValidate(HLOption eOption, out uint pValue); - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern void hlSetUnsignedInteger(HLOption eOption, uint uiValue); - - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi, EntryPoint = "hlGetLongLong")] - public static extern long hlGetLong(HLOption eOption); - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi, EntryPoint = "hlGetLongLongValidate")] - [return: MarshalAs(UnmanagedType.U1)] - public static extern bool hlGetLongValidate(HLOption eOption, out long pValue); - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi, EntryPoint = "hlSetLongLong")] - public static extern void hlSetLong(HLOption eOption, long iValue); - - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi, EntryPoint = "hlGetUnsignedLongLong")] - public static extern ulong hlGetUnsignedLong(HLOption eOption); - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi, EntryPoint = "hlGetUnsignedLongLongValidate")] - [return: MarshalAs(UnmanagedType.U1)] - public static extern bool hlGetUnsignedLongValidate(HLOption eOption, out ulong pValue); - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi, EntryPoint = "hlSetUnsignedLongLong")] - public static extern void hlSetUnsignedLong(HLOption eOption, ulong uiValue); - - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern float hlGetFloat(HLOption eOption); - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - [return: MarshalAs(UnmanagedType.U1)] - public static extern bool hlGetFloatValidate(HLOption eOption, out float pValue); - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern void hlSetFloat(HLOption eOption, float pValue); - - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern IntPtr hlGetString(HLOption eOption); - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - [return: MarshalAs(UnmanagedType.U1)] - public static extern bool hlGetStringValidate(HLOption eOption, out string pValue); - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern void hlSetString(HLOption eOption, [MarshalAs(UnmanagedType.LPStr)]string lpValue); - - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern IntPtr hlGetVoid(HLOption eOption); - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - [return: MarshalAs(UnmanagedType.U1)] - public static extern bool hlGetVoidValidate(HLOption eOption, out IntPtr pValue); - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern void hlSetVoid(HLOption eOption, IntPtr lpValue); - - // - // Attributes - // - - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - [return: MarshalAs(UnmanagedType.U1)] - public static extern bool hlAttributeGetBoolean(ref HLAttribute pAttribute); - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern void hlAttributeSetBoolean(ref HLAttribute pAttribute, [MarshalAs(UnmanagedType.LPStr)]string lpName, [MarshalAs(UnmanagedType.U1)]bool bValue); - - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern int hlAttributeGetInteger(ref HLAttribute pAttribute); - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern void hlAttributeSetInteger(ref HLAttribute pAttribute, [MarshalAs(UnmanagedType.LPStr)]string lpName, int iValue); - - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern uint hlAttributeGetUnsignedInteger(ref HLAttribute pAttribute); - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern void hlAttributeSetUnsignedInteger(ref HLAttribute pAttribute, [MarshalAs(UnmanagedType.LPStr)]string lpName, uint uiValue, [MarshalAs(UnmanagedType.U1)]bool bHexadecimal); - - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern float hlAttributeGetFloat(ref HLAttribute pAttribute); - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern void hlAttributeSetFloat(ref HLAttribute pAttribute, [MarshalAs(UnmanagedType.LPStr)]string lpName, float fValue); - - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern IntPtr hlAttributeGetString(ref HLAttribute pAttribute); - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern void hlAttributeSetString(ref HLAttribute pAttribute, [MarshalAs(UnmanagedType.LPStr)]string lpName, [MarshalAs(UnmanagedType.LPStr)]string lpValue); - - // - // Directory Item - // - - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern HLDirectoryItemType hlItemGetType(IntPtr pItem); - - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - //[return: MarshalAs(UnmanagedType.LPStr)] - public static extern IntPtr hlItemGetName(IntPtr pItem); - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern uint hlItemGetID(IntPtr pItem); - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern IntPtr hlItemGetData(IntPtr pItem); - - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern uint hlItemGetPackage(IntPtr pItem); - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern IntPtr hlItemGetParent(IntPtr pItem); - - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - [return: MarshalAs(UnmanagedType.U1)] - public static extern bool hlItemGetSize(IntPtr pItem, out uint pSize); - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - [return: MarshalAs(UnmanagedType.U1)] - public static extern bool hlItemGetSizeEx(IntPtr pItem, out UInt64 pSize); - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - [return: MarshalAs(UnmanagedType.U1)] - public static extern bool hlItemGetSizeOnDisk(IntPtr pItem, out uint pSize); - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - [return: MarshalAs(UnmanagedType.U1)] - public static extern bool hlItemGetSizeOnDiskEx(IntPtr pItem, out UInt64 pSize); - - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - [return: MarshalAs(UnmanagedType.U1)] - public static extern bool hlItemGetPath(IntPtr pItem, IntPtr lpPath, uint uiPathSize); - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - [return: MarshalAs(UnmanagedType.U1)] - public static extern bool hlItemExtract(IntPtr pItem, [MarshalAs(UnmanagedType.LPStr)]string lpPath); - - // - // Directory Folder - // - - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern uint hlFolderGetCount(IntPtr pItem); - - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern IntPtr hlFolderGetItem(IntPtr pItem, uint uiIndex); - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern IntPtr hlFolderGetItemByName(IntPtr pItem, [MarshalAs(UnmanagedType.LPStr)]string lpName, HLFindType eFind); - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern IntPtr hlFolderGetItemByPath(IntPtr pItem, [MarshalAs(UnmanagedType.LPStr)]string lpPath, HLFindType eFind); - - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern void hlFolderSort(IntPtr pItem, HLSortField eField, HLSortOrder eOrder, [MarshalAs(UnmanagedType.U1)]bool bRecurse); - - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern IntPtr hlFolderFindFirst(IntPtr pFolder, [MarshalAs(UnmanagedType.LPStr)]string lpSearch, HLFindType eFind); - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern IntPtr hlFolderFindNext(IntPtr pFolder, IntPtr pItem, [MarshalAs(UnmanagedType.LPStr)]string lpSearch, HLFindType eFind); - - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern uint hlFolderGetSize(IntPtr pItem, [MarshalAs(UnmanagedType.U1)]bool bRecurse); - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern UInt64 hlFolderGetSizeEx(IntPtr pItem, [MarshalAs(UnmanagedType.U1)]bool bRecurse); - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern uint hlFolderGetSizeOnDisk(IntPtr pItem, [MarshalAs(UnmanagedType.U1)]bool bRecurse); - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern UInt64 hlFolderGetSizeOnDiskEx(IntPtr pItem, [MarshalAs(UnmanagedType.U1)]bool bRecurse); - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern uint hlFolderGetFolderCount(IntPtr pItem, [MarshalAs(UnmanagedType.U1)]bool bRecurse); - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern uint hlFolderGetFileCount(IntPtr pItem, [MarshalAs(UnmanagedType.U1)]bool bRecurse); - - // - // Directory File - // - - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern uint hlFileGetExtractable(IntPtr pItem); - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern HLValidation hlFileGetValidation(IntPtr pItem); - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern uint hlFileGetSize(IntPtr pItem); - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern uint hlFileGetSizeOnDisk(IntPtr pItem); - - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - [return: MarshalAs(UnmanagedType.U1)] - public static extern bool hlFileCreateStream(IntPtr pItem, out IntPtr pStream); - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern void hlFileReleaseStream(IntPtr pItem, IntPtr pStream); - - // - // Stream - // - - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern HLStreamType hlStreamGetType(IntPtr pStream); - - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - [return: MarshalAs(UnmanagedType.U1)] - public static extern bool hlStreamGetOpened(IntPtr pStream); - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern uint hlStreamGetMode(IntPtr pStream); - - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - [return: MarshalAs(UnmanagedType.U1)] - public static extern bool hlStreamOpen(IntPtr pStream, uint uiMode); - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern void hlStreamClose(IntPtr pStream); - - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern uint hlStreamGetStreamSize(IntPtr pStream); - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern ulong hlStreamGetStreamSizeEx(IntPtr pStream); - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern uint hlStreamGetStreamPointer(IntPtr pStream); - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern ulong hlStreamGetStreamPointerEx(IntPtr pStream); - - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern uint hlStreamSeek(IntPtr pStream, long iOffset, HLSeekMode eSeekMode); - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern ulong hlStreamSeekEx(IntPtr pStream, long iOffset, HLSeekMode eSeekMode); - - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - [return: MarshalAs(UnmanagedType.U1)] - public static extern bool hlStreamReadChar(IntPtr pStream, out char pChar); - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern uint hlStreamRead(IntPtr pStream, IntPtr lpData, uint uiBytes); - - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - [return: MarshalAs(UnmanagedType.U1)] - public static extern bool hlStreamWriteChar(IntPtr pStream, char iChar); - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern uint hlStreamWrite(IntPtr pStream, IntPtr lpData, uint uiBytes); - - // - // Package - // - - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - [return: MarshalAs(UnmanagedType.U1)] - public static extern bool hlBindPackage(uint uiPackage); - - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern HLPackageType hlGetPackageTypeFromName([MarshalAs(UnmanagedType.LPStr)]string lpName); - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern HLPackageType hlGetPackageTypeFromMemory(IntPtr lpBuffer, uint uiBufferSize); - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern HLPackageType hlGetPackageTypeFromStream(IntPtr pStream); - - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - [return: MarshalAs(UnmanagedType.U1)] - public static extern bool hlCreatePackage(HLPackageType ePackageType, out uint uiPackage); - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern void hlDeletePackage(uint uiPackage); - - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern HLPackageType hlPackageGetType(); - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern IntPtr hlPackageGetExtension(); - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern IntPtr hlPackageGetDescription(); - - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - [return: MarshalAs(UnmanagedType.U1)] - public static extern bool hlPackageGetOpened(); - - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - [return: MarshalAs(UnmanagedType.U1)] - public static extern bool hlPackageOpenFile([MarshalAs(UnmanagedType.LPStr)]string lpFileName, uint uiMode); - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - [return: MarshalAs(UnmanagedType.U1)] - public static extern bool hlPackageOpenMemory(IntPtr lpData, uint uiBufferSize, uint uiMode); - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - [return: MarshalAs(UnmanagedType.U1)] - public static extern bool hlPackageOpenProc(IntPtr pUserData, uint uiMode); - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - [return: MarshalAs(UnmanagedType.U1)] - public static extern bool hlPackageOpenStream(IntPtr pStream, uint uiMode); - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern void hlPackageClose(); - - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - [return: MarshalAs(UnmanagedType.U1)] - public static extern bool hlPackageDefragment(); - - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern IntPtr hlPackageGetRoot(); - - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern uint hlPackageGetAttributeCount(); - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern IntPtr hlPackageGetAttributeName(HLPackageAttribute eAttribute); - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - [return: MarshalAs(UnmanagedType.U1)] - public static extern bool hlPackageGetAttribute(HLPackageAttribute eAttribute, out HLAttribute pAttribute); - - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern uint hlPackageGetItemAttributeCount(); - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern IntPtr hlPackageGetItemAttributeName(HLPackageAttribute eAttribute); - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - [return: MarshalAs(UnmanagedType.U1)] - public static extern bool hlPackageGetItemAttribute(IntPtr pItem, HLPackageAttribute eAttribute, out HLAttribute pAttribute); - - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - [return: MarshalAs(UnmanagedType.U1)] - public static extern bool hlPackageGetExtractable(IntPtr pItem, [MarshalAs(UnmanagedType.U1)]out bool pExtractable); - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - [return: MarshalAs(UnmanagedType.U1)] - public static extern bool hlPackageGetFileSize(IntPtr pItem, out uint pSize); - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - [return: MarshalAs(UnmanagedType.U1)] - public static extern bool hlPackageGetFileSizeOnDisk(IntPtr pItem, out uint pSize); - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - [return: MarshalAs(UnmanagedType.U1)] - public static extern bool hlPackageCreateStream(IntPtr pItem, out IntPtr pStream); - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern void hlPackageReleaseStream(IntPtr pStream); - - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern IntPtr hlNCFFileGetRootPath(); - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - public static extern void hlNCFFileSetRootPath([MarshalAs(UnmanagedType.LPStr)]string lpRootPath); - - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - [return: MarshalAs(UnmanagedType.U1)] - public static extern bool hlWADFileGetImageSizePaletted(IntPtr pItem, out uint uiPaletteDataSize, out uint uiPixelDataSize); - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - [return: MarshalAs(UnmanagedType.U1)] - public static extern bool hlWADFileGetImageDataPaletted(IntPtr pItemm, out uint uiWidth, out uint uiHeight, out IntPtr lpPaletteData, out IntPtr lpPixelData); - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - [return: MarshalAs(UnmanagedType.U1)] - public static extern bool hlWADFileGetImageSize(IntPtr pItem, out uint uiPixelDataSize); - [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - [return: MarshalAs(UnmanagedType.U1)] - public static extern bool hlWADFileGetImageData(IntPtr pItem, out uint uiWidth, out uint uiHeight, out IntPtr lpPixelData); - } - #endregion -} diff --git a/BurnOutSharp/External/HLLib.bak/HLExtract.Net/Program.cs b/BurnOutSharp/External/HLLib.bak/HLExtract.Net/Program.cs deleted file mode 100644 index 9be92f8e..00000000 --- a/BurnOutSharp/External/HLLib.bak/HLExtract.Net/Program.cs +++ /dev/null @@ -1,1158 +0,0 @@ -/* - * HLExtract.Net - * Copyright (C) 2008-2010 Ryan Gregg - - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - */ - -using System; -using System.Collections.Generic; -using System.IO; -using System.Runtime.InteropServices; - -namespace HLExtract.Net -{ - public class HLExtractProgram - { - static bool bSilent = false; - static bool bPause = true; - static string sDestination = string.Empty; - - public static int Process(string[] args) - { - // Arguments. - string sPackage = string.Empty; - List Commands = new List(); - string sNCFRootPath = string.Empty; - - bool bFileMapping = false; - bool bQuickFileMapping = false; - bool bVolatileAccess = false; - bool bWriteAccess = false; - bool bOverwriteFiles = true; - - // Package stuff. - HLLib.HLPackageType ePackageType = HLLib.HLPackageType.HL_PACKAGE_NONE; - uint uiPackage = HLLib.HL_ID_INVALID; - uint uiMode = (uint)HLLib.HLFileMode.HL_MODE_INVALID; - - if(HLLib.hlGetUnsignedInteger(HLLib.HLOption.HL_VERSION) < HLLib.HL_VERSION_NUMBER) - { - //Console.WriteLine("Wrong HLLib version: v{0}.", HLLib.hlGetString(HLLib.HLOption.HL_VERSION)); - return 1; - } - - // Process switches. - if(args.Length == 1) - { - sPackage = args[0]; - } - else - { - for(int i = 0; i < args.Length; i++) - { - if(string.Equals(args[i], "-p", StringComparison.CurrentCultureIgnoreCase) || string.Equals(args[i], "--package", StringComparison.CurrentCultureIgnoreCase)) - { - if(sPackage.Length == 0 && i + 1 < args.Length) - { - sPackage = args[++i]; - } - else - { - PrintUsage(); - return 2; - } - } - else if(string.Equals(args[i], "-d", StringComparison.CurrentCultureIgnoreCase) || string.Equals(args[i], "--dest", StringComparison.CurrentCultureIgnoreCase)) - { - if(sDestination.Length == 0 && i + 1 < args.Length) - { - sDestination = args[++i]; - } - else - { - PrintUsage(); - return 2; - } - } - else if(string.Equals(args[i], "-x", StringComparison.CurrentCultureIgnoreCase) || string.Equals(args[i], "--execute", StringComparison.CurrentCultureIgnoreCase)) - { - if(sDestination.Length == 0 && i + 1 < args.Length) - { - Commands.Add(args[++i]); - } - else - { - PrintUsage(); - return 2; - } - } - else if(string.Equals(args[i], "-n", StringComparison.CurrentCultureIgnoreCase) || string.Equals(args[i], "--ncfroot", StringComparison.CurrentCultureIgnoreCase)) - { - if(sNCFRootPath.Length == 0 && i + 1 < args.Length) - { - sNCFRootPath = args[++i]; - } - else - { - PrintUsage(); - return 2; - } - } - else if(string.Equals(args[i], "-s", StringComparison.CurrentCultureIgnoreCase) || string.Equals(args[i], "--silent", StringComparison.CurrentCultureIgnoreCase)) - { - bSilent = true; - } - else if(string.Equals(args[i], "-u", StringComparison.CurrentCultureIgnoreCase) || string.Equals(args[i], "--no-pause", StringComparison.CurrentCultureIgnoreCase)) - { - bPause = false; - } - else if(string.Equals(args[i], "-m", StringComparison.CurrentCultureIgnoreCase) || string.Equals(args[i], "--filemapping", StringComparison.CurrentCultureIgnoreCase)) - { - bFileMapping = true; - } - else if(string.Equals(args[i], "-q", StringComparison.CurrentCultureIgnoreCase) || string.Equals(args[i], "--quick-filemapping", StringComparison.CurrentCultureIgnoreCase)) - { - bFileMapping = true; - bQuickFileMapping = true; - } - else if(string.Equals(args[i], "-v", StringComparison.CurrentCultureIgnoreCase) || string.Equals(args[i], "--volatile", StringComparison.CurrentCultureIgnoreCase)) - { - bVolatileAccess = true; - } - else if(string.Equals(args[i], "-w", StringComparison.CurrentCultureIgnoreCase) || string.Equals(args[i], "--write", StringComparison.CurrentCultureIgnoreCase)) - { - bWriteAccess = true; - } - else if(string.Equals(args[i], "-o", StringComparison.CurrentCultureIgnoreCase) || string.Equals(args[i], "--no-overwrite", StringComparison.CurrentCultureIgnoreCase)) - { - bOverwriteFiles = false; - } - else - { - PrintUsage(); - return 2; - } - } - } - - // Make sure we have something to do. - if(sPackage.Length == 0) - { - PrintUsage(); - return 2; - } - - // If the destination directory is not specified, make it the input directory. - if(sDestination.Length == 0) - { - int iIndex = sPackage.LastIndexOfAny(new char[]{'\\', '/'}); - if(iIndex != -1) - { - sDestination = sPackage.Substring(0, iIndex + 1); - } - } - - HLLib.hlInitialize(); - - // Keep the delegates alive so they don't get garbage collected. - HLLib.HLExtractItemStartProc HLExtractItemStartProc = new HLLib.HLExtractItemStartProc(ExtractItemStartCallback); - HLLib.HLExtractItemEndProc HLExtractItemEndProc = new HLLib.HLExtractItemEndProc(ExtractItemEndCallback); - HLLib.HLExtractFileProgressProc HLExtractFileProgressProc = new HLLib.HLExtractFileProgressProc(FileProgressCallback); - HLLib.HLValidateFileProgressProc HLValidateFileProgressProc = new HLLib.HLValidateFileProgressProc(FileProgressCallback); - HLLib.HLDefragmentFileProgressExProc HLDefragmentFileProgressProc = new HLLib.HLDefragmentFileProgressExProc(DefragmentProgressCallback); - - HLLib.hlSetBoolean(HLLib.HLOption.HL_OVERWRITE_FILES, bOverwriteFiles); - HLLib.hlSetVoid(HLLib.HLOption.HL_PROC_EXTRACT_ITEM_START, Marshal.GetFunctionPointerForDelegate(HLExtractItemStartProc)); - HLLib.hlSetVoid(HLLib.HLOption.HL_PROC_EXTRACT_ITEM_END, Marshal.GetFunctionPointerForDelegate(HLExtractItemEndProc)); - HLLib.hlSetVoid(HLLib.HLOption.HL_PROC_EXTRACT_FILE_PROGRESS, Marshal.GetFunctionPointerForDelegate(HLExtractFileProgressProc)); - HLLib.hlSetVoid(HLLib.HLOption.HL_PROC_VALIDATE_FILE_PROGRESS, Marshal.GetFunctionPointerForDelegate(HLValidateFileProgressProc)); - HLLib.hlSetVoid(HLLib.HLOption.HL_PROC_DEFRAGMENT_PROGRESS_EX, Marshal.GetFunctionPointerForDelegate(HLDefragmentFileProgressProc)); - - // Get the package type from the filename extension. - ePackageType = HLLib.hlGetPackageTypeFromName(sPackage); - - // If the above fails, try getting the package type from the data at the start of the file. - if(ePackageType == HLLib.HLPackageType.HL_PACKAGE_NONE && File.Exists(sPackage)) - { - FileStream Reader = null; - try - { - byte[] lpBuffer = new byte[HLLib.HL_DEFAULT_PACKAGE_TEST_BUFFER_SIZE]; - Reader = new FileStream(sPackage, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - int iBytesRead = Reader.Read(lpBuffer, 0, lpBuffer.Length); - if(iBytesRead > 0) - { - IntPtr lpBytesRead = Marshal.AllocHGlobal(iBytesRead); - try - { - Marshal.Copy(lpBuffer, 0, lpBytesRead, iBytesRead); - ePackageType = HLLib.hlGetPackageTypeFromMemory(lpBytesRead, (uint)iBytesRead); - } - finally - { - Marshal.FreeHGlobal(lpBytesRead); - } - } - } - finally - { - if(Reader != null) - { - Reader.Close(); - } - } - } - - if(ePackageType == HLLib.HLPackageType.HL_PACKAGE_NONE) - { - //Console.WriteLine("Error loading {0}:", sPackage); - //Console.WriteLine("Unsupported package type."); - - HLLib.hlShutdown(); - Pause(); - return 3; - } - - // Create a package element, the element is allocated by the library and cleaned - // up by the library. An ID is generated which must be bound to apply operations - // to the package. - if(!HLLib.hlCreatePackage(ePackageType, out uiPackage)) - { - //Console.WriteLine("Error loading {0}:", sPackage); - //Console.WriteLine(HLLib.hlGetString(HLLib.HLOption.HL_ERROR_SHORT_FORMATED)); - - HLLib. hlShutdown(); - Pause(); - return 3; - } - - HLLib.hlBindPackage(uiPackage); - - uiMode = (uint)HLLib.HLFileMode.HL_MODE_READ; - uiMode |= !bFileMapping ? (uint)HLLib.HLFileMode.HL_MODE_NO_FILEMAPPING : 0; - uiMode |= bQuickFileMapping ? (uint)HLLib.HLFileMode.HL_MODE_QUICK_FILEMAPPING : 0; - uiMode |= bVolatileAccess ? (uint)HLLib.HLFileMode.HL_MODE_VOLATILE : 0; - uiMode |= bWriteAccess ? (uint)HLLib.HLFileMode.HL_MODE_WRITE : 0; - - // Open the package. - // Of the above modes, only HL_MODE_READ is required. HL_MODE_WRITE is present - // only for future use. File mapping is recommended as an efficient way to load - // packages. Quick file mapping maps the entire file (instead of bits as they are - // needed) and thus should only be used in Windows 2000 and up (older versions of - // Windows have poor virtual memory management which means large files won't be able - // to find a continues block and will fail to load). Volatile access allows HLLib - // to share files with other applications that have those file open for writing. - // This is useful for, say, loading .gcf files while Steam is running. - if(!HLLib.hlPackageOpenFile(sPackage, uiMode)) - { - //Console.WriteLine("Error loading {0}:", sPackage); - //Console.WriteLine(HLLib.hlGetString(HLLib.HLOption.HL_ERROR_SHORT_FORMATED)); - - HLLib. hlShutdown(); - Pause(); - return 3; - } - - // If we have a .ncf file, the package file data is stored externally. In order to - // validate the file data etc., HLLib needs to know where to look. Tell it where. - if(ePackageType == HLLib.HLPackageType.HL_PACKAGE_NCF && sNCFRootPath.Length > 0) - { - HLLib.hlNCFFileSetRootPath(sNCFRootPath); - } - - if(!bSilent) - //Console.WriteLine("{0} opened.", sPackage); - - // Interactive console mode. - EnterConsole(uiPackage, Commands); - - // Close the package. - HLLib.hlPackageClose(); - - if(!bSilent) - //Console.WriteLine("{0} closed.", sPackage); - - // Free up the allocated memory. - HLLib.hlDeletePackage(uiPackage); - - HLLib.hlShutdown(); - - return 0; - } - - static void Pause() - { - if(bPause) - { - //Console.Write("Press any key to continue . . . "); - //Console.ReadKey(true); - } - } - - static void PrintUsage() - { - System.Reflection.AssemblyName Name = System.Reflection.Assembly.GetExecutingAssembly().GetName(); - - //Console.WriteLine("HLExtract.Net v{0}.{1}.{2} using HLLib v{3}", Name.Version.Major, Name.Version.Minor, Name.Version.Build, HLLib.hlGetString(HLLib.HLOption.HL_VERSION)); - //Console.WriteLine(); - //Console.WriteLine("Correct HLExtract.Net usage:"); - //Console.WriteLine(" -p (Package to load.)"); - //Console.WriteLine(" -d (Destination extraction directory.)"); - //Console.WriteLine(" -x (Execute console command.)"); - //Console.WriteLine(" -s (Silent mode.)"); - //Console.WriteLine(" -u (Don't pause on error..)"); - //Console.WriteLine(" -m (Use file mapping.)"); - //Console.WriteLine(" -q (Use quick file mapping.)"); - //Console.WriteLine(" -v (Allow volatile access.)"); - //Console.WriteLine(" -w (Allow write access.)"); - //Console.WriteLine(" -o (Don't overwrite files.)"); - //Console.WriteLine(" -n (NCF file's root path.)"); - //Console.WriteLine(); - //Console.WriteLine("Example HLExtract.Net usage:"); - //Console.WriteLine("HLExtract.Net.exe -p \"C:\\half-life.gcf\" -d \"C:\\backup\""); - //Console.WriteLine("HLExtract.Net.exe -p \"C:\\half-life.gcf\" -m -v"); - //Console.WriteLine("HLExtract.Net.exe -p \"C:\\half-life.gcf\" -w -x defragment -x exit"); - //Console.WriteLine(); - //Console.WriteLine("Batching HLExtract.Net:"); - //Console.WriteLine("for %%F in (*.gcf) do HLExtract.Net.exe -p \"%%F\" -u -v -x \"info .\" -x exit"); - //Console.WriteLine("for %%F in (*.gcf) do HLExtract.Net.exe -p \"%%F\" -s -u -x \"validate .\" -x exit"); - //Console.WriteLine("for %%F in (*.gcf) do HLExtract.Net.exe -p \"%%F\" -s -u -w -x defragment -x exit"); - - Pause(); - } - - static readonly uint MAX_PATH_SIZE = 512; - - static string GetPath(IntPtr pItem) - { - string sPath = string.Empty; - IntPtr lpPath = IntPtr.Zero; - try - { - lpPath = Marshal.AllocHGlobal((int)MAX_PATH_SIZE); - HLLib.hlItemGetPath(pItem, lpPath, MAX_PATH_SIZE); - sPath = Marshal.PtrToStringAnsi(lpPath); - } - finally - { - if(lpPath != IntPtr.Zero) - { - Marshal.FreeHGlobal(lpPath); - } - } - return sPath; - } - -#region Progress Callbacks - static uint uiProgressLast; - - static void ProgressStart() - { - uiProgressLast = 0; - //Console.Write("0%"); - } - - static void ProgressUpdate(UInt64 uiBytesDone, UInt64 uiBytesTotal) - { - if(!bSilent) - { - uint uiProgress = uiBytesTotal == 0 ? 100 : (uint)(uiBytesDone * 100 / uiBytesTotal); - while(uiProgress >= uiProgressLast + 10) - { - uiProgressLast += 10; - if(uiProgressLast == 100) - { - //Console.Write("100% "); - } - else if(uiProgressLast == 50) - { - //Console.Write("50%"); - } - else - { - //Console.Write("."); - } - } - } - } - - static void ExtractItemStartCallback(IntPtr pItem) - { - if(!bSilent) - { - if(HLLib.hlItemGetType(pItem) == HLLib.HLDirectoryItemType.HL_ITEM_FILE) - { - //Console.Write(" Extracting {0}: ", HLLib.hlItemGetName(pItem)); - ProgressStart(); - } - else - { - //Console.WriteLine(" Extracting {0}:", HLLib.hlItemGetName(pItem)); - } - } - } - - static void FileProgressCallback(IntPtr pFile, uint uiBytesExtracted, uint uiBytesTotal, ref bool pCancel) - { - ProgressUpdate((UInt64)uiBytesExtracted, (UInt64)uiBytesTotal); - } - - static void ExtractItemEndCallback(IntPtr pItem, bool bSuccess) - { - if(bSuccess) - { - if(!bSilent) - { - uint uiSize = 0; - HLLib.hlItemGetSize(pItem, out uiSize); - if(HLLib.hlItemGetType(pItem) == HLLib.HLDirectoryItemType.HL_ITEM_FILE) - { - //Console.WriteLine("OK ({0} B)", uiSize); - } - else - { - //Console.WriteLine(" Done {0}: OK ({1} B)", HLLib.hlItemGetName(pItem), uiSize); - } - } - } - else - { - if(!bSilent) - { - if(HLLib.hlItemGetType(pItem) == HLLib.HLDirectoryItemType.HL_ITEM_FILE) - { - //Console.WriteLine("Errored"); - //Console.WriteLine(" {0}", HLLib.hlGetString(HLLib.HLOption.HL_ERROR_SHORT_FORMATED)); - } - else - { - //Console.WriteLine(" Done {0}: Errored", HLLib.hlItemGetName(pItem)); - } - } - else - { - if(HLLib.hlItemGetType(pItem) == HLLib.HLDirectoryItemType.HL_ITEM_FILE) - { - //Console.WriteLine(" Error extracting {0}:", GetPath(pItem)); - //Console.WriteLine(" {0}", HLLib.hlGetString(HLLib.HLOption.HL_ERROR_SHORT_FORMATED)); - } - else - { - //Console.WriteLine(" Error extracting {0}.", GetPath(pItem)); - } - } - } - } - - static void DefragmentProgressCallback(IntPtr pFile, uint uiFilesDefragmented, uint uiFilesTotal, UInt64 uiBytesDefragmented, UInt64 uiBytesTotal, ref bool pCancel) - { - ProgressUpdate(uiBytesDefragmented, uiBytesTotal); - } -#endregion - - static readonly string[] ValidationNames = new string[] { "OK", "Assumed OK", "Incomplete", "Corrupt", "Canceled", "Error" }; - - static string GetValidation(HLLib.HLValidation eValidation) - { - if(eValidation >= HLLib.HLValidation.HL_VALIDATES_OK && eValidation <= HLLib.HLValidation.HL_VALIDATES_ERROR) - { - return ValidationNames[(uint)eValidation]; - } - return string.Empty; - } - - static HLLib.HLValidation Validate(IntPtr pItem) - { - HLLib.HLValidation eValidation = HLLib.HLValidation.HL_VALIDATES_OK, eTest; - - switch(HLLib.hlItemGetType(pItem)) - { - case HLLib.HLDirectoryItemType.HL_ITEM_FOLDER: - if(!bSilent) - { - //Console.WriteLine(" Validating {0}:", HLLib.hlItemGetName(pItem)); - } - - uint uiItemCount = HLLib.hlFolderGetCount(pItem); - for(uint i = 0; i < uiItemCount; i++) - { - eTest = Validate(HLLib.hlFolderGetItem(pItem, i)); - if(eTest > eValidation) - { - eValidation = eTest; - } - } - - if(!bSilent) - { - //Console.WriteLine(" Done {0}: {1}", HLLib.hlItemGetName(pItem), GetValidation(eValidation)); - } - break; - case HLLib.HLDirectoryItemType.HL_ITEM_FILE: - if(!bSilent) - { - //Console.Write(" Validating {0}: ", HLLib.hlItemGetName(pItem)); - ProgressStart(); - } - - eValidation = HLLib.hlFileGetValidation(pItem); - - if(bSilent) - { - switch(eValidation) - { - case HLLib.HLValidation.HL_VALIDATES_INCOMPLETE: - case HLLib.HLValidation.HL_VALIDATES_CORRUPT: - //Console.WriteLine(" Validating {0}: {1}", GetPath(pItem), GetValidation(eValidation)); - break; - } - } - else - { - //Console.WriteLine(GetValidation(eValidation)); - } - break; - } - - return eValidation; - } - - static void EnterConsole(uint uiPackage, List Commands) - { - IntPtr pItem = HLLib.hlPackageGetRoot(); - - while(true) - { - string sLine = null; - if(Commands.Count > 0) - { - sLine = Commands[0].Trim().Trim('\''); - - //Console.WriteLine("{0}>{1}", HLLib.hlItemGetName(pItem), sLine); - Commands.RemoveAt(0); - } - else - { - // Command prompt. - //Console.Write("{0}>", HLLib.hlItemGetName(pItem)); - - // Get and parse line. - //sLine = Console.ReadLine().Trim(); - } - if(sLine == null) - { - break; - } - - int iIndex; - for(iIndex = 0; iIndex < sLine.Length; iIndex++) - { - if(!Char.IsLetter(sLine[iIndex])) - { - break; - } - } - - string sCommand, sArgument; - if(iIndex == sLine.Length) - { - sCommand = sLine; - sArgument = string.Empty; - } - else - { - sCommand = sLine.Substring(0, iIndex).TrimEnd(); - sArgument = sLine.Substring(iIndex).TrimStart(); - } - - // Cycle through commands. - - // - // Directory listing. - // Good example of CDirectoryItem::GetType(). - // - if(String.Equals(sCommand, "dir", StringComparison.CurrentCultureIgnoreCase)) - { - uint uiItemCount = HLLib.hlFolderGetCount(pItem); - uint uiFolderCount = 0, uiFileCount = 0; - - //Console.WriteLine("Directory of {0}:", GetPath(pItem)); - - //Console.WriteLine(); - - if(sArgument.Length == 0) - { - // List all items in the current folder. - for(uint i = 0; i < uiItemCount; i++) - { - IntPtr pSubItem = HLLib.hlFolderGetItem(pItem, i); - if(HLLib.hlItemGetType(pSubItem) == HLLib.HLDirectoryItemType.HL_ITEM_FOLDER) - { - uiFolderCount++; - //Console.WriteLine(" <{0}>", HLLib.hlItemGetName(pSubItem)); - } - else if(HLLib.hlItemGetType(pSubItem) == HLLib.HLDirectoryItemType.HL_ITEM_FILE) - { - uiFileCount++; - //Console.WriteLine(" {0}", HLLib.hlItemGetName(pSubItem)); - } - } - } - else - { - IntPtr pSubItem = HLLib.hlFolderFindFirst(pItem, sArgument, HLLib.HLFindType.HL_FIND_ALL | HLLib.HLFindType.HL_FIND_NO_RECURSE); - while(pSubItem != IntPtr.Zero) - { - if(HLLib.hlItemGetType(pSubItem) == HLLib.HLDirectoryItemType.HL_ITEM_FOLDER) - { - uiFolderCount++; - //Console.WriteLine(" <{0}>", HLLib.hlItemGetName(pSubItem)); - } - else if(HLLib.hlItemGetType(pSubItem) == HLLib.HLDirectoryItemType.HL_ITEM_FILE) - { - uiFileCount++; - //Console.WriteLine(" {0}", HLLib.hlItemGetName(pSubItem)); - } - - pSubItem = HLLib.hlFolderFindNext(pItem, pSubItem, sArgument, HLLib.HLFindType.HL_FIND_ALL | HLLib.HLFindType.HL_FIND_NO_RECURSE); - } - } - - //Console.WriteLine(); - - // Could also have used hlFolderGetFolderCount() and - // hlFolderGetFileCount(). - - //Console.WriteLine("Summary:"); - //Console.WriteLine(); - //Console.WriteLine(" {0} Folder{1}.", uiFolderCount, uiFolderCount != 1 ? "s" : ""); - //Console.WriteLine(" {0} File{1}.", uiFileCount, uiFileCount != 1 ? "s" : ""); - //Console.WriteLine(); - } - // - // Change directory. - // Good example of CDirectoryFolder::GetParent() and item casting. - // - else if(String.Equals(sCommand, "cd", StringComparison.CurrentCultureIgnoreCase)) - { - if(sArgument.Length == 0) - { - //Console.WriteLine("No argument for command cd supplied."); - } - else - { - if(String.Equals(sArgument, ".", StringComparison.CurrentCultureIgnoreCase)) - { - - } - else if(String.Equals(sArgument, "..", StringComparison.CurrentCultureIgnoreCase)) - { - if(HLLib.hlItemGetParent(pItem) != IntPtr.Zero) - { - pItem = HLLib.hlItemGetParent(pItem); - } - else - { - //Console.WriteLine("Folder does not have a parent."); - } - } - else - { - bool bFound = false; - uint uiItemCount = HLLib.hlFolderGetCount(pItem); - for(uint i = 0; i < uiItemCount; i++) - { - IntPtr pSubItem = HLLib.hlFolderGetItem(pItem, i); - if(HLLib.hlItemGetType(pSubItem) == HLLib.HLDirectoryItemType.HL_ITEM_FOLDER && String.Equals(sArgument, HLLib.hlItemGetName(pSubItem), StringComparison.CurrentCultureIgnoreCase)) - { - bFound = true; - pItem = pSubItem; - break; - } - } - - if(!bFound) - { - //Console.WriteLine("{0} not found.", sArgument); - } - } - } - } - // - // Go to the root folder. - // - else if(String.Equals(sCommand, "root", StringComparison.CurrentCultureIgnoreCase)) - { - pItem = HLLib.hlPackageGetRoot(); - } - // - // Item information. - // Good example of CPackageUtility helper functions. - // - else if(String.Equals(sCommand, "info", StringComparison.CurrentCultureIgnoreCase)) - { - if(sArgument.Length == 0) - { - //Console.WriteLine("No argument for command info supplied."); - } - else - { - IntPtr pSubItem = HLLib.hlFolderGetItemByPath(pItem, sArgument, HLLib.HLFindType.HL_FIND_ALL); - - if(pSubItem != IntPtr.Zero) - { - //Console.WriteLine("Information for {0}:", GetPath(pSubItem)); - //Console.WriteLine(); - - switch(HLLib.hlItemGetType(pSubItem)) - { - case HLLib.HLDirectoryItemType.HL_ITEM_FOLDER: - //Console.WriteLine(" Type: Folder"); - //Console.WriteLine(" Size: {0} B", HLLib.hlFolderGetSizeEx(pSubItem, true)); - //Console.WriteLine(" Size On Disk: {0} B", HLLib.hlFolderGetSizeOnDiskEx(pSubItem, true)); - //Console.WriteLine(" Folders: {0}", HLLib.hlFolderGetFolderCount(pSubItem, true)); - //Console.WriteLine(" Files: {0}", HLLib.hlFolderGetFileCount(pSubItem, true)); - break; - case HLLib.HLDirectoryItemType.HL_ITEM_FILE: - //Console.WriteLine(" Type: File"); - //Console.WriteLine(" Extractable: {0}", HLLib.hlFileGetExtractable(pSubItem) != 0 ? "True" : "False"); - ////Console.WriteLine(" Validates: {0}", HLLib.hlFileGetValidates(pSubItem) ? "True" : "False"); - //Console.WriteLine(" Size: {0} B", HLLib.hlFileGetSize(pSubItem)); - //Console.WriteLine(" Size On Disk: {0} B", HLLib.hlFileGetSizeOnDisk(pSubItem)); - break; - } - - uint uiAttributeCount = HLLib.hlPackageGetItemAttributeCount(); - for(uint i = 0; i < uiAttributeCount; i++) - { - HLLib.HLAttribute Attribute; - if(HLLib.hlPackageGetItemAttribute(pSubItem, (HLLib.HLPackageAttribute)i, out Attribute)) - { - if(Attribute.eAttributeType != HLLib.HLAttributeType.HL_ATTRIBUTE_INVALID) - { - //Console.WriteLine(" {0}: {1}", Attribute.GetName(), Attribute.ToString()); - } - } - } - - //Console.WriteLine(); - } - else - { - //Console.WriteLine("{0} not found.", sArgument); - } - } - } - // - // Extract item. - // Good example of CPackageUtility extract functions. - // - else if(String.Equals(sCommand, "extract", StringComparison.CurrentCultureIgnoreCase)) - { - if(sArgument.Length == 0) - { - //Console.WriteLine("No argument for command extract supplied."); - } - else - { - IntPtr pSubItem; - if(String.Equals(sArgument, ".", StringComparison.CurrentCultureIgnoreCase)) - { - pSubItem = pItem; - } - else - { - pSubItem = HLLib.hlFolderGetItemByName(pItem, sArgument, HLLib.HLFindType.HL_FIND_ALL); - } - - if(pSubItem != IntPtr.Zero) - { - // Extract the item. - // Item is extracted to cDestination\Item->GetName(). - if(!bSilent) - { - //Console.WriteLine("Extracting {0}...", HLLib.hlItemGetName(pSubItem)); - //Console.WriteLine(); - } - - HLLib.hlItemExtract(pSubItem, sDestination); - - if(!bSilent) - { - //Console.WriteLine(""); - //Console.WriteLine("Done."); - } - } - else - { - //Console.WriteLine("{0} not found.", sArgument); - } - } - } - // - // Validate item. - // Validates the checksums of each item. - // - else if(String.Equals(sCommand, "validate", StringComparison.CurrentCultureIgnoreCase)) - { - if(sArgument.Length == 0) - { - //Console.WriteLine("No argument for command extract supplied."); - } - else - { - IntPtr pSubItem; - if(String.Equals(sArgument, ".", StringComparison.CurrentCultureIgnoreCase)) - { - pSubItem = pItem; - } - else - { - pSubItem = HLLib.hlFolderGetItemByName(pItem, sArgument, HLLib.HLFindType.HL_FIND_ALL); - } - - if(pSubItem != IntPtr.Zero) - { - if(!bSilent) - { - //Console.WriteLine("Validating {0}...", HLLib.hlItemGetName(pSubItem)); - //Console.WriteLine(); - } - - Validate(pSubItem); - - if(!bSilent) - { - //Console.WriteLine(); - //Console.WriteLine("Done."); - } - } - else - { - //Console.WriteLine("{0} not found.", sArgument); - } - } - } - // - // Defragment package. - // Validates the checksums of each item. - // - else if(String.Equals(sCommand, "defragment", StringComparison.CurrentCultureIgnoreCase)) - { - bool bForceDefragment = false; - if(sArgument.Length != 0) - { - try - { - bForceDefragment = Convert.ToBoolean(sArgument); - } - catch - { - } - } - - if(!bSilent) - { - //Console.WriteLine("Defragmenting..."); - //Console.WriteLine(); - } - - HLLib.hlSetBoolean(HLLib.HLOption.HL_FORCE_DEFRAGMENT, bForceDefragment); - - //Console.Write(" Progress: "); - ProgressStart(); - if(!HLLib.hlPackageDefragment()) - { - //Console.Write(" {0}", HLLib.hlGetString(HLLib.HLOption.HL_ERROR_SHORT_FORMATED)); - } - - if(!bSilent) - { - //Console.WriteLine(); - - //Console.WriteLine(); - //Console.WriteLine("Done."); - } - } - // - // Find items. - // Good example of recursive directory navigation (Search() function). - // - else if(String.Equals(sCommand, "find", StringComparison.CurrentCultureIgnoreCase)) - { - if(sArgument.Length == 0) - { - //Console.WriteLine("No argument for command find supplied."); - } - else - { - // Search for the requested items. - if(!bSilent) - { - //Console.WriteLine("Searching for {0}...", sArgument); - //Console.WriteLine(); - } - - uint uiFolderCount = 0, uiFileCount = 0; - IntPtr pSubItem = HLLib.hlFolderFindFirst(pItem, sArgument, HLLib.HLFindType.HL_FIND_ALL); - while(pSubItem != IntPtr.Zero) - { - switch(HLLib.hlItemGetType(pSubItem)) - { - case HLLib.HLDirectoryItemType.HL_ITEM_FOLDER: - uiFolderCount++; - - //Console.WriteLine(" Found folder: {0}", GetPath(pSubItem)); - break; - case HLLib.HLDirectoryItemType.HL_ITEM_FILE: - uiFileCount++; - - //Console.WriteLine(" Found file: {0}", GetPath(pSubItem)); - break; - } - - pSubItem = HLLib.hlFolderFindNext(pItem, pSubItem, sArgument, HLLib.HLFindType.HL_FIND_ALL); - } - - if(!bSilent) - { - if(uiFolderCount != 0 || uiFileCount != 0) - { - //Console.WriteLine(); - } - - //Console.WriteLine(" {0} folder{1} and {2} file{3} found.", uiFolderCount, uiFolderCount != 1 ? "s" : "", uiFileCount, uiFileCount != 1 ? "s" : ""); - //Console.WriteLine(); - } - } - } - // - // Type files. - // Good example of reading files into memory. - // - else if(String.Equals(sCommand, "type", StringComparison.CurrentCultureIgnoreCase)) - { - if(sArgument.Length == 0) - { - //Console.WriteLine("No argument for command type supplied."); - } - else - { - IntPtr pSubItem = HLLib.hlFolderGetItemByName(pItem, sArgument, HLLib.HLFindType.HL_FIND_FILES); - - if(pSubItem != IntPtr.Zero) - { - if(!bSilent) - { - //Console.WriteLine("Type for {0}:", GetPath(pSubItem)); - //Console.WriteLine(); - } - - IntPtr pStream; - if(HLLib.hlFileCreateStream(pSubItem, out pStream)) - { - if(HLLib.hlStreamOpen(pStream, (uint)HLLib.HLFileMode.HL_MODE_READ)) - { - char iChar; - while(HLLib.hlStreamReadChar(pStream, out iChar)) - { - if((iChar >= ' ' && iChar <= '~') || iChar == '\n' || iChar == '\t') - { - //Console.Write(iChar); - } - } - - HLLib.hlStreamClose(pStream); - } - else - { - //Console.WriteLine("Error typing {0}:", HLLib.hlItemGetName(pSubItem)); - //Console.WriteLine(HLLib.hlGetString(HLLib.HLOption.HL_ERROR_SHORT_FORMATED)); - } - - HLLib.hlFileReleaseStream(pSubItem, pStream); - } - else - { - //Console.WriteLine("Error typing {0}:", HLLib.hlItemGetName(pSubItem)); - //Console.WriteLine(HLLib.hlGetString(HLLib.HLOption.HL_ERROR_SHORT_FORMATED)); - } - - if(!bSilent) - { - //Console.WriteLine(); - //Console.WriteLine("Done."); - } - } - else - { - //Console.WriteLine("{0} not found.", sArgument); - } - } - } - // - // Open item. - // Good example of opening packages inside packages. - // - else if(String.Equals(sCommand, "open", StringComparison.CurrentCultureIgnoreCase)) - { - if(sArgument.Length == 0) - { - //Console.WriteLine("No argument for command open supplied."); - } - else - { - IntPtr pSubItem = HLLib.hlFolderGetItemByName(pItem, sArgument, HLLib.HLFindType.HL_FIND_FILES); - - if(pSubItem != IntPtr.Zero) - { - IntPtr pStream; - if(HLLib.hlFileCreateStream(pSubItem, out pStream)) - { - if(HLLib.hlStreamOpen(pStream, (uint)HLLib.HLFileMode.HL_MODE_READ)) - { - HLLib.HLPackageType ePackageType = HLLib.hlGetPackageTypeFromStream(pStream); - - uint uiSubPackage; - if(HLLib.hlCreatePackage(ePackageType, out uiSubPackage)) - { - HLLib.hlBindPackage(uiSubPackage); - if(HLLib.hlPackageOpenStream(pStream, (uint)HLLib.HLFileMode.HL_MODE_READ)) - { - if(!bSilent) - //Console.WriteLine("{0} opened.", HLLib.hlItemGetName(pSubItem)); - - EnterConsole(uiSubPackage, Commands); - - HLLib.hlPackageClose(); - - if (!bSilent) - { - //Console.WriteLine("{0} closed.", HLLib.hlItemGetName(pSubItem)); - } - } - else - { - //Console.WriteLine("Error opening {0}:", HLLib.hlItemGetName(pSubItem)); - //Console.WriteLine(HLLib.hlGetString(HLLib.HLOption.HL_ERROR_SHORT_FORMATED)); - } - - HLLib.hlDeletePackage(uiSubPackage); - - HLLib.hlBindPackage(uiPackage); - } - else - { - //Console.WriteLine("Error opening {0}:", HLLib.hlItemGetName(pSubItem)); - //Console.WriteLine(HLLib.hlGetString(HLLib.HLOption.HL_ERROR_SHORT_FORMATED)); - } - - HLLib.hlStreamClose(pStream); - } - else - { - //Console.WriteLine("Error opening {0}:", HLLib.hlItemGetName(pSubItem)); - //Console.WriteLine(HLLib.hlGetString(HLLib.HLOption.HL_ERROR_SHORT_FORMATED)); - } - - HLLib.hlFileReleaseStream(pSubItem, pStream); - } - else - { - //Console.WriteLine("Error opening {0}:", HLLib.hlItemGetName(pSubItem)); - //Console.WriteLine(HLLib.hlGetString(HLLib.HLOption.HL_ERROR_SHORT_FORMATED)); - } - } - else - { - //Console.WriteLine("{0} not found.", sArgument); - } - } - } - // - // Clear screen. - // - else if(String.Equals(sCommand, "status", StringComparison.CurrentCultureIgnoreCase)) - { - //Console.WriteLine("Total size: {0} B", HLLib.hlGetUnsignedLong(HLLib.HLOption.HL_PACKAGE_SIZE)); - //Console.WriteLine("Total mapping allocations: {0}", HLLib.hlGetUnsignedInteger(HLLib.HLOption.HL_PACKAGE_TOTAL_ALLOCATIONS)); - //Console.WriteLine("Total mapping memory allocated: {0} B", HLLib.hlGetUnsignedLong(HLLib.HLOption.HL_PACKAGE_TOTAL_MEMORY_ALLOCATED)); - //Console.WriteLine("Total mapping memory used: {0} B", HLLib.hlGetUnsignedLong(HLLib.HLOption.HL_PACKAGE_TOTAL_MEMORY_USED)); - - uint uiAttributeCount = HLLib.hlPackageGetAttributeCount(); - for(uint i = 0; i < uiAttributeCount; i++) - { - HLLib.HLAttribute Attribute; - if(HLLib.hlPackageGetAttribute((HLLib.HLPackageAttribute)i, out Attribute)) - { - if(Attribute.eAttributeType != HLLib.HLAttributeType.HL_ATTRIBUTE_INVALID) - { - //Console.WriteLine("{0}: {1}", Attribute.GetName(), Attribute.ToString()); - } - } - } - } - else if(String.Equals(sCommand, "exec", StringComparison.CurrentCultureIgnoreCase) || String.Equals(sCommand, "execute", StringComparison.CurrentCultureIgnoreCase)) - { - if(sArgument.Length == 0) - { - //Console.WriteLine("No argument for command open supplied."); - } - else - { - string[] NewCommands = sArgument.Split(new char[] { '|' }); - Commands.AddRange(NewCommands); - } - } - else if(String.Equals(sCommand, "cls", StringComparison.CurrentCultureIgnoreCase)) - { - try - { - Console.Clear(); - } - catch - { - } - } - else if(String.Equals(sCommand, "help", StringComparison.CurrentCultureIgnoreCase)) - { - //Console.WriteLine("Valid commands:"); - //Console.WriteLine(); - //Console.WriteLine("dir (Directory list.)"); - //Console.WriteLine("cd (Change directroy.)"); - //Console.WriteLine("info (Item information.)"); - //Console.WriteLine("extract (Extract item.)"); - //Console.WriteLine("validate (Validate item.)"); - //Console.WriteLine("defragment [force] (Defragment package.)"); - //Console.WriteLine("find (Find item.)"); - //Console.WriteLine("type (Type a file.)"); - //Console.WriteLine("open (Open a nested package.)"); - //Console.WriteLine("root (Go to the root folder.)"); - //Console.WriteLine("status (Package information.)"); - //Console.WriteLine("execute |... (Execute 1 or more pipe delimited commands.)"); - //Console.WriteLine("cls (Clear the screen.)"); - //Console.WriteLine("help (Program help.)"); - //Console.WriteLine("exit (Quit program.)"); - //Console.WriteLine(); - } - else if(String.Equals(sCommand, "exit", StringComparison.CurrentCultureIgnoreCase)) - { - break; - } - else - { - //Console.WriteLine("Unkown command: {0}", sCommand); - } - } - } - } -} diff --git a/BurnOutSharp/External/hllib b/BurnOutSharp/External/hllib new file mode 160000 index 00000000..2063e3e0 --- /dev/null +++ b/BurnOutSharp/External/hllib @@ -0,0 +1 @@ +Subproject commit 2063e3e0cdc2e8eece472c097d11676f4c67aba3 diff --git a/BurnOutSharp/FileType/Valve.cs b/BurnOutSharp/FileType/Valve.cs index 7623ac80..c3662f66 100644 --- a/BurnOutSharp/FileType/Valve.cs +++ b/BurnOutSharp/FileType/Valve.cs @@ -1,7 +1,7 @@ using System; using System.Collections.Generic; using System.IO; -using HLExtract.Net; +using System.Runtime.InteropServices; namespace BurnOutSharp.FileType { @@ -61,7 +61,7 @@ namespace BurnOutSharp.FileType "-d", tempPath, }; - HLExtractProgram.Process(args); + Run(args); // Collect and format all found protections var protections = scanner.GetProtections(tempPath); @@ -78,5 +78,1143 @@ namespace BurnOutSharp.FileType return protections; } + + // This code was copied over from HLExtract.NET\Program.cs + // It was copied over due to access issues with the existing class. + // This is the only part that should be kept in sync manually + #region HLExtract.Net Main Program + + private static bool bSilent = false; + private static bool bPause = true; + private static string sDestination = string.Empty; + + private static int Run(string[] args) + { + // Arguments. + string sPackage = string.Empty; + List Commands = new List(); + string sNCFRootPath = string.Empty; + + bool bFileMapping = false; + bool bQuickFileMapping = false; + bool bVolatileAccess = false; + bool bWriteAccess = false; + bool bOverwriteFiles = true; + + // Package stuff. + HLLib.HLPackageType ePackageType = HLLib.HLPackageType.HL_PACKAGE_NONE; + uint uiPackage = HLLib.HL_ID_INVALID; + uint uiMode = (uint)HLLib.HLFileMode.HL_MODE_INVALID; + + if(HLLib.hlGetUnsignedInteger(HLLib.HLOption.HL_VERSION) < HLLib.HL_VERSION_NUMBER) + { + Console.WriteLine("Wrong HLLib version: v{0}.", HLLib.hlGetString(HLLib.HLOption.HL_VERSION)); + return 1; + } + + // Process switches. + if(args.Length == 1) + { + sPackage = args[0]; + } + else + { + for(int i = 0; i < args.Length; i++) + { + if(string.Equals(args[i], "-p", StringComparison.CurrentCultureIgnoreCase) || string.Equals(args[i], "--package", StringComparison.CurrentCultureIgnoreCase)) + { + if(sPackage.Length == 0 && i + 1 < args.Length) + { + sPackage = args[++i]; + } + else + { + PrintUsage(); + return 2; + } + } + else if(string.Equals(args[i], "-d", StringComparison.CurrentCultureIgnoreCase) || string.Equals(args[i], "--dest", StringComparison.CurrentCultureIgnoreCase)) + { + if(sDestination.Length == 0 && i + 1 < args.Length) + { + sDestination = args[++i]; + } + else + { + PrintUsage(); + return 2; + } + } + else if(string.Equals(args[i], "-x", StringComparison.CurrentCultureIgnoreCase) || string.Equals(args[i], "--execute", StringComparison.CurrentCultureIgnoreCase)) + { + if(sDestination.Length == 0 && i + 1 < args.Length) + { + Commands.Add(args[++i]); + } + else + { + PrintUsage(); + return 2; + } + } + else if(string.Equals(args[i], "-n", StringComparison.CurrentCultureIgnoreCase) || string.Equals(args[i], "--ncfroot", StringComparison.CurrentCultureIgnoreCase)) + { + if(sNCFRootPath.Length == 0 && i + 1 < args.Length) + { + sNCFRootPath = args[++i]; + } + else + { + PrintUsage(); + return 2; + } + } + else if(string.Equals(args[i], "-s", StringComparison.CurrentCultureIgnoreCase) || string.Equals(args[i], "--silent", StringComparison.CurrentCultureIgnoreCase)) + { + bSilent = true; + } + else if(string.Equals(args[i], "-u", StringComparison.CurrentCultureIgnoreCase) || string.Equals(args[i], "--no-pause", StringComparison.CurrentCultureIgnoreCase)) + { + bPause = false; + } + else if(string.Equals(args[i], "-m", StringComparison.CurrentCultureIgnoreCase) || string.Equals(args[i], "--filemapping", StringComparison.CurrentCultureIgnoreCase)) + { + bFileMapping = true; + } + else if(string.Equals(args[i], "-q", StringComparison.CurrentCultureIgnoreCase) || string.Equals(args[i], "--quick-filemapping", StringComparison.CurrentCultureIgnoreCase)) + { + bFileMapping = true; + bQuickFileMapping = true; + } + else if(string.Equals(args[i], "-v", StringComparison.CurrentCultureIgnoreCase) || string.Equals(args[i], "--volatile", StringComparison.CurrentCultureIgnoreCase)) + { + bVolatileAccess = true; + } + else if(string.Equals(args[i], "-w", StringComparison.CurrentCultureIgnoreCase) || string.Equals(args[i], "--write", StringComparison.CurrentCultureIgnoreCase)) + { + bWriteAccess = true; + } + else if(string.Equals(args[i], "-o", StringComparison.CurrentCultureIgnoreCase) || string.Equals(args[i], "--no-overwrite", StringComparison.CurrentCultureIgnoreCase)) + { + bOverwriteFiles = false; + } + else + { + PrintUsage(); + return 2; + } + } + } + + // Make sure we have something to do. + if(sPackage.Length == 0) + { + PrintUsage(); + return 2; + } + + // If the destination directory is not specified, make it the input directory. + if(sDestination.Length == 0) + { + int iIndex = sPackage.LastIndexOfAny(new char[]{'\\', '/'}); + if(iIndex != -1) + { + sDestination = sPackage.Substring(0, iIndex + 1); + } + } + + HLLib.hlInitialize(); + + // Keep the delegates alive so they don't get garbage collected. + HLLib.HLExtractItemStartProc HLExtractItemStartProc = new HLLib.HLExtractItemStartProc(ExtractItemStartCallback); + HLLib.HLExtractItemEndProc HLExtractItemEndProc = new HLLib.HLExtractItemEndProc(ExtractItemEndCallback); + HLLib.HLExtractFileProgressProc HLExtractFileProgressProc = new HLLib.HLExtractFileProgressProc(FileProgressCallback); + HLLib.HLValidateFileProgressProc HLValidateFileProgressProc = new HLLib.HLValidateFileProgressProc(FileProgressCallback); + HLLib.HLDefragmentFileProgressExProc HLDefragmentFileProgressProc = new HLLib.HLDefragmentFileProgressExProc(DefragmentProgressCallback); + + HLLib.hlSetBoolean(HLLib.HLOption.HL_OVERWRITE_FILES, bOverwriteFiles); + HLLib.hlSetVoid(HLLib.HLOption.HL_PROC_EXTRACT_ITEM_START, Marshal.GetFunctionPointerForDelegate(HLExtractItemStartProc)); + HLLib.hlSetVoid(HLLib.HLOption.HL_PROC_EXTRACT_ITEM_END, Marshal.GetFunctionPointerForDelegate(HLExtractItemEndProc)); + HLLib.hlSetVoid(HLLib.HLOption.HL_PROC_EXTRACT_FILE_PROGRESS, Marshal.GetFunctionPointerForDelegate(HLExtractFileProgressProc)); + HLLib.hlSetVoid(HLLib.HLOption.HL_PROC_VALIDATE_FILE_PROGRESS, Marshal.GetFunctionPointerForDelegate(HLValidateFileProgressProc)); + HLLib.hlSetVoid(HLLib.HLOption.HL_PROC_DEFRAGMENT_PROGRESS_EX, Marshal.GetFunctionPointerForDelegate(HLDefragmentFileProgressProc)); + + // Get the package type from the filename extension. + ePackageType = HLLib.hlGetPackageTypeFromName(sPackage); + + // If the above fails, try getting the package type from the data at the start of the file. + if(ePackageType == HLLib.HLPackageType.HL_PACKAGE_NONE && File.Exists(sPackage)) + { + FileStream Reader = null; + try + { + byte[] lpBuffer = new byte[HLLib.HL_DEFAULT_PACKAGE_TEST_BUFFER_SIZE]; + Reader = new FileStream(sPackage, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); + int iBytesRead = Reader.Read(lpBuffer, 0, lpBuffer.Length); + if(iBytesRead > 0) + { + IntPtr lpBytesRead = Marshal.AllocHGlobal(iBytesRead); + try + { + Marshal.Copy(lpBuffer, 0, lpBytesRead, iBytesRead); + ePackageType = HLLib.hlGetPackageTypeFromMemory(lpBytesRead, (uint)iBytesRead); + } + finally + { + Marshal.FreeHGlobal(lpBytesRead); + } + } + } + finally + { + if(Reader != null) + { + Reader.Close(); + } + } + } + + if(ePackageType == HLLib.HLPackageType.HL_PACKAGE_NONE) + { + Console.WriteLine("Error loading {0}:", sPackage); + Console.WriteLine("Unsupported package type."); + + HLLib.hlShutdown(); + Pause(); + return 3; + } + + // Create a package element, the element is allocated by the library and cleaned + // up by the library. An ID is generated which must be bound to apply operations + // to the package. + if(!HLLib.hlCreatePackage(ePackageType, out uiPackage)) + { + Console.WriteLine("Error loading {0}:", sPackage); + Console.WriteLine(HLLib.hlGetString(HLLib.HLOption.HL_ERROR_SHORT_FORMATED)); + + HLLib. hlShutdown(); + Pause(); + return 3; + } + + HLLib.hlBindPackage(uiPackage); + + uiMode = (uint)HLLib.HLFileMode.HL_MODE_READ; + uiMode |= !bFileMapping ? (uint)HLLib.HLFileMode.HL_MODE_NO_FILEMAPPING : 0; + uiMode |= bQuickFileMapping ? (uint)HLLib.HLFileMode.HL_MODE_QUICK_FILEMAPPING : 0; + uiMode |= bVolatileAccess ? (uint)HLLib.HLFileMode.HL_MODE_VOLATILE : 0; + uiMode |= bWriteAccess ? (uint)HLLib.HLFileMode.HL_MODE_WRITE : 0; + + // Open the package. + // Of the above modes, only HL_MODE_READ is required. HL_MODE_WRITE is present + // only for future use. File mapping is recommended as an efficient way to load + // packages. Quick file mapping maps the entire file (instead of bits as they are + // needed) and thus should only be used in Windows 2000 and up (older versions of + // Windows have poor virtual memory management which means large files won't be able + // to find a continues block and will fail to load). Volatile access allows HLLib + // to share files with other applications that have those file open for writing. + // This is useful for, say, loading .gcf files while Steam is running. + if(!HLLib.hlPackageOpenFile(sPackage, uiMode)) + { + Console.WriteLine("Error loading {0}:", sPackage); + Console.WriteLine(HLLib.hlGetString(HLLib.HLOption.HL_ERROR_SHORT_FORMATED)); + + HLLib. hlShutdown(); + Pause(); + return 3; + } + + // If we have a .ncf file, the package file data is stored externally. In order to + // validate the file data etc., HLLib needs to know where to look. Tell it where. + if(ePackageType == HLLib.HLPackageType.HL_PACKAGE_NCF && sNCFRootPath.Length > 0) + { + HLLib.hlNCFFileSetRootPath(sNCFRootPath); + } + + if(!bSilent) + Console.WriteLine("{0} opened.", sPackage); + + // Interactive console mode. + EnterConsole(uiPackage, Commands); + + // Close the package. + HLLib.hlPackageClose(); + + if(!bSilent) + Console.WriteLine("{0} closed.", sPackage); + + // Free up the allocated memory. + HLLib.hlDeletePackage(uiPackage); + + HLLib.hlShutdown(); + + return 0; + } + + private static void Pause() + { + if(bPause) + { + Console.Write("Press any key to continue . . . "); + Console.ReadKey(true); + } + } + + private static void PrintUsage() + { + System.Reflection.AssemblyName Name = System.Reflection.Assembly.GetExecutingAssembly().GetName(); + + Console.WriteLine("HLExtract.Net v{0}.{1}.{2} using HLLib v{3}", Name.Version.Major, Name.Version.Minor, Name.Version.Build, HLLib.hlGetString(HLLib.HLOption.HL_VERSION)); + Console.WriteLine(); + Console.WriteLine("Correct HLExtract.Net usage:"); + Console.WriteLine(" -p (Package to load.)"); + Console.WriteLine(" -d (Destination extraction directory.)"); + Console.WriteLine(" -x (Execute console command.)"); + Console.WriteLine(" -s (Silent mode.)"); + Console.WriteLine(" -u (Don't pause on error..)"); + Console.WriteLine(" -m (Use file mapping.)"); + Console.WriteLine(" -q (Use quick file mapping.)"); + Console.WriteLine(" -v (Allow volatile access.)"); + Console.WriteLine(" -w (Allow write access.)"); + Console.WriteLine(" -o (Don't overwrite files.)"); + Console.WriteLine(" -n (NCF file's root path.)"); + Console.WriteLine(); + Console.WriteLine("Example HLExtract.Net usage:"); + Console.WriteLine("HLExtract.Net.exe -p \"C:\\half-life.gcf\" -d \"C:\\backup\""); + Console.WriteLine("HLExtract.Net.exe -p \"C:\\half-life.gcf\" -m -v"); + Console.WriteLine("HLExtract.Net.exe -p \"C:\\half-life.gcf\" -w -x defragment -x exit"); + Console.WriteLine(); + Console.WriteLine("Batching HLExtract.Net:"); + Console.WriteLine("for %%F in (*.gcf) do HLExtract.Net.exe -p \"%%F\" -u -v -x \"info .\" -x exit"); + Console.WriteLine("for %%F in (*.gcf) do HLExtract.Net.exe -p \"%%F\" -s -u -x \"validate .\" -x exit"); + Console.WriteLine("for %%F in (*.gcf) do HLExtract.Net.exe -p \"%%F\" -s -u -w -x defragment -x exit"); + + Pause(); + } + + private static readonly uint MAX_PATH_SIZE = 512; + + private static string GetPath(IntPtr pItem) + { + string sPath = string.Empty; + IntPtr lpPath = IntPtr.Zero; + try + { + lpPath = Marshal.AllocHGlobal((int)MAX_PATH_SIZE); + HLLib.hlItemGetPath(pItem, lpPath, MAX_PATH_SIZE); + sPath = Marshal.PtrToStringAnsi(lpPath); + } + finally + { + if(lpPath != IntPtr.Zero) + { + Marshal.FreeHGlobal(lpPath); + } + } + return sPath; + } + +#region Progress Callbacks + private static uint uiProgressLast; + + private static void ProgressStart() + { + uiProgressLast = 0; + Console.Write("0%"); + } + + private static void ProgressUpdate(UInt64 uiBytesDone, UInt64 uiBytesTotal) + { + if(!bSilent) + { + uint uiProgress = uiBytesTotal == 0 ? 100 : (uint)(uiBytesDone * 100 / uiBytesTotal); + while(uiProgress >= uiProgressLast + 10) + { + uiProgressLast += 10; + if(uiProgressLast == 100) + { + Console.Write("100% "); + } + else if(uiProgressLast == 50) + { + Console.Write("50%"); + } + else + { + Console.Write("."); + } + } + } + } + + private static void ExtractItemStartCallback(IntPtr pItem) + { + if(!bSilent) + { + if(HLLib.hlItemGetType(pItem) == HLLib.HLDirectoryItemType.HL_ITEM_FILE) + { + Console.Write(" Extracting {0}: ", HLLib.hlItemGetName(pItem)); + ProgressStart(); + } + else + { + Console.WriteLine(" Extracting {0}:", HLLib.hlItemGetName(pItem)); + } + } + } + + private static void FileProgressCallback(IntPtr pFile, uint uiBytesExtracted, uint uiBytesTotal, ref bool pCancel) + { + ProgressUpdate((UInt64)uiBytesExtracted, (UInt64)uiBytesTotal); + } + + private static void ExtractItemEndCallback(IntPtr pItem, bool bSuccess) + { + if(bSuccess) + { + if(!bSilent) + { + uint uiSize = 0; + HLLib.hlItemGetSize(pItem, out uiSize); + if(HLLib.hlItemGetType(pItem) == HLLib.HLDirectoryItemType.HL_ITEM_FILE) + { + Console.WriteLine("OK ({0} B)", uiSize); + } + else + { + Console.WriteLine(" Done {0}: OK ({1} B)", HLLib.hlItemGetName(pItem), uiSize); + } + } + } + else + { + if(!bSilent) + { + if(HLLib.hlItemGetType(pItem) == HLLib.HLDirectoryItemType.HL_ITEM_FILE) + { + Console.WriteLine("Errored"); + Console.WriteLine(" {0}", HLLib.hlGetString(HLLib.HLOption.HL_ERROR_SHORT_FORMATED)); + } + else + { + Console.WriteLine(" Done {0}: Errored", HLLib.hlItemGetName(pItem)); + } + } + else + { + if(HLLib.hlItemGetType(pItem) == HLLib.HLDirectoryItemType.HL_ITEM_FILE) + { + Console.WriteLine(" Error extracting {0}:", GetPath(pItem)); + Console.WriteLine(" {0}", HLLib.hlGetString(HLLib.HLOption.HL_ERROR_SHORT_FORMATED)); + } + else + { + Console.WriteLine(" Error extracting {0}.", GetPath(pItem)); + } + } + } + } + + private static void DefragmentProgressCallback(IntPtr pFile, uint uiFilesDefragmented, uint uiFilesTotal, UInt64 uiBytesDefragmented, UInt64 uiBytesTotal, ref bool pCancel) + { + ProgressUpdate(uiBytesDefragmented, uiBytesTotal); + } +#endregion + + private static readonly string[] ValidationNames = new string[] { "OK", "Assumed OK", "Incomplete", "Corrupt", "Canceled", "Error" }; + + private static string GetValidation(HLLib.HLValidation eValidation) + { + if(eValidation >= HLLib.HLValidation.HL_VALIDATES_OK && eValidation <= HLLib.HLValidation.HL_VALIDATES_ERROR) + { + return ValidationNames[(uint)eValidation]; + } + return string.Empty; + } + + private static HLLib.HLValidation Validate(IntPtr pItem) + { + HLLib.HLValidation eValidation = HLLib.HLValidation.HL_VALIDATES_OK, eTest; + + switch(HLLib.hlItemGetType(pItem)) + { + case HLLib.HLDirectoryItemType.HL_ITEM_FOLDER: + if(!bSilent) + { + Console.WriteLine(" Validating {0}:", HLLib.hlItemGetName(pItem)); + } + + uint uiItemCount = HLLib.hlFolderGetCount(pItem); + for(uint i = 0; i < uiItemCount; i++) + { + eTest = Validate(HLLib.hlFolderGetItem(pItem, i)); + if(eTest > eValidation) + { + eValidation = eTest; + } + } + + if(!bSilent) + { + Console.WriteLine(" Done {0}: {1}", HLLib.hlItemGetName(pItem), GetValidation(eValidation)); + } + break; + case HLLib.HLDirectoryItemType.HL_ITEM_FILE: + if(!bSilent) + { + Console.Write(" Validating {0}: ", HLLib.hlItemGetName(pItem)); + ProgressStart(); + } + + eValidation = HLLib.hlFileGetValidation(pItem); + + if(bSilent) + { + switch(eValidation) + { + case HLLib.HLValidation.HL_VALIDATES_INCOMPLETE: + case HLLib.HLValidation.HL_VALIDATES_CORRUPT: + Console.WriteLine(" Validating {0}: {1}", GetPath(pItem), GetValidation(eValidation)); + break; + } + } + else + { + Console.WriteLine(GetValidation(eValidation)); + } + break; + } + + return eValidation; + } + + private static void EnterConsole(uint uiPackage, List Commands) + { + IntPtr pItem = HLLib.hlPackageGetRoot(); + + while(true) + { + string sLine; + if(Commands.Count > 0) + { + sLine = Commands[0].Trim(); + + Console.WriteLine("{0}>{1}", HLLib.hlItemGetName(pItem), sLine); + Commands.RemoveAt(0); + } + else + { + // Command prompt. + Console.Write("{0}>", HLLib.hlItemGetName(pItem)); + + // Get and parse line. + sLine = Console.ReadLine().Trim(); + } + if(sLine == null) + { + break; + } + + int iIndex; + for(iIndex = 0; iIndex < sLine.Length; iIndex++) + { + if(!Char.IsLetter(sLine[iIndex])) + { + break; + } + } + + string sCommand, sArgument; + if(iIndex == sLine.Length) + { + sCommand = sLine; + sArgument = string.Empty; + } + else + { + sCommand = sLine.Substring(0, iIndex).TrimEnd(); + sArgument = sLine.Substring(iIndex).TrimStart(); + } + + // Cycle through commands. + + // + // Directory listing. + // Good example of CDirectoryItem::GetType(). + // + if(String.Equals(sCommand, "dir", StringComparison.CurrentCultureIgnoreCase)) + { + uint uiItemCount = HLLib.hlFolderGetCount(pItem); + uint uiFolderCount = 0, uiFileCount = 0; + + Console.WriteLine("Directory of {0}:", GetPath(pItem)); + + Console.WriteLine(); + + if(sArgument.Length == 0) + { + // List all items in the current folder. + for(uint i = 0; i < uiItemCount; i++) + { + IntPtr pSubItem = HLLib.hlFolderGetItem(pItem, i); + if(HLLib.hlItemGetType(pSubItem) == HLLib.HLDirectoryItemType.HL_ITEM_FOLDER) + { + uiFolderCount++; + Console.WriteLine(" <{0}>", HLLib.hlItemGetName(pSubItem)); + } + else if(HLLib.hlItemGetType(pSubItem) == HLLib.HLDirectoryItemType.HL_ITEM_FILE) + { + uiFileCount++; + Console.WriteLine(" {0}", HLLib.hlItemGetName(pSubItem)); + } + } + } + else + { + IntPtr pSubItem = HLLib.hlFolderFindFirst(pItem, sArgument, HLLib.HLFindType.HL_FIND_ALL | HLLib.HLFindType.HL_FIND_NO_RECURSE); + while(pSubItem != IntPtr.Zero) + { + if(HLLib.hlItemGetType(pSubItem) == HLLib.HLDirectoryItemType.HL_ITEM_FOLDER) + { + uiFolderCount++; + Console.WriteLine(" <{0}>", HLLib.hlItemGetName(pSubItem)); + } + else if(HLLib.hlItemGetType(pSubItem) == HLLib.HLDirectoryItemType.HL_ITEM_FILE) + { + uiFileCount++; + Console.WriteLine(" {0}", HLLib.hlItemGetName(pSubItem)); + } + + pSubItem = HLLib.hlFolderFindNext(pItem, pSubItem, sArgument, HLLib.HLFindType.HL_FIND_ALL | HLLib.HLFindType.HL_FIND_NO_RECURSE); + } + } + + Console.WriteLine(); + + // Could also have used hlFolderGetFolderCount() and + // hlFolderGetFileCount(). + + Console.WriteLine("Summary:"); + Console.WriteLine(); + Console.WriteLine(" {0} Folder{1}.", uiFolderCount, uiFolderCount != 1 ? "s" : ""); + Console.WriteLine(" {0} File{1}.", uiFileCount, uiFileCount != 1 ? "s" : ""); + Console.WriteLine(); + } + // + // Change directory. + // Good example of CDirectoryFolder::GetParent() and item casting. + // + else if(String.Equals(sCommand, "cd", StringComparison.CurrentCultureIgnoreCase)) + { + if(sArgument.Length == 0) + { + Console.WriteLine("No argument for command cd supplied."); + } + else + { + if(String.Equals(sArgument, ".", StringComparison.CurrentCultureIgnoreCase)) + { + + } + else if(String.Equals(sArgument, "..", StringComparison.CurrentCultureIgnoreCase)) + { + if(HLLib.hlItemGetParent(pItem) != IntPtr.Zero) + { + pItem = HLLib.hlItemGetParent(pItem); + } + else + { + Console.WriteLine("Folder does not have a parent."); + } + } + else + { + bool bFound = false; + uint uiItemCount = HLLib.hlFolderGetCount(pItem); + for(uint i = 0; i < uiItemCount; i++) + { + IntPtr pSubItem = HLLib.hlFolderGetItem(pItem, i); + if(HLLib.hlItemGetType(pSubItem) == HLLib.HLDirectoryItemType.HL_ITEM_FOLDER && String.Equals(sArgument, HLLib.hlItemGetName(pSubItem), StringComparison.CurrentCultureIgnoreCase)) + { + bFound = true; + pItem = pSubItem; + break; + } + } + + if(!bFound) + { + Console.WriteLine("{0} not found.", sArgument); + } + } + } + } + // + // Go to the root folder. + // + else if(String.Equals(sCommand, "root", StringComparison.CurrentCultureIgnoreCase)) + { + pItem = HLLib.hlPackageGetRoot(); + } + // + // Item information. + // Good example of CPackageUtility helper functions. + // + else if(String.Equals(sCommand, "info", StringComparison.CurrentCultureIgnoreCase)) + { + if(sArgument.Length == 0) + { + Console.WriteLine("No argument for command info supplied."); + } + else + { + IntPtr pSubItem = HLLib.hlFolderGetItemByPath(pItem, sArgument, HLLib.HLFindType.HL_FIND_ALL); + + if(pSubItem != IntPtr.Zero) + { + Console.WriteLine("Information for {0}:", GetPath(pSubItem)); + Console.WriteLine(); + + switch(HLLib.hlItemGetType(pSubItem)) + { + case HLLib.HLDirectoryItemType.HL_ITEM_FOLDER: + Console.WriteLine(" Type: Folder"); + Console.WriteLine(" Size: {0} B", HLLib.hlFolderGetSizeEx(pSubItem, true)); + Console.WriteLine(" Size On Disk: {0} B", HLLib.hlFolderGetSizeOnDiskEx(pSubItem, true)); + Console.WriteLine(" Folders: {0}", HLLib.hlFolderGetFolderCount(pSubItem, true)); + Console.WriteLine(" Files: {0}", HLLib.hlFolderGetFileCount(pSubItem, true)); + break; + case HLLib.HLDirectoryItemType.HL_ITEM_FILE: + Console.WriteLine(" Type: File"); + Console.WriteLine(" Extractable: {0}", HLLib.hlFileGetExtractable(pSubItem) != 0 ? "True" : "False"); + //Console.WriteLine(" Validates: {0}", HLLib.hlFileGetValidates(pSubItem) ? "True" : "False"); + Console.WriteLine(" Size: {0} B", HLLib.hlFileGetSize(pSubItem)); + Console.WriteLine(" Size On Disk: {0} B", HLLib.hlFileGetSizeOnDisk(pSubItem)); + break; + } + + uint uiAttributeCount = HLLib.hlPackageGetItemAttributeCount(); + for(uint i = 0; i < uiAttributeCount; i++) + { + HLLib.HLAttribute Attribute; + if(HLLib.hlPackageGetItemAttribute(pSubItem, (HLLib.HLPackageAttribute)i, out Attribute)) + { + if(Attribute.eAttributeType != HLLib.HLAttributeType.HL_ATTRIBUTE_INVALID) + { + Console.WriteLine(" {0}: {1}", Attribute.GetName(), Attribute.ToString()); + } + } + } + + Console.WriteLine(); + } + else + { + Console.WriteLine("{0} not found.", sArgument); + } + } + } + // + // Extract item. + // Good example of CPackageUtility extract functions. + // + else if(String.Equals(sCommand, "extract", StringComparison.CurrentCultureIgnoreCase)) + { + if(sArgument.Length == 0) + { + Console.WriteLine("No argument for command extract supplied."); + } + else + { + IntPtr pSubItem; + if(String.Equals(sArgument, ".", StringComparison.CurrentCultureIgnoreCase)) + { + pSubItem = pItem; + } + else + { + pSubItem = HLLib.hlFolderGetItemByName(pItem, sArgument, HLLib.HLFindType.HL_FIND_ALL); + } + + if(pSubItem != IntPtr.Zero) + { + // Extract the item. + // Item is extracted to cDestination\Item->GetName(). + if(!bSilent) + { + Console.WriteLine("Extracting {0}...", HLLib.hlItemGetName(pSubItem)); + Console.WriteLine(); + } + + HLLib.hlItemExtract(pSubItem, sDestination); + + if(!bSilent) + { + Console.WriteLine(""); + Console.WriteLine("Done."); + } + } + else + { + Console.WriteLine("{0} not found.", sArgument); + } + } + } + // + // Validate item. + // Validates the checksums of each item. + // + else if(String.Equals(sCommand, "validate", StringComparison.CurrentCultureIgnoreCase)) + { + if(sArgument.Length == 0) + { + Console.WriteLine("No argument for command extract supplied."); + } + else + { + IntPtr pSubItem; + if(String.Equals(sArgument, ".", StringComparison.CurrentCultureIgnoreCase)) + { + pSubItem = pItem; + } + else + { + pSubItem = HLLib.hlFolderGetItemByName(pItem, sArgument, HLLib.HLFindType.HL_FIND_ALL); + } + + if(pSubItem != IntPtr.Zero) + { + if(!bSilent) + { + Console.WriteLine("Validating {0}...", HLLib.hlItemGetName(pSubItem)); + Console.WriteLine(); + } + + Validate(pSubItem); + + if(!bSilent) + { + Console.WriteLine(); + Console.WriteLine("Done."); + } + } + else + { + Console.WriteLine("{0} not found.", sArgument); + } + } + } + // + // Defragment package. + // Validates the checksums of each item. + // + else if(String.Equals(sCommand, "defragment", StringComparison.CurrentCultureIgnoreCase)) + { + bool bForceDefragment = false; + if(sArgument.Length != 0) + { + try + { + bForceDefragment = Convert.ToBoolean(sArgument); + } + catch + { + } + } + + if(!bSilent) + { + Console.WriteLine("Defragmenting..."); + Console.WriteLine(); + } + + HLLib.hlSetBoolean(HLLib.HLOption.HL_FORCE_DEFRAGMENT, bForceDefragment); + + Console.Write(" Progress: "); + ProgressStart(); + if(!HLLib.hlPackageDefragment()) + { + Console.Write(" {0}", HLLib.hlGetString(HLLib.HLOption.HL_ERROR_SHORT_FORMATED)); + } + + if(!bSilent) + { + Console.WriteLine(); + + Console.WriteLine(); + Console.WriteLine("Done."); + } + } + // + // Find items. + // Good example of recursive directory navigation (Search() function). + // + else if(String.Equals(sCommand, "find", StringComparison.CurrentCultureIgnoreCase)) + { + if(sArgument.Length == 0) + { + Console.WriteLine("No argument for command find supplied."); + } + else + { + // Search for the requested items. + if(!bSilent) + { + Console.WriteLine("Searching for {0}...", sArgument); + Console.WriteLine(); + } + + uint uiFolderCount = 0, uiFileCount = 0; + IntPtr pSubItem = HLLib.hlFolderFindFirst(pItem, sArgument, HLLib.HLFindType.HL_FIND_ALL); + while(pSubItem != IntPtr.Zero) + { + switch(HLLib.hlItemGetType(pSubItem)) + { + case HLLib.HLDirectoryItemType.HL_ITEM_FOLDER: + uiFolderCount++; + + Console.WriteLine(" Found folder: {0}", GetPath(pSubItem)); + break; + case HLLib.HLDirectoryItemType.HL_ITEM_FILE: + uiFileCount++; + + Console.WriteLine(" Found file: {0}", GetPath(pSubItem)); + break; + } + + pSubItem = HLLib.hlFolderFindNext(pItem, pSubItem, sArgument, HLLib.HLFindType.HL_FIND_ALL); + } + + if(!bSilent) + { + if(uiFolderCount != 0 || uiFileCount != 0) + { + Console.WriteLine(); + } + + Console.WriteLine(" {0} folder{1} and {2} file{3} found.", uiFolderCount, uiFolderCount != 1 ? "s" : "", uiFileCount, uiFileCount != 1 ? "s" : ""); + Console.WriteLine(); + } + } + } + // + // Type files. + // Good example of reading files into memory. + // + else if(String.Equals(sCommand, "type", StringComparison.CurrentCultureIgnoreCase)) + { + if(sArgument.Length == 0) + { + Console.WriteLine("No argument for command type supplied."); + } + else + { + IntPtr pSubItem = HLLib.hlFolderGetItemByName(pItem, sArgument, HLLib.HLFindType.HL_FIND_FILES); + + if(pSubItem != IntPtr.Zero) + { + if(!bSilent) + { + Console.WriteLine("Type for {0}:", GetPath(pSubItem)); + Console.WriteLine(); + } + + IntPtr pStream; + if(HLLib.hlFileCreateStream(pSubItem, out pStream)) + { + if(HLLib.hlStreamOpen(pStream, (uint)HLLib.HLFileMode.HL_MODE_READ)) + { + char iChar; + while(HLLib.hlStreamReadChar(pStream, out iChar)) + { + if((iChar >= ' ' && iChar <= '~') || iChar == '\n' || iChar == '\t') + { + Console.Write(iChar); + } + } + + HLLib.hlStreamClose(pStream); + } + else + { + Console.WriteLine("Error typing {0}:", HLLib.hlItemGetName(pSubItem)); + Console.WriteLine(HLLib.hlGetString(HLLib.HLOption.HL_ERROR_SHORT_FORMATED)); + } + + HLLib.hlFileReleaseStream(pSubItem, pStream); + } + else + { + Console.WriteLine("Error typing {0}:", HLLib.hlItemGetName(pSubItem)); + Console.WriteLine(HLLib.hlGetString(HLLib.HLOption.HL_ERROR_SHORT_FORMATED)); + } + + if(!bSilent) + { + Console.WriteLine(); + Console.WriteLine("Done."); + } + } + else + { + Console.WriteLine("{0} not found.", sArgument); + } + } + } + // + // Open item. + // Good example of opening packages inside packages. + // + else if(String.Equals(sCommand, "open", StringComparison.CurrentCultureIgnoreCase)) + { + if(sArgument.Length == 0) + { + Console.WriteLine("No argument for command open supplied."); + } + else + { + IntPtr pSubItem = HLLib.hlFolderGetItemByName(pItem, sArgument, HLLib.HLFindType.HL_FIND_FILES); + + if(pSubItem != IntPtr.Zero) + { + IntPtr pStream; + if(HLLib.hlFileCreateStream(pSubItem, out pStream)) + { + if(HLLib.hlStreamOpen(pStream, (uint)HLLib.HLFileMode.HL_MODE_READ)) + { + HLLib.HLPackageType ePackageType = HLLib.hlGetPackageTypeFromStream(pStream); + + uint uiSubPackage; + if(HLLib.hlCreatePackage(ePackageType, out uiSubPackage)) + { + HLLib.hlBindPackage(uiSubPackage); + if(HLLib.hlPackageOpenStream(pStream, (uint)HLLib.HLFileMode.HL_MODE_READ)) + { + if(!bSilent) + Console.WriteLine("{0} opened.", HLLib.hlItemGetName(pSubItem)); + + EnterConsole(uiSubPackage, Commands); + + HLLib.hlPackageClose(); + + if(!bSilent) + Console.WriteLine("{0} closed.", HLLib.hlItemGetName(pSubItem)); + } + else + { + Console.WriteLine("Error opening {0}:", HLLib.hlItemGetName(pSubItem)); + Console.WriteLine(HLLib.hlGetString(HLLib.HLOption.HL_ERROR_SHORT_FORMATED)); + } + + HLLib.hlDeletePackage(uiSubPackage); + + HLLib.hlBindPackage(uiPackage); + } + else + { + Console.WriteLine("Error opening {0}:", HLLib.hlItemGetName(pSubItem)); + Console.WriteLine(HLLib.hlGetString(HLLib.HLOption.HL_ERROR_SHORT_FORMATED)); + } + + HLLib.hlStreamClose(pStream); + } + else + { + Console.WriteLine("Error opening {0}:", HLLib.hlItemGetName(pSubItem)); + Console.WriteLine(HLLib.hlGetString(HLLib.HLOption.HL_ERROR_SHORT_FORMATED)); + } + + HLLib.hlFileReleaseStream(pSubItem, pStream); + } + else + { + Console.WriteLine("Error opening {0}:", HLLib.hlItemGetName(pSubItem)); + Console.WriteLine(HLLib.hlGetString(HLLib.HLOption.HL_ERROR_SHORT_FORMATED)); + } + } + else + { + Console.WriteLine("{0} not found.", sArgument); + } + } + } + // + // Clear screen. + // + else if(String.Equals(sCommand, "status", StringComparison.CurrentCultureIgnoreCase)) + { + Console.WriteLine("Total size: {0} B", HLLib.hlGetUnsignedLong(HLLib.HLOption.HL_PACKAGE_SIZE)); + Console.WriteLine("Total mapping allocations: {0}", HLLib.hlGetUnsignedInteger(HLLib.HLOption.HL_PACKAGE_TOTAL_ALLOCATIONS)); + Console.WriteLine("Total mapping memory allocated: {0} B", HLLib.hlGetUnsignedLong(HLLib.HLOption.HL_PACKAGE_TOTAL_MEMORY_ALLOCATED)); + Console.WriteLine("Total mapping memory used: {0} B", HLLib.hlGetUnsignedLong(HLLib.HLOption.HL_PACKAGE_TOTAL_MEMORY_USED)); + + uint uiAttributeCount = HLLib.hlPackageGetAttributeCount(); + for(uint i = 0; i < uiAttributeCount; i++) + { + HLLib.HLAttribute Attribute; + if(HLLib.hlPackageGetAttribute((HLLib.HLPackageAttribute)i, out Attribute)) + { + if(Attribute.eAttributeType != HLLib.HLAttributeType.HL_ATTRIBUTE_INVALID) + { + Console.WriteLine("{0}: {1}", Attribute.GetName(), Attribute.ToString()); + } + } + } + } + else if(String.Equals(sCommand, "exec", StringComparison.CurrentCultureIgnoreCase) || String.Equals(sCommand, "execute", StringComparison.CurrentCultureIgnoreCase)) + { + if(sArgument.Length == 0) + { + Console.WriteLine("No argument for command open supplied."); + } + else + { + string[] NewCommands = sArgument.Split(new char[] { '|' }); + Commands.AddRange(NewCommands); + } + } + else if(String.Equals(sCommand, "cls", StringComparison.CurrentCultureIgnoreCase)) + { + try + { + Console.Clear(); + } + catch + { + } + } + else if(String.Equals(sCommand, "help", StringComparison.CurrentCultureIgnoreCase)) + { + Console.WriteLine("Valid commands:"); + Console.WriteLine(); + Console.WriteLine("dir (Directory list.)"); + Console.WriteLine("cd (Change directroy.)"); + Console.WriteLine("info (Item information.)"); + Console.WriteLine("extract (Extract item.)"); + Console.WriteLine("validate (Validate item.)"); + Console.WriteLine("defragment [force] (Defragment package.)"); + Console.WriteLine("find (Find item.)"); + Console.WriteLine("type (Type a file.)"); + Console.WriteLine("open (Open a nested package.)"); + Console.WriteLine("root (Go to the root folder.)"); + Console.WriteLine("status (Package information.)"); + Console.WriteLine("execute |... (Execute 1 or more pipe delimited commands.)"); + Console.WriteLine("cls (Clear the screen.)"); + Console.WriteLine("help (Program help.)"); + Console.WriteLine("exit (Quit program.)"); + Console.WriteLine(); + } + else if(String.Equals(sCommand, "exit", StringComparison.CurrentCultureIgnoreCase)) + { + break; + } + else + { + Console.WriteLine("Unkown command: {0}", sCommand); + } + } + } + + #endregion } }