Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #ifndef FILE_H
- #define FILE_H
- #include <nds.h>
- #include <libpkm/types.h>
- #ifdef __cplusplus
- extern "C" {
- #endif
- /*-----------------------------------------------------------------------------
- -- macros
- -----------------------------------------------------------------------------*/
- /*-----------------------------------------------------------------------------
- -- type definitions
- -----------------------------------------------------------------------------*/
- typedef u8 FSFile[0x48];
- typedef u8 FSArchive[0x5C];
- /*-----------------------------------------------------------------------------
- -- enums
- -----------------------------------------------------------------------------*/
- typedef enum SeekMode {
- SEEK_SET,
- SEEK_CUR,
- SEEK_END
- } SeekMode;
- /*-----------------------------------------------------------------------------
- -- structs
- -----------------------------------------------------------------------------*/
- typedef struct FileID {
- FSArchive* arc;
- u32 f_id;
- } FileID;
- /*-----------------------------------------------------------------------------
- -- types
- -----------------------------------------------------------------------------*/
- /*-----------------------------------------------------------------------------
- -- function declarations
- -----------------------------------------------------------------------------*/
- // official functions
- void FS_InitFile (FSFile* p_file);
- void FS_CloseFile(FSFile* p_file);
- BOOL FS_OpenFile (FSFile* file, const char* path);
- BOOL FS_SeekFile (FSFile* p_file, s32 offset, SeekMode mode);
- s32 FS_ReadFile (FSFile* p_file, void* dst, s32 len);
- u32 FS_GetLength (FSFile* p_file);
- u32 FS_GetFilePosition(FSFile* p_file);
- void FS_CancelFile(FSFile* p_file);
- // use these as much as possible
- // check the bottom for info on using these
- /*---------------------------------------------------------------------------*
- Name: ArchiveMoveImageTop
- Description: takes an open file and seeks into a file number in the file, making that the new top - it can also return the file length
- Arguments: FSFile* p_file : file to pull data from
- int fileNum : number of file in narc to get data on
- int offset : length into file to seek
- int known_length : if this is set, return this and don't get the file size
- Returns: either the length of the file number if known_length is 0 or known_length if set
- *---------------------------------------------------------------------------*/
- int ArchiveMoveImageTop(FSFile* p_file, u16 fileNum, int seek_length, int read_length);
- /*---------------------------------------------------------------------------*
- Name: getNarcToFile
- Description: loads a narc into memory
- Arguments: FSFile* p_file : file to pull data from
- int narcPtrIdxNum : narc number 0 -> 308, or greater if you've added some - for info on how to convert a narc to a number, see narc.h
- Returns: none
- *---------------------------------------------------------------------------*/
- void getNarcToFile(FSFile* p_file, int narcPtrIdxNum);
- /*---------------------------------------------------------------------------*
- Name: readFileToPresetBlk
- Description: reads a file into a pre-allocated memblk
- Arguments: void* pFileDest : destination buffer for fileNum
- int narcPtrIdxNum : narc to read data from fileNum in from
- int fileNum : file number to fetch in narc
- Returns: none
- *---------------------------------------------------------------------------*/
- void readFileToPresetBlkViaNarc(void* pFileDest, int narcPtrIdxNum, u16 fileNum);
- /*---------------------------------------------------------------------------*
- Name: readFileToAllocatedBlk
- Description: reads a file into an allocated memblk
- Arguments: int narcPtrIdxNum : narc to read data from fileNum in from
- int fileNum : file number to fetch in narc
- int blkGroupID : block id to allocate memory from for the file that will be read in
- Returns: pointer to the memblk that was allocated inside the function
- *---------------------------------------------------------------------------*/
- void* readFileToAllocatedBlk(int narcPtrIdxNum, u16 fileNum, s16 blkGroupID);
- /*---------------------------------------------------------------------------*
- Name: setReadLengthAndSeekIntoFile
- Description: reads a file(or a piece of) into a pre-allocated memblk
- Arguments: void* pFileDest : destination buffer for fileNum
- int narcPtrIdxNum : narc to read data from fileNum in from
- int fileNum : file number to fetch in narc
- int offset : offset into the file to jump
- Returns: none
- *---------------------------------------------------------------------------*/
- void setReadLengthAndSeekIntoFile(void* pFileDest, int narcPtrIdxNum, u16 fileNum, int seek_length);
- /*---------------------------------------------------------------------------*
- Name: readInFullFileFromNarc
- Description: reads one entire file into memory from the given narc
- Arguments: const char* path : narc path
- int fileNum : file number to fetch in narc
- int blkGroupID : block id to allocate memory from for the file that will be read in
- Returns: pointer to the memblk with the file data that was allocated inside the function
- *---------------------------------------------------------------------------*/
- void* readInFullFileFromNarc(const char* path, u16 fileNum, s16 blkGroupID);
- /*---------------------------------------------------------------------------*
- Name: getLengthOfFileInNarc
- Description: get file length
- Arguments: int narcPtrIdxNum : narc to read data from fileNum in from
- int fileNum : file number to fetch in narc
- Returns: file length
- *---------------------------------------------------------------------------*/
- u32 getLengthOfFileInNarc(int narcPtrIdxNum, u16 fileNum);
- /*---------------------------------------------------------------------------*
- Name: readNarcIntoFile
- Description: read an entire narc into a file in memory
- Arguments: int narcPtrIdxNum : narc to read in
- int fileNum : file number to fetch in narc
- Returns: ptr to Arc_Tool struct with the FSFile and narc info- size, file count, etc(see narc.h for Arc_Tool info)
- *---------------------------------------------------------------------------*/
- void* readNarcIntoFile(int narcPtrIdxNum, s16 blkGroupID);
- /*---------------------------------------------------------------------------*
- Name: allocForAndReadInFile
- Description: read a full file into memory
- Arguments: FSFile* p_file : file to pull data from
- u16 fileNum : file number to fetch in narc
- s16 blkGroupID : block id to allocate memory from for the file that will be read in
- Returns: ptr to file memory allocated inside function
- *---------------------------------------------------------------------------*/
- void* allocForAndReadInFile(Arc_Tool* arc, u16 fileNum, s16 blkGroupID);
- /*---------------------------------------------------------------------------*
- Name: readInFile
- Description: read a file into pre-allocated memory
- Arguments: FSFile* p_file : file to pull data from
- u16 fileNum : file number to fetch in narc
- void* dest : buffer to fill with the file data
- Returns: none
- *---------------------------------------------------------------------------*/
- void readInFileToPresetBlkViaFile(FSFile* p_file, u16 fileNum, void* dest);
- /*---------------------------------------------------------------------------*
- Name: getFileLength
- Description: get length of file number from file
- Arguments: FSFile* p_file : file to pull data from
- u16 fileNum : file number to fetch in narc
- Returns: u32 length
- *---------------------------------------------------------------------------*/
- u32 getFileLength(FSFile* p_file, u16 fileNum);
- /*---------------------------------------------------------------------------*
- Name: readFileIntoBuffer
- Description: simple read file into buffer
- Arguments: FSFile* p_file : file to pull data from
- s32 length : read length
- void* pBuf : buffer to write the file into
- Returns: none
- *---------------------------------------------------------------------------*/
- void readFileIntoBuffer(FSFile* p_file, s32 length, void* pBuf);
- /*---------------------------------------------------------------------------*
- Name: seekFileFromBase
- Description: simple seek file from the beginning
- Arguments: FSFile* p_file : file to pull data from
- s32 seek_offset : amount to seek into the file
- Returns: none
- *---------------------------------------------------------------------------*/
- void seekFileFromBase(FSFile* p_file, s32 seek_offset);
- /*---------------------------------------------------------------------------*
- Name: closeFileFreeBlk
- Description: close an open file and free its memory
- Arguments: FSFile* p_file : pointer to file memory to free
- Returns: none
- *---------------------------------------------------------------------------*/
- void closeFileFreeBlk(FSFile* p_file);
- /*-----------------------------------------------------------------------------
- -- inline Functions
- -----------------------------------------------------------------------------*/
- #ifdef __cplusplus
- } /* extern "C" */
- #endif
- #endif
- /*
- how to open a file from rom manually:
- -create an FSFile: ex. FSFile file;
- -FS_InitFile(file);
- -FS_OpenFile(file, path_ptr) - you will need to provide a pointer to your path here. ideally by adding it to the end of the narc list using a hack that i should have implemented by the time you use this.
- (-FS_SeekFile)
- -FS_ReadFile - when you do this, you need to provide a destination pointer for it to write to. use the alloc header to create a block from free space.
- */
- /*
- how to open a file with a custom function: (using fetching evolution info as an example)
- void* f_blk = allocateBlockFromExpHeap(4, sizeof(struct EvoData), FALSE, g_EvoSrc, BLK_TYPE_INDICATOR);
- readFileToPresetBlk(f_blk, EVO_NARC, POKE_METANG_EVO_INFO);
- * get info from evolution data block *
- freeBlock(f_blk);
- */
- /*
- how to open a file with a custom function AND using an FSFile
- FSFile p_file;
- void* p_fileBlk;
- FS_InitFile (p_file);
- FS_OpenFile(p_file, p_narcPath);
- p_fileBlk = allocForAndReadInFile(p_file, POKE_METAGROSS, BLK_GROUP_TYPE);
- * get info from block *
- closeFileFreeBlk(p_file);
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement