import "System"
import "BufferedFile"
-#define OFFSET(s, m) ((uint) (&((s *) 0)->m))
+#define OFFSET(s, m) ((uint)(uintptr) (&((s *) 0)->m))
#define MDWORD(a,b) ((((uint32)((uint16)(b)))<<16)+((uint16)(a)))
#define EAR_RECOGNITION { 'e', 'A', 'R', 228, 11, 12, 3, 0 }
static struct EARHeader
{
- byte recognition[sizeof(earRecognition)] __attribute__((packed));
+ byte recognition[sizeof(earRecognition)];
uint version __attribute__((packed));
FileSize totalSize __attribute__((packed));
};
// null terminated file name follows
};
-static File EAROpenArchive(char * archive, EARHeader header)
+static File EAROpenArchive(const char * archive, EARHeader header)
{
File f = null;
if(archive[0] == ':')
{
char moduleName[MAX_LOCATION];
- char * name = archive + 1;
-#if defined(__ANDROID__)
+ const char * name = archive + 1;
+#if defined(__ANDROID__) || defined(__EMSCRIPTEN__)
if(!name[0])
name = ((SubModule)__thisModule.application.modules.first).next.module.name;
#endif
-
+#if defined(__EMSCRIPTEN__)
+ //sprintf(moduleName, "__%s.ear", name);
+ sprintf(moduleName, "__%s.ear", "HelloForm");
+ f = FileOpen(moduleName, read);
+#else
if(LocateModule(name, moduleName))
f = FileOpen(moduleName, read);
+#endif
}
else
f = FileOpen(archive, read);
// First attempt to treat this as an archive file
if(f.Read(header, sizeof(EARHeader), 1) == 1 &&
- !strncmp(header.recognition, earRecognition, sizeof(earRecognition)))
+ !memcmp(header.recognition, earRecognition, sizeof(earRecognition)))
return f;
// Then try to see if an archive is at the end of the file
f.Read(&archiveSize, sizeof(uint), 1);
f.Seek(-(int)archiveSize, end);
if(f.Read(header, sizeof(EARHeader), 1) == 1 &&
- !strncmp(header.recognition, earRecognition, sizeof(earRecognition)))
+ !memcmp(header.recognition, earRecognition, sizeof(earRecognition)))
return f;
delete f;
return null;
}
-static FileAttribs EARGetEntry(File f, EAREntry entry, char * name, char * path)
+static FileAttribs EARGetEntry(File f, EAREntry entry, const char * name, char * path)
{
uint first = 0, last = 0;
if(!name[0])
return end;
}
+ return 0;
}
~EARArchive()
return true;
}
- ArchiveDir OpenDirectory(char * name, FileStats stats, ArchiveAddMode addMode)
+ ArchiveDir OpenDirectory(const char * name, FileStats stats, ArchiveAddMode addMode)
{
ArchiveDir result = null;
EARArchiveDir dir { readOnly = addMode == readOnlyDir };
if(dir)
{
char namePart[MAX_LOCATION] = "", nameRest[MAX_LOCATION];
- uint position;
dir.archive = this;
}
}
- uint Find(EARArchiveDir directory, char * namePart, EAREntry entry)
+ uint Find(EARArchiveDir directory, const char * namePart, EAREntry entry)
{
uint position;
for(position = directory.first; position; position = entry.next)
// bf.handle = f;
}
- File FileOpen(char * name)
+ File FileOpen(const char * name)
{
File result = null;
EARFile file {};
if(file)
{
- char fileName[MAX_LOCATION];
EAREntry entry { };
f.Seek(archiveStart + sizeof(EARHeader), start);
return file;
}
- FileAttribs FileExists(char * fileName)
+ FileAttribs FileExists(const char * fileName)
{
FileAttribs result;
EAREntry entry { };
}
}
- File FileOpen(char * name)
+ File FileOpen(const char * name)
{
File result = null;
EARFile file {};
if(file)
{
- char fileName[MAX_LOCATION];
EAREntry entry { };
archive.f.Seek(position, start);
return result;
}
- FileAttribs FileExists(char * fileName)
+ FileAttribs FileExists(const char * fileName)
{
FileAttribs result;
EAREntry entry { };
return result;
}
- ArchiveDir OpenDirectory(char * name, FileStats stats, ArchiveAddMode addMode)
+ ArchiveDir OpenDirectory(const char * name, FileStats stats, ArchiveAddMode addMode)
{
ArchiveDir result = null;
EARArchiveDir dir { readOnly = addMode == readOnlyDir };
return result;
}
- bool Delete(char * name)
+ bool Delete(const char * name)
{
EAREntry entry { };
uint position;
return false;
}
- bool Move(char * name, EARArchiveDir to)
+ bool Move(const char * name, EARArchiveDir to)
{
bool result = false;
if(position != to.position)
return result;
}
- bool Rename(char * name, char * newName)
+ bool Rename(const char * name, const char * newName)
{
bool result = false;
EAREntry entry { };
return result;
}
- bool AddFromFile(char * name, File input, FileStats stats, ArchiveAddMode addMode, int compression, int * ratio, uint * newPosition)
+ bool AddFromFile(const char * name, File input, FileStats stats, ArchiveAddMode addMode, int compression, int * ratio, uint * newPosition)
{
// Search for identical entry
EAREntry oldEntry;
return _AddFromFileAtPosition(oldEntry, oldPosition, name, input, stats, addMode, compression, ratio, newPosition);
}
- bool AddFromFileAtPosition(uint oldPosition, char * name, File input, FileStats stats, ArchiveAddMode addMode, int compression, int * ratio, uint * newPosition)
+ bool AddFromFileAtPosition(uint oldPosition, const char * name, File input, FileStats stats, ArchiveAddMode addMode, int compression, int * ratio, uint * newPosition)
{
EAREntry oldEntry;
if(oldPosition)
return _AddFromFileAtPosition(oldEntry, oldPosition, name, input, stats, addMode, compression, ratio, newPosition);
}
- bool _AddFromFileAtPosition(EAREntry oldEntry, uint oldPosition, char * name, File input, FileStats stats, ArchiveAddMode addMode, int compression, int * ratio, uint * newPosition)
+ bool _AddFromFileAtPosition(EAREntry oldEntry, uint oldPosition, const char * name, File input, FileStats stats, ArchiveAddMode addMode, int compression, int * ratio, uint * newPosition)
{
- bool result = false;
bool skip = false;
FileStats oldStats { };
return true;
}
};
-#endif
+#endif // !defined(ECERE_NOARCHIVE) && !defined(ECERE_VANILLA)
// Directory Description for file listing
class EARDir : struct
return read;
}
- int Write(byte * buffer, uint size, uint count)
+ int Write(const byte * buffer, uint size, uint count)
{
return 0;
}
return false;
}
- bool Puts(char * string)
+ bool Puts(const char * string)
{
return false;
}
return position >= size || (f && f.Eof());
}
- bool GetSize()
+ uint GetSize()
{
return size;
}
class EARFileSystem : FileSystem
{
- File ::Open(char * archive, char * name, FileOpenMode mode)
+ File ::Open(const char * archive, const char * name, FileOpenMode mode)
{
File result = null;
if(mode == read)
return result;
}
- FileAttribs ::Exists(char * archive, char * fileName)
+ FileAttribs ::Exists(const char * archive, const char * fileName)
{
uint result = 0;
EARHeader header;
return result;
}
- bool ::GetSize(char * archive, char * fileName, FileSize * size)
+ bool ::GetSize(const char * archive, const char * fileName, FileSize * size)
{
bool result = false;
EARHeader header;
return result;
}
- bool ::Stats(char * archive, char * fileName, FileStats stats)
+ bool ::Stats(const char * archive, const char * fileName, FileStats stats)
{
bool result = false;
EARHeader header;
return result;
}
- void ::FixCase(char * archive, char * name)
+ void ::FixCase(const char * archive, char * name)
{
#ifdef __WIN32__
EARHeader header;
#endif
}
- bool ::Find(FileDesc file, char * archive, char * name)
+ bool ::Find(FileDesc file, const char * archive, const char * name)
{
bool result = false;
EARDir d {};
}
#if !defined(ECERE_NOARCHIVE) && !defined(ECERE_VANILLA)
- Archive ::OpenArchive(char * fileName, ArchiveOpenFlags flags)
+ Archive ::OpenArchive(const char * fileName, ArchiveOpenFlags flags)
{
Archive result = null;
EARArchive archive { writeAccess = flags.writeAccess };
archive.archiveStart = archive.f.Tell();
if(archive.f.Read(&header, sizeof(EARHeader), 1) == 1 &&
- !strncmp(header.recognition, earRecognition, sizeof(earRecognition)))
+ !memcmp(header.recognition, earRecognition, sizeof(earRecognition)))
opened = true;
if(!opened)
archive.archiveStart = archive.f.Tell();
archiveSize = archive.f.GetSize();
if(archive.f.Read(&header, sizeof(EARHeader), 1) == 1 &&
- !strncmp(header.recognition, earRecognition, sizeof(earRecognition)))
+ !memcmp(header.recognition, earRecognition, sizeof(earRecognition)))
opened = true;
}
}
return result;
}
-#endif
- bool ::QuerySize(char * archive, FileSize * size)
+#endif // !defined(ECERE_NOARCHIVE) && !defined(ECERE_VANILLA)
+ bool ::QuerySize(const char * archive, FileSize * size)
{
bool result = false;
EARHeader header;