00001 #ifndef _PA_FS
00002 #define _PA_FS
00003
00004
00010 #include "PA_Text.h"
00011
00012 typedef struct{
00013 char Name[20];
00014 char Ext[6];
00015 u32 Length;
00016 u32 FilePos;
00017 }PAFSFiles;
00018
00019 typedef struct{
00020 char Name[20];
00021 u32 FirstFile;
00022 u32 NFiles;
00023 u32 FirstFolder;
00024 u32 NFolders;
00025 }PAFSFolders;
00026
00027
00028 typedef struct{
00029 u32 Nfolders;
00030 u32 Nfiles;
00031 } PAFSSystems;
00032
00033 extern PAFSSystems *PA_FSSys;
00034 extern PAFSFiles *PA_FSFile;
00035 extern PAFSFolders *PA_FSFolder;
00036
00037 extern char *PAFSStart;
00038
00039
00040 #define PA_FSRam(size) char PA_FileSystem[size] = "PAFS007";
00041
00042
00043 void PA_FSAllInit(void);
00044
00045
00046
00057 extern inline u32 PA_FSInit(void)
00058 {
00059 PA_FSAllInit();
00060 return (PA_FSSys->Nfiles);
00061 }
00062
00063
00064
00070 extern inline u32 PA_FSRamInit(void)
00071 {
00072 PAFSStart-=8;
00073
00074 while (!((PAFSStart[0] == 'P') && (PAFSStart[1] == 'A') && (PAFSStart[2] == 'F') && (PAFSStart[3] == 'S') && (PAFSStart[4] == '0') && (PAFSStart[5] == '0'))) PAFSStart++;
00075
00076 PAFSStart += 8;
00077 PA_FSSys = (PAFSSystems*)PAFSStart;
00078
00079 while (!((PAFSStart[0] == 'D') && (PAFSStart[1] == 'I') && (PAFSStart[2] == 'R') && (PAFSStart[3] == '0') && (PAFSStart[4] == '0') && (PAFSStart[5] == '0'))) PAFSStart++;
00080
00081 PAFSStart += 8;
00082 PA_FSFolder = (PAFSFolders*)PAFSStart;
00083
00084 while (!((PAFSStart[0] == 'F') && (PAFSStart[1] == 'I') && (PAFSStart[2] == 'L') && (PAFSStart[3] == '0') && (PAFSStart[4] == '0') && (PAFSStart[5] == '0'))) PAFSStart++;
00085
00086 PAFSStart+=8;
00087 PA_FSFile = (PAFSFiles*)PAFSStart;
00088
00089 while (!((PAFSStart[0] == 'B') && (PAFSStart[1] == 'I') && (PAFSStart[2] == 'N') && (PAFSStart[3] == '0') && (PAFSStart[4] == '0') && (PAFSStart[5] == '0'))) PAFSStart++;
00090
00091 PAFSStart+=4;
00092 return (PA_FSSys->Nfiles);
00093 }
00094
00095
00101 #define PA_PAFSFile(FileN) ((void*)(PAFSStart+PA_FSFile[FileN].FilePos))
00102
00103
00104
00105
00120 extern inline s32 PA_FSGetFile(s16 start, char *name, char *extension){
00121 u16 i;
00122
00123 for (i = start; i < PA_FSSys->Nfiles; i++){
00124 if (PA_CompareText(PA_FSFile[i].Name, name)&& PA_CompareText(PA_FSFile[i].Ext, extension))
00125 return i;
00126 }
00127
00128 return -1;
00129 }
00130
00131
00143 s16 PA_FSSearchExt(s16 *array, char *extension);
00144
00145
00147
00148
00149
00150 #endif
00151
00152