libclod
C library for interacting with NBTs, region files, LOD data and other things.
Loading...
Searching...
No Matches
header.c
1#include "format.h"
2#include "endian_big.h"
3#include <string.h>
4
5#define TABLE_SIZE 4192u
6#define TABLE_ELEMS 1024u
7
8#define SHADOW_TABLE_OFF(index) ((index) * 4u)
9#define SHADOW_TABLE_SIZE TABLE_SIZE
10#define MTIME_TABLE_OFF(index) (4192u + (index) * 4u)
11#define MTIME_TABLE_SIZE TABLE_SIZE
12#define MAGIC_OFF 8192u
13#define MAGIC_SIZE 128u
14#define CHUNK_PREFIX_OFF 8320u
15#define CHUNK_PREFIX_SIZE 31u
16#define CHUNK_EXTENSION_OFF 8351u
17#define CHUNK_EXTENSION_SIZE 11u
18#define SECTOR_SIZE_OFF 8364u
19#define FILE_LOCK_OFF 8368u
20#define FILE_SIZE_OFF 8372u
21#define CHECKPOINT_CRC_OFF 8376u
22#define SHADOWED_SECTORS_OFF 8380u
23#define LOCK_TABLE_OFF(index) (12288u + (index) * 4u)
24#define LOCK_TABLE_SIZE TABLE_SIZE
25#define CHECKPOINT_TABLE_OFF(index) (16384u + (index) * 4u)
26#define CHECKPOINT_TABLE_SIZE TABLE_SIZE
27
28void magic_set(struct clod_rfmt *rfmt, const char *magic) {
29 strncpy((char*)rfmt->data + MAGIC_OFF, magic, MAGIC_SIZE);
30 ((char*)rfmt->data)[MAGIC_OFF + MAGIC_SIZE - 1] = '\0';
31}
32
33void magic_get(struct clod_rfmt *rfmt, char magic[MAGIC_SIZE]) {
34 strncpy(magic, (char*)rfmt->data + MAGIC_OFF, MAGIC_SIZE);
35 magic[MAGIC_SIZE - 1] = '\0';
36}
37
38void chunk_prefix_set(struct clod_rfmt *rfmt, const char *prefix) {
39 strncpy((char*)rfmt->data + CHUNK_PREFIX_OFF, prefix, CHUNK_PREFIX_SIZE);
40 ((char*)rfmt->data)[CHUNK_PREFIX_OFF + CHUNK_PREFIX_SIZE - 1] = '\0';
41}
42
43void chunk_prefix_get(const struct clod_rfmt *rfmt, char prefix[CHUNK_PREFIX_SIZE]) {
44 strncpy(prefix, (char*)rfmt->data + CHUNK_PREFIX_OFF, CHUNK_PREFIX_SIZE);
45 prefix[CHUNK_PREFIX_SIZE - 1] = '\0';
46}
47
48void chunk_extension_set(struct clod_rfmt *rfmt, const char *extension) {
49 strncpy((char*)rfmt->data + CHUNK_EXTENSION_OFF, extension, CHUNK_EXTENSION_SIZE);
50 ((char*)rfmt->data)[CHUNK_EXTENSION_OFF + CHUNK_EXTENSION_SIZE - 1] = '\0';
51}
52
53void chunk_extension_get(const struct clod_rfmt *rfmt, char extension[CHUNK_EXTENSION_SIZE]) {
54 strncpy(extension, (char*)rfmt->data + CHUNK_EXTENSION_OFF, CHUNK_EXTENSION_SIZE);
55 extension[CHUNK_EXTENSION_SIZE - 1] = '\0';
56}
57
58void sector_size_set(struct clod_rfmt *rfmt, uint32_t sector_size) {
59 beu32_enc(rfmt->data + SECTOR_SIZE_OFF, sector_size);
60}
61
62uint32_t sector_size_get(const struct clod_rfmt *rfmt) {
63 return beu32_dec(rfmt->data + SECTOR_SIZE_OFF);
64}
65
66
Sized string helpers.