MCPcopy Create free account
hub / github.com/diasurgical/devilution / CreateBetHeader

Function CreateBetHeader

3rdParty/StormLib/src/SBaseFileTable.cpp:1469–1556  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1467// Support for BET table
1468
1469static void CreateBetHeader(
1470 TMPQArchive * ha,
1471 TMPQBetHeader * pBetHeader)
1472{
1473 TFileEntry * pFileTableEnd = ha->pFileTable + ha->dwFileTableSize;
1474 TFileEntry * pFileEntry;
1475 ULONGLONG MaxByteOffset = 0;
1476 DWORD FlagArray[MAX_FLAG_INDEX];
1477 DWORD dwMaxFlagIndex = 0;
1478 DWORD dwMaxFileSize = 0;
1479 DWORD dwMaxCmpSize = 0;
1480 DWORD dwFlagIndex;
1481
1482 // Initialize array of flag combinations
1483 InitFileFlagArray(FlagArray);
1484
1485 // Fill the common header
1486 pBetHeader->ExtHdr.dwSignature = BET_TABLE_SIGNATURE;
1487 pBetHeader->ExtHdr.dwVersion = 1;
1488 pBetHeader->ExtHdr.dwDataSize = 0;
1489
1490 // Get the maximum values for the BET table
1491 pFileTableEnd = ha->pFileTable + ha->pHeader->dwBlockTableSize;
1492 for(pFileEntry = ha->pFileTable; pFileEntry < pFileTableEnd; pFileEntry++)
1493 {
1494 //
1495 // Note: Deleted files must be counted as well
1496 //
1497
1498 // Highest file position in the MPQ
1499 if(pFileEntry->ByteOffset > MaxByteOffset)
1500 MaxByteOffset = pFileEntry->ByteOffset;
1501
1502 // Biggest file size
1503 if(pFileEntry->dwFileSize > dwMaxFileSize)
1504 dwMaxFileSize = pFileEntry->dwFileSize;
1505
1506 // Biggest compressed size
1507 if(pFileEntry->dwCmpSize > dwMaxCmpSize)
1508 dwMaxCmpSize = pFileEntry->dwCmpSize;
1509
1510 // Check if this flag was there before
1511 dwFlagIndex = GetFileFlagIndex(FlagArray, pFileEntry->dwFlags);
1512 if(dwFlagIndex > dwMaxFlagIndex)
1513 dwMaxFlagIndex = dwFlagIndex;
1514 }
1515
1516 // Now save bit count for every piece of file information
1517 pBetHeader->dwBitIndex_FilePos = 0;
1518 pBetHeader->dwBitCount_FilePos = GetNecessaryBitCount(MaxByteOffset);
1519
1520 pBetHeader->dwBitIndex_FileSize = pBetHeader->dwBitIndex_FilePos + pBetHeader->dwBitCount_FilePos;
1521 pBetHeader->dwBitCount_FileSize = GetNecessaryBitCount(dwMaxFileSize);
1522
1523 pBetHeader->dwBitIndex_CmpSize = pBetHeader->dwBitIndex_FileSize + pBetHeader->dwBitCount_FileSize;
1524 pBetHeader->dwBitCount_CmpSize = GetNecessaryBitCount(dwMaxCmpSize);
1525
1526 pBetHeader->dwBitIndex_FlagIndex = pBetHeader->dwBitIndex_CmpSize + pBetHeader->dwBitCount_CmpSize;

Callers 1

TranslateBetTableFunction · 0.85

Calls 3

InitFileFlagArrayFunction · 0.85
GetFileFlagIndexFunction · 0.85
GetNecessaryBitCountFunction · 0.85

Tested by

no test coverage detected