10#10include15 15 02using15 02namespace15 10std; 02struct15 07Sector15 { 15 10int16_t15 floor,15 ceil; 15 10char15 floortex[028],15 ceiltex[028]; 15 10int16_t15 light,15 special,15 tag; 15 10void15 07print(10int15 idx,15 10int15 diff) 15 { 15 string15 ftex(floortex,15 find(floortex,15 floortex+028,15 05'05\005')); 15 string15 ctex(ceiltex,15 find(ceiltex,15 ceiltex+028,15 05'05\005')); 15 10int15 w15 =15 028; 15 cout15 <<15 left15 <<15 setfill(05'05 05'); 15 cout15 <<15 05"05 idx 05"15 <<15 setw(w)15 <<15 idx; 15 02if15 (!diff15 ||15 (diff15 &15 020b10))15 cout15 <<15 05"05 flr 05"15 <<15 setw(w)15 <<15 floor; 15 02else15 cout15 <<15 05"05 05"15 <<15 setw(w)15 <<15 05"05 05"; 15 02if15 (!diff15 ||15 (diff15 &15 020b100))15 cout15 <<15 05"05 cei 05"15 <<15 setw(w)15 <<15 ceil; 15 02else15 cout15 <<15 05"05 05"15 <<15 setw(w)15 <<15 05"05 05"; 15 02if15 (!diff15 ||15 (diff15 &15 020b1000))15 cout15 <<15 05"05 ftx 05"15 <<15 setw(w)15 <<15 ftex; 15 02else15 cout15 <<15 05"05 05"15 <<15 setw(w)15 <<15 05"05 05"; 15 02if15 (!diff15 ||15 (diff15 &15 020b10000))15 cout15 <<15 05"05 ctx 05"15 <<15 setw(w)15 <<15 ctex; 15 02else15 cout15 <<15 05"05 05"15 <<15 setw(w)15 <<15 05"05 05"; 15 02if15 (!diff15 ||15 (diff15 &15 020b100000))15 cout15 <<15 05"05 lig 05"15 <<15 setw(w)15 <<15 light; 15 02else15 cout15 <<15 05"05 05"15 <<15 setw(w)15 <<15 05"05 05"; 15 02if15 (!diff15 ||15 (diff15 &15 020b1000000))15 cout15 <<15 05"05 spc 05"15 <<15 setw(w)15 <<15 special; 15 02else15 cout15 <<15 05"05 05"15 <<15 setw(w)15 <<15 05"05 05"; 15 02if15 (!diff15 ||15 (diff15 &15 020b10000000))15 cout15 <<15 05"05 tag 05"15 <<15 setw(w)15 <<15 tag; 15 02else15 cout15 <<15 05"05 05"15 <<15 setw(w)15 <<15 05"05 05"; 15 cout15 <<15 05"05\n05"; 15 } 15 10int15 07compare(Sector15 &other) 15 { 15 10int15 diff15 =15 020; 15 02if15 (floor15 !=15 other.floor)15 diff15 |=15 020b10; 15 02if15 (ceil15 !=15 other.ceil)15 diff15 |=15 020b100; 15 02if15 (strncmp(floortex,15 other.floortex,15 028))15 diff15 |=15 020b1000; 15 02if15 (strncmp(ceiltex,15 other.ceiltex,15 028))15 diff15 |=15 020b10000; 15 02if15 (light15 !=15 other.light)15 diff15 |=15 020b100000; 15 02if15 (special15 !=15 other.special)15 diff15 |=15 020b1000000; 15 02if15 (tag15 !=15 other.tag)15 diff15 |=15 020b10000000; 15 02return15 diff; 15 } }15 sectorA,15 sectorB; 10int15 07main(10int15 argc,15 10char**15 argv) { 15 02if15 (argc15 <15 023)15 {15 std::cout15 <<15 05"05usage: 05"15 <<15 argv[020]15 <<15 05"05 SECTORS1.lmp SECTORS2.lmp05\n05";15 02return15 021;15 } 15 ifstream15 fileA(argv[021]),15 fileB(argv[022]); 15 10bool15 endA15 =15 10false,15 endB15 =15 10false; 15 02for15 (10int15 i15 =15 020;15 !(endA15 &&15 endB);15 ++i) 15 { 15 02if15 (fileA.peek()15 ==15 EOF)15 endA15 =15 10true; 15 02else15 fileA.read((10char*)§orA,15 02sizeof(Sector)); 15 02if15 (fileB.peek()15 ==15 EOF)15 endB15 =15 10true; 15 02else15 fileB.read((10char*)§orB,15 02sizeof(Sector)); 15 02if15 (endB15 &&15 !endA)15 {15 cout15 <<15 05"05--- 05";15 sectorA.print(i,15 020);15 } 15 02else15 02if15 (endA15 &&15 !endB)15 {15 cout15 <<15 05"05+++ 05";15 sectorB.print(i,15 020);15 } 15 02else15 { 15 10int15 diff15 =15 sectorA.compare(sectorB); 15 02if15 (diff)15 { 15 cout15 <<15 05"05\n05"; 15 cout15 <<15 05"05<<< 05";15 sectorA.print(i,15 diff); 15 cout15 <<15 05"05>>> 05";15 sectorB.print(i,15 diff); 15 cout15 <<15 05"05\n05"; 15 } 15 } 15 } 15 02return15 020; }