#include <bits/stdc++.h>
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;
}