File: UMXTools.h

package info (click to toggle)
libopenmpt 0.8.4-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 9,844 kB
  • sloc: cpp: 129,441; sh: 4,695; ansic: 1,107; makefile: 712
file content (72 lines) | stat: -rw-r--r-- 2,180 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
/*
 * UMXTools.h
 * ------------
 * Purpose: UMX/UAX (Unreal) helper functions
 * Notes  : (currently none)
 * Authors: OpenMPT Devs (inspired by code from http://wiki.beyondunreal.com/Legacy:Package_File_Format)
 * The OpenMPT source code is released under the BSD license. Read LICENSE for more details.
 */


#pragma once

#include "openmpt/all/BuildSettings.hpp"
#include "Sndfile.h"


OPENMPT_NAMESPACE_BEGIN

namespace UMX
{

// UMX File Header
struct FileHeader
{
	char magic[4];  // C1 83 2A 9E
	uint16le packageVersion;
	uint16le licenseMode;
	uint32le flags;
	uint32le nameCount;
	uint32le nameOffset;
	uint32le exportCount;
	uint32le exportOffset;
	uint32le importCount;
	uint32le importOffset;

	bool IsValid() const;
	uint32 GetMinimumAdditionalFileSize() const;
};

MPT_BINARY_STRUCT(FileHeader, 36)


// Check validity of file header
CSoundFile::ProbeResult ProbeFileHeader(MemoryFileReader file, const uint64* pfilesize, const char *requiredType);

// Read compressed unreal integers - similar to MIDI integers, but signed values are possible.
int32 ReadIndex(FileReader &chunk);

// Returns true if the given nme exists in the name table.
bool FindNameTableEntry(FileReader &file, const FileHeader &fileHeader, const char *name);

// Returns true if the given nme exists in the name table.
bool FindNameTableEntryMemory(MemoryFileReader &file, const FileHeader &fileHeader, const char *name);

// Read an entry from the name table.
std::string ReadNameTableEntry(FileReader &chunk, uint16 packageVersion);

// Read complete name table.
std::vector<std::string> ReadNameTable(FileReader &file, const FileHeader &fileHeader);

// Read import table.
std::vector<int32> ReadImportTable(FileReader &file, const FileHeader &fileHeader, const std::vector<std::string> &names);

// Read an entry from the import table.
int32 ReadImportTableEntry(FileReader &chunk, uint16 packageVersion);

// Read an entry from the export table.
std::pair<FileReader, int32> ReadExportTableEntry(FileReader &file, const FileHeader &fileHeader, const std::vector<int32> &classes, const std::vector<std::string> &names, const char *filterType);

}  // namespace UMX

OPENMPT_NAMESPACE_END