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

Method writeImage

lib/imagewriter/ldbsimagewriter.cc:18–130  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

16 LDBSImageWriter(const ImageWriterProto& config): ImageWriter(config) {}
17
18 void writeImage(const Image& image) override
19 {
20 LDBS ldbs;
21
22 const Geometry geometry = image.getGeometry();
23
24 log("LDBS: writing {} tracks, {} sides, {} sectors, {} bytes per "
25 "sector",
26 geometry.numCylinders,
27 geometry.numHeads,
28 geometry.numSectors,
29 geometry.sectorSize);
30
31 Bytes trackDirectory;
32 ByteWriter trackDirectoryWriter(trackDirectory);
33 int trackDirectorySize = 0;
34 trackDirectoryWriter.write_le16(0);
35
36 LDBSOutputProto::DataRate dataRate = _config.ldbs().data_rate();
37 if (dataRate == LDBSOutputProto::RATE_GUESS)
38 {
39 dataRate = (geometry.numSectors > 10) ? LDBSOutputProto::RATE_HD
40 : LDBSOutputProto::RATE_DD;
41 if (geometry.sectorSize <= 256)
42 dataRate = LDBSOutputProto::RATE_SD;
43 log("LDBS: guessing data rate as {}",
44 LDBSOutputProto::DataRate_Name(dataRate));
45 }
46
47 LDBSOutputProto::RecordingMode recordingMode =
48 _config.ldbs().recording_mode();
49 if (recordingMode == LDBSOutputProto::RECMODE_GUESS)
50 {
51 recordingMode = LDBSOutputProto::RECMODE_MFM;
52 log("LDBS: guessing recording mode as {}",
53 LDBSOutputProto::RecordingMode_Name(recordingMode));
54 }
55
56 for (int track = 0; track < geometry.numCylinders; track++)
57 {
58 for (int side = 0; side < geometry.numHeads; side++)
59 {
60 Bytes trackHeader;
61 ByteWriter trackHeaderWriter(trackHeader);
62
63 int actualSectors = 0;
64 for (int sectorId = 0; sectorId < geometry.numSectors;
65 sectorId++)
66 {
67 const auto& sector = image.get(track, side, sectorId);
68 if (sector)
69 actualSectors++;
70 }
71
72 trackHeaderWriter.write_le16(
73 0x000C); /* offset of sector sideers */
74 trackHeaderWriter.write_le16(
75 0x0012); /* length of each sector descriptor */

Callers

nothing calls this directly

Calls 7

writeToFileMethod · 0.80
logFunction · 0.50
getMethod · 0.45
putMethod · 0.45
sizeMethod · 0.45
seekMethod · 0.45
writeMethod · 0.45

Tested by

no test coverage detected