#include using namespace std; struct Sector { int16_t floor, ceil; char floortex[8], ceiltex[8]; int16_t light, special, tag; void print(int idx, int diff) { string ftex(floortex, find(floortex, floortex+8, '\0')); string ctex(ceiltex, find(ceiltex, ceiltex+8, '\0')); int w = 8; cout << left << setfill(' '); if (idx > 0) cout << " idx " << setw(w) << idx; else cout << " " << setw(w) << "="; if (!diff || (diff & 0b10)) cout << " flr " << setw(w) << floor; else cout << " " << setw(w) << "="; if (!diff || (diff & 0b100)) cout << " cei " << setw(w) << ceil; else cout << " " << setw(w) << "="; if (!diff || (diff & 0b1000)) cout << " ftx " << setw(w) << ftex; else cout << " " << setw(w) << "="; if (!diff || (diff & 0b10000)) cout << " ctx " << setw(w) << ctex; else cout << " " << setw(w) << "="; if (!diff || (diff & 0b100000)) cout << " lig " << setw(w) << light; else cout << " " << setw(w) << "="; if (!diff || (diff & 0b1000000)) cout << " spc " << setw(w) << special; else cout << " " << setw(w) << "="; if (!diff || (diff & 0b10000000)) cout << " tag " << setw(w) << tag; else cout << " " << setw(w) << "="; cout << "\n"; } int compare(Sector &other) { int diff = 0; if (floor != other.floor) diff |= 0b10; if (ceil != other.ceil) diff |= 0b100; if (strcmp(floortex, other.floortex)) diff |= 0b1000; if (strcmp(ceiltex, other.ceiltex)) diff |= 0b10000; if (light != other.light) diff |= 0b100000; if (special != other.special) diff |= 0b1000000; if (tag != other.tag) diff |= 0b10000000; return diff; } } sectorA, sectorB; int main(int argc, char** argv) { if (argc < 3) { std::cout << "usage: " << argv[0] << " SECTORS1.lmp SECTORS2.lmp\n"; return 1; } ifstream fileA(argv[1]), fileB(argv[2]); bool endA = false, endB = false; for (int i = 0; !(endA && endB); ++i) { if (fileA.peek() == EOF) endA = true; else fileA.read((char*)§orA, sizeof(Sector)); if (fileB.peek() == EOF) endB = true; else fileB.read((char*)§orB, sizeof(Sector)); if (endB && !endA) { cout << "--- "; sectorA.print(i, 0); } else if (endA && !endB) { cout << "+++ "; sectorB.print(i, 0); } else { int diff = sectorA.compare(sectorB); if (diff) { cout << "\n"; cout << "<<< "; sectorA.print(-1, diff); cout << ">>> "; sectorB.print(i, 0); cout << "\n"; } } } return 0; }