aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/src/bindump.c
diff options
context:
space:
mode:
authorDavid M. Syzdek <david@syzdek.net>2010-01-10 15:45:44 -0900
committerDavid M. Syzdek <david@syzdek.net>2010-01-10 15:45:44 -0900
commit214f1fe82fce6c620e6833bc17f2b9312de8472a (patch)
tree008a5d2c7959603292ae7111b13d02ef7541bcb1 /src/bindump.c
parent6e9a24a634ae2599a3bced227c302b7759582234 (diff)
downloaddmstools-214f1fe82fce6c620e6833bc17f2b9312de8472a.tar.gz
dmstools-214f1fe82fce6c620e6833bc17f2b9312de8472a.tar.bz2
dmstools-214f1fe82fce6c620e6833bc17f2b9312de8472a.tar.xz
dmstools-214f1fe82fce6c620e6833bc17f2b9312de8472a.zip
Updating to display only the differences in bindump
Diffstat (limited to 'src/bindump.c')
-rw-r--r--src/bindump.c89
1 files changed, 73 insertions, 16 deletions
diff --git a/src/bindump.c b/src/bindump.c
index b9f8a72..f4678e5 100644
--- a/src/bindump.c
+++ b/src/bindump.c
@@ -451,47 +451,104 @@ int my_open(BinDumpFile * file, uint32_t verbose)
451size_t my_print_diff(BinDumpFile * file1, BinDumpFile * file2, size_t offset, 451size_t my_print_diff(BinDumpFile * file1, BinDumpFile * file2, size_t offset,
452 size_t len, uint32_t opts) 452 size_t len, uint32_t opts)
453{ 453{
454 char buff[9]; 454 char buff[9];
455 size_t s; 455 size_t s;
456 size_t max; 456 size_t max1;
457 size_t line; 457 size_t max2;
458 size_t len1;
459 size_t len2;
460 size_t line;
461 uint8_t diff;
462 uint8_t diff1[9];
463 uint8_t diff2[9];
458 464
459 line = 0; 465 line = 0;
460 466
461 if (opts) 467 if (opts)
462 return(0); 468 return(0);
463 469
464 // prints line offset 470 max1 = 0;
471 max2 = 0;
465 if (file1->code > 0) 472 if (file1->code > 0)
466 { 473 {
474 len1 = len ? (len - (file1->pos-offset)) : 8;
475 max1 = (len1 > ((size_t)file1->code)) ? (size_t)file1->code : len1;
476 };
477 if (file2->code > 0)
478 {
479 len2 = len ? (len - (file2->pos-offset)) : 8;
480 max2 = (len2 > ((size_t)file2->code)) ? (size_t)file2->code : len2;
481 };
482
483 if ( (!(max1)) && (!(max2)) )
484 return(0);
485
486 diff = 0;
487 memset(diff1, 0, 9);
488 memset(diff2, 0, 9);
489 for(s = 0; s < (8-offset); s++)
490 {
491 if ( (s < max1) && (s < max2) )
492 {
493 if (file1->data[s] != file2->data[s])
494 {
495 diff = 1;
496 diff1[s] = 1;
497 diff1[8] = 1;
498 diff2[s] = 1;
499 diff2[8] = 1;
500 };
501 } else if (s < max2) {
502 diff = 1;
503 diff2[s] = 1;
504 diff2[8] = 1;
505 } else {
506 diff = 1;
507 diff1[s] = 1;
508 diff1[8] = 1;
509 };
510 };
511
512 if (!(diff))
513 return(0);
514
515 // prints line offset
516 if ((max1) && (diff1[8]))
517 {
467 printf("< 0%04zo0:", (file1->pos/8)); 518 printf("< 0%04zo0:", (file1->pos/8));
468 for(s = 0; s < offset; s++) 519 for(s = 0; s < offset; s++)
469 printf(" "); 520 printf(" ");
470 521
471 len = len ? (len - (file1->pos-offset)) : 8; 522 for(s = 0; s < max1; s++)
472 max = (len > ((size_t)file1->code)) ? (size_t)file1->code : len; 523 {
473 for(s = 0; s < max; s++) 524 printf(" %s", (!(diff1[s])) ?
474 printf(" %s", my_byte2str(file1->data[s], buff)); 525 " " :
526 my_byte2str(file1->data[s], buff)
527 );
528 };
475 printf("\n"); 529 printf("\n");
476 530
477 file1->pos += max; 531 file1->pos += max1;
478 532
479 line++; 533 line++;
480 }; 534 };
481 535
482 if (file2->code > 0) 536 if ((max2) && (diff2[8]))
483 { 537 {
484 printf("> 0%04zo0:", (file2->pos/8)); 538 printf("> 0%04zo0:", (file2->pos/8));
485 for(s = 0; s < offset; s++) 539 for(s = 0; s < offset; s++)
486 printf(" "); 540 printf(" ");
487 541
488 len = len ? (len - (file2->pos-offset)) : 8; 542 for(s = 0; s < max2; s++)
489 max = (len > ((size_t)file2->code)) ? (size_t)file2->code : len; 543 {
490 for(s = 0; s < max; s++) 544 printf(" %s", (!(diff2[s])) ?
491 printf(" %s", my_byte2str(file2->data[s], buff)); 545 " " :
546 my_byte2str(file2->data[s], buff)
547 );
548 };
492 printf("\n"); 549 printf("\n");
493 550
494 file2->pos += max; 551 file2->pos += max2;
495 552
496 line++; 553 line++;
497 }; 554 };