00001
00002
00003
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069 #ifndef __MPFS2_H
00070 #define __MPFS2_H
00071
00072
00073
00074
00075
00076
00077 #if defined(STACK_USE_MPFS) && defined(STACK_USE_MPFS2)
00078 #error Both MPFS and MPFS2 are included
00079 #endif
00080
00081 #if defined(MPFS_USE_EEPROM)
00082 #if defined(USE_EEPROM_25LC1024)
00083 #define MPFS_WRITE_PAGE_SIZE (256u) // Defines the size of a page in EEPROM
00084 #else
00085 #define MPFS_WRITE_PAGE_SIZE (64u) // Defines the size of a page in EEPROM
00086 #endif
00087 #endif
00088
00089
00090
00091
00092
00093 #define MPFS2_FLAG_ISZIPPED ((WORD)0x0001) // Indicates a file is compressed with GZIP compression
00094 #define MPFS2_FLAG_HASINDEX ((WORD)0x0002) // Indicates a file has an associated index of dynamic variables
00095
00096 #define MPFS2_FLAG_ISCOMPRESSED ((WORD)0x0004) // Indicates a file is compressed with huffman compression
00097 #define MPFS_INVALID (0xffffffffu) // Indicates a position pointer is invalid
00098 #define MPFS_INVALID_FAT (0xffffu) // Indicates an invalid FAT cache
00099 #define MPFS_INVALID_HANDLE (0xffu) // Indicates that a handle is not valid
00100 typedef DWORD MPFS_PTR;
00101 typedef BYTE MPFS_HANDLE;
00102
00103
00104
00105
00106 typedef struct
00107 {
00108 MPFS_PTR addr;
00109 DWORD bytesRem;
00110 WORD fatID;
00111 BYTE offset;
00112 } MPFS_STUB;
00113
00114
00115 typedef enum
00116 {
00117 MPFS_SEEK_START = 0u,
00118 MPFS_SEEK_END,
00119 MPFS_SEEK_FORWARD,
00120 MPFS_SEEK_REWIND
00121 } MPFS_SEEK_MODE;
00122
00123
00124 typedef struct
00125 {
00126 DWORD string;
00127 DWORD data;
00128 DWORD len;
00129 DWORD timestamp;
00130 DWORD microtime;
00131 WORD flags;
00132 } MPFS_FAT_RECORD;
00133
00134
00135
00136
00137
00138
00139 void MPFSInit(void);
00140
00141 MPFS_HANDLE MPFSOpen(BYTE* cFile);
00142 #if defined(__18CXX)
00143 MPFS_HANDLE MPFSOpenROM(ROM BYTE* cFile);
00144 #else
00145
00146 #define MPFSOpenROM(a) MPFSOpen((BYTE*) a);
00147 #endif
00148 MPFS_HANDLE MPFSOpenID(WORD hFatID);
00149 void MPFSClose(MPFS_HANDLE hMPFS);
00150
00151 BOOL MPFSGet(MPFS_HANDLE hMPFS, BYTE* c);
00152 WORD MPFSGetArray(MPFS_HANDLE hMPFS, BYTE* cData, WORD wLen);
00153 BOOL MPFSGetLong(MPFS_HANDLE hMPFS, DWORD* ul);
00154 BOOL MPFSSeek(MPFS_HANDLE hMPFS, DWORD dwOffset, MPFS_SEEK_MODE tMode);
00155 #if defined(__C30__)
00156
00157 extern DWORD ReadProgramMemory(DWORD address);
00158 #endif
00159
00160 MPFS_HANDLE MPFSFormat(void);
00161 void MPFSPutEnd(BOOL final);
00162 WORD MPFSPutArray(MPFS_HANDLE hMPFS, BYTE* cData, WORD wLen);
00163
00164 DWORD MPFSGetTimestamp(MPFS_HANDLE hMPFS);
00165 DWORD MPFSGetMicrotime(MPFS_HANDLE hMPFS);
00166 WORD MPFSGetFlags(MPFS_HANDLE hMPFS);
00167 DWORD MPFSGetSize(MPFS_HANDLE hMPFS);
00168 DWORD MPFSGetBytesRem(MPFS_HANDLE hMPFS);
00169 MPFS_PTR MPFSGetStartAddr(MPFS_HANDLE hMPFS);
00170 MPFS_PTR MPFSGetEndAddr(MPFS_HANDLE hMPFS);
00171 BOOL MPFSGetFilename(MPFS_HANDLE hMPFS, BYTE* cName, WORD wLen);
00172 DWORD MPFSGetPosition(MPFS_HANDLE hMPFS);
00173 WORD MPFSGetID(MPFS_HANDLE hMPFS);
00174
00175
00176 #define MPFSTell(a) MPFSGetPosition(a)
00177
00178 #endif