74 lines
1.7 KiB
C++
74 lines
1.7 KiB
C++
//========= Copyright Valve Corporation, All rights reserved. ============//
|
|
//
|
|
// Purpose:
|
|
//
|
|
//=============================================================================
|
|
|
|
#ifndef CAPTIONCOMPILER_H
|
|
#define CAPTIONCOMPILER_H
|
|
#ifdef _WIN32
|
|
#pragma once
|
|
#endif
|
|
|
|
#include "checksum_crc.h"
|
|
#include "datamap.h"
|
|
|
|
#define MAX_BLOCK_BITS 13
|
|
|
|
#define MAX_BLOCK_SIZE (1 << MAX_BLOCK_BITS)
|
|
|
|
#define COMPILED_CAPTION_FILEID MAKEID('V', 'C', 'C', 'D')
|
|
#define COMPILED_CAPTION_VERSION 1
|
|
|
|
#pragma pack(1)
|
|
struct CompiledCaptionHeader_t {
|
|
DECLARE_BYTESWAP_DATADESC()
|
|
int magic;
|
|
int version;
|
|
int numblocks;
|
|
int blocksize;
|
|
int directorysize;
|
|
int dataoffset;
|
|
};
|
|
|
|
struct CaptionLookup_t {
|
|
DECLARE_BYTESWAP_DATADESC()
|
|
unsigned int hash;
|
|
int blockNum;
|
|
unsigned short offset;
|
|
unsigned short length;
|
|
|
|
void SetHash(char const *string) {
|
|
int len = Q_strlen(string);
|
|
char *tempstr = (char *)_alloca(len + 1);
|
|
Q_strncpy(tempstr, string, len + 1);
|
|
Q_strlower(tempstr);
|
|
CRC32_t temp;
|
|
CRC32_Init(&temp);
|
|
CRC32_ProcessBuffer(&temp, tempstr, len);
|
|
CRC32_Final(&temp);
|
|
|
|
hash = (unsigned int)temp;
|
|
}
|
|
};
|
|
#pragma pack()
|
|
|
|
class CCaptionLookupLess {
|
|
public:
|
|
bool Less(const CaptionLookup_t &lhs, const CaptionLookup_t &rhs,
|
|
void *pContext) {
|
|
return lhs.hash < rhs.hash;
|
|
}
|
|
};
|
|
|
|
struct CaptionBlock_t {
|
|
byte data[MAX_BLOCK_SIZE];
|
|
};
|
|
|
|
// For swapping compiled caption files
|
|
bool SwapClosecaptionFile(void *pData);
|
|
int UpdateOrCreateCaptionFile(const char *pSourceName, char *pTargetName,
|
|
int targetLen, bool bForce = false);
|
|
|
|
#endif // CAPTIONCOMPILER_H
|