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 typedef struct{
00016 char Name[20];
00017 char Ext[6];
00018 u32 Length;
00019 u32 FilePos;
00020 }PAFSFiles;
00021
00022 typedef struct{
00023 char Name[20];
00024 u32 FirstFile;
00025 u32 NFiles;
00026 u32 FirstFolder;
00027 u32 NFolders;
00028 }PAFSFolders;
00029
00030
00031 typedef struct{
00032 u32 Nfolders;
00033 u32 Nfiles;
00034 } PAFSSystems;
00035
00036 extern PAFSSystems *PA_FSSys;
00037 extern PAFSFiles *PA_FSFile;
00038 extern PAFSFolders *PA_FSFolder;
00039
00040 extern char *PAFSStart;
00041
00042
00043 #define PA_FSRam(size) char PA_FileSystem[size] = "PAFS007";
00044
00045
00046 void PA_FSAllInit(void);
00047
00048
00049
00060 extern inline u32 PA_FSInit(void)
00061 {
00062 PA_FSAllInit();
00063 return (PA_FSSys->Nfiles);
00064 }
00065
00066
00067
00073 extern inline u32 PA_FSRamInit(void)
00074 {
00075 PAFSStart-=8;
00076
00077 while (!((PAFSStart[0] == 'P') && (PAFSStart[1] == 'A') && (PAFSStart[2] == 'F') && (PAFSStart[3] == 'S') && (PAFSStart[4] == '0') && (PAFSStart[5] == '0'))) PAFSStart++;
00078
00079 PAFSStart += 8;
00080 PA_FSSys = (PAFSSystems*)PAFSStart;
00081
00082 while (!((PAFSStart[0] == 'D') && (PAFSStart[1] == 'I') && (PAFSStart[2] == 'R') && (PAFSStart[3] == '0') && (PAFSStart[4] == '0') && (PAFSStart[5] == '0'))) PAFSStart++;
00083
00084 PAFSStart += 8;
00085 PA_FSFolder = (PAFSFolders*)PAFSStart;
00086
00087 while (!((PAFSStart[0] == 'F') && (PAFSStart[1] == 'I') && (PAFSStart[2] == 'L') && (PAFSStart[3] == '0') && (PAFSStart[4] == '0') && (PAFSStart[5] == '0'))) PAFSStart++;
00088
00089 PAFSStart+=8;
00090 PA_FSFile = (PAFSFiles*)PAFSStart;
00091
00092 while (!((PAFSStart[0] == 'B') && (PAFSStart[1] == 'I') && (PAFSStart[2] == 'N') && (PAFSStart[3] == '0') && (PAFSStart[4] == '0') && (PAFSStart[5] == '0'))) PAFSStart++;
00093
00094 PAFSStart+=8;
00095 return (PA_FSSys->Nfiles);
00096 }
00097
00098
00104 #define PA_PAFSFile(FileN) ((void*)(PAFSStart+PA_FSFile[FileN].FilePos))
00105
00106
00107
00108
00123 extern inline s32 PA_FSGetFile(s16 start, char *name, char *extension){
00124 u16 i;
00125
00126 for (i = start; i < PA_FSSys->Nfiles; i++){
00127 if (PA_CompareText(PA_FSFile[i].Name, name)&& PA_CompareText(PA_FSFile[i].Ext, extension))
00128 return i;
00129 }
00130
00131 return -1;
00132 }
00133
00134
00146 s16 PA_FSSearchExt(s16 *array, char *extension);
00147
00148
00149
00161 extern inline void PA_Malloc(void **pointer, u32 size){
00162 if (*pointer) {
00163 free(*pointer);
00164 }
00165 *pointer = (void*)malloc(size);
00166 }
00167
00169
00170
00171 #ifdef __cplusplus
00172 }
00173 #endif
00174 #endif
00175
00176