MCPcopy Create free account
hub / github.com/AppleWin/AppleWin / LoadSnapshotFloppy

Method LoadSnapshotFloppy

source/Disk.cpp:2376–2443  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2374}
2375
2376bool Disk2InterfaceCard::LoadSnapshotFloppy(YamlLoadHelper& yamlLoadHelper, UINT unit, UINT version, std::vector<BYTE>& track)
2377{
2378 const std::string simpleFilename = yamlLoadHelper.LoadString(SS_YAML_KEY_FILENAME);
2379 const std::string absolutePath = version >= 9 ? yamlLoadHelper.LoadString(SS_YAML_KEY_ABSOLUTE_PATH) : "";
2380
2381 std::string filename = simpleFilename;
2382 bool bImageError = filename.empty();
2383
2384 if (!bImageError)
2385 {
2386 DWORD dwAttributes = GetFileAttributes(filename.c_str());
2387 if (dwAttributes == INVALID_FILE_ATTRIBUTES && !absolutePath.empty())
2388 {
2389 // try the absolute path if present
2390 filename = absolutePath;
2391 dwAttributes = GetFileAttributes(filename.c_str());
2392 }
2393
2394 if (dwAttributes == INVALID_FILE_ATTRIBUTES)
2395 {
2396 // ignore absolute name when opening the file dialog
2397 filename = simpleFilename;
2398 // Get user to browse for file
2399 UserSelectNewDiskImage(unit, filename.c_str());
2400
2401 dwAttributes = GetFileAttributes(filename.c_str());
2402 }
2403
2404 bImageError = (dwAttributes == INVALID_FILE_ATTRIBUTES);
2405 if (!bImageError)
2406 {
2407 if (InsertDisk(unit, filename, dwAttributes & FILE_ATTRIBUTE_READONLY, IMAGE_DONT_CREATE) != eIMAGE_ERROR_NONE)
2408 bImageError = true;
2409
2410 // InsertDisk() zeros m_floppyDrive[unit], then sets up:
2411 // . m_imagename
2412 // . m_fullname
2413 // . m_bWriteProtected
2414 }
2415 }
2416
2417 yamlLoadHelper.LoadBool(SS_YAML_KEY_WRITE_PROTECTED); // Consume
2418 m_floppyDrive[unit].m_disk.m_byte = yamlLoadHelper.LoadUint(SS_YAML_KEY_BYTE);
2419 m_floppyDrive[unit].m_disk.m_nibbles = yamlLoadHelper.LoadUint(SS_YAML_KEY_NIBBLES);
2420 m_floppyDrive[unit].m_disk.m_trackimagedata = yamlLoadHelper.LoadUint(SS_YAML_KEY_TRACK_IMAGE_DATA) ? true : false;
2421 m_floppyDrive[unit].m_disk.m_trackimagedirty = yamlLoadHelper.LoadUint(SS_YAML_KEY_TRACK_IMAGE_DIRTY) ? true : false;
2422
2423 if (version >= 4)
2424 {
2425 m_floppyDrive[unit].m_disk.m_bitOffset = yamlLoadHelper.LoadUint(SS_YAML_KEY_BIT_OFFSET);
2426 m_floppyDrive[unit].m_disk.m_bitCount = yamlLoadHelper.LoadUint(SS_YAML_KEY_BIT_COUNT);
2427 m_floppyDrive[unit].m_disk.m_extraCycles = yamlLoadHelper.LoadDouble(SS_YAML_KEY_EXTRA_CYCLES);
2428
2429 if (m_floppyDrive[unit].m_disk.m_bitCount && (m_floppyDrive[unit].m_disk.m_bitOffset >= m_floppyDrive[unit].m_disk.m_bitCount))
2430 throw std::runtime_error("Disk image: bitOffset >= bitCount");
2431
2432 if (ImageIsWOZ(m_floppyDrive[unit].m_disk.m_imagehandle))
2433 UpdateBitStreamOffsets(m_floppyDrive[unit].m_disk); // overwrites m_byte, inits m_bitMask

Callers

nothing calls this directly

Calls 9

ImageIsWOZFunction · 0.85
LoadStringMethod · 0.80
LoadBoolMethod · 0.80
LoadUintMethod · 0.80
LoadDoubleMethod · 0.80
LoadMemoryMethod · 0.80
PopMapMethod · 0.80
GetSubMapMethod · 0.45

Tested by

no test coverage detected