summaryrefslogtreecommitdiffstatshomepage
path: root/src/lib/formats/dim_dsk.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/formats/dim_dsk.cpp')
-rw-r--r--src/lib/formats/dim_dsk.cpp38
1 files changed, 19 insertions, 19 deletions
diff --git a/src/lib/formats/dim_dsk.cpp b/src/lib/formats/dim_dsk.cpp
index 53359b2fd1c..1f0902c2859 100644
--- a/src/lib/formats/dim_dsk.cpp
+++ b/src/lib/formats/dim_dsk.cpp
@@ -2,7 +2,7 @@
// copyright-holders:Olivier Galibert
/*********************************************************************
- formats/dim_dsk.c
+ formats/dim_dsk.cpp
DIM disk images
@@ -13,48 +13,53 @@
#include "ioprocs.h"
#include <cstring>
+#include <tuple>
+
dim_format::dim_format()
{
}
-const char *dim_format::name() const
+const char *dim_format::name() const noexcept
{
return "dim";
}
-const char *dim_format::description() const
+const char *dim_format::description() const noexcept
{
return "DIM disk image";
}
-const char *dim_format::extensions() const
+const char *dim_format::extensions() const noexcept
{
return "dim";
}
-int dim_format::identify(util::random_read &io, uint32_t form_factor, const std::vector<uint32_t> &variants)
+int dim_format::identify(util::random_read &io, uint32_t form_factor, const std::vector<uint32_t> &variants) const
{
uint8_t h[16];
-
- size_t actual;
- io.read_at(0xab, h, 16, actual);
+ auto const [err, actual] = read_at(io, 0xab, h, 16);
+ if(err || (16 != actual))
+ return 0;
if(strncmp((const char *)h, "DIFC HEADER", 11) == 0)
- return 100;
+ return FIFID_SIGN;
return 0;
}
-bool dim_format::load(util::random_read &io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image)
+bool dim_format::load(util::random_read &io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image &image) const
{
+ std::error_condition err;
size_t actual;
int offset = 0x100;
uint8_t h;
uint8_t track_total = 77;
int cell_count = form_factor == floppy_image::FF_35 ? 200000 : 166666;
- io.read_at(0, &h, 1, actual);
+ std::tie(err, actual) = read_at(io, 0, &h, 1);
+ if (err || (1 != actual))
+ return false;
int spt, gap3, bps, size;
switch(h) {
@@ -114,7 +119,7 @@ bool dim_format::load(util::random_read &io, uint32_t form_factor, const std::ve
sects[i].deleted = false;
sects[i].bad_crc = false;
sects[i].data = &sect_data[sdatapos];
- io.read_at(offset, sects[i].data, bps, actual);
+ std::tie(err, actual) = read_at(io, offset, sects[i].data, bps); // FIXME: check for errors and premature EOF
offset += bps;
sdatapos += bps;
}
@@ -126,14 +131,9 @@ bool dim_format::load(util::random_read &io, uint32_t form_factor, const std::ve
}
-bool dim_format::save(util::random_read_write &io, const std::vector<uint32_t> &variants, floppy_image *image)
-{
- return false;
-}
-
-bool dim_format::supports_save() const
+bool dim_format::supports_save() const noexcept
{
return false;
}
-const floppy_format_type FLOPPY_DIM_FORMAT = &floppy_image_format_creator<dim_format>;
+const dim_format FLOPPY_DIM_FORMAT;