From 7d4e4c0b34a613dd3c0220475ae4e448197522c1 Mon Sep 17 00:00:00 2001 From: Treeki Date: Sat, 12 Mar 2011 23:17:12 +0100 Subject: initial commit. now I can start playing with stuff! --- include/rvl/arc.h | 115 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100755 include/rvl/arc.h (limited to 'include/rvl/arc.h') diff --git a/include/rvl/arc.h b/include/rvl/arc.h new file mode 100755 index 0000000..94d5d5b --- /dev/null +++ b/include/rvl/arc.h @@ -0,0 +1,115 @@ +#ifndef __ARC_H__ +#define __ARC_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct +{ + unsigned int magic; + int fstStart; + int fstSize; + int fileStart; + int reserve[4]; + +} ARCHeader; + +#define DARCH_MAGIC 0x55aa382d + +typedef struct +{ + void* archiveStartAddr; + void* FSTStart; + void* fileStart; + u32 entryNum; + char* FSTStringStart; + u32 FSTLength; + u32 currDir; + +} ARCHandle; + +typedef struct +{ + ARCHandle* handle; + u32 startOffset; + u32 length; + +} ARCFileInfo; + +typedef struct +{ + ARCHandle* handle; + u32 entryNum; + u32 location; + u32 next; +} ARCDir; + +typedef struct +{ + ARCHandle* handle; + u32 entryNum; + BOOL isDir; + char* name; +} ARCDirEntry; + + +BOOL ARCInitHandle(void* arcStart, ARCHandle* handle); +BOOL ARCOpen(ARCHandle* handle, const char* fileName, ARCFileInfo* af); +BOOL ARCFastOpen(ARCHandle* handle, s32 entrynum, ARCFileInfo* af); +s32 ARCConvertPathToEntrynum(ARCHandle* handle, const char* pathPtr); +void* ARCGetStartAddrInMem(ARCFileInfo* af); +u32 ARCGetStartOffset(ARCFileInfo* af); +u32 ARCGetLength(ARCFileInfo* af); +BOOL ARCClose(ARCFileInfo* af); + +BOOL ARCChangeDir(ARCHandle* handle, const char* dirName); +BOOL ARCGetCurrentDir(ARCHandle* handle, char* path, u32 maxlen); + +BOOL ARCOpenDir(ARCHandle* handle, const char* dirName, ARCDir* dir); +BOOL ARCReadDir(ARCDir* dir, ARCDirEntry* dirent); +BOOL ARCCloseDir(ARCDir* dir); + +/*---------------------------------------------------------------------------* + Name: ARCTellDir + + Description: Returns the current location associated with the directory + + Arguments: dir Pre-opened ARCDir* structure + + Returns: current location + *---------------------------------------------------------------------------*/ +#define ARCTellDir(dir) ((dir)->location) + +/*---------------------------------------------------------------------------* + Name: ARCSeekDir + + Description: Sets the position of the next ARCReadDir on the directory + + Arguments: dir Pre-opened ARCDir* structure + loc location to set + + Returns: None + *---------------------------------------------------------------------------*/ +#define ARCSeekDir(dir, loc) ((dir)->location = loc) + +/*---------------------------------------------------------------------------* + Name: ARCRewindDir + + Description: Resets the position of the directory to the beginning + + Arguments: dir Pre-opened ARCDir* structure + + Returns: None + *---------------------------------------------------------------------------*/ +#define ARCRewindDir(dir) ((dir)->location = (dir)->entryNum + 1) + +#define ARCGetDirEntryName(dirent) ((dirent)->name) +#define ARCDirEntryIsDir(dirent) ((dirent)->isDir) + + +#ifdef __cplusplus +} +#endif + +#endif // __ARC_H__ -- cgit v1.2.3