Files
SabreTools/SabreTools.Library/Data/Flags.cs
2017-05-04 02:41:11 -07:00

321 lines
7.5 KiB
C#

using System;
namespace SabreTools.Library.Data
{
#region Archival
/// <summary>
/// Determines the level to scan archives at
/// </summary>
[Flags]
public enum ArchiveScanLevel
{
// 7zip
SevenZipExternal = 0x00001,
SevenZipInternal = 0x00002,
SevenZipBoth = SevenZipExternal | SevenZipInternal,
// GZip
GZipExternal = 0x00010,
GZipInternal = 0x00020,
GZipBoth = GZipExternal | GZipInternal,
// RAR
RarExternal = 0x00100,
RarInternal = 0x00200,
RarBoth = RarExternal | RarInternal,
// Zip
ZipExternal = 0x01000,
ZipInternal = 0x02000,
ZipBoth = ZipExternal | ZipInternal,
// Tar
TarExternal = 0x10000,
TarInternal = 0x20000,
TarBoth = TarExternal | TarInternal,
}
/// <summary>
/// Determines the archive general bit flags
/// </summary>
[Flags]
public enum GeneralPurposeBitFlag : ushort
{
Encrypted = 0x0001,
ZeroedCRCAndSize = 0x0008,
CompressedPatchedData = 0x0020,
StrongEncryption = 0x0040,
LanguageEncodingFlag = 0x0800,
EncryptedCentralDirectory = 0x2000,
// For Method 6 - Imploding
Imploding8KSlidingDictionary = 0x0002,
Imploding3ShannonFanoTrees = 0x0004,
// For Methods 8 and 9 - Deflating
DeflatingMaximumCompression = 0x0002,
DeflatingFastCompression = 0x0004,
DeflatingSuperFastCompression = 0x0006,
EnhancedDeflating = 0x0010,
// For Method 14 - LZMA
LZMAEOSMarkerUsed = 0x0002,
// Reserved and unused (SHOULD NOT BE USED)
Bit7 = 0x0080,
Bit8 = 0x0100,
Bit9 = 0x0200,
Bit10 = 0x0400,
Bit12 = 0x1000, // Reserved by PKWARE for enhanced compression
Bit14 = 0x4000, // Reserved by PKWARE
Bit15 = 0x8000, // Reserved by PKWARE
}
/// <summary>
/// Internal file attributes used by archives
/// </summary>
[Flags]
public enum InternalFileAttributes : ushort
{
ASCIIOrTextFile = 0x0001,
RecordLengthControl = 0x0002,
// Reserved and unused (SHOULD NOT BE USED)
Bit1 = 0x0002,
Bit2 = 0x0004,
}
/// <summary>
/// RAR archive flags
/// </summary>
[Flags]
public enum RarArchiveFlags : uint
{
Volume = 0x0001, // Volume. Archive is a part of multivolume set.
VolumeNumberField = 0x0002, // Volume number field is present. This flag is present in all volumes except first.
Solid = 0x0004, // Solid archive.
RecoveryRecordPresent = 0x0008, // Recovery record is present.
Locked = 0x0010, // Locked archive.
}
/// <summary>
/// RAR entry encryption flags
/// </summary>
[Flags]
public enum RarEncryptionFlags : uint
{
PasswordCheckDataPresent = 0x0001,
UseTweakedChecksums = 0x0002,
/*
If flag 0x0002 is present, RAR transforms the checksum preserving file or service data integrity, so it becomes dependent on
encryption key. It makes guessing file contents based on checksum impossible. It affects both data CRC32 in file header and
checksums in file hash record in extra area.
*/
}
/// <summary>
/// RAR file flags
/// </summary>
[Flags]
public enum RarFileFlags : uint
{
Directory = 0x0001, // Directory file system object (file header only)
TimeInUnix = 0x0002, // Time field in Unix format is present
CRCPresent = 0x0004, // CRC32 field is present
UnpackedSizeUnknown = 0x0008, // Unpacked size is unknown
/*
If flag 0x0008 is set, unpacked size field is still present, but must be ignored and extraction
must be performed until reaching the end of compression stream. This flag can be set if actual
file size is larger than reported by OS or if file size is unknown such as for all volumes except
last when archiving from stdin to multivolume archive
*/
}
/// <summary>
/// RAR header flags
/// </summary>
[Flags]
public enum RarHeaderFlags : uint
{
ExtraAreaPresent = 0x0001, // Extra area is present in the end of header
DataAreaPresent = 0x0002, // Data area is present in the end of header
BlocksWithUnknownType = 0x0004, // Blocks with unknown type and this flag must be skipped when updating an archive
DataAreaContinuingFromPrevious = 0x0008, // Data area is continuing from previous volume
DataAreaContinuingToNext = 0x0010, // Data area is continuing in next volume
BlockDependsOnPreceding = 0x0020, // Block depends on preceding file block
PreserveChildBlock = 0x0040, // Preserve a child block if host block is modified
}
[Flags]
public enum RarUnixOwnerRecordFlags : uint
{
UserNameStringIsPresent = 0x0001,
GroupNameStringIsPresent = 0x0002,
NumericUserIdIsPresent = 0x0004,
NumericGroupIdIsPresent = 0x0008,
}
/// <summary>
/// RAR entry time flags
/// </summary>
[Flags]
public enum RarTimeFlags : uint
{
TimeInUnixFormat = 0x0001,
ModificationTimePresent = 0x0002,
CreationTimePresent = 0x0004,
LastAccessTimePresent = 0x0008,
}
/// <summary>
/// Zipfile special status
/// </summary>
/// <remarks>https://github.com/gjefferyes/RomVault/blob/5a93500001f0d068f32cf77a048950717507f733/ROMVault2/SupportedFiles/ZipEnums.cs</remarks>
[Flags]
public enum ZipStatus
{
None = 0x0,
TorrentZip = 0x1,
ExtraData = 0x2
}
#endregion
#region DatFile related
/// <summary>
/// Determines the DAT output format
/// </summary>
[Flags]
public enum DatFormat
{
// XML Formats
Logiqx = 0x01,
SoftwareList = Logiqx << 1,
OfflineList = SoftwareList << 1,
SabreDat = OfflineList << 1,
// Propietary Formats
ClrMamePro = SabreDat << 1,
RomCenter = ClrMamePro << 1,
DOSCenter = RomCenter << 1,
AttractMode = DOSCenter << 1,
// Standardized Text Formats
MissFile = AttractMode << 1,
CSV = MissFile << 1,
TSV = CSV << 1,
// SFV-similar Formats
RedumpSFV = TSV << 1,
RedumpMD5 = RedumpSFV << 1,
RedumpSHA1 = RedumpMD5 << 1,
RedumpSHA256 = RedumpSHA1 << 1,
RedumpSHA384 = RedumpSHA256 << 1,
RedumpSHA512 = RedumpSHA384 << 1,
// Specialty combinations
ALL = 0xFFFFF,
}
/// <summary>
/// Determines which diffs should be created
/// </summary>
[Flags]
public enum DiffMode
{
// Standard diffs
Dupes = 0x01,
NoDupes = Dupes << 1,
Individuals = NoDupes << 1,
All = Dupes | NoDupes | Individuals,
// Cascaded diffs
Cascade = Individuals << 1,
ReverseCascade = Cascade << 1,
}
/// <summary>
/// Determine which format to output Stats to
/// </summary>
/// [Flags]
public enum StatDatFormat
{
None = 0x01,
HTML = None << 1,
CSV = HTML << 1,
TSV = CSV << 1,
}
/// <summary>
/// Determine what hashes to strip from the DAT
/// </summary>
[Flags]
public enum Hash
{
CRC = 0x0001,
MD5 = CRC << 1,
SHA1 = MD5 << 1,
SHA256 = SHA1 << 1,
SHA384 = SHA256 << 1,
SHA512 = SHA384 << 1,
xxHash = SHA512 << 1,
// Special combinations
Standard = CRC | MD5 | SHA1,
DeepHashes = SHA256 | SHA384 | SHA512 | xxHash,
SecureHashes = MD5 | SHA1 | SHA256 | SHA384 | SHA512 | xxHash,
}
#endregion
#region DatItem related
/// <summary>
/// Determines which type of duplicate a file is
/// </summary>
[Flags]
public enum DupeType
{
// Type of match
Hash = 0x01,
All = 0x02,
// Location of match
Internal = 0x10,
External = 0x20,
}
/// <summary>
/// Determine the status of the item
/// </summary>
[Flags]
public enum ItemStatus
{
NULL = 0x00, // This is a fake flag that is used for filter only
None = 0x01,
Good = 0x02,
BadDump = 0x04,
Nodump = 0x08,
Verified = 0x10,
}
/// <summary>
/// Determine what type of machine it is
/// </summary>
[Flags]
public enum MachineType
{
NULL = 0x00, // This is a fake flag used for filter only
None = 0x01,
Bios = 0x02,
Device = 0x04,
Mechanical = 0x08,
}
#endregion
}