Pre: uMemSize must be multiple of 8
| 561 | |
| 562 | // Pre: uMemSize must be multiple of 8 |
| 563 | void YamlSaveHelper::SaveMemory(const LPBYTE pMemBase, const UINT uMemSize, const UINT offset/*=0*/) |
| 564 | { |
| 565 | if (uMemSize & 7) |
| 566 | throw std::runtime_error("Memory: size must be multiple of 8"); |
| 567 | |
| 568 | const UINT kIndent = m_indent; |
| 569 | |
| 570 | const UINT kStride = 64; |
| 571 | const char szHex[] = "0123456789ABCDEF"; |
| 572 | |
| 573 | size_t lineSize = kIndent+6+2*kStride+2; // "AAAA: 00010203...3F\n\00" = 6+ 2*64 +2 |
| 574 | char* const pLine = new char [lineSize]; |
| 575 | |
| 576 | for (uint32_t addr = offset; addr < (uMemSize + offset); addr += kStride) |
| 577 | { |
| 578 | char* pDst = pLine; |
| 579 | for (UINT i=0; i<kIndent; i++) |
| 580 | *pDst++ = ' '; |
| 581 | *pDst++ = szHex[ (addr>>12)&0xf ]; |
| 582 | *pDst++ = szHex[ (addr>>8)&0xf ]; |
| 583 | *pDst++ = szHex[ (addr>>4)&0xf ]; |
| 584 | *pDst++ = szHex[ addr&0xf ]; |
| 585 | *pDst++ = ':'; |
| 586 | *pDst++ = ' '; |
| 587 | |
| 588 | LPBYTE pMem = pMemBase + addr; |
| 589 | |
| 590 | for (UINT i=0; i<kStride; i+=8) |
| 591 | { |
| 592 | if (addr + i >= (uMemSize + offset)) // Support short final line (still multiple of 8 bytes) |
| 593 | { |
| 594 | lineSize = lineSize - 2*kStride + 2*i; |
| 595 | break; |
| 596 | } |
| 597 | |
| 598 | BYTE d; |
| 599 | d = *pMem++; *pDst++ = szHex[d>>4]; *pDst++ = szHex[d&0xf]; |
| 600 | d = *pMem++; *pDst++ = szHex[d>>4]; *pDst++ = szHex[d&0xf]; |
| 601 | d = *pMem++; *pDst++ = szHex[d>>4]; *pDst++ = szHex[d&0xf]; |
| 602 | d = *pMem++; *pDst++ = szHex[d>>4]; *pDst++ = szHex[d&0xf]; |
| 603 | |
| 604 | d = *pMem++; *pDst++ = szHex[d>>4]; *pDst++ = szHex[d&0xf]; |
| 605 | d = *pMem++; *pDst++ = szHex[d>>4]; *pDst++ = szHex[d&0xf]; |
| 606 | d = *pMem++; *pDst++ = szHex[d>>4]; *pDst++ = szHex[d&0xf]; |
| 607 | d = *pMem++; *pDst++ = szHex[d>>4]; *pDst++ = szHex[d&0xf]; |
| 608 | } |
| 609 | |
| 610 | *pDst++ = '\n'; |
| 611 | *pDst = 0; // For debugger |
| 612 | |
| 613 | fwrite(pLine, 1, lineSize-1, m_hFile); // -1 so don't write null terminator |
| 614 | } |
| 615 | |
| 616 | delete [] pLine; |
| 617 | } |
| 618 | |
| 619 | void YamlSaveHelper::FileHdr(UINT version) |
| 620 | { |
no outgoing calls
no test coverage detected