00001 #ifndef _PA_FS
00002 #define _PA_FS
00003
00004 #ifdef __cplusplus
00005 extern "C" {
00006 #endif
00007
00013 #include "PA_Text.h"
00014
00015
00016 #define PA_DS_CART 0x02000000
00017 #define PA_GBA_CART 0x08000000
00018
00019 typedef struct{
00020 char Name[64];
00021 char Ext[6];
00022 u32 Length;
00023 u32 FilePos;
00024 }PAFSFiles;
00025
00026 typedef struct{
00027 char Name[64];
00028 u32 FirstFile;
00029 u32 NFiles;
00030 u32 FirstFolder;
00031 u32 NFolders;
00032 }PAFSFolders;
00033
00034
00035 typedef struct{
00036 u32 Nfolders;
00037 u32 Nfiles;
00038 } PAFSSystems;
00039
00040 extern PAFSSystems *PA_FSSys;
00041 extern PAFSFiles *PA_FSFile;
00042 extern PAFSFolders *PA_FSFolder;
00043
00044 extern char *PAFSStart;
00045
00046
00047 #define PA_FSRam(size) char PA_FileSystem[size] = "PAFS007";
00048
00049
00050 void PA_FSAllInit(void);
00051
00052
00053
00064 extern inline u32 PA_FSInit(void)
00065 {
00066 PA_FSAllInit();
00067 return (PA_FSSys->Nfiles);
00068 }
00069
00070
00071
00077 extern inline u32 PA_FSRamInit(void)
00078 {
00079 PAFSStart-=8;
00080
00081 while (!((PAFSStart[0] == 'P') && (PAFSStart[1] == 'A') && (PAFSStart[2] == 'F') && (PAFSStart[3] == 'S') && (PAFSStart[4] == '0') && (PAFSStart[5] == '0'))) PAFSStart++;
00082
00083 PAFSStart += 8;
00084 PA_FSSys = (PAFSSystems*)PAFSStart;
00085
00086 while (!((PAFSStart[0] == 'D') && (PAFSStart[1] == 'I') && (PAFSStart[2] == 'R') && (PAFSStart[3] == '0') && (PAFSStart[4] == '0') && (PAFSStart[5] == '0'))) PAFSStart++;
00087
00088 PAFSStart += 8;
00089 PA_FSFolder = (PAFSFolders*)PAFSStart;
00090
00091 while (!((PAFSStart[0] == 'F') && (PAFSStart[1] == 'I') && (PAFSStart[2] == 'L') && (PAFSStart[3] == '0') && (PAFSStart[4] == '0') && (PAFSStart[5] == '0'))) PAFSStart++;
00092
00093 PAFSStart+=8;
00094 PA_FSFile = (PAFSFiles*)PAFSStart;
00095
00096 while (!((PAFSStart[0] == 'B') && (PAFSStart[1] == 'I') && (PAFSStart[2] == 'N') && (PAFSStart[3] == '0') && (PAFSStart[4] == '0') && (PAFSStart[5] == '0'))) PAFSStart++;
00097
00098 PAFSStart+=8;
00099 return (PA_FSSys->Nfiles);
00100 }
00101
00102
00108 #define PA_PAFSFile(FileN) ((void*)(PAFSStart+PA_FSFile[FileN].FilePos))
00109
00110
00111
00120 extern inline s32 PA_FSGetFolder(char *name){
00121 u16 i;
00122
00123 for (i = 0; i < PA_FSSys->Nfolders; i++){
00124 if (PA_CompareText(PA_FSFolder[i].Name, name))
00125 return i;
00126 }
00127
00128 return -1;
00129 }
00130
00131
00146 extern inline s32 PA_FSGetFile(s16 start, char *name, char *extension){
00147 u16 i;
00148
00149 for (i = start; i < PA_FSSys->Nfiles; i++){
00150 if (PA_CompareText(PA_FSFile[i].Name, name)&& PA_CompareText(PA_FSFile[i].Ext, extension))
00151 return i;
00152 }
00153
00154 return -1;
00155 }
00156
00157
00169 s16 PA_FSSearchExt(s16 *array, char *extension);
00170
00171
00172
00184 extern inline void PA_Malloc(void **pointer, u32 size){
00185 if (*pointer) {
00186 free(*pointer);
00187 }
00188 *pointer = (void*)malloc(size);
00189 }
00190
00191
00192
00207 extern inline void PA_FSBgLoad(u8 screen, u8 bg_number, u32 filenumber) {
00208 PA_EasyBgLoadEx(screen, bg_number, (u32*)PA_PAFSFile(filenumber), PA_PAFSFile(filenumber+3), PA_FSFile[filenumber+3].Length, PA_PAFSFile(filenumber+1), PA_FSFile[filenumber+1].Length, (void*)(PA_PAFSFile(filenumber+2)));
00209 }
00210
00211
00212
00227 void PA_FSBgNameLoad(u8 screen, u8 bg_number, char* bg_name);
00228
00229
00230
00231
00232
00233
00234
00236
00237
00238 #ifdef __cplusplus
00239 }
00240 #endif
00241 #endif
00242
00243