summaryrefslogtreecommitdiffstatshomepage
path: root/src/lib/formats/fsmgr.cpp
diff options
context:
space:
mode:
author Olivier Galibert <galibert@pobox.com>2021-05-11 21:21:56 +0200
committer Olivier Galibert <galibert@pobox.com>2021-05-11 21:52:25 +0200
commit94db317064735d4f0126676a827ce63787fb044e (patch)
tree151caf7aa82acf1c3cf3b5a3ed308c2180dab8dc /src/lib/formats/fsmgr.cpp
parent9d4ffe837e0eb5309cd5d828b660a46d7820d1d7 (diff)
prodos: Add file and resource reading
Diffstat (limited to 'src/lib/formats/fsmgr.cpp')
-rw-r--r--src/lib/formats/fsmgr.cpp117
1 files changed, 117 insertions, 0 deletions
diff --git a/src/lib/formats/fsmgr.cpp b/src/lib/formats/fsmgr.cpp
index 2b15b1aeb93..ddf9e04869e 100644
--- a/src/lib/formats/fsmgr.cpp
+++ b/src/lib/formats/fsmgr.cpp
@@ -262,6 +262,123 @@ uint32_t fsblk_t::block_t::r32l(u32 offset)
return blk[0] | (blk[1] << 8) | (blk[2] << 16) | (blk[3] << 24);
}
+
+
+void filesystem_t::copy(uint8_t *p, const uint8_t *src, u32 size)
+{
+ memcpy(p, src, size);
+}
+
+void filesystem_t::fill(uint8_t *p, uint8_t data, u32 size)
+{
+ memset(p, data, size);
+}
+
+void filesystem_t::wstr(uint8_t *p, const std::string &str)
+{
+ memcpy(p, str.data(), str.size());
+}
+
+void filesystem_t::w8(uint8_t *p, uint8_t data)
+{
+ p[0] = data;
+}
+
+void filesystem_t::w16b(uint8_t *p, u16 data)
+{
+ p[0] = data >> 8;
+ p[1] = data;
+}
+
+void filesystem_t::w24b(uint8_t *p, u32 data)
+{
+ p[0] = data >> 16;
+ p[1] = data >> 8;
+ p[2] = data;
+}
+
+void filesystem_t::w32b(uint8_t *p, u32 data)
+{
+ p[0] = data >> 24;
+ p[1] = data >> 16;
+ p[2] = data >> 8;
+ p[3] = data;
+}
+
+void filesystem_t::w16l(uint8_t *p, u16 data)
+{
+ p[0] = data;
+ p[1] = data >> 8;
+}
+
+void filesystem_t::w24l(uint8_t *p, u32 data)
+{
+ p[0] = data;
+ p[1] = data >> 8;
+ p[2] = data >> 16;
+}
+
+void filesystem_t::w32l(uint8_t *p, u32 data)
+{
+ p[0] = data;
+ p[1] = data >> 8;
+ p[2] = data >> 16;
+ p[3] = data >> 24;
+}
+
+std::string filesystem_t::rstr(const uint8_t *p, u32 size)
+{
+ std::string res;
+ for(u32 i=0; i != size; i++)
+ res += char(*p++);
+ return res;
+}
+
+uint8_t filesystem_t::r8(const uint8_t *p)
+{
+ return p[0];
+}
+
+uint16_t filesystem_t::r16b(const uint8_t *p)
+{
+ return (p[0] << 8) | p[1];
+}
+
+uint32_t filesystem_t::r24b(const uint8_t *p)
+{
+ return (p[0] << 16) | (p[1] << 8) | p[2];
+}
+
+uint32_t filesystem_t::r32b(const uint8_t *p)
+{
+ return (p[0] << 24) | (p[1] << 16) | (p[2] << 8) | p[3];
+}
+
+uint16_t filesystem_t::r16l(const uint8_t *p)
+{
+ return p[0] | (p[1] << 8);
+}
+
+uint32_t filesystem_t::r24l(const uint8_t *p)
+{
+ return p[0] | (p[1] << 8) | (p[2] << 16);
+}
+
+uint32_t filesystem_t::r32l(const uint8_t *p)
+{
+ return p[0] | (p[1] << 8) | (p[2] << 16) | (p[3] << 24);
+}
+
+std::vector<u8> filesystem_t::ifile_t::rsrc_read_all()
+{
+ fatalerror("rsrc_read_all called on filesystem without resource forks\n");
+}
+
+std::vector<u8> filesystem_t::ifile_t::rsrc_read(u64 start, u64 length)
+{
+ fatalerror("rsrc_read called on filesystem without resource forks\n");
+}
+
const char *fs_meta_get_name(fs_meta_name name)
{
switch(name) {