diff --git a/arch/aeslanier/decoder.cc b/arch/aeslanier/decoder.cc index 16aceb79c..aea844c7a 100644 --- a/arch/aeslanier/decoder.cc +++ b/arch/aeslanier/decoder.cc @@ -2,10 +2,10 @@ #include "lib/decoders/decoders.h" #include "aeslanier.h" #include "lib/core/crc.h" -#include "lib/fluxmap.h" +#include "lib/data/fluxmap.h" #include "lib/decoders/fluxmapreader.h" #include "lib/decoders/fluxpattern.h" -#include "lib/sector.h" +#include "lib/data/sector.h" #include "lib/core/bytes.h" #include "fmt/format.h" #include diff --git a/arch/agat/decoder.cc b/arch/agat/decoder.cc index 4cd81c754..0af0a9f0f 100644 --- a/arch/agat/decoder.cc +++ b/arch/agat/decoder.cc @@ -2,10 +2,10 @@ #include "lib/decoders/decoders.h" #include "agat.h" #include "lib/core/crc.h" -#include "lib/fluxmap.h" +#include "lib/data/fluxmap.h" #include "lib/decoders/fluxmapreader.h" #include "lib/decoders/fluxpattern.h" -#include "lib/sector.h" +#include "lib/data/sector.h" #include "lib/core/bytes.h" #include "fmt/format.h" #include diff --git a/arch/agat/encoder.cc b/arch/agat/encoder.cc index cc4d0f6af..b60d591cf 100644 --- a/arch/agat/encoder.cc +++ b/arch/agat/encoder.cc @@ -4,8 +4,8 @@ #include "agat.h" #include "lib/core/crc.h" #include "lib/readerwriter.h" -#include "lib/image.h" -#include "lib/layout.h" +#include "lib/data/image.h" +#include "lib/data/layout.h" #include "arch/agat/agat.pb.h" #include "lib/encoders/encoders.pb.h" diff --git a/arch/amiga/decoder.cc b/arch/amiga/decoder.cc index 8ff1c7d67..b89e1230b 100644 --- a/arch/amiga/decoder.cc +++ b/arch/amiga/decoder.cc @@ -1,10 +1,10 @@ #include "lib/core/globals.h" -#include "lib/fluxmap.h" +#include "lib/data/fluxmap.h" #include "lib/decoders/fluxmapreader.h" #include "lib/decoders/fluxpattern.h" #include "protocol.h" #include "lib/decoders/decoders.h" -#include "lib/sector.h" +#include "lib/data/sector.h" #include "amiga.h" #include "lib/core/bytes.h" #include "fmt/format.h" diff --git a/arch/amiga/encoder.cc b/arch/amiga/encoder.cc index a0fad04e0..bec5d82ee 100644 --- a/arch/amiga/encoder.cc +++ b/arch/amiga/encoder.cc @@ -4,7 +4,7 @@ #include "amiga.h" #include "lib/core/crc.h" #include "lib/readerwriter.h" -#include "lib/image.h" +#include "lib/data/image.h" #include "arch/amiga/amiga.pb.h" #include "lib/encoders/encoders.pb.h" diff --git a/arch/apple2/decoder.cc b/arch/apple2/decoder.cc index 98804dd47..92d8aeb3a 100644 --- a/arch/apple2/decoder.cc +++ b/arch/apple2/decoder.cc @@ -1,10 +1,10 @@ #include "lib/core/globals.h" -#include "lib/fluxmap.h" +#include "lib/data/fluxmap.h" #include "lib/decoders/fluxmapreader.h" #include "lib/decoders/fluxpattern.h" #include "protocol.h" #include "lib/decoders/decoders.h" -#include "lib/sector.h" +#include "lib/data/sector.h" #include "apple2.h" #include "arch/apple2/apple2.pb.h" #include "lib/decoders/decoders.pb.h" diff --git a/arch/apple2/encoder.cc b/arch/apple2/encoder.cc index 9ee4f4556..089f528ed 100644 --- a/arch/apple2/encoder.cc +++ b/arch/apple2/encoder.cc @@ -2,9 +2,9 @@ #include "arch/apple2/apple2.h" #include "lib/decoders/decoders.h" #include "lib/encoders/encoders.h" -#include "lib/sector.h" +#include "lib/data/sector.h" #include "lib/readerwriter.h" -#include "lib/image.h" +#include "lib/data/image.h" #include "fmt/format.h" #include "lib/encoders/encoders.pb.h" #include diff --git a/arch/brother/decoder.cc b/arch/brother/decoder.cc index 3e41bf599..0d643f19b 100644 --- a/arch/brother/decoder.cc +++ b/arch/brother/decoder.cc @@ -1,11 +1,11 @@ #include "lib/core/globals.h" -#include "lib/fluxmap.h" +#include "lib/data/fluxmap.h" #include "lib/decoders/fluxmapreader.h" #include "lib/decoders/fluxpattern.h" #include "lib/decoders/decoders.h" #include "lib/encoders/encoders.h" #include "brother.h" -#include "lib/sector.h" +#include "lib/data/sector.h" #include "lib/core/bytes.h" #include "lib/core/crc.h" #include diff --git a/arch/brother/encoder.cc b/arch/brother/encoder.cc index 3d512f7f0..188a27f64 100644 --- a/arch/brother/encoder.cc +++ b/arch/brother/encoder.cc @@ -4,7 +4,7 @@ #include "brother.h" #include "lib/core/crc.h" #include "lib/readerwriter.h" -#include "lib/image.h" +#include "lib/data/image.h" #include "arch/brother/brother.pb.h" #include "lib/encoders/encoders.pb.h" diff --git a/arch/c64/decoder.cc b/arch/c64/decoder.cc index ac34f29cd..47d300f24 100644 --- a/arch/c64/decoder.cc +++ b/arch/c64/decoder.cc @@ -1,10 +1,10 @@ #include "lib/core/globals.h" -#include "lib/fluxmap.h" +#include "lib/data/fluxmap.h" #include "lib/decoders/fluxmapreader.h" #include "lib/decoders/fluxpattern.h" #include "protocol.h" #include "lib/decoders/decoders.h" -#include "lib/sector.h" +#include "lib/data/sector.h" #include "c64.h" #include "lib/core/crc.h" #include "lib/core/bytes.h" diff --git a/arch/c64/encoder.cc b/arch/c64/encoder.cc index 4dce3e09f..ae0c04698 100644 --- a/arch/c64/encoder.cc +++ b/arch/c64/encoder.cc @@ -3,13 +3,13 @@ #include "lib/encoders/encoders.h" #include "c64.h" #include "lib/core/crc.h" -#include "lib/sector.h" +#include "lib/data/sector.h" #include "lib/readerwriter.h" -#include "lib/image.h" +#include "lib/data/image.h" #include "fmt/format.h" #include "arch/c64/c64.pb.h" #include "lib/encoders/encoders.pb.h" -#include "lib/layout.h" +#include "lib/data/layout.h" #include #include "lib/core/bytes.h" diff --git a/arch/f85/decoder.cc b/arch/f85/decoder.cc index 1232cb5e3..4ef2a7b8e 100644 --- a/arch/f85/decoder.cc +++ b/arch/f85/decoder.cc @@ -1,10 +1,10 @@ #include "lib/core/globals.h" -#include "lib/fluxmap.h" +#include "lib/data/fluxmap.h" #include "lib/decoders/fluxmapreader.h" #include "lib/decoders/fluxpattern.h" #include "protocol.h" #include "lib/decoders/decoders.h" -#include "lib/sector.h" +#include "lib/data/sector.h" #include "f85.h" #include "lib/core/crc.h" #include "lib/core/bytes.h" diff --git a/arch/fb100/decoder.cc b/arch/fb100/decoder.cc index 83e5c1b9f..35e74726e 100644 --- a/arch/fb100/decoder.cc +++ b/arch/fb100/decoder.cc @@ -1,10 +1,10 @@ #include "lib/core/globals.h" -#include "lib/fluxmap.h" +#include "lib/data/fluxmap.h" #include "lib/decoders/fluxmapreader.h" #include "lib/decoders/fluxpattern.h" #include "protocol.h" #include "lib/decoders/decoders.h" -#include "lib/sector.h" +#include "lib/data/sector.h" #include "fb100.h" #include "lib/core/crc.h" #include "lib/core/bytes.h" diff --git a/arch/ibm/decoder.cc b/arch/ibm/decoder.cc index cb24f8976..9be98fff8 100644 --- a/arch/ibm/decoder.cc +++ b/arch/ibm/decoder.cc @@ -2,13 +2,13 @@ #include "lib/decoders/decoders.h" #include "ibm.h" #include "lib/core/crc.h" -#include "lib/fluxmap.h" +#include "lib/data/fluxmap.h" #include "lib/decoders/fluxmapreader.h" #include "lib/decoders/fluxpattern.h" -#include "lib/sector.h" +#include "lib/data/sector.h" #include "arch/ibm/ibm.pb.h" -#include "lib/proto.h" -#include "lib/layout.h" +#include "lib/config/proto.h" +#include "lib/data/layout.h" #include static_assert(std::is_trivially_copyable::value, diff --git a/arch/ibm/encoder.cc b/arch/ibm/encoder.cc index 002da53e6..2ad9c6445 100644 --- a/arch/ibm/encoder.cc +++ b/arch/ibm/encoder.cc @@ -1,16 +1,16 @@ #include "lib/core/globals.h" -#include "lib/config.h" +#include "lib/config/config.h" #include "lib/decoders/decoders.h" #include "lib/encoders/encoders.h" #include "ibm.h" #include "lib/core/crc.h" #include "lib/readerwriter.h" -#include "lib/image.h" +#include "lib/data/image.h" #include "arch/ibm/ibm.pb.h" #include "lib/encoders/encoders.pb.h" #include "fmt/format.h" -#include "lib/proto.h" -#include "lib/layout.h" +#include "lib/config/proto.h" +#include "lib/data/layout.h" #include /* IAM record separator: diff --git a/arch/macintosh/decoder.cc b/arch/macintosh/decoder.cc index 9e6bee616..5616cf0dc 100644 --- a/arch/macintosh/decoder.cc +++ b/arch/macintosh/decoder.cc @@ -1,10 +1,10 @@ #include "lib/core/globals.h" -#include "lib/fluxmap.h" +#include "lib/data/fluxmap.h" #include "lib/decoders/fluxmapreader.h" #include "lib/decoders/fluxpattern.h" #include "protocol.h" #include "lib/decoders/decoders.h" -#include "lib/sector.h" +#include "lib/data/sector.h" #include "macintosh.h" #include "lib/core/bytes.h" #include "fmt/format.h" diff --git a/arch/macintosh/encoder.cc b/arch/macintosh/encoder.cc index 65610c867..50b6e6b7e 100644 --- a/arch/macintosh/encoder.cc +++ b/arch/macintosh/encoder.cc @@ -4,10 +4,10 @@ #include "macintosh.h" #include "lib/core/crc.h" #include "lib/readerwriter.h" -#include "lib/image.h" +#include "lib/data/image.h" #include "fmt/format.h" #include "lib/encoders/encoders.pb.h" -#include "lib/layout.h" +#include "lib/data/layout.h" #include "arch/macintosh/macintosh.pb.h" #include diff --git a/arch/micropolis/decoder.cc b/arch/micropolis/decoder.cc index 63ae43cb5..648c46cb1 100644 --- a/arch/micropolis/decoder.cc +++ b/arch/micropolis/decoder.cc @@ -1,9 +1,9 @@ #include "lib/core/globals.h" -#include "lib/fluxmap.h" +#include "lib/data/fluxmap.h" #include "lib/decoders/fluxmapreader.h" #include "lib/decoders/fluxpattern.h" #include "lib/decoders/decoders.h" -#include "lib/sector.h" +#include "lib/data/sector.h" #include "micropolis.h" #include "lib/core/bytes.h" #include "fmt/format.h" diff --git a/arch/micropolis/encoder.cc b/arch/micropolis/encoder.cc index 16fc4f8d7..da32ef4c7 100644 --- a/arch/micropolis/encoder.cc +++ b/arch/micropolis/encoder.cc @@ -1,9 +1,9 @@ #include "lib/core/globals.h" #include "micropolis.h" -#include "lib/sector.h" +#include "lib/data/sector.h" #include "lib/decoders/decoders.h" #include "lib/encoders/encoders.h" -#include "lib/image.h" +#include "lib/data/image.h" #include "lib/encoders/encoders.pb.h" static void write_sector(std::vector& bits, diff --git a/arch/mx/decoder.cc b/arch/mx/decoder.cc index a7758a182..b75892354 100644 --- a/arch/mx/decoder.cc +++ b/arch/mx/decoder.cc @@ -2,10 +2,10 @@ #include "lib/decoders/decoders.h" #include "arch/mx/mx.h" #include "lib/core/crc.h" -#include "lib/fluxmap.h" +#include "lib/data/fluxmap.h" #include "lib/decoders/fluxmapreader.h" #include "lib/decoders/fluxpattern.h" -#include "lib/sector.h" +#include "lib/data/sector.h" #include const int SECTOR_SIZE = 256; diff --git a/arch/northstar/decoder.cc b/arch/northstar/decoder.cc index 4c5420d82..67ecad626 100644 --- a/arch/northstar/decoder.cc +++ b/arch/northstar/decoder.cc @@ -12,11 +12,11 @@ */ #include "lib/core/globals.h" -#include "lib/fluxmap.h" +#include "lib/data/fluxmap.h" #include "lib/decoders/fluxmapreader.h" #include "lib/decoders/fluxpattern.h" #include "lib/decoders/decoders.h" -#include "lib/sector.h" +#include "lib/data/sector.h" #include "northstar.h" #include "lib/core/bytes.h" #include "lib/decoders/decoders.pb.h" diff --git a/arch/northstar/encoder.cc b/arch/northstar/encoder.cc index 86709e4f0..214c0f3de 100644 --- a/arch/northstar/encoder.cc +++ b/arch/northstar/encoder.cc @@ -1,10 +1,10 @@ #include "lib/core/globals.h" #include "northstar.h" -#include "lib/sector.h" +#include "lib/data/sector.h" #include "lib/core/bytes.h" #include "lib/decoders/decoders.h" #include "lib/encoders/encoders.h" -#include "lib/image.h" +#include "lib/data/image.h" #include "lib/encoders/encoders.pb.h" #define GAP_FILL_SIZE_SD 30 diff --git a/arch/rolandd20/decoder.cc b/arch/rolandd20/decoder.cc index 629d9b24f..7351f5cf4 100644 --- a/arch/rolandd20/decoder.cc +++ b/arch/rolandd20/decoder.cc @@ -1,10 +1,10 @@ #include "lib/core/globals.h" #include "lib/decoders/decoders.h" #include "lib/core/crc.h" -#include "lib/fluxmap.h" +#include "lib/data/fluxmap.h" #include "lib/decoders/fluxmapreader.h" #include "lib/decoders/fluxpattern.h" -#include "lib/sector.h" +#include "lib/data/sector.h" #include "lib/core/bytes.h" #include "rolandd20.h" #include diff --git a/arch/smaky6/decoder.cc b/arch/smaky6/decoder.cc index d2496c397..ed1a1cdcd 100644 --- a/arch/smaky6/decoder.cc +++ b/arch/smaky6/decoder.cc @@ -1,10 +1,10 @@ #include "lib/core/globals.h" -#include "lib/fluxmap.h" +#include "lib/data/fluxmap.h" #include "lib/decoders/fluxmapreader.h" #include "lib/decoders/fluxpattern.h" #include "protocol.h" #include "lib/decoders/decoders.h" -#include "lib/sector.h" +#include "lib/data/sector.h" #include "smaky6.h" #include "lib/core/bytes.h" #include "lib/core/crc.h" diff --git a/arch/tartu/decoder.cc b/arch/tartu/decoder.cc index 8da1507e4..623a66546 100644 --- a/arch/tartu/decoder.cc +++ b/arch/tartu/decoder.cc @@ -1,24 +1,21 @@ #include "lib/core/globals.h" -#include "lib/config.h" +#include "lib/config/config.h" #include "lib/decoders/decoders.h" #include "arch/tartu/tartu.h" #include "lib/core/crc.h" -#include "lib/fluxmap.h" +#include "lib/data/fluxmap.h" #include "lib/decoders/fluxmapreader.h" #include "lib/decoders/fluxpattern.h" -#include "lib/sector.h" +#include "lib/data/sector.h" #include constexpr uint64_t HEADER_BITS = 0xaaaaaaaa44895554LL; -constexpr uint64_t DATA_BITS = 0xaaaaaaaa44895545LL; +constexpr uint64_t DATA_BITS = 0xaaaaaaaa44895545LL; static const FluxPattern HEADER_PATTERN(64, HEADER_BITS); static const FluxPattern DATA_PATTERN(64, DATA_BITS); -const FluxMatchers ANY_RECORD_PATTERN { - &HEADER_PATTERN, - &DATA_PATTERN -}; +const FluxMatchers ANY_RECORD_PATTERN{&HEADER_PATTERN, &DATA_PATTERN}; class TartuDecoder : public Decoder { @@ -29,9 +26,7 @@ class TartuDecoder : public Decoder { } - void beginTrack() override - { - } + void beginTrack() override {} nanoseconds_t advanceToNextRecord() override { @@ -45,7 +40,7 @@ class TartuDecoder : public Decoder auto bits = readRawBits(16 * 4); auto bytes = decodeFmMfm(bits).slice(0, 4); - + ByteReader br(bytes); uint8_t track = br.read_8(); _sector->logicalTrack = track >> 1; @@ -54,7 +49,7 @@ class TartuDecoder : public Decoder _sector->logicalSector = br.read_8(); uint8_t wantChecksum = br.read_8(); uint8_t gotChecksum = ~sumBytes(bytes.slice(0, 3)); - + if (wantChecksum == gotChecksum) _sector->status = Sector::DATA_MISSING; @@ -65,14 +60,15 @@ class TartuDecoder : public Decoder { if (readRaw64() != DATA_BITS) return; - + const auto& bits = readRawBits(129 * 16); const auto& bytes = decodeFmMfm(bits).slice(0, 129); _sector->data = bytes.slice(0, 128); uint8_t wantChecksum = bytes.reader().seek(128).read_8(); uint8_t gotChecksum = ~sumBytes(_sector->data); - _sector->status = (wantChecksum == gotChecksum) ? Sector::OK : Sector::BAD_CHECKSUM; + _sector->status = + (wantChecksum == gotChecksum) ? Sector::OK : Sector::BAD_CHECKSUM; } private: @@ -83,4 +79,3 @@ std::unique_ptr createTartuDecoder(const DecoderProto& config) { return std::unique_ptr(new TartuDecoder(config)); } - diff --git a/arch/tartu/encoder.cc b/arch/tartu/encoder.cc index 6f70168d6..5502a5312 100644 --- a/arch/tartu/encoder.cc +++ b/arch/tartu/encoder.cc @@ -1,11 +1,11 @@ #include "lib/core/globals.h" -#include "lib/config.h" +#include "lib/config/config.h" #include "lib/decoders/decoders.h" #include "lib/encoders/encoders.h" #include "arch/tartu/tartu.h" #include "lib/core/crc.h" -#include "lib/fluxmap.h" -#include "lib/sector.h" +#include "lib/data/fluxmap.h" +#include "lib/data/sector.h" #include class TartuEncoder : public Encoder diff --git a/arch/tids990/decoder.cc b/arch/tids990/decoder.cc index 9a308c382..0084803f6 100644 --- a/arch/tids990/decoder.cc +++ b/arch/tids990/decoder.cc @@ -3,10 +3,10 @@ #include "lib/encoders/encoders.h" #include "arch/tids990/tids990.h" #include "lib/core/crc.h" -#include "lib/fluxmap.h" +#include "lib/data/fluxmap.h" #include "lib/decoders/fluxmapreader.h" #include "lib/decoders/fluxpattern.h" -#include "lib/sector.h" +#include "lib/data/sector.h" #include #include "fmt/format.h" diff --git a/arch/tids990/encoder.cc b/arch/tids990/encoder.cc index f7d883926..f87d2b8b9 100644 --- a/arch/tids990/encoder.cc +++ b/arch/tids990/encoder.cc @@ -4,7 +4,7 @@ #include "tids990.h" #include "lib/core/crc.h" #include "lib/readerwriter.h" -#include "lib/image.h" +#include "lib/data/image.h" #include "arch/tids990/tids990.pb.h" #include "lib/encoders/encoders.pb.h" #include "fmt/format.h" diff --git a/arch/victor9k/decoder.cc b/arch/victor9k/decoder.cc index e8fecf64e..24a4a91fe 100644 --- a/arch/victor9k/decoder.cc +++ b/arch/victor9k/decoder.cc @@ -1,10 +1,10 @@ #include "lib/core/globals.h" -#include "lib/fluxmap.h" +#include "lib/data/fluxmap.h" #include "lib/decoders/fluxmapreader.h" #include "lib/decoders/fluxpattern.h" #include "protocol.h" #include "lib/decoders/decoders.h" -#include "lib/sector.h" +#include "lib/data/sector.h" #include "victor9k.h" #include "lib/core/crc.h" #include "lib/core/bytes.h" diff --git a/arch/victor9k/encoder.cc b/arch/victor9k/encoder.cc index 13b27c30a..e5387ac3f 100644 --- a/arch/victor9k/encoder.cc +++ b/arch/victor9k/encoder.cc @@ -3,13 +3,13 @@ #include "lib/encoders/encoders.h" #include "victor9k.h" #include "lib/core/crc.h" -#include "lib/sector.h" +#include "lib/data/sector.h" #include "lib/readerwriter.h" -#include "lib/image.h" +#include "lib/data/image.h" #include "fmt/format.h" #include "arch/victor9k/victor9k.pb.h" #include "lib/encoders/encoders.pb.h" -#include "lib/layout.h" +#include "lib/data/layout.h" #include #include "lib/core/bytes.h" diff --git a/arch/zilogmcz/decoder.cc b/arch/zilogmcz/decoder.cc index 1e315cd46..71f0777ac 100644 --- a/arch/zilogmcz/decoder.cc +++ b/arch/zilogmcz/decoder.cc @@ -1,10 +1,10 @@ #include "lib/core/globals.h" -#include "lib/fluxmap.h" +#include "lib/data/fluxmap.h" #include "lib/decoders/fluxmapreader.h" #include "lib/decoders/fluxpattern.h" #include "protocol.h" #include "lib/decoders/decoders.h" -#include "lib/sector.h" +#include "lib/data/sector.h" #include "zilogmcz.h" #include "lib/core/bytes.h" #include "lib/core/crc.h" diff --git a/build.py b/build.py index 07c90e973..6aeb5c1ed 100644 --- a/build.py +++ b/build.py @@ -25,16 +25,13 @@ cxxlibrary( name="lib", srcs=[ - "./lib/config.cc", "./lib/decoders/decoders.cc", + "./lib/fl2.cc", "./lib/decoders/fluxdecoder.cc", "./lib/decoders/fluxmapreader.cc", "./lib/decoders/fluxpattern.cc", "./lib/decoders/fmmfm.cc", "./lib/encoders/encoders.cc", - "./lib/fl2.cc", - "./lib/flags.cc", - "./lib/fluxmap.cc", "./lib/fluxsink/a2rfluxsink.cc", "./lib/fluxsink/aufluxsink.cc", "./lib/fluxsink/fl2fluxsink.cc", @@ -58,7 +55,6 @@ "./lib/fluxsource/scpfluxsource.cc", "./lib/fluxsource/testpatternfluxsource.cc", "./lib/globals.cc", - "./lib/image.cc", "./lib/imagereader/d64imagereader.cc", "./lib/imagereader/d88imagereader.cc", "./lib/imagereader/dimimagereader.cc", @@ -80,12 +76,8 @@ "./lib/imagewriter/ldbsimagewriter.cc", "./lib/imagewriter/nsiimagewriter.cc", "./lib/imagewriter/rawimagewriter.cc", - "./lib/layout.cc", "./lib/ldbs.cc", - "./lib/logger.cc", - "./lib/proto.cc", "./lib/readerwriter.cc", - "./lib/sector.cc", "./lib/usb/applesauceusb.cc", "./lib/usb/fluxengineusb.cc", "./lib/usb/greaseweazle.cc", @@ -156,7 +148,6 @@ "arch/c64/c64.h": "./arch/c64/c64.h", "arch/tartu/tartu.h": "./arch/tartu/tartu.h", "lib/a2r.h": "./lib/a2r.h", - "lib/config.h": "./lib/config.h", "lib/decoders/decoders.h": "./lib/decoders/decoders.h", "lib/decoders/fluxdecoder.h": "./lib/decoders/fluxdecoder.h", "lib/decoders/fluxmapreader.h": "./lib/decoders/fluxmapreader.h", @@ -165,24 +156,16 @@ "lib/encoders/encoders.h": "./lib/encoders/encoders.h", "lib/scp.h": "./lib/scp.h", "lib/fl2.h": "./lib/fl2.h", - "lib/flags.h": "./lib/flags.h", - "lib/flux.h": "./lib/flux.h", - "lib/fluxmap.h": "./lib/fluxmap.h", "lib/fluxsink/fluxsink.h": "./lib/fluxsink/fluxsink.h", "lib/fluxsource/catweasel.h": "lib/fluxsource/catweasel.h", "lib/fluxsource/fluxsource.h": "lib/fluxsource/fluxsource.h", "lib/fluxsource/flx.h": "lib/fluxsource/flx.h", "lib/fluxsource/kryoflux.h": "lib/fluxsource/kryoflux.h", "lib/globals.h": "./lib/globals.h", - "lib/image.h": "./lib/image.h", "lib/imagereader/imagereader.h": "./lib/imagereader/imagereader.h", "lib/imagewriter/imagewriter.h": "./lib/imagewriter/imagewriter.h", - "lib/layout.h": "./lib/layout.h", "lib/ldbs.h": "./lib/ldbs.h", - "lib/logger.h": "./lib/logger.h", - "lib/proto.h": "./lib/proto.h", "lib/readerwriter.h": "./lib/readerwriter.h", - "lib/sector.h": "./lib/sector.h", "lib/usb/applesauce.h": "./lib/usb/applesauce.h", "lib/usb/greaseweazle.h": "./lib/usb/greaseweazle.h", "lib/usb/usb.h": "./lib/usb/usb.h", @@ -197,8 +180,9 @@ "dep/hfsutils", "dep/libusbp", "dep/stb", - "lib+config_proto_lib", "lib/core", + "lib/config", + "lib/data", "lib/fluxsource+proto_lib", ], ) diff --git a/build/c.py b/build/c.py index 40fa5e254..4a09499cb 100644 --- a/build/c.py +++ b/build/c.py @@ -186,7 +186,6 @@ def libraryimpl( name=f"{self.localname}_hdr", ins=ins, outs=outs, - deps=deps, commands=cs, label="CHEADERS", ) diff --git a/dep/fatfs/build.py b/dep/fatfs/build.py index 31a74596c..5016e1f64 100644 --- a/dep/fatfs/build.py +++ b/dep/fatfs/build.py @@ -15,4 +15,5 @@ "ffconf.h": "./source/ffconf.h", "diskio.h": "./source/diskio.h", }, + cflags=["-Wno-pointer-sign"], ) diff --git a/dep/hfsutils/build.py b/dep/hfsutils/build.py index b040ffe14..5df683f75 100644 --- a/dep/hfsutils/build.py +++ b/dep/hfsutils/build.py @@ -22,4 +22,5 @@ "libhfs.h": "./libhfs/libhfs.h", "os.h": "./libhfs/os.h", }, + cflags=["-Wno-pointer-sign"], ) diff --git a/dep/libusbp/build.py b/dep/libusbp/build.py index 491f7b0e7..4743e6951 100644 --- a/dep/libusbp/build.py +++ b/dep/libusbp/build.py @@ -60,7 +60,11 @@ clibrary( name="libusbp", srcs=srcs, - cflags=["-Idep/libusbp/include", "-Idep/libusbp/src"], + cflags=[ + "-Idep/libusbp/include", + "-Idep/libusbp/src", + "-Wno-deprecated-declarations", + ], caller_ldflags=ldflags, deps=deps, hdrs={ diff --git a/lib/build.py b/lib/build.py index a9bd9b462..925fa1c02 100644 --- a/lib/build.py +++ b/lib/build.py @@ -25,38 +25,3 @@ srcs=[".+drive_proto"], deps=[".+common_proto_lib", "+fl2_proto_lib", ".+layout_proto_lib"], ) - -proto( - name="config_proto", - srcs=["./config.proto"], - deps=[ - ".+common_proto", - ".+layout_proto", - ".+drive_proto", - "+fl2_proto", - "lib/fluxsource+proto", - "lib/fluxsink+proto", - "lib/vfs+proto", - "lib/usb+proto", - "lib/encoders+proto", - "lib/decoders+proto", - "lib/imagereader+proto", - "lib/imagewriter+proto", - ], -) - -protocc( - name="config_proto_lib", - srcs=[".+common_proto", ".+config_proto", "arch+proto", "+fl2_proto"], - deps=[ - "lib/fluxsource+proto_lib", - "lib/fluxsink+proto_lib", - "lib/vfs+proto_lib", - "lib/usb+proto_lib", - "lib/encoders+proto_lib", - "lib/decoders+proto_lib", - "lib/imagereader+proto_lib", - "lib/imagewriter+proto_lib", - "lib+drive_proto_lib", - ], -) diff --git a/lib/config/build.py b/lib/config/build.py new file mode 100644 index 000000000..aabd54a43 --- /dev/null +++ b/lib/config/build.py @@ -0,0 +1,56 @@ +from build.c import cxxlibrary +from build.protobuf import proto, protocc + +proto( + name="proto", + srcs=["./config.proto"], + deps=[ + "lib+common_proto", + "lib+layout_proto", + "lib+drive_proto", + "+fl2_proto", + "lib/fluxsource+proto", + "lib/fluxsink+proto", + "lib/vfs+proto", + "lib/usb+proto", + "lib/encoders+proto", + "lib/decoders+proto", + "lib/imagereader+proto", + "lib/imagewriter+proto", + ], +) + +protocc( + name="proto_lib", + srcs=[".+proto", "arch+proto", "+fl2_proto"], + deps=[ + "lib/fluxsource+proto_lib", + "lib/fluxsink+proto_lib", + "lib/vfs+proto_lib", + "lib/usb+proto_lib", + "lib/encoders+proto_lib", + "lib/decoders+proto_lib", + "lib/imagereader+proto_lib", + "lib/imagewriter+proto_lib", + "lib+drive_proto_lib", + ], +) + +cxxlibrary( + name="config", + srcs=[ + "./config.cc", + "./proto.cc", + "./flags.cc", + ], + hdrs={ + "lib/config/config.h": "./config.h", + "lib/config/proto.h": "./proto.h", + "lib/config/flags.h": "./flags.h", + }, + deps=[ + "lib/core", + ".+proto_lib", + "+fmt_lib", + ], +) diff --git a/lib/config.cc b/lib/config/config.cc similarity index 83% rename from lib/config.cc rename to lib/config/config.cc index 441c747c3..3a96df881 100644 --- a/lib/config.cc +++ b/lib/config/config.cc @@ -1,14 +1,8 @@ #include "lib/core/globals.h" -#include "lib/config.h" -#include "lib/proto.h" -#include "lib/logger.h" +#include "lib/config/config.h" +#include "lib/config/proto.h" +#include "lib/core/logger.h" #include "lib/core/utils.h" -#include "lib/imagewriter/imagewriter.h" -#include "lib/imagereader/imagereader.h" -#include "lib/fluxsink/fluxsink.h" -#include "lib/fluxsource/fluxsource.h" -#include "lib/encoders/encoders.h" -#include "lib/decoders/decoders.h" #include #include @@ -166,6 +160,16 @@ static const std::vector imageConstructors = { {".xdf", IMAGETYPE_IMG, MODE_RW}, }; +struct OptionLogMessage +{ + std::string message; +}; + +void renderLogMessage(LogRenderer& r, std::shared_ptr m) +{ + r.newline().add("OPTION:").add(m->message).newline(); +} + Config& globalConfig() { return config; @@ -211,24 +215,10 @@ ConfigProto* Config::combined() _combinedConfig.MergeFrom(_overridesConfig); - /* At this point the config is mostly valid. We're about to make calls - * that will want to call combined() reentrantly, so to prevent infinite - * loop we mark the config as valid now. */ + /* At this point the config is valid, although when fluxsources or + * imagereaders are loaded it may be adjusted again. */ _configValid = true; - - /* We should now be more or less done, but we still need to add in any - * config contributed by the flux source and image readers. This will - * open the files. */ - - if (hasFluxSource()) - _combinedConfig.MergeFrom(getFluxSource()->getExtraConfig()); - if (hasImageReader()) - _combinedConfig.MergeFrom(getImageReader()->getExtraConfig()); - - /* Merge in the overrides once again. */ - - _combinedConfig.MergeFrom(_overridesConfig); } return &_combinedConfig; } @@ -244,11 +234,6 @@ void Config::clear() _baseConfig.Clear(); _overridesConfig.Clear(); _combinedConfig.Clear(); - _fluxSource.reset(); - _verificationFluxSource.reset(); - _imageReader.reset(); - _encoder.reset(); - _decoder.reset(); _appliedOptions.clear(); } @@ -467,8 +452,8 @@ bool Config::isOptionValid(std::string option) void Config::applyOption(const OptionProto& option) { - log("OPTION: {}", - option.has_message() ? option.message() : option.comment()); + log(OptionLogMessage{ + option.has_message() ? option.message() : option.comment()}); _appliedOptions.insert(option.name()); } @@ -581,115 +566,36 @@ bool Config::hasFluxSource() return (*this)->flux_source().type() != FLUXTYPE_NOT_SET; } -std::shared_ptr& Config::getFluxSource() -{ - if (!_fluxSource) - { - if (!hasFluxSource()) - error("no flux source configured"); - - _fluxSource = - std::shared_ptr(FluxSource::create((*this)->flux_source())); - } - return _fluxSource; -} - bool Config::hasVerificationFluxSource() const { return _verificationFluxSourceProto.type() != FLUXTYPE_NOT_SET; } -std::shared_ptr& Config::getVerificationFluxSource() -{ - if (!_verificationFluxSource) - { - if (!hasVerificationFluxSource()) - error("no verification flux source configured"); - - _verificationFluxSource = - std::shared_ptr(FluxSource::create(_verificationFluxSourceProto)); - } - return _verificationFluxSource; -} - bool Config::hasImageReader() { return (*this)->image_reader().type() != IMAGETYPE_NOT_SET; } -std::shared_ptr& Config::getImageReader() -{ - if (!_imageReader) - { - if (!hasImageReader()) - error("no image reader configured"); - - _imageReader = - std::shared_ptr(ImageReader::create((*this)->image_reader())); - } - return _imageReader; -} - bool Config::hasFluxSink() { return (*this)->flux_sink().type() != FLUXTYPE_NOT_SET; } -std::unique_ptr Config::getFluxSink() -{ - if (!hasFluxSink()) - error("no flux sink configured"); - - return FluxSink::create((*this)->flux_sink()); -} - bool Config::hasImageWriter() { return (*this)->image_writer().type() != IMAGETYPE_NOT_SET; } -std::unique_ptr Config::getImageWriter() -{ - if (!hasImageWriter()) - error("no image writer configured"); - - return ImageWriter::create((*this)->image_writer()); -} - bool Config::hasEncoder() { return (*this)->has_encoder(); } -std::shared_ptr& Config::getEncoder() -{ - if (!_encoder) - { - if (!hasEncoder()) - error("no encoder configured"); - - _encoder = Encoder::create((*this)->encoder()); - } - return _encoder; -} - bool Config::hasDecoder() { return _combinedConfig.has_decoder(); } -std::shared_ptr& Config::getDecoder() -{ - if (!_decoder) - { - if (!hasDecoder()) - error("no decoder configured"); - - _decoder = Decoder::create((*this)->decoder()); - } - return _decoder; -} - const std::vector& Config::getFluxFormats() { return fluxConstructors; diff --git a/lib/config.h b/lib/config/config.h similarity index 83% rename from lib/config.h rename to lib/config/config.h index 156e9910f..09c975bb5 100644 --- a/lib/config.h +++ b/lib/config/config.h @@ -3,7 +3,7 @@ #ifdef __cplusplus #include -#include "lib/config.pb.h" +#include "lib/config/config.pb.h" #include "lib/common.pb.h" class ConfigProto; @@ -141,28 +141,21 @@ class Config void setImageReader(std::string value); void setImageWriter(std::string value); - /* Fetch the sources, opening them if necessary. */ + /* Query useful things about the config. */ bool hasFluxSource(); - std::shared_ptr& getFluxSource(); bool hasImageReader(); - std::shared_ptr& getImageReader(); bool hasVerificationFluxSource() const; - std::shared_ptr& getVerificationFluxSource(); - - /* Fetch the encoder and decoder, creating them if necessary. */ + const FluxSourceProto& getVerificationFluxSourceProto() const + { + return _verificationFluxSourceProto; + } bool hasEncoder(); - std::shared_ptr& getEncoder(); bool hasDecoder(); - std::shared_ptr& getDecoder(); - - /* Create the sinks: these are not cached. */ bool hasFluxSink(); - std::unique_ptr getFluxSink(); bool hasImageWriter(); - std::unique_ptr getImageWriter(); public: static const std::vector& getFluxFormats(); @@ -175,11 +168,6 @@ class Config std::set _appliedOptions; bool _configValid; - std::shared_ptr _fluxSource; - std::shared_ptr _imageReader; - std::shared_ptr _verificationFluxSource; - std::shared_ptr _encoder; - std::shared_ptr _decoder; FluxSourceProto _verificationFluxSourceProto; }; diff --git a/lib/config.proto b/lib/config/config.proto similarity index 100% rename from lib/config.proto rename to lib/config/config.proto diff --git a/lib/flags.cc b/lib/config/flags.cc similarity index 97% rename from lib/flags.cc rename to lib/config/flags.cc index 02babdd62..9528b90d7 100644 --- a/lib/flags.cc +++ b/lib/config/flags.cc @@ -1,11 +1,9 @@ #include "lib/core/globals.h" -#include "lib/config.h" -#include "lib/flags.h" -#include "lib/proto.h" +#include "lib/config/config.h" +#include "lib/config/flags.h" +#include "lib/config/proto.h" #include "lib/core/utils.h" -#include "lib/logger.h" -#include "lib/fluxsource/fluxsource.h" -#include "lib/imagereader/imagereader.h" +#include "lib/core/logger.h" #include #include #include diff --git a/lib/flags.h b/lib/config/flags.h similarity index 100% rename from lib/flags.h rename to lib/config/flags.h diff --git a/lib/proto.cc b/lib/config/proto.cc similarity index 99% rename from lib/proto.cc rename to lib/config/proto.cc index 67ccc9b2f..1d258bda5 100644 --- a/lib/proto.cc +++ b/lib/config/proto.cc @@ -1,5 +1,5 @@ #include "lib/core/globals.h" -#include "lib/proto.h" +#include "lib/config/proto.h" #include "lib/common.pb.h" #include diff --git a/lib/proto.h b/lib/config/proto.h similarity index 97% rename from lib/proto.h rename to lib/config/proto.h index 1e2715758..5809e03bb 100644 --- a/lib/proto.h +++ b/lib/config/proto.h @@ -3,7 +3,7 @@ #include #include "lib/common.pb.h" -#include "lib/config.pb.h" +#include "lib/config/config.pb.h" class ProtoPathNotFoundException : public ErrorException { diff --git a/lib/core/build.py b/lib/core/build.py index b549b3a9c..0b0cd9920 100644 --- a/lib/core/build.py +++ b/lib/core/build.py @@ -9,6 +9,8 @@ "./csvreader.cc", "./hexdump.cc", "./utils.cc", + "./logger.cc", + "./logrenderer.cc", ], hdrs={ "lib/core/bitmap.h": "./bitmap.h", @@ -17,6 +19,7 @@ "lib/core/csvreader.h": "./csvreader.h", "lib/core/globals.h": "./globals.h", "lib/core/utils.h": "./utils.h", + "lib/core/logger.h": "./logger.h", }, deps=[ "dep/agg", diff --git a/lib/core/logger.cc b/lib/core/logger.cc new file mode 100644 index 000000000..eca1e7512 --- /dev/null +++ b/lib/core/logger.cc @@ -0,0 +1,56 @@ +#include "lib/core/globals.h" +#include "lib/core/bytes.h" +#include "lib/core/logger.h" + +static bool indented = false; + +static std::function loggerImpl = + [](const auto& message) +{ + static auto r = LogRenderer::create(std::cout); + r->add(message); +}; + +void log(const char* m) +{ + log(std::string(m)); +} + +void log(const AnyLogMessage& message) +{ + loggerImpl(message); +} + +void Logger::setLogger(std::function cb) +{ + loggerImpl = cb; +} + +void renderLogMessage( + LogRenderer& r, std::shared_ptr msg) +{ + r.newline().add("Error:").add(msg->message).newline(); +} + +void renderLogMessage( + LogRenderer& r, std::shared_ptr msg) +{ + r.newline().add("Stop!").newline(); +} + +void renderLogMessage(LogRenderer& r, std::shared_ptr msg) +{ + r.newline().add(*msg).newline(); +} + +LogRenderer& LogRenderer::add(const AnyLogMessage& message) +{ + std::visit( + [&](const auto& arg) + { + renderLogMessage(*this, arg); + }, + message); + + return *this; +} diff --git a/lib/core/logger.h b/lib/core/logger.h new file mode 100644 index 000000000..cd25f7cf7 --- /dev/null +++ b/lib/core/logger.h @@ -0,0 +1,119 @@ +#ifndef LOGGER_H +#define LOGGER_H + +#include "fmt/format.h" +#include + +class DiskFlux; +class TrackDataFlux; +class TrackFlux; +class Sector; +class LogRenderer; + +struct ErrorLogMessage; +struct EmergencyStopMessage; +struct BeginSpeedOperationLogMessage; +struct EndSpeedOperationLogMessage; +struct TrackReadLogMessage; +struct DiskReadLogMessage; +struct BeginReadOperationLogMessage; +struct EndReadOperationLogMessage; +struct BeginWriteOperationLogMessage; +struct EndWriteOperationLogMessage; +struct BeginOperationLogMessage; +struct EndOperationLogMessage; +struct OperationProgressLogMessage; +struct OptionLogMessage; + +struct ErrorLogMessage +{ + std::string message; +}; + +struct EmergencyStopMessage +{ +}; + +extern void renderLogMessage( + LogRenderer& r, std::shared_ptr m); +extern void renderLogMessage( + LogRenderer& r, std::shared_ptr m); +extern void renderLogMessage( + LogRenderer& r, std::shared_ptr m); +extern void renderLogMessage( + LogRenderer& r, std::shared_ptr m); +extern void renderLogMessage( + LogRenderer& r, std::shared_ptr m); +extern void renderLogMessage( + LogRenderer& r, std::shared_ptr m); +extern void renderLogMessage( + LogRenderer& r, std::shared_ptr m); +extern void renderLogMessage( + LogRenderer& r, std::shared_ptr m); +extern void renderLogMessage( + LogRenderer& r, std::shared_ptr m); +extern void renderLogMessage( + LogRenderer& r, std::shared_ptr m); +extern void renderLogMessage( + LogRenderer& r, std::shared_ptr m); +extern void renderLogMessage( + LogRenderer& r, std::shared_ptr m); +extern void renderLogMessage( + LogRenderer& r, std::shared_ptr m); +extern void renderLogMessage( + LogRenderer& r, std::shared_ptr m); + +typedef std::variant, + std::shared_ptr, + std::shared_ptr, + std::shared_ptr, + std::shared_ptr, + std::shared_ptr, + std::shared_ptr, + std::shared_ptr, + std::shared_ptr, + std::shared_ptr, + std::shared_ptr, + std::shared_ptr, + std::shared_ptr, + std::shared_ptr, + std::shared_ptr> + AnyLogMessage; + +extern void log(const char* ptr); +extern void log(const AnyLogMessage& message); + +template +inline void log(const T& message) +{ + log(AnyLogMessage(std::make_shared(message))); +} + +template +inline void log(fmt::string_view fstr, const Args&... args) +{ + log(fmt::format(fstr, args...)); +} + +class LogRenderer +{ +public: + static std::unique_ptr create(std::ostream& stream); + virtual ~LogRenderer() {} + +public: + LogRenderer& add(const AnyLogMessage& message); + +public: + virtual LogRenderer& add(const std::string& m) = 0; + virtual LogRenderer& comma() = 0; + virtual LogRenderer& header(const std::string& h) = 0; + virtual LogRenderer& newline() = 0; +}; + +namespace Logger +{ + extern void setLogger(std::function cb); +} + +#endif diff --git a/lib/core/logrenderer.cc b/lib/core/logrenderer.cc new file mode 100644 index 000000000..2b3fffe10 --- /dev/null +++ b/lib/core/logrenderer.cc @@ -0,0 +1,95 @@ +#include "lib/core/globals.h" +#include "lib/core/bytes.h" +#include "lib/core/logger.h" + +namespace +{ + class LogRendererImpl : public LogRenderer + { + public: + LogRendererImpl(std::ostream& stream): _stream(stream) {} + + private: + void indent() + { + _stream << " "; + _lineLen = 7; + _space = true; + } + + public: + LogRenderer& add(const std::string& m) override + { + if (_newline && !_header) + indent(); + + if (!_space) + { + _stream << ' '; + _lineLen++; + } + + _newline = false; + _header = false; + + _lineLen += m.size(); + if (_lineLen >= 80) + { + _stream << '\n'; + indent(); + } + _stream << m; + _space = !m.empty() && isspace(m[m.size() - 1]); + return *this; + } + + LogRenderer& header(const std::string& m) override + { + if (!_newline) + _stream << '\n'; + _stream << m; + _lineLen = m.size(); + _header = true; + _newline = true; + _space = !m.empty() && isspace(m[m.size() - 1]); + return *this; + } + + LogRenderer& comma() override + { + if (!_newline || _header) + { + _stream << ';'; + _space = false; + } + return *this; + } + + LogRenderer& newline() override + { + if (!_header) + { + if (!_newline) + _stream << '\n'; + + _lineLen = 0; + _header = false; + _newline = true; + _space = true; + } + return *this; + } + + private: + bool _header = false; + bool _newline = false; + bool _space = false; + int _lineLen = 0; + std::ostream& _stream; + }; +} + +std::unique_ptr LogRenderer::create(std::ostream& stream) +{ + return std::make_unique(stream); +} \ No newline at end of file diff --git a/lib/core/utils.cc b/lib/core/utils.cc index 8ccefb8d5..c73c86e90 100644 --- a/lib/core/utils.cc +++ b/lib/core/utils.cc @@ -233,4 +233,3 @@ int findLowestSetBit(uint64_t value) } return bit; } - diff --git a/lib/data/build.py b/lib/data/build.py new file mode 100644 index 000000000..8602091bb --- /dev/null +++ b/lib/data/build.py @@ -0,0 +1,14 @@ +from build.c import cxxlibrary + +cxxlibrary( + name="data", + srcs=["./fluxmap.cc", "./sector.cc", "./layout.cc", "./image.cc"], + hdrs={ + "lib/data/flux.h": "./flux.h", + "lib/data/fluxmap.h": "./fluxmap.h", + "lib/data/sector.h": "./sector.h", + "lib/data/layout.h": "./layout.h", + "lib/data/image.h": "./image.h", + }, + deps=["lib/core", "lib/config", "+protocol"], +) diff --git a/lib/flux.h b/lib/data/flux.h similarity index 100% rename from lib/flux.h rename to lib/data/flux.h diff --git a/lib/data/fluxmap.cc b/lib/data/fluxmap.cc new file mode 100644 index 000000000..5c12c02aa --- /dev/null +++ b/lib/data/fluxmap.cc @@ -0,0 +1,77 @@ +#include "lib/core/globals.h" +#include "lib/data/fluxmap.h" +#include "protocol.h" + +Fluxmap& Fluxmap::appendBytes(const Bytes& bytes) +{ + if (bytes.size() == 0) + return *this; + + return appendBytes(&bytes[0], bytes.size()); +} + +Fluxmap& Fluxmap::appendBytes(const uint8_t* ptr, size_t len) +{ + ByteWriter bw(_bytes); + bw.seekToEnd(); + + while (len--) + { + uint8_t byte = *ptr++; + _ticks += byte & 0x3f; + bw.write_8(byte); + } + + _duration = _ticks * NS_PER_TICK; + return *this; +} + +uint8_t& Fluxmap::findLastByte() +{ + if (_bytes.empty()) + appendByte(0x00); + return *(_bytes.end() - 1); +} + +Fluxmap& Fluxmap::appendInterval(uint32_t ticks) +{ + while (ticks >= 0x3f) + { + appendByte(0x3f); + ticks -= 0x3f; + } + appendByte((uint8_t)ticks); + return *this; +} + +Fluxmap& Fluxmap::appendPulse() +{ + findLastByte() |= 0x80; + return *this; +} + +Fluxmap& Fluxmap::appendIndex() +{ + findLastByte() |= 0x40; + return *this; +} + +Fluxmap& Fluxmap::appendDesync() +{ + appendByte(F_DESYNC); + return *this; +} + +std::vector> Fluxmap::split() const +{ + std::vector> maps; + auto bytesVector = rawBytes().split(F_DESYNC); + + for (auto bytes : bytesVector) + { + if (bytes.size() != 0) + maps.push_back(std::move(std::make_unique(bytes))); + } + + return maps; +} diff --git a/lib/fluxmap.h b/lib/data/fluxmap.h similarity index 80% rename from lib/fluxmap.h rename to lib/data/fluxmap.h index a412aa715..523220070 100644 --- a/lib/fluxmap.h +++ b/lib/data/fluxmap.h @@ -83,19 +83,6 @@ class Fluxmap int threshold_ticks, int amount_ticks); std::vector> split() const; - struct ClockData - { - nanoseconds_t median; - uint32_t noiseFloor; - uint32_t signalLevel; - nanoseconds_t peakStart; - nanoseconds_t peakEnd; - uint32_t buckets[256]; - }; - - ClockData guessClock( - double noiseFloorFactor = 0.01, double signalLevelFactor = 0.05) const; - private: uint8_t& findLastByte(); diff --git a/lib/image.cc b/lib/data/image.cc similarity index 97% rename from lib/image.cc rename to lib/data/image.cc index 4fed53490..9de322503 100644 --- a/lib/image.cc +++ b/lib/data/image.cc @@ -1,7 +1,7 @@ #include "lib/core/globals.h" -#include "lib/sector.h" -#include "lib/image.h" -#include "lib/layout.h" +#include "lib/data/sector.h" +#include "lib/data/image.h" +#include "lib/data/layout.h" Image::Image() {} diff --git a/lib/image.h b/lib/data/image.h similarity index 100% rename from lib/image.h rename to lib/data/image.h diff --git a/lib/layout.cc b/lib/data/layout.cc similarity index 98% rename from lib/layout.cc rename to lib/data/layout.cc index 752436d26..89bec9edf 100644 --- a/lib/layout.cc +++ b/lib/data/layout.cc @@ -1,9 +1,8 @@ #include "lib/core/globals.h" -#include "lib/config.h" -#include "lib/layout.h" -#include "lib/proto.h" -#include "lib/logger.h" -#include "lib/fl2.h" +#include "lib/config/config.h" +#include "lib/data/layout.h" +#include "lib/config/proto.h" +#include "lib/core/logger.h" static unsigned getTrackStep() { diff --git a/lib/layout.h b/lib/data/layout.h similarity index 99% rename from lib/layout.h rename to lib/data/layout.h index f886150c1..34447139b 100644 --- a/lib/layout.h +++ b/lib/data/layout.h @@ -1,7 +1,7 @@ #ifndef LAYOUT_H #define LAYOUT_H -#include "lib/flux.h" +#include "lib/data/flux.h" class SectorListProto; class TrackInfo; diff --git a/lib/sector.cc b/lib/data/sector.cc similarity index 92% rename from lib/sector.cc rename to lib/data/sector.cc index 90a4cdbc7..1f4ab5ab5 100644 --- a/lib/sector.cc +++ b/lib/data/sector.cc @@ -1,7 +1,7 @@ #include "lib/core/globals.h" -#include "lib/flux.h" -#include "lib/sector.h" -#include "lib/layout.h" +#include "lib/data/flux.h" +#include "lib/data/sector.h" +#include "lib/data/layout.h" Sector::Sector(const LogicalLocation& location): LogicalLocation(location), diff --git a/lib/sector.h b/lib/data/sector.h similarity index 94% rename from lib/sector.h rename to lib/data/sector.h index 465bccfa0..8a4a925a1 100644 --- a/lib/sector.h +++ b/lib/data/sector.h @@ -2,7 +2,7 @@ #define SECTOR_H #include "lib/core/bytes.h" -#include "lib/fluxmap.h" +#include "lib/data/fluxmap.h" class Record; class TrackInfo; diff --git a/lib/decoders/decoders.cc b/lib/decoders/decoders.cc index 31b962916..9b2e07e0d 100644 --- a/lib/decoders/decoders.cc +++ b/lib/decoders/decoders.cc @@ -1,6 +1,7 @@ #include "lib/core/globals.h" -#include "lib/flags.h" -#include "lib/fluxmap.h" +#include "lib/config/flags.h" +#include "lib/data/fluxmap.h" +#include "lib/config/config.h" #include "lib/decoders/decoders.h" #include "lib/encoders/encoders.h" #include "arch/agat/agat.h" @@ -23,15 +24,22 @@ #include "arch/victor9k/victor9k.h" #include "arch/zilogmcz/zilogmcz.h" #include "lib/decoders/fluxmapreader.h" -#include "lib/flux.h" +#include "lib/data/flux.h" #include "protocol.h" #include "lib/decoders/rawbits.h" -#include "lib/sector.h" -#include "lib/image.h" +#include "lib/data/sector.h" +#include "lib/data/image.h" #include "lib/decoders/decoders.pb.h" -#include "lib/layout.h" +#include "lib/data/layout.h" #include +std::unique_ptr Decoder::create(Config& config) +{ + if (!config.hasDecoder()) + error("no decoder configured"); + return create(config->decoder()); +} + std::unique_ptr Decoder::create(const DecoderProto& config) { static const std::map create(Config& config); static std::unique_ptr create(const DecoderProto& config); public: diff --git a/lib/decoders/fluxdecoder.cc b/lib/decoders/fluxdecoder.cc index 4afe8d015..525e77093 100644 --- a/lib/decoders/fluxdecoder.cc +++ b/lib/decoders/fluxdecoder.cc @@ -1,5 +1,5 @@ #include "lib/core/globals.h" -#include "lib/fluxmap.h" +#include "lib/data/fluxmap.h" #include "lib/decoders/fluxmapreader.h" #include "lib/decoders/fluxdecoder.h" #include "lib/decoders/decoders.pb.h" diff --git a/lib/decoders/fluxmapreader.cc b/lib/decoders/fluxmapreader.cc index 1ec1be798..55e45ed86 100644 --- a/lib/decoders/fluxmapreader.cc +++ b/lib/decoders/fluxmapreader.cc @@ -1,9 +1,9 @@ #include "lib/core/globals.h" -#include "lib/config.h" -#include "lib/fluxmap.h" +#include "lib/config/config.h" +#include "lib/data/fluxmap.h" #include "lib/decoders/fluxmapreader.h" #include "lib/decoders/fluxpattern.h" -#include "lib/proto.h" +#include "lib/config/proto.h" #include "protocol.h" #include #include @@ -166,3 +166,87 @@ void FluxmapReader::seekToIndexMark() skipToEvent(F_BIT_INDEX); _pos.zeroes = 0; } + +/* + * Tries to guess the clock by finding the smallest common interval. + * Returns nanoseconds. + */ +FluxmapReader::ClockData FluxmapReader::guessClock( + double noiseFloorFactor, double signalLevelFactor) +{ + ClockData data = {}; + + while (!eof()) + { + unsigned interval; + findEvent(F_BIT_PULSE, interval); + if (interval > 0xff) + continue; + data.buckets[interval]++; + } + + uint32_t max = + *std::max_element(std::begin(data.buckets), std::end(data.buckets)); + uint32_t min = + *std::min_element(std::begin(data.buckets), std::end(data.buckets)); + data.noiseFloor = min + (max - min) * noiseFloorFactor; + data.signalLevel = min + (max - min) * signalLevelFactor; + + /* Find a point solidly within the first pulse. */ + + int pulseindex = 0; + while (pulseindex < 256) + { + if (data.buckets[pulseindex] > data.signalLevel) + break; + pulseindex++; + } + if (pulseindex == -1) + return data; + + /* Find the upper and lower bounds of the pulse. */ + + int peaklo = pulseindex; + while (peaklo > 0) + { + if (data.buckets[peaklo] < data.noiseFloor) + break; + peaklo--; + } + + int peakhi = pulseindex; + while (peakhi < 255) + { + if (data.buckets[peakhi] < data.noiseFloor) + break; + peakhi++; + } + + /* Find the total accumulated size of the pulse. */ + + uint32_t total_size = 0; + for (int i = peaklo; i < peakhi; i++) + total_size += data.buckets[i]; + + /* Now find the median. */ + + uint32_t count = 0; + int median = peaklo; + while (median < peakhi) + { + count += data.buckets[median]; + if (count > (total_size / 2)) + break; + median++; + } + + /* + * Okay, the median should now be a good candidate for the (or a) clock. + * How this maps onto the actual clock rate depends on the encoding. + */ + + data.peakStart = peaklo * NS_PER_TICK; + data.peakEnd = peakhi * NS_PER_TICK; + data.median = median * NS_PER_TICK; + return data; +} diff --git a/lib/decoders/fluxmapreader.h b/lib/decoders/fluxmapreader.h index 1f14bd68a..29a730628 100644 --- a/lib/decoders/fluxmapreader.h +++ b/lib/decoders/fluxmapreader.h @@ -1,8 +1,8 @@ #ifndef FLUXMAPREADER_H #define FLUXMAPREADER_H -#include "lib/fluxmap.h" -#include "lib/flags.h" +#include "lib/data/fluxmap.h" +#include "lib/config/flags.h" #include "protocol.h" class DecoderProto; @@ -56,6 +56,19 @@ class FluxmapReader nanoseconds_t seekToPattern( const FluxMatcher& pattern, const FluxMatcher*& matching); + struct ClockData + { + nanoseconds_t median; + uint32_t noiseFloor; + uint32_t signalLevel; + nanoseconds_t peakStart; + nanoseconds_t peakEnd; + uint32_t buckets[256]; + }; + + ClockData guessClock( + double noiseFloorFactor = 0.01, double signalLevelFactor = 0.05); + private: const Fluxmap& _fluxmap; const uint8_t* _bytes; diff --git a/lib/decoders/fluxpattern.cc b/lib/decoders/fluxpattern.cc index 4836b54c0..6cf543ce2 100644 --- a/lib/decoders/fluxpattern.cc +++ b/lib/decoders/fluxpattern.cc @@ -1,8 +1,8 @@ #include "lib/core/globals.h" -#include "lib/config.h" -#include "lib/fluxmap.h" +#include "lib/config/config.h" +#include "lib/data/fluxmap.h" #include "lib/decoders/fluxpattern.h" -#include "lib/proto.h" +#include "lib/config/proto.h" #include "protocol.h" #include #include diff --git a/lib/decoders/fluxpattern.h b/lib/decoders/fluxpattern.h index 262dfd997..3ca2a9927 100644 --- a/lib/decoders/fluxpattern.h +++ b/lib/decoders/fluxpattern.h @@ -1,8 +1,8 @@ #pragma once #include "lib/core/utils.h" -#include "lib/fluxmap.h" -#include "lib/flags.h" +#include "lib/data/fluxmap.h" +#include "lib/config/flags.h" #include "protocol.h" class FluxMatcher; diff --git a/lib/encoders/encoders.cc b/lib/encoders/encoders.cc index 4e8d3249a..bcb93afab 100644 --- a/lib/encoders/encoders.cc +++ b/lib/encoders/encoders.cc @@ -1,6 +1,6 @@ #include "lib/core/globals.h" -#include "lib/config.h" -#include "lib/fluxmap.h" +#include "lib/config/config.h" +#include "lib/data/fluxmap.h" #include "lib/decoders/decoders.h" #include "lib/encoders/encoders.h" #include "arch/agat/agat.h" @@ -16,11 +16,18 @@ #include "arch/tids990/tids990.h" #include "arch/victor9k/victor9k.h" #include "lib/encoders/encoders.pb.h" -#include "lib/proto.h" -#include "lib/layout.h" -#include "lib/image.h" +#include "lib/config/proto.h" +#include "lib/data/layout.h" +#include "lib/data/image.h" #include "protocol.h" +std::unique_ptr Encoder::create(Config& config) +{ + if (!config.hasEncoder()) + error("no encoder configured"); + return create(config->encoder()); +} + std::unique_ptr Encoder::create(const EncoderProto& config) { static const std::map create(Config& config); static std::unique_ptr create(const EncoderProto& config); public: diff --git a/lib/fl2.cc b/lib/fl2.cc index a418e2450..a167df301 100644 --- a/lib/fl2.cc +++ b/lib/fl2.cc @@ -1,6 +1,6 @@ #include "lib/core/globals.h" -#include "lib/proto.h" -#include "lib/fluxmap.h" +#include "lib/config/proto.h" +#include "lib/data/fluxmap.h" #include "lib/fl2.pb.h" #include diff --git a/lib/fluxmap.cc b/lib/fluxmap.cc deleted file mode 100644 index a25d3ef78..000000000 --- a/lib/fluxmap.cc +++ /dev/null @@ -1,164 +0,0 @@ -#include "lib/core/globals.h" -#include "lib/fluxmap.h" -#include "lib/decoders/fluxmapreader.h" -#include "protocol.h" - -Fluxmap& Fluxmap::appendBytes(const Bytes& bytes) -{ - if (bytes.size() == 0) - return *this; - - return appendBytes(&bytes[0], bytes.size()); -} - -Fluxmap& Fluxmap::appendBytes(const uint8_t* ptr, size_t len) -{ - ByteWriter bw(_bytes); - bw.seekToEnd(); - - while (len--) - { - uint8_t byte = *ptr++; - _ticks += byte & 0x3f; - bw.write_8(byte); - } - - _duration = _ticks * NS_PER_TICK; - return *this; -} - -uint8_t& Fluxmap::findLastByte() -{ - if (_bytes.empty()) - appendByte(0x00); - return *(_bytes.end() - 1); -} - -Fluxmap& Fluxmap::appendInterval(uint32_t ticks) -{ - while (ticks >= 0x3f) - { - appendByte(0x3f); - ticks -= 0x3f; - } - appendByte((uint8_t)ticks); - return *this; -} - -Fluxmap& Fluxmap::appendPulse() -{ - findLastByte() |= 0x80; - return *this; -} - -Fluxmap& Fluxmap::appendIndex() -{ - findLastByte() |= 0x40; - return *this; -} - -Fluxmap& Fluxmap::appendDesync() -{ - appendByte(F_DESYNC); - return *this; -} - -std::vector> Fluxmap::split() const -{ - std::vector> maps; - auto bytesVector = rawBytes().split(F_DESYNC); - - for (auto bytes : bytesVector) - { - if (bytes.size() != 0) - maps.push_back(std::move(std::make_unique(bytes))); - } - - return maps; -} - -/* - * Tries to guess the clock by finding the smallest common interval. - * Returns nanoseconds. - */ -Fluxmap::ClockData Fluxmap::guessClock( - double noiseFloorFactor, double signalLevelFactor) const -{ - ClockData data = {}; - - FluxmapReader fr(*this); - - while (!fr.eof()) - { - unsigned interval; - fr.findEvent(F_BIT_PULSE, interval); - if (interval > 0xff) - continue; - data.buckets[interval]++; - } - - uint32_t max = - *std::max_element(std::begin(data.buckets), std::end(data.buckets)); - uint32_t min = - *std::min_element(std::begin(data.buckets), std::end(data.buckets)); - data.noiseFloor = min + (max - min) * noiseFloorFactor; - data.signalLevel = min + (max - min) * signalLevelFactor; - - /* Find a point solidly within the first pulse. */ - - int pulseindex = 0; - while (pulseindex < 256) - { - if (data.buckets[pulseindex] > data.signalLevel) - break; - pulseindex++; - } - if (pulseindex == -1) - return data; - - /* Find the upper and lower bounds of the pulse. */ - - int peaklo = pulseindex; - while (peaklo > 0) - { - if (data.buckets[peaklo] < data.noiseFloor) - break; - peaklo--; - } - - int peakhi = pulseindex; - while (peakhi < 255) - { - if (data.buckets[peakhi] < data.noiseFloor) - break; - peakhi++; - } - - /* Find the total accumulated size of the pulse. */ - - uint32_t total_size = 0; - for (int i = peaklo; i < peakhi; i++) - total_size += data.buckets[i]; - - /* Now find the median. */ - - uint32_t count = 0; - int median = peaklo; - while (median < peakhi) - { - count += data.buckets[median]; - if (count > (total_size / 2)) - break; - median++; - } - - /* - * Okay, the median should now be a good candidate for the (or a) clock. - * How this maps onto the actual clock rate depends on the encoding. - */ - - data.peakStart = peaklo * NS_PER_TICK; - data.peakEnd = peakhi * NS_PER_TICK; - data.median = median * NS_PER_TICK; - return data; -} diff --git a/lib/fluxsink/a2rfluxsink.cc b/lib/fluxsink/a2rfluxsink.cc index 75e320a30..4c821687e 100644 --- a/lib/fluxsink/a2rfluxsink.cc +++ b/lib/fluxsink/a2rfluxsink.cc @@ -1,15 +1,15 @@ #include "lib/core/globals.h" -#include "lib/flags.h" -#include "lib/fluxmap.h" +#include "lib/config/flags.h" +#include "lib/data/fluxmap.h" #include "lib/core/bytes.h" #include "protocol.h" #include "lib/fluxsink/fluxsink.h" #include "lib/decoders/fluxmapreader.h" #include "lib/fluxsink/fluxsink.pb.h" -#include "lib/logger.h" -#include "lib/proto.h" -#include "lib/fluxmap.h" -#include "lib/layout.h" +#include "lib/core/logger.h" +#include "lib/config/proto.h" +#include "lib/data/fluxmap.h" +#include "lib/data/layout.h" #include "lib/a2r.h" #include #include diff --git a/lib/fluxsink/aufluxsink.cc b/lib/fluxsink/aufluxsink.cc index e5303b57b..682759eff 100644 --- a/lib/fluxsink/aufluxsink.cc +++ b/lib/fluxsink/aufluxsink.cc @@ -1,12 +1,12 @@ #include "lib/core/globals.h" -#include "lib/flags.h" -#include "lib/fluxmap.h" +#include "lib/config/flags.h" +#include "lib/data/fluxmap.h" #include "lib/core/bytes.h" #include "protocol.h" #include "lib/fluxsink/fluxsink.h" #include "lib/decoders/fluxmapreader.h" #include "lib/fluxsink/fluxsink.pb.h" -#include "lib/proto.h" +#include "lib/config/proto.h" #include #include #include diff --git a/lib/fluxsink/fl2fluxsink.cc b/lib/fluxsink/fl2fluxsink.cc index d3f4ca3a6..b43da58fb 100644 --- a/lib/fluxsink/fl2fluxsink.cc +++ b/lib/fluxsink/fl2fluxsink.cc @@ -1,13 +1,13 @@ #include "lib/core/globals.h" -#include "lib/config.h" -#include "lib/flags.h" -#include "lib/fluxmap.h" +#include "lib/config/config.h" +#include "lib/config/flags.h" +#include "lib/data/fluxmap.h" #include "lib/core/bytes.h" #include "protocol.h" #include "lib/fluxsink/fluxsink.h" #include "lib/decoders/fluxmapreader.h" #include "lib/fluxsink/fluxsink.pb.h" -#include "lib/proto.h" +#include "lib/config/proto.h" #include "lib/fl2.pb.h" #include "lib/fl2.h" #include diff --git a/lib/fluxsink/fluxsink.cc b/lib/fluxsink/fluxsink.cc index b15cb22af..c8d844ba2 100644 --- a/lib/fluxsink/fluxsink.cc +++ b/lib/fluxsink/fluxsink.cc @@ -1,11 +1,19 @@ #include "lib/core/globals.h" -#include "lib/flags.h" +#include "lib/config/flags.h" +#include "lib/config/config.h" #include "lib/fluxsink/fluxsink.h" -#include "lib/config.pb.h" -#include "lib/proto.h" +#include "lib/config/config.pb.h" +#include "lib/config/proto.h" #include "lib/core/utils.h" #include +std::unique_ptr FluxSink::create(Config& config) +{ + if (!config.hasFluxSink()) + error("no flux sink configured"); + return create(config->flux_sink()); +} + std::unique_ptr FluxSink::create(const FluxSinkProto& config) { switch (config.type()) diff --git a/lib/fluxsink/fluxsink.h b/lib/fluxsink/fluxsink.h index 8f3b4260e..ab12d9dd3 100644 --- a/lib/fluxsink/fluxsink.h +++ b/lib/fluxsink/fluxsink.h @@ -1,7 +1,7 @@ #ifndef FLUXSINK_H #define FLUXSINK_H -#include "lib/flags.h" +#include "lib/config/flags.h" #include class Fluxmap; @@ -12,6 +12,7 @@ class A2RFluxSinkProto; class VcdFluxSinkProto; class ScpFluxSinkProto; class Fl2FluxSinkProto; +class Config; class FluxSink { @@ -34,6 +35,7 @@ class FluxSink static std::unique_ptr createFl2FluxSink( const std::string& filename); + static std::unique_ptr create(Config& config); static std::unique_ptr create(const FluxSinkProto& config); public: diff --git a/lib/fluxsink/hardwarefluxsink.cc b/lib/fluxsink/hardwarefluxsink.cc index b0b4c0dd0..7966ac9cf 100644 --- a/lib/fluxsink/hardwarefluxsink.cc +++ b/lib/fluxsink/hardwarefluxsink.cc @@ -1,9 +1,9 @@ #include "lib/core/globals.h" -#include "lib/config.h" -#include "lib/flags.h" -#include "lib/fluxmap.h" -#include "lib/logger.h" -#include "lib/proto.h" +#include "lib/config/config.h" +#include "lib/config/flags.h" +#include "lib/data/fluxmap.h" +#include "lib/core/logger.h" +#include "lib/config/proto.h" #include "lib/usb/usb.h" #include "lib/fluxsink/fluxsink.h" #include "lib/fluxsink/fluxsink.pb.h" diff --git a/lib/fluxsink/scpfluxsink.cc b/lib/fluxsink/scpfluxsink.cc index ecec9c6c5..68a2be94e 100644 --- a/lib/fluxsink/scpfluxsink.cc +++ b/lib/fluxsink/scpfluxsink.cc @@ -1,17 +1,17 @@ #include "lib/core/globals.h" -#include "lib/config.h" -#include "lib/flags.h" -#include "lib/fluxmap.h" +#include "lib/config/config.h" +#include "lib/config/flags.h" +#include "lib/data/fluxmap.h" #include "lib/core/bytes.h" #include "protocol.h" #include "lib/fluxsink/fluxsink.h" #include "lib/decoders/fluxmapreader.h" #include "lib/fluxsink/fluxsink.pb.h" -#include "lib/proto.h" -#include "lib/fluxmap.h" -#include "lib/layout.h" +#include "lib/config/proto.h" +#include "lib/data/fluxmap.h" +#include "lib/data/layout.h" #include "lib/scp.h" -#include "lib/logger.h" +#include "lib/core/logger.h" #include #include #include diff --git a/lib/fluxsink/vcdfluxsink.cc b/lib/fluxsink/vcdfluxsink.cc index 8485d74f4..f9770d041 100644 --- a/lib/fluxsink/vcdfluxsink.cc +++ b/lib/fluxsink/vcdfluxsink.cc @@ -1,12 +1,12 @@ #include "lib/core/globals.h" -#include "lib/flags.h" -#include "lib/fluxmap.h" +#include "lib/config/flags.h" +#include "lib/data/fluxmap.h" #include "lib/core/bytes.h" #include "protocol.h" #include "lib/fluxsink/fluxsink.h" #include "lib/decoders/fluxmapreader.h" #include "lib/fluxsink/fluxsink.pb.h" -#include "lib/proto.h" +#include "lib/config/proto.h" #include #include #include diff --git a/lib/fluxsource/a2rfluxsource.cc b/lib/fluxsource/a2rfluxsource.cc index 9ae51da32..9e8bf8b07 100644 --- a/lib/fluxsource/a2rfluxsource.cc +++ b/lib/fluxsource/a2rfluxsource.cc @@ -1,8 +1,8 @@ #include "lib/core/globals.h" -#include "lib/fluxmap.h" +#include "lib/data/fluxmap.h" #include "lib/fluxsource/fluxsource.pb.h" #include "lib/fluxsource/fluxsource.h" -#include "lib/proto.h" +#include "lib/config/proto.h" #include struct A2Rv2Flux diff --git a/lib/fluxsource/catweasel.cc b/lib/fluxsource/catweasel.cc index 79b73cf02..0210d5430 100644 --- a/lib/fluxsource/catweasel.cc +++ b/lib/fluxsource/catweasel.cc @@ -1,5 +1,5 @@ #include "lib/core/globals.h" -#include "lib/fluxmap.h" +#include "lib/data/fluxmap.h" #include "lib/core/bytes.h" #include "lib/fluxsource/catweasel.h" diff --git a/lib/fluxsource/cwffluxsource.cc b/lib/fluxsource/cwffluxsource.cc index 5ca86bea3..53d9f28aa 100644 --- a/lib/fluxsource/cwffluxsource.cc +++ b/lib/fluxsource/cwffluxsource.cc @@ -1,9 +1,9 @@ #include "lib/core/globals.h" -#include "lib/fluxmap.h" +#include "lib/data/fluxmap.h" #include "lib/fluxsource/fluxsource.pb.h" #include "lib/fluxsource/fluxsource.h" #include "lib/fluxsource/catweasel.h" -#include "lib/proto.h" +#include "lib/config/proto.h" #include struct CwfHeader diff --git a/lib/fluxsource/dmkfluxsource.cc b/lib/fluxsource/dmkfluxsource.cc index 3a216268e..4771b3727 100644 --- a/lib/fluxsource/dmkfluxsource.cc +++ b/lib/fluxsource/dmkfluxsource.cc @@ -1,10 +1,10 @@ #include "lib/core/globals.h" -#include "lib/fluxmap.h" +#include "lib/data/fluxmap.h" #include "lib/fluxsource/fluxsource.pb.h" #include "lib/fluxsource/fluxsource.h" #include "lib/fluxsource/catweasel.h" -#include "lib/proto.h" -#include "lib/logger.h" +#include "lib/config/proto.h" +#include "lib/core/logger.h" #include #include diff --git a/lib/fluxsource/erasefluxsource.cc b/lib/fluxsource/erasefluxsource.cc index 5fde0a248..2fcc85153 100644 --- a/lib/fluxsource/erasefluxsource.cc +++ b/lib/fluxsource/erasefluxsource.cc @@ -1,5 +1,5 @@ #include "lib/core/globals.h" -#include "lib/fluxmap.h" +#include "lib/data/fluxmap.h" #include "lib/fluxsource/fluxsource.h" #include "lib/fluxsource/fluxsource.pb.h" diff --git a/lib/fluxsource/fl2fluxsource.cc b/lib/fluxsource/fl2fluxsource.cc index eef62ebad..521e236da 100644 --- a/lib/fluxsource/fl2fluxsource.cc +++ b/lib/fluxsource/fl2fluxsource.cc @@ -1,11 +1,11 @@ #include "lib/core/globals.h" -#include "lib/fluxmap.h" +#include "lib/data/fluxmap.h" #include "lib/fluxsource/fluxsource.pb.h" #include "lib/fl2.pb.h" #include "lib/fluxsource/fluxsource.h" -#include "lib/proto.h" +#include "lib/config/proto.h" #include "lib/fl2.h" -#include "lib/fluxmap.h" +#include "lib/data/fluxmap.h" #include class Fl2FluxSourceIterator : public FluxSourceIterator diff --git a/lib/fluxsource/fluxsource.cc b/lib/fluxsource/fluxsource.cc index 26694a194..67a253c41 100644 --- a/lib/fluxsource/fluxsource.cc +++ b/lib/fluxsource/fluxsource.cc @@ -1,11 +1,19 @@ #include "lib/core/globals.h" -#include "lib/flags.h" +#include "lib/config/config.h" +#include "lib/config/flags.h" #include "lib/fluxsource/fluxsource.h" -#include "lib/fluxmap.h" -#include "lib/config.pb.h" -#include "lib/proto.h" +#include "lib/data/fluxmap.h" +#include "lib/config/config.pb.h" +#include "lib/config/proto.h" #include "lib/core/utils.h" +std::unique_ptr FluxSource::create(Config& config) +{ + if (!config.hasFluxSource()) + error("no flux source configured"); + return create(config->flux_source()); +} + std::unique_ptr FluxSource::create(const FluxSourceProto& config) { switch (config.type()) diff --git a/lib/fluxsource/fluxsource.h b/lib/fluxsource/fluxsource.h index d7efb56b9..20f8515fe 100644 --- a/lib/fluxsource/fluxsource.h +++ b/lib/fluxsource/fluxsource.h @@ -1,8 +1,8 @@ #ifndef FLUXSOURCE_H #define FLUXSOURCE_H -#include "lib/flags.h" -#include "lib/config.pb.h" +#include "lib/config/flags.h" +#include "lib/config/config.pb.h" class A2rFluxSourceProto; class CwfFluxSourceProto; @@ -17,6 +17,7 @@ class KryofluxFluxSourceProto; class ScpFluxSourceProto; class TestPatternFluxSourceProto; class FlxFluxSourceProto; +class Config; class FluxSourceIterator { @@ -58,6 +59,7 @@ class FluxSource static std::unique_ptr createMemoryFluxSource( const DiskFlux& flux); + static std::unique_ptr create(Config& config); static std::unique_ptr create(const FluxSourceProto& spec); public: diff --git a/lib/fluxsource/flx.cc b/lib/fluxsource/flx.cc index 3012567f3..110112d56 100644 --- a/lib/fluxsource/flx.cc +++ b/lib/fluxsource/flx.cc @@ -1,5 +1,5 @@ #include "lib/core/globals.h" -#include "lib/fluxmap.h" +#include "lib/data/fluxmap.h" #include "kryoflux.h" #include "protocol.h" #include "lib/fluxsource/flx.h" diff --git a/lib/fluxsource/flxfluxsource.cc b/lib/fluxsource/flxfluxsource.cc index 9b6491e95..3c15e7bf7 100644 --- a/lib/fluxsource/flxfluxsource.cc +++ b/lib/fluxsource/flxfluxsource.cc @@ -1,5 +1,5 @@ #include "lib/core/globals.h" -#include "lib/fluxmap.h" +#include "lib/data/fluxmap.h" #include "lib/fluxsource/fluxsource.pb.h" #include "lib/fluxsource/fluxsource.h" #include "lib/fluxsource/flx.h" diff --git a/lib/fluxsource/hardwarefluxsource.cc b/lib/fluxsource/hardwarefluxsource.cc index 511249089..99af5b8d9 100644 --- a/lib/fluxsource/hardwarefluxsource.cc +++ b/lib/fluxsource/hardwarefluxsource.cc @@ -1,9 +1,9 @@ #include "lib/core/globals.h" -#include "lib/config.h" -#include "lib/flags.h" -#include "lib/fluxmap.h" -#include "lib/logger.h" -#include "lib/proto.h" +#include "lib/config/config.h" +#include "lib/config/flags.h" +#include "lib/data/fluxmap.h" +#include "lib/core/logger.h" +#include "lib/config/proto.h" #include "lib/usb/usb.h" #include "lib/fluxsource/fluxsource.h" #include "lib/fluxsource/fluxsource.pb.h" diff --git a/lib/fluxsource/kryoflux.cc b/lib/fluxsource/kryoflux.cc index 440c605ca..0128de9d1 100644 --- a/lib/fluxsource/kryoflux.cc +++ b/lib/fluxsource/kryoflux.cc @@ -1,5 +1,5 @@ #include "lib/core/globals.h" -#include "lib/fluxmap.h" +#include "lib/data/fluxmap.h" #include "kryoflux.h" #include "protocol.h" #include diff --git a/lib/fluxsource/kryofluxfluxsource.cc b/lib/fluxsource/kryofluxfluxsource.cc index c5c207064..29633ce83 100644 --- a/lib/fluxsource/kryofluxfluxsource.cc +++ b/lib/fluxsource/kryofluxfluxsource.cc @@ -1,5 +1,5 @@ #include "lib/core/globals.h" -#include "lib/fluxmap.h" +#include "lib/data/fluxmap.h" #include "kryoflux.h" #include "lib/fluxsource/fluxsource.pb.h" #include "lib/fluxsource/fluxsource.h" diff --git a/lib/fluxsource/memoryfluxsource.cc b/lib/fluxsource/memoryfluxsource.cc index 5002f9073..58aac6840 100644 --- a/lib/fluxsource/memoryfluxsource.cc +++ b/lib/fluxsource/memoryfluxsource.cc @@ -1,9 +1,9 @@ #include "lib/core/globals.h" -#include "lib/fluxmap.h" -#include "lib/flux.h" +#include "lib/data/fluxmap.h" +#include "lib/data/flux.h" #include "lib/fluxsource/fluxsource.h" -#include "lib/fluxmap.h" -#include "lib/layout.h" +#include "lib/data/fluxmap.h" +#include "lib/data/layout.h" #include class MemoryFluxSourceIterator : public FluxSourceIterator diff --git a/lib/fluxsource/scpfluxsource.cc b/lib/fluxsource/scpfluxsource.cc index feea620e2..de4dd02f8 100644 --- a/lib/fluxsource/scpfluxsource.cc +++ b/lib/fluxsource/scpfluxsource.cc @@ -1,12 +1,12 @@ #include "lib/core/globals.h" -#include "lib/fluxmap.h" +#include "lib/data/fluxmap.h" #include "kryoflux.h" #include "lib/fluxsource/fluxsource.pb.h" #include "lib/core/utils.h" #include "lib/fluxsource/fluxsource.h" #include "lib/scp.h" -#include "lib/proto.h" -#include "lib/logger.h" +#include "lib/config/proto.h" +#include "lib/core/logger.h" #include static int trackno(int strack) diff --git a/lib/fluxsource/testpatternfluxsource.cc b/lib/fluxsource/testpatternfluxsource.cc index 0431092f9..b9a0f71a2 100644 --- a/lib/fluxsource/testpatternfluxsource.cc +++ b/lib/fluxsource/testpatternfluxsource.cc @@ -1,5 +1,5 @@ #include "lib/core/globals.h" -#include "lib/fluxmap.h" +#include "lib/data/fluxmap.h" #include "lib/fluxsource/fluxsource.h" #include "lib/fluxsource/fluxsource.pb.h" diff --git a/lib/globals.cc b/lib/globals.cc index f78508407..e02b28071 100644 --- a/lib/globals.cc +++ b/lib/globals.cc @@ -1,5 +1,5 @@ #include "lib/core/globals.h" -#include "lib/logger.h" +#include "lib/core/logger.h" #include #include diff --git a/lib/globals.h b/lib/globals.h index 96f8f0d68..b8c880928 100644 --- a/lib/globals.h +++ b/lib/globals.h @@ -67,6 +67,6 @@ struct overloaded : Ts... template overloaded(Ts...) -> overloaded; -#include "lib/config.h" +#include "lib/config/config.h" #endif diff --git a/lib/imagereader/d64imagereader.cc b/lib/imagereader/d64imagereader.cc index 51ec4ed60..9bff491b1 100644 --- a/lib/imagereader/d64imagereader.cc +++ b/lib/imagereader/d64imagereader.cc @@ -1,10 +1,10 @@ #include "lib/core/globals.h" -#include "lib/flags.h" -#include "lib/sector.h" +#include "lib/config/flags.h" +#include "lib/data/sector.h" #include "lib/imagereader/imagereader.h" -#include "lib/image.h" -#include "lib/logger.h" -#include "lib/proto.h" +#include "lib/data/image.h" +#include "lib/core/logger.h" +#include "lib/config/proto.h" #include #include #include diff --git a/lib/imagereader/d88imagereader.cc b/lib/imagereader/d88imagereader.cc index 12c932350..9d568203f 100644 --- a/lib/imagereader/d88imagereader.cc +++ b/lib/imagereader/d88imagereader.cc @@ -1,11 +1,11 @@ #include "lib/core/globals.h" -#include "lib/flags.h" -#include "lib/sector.h" +#include "lib/config/flags.h" +#include "lib/data/sector.h" #include "lib/imagereader/imagereader.h" -#include "lib/image.h" -#include "lib/proto.h" -#include "lib/logger.h" -#include "lib/config.pb.h" +#include "lib/data/image.h" +#include "lib/config/proto.h" +#include "lib/core/logger.h" +#include "lib/config/config.pb.h" #include #include #include diff --git a/lib/imagereader/dimimagereader.cc b/lib/imagereader/dimimagereader.cc index 38f770601..4fefc1059 100644 --- a/lib/imagereader/dimimagereader.cc +++ b/lib/imagereader/dimimagereader.cc @@ -1,12 +1,12 @@ #include "lib/core/globals.h" -#include "lib/config.h" -#include "lib/flags.h" -#include "lib/sector.h" +#include "lib/config/config.h" +#include "lib/config/flags.h" +#include "lib/data/sector.h" #include "lib/imagereader/imagereader.h" -#include "lib/image.h" -#include "lib/logger.h" -#include "lib/proto.h" -#include "lib/config.pb.h" +#include "lib/data/image.h" +#include "lib/core/logger.h" +#include "lib/config/proto.h" +#include "lib/config/config.pb.h" #include #include #include diff --git a/lib/imagereader/diskcopyimagereader.cc b/lib/imagereader/diskcopyimagereader.cc index d708e4c95..d0f0fc1b7 100644 --- a/lib/imagereader/diskcopyimagereader.cc +++ b/lib/imagereader/diskcopyimagereader.cc @@ -1,10 +1,10 @@ #include "lib/core/globals.h" -#include "lib/flags.h" -#include "lib/sector.h" +#include "lib/config/flags.h" +#include "lib/data/sector.h" #include "lib/imagereader/imagereader.h" -#include "lib/image.h" -#include "lib/logger.h" -#include "lib/config.pb.h" +#include "lib/data/image.h" +#include "lib/core/logger.h" +#include "lib/config/config.pb.h" #include #include #include diff --git a/lib/imagereader/fdiimagereader.cc b/lib/imagereader/fdiimagereader.cc index 659593102..82b0a74ab 100644 --- a/lib/imagereader/fdiimagereader.cc +++ b/lib/imagereader/fdiimagereader.cc @@ -1,12 +1,12 @@ #include "lib/core/globals.h" -#include "lib/config.h" -#include "lib/flags.h" -#include "lib/sector.h" +#include "lib/config/config.h" +#include "lib/config/flags.h" +#include "lib/data/sector.h" #include "lib/imagereader/imagereader.h" -#include "lib/image.h" -#include "lib/proto.h" -#include "lib/logger.h" -#include "lib/config.pb.h" +#include "lib/data/image.h" +#include "lib/config/proto.h" +#include "lib/core/logger.h" +#include "lib/config/config.pb.h" #include #include #include diff --git a/lib/imagereader/imagereader.cc b/lib/imagereader/imagereader.cc index 71c19fe96..73cd95d77 100644 --- a/lib/imagereader/imagereader.cc +++ b/lib/imagereader/imagereader.cc @@ -1,16 +1,24 @@ #include "lib/core/globals.h" -#include "lib/flags.h" -#include "lib/sector.h" +#include "lib/config/config.h" +#include "lib/config/flags.h" +#include "lib/data/sector.h" #include "lib/imagereader/imagereader.h" #include "lib/core/utils.h" -#include "lib/proto.h" -#include "lib/image.h" -#include "lib/layout.h" -#include "lib/config.pb.h" -#include "lib/logger.h" +#include "lib/config/proto.h" +#include "lib/data/image.h" +#include "lib/data/layout.h" +#include "lib/config/config.pb.h" +#include "lib/core/logger.h" #include #include +std::unique_ptr ImageReader::create(Config& config) +{ + if (!config.hasImageReader()) + error("no image reader configured"); + return create(config->image_reader()); +} + std::unique_ptr ImageReader::create(const ImageReaderProto& config) { switch (config.type()) diff --git a/lib/imagereader/imagereader.h b/lib/imagereader/imagereader.h index 3baa8283b..c48559190 100644 --- a/lib/imagereader/imagereader.h +++ b/lib/imagereader/imagereader.h @@ -1,12 +1,13 @@ #ifndef IMAGEREADER_H #define IMAGEREADER_H -#include "lib/image.h" -#include "lib/config.pb.h" +#include "lib/data/image.h" +#include "lib/config/config.pb.h" class ImageSpec; class ImageReaderProto; class ConfigProto; +class Config; class ImageReader { @@ -15,6 +16,7 @@ class ImageReader virtual ~ImageReader(){}; public: + static std::unique_ptr create(Config& config); static std::unique_ptr create(const ImageReaderProto& config); public: diff --git a/lib/imagereader/imdimagereader.cc b/lib/imagereader/imdimagereader.cc index c1a452c95..7875837fe 100644 --- a/lib/imagereader/imdimagereader.cc +++ b/lib/imagereader/imdimagereader.cc @@ -1,12 +1,12 @@ #include "lib/core/globals.h" -#include "lib/flags.h" -#include "lib/sector.h" +#include "lib/config/flags.h" +#include "lib/data/sector.h" #include "lib/imagereader/imagereader.h" -#include "lib/image.h" -#include "lib/proto.h" -#include "lib/logger.h" -#include "lib/layout.h" -#include "lib/config.pb.h" +#include "lib/data/image.h" +#include "lib/config/proto.h" +#include "lib/core/logger.h" +#include "lib/data/layout.h" +#include "lib/config/config.pb.h" #include #include #include diff --git a/lib/imagereader/imgimagereader.cc b/lib/imagereader/imgimagereader.cc index 2e0b94153..ac76e2207 100644 --- a/lib/imagereader/imgimagereader.cc +++ b/lib/imagereader/imgimagereader.cc @@ -1,14 +1,14 @@ #include "lib/core/globals.h" -#include "lib/config.h" -#include "lib/flags.h" -#include "lib/sector.h" +#include "lib/config/config.h" +#include "lib/config/flags.h" +#include "lib/data/sector.h" #include "lib/imagereader/imagereader.h" -#include "lib/image.h" -#include "lib/logger.h" -#include "lib/config.pb.h" +#include "lib/data/image.h" +#include "lib/core/logger.h" +#include "lib/config/config.pb.h" #include "lib/layout.pb.h" -#include "lib/proto.h" -#include "lib/layout.h" +#include "lib/config/proto.h" +#include "lib/data/layout.h" #include #include #include diff --git a/lib/imagereader/jv3imagereader.cc b/lib/imagereader/jv3imagereader.cc index b3e91c4b6..860aaf224 100644 --- a/lib/imagereader/jv3imagereader.cc +++ b/lib/imagereader/jv3imagereader.cc @@ -1,10 +1,10 @@ #include "lib/core/globals.h" -#include "lib/flags.h" -#include "lib/sector.h" +#include "lib/config/flags.h" +#include "lib/data/sector.h" #include "lib/imagereader/imagereader.h" -#include "lib/image.h" -#include "lib/logger.h" -#include "lib/config.pb.h" +#include "lib/data/image.h" +#include "lib/core/logger.h" +#include "lib/config/config.pb.h" #include #include #include diff --git a/lib/imagereader/nfdimagereader.cc b/lib/imagereader/nfdimagereader.cc index 8c9dc05c9..72693b073 100644 --- a/lib/imagereader/nfdimagereader.cc +++ b/lib/imagereader/nfdimagereader.cc @@ -1,11 +1,11 @@ #include "lib/core/globals.h" -#include "lib/flags.h" -#include "lib/sector.h" +#include "lib/config/flags.h" +#include "lib/data/sector.h" #include "lib/imagereader/imagereader.h" -#include "lib/image.h" -#include "lib/proto.h" -#include "lib/logger.h" -#include "lib/config.pb.h" +#include "lib/data/image.h" +#include "lib/config/proto.h" +#include "lib/core/logger.h" +#include "lib/config/config.pb.h" #include #include #include diff --git a/lib/imagereader/nsiimagereader.cc b/lib/imagereader/nsiimagereader.cc index e02a1960c..fac57cb02 100644 --- a/lib/imagereader/nsiimagereader.cc +++ b/lib/imagereader/nsiimagereader.cc @@ -1,11 +1,11 @@ /* Image reader for Northstar floppy disk images */ #include "lib/core/globals.h" -#include "lib/flags.h" -#include "lib/sector.h" +#include "lib/config/flags.h" +#include "lib/data/sector.h" #include "lib/imagereader/imagereader.h" -#include "lib/image.h" -#include "lib/logger.h" +#include "lib/data/image.h" +#include "lib/core/logger.h" #include "lib/imagereader/imagereader.pb.h" #include #include diff --git a/lib/imagereader/td0imagereader.cc b/lib/imagereader/td0imagereader.cc index 5198ebe85..cfcae93ce 100644 --- a/lib/imagereader/td0imagereader.cc +++ b/lib/imagereader/td0imagereader.cc @@ -1,11 +1,11 @@ #include "lib/core/globals.h" -#include "lib/flags.h" -#include "lib/sector.h" +#include "lib/config/flags.h" +#include "lib/data/sector.h" #include "lib/imagereader/imagereader.h" -#include "lib/image.h" +#include "lib/data/image.h" #include "lib/core/crc.h" -#include "lib/logger.h" -#include "lib/config.pb.h" +#include "lib/core/logger.h" +#include "lib/config/config.pb.h" #include #include #include diff --git a/lib/imagewriter/d64imagewriter.cc b/lib/imagewriter/d64imagewriter.cc index c11419a18..1b4ebb14c 100644 --- a/lib/imagewriter/d64imagewriter.cc +++ b/lib/imagewriter/d64imagewriter.cc @@ -1,11 +1,11 @@ #include "lib/core/globals.h" -#include "lib/flags.h" -#include "lib/sector.h" +#include "lib/config/flags.h" +#include "lib/data/sector.h" #include "lib/imagewriter/imagewriter.h" -#include "lib/image.h" +#include "lib/data/image.h" #include "lib/ldbs.h" -#include "lib/logger.h" -#include "lib/config.pb.h" +#include "lib/core/logger.h" +#include "lib/config/config.pb.h" #include #include #include diff --git a/lib/imagewriter/d88imagewriter.cc b/lib/imagewriter/d88imagewriter.cc index db31252c7..818db0278 100644 --- a/lib/imagewriter/d88imagewriter.cc +++ b/lib/imagewriter/d88imagewriter.cc @@ -1,11 +1,11 @@ #include "lib/core/globals.h" -#include "lib/flags.h" -#include "lib/sector.h" +#include "lib/config/flags.h" +#include "lib/data/sector.h" #include "lib/imagewriter/imagewriter.h" -#include "lib/image.h" -#include "lib/config.pb.h" -#include "lib/layout.h" -#include "lib/logger.h" +#include "lib/data/image.h" +#include "lib/config/config.pb.h" +#include "lib/data/layout.h" +#include "lib/core/logger.h" #include #include #include diff --git a/lib/imagewriter/diskcopyimagewriter.cc b/lib/imagewriter/diskcopyimagewriter.cc index f2ad6ffec..0f66ba44b 100644 --- a/lib/imagewriter/diskcopyimagewriter.cc +++ b/lib/imagewriter/diskcopyimagewriter.cc @@ -1,11 +1,11 @@ #include "lib/core/globals.h" -#include "lib/flags.h" -#include "lib/sector.h" +#include "lib/config/flags.h" +#include "lib/data/sector.h" #include "lib/imagewriter/imagewriter.h" #include "lib/ldbs.h" -#include "lib/image.h" -#include "lib/logger.h" -#include "lib/config.pb.h" +#include "lib/data/image.h" +#include "lib/core/logger.h" +#include "lib/config/config.pb.h" #include #include #include diff --git a/lib/imagewriter/imagewriter.cc b/lib/imagewriter/imagewriter.cc index 519ad7125..f0fd463be 100644 --- a/lib/imagewriter/imagewriter.cc +++ b/lib/imagewriter/imagewriter.cc @@ -1,16 +1,24 @@ #include "lib/core/globals.h" -#include "lib/flags.h" -#include "lib/sector.h" +#include "lib/config/config.h" +#include "lib/config/flags.h" +#include "lib/data/sector.h" #include "lib/imagewriter/imagewriter.h" -#include "lib/image.h" +#include "lib/data/image.h" #include "lib/core/utils.h" -#include "lib/config.pb.h" -#include "lib/proto.h" -#include "lib/layout.h" -#include "lib/logger.h" +#include "lib/config/config.pb.h" +#include "lib/config/proto.h" +#include "lib/data/layout.h" +#include "lib/core/logger.h" #include #include +std::unique_ptr ImageWriter::create(Config& config) +{ + if (!config.hasImageWriter()) + error("no image writer configured"); + return create(config->image_writer()); +} + std::unique_ptr ImageWriter::create(const ImageWriterProto& config) { switch (config.type()) diff --git a/lib/imagewriter/imagewriter.h b/lib/imagewriter/imagewriter.h index cf74b4156..9d7545342 100644 --- a/lib/imagewriter/imagewriter.h +++ b/lib/imagewriter/imagewriter.h @@ -3,6 +3,7 @@ class ImageWriterProto; class Image; +class Config; class ImageWriter { @@ -11,6 +12,7 @@ class ImageWriter virtual ~ImageWriter(){}; public: + static std::unique_ptr create(Config& config); static std::unique_ptr create(const ImageWriterProto& config); static std::unique_ptr createD64ImageWriter( diff --git a/lib/imagewriter/imdimagewriter.cc b/lib/imagewriter/imdimagewriter.cc index fe2249405..1a2537e71 100644 --- a/lib/imagewriter/imdimagewriter.cc +++ b/lib/imagewriter/imdimagewriter.cc @@ -1,11 +1,11 @@ #include "lib/core/globals.h" -#include "lib/flags.h" -#include "lib/sector.h" +#include "lib/config/flags.h" +#include "lib/data/sector.h" #include "lib/imagewriter/imagewriter.h" -#include "lib/image.h" -#include "lib/config.pb.h" -#include "lib/layout.h" -#include "lib/logger.h" +#include "lib/data/image.h" +#include "lib/config/config.pb.h" +#include "lib/data/layout.h" +#include "lib/core/logger.h" #include #include #include diff --git a/lib/imagewriter/imgimagewriter.cc b/lib/imagewriter/imgimagewriter.cc index 9093d6236..7cf05ac22 100644 --- a/lib/imagewriter/imgimagewriter.cc +++ b/lib/imagewriter/imgimagewriter.cc @@ -1,14 +1,14 @@ #include "lib/core/globals.h" -#include "lib/config.h" -#include "lib/flags.h" -#include "lib/sector.h" +#include "lib/config/config.h" +#include "lib/config/flags.h" +#include "lib/data/sector.h" #include "lib/imagewriter/imagewriter.h" -#include "lib/image.h" -#include "lib/proto.h" -#include "lib/config.pb.h" -#include "lib/layout.h" +#include "lib/data/image.h" +#include "lib/config/proto.h" +#include "lib/config/config.pb.h" +#include "lib/data/layout.h" #include "lib/layout.pb.h" -#include "lib/logger.h" +#include "lib/core/logger.h" #include #include #include diff --git a/lib/imagewriter/ldbsimagewriter.cc b/lib/imagewriter/ldbsimagewriter.cc index 32aa373e2..750e55c24 100644 --- a/lib/imagewriter/ldbsimagewriter.cc +++ b/lib/imagewriter/ldbsimagewriter.cc @@ -1,11 +1,11 @@ #include "lib/core/globals.h" -#include "lib/flags.h" -#include "lib/sector.h" +#include "lib/config/flags.h" +#include "lib/data/sector.h" #include "lib/imagewriter/imagewriter.h" #include "lib/ldbs.h" -#include "lib/image.h" -#include "lib/logger.h" -#include "lib/config.pb.h" +#include "lib/data/image.h" +#include "lib/core/logger.h" +#include "lib/config/config.pb.h" #include #include #include diff --git a/lib/imagewriter/nsiimagewriter.cc b/lib/imagewriter/nsiimagewriter.cc index 4720647d0..93ddf706d 100644 --- a/lib/imagewriter/nsiimagewriter.cc +++ b/lib/imagewriter/nsiimagewriter.cc @@ -1,10 +1,10 @@ #include "lib/core/globals.h" -#include "lib/flags.h" -#include "lib/sector.h" +#include "lib/config/flags.h" +#include "lib/data/sector.h" #include "lib/imagewriter/imagewriter.h" #include "lib/decoders/decoders.h" -#include "lib/image.h" -#include "lib/logger.h" +#include "lib/data/image.h" +#include "lib/core/logger.h" #include "arch/northstar/northstar.h" #include "lib/imagewriter/imagewriter.pb.h" #include diff --git a/lib/imagewriter/rawimagewriter.cc b/lib/imagewriter/rawimagewriter.cc index 5c5d91134..d32623ae9 100644 --- a/lib/imagewriter/rawimagewriter.cc +++ b/lib/imagewriter/rawimagewriter.cc @@ -1,10 +1,10 @@ #include "lib/core/globals.h" -#include "lib/flags.h" -#include "lib/sector.h" +#include "lib/config/flags.h" +#include "lib/data/sector.h" #include "lib/imagewriter/imagewriter.h" #include "lib/decoders/decoders.h" -#include "lib/image.h" -#include "lib/logger.h" +#include "lib/data/image.h" +#include "lib/core/logger.h" #include "arch/northstar/northstar.h" #include "lib/imagewriter/imagewriter.pb.h" #include diff --git a/lib/logger.cc b/lib/logger.cc deleted file mode 100644 index e0d9aa0f1..000000000 --- a/lib/logger.cc +++ /dev/null @@ -1,165 +0,0 @@ -#include "lib/core/globals.h" -#include "lib/core/bytes.h" -#include "lib/fluxmap.h" -#include "lib/sector.h" -#include "lib/flux.h" -#include "lib/logger.h" - -static bool indented = false; - -static std::function)> loggerImpl = - [](auto message) -{ - std::cout << Logger::toString(*message) << std::flush; -}; - -void log(std::shared_ptr message) -{ - loggerImpl(message); -} - -void Logger::setLogger( - std::function)> cb) -{ - loggerImpl = cb; -} - -std::string Logger::toString(const AnyLogMessage& message) -{ - std::stringstream stream; - - auto indent = [&]() - { - if (!indented) - stream << " "; - indented = false; - }; - - std::visit( - overloaded{ - /* Fallback --- do nothing */ - [&](const auto& m) - { - }, - - /* Start measuring the rotational speed */ - [&](const BeginSpeedOperationLogMessage& m) - { - indent(); - stream << "Measuring rotational speed...\n"; - }, - - /* Finish measuring the rotational speed */ - [&](const EndSpeedOperationLogMessage& m) - { - indent(); - stream << fmt::format( - "Rotational period is {:.1f}ms ({:.1f}rpm)\n", - m.rotationalPeriod / 1e6, - 60e9 / m.rotationalPeriod); - }, - - /* Indicates that we're starting a write operation. */ - [&](const BeginWriteOperationLogMessage& m) - { - stream << fmt::format("{:2}.{}: ", m.track, m.head); - indented = true; - }, - - /* Indicates that we're starting a read operation. */ - [&](const BeginReadOperationLogMessage& m) - { - stream << fmt::format("{:2}.{}: ", m.track, m.head); - indented = true; - }, - - /* We've just read a track (we might reread it if there are errors) - */ - [&](const TrackReadLogMessage& m) - { - const auto& track = *m.track; - - std::set> rawSectors; - std::set> rawRecords; - for (const auto& trackDataFlux : track.trackDatas) - { - rawSectors.insert(trackDataFlux->sectors.begin(), - trackDataFlux->sectors.end()); - rawRecords.insert(trackDataFlux->records.begin(), - trackDataFlux->records.end()); - } - - nanoseconds_t clock = 0; - for (const auto& sector : rawSectors) - clock += sector->clock; - if (!rawSectors.empty()) - clock /= rawSectors.size(); - - indent(); - stream << fmt::format("{} raw records, {} raw sectors", - rawRecords.size(), - rawSectors.size()); - if (clock != 0) - { - stream << fmt::format("; {:.2f}us clock ({:.0f}kHz)", - clock / 1000.0, - 1000000.0 / clock); - } - - stream << '\n'; - - indent(); - stream << "sectors:"; - - std::vector> sectors( - track.sectors.begin(), track.sectors.end()); - std::sort( - sectors.begin(), sectors.end(), sectorPointerSortPredicate); - - for (const auto& sector : sectors) - stream << fmt::format(" {}.{}.{}{}", - sector->logicalTrack, - sector->logicalSide, - sector->logicalSector, - Sector::statusToChar(sector->status)); - - stream << '\n'; - - int size = 0; - std::set> track_ids; - for (const auto& sector : m.track->sectors) - { - track_ids.insert(std::make_pair( - sector->logicalTrack, sector->logicalSide)); - size += sector->data.size(); - } - - indent(); - stream << fmt::format("{} bytes decoded\n", size); - }, - - /* Large-scale operation start. */ - [&](const BeginOperationLogMessage& m) - { - }, - - /* Large-scale operation end. */ - [&](const EndOperationLogMessage& m) - { - }, - - /* Large-scale operation progress. */ - [&](const OperationProgressLogMessage& m) - { - }, - - /* Generic text message */ - [&](const std::string& s) - { - indent(); - stream << s << '\n'; - }, - }, - message); - return stream.str(); -} diff --git a/lib/logger.h b/lib/logger.h deleted file mode 100644 index ca94f94bc..000000000 --- a/lib/logger.h +++ /dev/null @@ -1,116 +0,0 @@ -#ifndef LOGGER_H -#define LOGGER_H - -#include "fmt/format.h" - -class DiskFlux; -class TrackDataFlux; -class TrackFlux; -class Sector; - -struct ErrorLogMessage -{ - std::string message; -}; - -struct EmergencyStopMessage -{ -}; - -struct BeginSpeedOperationLogMessage -{ -}; - -struct EndSpeedOperationLogMessage -{ - nanoseconds_t rotationalPeriod; -}; - -struct TrackReadLogMessage -{ - std::shared_ptr track; -}; - -struct DiskReadLogMessage -{ - std::shared_ptr disk; -}; - -struct BeginReadOperationLogMessage -{ - unsigned track; - unsigned head; -}; - -struct EndReadOperationLogMessage -{ - std::shared_ptr trackDataFlux; - std::set> sectors; -}; - -struct BeginWriteOperationLogMessage -{ - unsigned track; - unsigned head; -}; - -struct EndWriteOperationLogMessage -{ -}; - -struct BeginOperationLogMessage -{ - std::string message; -}; - -struct EndOperationLogMessage -{ - std::string message; -}; - -struct OperationProgressLogMessage -{ - unsigned progress; -}; - -class TrackFlux; - -typedef std::variant - AnyLogMessage; - -template -inline void log(const T& message) -{ - log(std::make_shared(message)); -} - -extern void log(std::shared_ptr message); - -template -inline void log(fmt::string_view fstr, const Args&... args) -{ - log(fmt::format(fstr, args...)); -} - -namespace Logger -{ - extern void setLogger( - std::function)> cb); - - extern std::string toString(const AnyLogMessage&); -} - -#endif diff --git a/lib/readerwriter.cc b/lib/readerwriter.cc index 604a0ebd1..a85aaea71 100644 --- a/lib/readerwriter.cc +++ b/lib/readerwriter.cc @@ -1,7 +1,7 @@ #include "lib/core/globals.h" -#include "lib/config.h" -#include "lib/flags.h" -#include "lib/fluxmap.h" +#include "lib/config/config.h" +#include "lib/config/flags.h" +#include "lib/data/fluxmap.h" #include "lib/readerwriter.h" #include "protocol.h" #include "lib/usb/usb.h" @@ -11,13 +11,13 @@ #include "lib/fluxsink/fluxsink.h" #include "lib/imagereader/imagereader.h" #include "lib/imagewriter/imagewriter.h" -#include "lib/sector.h" -#include "lib/image.h" -#include "lib/logger.h" -#include "lib/layout.h" +#include "lib/data/sector.h" +#include "lib/data/image.h" +#include "lib/core/logger.h" +#include "lib/data/layout.h" #include "lib/core/utils.h" -#include "lib/config.pb.h" -#include "lib/proto.h" +#include "lib/config/config.pb.h" +#include "lib/config/proto.h" #include enum ReadResult @@ -33,6 +33,134 @@ enum BadSectorsState HAS_BAD_SECTORS }; +/* Log renderers. */ + +/* Start measuring the rotational speed */ +void renderLogMessage( + LogRenderer& r, std::shared_ptr m) +{ + r.newline().add("Measuring rotational speed...").newline(); +} + +/* Finish measuring the rotational speed */ +void renderLogMessage( + LogRenderer& r, std::shared_ptr m) +{ + r.newline() + .add(fmt::format("Rotational period is {:.1f}ms ({:.1f}rpm)", + m->rotationalPeriod / 1e6, + 60e9 / m->rotationalPeriod)) + .newline(); +} + +/* Indicates that we're starting a write operation. */ +void renderLogMessage( + LogRenderer& r, std::shared_ptr m) +{ + r.header(fmt::format("W{:2}.{}: ", m->track, m->head)); +} + +/* Indicates that we're finishing a write operation. */ +void renderLogMessage( + LogRenderer& r, std::shared_ptr m) +{ +} + +/* Indicates that we're starting a read operation. */ +void renderLogMessage( + LogRenderer& r, std::shared_ptr m) +{ + r.header(fmt::format("R{:2}.{}: ", m->track, m->head)); +} + +/* Indicates that we're finishing a read operation. */ +void renderLogMessage( + LogRenderer& r, std::shared_ptr m) +{ +} + +/* We've just read a track (we might reread it if there are errors) + */ +void renderLogMessage( + LogRenderer& r, std::shared_ptr m) +{ + const auto& track = *m->track; + + std::set> rawSectors; + std::set> rawRecords; + for (const auto& trackDataFlux : track.trackDatas) + { + rawSectors.insert( + trackDataFlux->sectors.begin(), trackDataFlux->sectors.end()); + rawRecords.insert( + trackDataFlux->records.begin(), trackDataFlux->records.end()); + } + + nanoseconds_t clock = 0; + for (const auto& sector : rawSectors) + clock += sector->clock; + if (!rawSectors.empty()) + clock /= rawSectors.size(); + + r.comma().add(fmt::format("{} raw records, {} raw sectors", + rawRecords.size(), + rawSectors.size())); + if (clock != 0) + { + r.comma().add(fmt::format( + "{:.2f}us clock ({:.0f}kHz)", clock / 1000.0, 1000000.0 / clock)); + } + + r.newline().add("sectors:"); + + std::vector> sectors( + track.sectors.begin(), track.sectors.end()); + std::sort(sectors.begin(), sectors.end(), sectorPointerSortPredicate); + + for (const auto& sector : sectors) + r.add(fmt::format("{}.{}.{}{}", + sector->logicalTrack, + sector->logicalSide, + sector->logicalSector, + Sector::statusToChar(sector->status))); + + int size = 0; + std::set> track_ids; + for (const auto& sector : m->track->sectors) + { + track_ids.insert( + std::make_pair(sector->logicalTrack, sector->logicalSide)); + size += sector->data.size(); + } + + r.newline().add(fmt::format("{} bytes decoded\n", size)); +} + +/* We've just read a disk. + */ +void renderLogMessage( + LogRenderer& r, std::shared_ptr m) +{ +} + +/* Large-scale operation start. */ +void renderLogMessage( + LogRenderer& r, std::shared_ptr m) +{ +} + +/* Large-scale operation end. */ +void renderLogMessage( + LogRenderer& r, std::shared_ptr m) +{ +} + +/* Large-scale operation progress. */ +void renderLogMessage( + LogRenderer& r, std::shared_ptr m) +{ +} + /* In order to allow rereads in file-based flux sources, we need to persist the * FluxSourceIterator (as that's where the state for which read to return is * held). This class handles that. */ @@ -221,13 +349,14 @@ ReadResult readGroup(FluxSourceIteratorHolder& fluxSourceIteratorHolder, for (unsigned offset = 0; offset < trackInfo->groupSize; offset += Layout::getHeadWidth()) { + log(BeginReadOperationLogMessage{ + trackInfo->physicalTrack + offset, trackInfo->physicalSide}); + auto& fluxSourceIterator = fluxSourceIteratorHolder.getIterator( trackInfo->physicalTrack + offset, trackInfo->physicalSide); if (!fluxSourceIterator.hasNext()) continue; - log(BeginReadOperationLogMessage{ - trackInfo->physicalTrack + offset, trackInfo->physicalSide}); std::shared_ptr fluxmap = fluxSourceIterator.next(); // ->rescale( // 1.0 / globalConfig()->flux_source().rescale()); diff --git a/lib/readerwriter.h b/lib/readerwriter.h index ac26a9e8e..8295e740f 100644 --- a/lib/readerwriter.h +++ b/lib/readerwriter.h @@ -13,6 +13,64 @@ class ImageReader; class ImageWriter; class TrackInfo; class TrackFlux; +class TrackDataFlux; +class Sector; + +struct BeginSpeedOperationLogMessage +{ +}; + +struct EndSpeedOperationLogMessage +{ + nanoseconds_t rotationalPeriod; +}; + +struct TrackReadLogMessage +{ + std::shared_ptr track; +}; + +struct DiskReadLogMessage +{ + std::shared_ptr disk; +}; + +struct BeginReadOperationLogMessage +{ + unsigned track; + unsigned head; +}; + +struct EndReadOperationLogMessage +{ + std::shared_ptr trackDataFlux; + std::set> sectors; +}; + +struct BeginWriteOperationLogMessage +{ + unsigned track; + unsigned head; +}; + +struct EndWriteOperationLogMessage +{ +}; + +struct BeginOperationLogMessage +{ + std::string message; +}; + +struct EndOperationLogMessage +{ + std::string message; +}; + +struct OperationProgressLogMessage +{ + unsigned progress; +}; extern void measureDiskRotation(); diff --git a/lib/usb/applesauceusb.cc b/lib/usb/applesauceusb.cc index c3d0551de..fa15a8239 100644 --- a/lib/usb/applesauceusb.cc +++ b/lib/usb/applesauceusb.cc @@ -1,6 +1,6 @@ #include "lib/globals.h" #include "protocol.h" -#include "lib/fluxmap.h" +#include "lib/data/fluxmap.h" #include "lib/core/bytes.h" #include "lib/usb/usb.pb.h" #include "lib/core/utils.h" diff --git a/lib/usb/fluxengineusb.cc b/lib/usb/fluxengineusb.cc index 02a71e890..7000d7ab5 100644 --- a/lib/usb/fluxengineusb.cc +++ b/lib/usb/fluxengineusb.cc @@ -1,7 +1,7 @@ #include "lib/core/globals.h" #include "usb.h" #include "protocol.h" -#include "lib/fluxmap.h" +#include "lib/data/fluxmap.h" #include "lib/core/bytes.h" #include "libusbp_config.h" #include "libusbp.hpp" diff --git a/lib/usb/greaseweazleusb.cc b/lib/usb/greaseweazleusb.cc index 561fc382e..3b0effaef 100644 --- a/lib/usb/greaseweazleusb.cc +++ b/lib/usb/greaseweazleusb.cc @@ -1,6 +1,6 @@ #include "lib/core/globals.h" #include "protocol.h" -#include "lib/fluxmap.h" +#include "lib/data/fluxmap.h" #include "lib/core/bytes.h" #include "lib/usb/usb.pb.h" #include "greaseweazle.h" diff --git a/lib/usb/serial.cc b/lib/usb/serial.cc index 091888ea3..2e21eb1c5 100644 --- a/lib/usb/serial.cc +++ b/lib/usb/serial.cc @@ -1,7 +1,7 @@ #include "lib/core/globals.h" #include "usb.h" #include "protocol.h" -#include "lib/fluxmap.h" +#include "lib/data/fluxmap.h" #include "lib/core/bytes.h" #include "serial.h" #include diff --git a/lib/usb/usb.cc b/lib/usb/usb.cc index c9e3683cd..e55a6e8dc 100644 --- a/lib/usb/usb.cc +++ b/lib/usb/usb.cc @@ -1,15 +1,15 @@ #include "lib/core/globals.h" -#include "lib/config.h" -#include "lib/flags.h" +#include "lib/config/config.h" +#include "lib/config/flags.h" #include "usb.h" #include "libusbp_config.h" #include "libusbp.hpp" #include "protocol.h" -#include "lib/fluxmap.h" +#include "lib/data/fluxmap.h" #include "lib/core/bytes.h" -#include "lib/proto.h" +#include "lib/config/proto.h" #include "usbfinder.h" -#include "lib/logger.h" +#include "lib/core/logger.h" #include "applesauce.h" #include "greaseweazle.h" diff --git a/lib/usb/usb.h b/lib/usb/usb.h index bed57fcc3..52b218afb 100644 --- a/lib/usb/usb.h +++ b/lib/usb/usb.h @@ -2,7 +2,7 @@ #define USB_H #include "lib/core/bytes.h" -#include "lib/flags.h" +#include "lib/config/flags.h" class Fluxmap; class GreaseweazleProto; diff --git a/lib/usb/usbfinder.cc b/lib/usb/usbfinder.cc index 067cab78b..d9c357e83 100644 --- a/lib/usb/usbfinder.cc +++ b/lib/usb/usbfinder.cc @@ -1,5 +1,5 @@ #include "lib/core/globals.h" -#include "lib/flags.h" +#include "lib/config/flags.h" #include "usb.h" #include "lib/core/bytes.h" #include "usbfinder.h" diff --git a/lib/vfs/acorndfs.cc b/lib/vfs/acorndfs.cc index ab48735f0..73df8d7dc 100644 --- a/lib/vfs/acorndfs.cc +++ b/lib/vfs/acorndfs.cc @@ -1,6 +1,6 @@ #include "lib/core/globals.h" #include "lib/vfs/vfs.h" -#include "lib/config.pb.h" +#include "lib/config/config.pb.h" #include "lib/core/utils.h" class AcornDfsFilesystem; diff --git a/lib/vfs/amigaffs.cc b/lib/vfs/amigaffs.cc index b7555aba1..76b383685 100644 --- a/lib/vfs/amigaffs.cc +++ b/lib/vfs/amigaffs.cc @@ -1,10 +1,10 @@ #include "lib/core/globals.h" -#include "lib/config.h" +#include "lib/config/config.h" #include "lib/vfs/vfs.h" -#include "lib/config.pb.h" -#include "lib/proto.h" -#include "lib/layout.h" -#include "lib/logger.h" +#include "lib/config/config.pb.h" +#include "lib/config/proto.h" +#include "lib/data/layout.h" +#include "lib/core/logger.h" #include "adflib.h" #include "adf_blk.h" @@ -420,7 +420,7 @@ class AmigaFfsFilesystem : public Filesystem static void onAdfWarning(char* message) { - log(message); + log((const char*)message); } static void onAdfError(char* message) diff --git a/lib/vfs/appledos.cc b/lib/vfs/appledos.cc index 536a5bda9..4397f5c72 100644 --- a/lib/vfs/appledos.cc +++ b/lib/vfs/appledos.cc @@ -1,7 +1,7 @@ #include "lib/core/globals.h" #include "lib/vfs/vfs.h" #include "lib/core/utils.h" -#include "lib/config.pb.h" +#include "lib/config/config.pb.h" /* This is described here: * http://fileformats.archiveteam.org/wiki/Apple_DOS_file_system diff --git a/lib/vfs/brother120fs.cc b/lib/vfs/brother120fs.cc index 59925c987..1347f9441 100644 --- a/lib/vfs/brother120fs.cc +++ b/lib/vfs/brother120fs.cc @@ -1,6 +1,6 @@ #include "lib/core/globals.h" #include "lib/vfs/vfs.h" -#include "lib/config.pb.h" +#include "lib/config/config.pb.h" /* Number of sectors on a 120kB disk. */ static constexpr int SECTOR_COUNT = 468; diff --git a/lib/vfs/cbmfs.cc b/lib/vfs/cbmfs.cc index d17701bbe..5ac64fb64 100644 --- a/lib/vfs/cbmfs.cc +++ b/lib/vfs/cbmfs.cc @@ -1,8 +1,8 @@ #include "lib/core/globals.h" -#include "lib/config.h" +#include "lib/config/config.h" #include "lib/vfs/vfs.h" -#include "lib/config.pb.h" -#include "lib/proto.h" +#include "lib/config/config.pb.h" +#include "lib/config/proto.h" #include "lib/core/utils.h" enum diff --git a/lib/vfs/cpmfs.cc b/lib/vfs/cpmfs.cc index fb7c67cd9..17c99e2d0 100644 --- a/lib/vfs/cpmfs.cc +++ b/lib/vfs/cpmfs.cc @@ -1,6 +1,6 @@ #include "lib/core/globals.h" #include "lib/vfs/vfs.h" -#include "lib/config.pb.h" +#include "lib/config/config.pb.h" #include "fmt/format.h" #include diff --git a/lib/vfs/fatfs.cc b/lib/vfs/fatfs.cc index c9826af5d..57a591595 100644 --- a/lib/vfs/fatfs.cc +++ b/lib/vfs/fatfs.cc @@ -1,6 +1,6 @@ #include "lib/core/globals.h" #include "lib/vfs/vfs.h" -#include "lib/config.pb.h" +#include "lib/config/config.pb.h" #include "lib/core/utils.h" extern "C" diff --git a/lib/vfs/fluxsectorinterface.cc b/lib/vfs/fluxsectorinterface.cc index c4ad096c8..c3f5ea584 100644 --- a/lib/vfs/fluxsectorinterface.cc +++ b/lib/vfs/fluxsectorinterface.cc @@ -1,11 +1,11 @@ #include "lib/core/globals.h" #include "lib/vfs/sectorinterface.h" -#include "lib/image.h" +#include "lib/data/image.h" #include "lib/readerwriter.h" #include "lib/decoders/decoders.h" #include "lib/fluxsource/fluxsource.h" -#include "lib/layout.h" -#include "lib/proto.h" +#include "lib/data/layout.h" +#include "lib/config/proto.h" class FluxSectorInterface : public SectorInterface { diff --git a/lib/vfs/imagesectorinterface.cc b/lib/vfs/imagesectorinterface.cc index 07633c1ca..87d8df152 100644 --- a/lib/vfs/imagesectorinterface.cc +++ b/lib/vfs/imagesectorinterface.cc @@ -2,9 +2,9 @@ #include "lib/vfs/sectorinterface.h" #include "lib/imagereader/imagereader.h" #include "lib/imagewriter/imagewriter.h" -#include "lib/image.h" -#include "lib/layout.h" -#include "lib/sector.h" +#include "lib/data/image.h" +#include "lib/data/layout.h" +#include "lib/data/sector.h" #include "lib/core/bytes.h" class ImageSectorInterface : public SectorInterface diff --git a/lib/vfs/lif.cc b/lib/vfs/lif.cc index 2d89d22d2..cb71ac2d8 100644 --- a/lib/vfs/lif.cc +++ b/lib/vfs/lif.cc @@ -1,6 +1,6 @@ #include "lib/core/globals.h" #include "lib/vfs/vfs.h" -#include "lib/config.pb.h" +#include "lib/config/config.pb.h" #include "lib/core/utils.h" #include diff --git a/lib/vfs/machfs.cc b/lib/vfs/machfs.cc index 9dc11e574..568c2f93a 100644 --- a/lib/vfs/machfs.cc +++ b/lib/vfs/machfs.cc @@ -1,6 +1,6 @@ #include "lib/core/globals.h" #include "lib/vfs/vfs.h" -#include "lib/config.pb.h" +#include "lib/config/config.pb.h" #include "lib/vfs/applesingle.h" #include "lib/core/utils.h" diff --git a/lib/vfs/microdos.cc b/lib/vfs/microdos.cc index d95bddc98..2f3631304 100644 --- a/lib/vfs/microdos.cc +++ b/lib/vfs/microdos.cc @@ -1,6 +1,6 @@ #include "lib/core/globals.h" #include "lib/vfs/vfs.h" -#include "lib/config.pb.h" +#include "lib/config/config.pb.h" #include "lib/core/utils.h" #include "fmt/format.h" diff --git a/lib/vfs/philefs.cc b/lib/vfs/philefs.cc index 78e22fda1..f320ce66f 100644 --- a/lib/vfs/philefs.cc +++ b/lib/vfs/philefs.cc @@ -1,6 +1,6 @@ #include "lib/core/globals.h" #include "lib/vfs/vfs.h" -#include "lib/config.pb.h" +#include "lib/config/config.pb.h" #include "lib/core/utils.h" /* Root block: diff --git a/lib/vfs/prodos.cc b/lib/vfs/prodos.cc index 70b0b9d7f..9dc4c322a 100644 --- a/lib/vfs/prodos.cc +++ b/lib/vfs/prodos.cc @@ -1,6 +1,6 @@ #include "lib/core/globals.h" #include "lib/vfs/vfs.h" -#include "lib/config.pb.h" +#include "lib/config/config.pb.h" /* This is described here: * http://fileformats.archiveteam.org/wiki/ProDOS_file_system diff --git a/lib/vfs/roland.cc b/lib/vfs/roland.cc index 97222155a..a0ab03a5f 100644 --- a/lib/vfs/roland.cc +++ b/lib/vfs/roland.cc @@ -1,6 +1,6 @@ #include "lib/core/globals.h" #include "lib/vfs/vfs.h" -#include "lib/config.pb.h" +#include "lib/config/config.pb.h" #include "lib/core/utils.h" #include diff --git a/lib/vfs/smaky6fs.cc b/lib/vfs/smaky6fs.cc index fca3d61ff..1036b6751 100644 --- a/lib/vfs/smaky6fs.cc +++ b/lib/vfs/smaky6fs.cc @@ -1,6 +1,6 @@ #include "lib/core/globals.h" #include "lib/vfs/vfs.h" -#include "lib/config.pb.h" +#include "lib/config/config.pb.h" #include "lib/core/utils.h" /* A directory entry looks like: diff --git a/lib/vfs/vfs.cc b/lib/vfs/vfs.cc index e25eb1b36..f150540b7 100644 --- a/lib/vfs/vfs.cc +++ b/lib/vfs/vfs.cc @@ -1,11 +1,11 @@ #include "lib/core/globals.h" -#include "lib/config.h" +#include "lib/config/config.h" #include "vfs.h" -#include "lib/proto.h" +#include "lib/config/proto.h" #include "lib/layout.pb.h" -#include "lib/layout.h" -#include "lib/image.h" -#include "lib/sector.h" +#include "lib/data/layout.h" +#include "lib/data/image.h" +#include "lib/data/sector.h" #include "lib/vfs/sectorinterface.h" #include "lib/imagereader/imagereader.h" #include "lib/imagewriter/imagewriter.h" @@ -13,7 +13,7 @@ #include "lib/fluxsink/fluxsink.h" #include "lib/decoders/decoders.h" #include "lib/encoders/encoders.h" -#include "lib/config.pb.h" +#include "lib/config/config.pb.h" #include "lib/core/utils.h" Path::Path(const std::vector other): @@ -243,13 +243,13 @@ std::unique_ptr Filesystem::createFilesystemFromConfig() std::shared_ptr encoder; if (globalConfig().hasFluxSource()) { - fluxSource = globalConfig().getFluxSource(); - decoder = globalConfig().getDecoder(); + fluxSource = FluxSource::create(globalConfig()); + decoder = Decoder::create(globalConfig()); } if (globalConfig()->flux_sink().type() == FLUXTYPE_DRIVE) { - fluxSink = globalConfig().getFluxSink(); - encoder = globalConfig().getEncoder(); + fluxSink = FluxSink::create(globalConfig()); + encoder = Encoder::create(globalConfig()); } sectorInterface = SectorInterface::createFluxSectorInterface( fluxSource, fluxSink, encoder, decoder); @@ -260,9 +260,9 @@ std::unique_ptr Filesystem::createFilesystemFromConfig() std::shared_ptr writer; if (globalConfig().hasImageReader() && doesFileExist(globalConfig()->image_reader().filename())) - reader = globalConfig().getImageReader(); + reader = ImageReader::create(globalConfig()); if (globalConfig().hasImageWriter()) - writer = globalConfig().getImageWriter(); + writer = ImageWriter::create(globalConfig()); sectorInterface = SectorInterface::createImageSectorInterface(reader, writer); diff --git a/lib/vfs/zdos.cc b/lib/vfs/zdos.cc index 3a7aba73d..a08f2c047 100644 --- a/lib/vfs/zdos.cc +++ b/lib/vfs/zdos.cc @@ -1,7 +1,7 @@ #include "lib/core/globals.h" #include "lib/vfs/vfs.h" -#include "lib/config.pb.h" -#include "lib/layout.h" +#include "lib/config/config.pb.h" +#include "lib/data/layout.h" #include /* See diff --git a/scripts/build.py b/scripts/build.py index ce72164fc..7154ddc75 100644 --- a/scripts/build.py +++ b/scripts/build.py @@ -12,7 +12,7 @@ def protoencode_single(self, name, srcs: Targets, proto, symbol): srcs=["scripts/protoencode.cc"], cflags=["-DPROTO=" + proto], deps=[ - "lib+config_proto_lib", + "lib/config+proto_lib", "lib/fluxsource+proto_lib", "lib/fluxsink+proto_lib", "tests+test_proto_lib", @@ -62,7 +62,7 @@ def protoencode(self, name, proto, srcs: TargetsMap, symbol): srcs=["./mkdoc.cc"], deps=[ "src/formats", - "lib+config_proto_lib", + "lib/config+proto_lib", "lib/fluxsource+proto_lib", "lib/fluxsink+proto_lib", "+lib", @@ -76,7 +76,7 @@ def protoencode(self, name, proto, srcs: TargetsMap, symbol): srcs=["./mkdocindex.cc"], deps=[ "src/formats", - "lib+config_proto_lib", + "lib/config+proto_lib", "lib/fluxsource+proto_lib", "lib/fluxsink+proto_lib", "+lib", diff --git a/scripts/mkdoc.cc b/scripts/mkdoc.cc index a26ecf9a1..37823e4c5 100644 --- a/scripts/mkdoc.cc +++ b/scripts/mkdoc.cc @@ -1,6 +1,6 @@ #include "lib/globals.h" -#include "lib/proto.h" -#include "lib/flags.h" +#include "lib/config/proto.h" +#include "lib/config/flags.h" #include "fmt/format.h" extern const std::map formats; diff --git a/scripts/mkdocindex.cc b/scripts/mkdocindex.cc index bdf767a07..4f8d94992 100644 --- a/scripts/mkdocindex.cc +++ b/scripts/mkdocindex.cc @@ -1,6 +1,6 @@ #include "lib/globals.h" -#include "lib/proto.h" -#include "lib/flags.h" +#include "lib/config/proto.h" +#include "lib/config/flags.h" #include "fmt/format.h" extern const std::map formats; diff --git a/scripts/protoencode.cc b/scripts/protoencode.cc index 12e4ebe91..556f425e0 100644 --- a/scripts/protoencode.cc +++ b/scripts/protoencode.cc @@ -4,7 +4,7 @@ #include #include "fmt/format.h" #include "tests/testproto.pb.h" -#include "lib/config.pb.h" +#include "lib/config/config.pb.h" #include #include @@ -124,7 +124,7 @@ int main(int argc, const char* argv[]) auto name = argv[3]; output << "#include \"lib/globals.h\"\n" - << "#include \"lib/proto.h\"\n" + << "#include \"lib/config/proto.h\"\n" << "#include \n" << "static const uint8_t " << name << "_rawData[] = {"; diff --git a/src/build.py b/src/build.py index 955cd66ed..9817a746d 100644 --- a/src/build.py +++ b/src/build.py @@ -43,8 +43,9 @@ "dep/stb", "+lib", "lib/core", + "lib/data", "lib/vfs", - "lib+config_proto_lib", + "lib/config", "lib/fluxsource+proto_lib", "src/formats", ], diff --git a/src/fe-analysedriveresponse.cc b/src/fe-analysedriveresponse.cc index 2293dbe18..04cfccbe8 100644 --- a/src/fe-analysedriveresponse.cc +++ b/src/fe-analysedriveresponse.cc @@ -1,13 +1,13 @@ #include "lib/core/globals.h" -#include "lib/config.h" -#include "lib/flags.h" +#include "lib/config/config.h" +#include "lib/config/flags.h" #include "lib/usb/usb.h" #include "lib/core/bitmap.h" -#include "lib/fluxmap.h" +#include "lib/data/fluxmap.h" #include "lib/decoders/fluxmapreader.h" #include "lib/readerwriter.h" #include "protocol.h" -#include "lib/proto.h" +#include "lib/config/proto.h" #include "lib/fluxsink/fluxsink.h" #include "agg2d.h" #include "stb_image_write.h" diff --git a/src/fe-analyselayout.cc b/src/fe-analyselayout.cc index fc0f9a174..b23554cb6 100644 --- a/src/fe-analyselayout.cc +++ b/src/fe-analyselayout.cc @@ -1,12 +1,12 @@ #define _USE_MATH_DEFINES #include "lib/core/globals.h" -#include "lib/config.h" -#include "lib/flags.h" +#include "lib/config/config.h" +#include "lib/config/flags.h" #include "lib/core/bitmap.h" -#include "lib/fluxmap.h" -#include "lib/sector.h" +#include "lib/data/fluxmap.h" +#include "lib/data/sector.h" #include "lib/core/csvreader.h" -#include "lib/image.h" +#include "lib/data/image.h" #include "lib/decoders/fluxmapreader.h" #include "agg2d.h" #include "stb_image_write.h" diff --git a/src/fe-format.cc b/src/fe-format.cc index ad714ea24..c8440a08d 100644 --- a/src/fe-format.cc +++ b/src/fe-format.cc @@ -1,8 +1,8 @@ #include "lib/core/globals.h" -#include "lib/flags.h" -#include "lib/fluxmap.h" -#include "lib/sector.h" -#include "lib/proto.h" +#include "lib/config/flags.h" +#include "lib/data/fluxmap.h" +#include "lib/data/sector.h" +#include "lib/config/proto.h" #include "lib/readerwriter.h" #include "lib/imagereader/imagereader.h" #include "lib/imagewriter/imagewriter.h" diff --git a/src/fe-getdiskinfo.cc b/src/fe-getdiskinfo.cc index ef7be7ffc..28d890bb4 100644 --- a/src/fe-getdiskinfo.cc +++ b/src/fe-getdiskinfo.cc @@ -1,8 +1,8 @@ #include "lib/core/globals.h" -#include "lib/flags.h" -#include "lib/fluxmap.h" -#include "lib/sector.h" -#include "lib/proto.h" +#include "lib/config/flags.h" +#include "lib/data/fluxmap.h" +#include "lib/data/sector.h" +#include "lib/config/proto.h" #include "lib/readerwriter.h" #include "lib/imagereader/imagereader.h" #include "lib/imagewriter/imagewriter.h" diff --git a/src/fe-getfile.cc b/src/fe-getfile.cc index b9bd23420..bc4daf807 100644 --- a/src/fe-getfile.cc +++ b/src/fe-getfile.cc @@ -1,8 +1,8 @@ #include "lib/core/globals.h" -#include "lib/flags.h" -#include "lib/fluxmap.h" -#include "lib/sector.h" -#include "lib/proto.h" +#include "lib/config/flags.h" +#include "lib/data/fluxmap.h" +#include "lib/data/sector.h" +#include "lib/config/proto.h" #include "lib/readerwriter.h" #include "lib/imagereader/imagereader.h" #include "lib/imagewriter/imagewriter.h" diff --git a/src/fe-getfileinfo.cc b/src/fe-getfileinfo.cc index c9567fc7a..801f59807 100644 --- a/src/fe-getfileinfo.cc +++ b/src/fe-getfileinfo.cc @@ -1,8 +1,8 @@ #include "lib/core/globals.h" -#include "lib/flags.h" -#include "lib/fluxmap.h" -#include "lib/sector.h" -#include "lib/proto.h" +#include "lib/config/flags.h" +#include "lib/data/fluxmap.h" +#include "lib/data/sector.h" +#include "lib/config/proto.h" #include "lib/readerwriter.h" #include "lib/imagereader/imagereader.h" #include "lib/imagewriter/imagewriter.h" diff --git a/src/fe-inspect.cc b/src/fe-inspect.cc index c388ec2cd..c4048e509 100644 --- a/src/fe-inspect.cc +++ b/src/fe-inspect.cc @@ -1,16 +1,16 @@ #include "lib/core/globals.h" -#include "lib/config.h" -#include "lib/flags.h" +#include "lib/config/config.h" +#include "lib/config/flags.h" #include "lib/readerwriter.h" -#include "lib/fluxmap.h" +#include "lib/data/fluxmap.h" #include "lib/decoders/fluxmapreader.h" #include "lib/decoders/fluxdecoder.h" #include "lib/decoders/decoders.h" #include "lib/fluxsource/fluxsource.h" #include "protocol.h" #include "lib/decoders/rawbits.h" -#include "lib/sector.h" -#include "lib/proto.h" +#include "lib/data/sector.h" +#include "lib/config/proto.h" static FlagGroup flags; @@ -78,8 +78,8 @@ static nanoseconds_t guessClock(const Fluxmap& fluxmap) if (manualClockRate != 0.0) return manualClockRate * 1000.0; - auto data = - fluxmap.guessClock(noiseFloorFactor.get(), signalLevelFactor.get()); + auto data = FluxmapReader(fluxmap).guessClock( + noiseFloorFactor.get(), signalLevelFactor.get()); std::cout << "\nClock detection histogram:" << std::endl; @@ -135,7 +135,7 @@ int mainInspect(int argc, const char* argv[]) globalConfig().overrides()->mutable_flux_source()->set_type(FLUXTYPE_DRIVE); flags.parseFlagsWithConfigFiles(argc, argv, {}); - auto& fluxSource = globalConfig().getFluxSource(); + auto fluxSource = FluxSource::create(globalConfig()); const auto fluxmap = fluxSource->readFlux(trackFlag, headFlag)->next(); std::cout << fmt::format("0x{:x} bytes of data in {:.3f}ms\n", diff --git a/src/fe-ls.cc b/src/fe-ls.cc index 52b5373b7..0854cdb9d 100644 --- a/src/fe-ls.cc +++ b/src/fe-ls.cc @@ -1,8 +1,8 @@ #include "lib/core/globals.h" -#include "lib/flags.h" -#include "lib/fluxmap.h" -#include "lib/sector.h" -#include "lib/proto.h" +#include "lib/config/flags.h" +#include "lib/data/fluxmap.h" +#include "lib/data/sector.h" +#include "lib/config/proto.h" #include "lib/readerwriter.h" #include "lib/decoders/decoders.h" #include "lib/fluxsource/fluxsource.h" diff --git a/src/fe-merge.cc b/src/fe-merge.cc index 0c915dcb8..e971f4e7c 100644 --- a/src/fe-merge.cc +++ b/src/fe-merge.cc @@ -1,9 +1,9 @@ #include "lib/core/globals.h" -#include "lib/flags.h" -#include "lib/fluxmap.h" -#include "lib/sector.h" -#include "lib/proto.h" -#include "lib/flux.h" +#include "lib/config/flags.h" +#include "lib/data/fluxmap.h" +#include "lib/data/sector.h" +#include "lib/config/proto.h" +#include "lib/data/flux.h" #include "lib/fl2.h" #include "lib/fl2.pb.h" #include "src/fluxengine.h" diff --git a/src/fe-mkdir.cc b/src/fe-mkdir.cc index 27dbdbd1c..fe824ba26 100644 --- a/src/fe-mkdir.cc +++ b/src/fe-mkdir.cc @@ -1,6 +1,6 @@ #include "lib/core/globals.h" -#include "lib/flags.h" -#include "lib/proto.h" +#include "lib/config/flags.h" +#include "lib/config/proto.h" #include "fluxengine.h" #include "lib/vfs/vfs.h" #include "lib/core/utils.h" diff --git a/src/fe-mv.cc b/src/fe-mv.cc index 5a8d45cc5..2907c3a2b 100644 --- a/src/fe-mv.cc +++ b/src/fe-mv.cc @@ -1,6 +1,6 @@ #include "lib/core/globals.h" -#include "lib/flags.h" -#include "lib/proto.h" +#include "lib/config/flags.h" +#include "lib/config/proto.h" #include "fluxengine.h" #include "lib/vfs/vfs.h" #include "lib/core/utils.h" diff --git a/src/fe-putfile.cc b/src/fe-putfile.cc index 3846448c6..704663bcb 100644 --- a/src/fe-putfile.cc +++ b/src/fe-putfile.cc @@ -1,8 +1,8 @@ #include "lib/core/globals.h" -#include "lib/flags.h" -#include "lib/fluxmap.h" -#include "lib/sector.h" -#include "lib/proto.h" +#include "lib/config/flags.h" +#include "lib/data/fluxmap.h" +#include "lib/data/sector.h" +#include "lib/config/proto.h" #include "lib/readerwriter.h" #include "lib/imagereader/imagereader.h" #include "lib/imagewriter/imagewriter.h" diff --git a/src/fe-rawread.cc b/src/fe-rawread.cc index 7baa44ea6..d4e14b448 100644 --- a/src/fe-rawread.cc +++ b/src/fe-rawread.cc @@ -1,11 +1,11 @@ #include "lib/core/globals.h" -#include "lib/config.h" -#include "lib/flags.h" +#include "lib/config/config.h" +#include "lib/config/flags.h" #include "lib/readerwriter.h" -#include "lib/fluxmap.h" +#include "lib/data/fluxmap.h" #include "lib/decoders/decoders.h" -#include "lib/sector.h" -#include "lib/proto.h" +#include "lib/data/sector.h" +#include "lib/config/proto.h" #include "lib/fluxsink/fluxsink.h" #include "lib/fluxsource/fluxsource.h" #include "lib/imagewriter/imagewriter.h" @@ -60,9 +60,8 @@ int mainRawRead(int argc, const char* argv[]) if (globalConfig()->flux_sink().type() == FLUXTYPE_DRIVE) error("you can't use rawread to write to hardware"); - std::shared_ptr fluxSource = globalConfig().getFluxSource(); - std::unique_ptr fluxSink( - FluxSink::create(globalConfig()->flux_sink())); + auto fluxSource = FluxSource::create(globalConfig()); + auto fluxSink = FluxSink::create(globalConfig()); rawReadDiskCommand(*fluxSource, *fluxSink); diff --git a/src/fe-rawwrite.cc b/src/fe-rawwrite.cc index 39821c572..9c8ea2907 100644 --- a/src/fe-rawwrite.cc +++ b/src/fe-rawwrite.cc @@ -1,10 +1,10 @@ #include "lib/core/globals.h" -#include "lib/config.h" -#include "lib/flags.h" +#include "lib/config/config.h" +#include "lib/config/flags.h" #include "lib/readerwriter.h" -#include "lib/fluxmap.h" -#include "lib/sector.h" -#include "lib/proto.h" +#include "lib/data/fluxmap.h" +#include "lib/data/sector.h" +#include "lib/config/proto.h" #include "lib/fluxsource/fluxsource.h" #include "lib/fluxsink/fluxsink.h" #include "fluxengine.h" @@ -66,9 +66,8 @@ int mainRawWrite(int argc, const char* argv[]) if (globalConfig()->flux_source().type() == FLUXTYPE_DRIVE) error("you can't use rawwrite to read from hardware"); - auto& fluxSource = globalConfig().getFluxSource(); - std::unique_ptr fluxSink( - FluxSink::create(globalConfig()->flux_sink())); + auto fluxSource = FluxSource::create(globalConfig()); + auto fluxSink = FluxSink::create(globalConfig()); writeRawDiskCommand(*fluxSource, *fluxSink); return 0; diff --git a/src/fe-read.cc b/src/fe-read.cc index c9c571e5d..92ed83ebd 100644 --- a/src/fe-read.cc +++ b/src/fe-read.cc @@ -1,11 +1,11 @@ #include "lib/core/globals.h" -#include "lib/config.h" -#include "lib/flags.h" +#include "lib/config/config.h" +#include "lib/config/flags.h" #include "lib/readerwriter.h" -#include "lib/fluxmap.h" +#include "lib/data/fluxmap.h" #include "lib/decoders/decoders.h" -#include "lib/sector.h" -#include "lib/proto.h" +#include "lib/data/sector.h" +#include "lib/config/proto.h" #include "lib/fluxsource/fluxsource.h" #include "lib/fluxsink/fluxsink.h" #include "lib/imagewriter/imagewriter.h" @@ -65,9 +65,9 @@ int mainRead(int argc, const char* argv[]) if (globalConfig()->decoder().copy_flux_to().type() == FLUXTYPE_DRIVE) error("you cannot copy flux to a hardware device"); - auto& fluxSource = globalConfig().getFluxSource(); - auto& decoder = globalConfig().getDecoder(); - auto writer = globalConfig().getImageWriter(); + auto fluxSource = FluxSource::create(globalConfig()); + auto decoder = Decoder::create(globalConfig()); + auto writer = ImageWriter::create(globalConfig()); readDiskCommand(*fluxSource, *decoder, *writer); diff --git a/src/fe-rm.cc b/src/fe-rm.cc index dec3229fe..3bcff7cf7 100644 --- a/src/fe-rm.cc +++ b/src/fe-rm.cc @@ -1,6 +1,6 @@ #include "lib/core/globals.h" -#include "lib/flags.h" -#include "lib/proto.h" +#include "lib/config/flags.h" +#include "lib/config/proto.h" #include "fluxengine.h" #include "lib/vfs/vfs.h" #include "lib/core/utils.h" diff --git a/src/fe-rpm.cc b/src/fe-rpm.cc index 2fd4c45f7..f54c294fa 100644 --- a/src/fe-rpm.cc +++ b/src/fe-rpm.cc @@ -1,10 +1,10 @@ #include "lib/core/globals.h" -#include "lib/config.h" -#include "lib/flags.h" +#include "lib/config/config.h" +#include "lib/config/flags.h" #include "lib/usb/usb.h" #include "lib/fluxsource/fluxsource.h" #include "protocol.h" -#include "lib/proto.h" +#include "lib/config/proto.h" static FlagGroup flags; diff --git a/src/fe-seek.cc b/src/fe-seek.cc index 5ffd161d3..8f933716f 100644 --- a/src/fe-seek.cc +++ b/src/fe-seek.cc @@ -1,9 +1,9 @@ #include "lib/core/globals.h" -#include "lib/config.h" -#include "lib/flags.h" +#include "lib/config/config.h" +#include "lib/config/flags.h" #include "lib/usb/usb.h" #include "lib/fluxsource/fluxsource.h" -#include "lib/proto.h" +#include "lib/config/proto.h" #include "protocol.h" static FlagGroup flags; diff --git a/src/fe-testbandwidth.cc b/src/fe-testbandwidth.cc index 7d0618a39..99b58e85a 100644 --- a/src/fe-testbandwidth.cc +++ b/src/fe-testbandwidth.cc @@ -1,5 +1,5 @@ #include "lib/core/globals.h" -#include "lib/flags.h" +#include "lib/config/flags.h" #include "lib/usb/usb.h" static FlagGroup flags; diff --git a/src/fe-testdevices.cc b/src/fe-testdevices.cc index 373d525b5..25b60920f 100644 --- a/src/fe-testdevices.cc +++ b/src/fe-testdevices.cc @@ -1,5 +1,5 @@ #include "lib/core/globals.h" -#include "lib/flags.h" +#include "lib/config/flags.h" #include "lib/usb/usbfinder.h" #include "fmt/format.h" diff --git a/src/fe-testvoltages.cc b/src/fe-testvoltages.cc index b50073839..7c91c3bd2 100644 --- a/src/fe-testvoltages.cc +++ b/src/fe-testvoltages.cc @@ -1,5 +1,5 @@ #include "lib/core/globals.h" -#include "lib/flags.h" +#include "lib/config/flags.h" #include "lib/usb/usb.h" #include "protocol.h" diff --git a/src/fe-write.cc b/src/fe-write.cc index 514e8655d..1ff293fc9 100644 --- a/src/fe-write.cc +++ b/src/fe-write.cc @@ -1,12 +1,12 @@ #include "lib/core/globals.h" -#include "lib/config.h" -#include "lib/flags.h" +#include "lib/config/config.h" +#include "lib/config/flags.h" #include "lib/readerwriter.h" -#include "lib/fluxmap.h" +#include "lib/data/fluxmap.h" #include "lib/decoders/decoders.h" #include "lib/encoders/encoders.h" -#include "lib/sector.h" -#include "lib/proto.h" +#include "lib/data/sector.h" +#include "lib/config/proto.h" #include "lib/fluxsink/fluxsink.h" #include "lib/fluxsource/fluxsource.h" #include "arch/brother/brother.h" @@ -68,18 +68,19 @@ int mainWrite(int argc, const char* argv[]) flags.parseFlagsWithConfigFiles(argc, argv, formats); - auto& reader = globalConfig().getImageReader(); + auto reader = ImageReader::create(globalConfig()); std::shared_ptr image = reader->readMappedImage(); - auto encoder = globalConfig().getEncoder(); - auto fluxSink = globalConfig().getFluxSink(); + auto encoder = Encoder::create(globalConfig()); + auto fluxSink = FluxSink::create(globalConfig()); std::shared_ptr decoder; std::shared_ptr verificationFluxSource; if (globalConfig().hasDecoder() && fluxSink->isHardware() && verify) { - decoder = globalConfig().getDecoder(); - verificationFluxSource = globalConfig().getVerificationFluxSource(); + decoder = Decoder::create(globalConfig()); + verificationFluxSource = + FluxSource::create(globalConfig().getVerificationFluxSourceProto()); } writeDiskCommand(*image, diff --git a/src/fileutils.cc b/src/fileutils.cc index 921910e58..f588d05f1 100644 --- a/src/fileutils.cc +++ b/src/fileutils.cc @@ -1,9 +1,9 @@ #include "lib/core/globals.h" -#include "lib/config.h" -#include "lib/flags.h" -#include "lib/fluxmap.h" -#include "lib/sector.h" -#include "lib/proto.h" +#include "lib/config/config.h" +#include "lib/config/flags.h" +#include "lib/data/fluxmap.h" +#include "lib/data/sector.h" +#include "lib/config/proto.h" #include "lib/readerwriter.h" #include "lib/fluxsource/fluxsource.h" #include "lib/fluxsink/fluxsink.h" diff --git a/src/fluxengine.cc b/src/fluxengine.cc index 566889986..b75731eda 100644 --- a/src/fluxengine.cc +++ b/src/fluxengine.cc @@ -1,5 +1,5 @@ #include "lib/core/globals.h" -#include "lib/proto.h" +#include "lib/config/proto.h" #include "fmt/format.h" typedef int command_cb(int agrc, const char* argv[]); diff --git a/src/formats/build.py b/src/formats/build.py index f63d562c0..30b6e3503 100644 --- a/src/formats/build.py +++ b/src/formats/build.py @@ -62,7 +62,7 @@ cxxlibrary( name="formats", srcs=[".+formats_cc", ".+table_cc"], - deps=["+lib", "lib+config_proto_lib"], + deps=["+lib", "lib/config+proto_lib"], ) export( diff --git a/src/gui/browserpanel.cc b/src/gui/browserpanel.cc index 914ed323e..3f16d516d 100644 --- a/src/gui/browserpanel.cc +++ b/src/gui/browserpanel.cc @@ -1,9 +1,9 @@ #include "lib/core/globals.h" -#include "lib/fluxmap.h" +#include "lib/data/fluxmap.h" #include "lib/vfs/vfs.h" #include "lib/core/utils.h" #include "gui.h" -#include "lib/layout.h" +#include "lib/data/layout.h" #include "filesystemmodel.h" #include "fileviewerwindow.h" #include "textviewerwindow.h" diff --git a/src/gui/build.py b/src/gui/build.py index 055cd931c..8daca832a 100644 --- a/src/gui/build.py +++ b/src/gui/build.py @@ -32,6 +32,8 @@ name="gui", srcs=[ "./browserpanel.cc", + "./context.cc", + "./context.h", "./customstatusbar.cc", "./explorerpanel.cc", "./filesystemmodel.cc", @@ -63,8 +65,9 @@ "extras+icons", "+lib", "lib/core", + "lib/data", "lib/vfs", - "lib+config_proto_lib", + "lib/config", "lib/fluxsource+proto_lib", "src/formats", "src/gui/drivetypes", diff --git a/src/gui/context.cc b/src/gui/context.cc new file mode 100644 index 000000000..13fec69c4 --- /dev/null +++ b/src/gui/context.cc @@ -0,0 +1,95 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include "context.h" +#include "gui.h" + +namespace +{ + class ContextImpl : public Context + { + public: + FluxSource* GetFluxSource() override + { + if (!_fluxSource) + { + _fluxSource = FluxSource::create(globalConfig()); + } + return _fluxSource.get(); + } + + FluxSource* GetVerificationFluxSource() override + { + if (!_verificationFluxSource) + { + _verificationFluxSource = FluxSource::create( + globalConfig().getVerificationFluxSourceProto()); + } + return _verificationFluxSource.get(); + } + + FluxSink* GetFluxSink() override + { + if (!_fluxSink) + { + _fluxSink = FluxSink::create(globalConfig()); + } + return _fluxSink.get(); + } + + ImageReader* GetImageReader() override + { + if (!_imageReader) + { + _imageReader = ImageReader::create(globalConfig()); + } + return _imageReader.get(); + } + + ImageWriter* GetImageWriter() override + { + if (!_imageWriter) + { + _imageWriter = ImageWriter::create(globalConfig()); + } + return _imageWriter.get(); + } + + Encoder* GetEncoder() override + { + if (!_encoder) + { + _encoder = Encoder::create(globalConfig()); + } + return _encoder.get(); + } + + Decoder* GetDecoder() override + { + if (!_decoder) + { + _decoder = Decoder::create(globalConfig()); + } + return _decoder.get(); + } + + private: + std::unique_ptr _fluxSource; + std::unique_ptr _verificationFluxSource; + std::unique_ptr _fluxSink; + std::unique_ptr _imageReader; + std::unique_ptr _imageWriter; + std::unique_ptr _encoder; + std::unique_ptr _decoder; + }; +} + +std::unique_ptr Context::Create() +{ + return std::make_unique(); +} diff --git a/src/gui/context.h b/src/gui/context.h new file mode 100644 index 000000000..63306b2cf --- /dev/null +++ b/src/gui/context.h @@ -0,0 +1,25 @@ +#pragma once + +class FluxSource; +class FluxSink; +class ImageReader; +class ImageWriter; +class Encoder; +class Decoder; + +class Context +{ +public: + virtual ~Context() {} + +public: + virtual FluxSource* GetFluxSource() = 0; + virtual FluxSource* GetVerificationFluxSource() = 0; + virtual FluxSink* GetFluxSink() = 0; + virtual ImageReader* GetImageReader() = 0; + virtual ImageWriter* GetImageWriter() = 0; + virtual Encoder* GetEncoder() = 0; + virtual Decoder* GetDecoder() = 0; + + static std::unique_ptr Create(); +}; \ No newline at end of file diff --git a/src/gui/explorerpanel.cc b/src/gui/explorerpanel.cc index adf776399..e972cedd3 100644 --- a/src/gui/explorerpanel.cc +++ b/src/gui/explorerpanel.cc @@ -1,12 +1,13 @@ #include "lib/core/globals.h" -#include "lib/config.h" -#include "lib/fluxmap.h" +#include "lib/config/config.h" +#include "lib/data/fluxmap.h" #include "lib/fluxsource/fluxsource.h" #include "lib/decoders/decoders.h" -#include "lib/proto.h" +#include "lib/config/proto.h" #include "gui.h" #include "layout.h" #include "jobqueue.h" +#include "context.h" static Bytes fakeBits(const std::vector& bits) { @@ -158,8 +159,8 @@ class ExplorerPanelImpl : if (!_explorerFluxmap || (desiredTrack != _explorerTrack) || (desiredSide != _explorerSide)) { - _explorerFluxmap = globalConfig() - .getFluxSource() + _explorerFluxmap = GetContext() + .GetFluxSource() ->readFlux(desiredTrack, desiredSide) ->next(); _explorerTrack = desiredTrack; diff --git a/src/gui/fileviewerwindow.cc b/src/gui/fileviewerwindow.cc index f06fe878f..65264bed0 100644 --- a/src/gui/fileviewerwindow.cc +++ b/src/gui/fileviewerwindow.cc @@ -2,7 +2,7 @@ #include "lib/core/utils.h" #include "lib/core/bytes.h" #include "gui.h" -#include "lib/layout.h" +#include "lib/data/layout.h" #include "fileviewerwindow.h" FileViewerWindow::FileViewerWindow( diff --git a/src/gui/fluxviewercontrol.cc b/src/gui/fluxviewercontrol.cc index e5d7fa1f8..81c4134f1 100644 --- a/src/gui/fluxviewercontrol.cc +++ b/src/gui/fluxviewercontrol.cc @@ -2,12 +2,12 @@ #include "gui.h" #include "fluxviewercontrol.h" #include "textviewerwindow.h" -#include "lib/flux.h" -#include "lib/fluxmap.h" +#include "lib/data/flux.h" +#include "lib/data/fluxmap.h" #include "lib/decoders/decoders.h" #include "lib/decoders/decoders.pb.h" -#include "lib/sector.h" -#include "lib/layout.h" +#include "lib/data/sector.h" +#include "lib/data/layout.h" #include "lib/decoders/fluxmapreader.h" #include "lib/core/crc.h" diff --git a/src/gui/fluxviewerwindow.cc b/src/gui/fluxviewerwindow.cc index 2b691f5ef..839de5695 100644 --- a/src/gui/fluxviewerwindow.cc +++ b/src/gui/fluxviewerwindow.cc @@ -1,10 +1,10 @@ #include "lib/core/globals.h" #include "gui.h" -#include "lib/layout.h" +#include "lib/data/layout.h" #include "fluxviewerwindow.h" #include "fluxviewercontrol.h" -#include "lib/flux.h" -#include "lib/layout.h" +#include "lib/data/flux.h" +#include "lib/data/layout.h" FluxViewerWindow::FluxViewerWindow( wxWindow* parent, std::shared_ptr flux): diff --git a/src/gui/gui.h b/src/gui/gui.h index a3910faa6..d0529d95b 100644 --- a/src/gui/gui.h +++ b/src/gui/gui.h @@ -8,6 +8,7 @@ class ExecEvent; class DiskFlux; class TrackFlux; class wxSimplebook; +class Context; extern void postToUiThread(std::function callback); extern void runOnUiThread(std::function callback); @@ -87,6 +88,7 @@ class MainWindow virtual void SetPage(int page) = 0; virtual void PrepareConfig() = 0; virtual void ClearLog() = 0; + virtual Context& GetContext() = 0; }; class PanelComponent @@ -147,6 +149,11 @@ class PanelComponent _mainWindow->StartExploring(); } + Context& GetContext() + { + return _mainWindow->GetContext(); + } + private: MainWindow* _mainWindow; }; diff --git a/src/gui/histogramviewer.cc b/src/gui/histogramviewer.cc index 10fabecab..904bf1a91 100644 --- a/src/gui/histogramviewer.cc +++ b/src/gui/histogramviewer.cc @@ -1,6 +1,6 @@ #include "lib/core/globals.h" #include "gui.h" -#include "lib/fluxmap.h" +#include "lib/data/fluxmap.h" #include "histogramviewer.h" static constexpr int BORDER = 10; @@ -29,7 +29,7 @@ HistogramViewer::HistogramViewer(wxWindow* parent, void HistogramViewer::Redraw(const Fluxmap& fluxmap, nanoseconds_t clock) { - _data = fluxmap.guessClock(); + _data = FluxmapReader(fluxmap).guessClock(); _clock = clock; _blank = false; Refresh(); diff --git a/src/gui/histogramviewer.h b/src/gui/histogramviewer.h index 1bfd761ee..fd5d64ac4 100644 --- a/src/gui/histogramviewer.h +++ b/src/gui/histogramviewer.h @@ -1,7 +1,8 @@ #pragma once #include "lib/core/globals.h" -#include "lib/fluxmap.h" +#include "lib/data/fluxmap.h" +#include "lib/decoders/fluxmapreader.h" class HistogramViewer : public wxWindow { @@ -31,7 +32,7 @@ class HistogramViewer : public wxWindow private: bool _blank = true; - Fluxmap::ClockData _data; + FluxmapReader::ClockData _data; wxFont _font; nanoseconds_t _clock; wxDECLARE_EVENT_TABLE(); diff --git a/src/gui/idlepanel.cc b/src/gui/idlepanel.cc index 83ba6cc5b..b9af84b97 100644 --- a/src/gui/idlepanel.cc +++ b/src/gui/idlepanel.cc @@ -1,18 +1,19 @@ #include "lib/core/globals.h" -#include "lib/config.h" +#include "lib/config/config.h" #include "gui.h" -#include "lib/fluxmap.h" +#include "lib/data/fluxmap.h" #include "lib/usb/usbfinder.h" -#include "lib/proto.h" -#include "lib/flags.h" +#include "lib/config/proto.h" +#include "lib/config/flags.h" #include "lib/core/utils.h" #include "lib/fluxsource/fluxsource.h" #include "lib/fluxsink/fluxsink.h" #include "lib/imagereader/imagereader.h" #include "lib/imagewriter/imagewriter.h" -#include "lib/layout.h" +#include "lib/data/layout.h" #include "texteditorwindow.h" #include "iconbutton.h" +#include "context.h" #include #include #include @@ -194,6 +195,7 @@ class IdlePanelImpl : public IdlePanelGen, public IdlePanel if (formatSelection == wxNOT_FOUND) error("no format selected"); + ClearLog(); globalConfig().clear(); auto formatName = _formatNames[formatChoice->GetSelection()]; globalConfig().readBaseConfigFile(formatName); @@ -291,7 +293,6 @@ class IdlePanelImpl : public IdlePanelGen, public IdlePanel globalConfig().set("usb.serial", serial); globalConfig().validateAndThrow(); - ClearLog(); } const wxBitmap GetBitmap() override @@ -794,7 +795,6 @@ class IdlePanelImpl : public IdlePanelGen, public IdlePanel private: wxConfig _config; wxImageList _imageList; - ConfigProto _configProto; std::vector _formatNames; std::vector> _devices; int _selectedSource; diff --git a/src/gui/imagerpanel.cc b/src/gui/imagerpanel.cc index d3a6f82e5..d03058824 100644 --- a/src/gui/imagerpanel.cc +++ b/src/gui/imagerpanel.cc @@ -1,18 +1,19 @@ #include "lib/core/globals.h" -#include "lib/config.h" -#include "lib/fluxmap.h" +#include "lib/config/config.h" +#include "lib/data/fluxmap.h" #include "lib/fluxsource/fluxsource.h" #include "lib/fluxsink/fluxsink.h" #include "lib/imagereader/imagereader.h" #include "lib/imagewriter/imagewriter.h" #include "lib/encoders/encoders.h" #include "lib/decoders/decoders.h" -#include "lib/proto.h" +#include "lib/config/proto.h" #include "lib/readerwriter.h" #include "gui.h" -#include "lib/layout.h" +#include "lib/data/layout.h" #include "fluxviewerwindow.h" #include "jobqueue.h" +#include "context.h" class ImagerPanelImpl : public ImagerPanelGen, public ImagerPanel, JobQueue { @@ -93,8 +94,8 @@ class ImagerPanelImpl : public ImagerPanelGen, public ImagerPanel, JobQueue QueueJob( [this]() { - auto& fluxSource = globalConfig().getFluxSource(); - auto& decoder = globalConfig().getDecoder(); + auto* fluxSource = GetContext().GetFluxSource(); + auto* decoder = GetContext().GetDecoder(); auto diskflux = readDiskCommand(*fluxSource, *decoder); runOnUiThread( @@ -141,24 +142,24 @@ class ImagerPanelImpl : public ImagerPanelGen, public ImagerPanel, JobQueue [this]() { auto image = - globalConfig().getImageReader()->readMappedImage(); - auto encoder = globalConfig().getEncoder(); - auto fluxSink = globalConfig().getFluxSink(); + GetContext().GetImageReader()->readMappedImage(); + auto* encoder = GetContext().GetEncoder(); + auto* fluxSink = GetContext().GetFluxSink(); - std::shared_ptr decoder; - std::shared_ptr verificationFluxSource; + Decoder* decoder = nullptr; + FluxSource* verificationFluxSource; if (globalConfig().hasDecoder() && fluxSink->isHardware()) { - decoder = globalConfig().getDecoder(); + decoder = GetContext().GetDecoder(); verificationFluxSource = - globalConfig().getVerificationFluxSource(); + GetContext().GetVerificationFluxSource(); } writeDiskCommand(*image, *encoder, *fluxSink, - decoder.get(), - verificationFluxSource.get()); + decoder, + verificationFluxSource); }); } catch (const ErrorException& e) @@ -259,7 +260,7 @@ class ImagerPanelImpl : public ImagerPanelGen, public ImagerPanel, JobQueue QueueJob( [image, this]() { - globalConfig().getImageWriter()->writeMappedImage(*image); + GetContext().GetImageWriter()->writeMappedImage(*image); }); } catch (const ErrorException& e) diff --git a/src/gui/main.cc b/src/gui/main.cc index eae099844..9c1e4a2c8 100644 --- a/src/gui/main.cc +++ b/src/gui/main.cc @@ -1,5 +1,5 @@ #include "lib/core/globals.h" -#include "lib/logger.h" +#include "lib/core/logger.h" #include "gui.h" #include "lib/core/utils.h" diff --git a/src/gui/mainwindow.cc b/src/gui/mainwindow.cc index 6884a081f..62ae14e01 100644 --- a/src/gui/mainwindow.cc +++ b/src/gui/mainwindow.cc @@ -1,8 +1,8 @@ #include "lib/core/globals.h" -#include "lib/config.h" -#include "lib/proto.h" +#include "lib/config/config.h" +#include "lib/config/proto.h" #include "gui.h" -#include "lib/logger.h" +#include "lib/core/logger.h" #include "lib/readerwriter.h" #include "lib/fluxsource/fluxsource.h" #include "lib/fluxsink/fluxsink.h" @@ -17,22 +17,55 @@ #include "texteditorwindow.h" #include "filesystemmodel.h" #include "customstatusbar.h" +#include "context.h" #include "lib/vfs/vfs.h" -#include "lib/layout.h" +#include "lib/data/layout.h" #include #include #include +class CallbackOstream : public std::streambuf +{ +public: + CallbackOstream(std::function cb): _cb(cb) {} + +public: + std::streamsize xsputn(const char* p, std::streamsize n) override + { + _cb(std::string(p, n)); + return n; + } + + int_type overflow(int_type v) override + { + char c = v; + _cb(std::string(&c, 1)); + return 1; + } + +private: + std::function _cb; +}; + class MainWindowImpl : public MainWindowGen, public MainWindow { private: class FilesystemOperation; public: - MainWindowImpl(): MainWindowGen(nullptr) + MainWindowImpl(): + MainWindowGen(nullptr), + _logStreamBuf( + [this](const std::string& s) + { + if (_logWindow) + _logWindow->GetTextControl()->AppendText(s); + }), + _logStream(&_logStreamBuf), + _logRenderer(LogRenderer::create(_logStream)) { Logger::setLogger( - [&](std::shared_ptr message) + [&](const AnyLogMessage& message) { if (isWorkerThread()) { @@ -179,6 +212,12 @@ class MainWindowImpl : public MainWindowGen, public MainWindow /* This sets the *global* config object. That's safe provided the worker * thread isn't running, otherwise you'll get a race. */ public: + Context& GetContext() + { + assert(_context); + return *_context; + } + void ShowConfig() { std::string s; @@ -189,13 +228,15 @@ class MainWindowImpl : public MainWindowGen, public MainWindow void PrepareConfig() override { + _context = Context::Create(); _idlePanel->PrepareConfig(); ShowConfig(); } - void OnLogMessage(std::shared_ptr message) + void OnLogMessage(const AnyLogMessage& message) { - _logWindow->GetTextControl()->AppendText(Logger::toString(*message)); + _logRenderer->add(message); + _logStream.flush(); std::visit( overloaded{ @@ -205,7 +246,7 @@ class MainWindowImpl : public MainWindowGen, public MainWindow }, /* We terminated due to the stop button. */ - [&](const EmergencyStopMessage& m) + [&](std::shared_ptr m) { _statusBar->SetLeftLabel("Emergency stop!"); _statusBar->HideProgressBar(); @@ -213,76 +254,76 @@ class MainWindowImpl : public MainWindowGen, public MainWindow }, /* A fatal error. */ - [&](const ErrorLogMessage& m) + [&](std::shared_ptr m) { - _statusBar->SetLeftLabel(m.message); - wxMessageBox(m.message, "Error", wxOK | wxICON_ERROR); + _statusBar->SetLeftLabel(m->message); + wxMessageBox(m->message, "Error", wxOK | wxICON_ERROR); _statusBar->HideProgressBar(); _statusBar->SetRightLabel(""); }, /* Indicates that we're starting a write operation. */ - [&](const BeginWriteOperationLogMessage& m) + [&](std::shared_ptr m) { _statusBar->SetRightLabel( - fmt::format("W {}.{}", m.track, m.head)); + fmt::format("W {}.{}", m->track, m->head)); _imagerPanel->SetVisualiserMode( - m.track, m.head, VISMODE_WRITING); + m->track, m->head, VISMODE_WRITING); }, - [&](const EndWriteOperationLogMessage& m) + [&](std::shared_ptr m) { _statusBar->SetRightLabel(""); _imagerPanel->SetVisualiserMode(0, 0, VISMODE_NOTHING); }, /* Indicates that we're starting a read operation. */ - [&](const BeginReadOperationLogMessage& m) + [&](std::shared_ptr m) { _statusBar->SetRightLabel( - fmt::format("R {}.{}", m.track, m.head)); + fmt::format("R {}.{}", m->track, m->head)); _imagerPanel->SetVisualiserMode( - m.track, m.head, VISMODE_READING); + m->track, m->head, VISMODE_READING); }, - [&](const EndReadOperationLogMessage& m) + [&](std::shared_ptr m) { _statusBar->SetRightLabel(""); _imagerPanel->SetVisualiserMode(0, 0, VISMODE_NOTHING); }, - [&](const TrackReadLogMessage& m) + [&](std::shared_ptr m) { - _imagerPanel->SetVisualiserTrackData(m.track); + _imagerPanel->SetVisualiserTrackData(m->track); }, - [&](const DiskReadLogMessage& m) + [&](std::shared_ptr m) { - _imagerPanel->SetDisk(m.disk); + _imagerPanel->SetDisk(m->disk); }, /* Large-scale operation start. */ - [&](const BeginOperationLogMessage& m) + [&](std::shared_ptr m) { - _statusBar->SetLeftLabel(m.message); + _statusBar->SetLeftLabel(m->message); _statusBar->ShowProgressBar(); }, /* Large-scale operation end. */ - [&](const EndOperationLogMessage& m) + [&](std::shared_ptr m) { - _statusBar->SetLeftLabel(m.message); + _statusBar->SetLeftLabel(m->message); _statusBar->HideProgressBar(); }, /* Large-scale operation progress. */ - [&](const OperationProgressLogMessage& m) + [&](std::shared_ptr m) { - _statusBar->SetProgress(m.progress); + _statusBar->SetProgress(m->progress); }, }, - *message); + message); } void SetPage(int page) override @@ -368,7 +409,11 @@ class MainWindowImpl : public MainWindowGen, public MainWindow CustomStatusBar* _statusBar; wxTimer _exitTimer; std::unique_ptr _logWindow; + CallbackOstream _logStreamBuf; + std::ostream _logStream; std::unique_ptr _configWindow; + std::unique_ptr _context; + std::unique_ptr _logRenderer; }; wxWindow* FluxEngineApp::CreateMainWindow() diff --git a/src/gui/texteditorwindow.cc b/src/gui/texteditorwindow.cc index 7bc2eb73e..2011516b1 100644 --- a/src/gui/texteditorwindow.cc +++ b/src/gui/texteditorwindow.cc @@ -1,6 +1,6 @@ #include "lib/core/globals.h" #include "gui.h" -#include "lib/layout.h" +#include "lib/data/layout.h" #include "texteditorwindow.h" wxDEFINE_EVENT(EDITOR_SAVE_EVENT, EditorSaveEvent); diff --git a/src/gui/textviewerwindow.cc b/src/gui/textviewerwindow.cc index e779f9c72..a7653d2a3 100644 --- a/src/gui/textviewerwindow.cc +++ b/src/gui/textviewerwindow.cc @@ -1,6 +1,6 @@ #include "lib/core/globals.h" #include "gui.h" -#include "lib/layout.h" +#include "lib/data/layout.h" #include "textviewerwindow.h" TextViewerWindow::TextViewerWindow(wxWindow* parent, @@ -29,6 +29,18 @@ wxTextCtrl* TextViewerWindow::GetTextControl() const return textControl; } +std::streamsize TextViewerWindow::xsputn(const char* s, std::streamsize n) +{ + textControl->AppendText(std::string(s, n)); + return n; +} + +int TextViewerWindow::overflow(int c) +{ + char b = c; + return xsputn(&b, 1); +} + void TextViewerWindow::OnClose(wxCloseEvent& event) { if (_autodestroy) diff --git a/src/gui/textviewerwindow.h b/src/gui/textviewerwindow.h index 78e6ba53d..ba603727e 100644 --- a/src/gui/textviewerwindow.h +++ b/src/gui/textviewerwindow.h @@ -3,7 +3,7 @@ #include "layout.h" -class TextViewerWindow : public TextViewerWindowGen +class TextViewerWindow : public TextViewerWindowGen, public std::streambuf { public: TextViewerWindow(wxWindow* parent, @@ -19,6 +19,10 @@ class TextViewerWindow : public TextViewerWindowGen public: wxTextCtrl* GetTextControl() const; +public: + std::streamsize xsputn(const char* s, std::streamsize n) override; + int overflow(int c) override; + private: void OnClose(wxCloseEvent& event) override; diff --git a/src/gui/visualisationcontrol.cc b/src/gui/visualisationcontrol.cc index d5d5033eb..e906b0aed 100644 --- a/src/gui/visualisationcontrol.cc +++ b/src/gui/visualisationcontrol.cc @@ -1,11 +1,11 @@ #include "lib/core/globals.h" #include "gui.h" #include "visualisationcontrol.h" -#include "lib/fluxmap.h" -#include "lib/flux.h" -#include "lib/sector.h" -#include "lib/image.h" -#include "lib/layout.h" +#include "lib/data/fluxmap.h" +#include "lib/data/flux.h" +#include "lib/data/sector.h" +#include "lib/data/image.h" +#include "lib/data/layout.h" #define BORDER 20 #define TICK 3 diff --git a/src/readibm.h b/src/readibm.h index 9bdfb33fb..d7b71e7da 100644 --- a/src/readibm.h +++ b/src/readibm.h @@ -1,7 +1,7 @@ #ifndef READIBM_H #define READIBM_H -#include "lib/flags.h" +#include "lib/config/flags.h" #include "dataspec.h" extern IntFlag sectorIdBase; diff --git a/tests/build.py b/tests/build.py index eee064e89..926c37afe 100644 --- a/tests/build.py +++ b/tests/build.py @@ -8,7 +8,7 @@ proto(name="test_proto", srcs=["./testproto.proto"], deps=["lib+common_proto"]) protocc( - name="test_proto_lib", srcs=[".+test_proto"], deps=["lib+config_proto_lib"] + name="test_proto_lib", srcs=[".+test_proto"], deps=["lib/config+proto_lib"] ) tests = [ @@ -55,8 +55,6 @@ "+fl2_proto_lib", "+fmt_lib", "+lib", - "lib/core", - "lib/fluxsource+proto_lib", "+protobuf_lib", "+protocol", "+z_lib", @@ -68,7 +66,10 @@ "dep/libusbp", "dep/snowhouse", "dep/stb", - "lib+config_proto_lib", + "lib/config", + "lib/core", + "lib/data", + "lib/fluxsource+proto_lib", "src/formats", ], ), @@ -84,11 +85,10 @@ "+fl2_proto_lib", "+fmt_lib", "+lib", - "lib/core", - "lib/fluxsource+proto_lib", "+protobuf_lib", "+protocol", "+z_lib", + "arch+proto_lib", "dep/adflib", "dep/agg", "dep/fatfs", @@ -96,8 +96,10 @@ "dep/libusbp", "dep/snowhouse", "dep/stb", - "arch+proto_lib", - "lib+config_proto_lib", + "lib/config", + "lib/core", + "lib/data", + "lib/fluxsource+proto_lib", "src/formats", ] + ([".+test_proto_lib"] if n == "options" else []) diff --git a/tests/configs.cc b/tests/configs.cc index 8d4c86918..90b8b141f 100644 --- a/tests/configs.cc +++ b/tests/configs.cc @@ -1,6 +1,6 @@ #include "lib/core/globals.h" -#include "lib/proto.h" -#include "lib/flags.h" +#include "lib/config/proto.h" +#include "lib/config/flags.h" #include "lib/core/bytes.h" #include "fmt/format.h" diff --git a/tests/cpmfs.cc b/tests/cpmfs.cc index 9df8cdedc..c3b682bde 100644 --- a/tests/cpmfs.cc +++ b/tests/cpmfs.cc @@ -1,11 +1,11 @@ #include "lib/core/globals.h" -#include "lib/config.h" +#include "lib/config/config.h" #include "lib/vfs/vfs.h" #include "lib/vfs/sectorinterface.h" #include "lib/vfs/vfs.pb.h" -#include "lib/image.h" -#include "lib/proto.h" -#include "lib/sector.h" +#include "lib/data/image.h" +#include "lib/config/proto.h" +#include "lib/data/sector.h" #include "snowhouse/snowhouse.h" #include diff --git a/tests/flags.cc b/tests/flags.cc index 5dc5bcee8..161e7f8db 100644 --- a/tests/flags.cc +++ b/tests/flags.cc @@ -1,5 +1,5 @@ #include "lib/core/globals.h" -#include "lib/flags.h" +#include "lib/config/flags.h" #include static void testDefaultIntValue() diff --git a/tests/fluxmapreader.cc b/tests/fluxmapreader.cc index ebff7e1d8..336091889 100644 --- a/tests/fluxmapreader.cc +++ b/tests/fluxmapreader.cc @@ -1,5 +1,5 @@ #include "lib/core/globals.h" -#include "lib/fluxmap.h" +#include "lib/data/fluxmap.h" #include "lib/decoders/fluxmapreader.h" #include "protocol.h" #include "fmt/format.h" diff --git a/tests/fluxpattern.cc b/tests/fluxpattern.cc index be82120ee..c0fb8e9ad 100644 --- a/tests/fluxpattern.cc +++ b/tests/fluxpattern.cc @@ -1,5 +1,5 @@ #include "lib/core/globals.h" -#include "lib/fluxmap.h" +#include "lib/data/fluxmap.h" #include "lib/decoders/fluxpattern.h" #include diff --git a/tests/flx.cc b/tests/flx.cc index 48c27f745..ad802ba01 100644 --- a/tests/flx.cc +++ b/tests/flx.cc @@ -2,7 +2,7 @@ #include #include #include "lib/core/globals.h" -#include "lib/fluxmap.h" +#include "lib/data/fluxmap.h" #include "lib/fluxsource/flx.h" static void test_convert(const Bytes& flxbytes, const Bytes& fluxmapbytes) diff --git a/tests/greaseweazle.cc b/tests/greaseweazle.cc index 5dbab5967..6b3dc12cd 100644 --- a/tests/greaseweazle.cc +++ b/tests/greaseweazle.cc @@ -2,7 +2,7 @@ #include #include #include "lib/core/globals.h" -#include "lib/fluxmap.h" +#include "lib/data/fluxmap.h" #include "lib/usb/greaseweazle.h" #define E28(val) \ diff --git a/tests/kryoflux.cc b/tests/kryoflux.cc index f78c8853b..3887f14b1 100644 --- a/tests/kryoflux.cc +++ b/tests/kryoflux.cc @@ -2,7 +2,7 @@ #include #include #include "lib/core/globals.h" -#include "lib/fluxmap.h" +#include "lib/data/fluxmap.h" #include "lib/fluxsource/kryoflux.h" static void test_convert(const Bytes& kryofluxbytes, const Bytes& fluxmapbytes) diff --git a/tests/layout.cc b/tests/layout.cc index 34faa314f..750fec30e 100644 --- a/tests/layout.cc +++ b/tests/layout.cc @@ -1,9 +1,9 @@ #include "lib/core/globals.h" #include "lib/core/bytes.h" -#include "lib/config.h" -#include "lib/config.pb.h" -#include "lib/proto.h" -#include "lib/layout.h" +#include "lib/config/config.h" +#include "lib/config/config.pb.h" +#include "lib/config/proto.h" +#include "lib/data/layout.h" #include "snowhouse/snowhouse.h" #include #include diff --git a/tests/options.cc b/tests/options.cc index 47d80221e..547e90215 100644 --- a/tests/options.cc +++ b/tests/options.cc @@ -1,9 +1,9 @@ #include "lib/core/globals.h" #include "lib/core/bytes.h" -#include "lib/config.h" +#include "lib/config/config.h" #include "tests/testproto.pb.h" -#include "lib/config.pb.h" -#include "lib/proto.h" +#include "lib/config/config.pb.h" +#include "lib/config/proto.h" #include "snowhouse/snowhouse.h" #include #include diff --git a/tests/proto.cc b/tests/proto.cc index 2e69645e4..ecb536eaa 100644 --- a/tests/proto.cc +++ b/tests/proto.cc @@ -1,8 +1,8 @@ #include "lib/core/globals.h" #include "lib/core/bytes.h" #include "tests/testproto.pb.h" -#include "lib/config.pb.h" -#include "lib/proto.h" +#include "lib/config/config.pb.h" +#include "lib/config/proto.h" #include "snowhouse/snowhouse.h" #include #include diff --git a/tests/vfs.cc b/tests/vfs.cc index 3c524c0c0..27df49dc3 100644 --- a/tests/vfs.cc +++ b/tests/vfs.cc @@ -1,5 +1,5 @@ #include "lib/core/globals.h" -#include "lib/config.h" +#include "lib/config/config.h" #include "lib/vfs/vfs.h" #include "snowhouse/snowhouse.h" diff --git a/tools/build.py b/tools/build.py index adc555235..0b939f405 100644 --- a/tools/build.py +++ b/tools/build.py @@ -11,7 +11,8 @@ deps=[ "+lib", "lib/core", - "lib+config_proto_lib", + "lib/data", + "lib/config+proto_lib", "lib/fluxsource+proto_lib", "+fmt_lib", "+z_lib", @@ -25,7 +26,8 @@ deps=[ "+lib", "lib/core", - "lib+config_proto_lib", + "lib/data", + "lib/config+proto_lib", "lib/fluxsource+proto_lib", "+fmt_lib", "+z_lib", @@ -45,9 +47,10 @@ "+sqlite3_lib", "+z_lib", "dep/libusbp", - "lib+config_proto_lib", + "lib/config+proto_lib", "lib/fluxsource+proto_lib", "src/formats", "lib/core", + "lib/data", ], ) diff --git a/tools/upgrade-flux-file.cc b/tools/upgrade-flux-file.cc index a02829991..47c7894e2 100644 --- a/tools/upgrade-flux-file.cc +++ b/tools/upgrade-flux-file.cc @@ -1,5 +1,5 @@ #include "lib/globals.h" -#include "lib/fluxmap.h" +#include "lib/data/fluxmap.h" #include "lib/fluxsink/fluxsink.h" #include "lib/core/bytes.h" #include "fmt/format.h"