Gears-C/src/packer.h
2025-04-14 16:37:47 +10:00

105 lines
2.1 KiB
C

#pragma once
// ::Packer::Includes::Header::
#if __linux__
# define _GNU_SOURCE
#elif _WIN32
#endif
#define STG_NO_RENDERER
#define STB_SPRINTF_IMPLEMENTATION
#include "stb/stb_sprintf.h"
#include "xxhash/xxhash.h"
#include "fastlz/fastlz.h"
#include "assets.h"
#include "shared_types.h"
#include "ds.h"
#include "platform/platform.h"
#include "util.h"
#include "allocators.h"
#include "renderer.h"
#include "game.h"
#include <stdio.h>
// ::Packer::Macros::Header::
#define CreateMagicValue(a, b, c, d) ((u32)(d << 24) | (u32)(c << 16) | (u32)(b << 8) | (u32)(a))
#define FWrite(buf, size, count, file) ((size) * (fwrite(buf, size, count, file)))
#define FRead(buf, size, count, file) ((size) * (fread(buf, size, count, file)))
// ::Packer::Defines::Header::
#define FILE_VERSION 0
// ::Packer::Types::Header::
typedef struct AssetTag
{
u32 tag_id;
f32 value;
} AssetTag;
typedef struct AssetFile
{
u64 data_offset;
u64 len;
} AssetFile;
typedef struct AssetHeader
{
AssetTag *tags;
AssetFile *assets;
u32 tag_count;
u32 asset_count;
} AssetHeader;
typedef struct FileHeader
{
u32 magic_num;
u32 version;
u32 tag_counts[ASSET_TYPE_MAX];
u32 asset_counts[ASSET_TYPE_MAX];
u64 tag_offsets[ASSET_TYPE_MAX];
u64 asset_offsets[ASSET_TYPE_MAX];
} FileHeader;
typedef struct FileMapping
{
c8 *file_name;
u32 ix;
} FileMapping;
// ::Packer::Files::Functions::Header::
FILE *OpenFile(c8 *name, c8 *mode);
void CloseFile(FILE *file);
u64 FileLength(FILE *file);
u64 WriteData(void *buf, u64 pos, u64 size, FILE *file);
u64 ReadData(void *buf, u64 pos, u64 size, FILE *file);
// ::Packer::Packing::Functions::Header::
void SetArrayLookups();
void InitHeader(FileHeader *header);
i32 WriteHeader(FILE *file, FileHeader *header);
void PackFiles(Arena *arena, FileHeader *header);
void MoveToTextureDir(c8 **return_dir);
void MoveToShaderDir(c8 **return_dir);
// ::Packer::Tests::Functions::Header::
void TestAssetPack(Arena *arena);
static inline void TestAssetIsCorrect(Arena *arena, c8 *file_name, AssetFile *file_info, FILE *file);
// ::Packer::Main::Functions::Header::
int main(int argc, char **argv);