MCPcopy Create free account
hub / github.com/davidgiven/fluxengine / readImage

Method readImage

lib/imagereader/dimimagereader.cc:22–152  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

20 DimImageReader(const ImageReaderProto& config): ImageReader(config) {}
21
22 std::unique_ptr<Image> readImage() override
23 {
24 std::ifstream inputFile(
25 _config.filename(), std::ios::in | std::ios::binary);
26 if (!inputFile.is_open())
27 error("cannot open input file");
28
29 Bytes header(256);
30 inputFile.read((char*)header.begin(), header.size());
31 if (header.slice(0xAB, 13) != Bytes("DIFC HEADER "))
32 error("DIM: could not find DIM header, is this a DIM file?");
33
34 // the DIM header technically has a bit field for sectors present,
35 // however it is currently ignored by this reader
36
37 char mediaByte = header[0];
38 int tracks;
39 int sectorsPerTrack;
40 int sectorSize;
41 switch (mediaByte)
42 {
43 case 0:
44 tracks = 77;
45 sectorsPerTrack = 8;
46 sectorSize = 1024;
47 break;
48 case 1:
49 tracks = 80;
50 sectorsPerTrack = 9;
51 sectorSize = 1024;
52 break;
53 case 2:
54 tracks = 80;
55 sectorsPerTrack = 15;
56 sectorSize = 512;
57 break;
58 case 3:
59 tracks = 80;
60 sectorsPerTrack = 18;
61 sectorSize = 512;
62 break;
63 default:
64 error("DIM: unsupported media byte");
65 break;
66 }
67
68 std::unique_ptr<Image> image(new Image);
69 int trackCount = 0;
70 for (int track = 0; track < tracks; track++)
71 {
72 if (inputFile.eof())
73 break;
74
75 for (int side = 0; side < 2; side++)
76 {
77 std::vector<unsigned> sectors;
78 for (int i = 0; i < sectorsPerTrack; i++)
79 sectors.push_back(i + 1);

Callers

nothing calls this directly

Calls 11

errorFunction · 0.85
sliceMethod · 0.80
calculateSizeMethod · 0.80
BytesClass · 0.50
logFunction · 0.50
readMethod · 0.45
beginMethod · 0.45
sizeMethod · 0.45
eofMethod · 0.45
push_backMethod · 0.45
putMethod · 0.45

Tested by

no test coverage detected