fallout2-ce/src/xfile.h

74 lines
1.8 KiB
C
Raw Normal View History

2022-05-19 01:51:26 -07:00
#ifndef XFILE_H
#define XFILE_H
#include <stdio.h>
2022-09-15 02:38:23 -07:00
2022-05-19 01:51:26 -07:00
#include <zlib.h>
2022-09-15 02:38:23 -07:00
#include "dfile.h"
#include "platform_compat.h"
2022-09-23 05:43:44 -07:00
namespace fallout {
2022-05-19 01:51:26 -07:00
typedef enum XFileType {
XFILE_TYPE_FILE,
XFILE_TYPE_DFILE,
XFILE_TYPE_GZFILE,
} XFileType;
// A universal database of files.
typedef struct XBase {
// The path to directory or .DAT file that this xbase represents.
char* path;
// The [DBase] instance that this xbase represents.
DBase* dbase;
// A flag used to denote that this xbase represents .DAT file (true), or
// a directory (false).
//
// NOTE: Original type is 1 byte, likely unsigned char.
bool isDbase;
// Next [XBase] in linked list.
struct XBase* next;
} XBase;
typedef struct XFile {
XFileType type;
union {
FILE* file;
DFile* dfile;
gzFile gzfile;
};
} XFile;
typedef struct XList {
int fileNamesLength;
char** fileNames;
} XList;
int xfileClose(XFile* stream);
XFile* xfileOpen(const char* filename, const char* mode);
int xfilePrintFormatted(XFile* xfile, const char* format, ...);
int xfilePrintFormattedArgs(XFile* stream, const char* format, va_list args);
int xfileReadChar(XFile* stream);
char* xfileReadString(char* string, int size, XFile* stream);
int xfileWriteChar(int ch, XFile* stream);
int xfileWriteString(const char* s, XFile* stream);
size_t xfileRead(void* ptr, size_t size, size_t count, XFile* stream);
size_t xfileWrite(const void* buf, size_t size, size_t count, XFile* stream);
int xfileSeek(XFile* stream, long offset, int origin);
long xfileTell(XFile* stream);
void xfileRewind(XFile* stream);
int xfileEof(XFile* stream);
long xfileGetSize(XFile* stream);
bool xbaseReopenAll(char* paths);
bool xbaseOpen(const char* path);
bool xlistInit(const char* pattern, XList* xlist);
void xlistFree(XList* xlist);
2022-09-23 05:43:44 -07:00
} // namespace fallout
2022-05-19 01:51:26 -07:00
#endif /* XFILE_H */