From ef3750600dd8c4926b1a38a6224ca61c4a3d4a5c Mon Sep 17 00:00:00 2001 From: Edouard Dupin Date: Fri, 10 Feb 2012 18:06:39 +0100 Subject: [PATCH] Offset available in the start of file ==> error while searchir error (no check of the ofset ... --- display.c | 268 ++++++++++++++++++++++++++++++++---------------- generalDefine.h | 2 +- main.c | 140 ++++++++++++++++++------- parameter.c | 27 ++++- parameter.h | 5 +- 5 files changed, 309 insertions(+), 133 deletions(-) diff --git a/display.c b/display.c index 78e8bd0..2ef8fae 100755 --- a/display.c +++ b/display.c @@ -26,15 +26,69 @@ extern FILE *filePointer[2]; extern char fileName[2][2096]; + + +void drawLine(void) +{ + showTypeSize_te mySize = getTypeSize(); + showType_te myType = getType(); + switch(myType) + { + case SHOW_TYPE_DECIMAL_SIGNED: + case SHOW_TYPE_DECIMAL_UNSIGNED: + switch(mySize) + { + case SHOW_TYPE_SIZE_8: + printf("-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n"COLOR_NORMAL); + break; + case SHOW_TYPE_SIZE_16: + printf("-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n"COLOR_NORMAL); + break; + case SHOW_TYPE_SIZE_32: + printf("---------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n"COLOR_NORMAL); + break; + case SHOW_TYPE_SIZE_64: + printf("-------------------------------------------------------------------------------------------------------------------------------------------\n"COLOR_NORMAL); + break; + default: + break; + } + break; + case SHOW_TYPE_HEX: + default : + switch(mySize) + { + case SHOW_TYPE_SIZE_8: + printf("---------------------------------------------------------------------------------------------------------------------------------------------------\n"COLOR_NORMAL); + break; + case SHOW_TYPE_SIZE_16: + printf("-----------------------------------------------------------------------------------------------------------------------------------\n"COLOR_NORMAL); + break; + case SHOW_TYPE_SIZE_32: + printf("---------------------------------------------------------------------------------------------------------------------------\n"COLOR_NORMAL); + break; + case SHOW_TYPE_SIZE_64: + printf("-----------------------------------------------------------------------------------------------------------------------\n"COLOR_NORMAL); + break; + default: + break; + } + break; + } +} + + + void showConfiguration(void) { showType_te myType = getType(); showTypeSize_te mySize = getTypeSize(); printf(GO_TOP); - printf(COLOR_BOLD_GREEN"----------------------------------------------------------------------------------------------------------------------------\n"COLOR_NORMAL); + printf(COLOR_BOLD_GREEN); + drawLine(); printf(COLOR_GREEN); - printf("| hewViewer | ofset : %7d octets | ", (int)getOfsetFile()); + printf("| hexViewer | offset : %7d octets | ", (int)getOfsetFile()); printf(" Type (t) : "); switch(myType) { @@ -75,10 +129,11 @@ void showConfiguration(void) break; } printf(COLOR_NORMAL"\n"); - printf(COLOR_GREEN"| File Left << | " COLOR_BOLD_GREEN "%s\n" COLOR_NORMAL, fileName[0]); - printf(COLOR_GREEN"| File Right >> | " COLOR_BOLD_GREEN "%s\n"COLOR_NORMAL, fileName[1]); + printf(COLOR_GREEN"| File Left << | " COLOR_BOLD_GREEN "%s\n" COLOR_NORMAL, fileName[0]); + printf(COLOR_GREEN"| File Right >> | " COLOR_BOLD_GREEN "%s\n"COLOR_NORMAL, fileName[1]); - printf(COLOR_BOLD_GREEN"----------------------------------------------------------------------------------------------------------------------------\n"COLOR_NORMAL); + printf(COLOR_BOLD_GREEN); + drawLine(); } void printNoElement(showType_te localType, showTypeSize_te localSize) @@ -209,7 +264,8 @@ typedef union { uint64_t data_64 [2]; }inputData_tu; -void compareFile(FILE *filePointer1, FILE *filePointer2 ,int32_t CurentFilePosition) + +void compareFile(FILE *filePointer1, FILE *filePointer2 ,int32_t curentFilePosition, int32_t currentPadding) { inputData_tu data1; inputData_tu data2; @@ -222,43 +278,29 @@ void compareFile(FILE *filePointer1, FILE *filePointer2 ,int32_t CurentFilePosit showType_te myType = getType(); // Display the main show - printf(COLOR_BOLD_YELLOW"Ofset : | | "); + printf(COLOR_BOLD_YELLOW" File offset | "); switch(myType) { case SHOW_TYPE_DECIMAL_SIGNED: case SHOW_TYPE_DECIMAL_UNSIGNED: - for (i = 0 ; i<2 ; i++ ) - { + for (i = 0 ; i<2 ; i++ ) { switch(mySize) { case SHOW_TYPE_SIZE_8: - for (j=0; j<2 ; j++ ) { - printf(" +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F | "); - } + printf(" +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F | "); break; case SHOW_TYPE_SIZE_16: - for (j=0; j<2 ; j++ ) { - printf(" +0 +2 +4 +6 +8 +A +C +E | "); - } + printf(" +0 +2 +4 +6 +8 +A +C +E | "); break; case SHOW_TYPE_SIZE_32: - for (j=0; j<2 ; j++ ) { - printf(" +0 +4 +8 +C | "); - } + printf(" +0 +4 +8 +C | "); break; case SHOW_TYPE_SIZE_64: - for (j=0; j<2 ; j++ ) { - printf(" +0 +8 | "); - } + printf(" +0 +8 | "); break; default: break; } - if (i == 0) - { - printf(COLOR_NORMAL"\n"); - printf(COLOR_BOLD_MAGENTA" | ofset | "); - } } break; case SHOW_TYPE_HEX: @@ -267,75 +309,100 @@ void compareFile(FILE *filePointer1, FILE *filePointer2 ,int32_t CurentFilePosit switch(mySize) { case SHOW_TYPE_SIZE_8: - for (j=0; j<2 ; j++ ) { - printf("+0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F | "); - } + printf("+0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F | "); break; case SHOW_TYPE_SIZE_16: - for (j=0; j<2 ; j++ ) { - printf(" +0 +2 +4 +6 +8 +A +C +E | "); - } + printf(" +0 +2 +4 +6 +8 +A +C +E | "); break; case SHOW_TYPE_SIZE_32: - for (j=0; j<2 ; j++ ) { - printf(" +0 +4 +8 +C | "); - } + printf(" +0 +4 +8 +C | "); break; case SHOW_TYPE_SIZE_64: - for (j=0; j<2 ; j++ ) { - printf(" +0 +8 | "); - } + printf(" +0 +8 | "); break; default: break; } - if (i == 0) - { - printf(COLOR_NORMAL"\n"); - printf(COLOR_BOLD_MAGENTA" | ofset | "); - } } break; } + printf(COLOR_BOLD_YELLOW" File offset | "); printf(COLOR_NORMAL"\n"); // Display the main show - printf(COLOR_BOLD_YELLOW"----------------------------------------------------------------------------------------------------------------------------"); - printf(COLOR_NORMAL"\n"); + printf(COLOR_BOLD_YELLOW); + drawLine(); for (j=0; j < NB_MAX_LINE; j++) { uint32_t readFile1 = 0; uint32_t readFile2 = 0; - uint32_t lineNumber = 0; + int32_t lineNumber = 0; uint32_t numberOfCycle; // read data in files : memset(data1.data_8, 0, 16 * sizeof(uint8_t)); memset(data2.data_8, 0, 16 * sizeof(uint8_t)); + // Generate the ofset in the file + int32_t positionStartDisplayFile1 = curentFilePosition + j*NB_DATA_PER_LINE*4; + int32_t positionStartDisplayFile2 = curentFilePosition + j*NB_DATA_PER_LINE*4; + if (currentPadding < 0) { + positionStartDisplayFile1 += currentPadding; + } else { + positionStartDisplayFile2 -= currentPadding; + } + readFile1 = 0; + int32_t readStartFile1 = 16; if (filePointer1 != NULL) { - readFile1 = fread(data1.data_8, sizeof(uint8_t), 16, filePointer1); + if (positionStartDisplayFile1 >= 0) { + fseek(filePointer1 , positionStartDisplayFile1 , SEEK_SET ); + readFile1 = fread(data1.data_8, sizeof(uint8_t), 16, filePointer1); + readStartFile1 = 0; + } else if (positionStartDisplayFile1 > -NB_DATA_PER_LINE*4) { + fseek(filePointer1 , 0 , SEEK_SET ); + // Special case of the partial display ... + readFile1 = fread(data1.data_8 - positionStartDisplayFile1, sizeof(uint8_t), NB_DATA_PER_LINE*4 + positionStartDisplayFile1, filePointer1); + readStartFile1 = NB_DATA_PER_LINE*4 - readFile1; + readFile1 = 16; + } } + readFile2 = 0; + int32_t readStartFile2 = 16; if (filePointer2 != NULL) { - readFile2 = fread(data2.data_8, sizeof(uint8_t), 16, filePointer2); + if (positionStartDisplayFile2 >= 0) { + fseek(filePointer2 , positionStartDisplayFile2 , SEEK_SET ); + readFile2 = fread(data2.data_8, sizeof(uint8_t), 16, filePointer2); + readStartFile2 = 0; + } else if (positionStartDisplayFile2 > -NB_DATA_PER_LINE*4) { + fseek(filePointer2 , 0 , SEEK_SET ); + // Special case of the partial display ... + readFile2 = fread(data2.data_8 - positionStartDisplayFile2, sizeof(uint8_t), NB_DATA_PER_LINE*4 + positionStartDisplayFile2, filePointer2); + readStartFile2 = NB_DATA_PER_LINE*4 - readFile2; + readFile2 = 16; + } } + // display the line number - lineNumber = j * (NB_DATA_PER_LINE*4) + CurentFilePosition; - printf(COLOR_BOLD_YELLOW"0x%08x | "COLOR_NORMAL, (unsigned int)lineNumber); - switch(mySize) - { - case SHOW_TYPE_SIZE_8: - printf(COLOR_BOLD_MAGENTA"%7d | "COLOR_NORMAL, (int)(lineNumber)); - break; - case SHOW_TYPE_SIZE_16: - printf(COLOR_BOLD_MAGENTA"%7d | "COLOR_NORMAL, (int)(lineNumber/2)); - break; - case SHOW_TYPE_SIZE_32: - printf(COLOR_BOLD_MAGENTA"%7d | "COLOR_NORMAL, (int)(lineNumber/4)); - break; - case SHOW_TYPE_SIZE_64: - printf(COLOR_BOLD_MAGENTA"%7d | "COLOR_NORMAL, (int)(lineNumber/8)); - break; - default: - break; + lineNumber = positionStartDisplayFile1; + if (lineNumber+NB_DATA_PER_LINE*4-1 >= 0) { + printf(COLOR_BOLD_YELLOW"0x%08x | "COLOR_NORMAL, (unsigned int)lineNumber); + switch(mySize) + { + case SHOW_TYPE_SIZE_8: + printf(COLOR_BOLD_MAGENTA"%7d | "COLOR_NORMAL, (int)(lineNumber)); + break; + case SHOW_TYPE_SIZE_16: + printf(COLOR_BOLD_MAGENTA"%7d | "COLOR_NORMAL, (int)(lineNumber/2)); + break; + case SHOW_TYPE_SIZE_32: + printf(COLOR_BOLD_MAGENTA"%7d | "COLOR_NORMAL, (int)(lineNumber/4)); + break; + case SHOW_TYPE_SIZE_64: + printf(COLOR_BOLD_MAGENTA"%7d | "COLOR_NORMAL, (int)(lineNumber/8)); + break; + default: + break; + } + } else { + printf(COLOR_BOLD_YELLOW" | "COLOR_BOLD_MAGENTA" | "COLOR_NORMAL); } if (readFile1 == 0) { switch(mySize) @@ -371,8 +438,8 @@ void compareFile(FILE *filePointer1, FILE *filePointer2 ,int32_t CurentFilePosit case SHOW_TYPE_SIZE_8: numberOfCycle = 16; for (i = 0; i< numberOfCycle; i++) { - if (readFile1 >= (i+1)) { - bool OutOfRange = (readFile2 >= (i+1)); + if (readFile1 >= (i+1) && readStartFile1 <= (int32_t)i ) { + bool OutOfRange = (readFile2 >= (i+1) && readStartFile2 <= (int32_t)i); bool identic = (data1.data_8[i] != data2.data_8[i]); printElement((uint64_t)data1.data_8[i], myType, mySize, identic, OutOfRange); } else { @@ -383,8 +450,8 @@ void compareFile(FILE *filePointer1, FILE *filePointer2 ,int32_t CurentFilePosit case SHOW_TYPE_SIZE_16: numberOfCycle = 8; for (i = 0; i< numberOfCycle; i++) { - if ((readFile1/2) >= (i+1)) { - bool OutOfRange = ((readFile2/2) >= (i+1)); + if ((readFile1/2) >= (i+1) && readStartFile1/2 <= (int32_t)i) { + bool OutOfRange = ((readFile2/2) >= (i+1) && readStartFile2/2 <= (int32_t)i); bool identic = (data1.data_16[i] != data2.data_16[i]); printElement((uint64_t)data1.data_16[i], myType, mySize, identic, OutOfRange); } else { @@ -395,8 +462,8 @@ void compareFile(FILE *filePointer1, FILE *filePointer2 ,int32_t CurentFilePosit case SHOW_TYPE_SIZE_32: numberOfCycle = 4; for (i = 0; i< numberOfCycle; i++) { - if ((readFile1/4) >= (i+1)) { - bool OutOfRange = ((readFile2/4) >= (i+1)); + if ((readFile1/4) >= (i+1) && readStartFile1/4 <= (int32_t)i) { + bool OutOfRange = ((readFile2/4) >= (i+1) && readStartFile2/4 <= (int32_t)i); bool identic = (data1.data_32[i] != data2.data_32[i]); printElement((uint64_t)data1.data_32[i], myType, mySize, identic, OutOfRange); } else { @@ -407,8 +474,8 @@ void compareFile(FILE *filePointer1, FILE *filePointer2 ,int32_t CurentFilePosit case SHOW_TYPE_SIZE_64: numberOfCycle = 2; for (i = 0; i< numberOfCycle; i++) { - if ((readFile1/8) >= (i+1)) { - bool OutOfRange = ((readFile2/8) >= (i+1)); + if ((readFile1/8) >= (i+1) && readStartFile1/8 <= (int32_t)i) { + bool OutOfRange = ((readFile2/8) >= (i+1) && readStartFile2/8 <= (int32_t)i); bool identic = (data1.data_64[i] != data2.data_64[i]); printElement((uint64_t)data1.data_64[i], myType, mySize, identic, OutOfRange); } else { @@ -457,8 +524,8 @@ void compareFile(FILE *filePointer1, FILE *filePointer2 ,int32_t CurentFilePosit case SHOW_TYPE_SIZE_8: numberOfCycle = 16; for (i = 0; i< numberOfCycle; i++) { - if (readFile2 >= (i+1)) { - bool OutOfRange = (readFile1 >= (i+1)); + if (readFile2 >= (i+1) && readStartFile2 <= (int32_t)i ) { + bool OutOfRange = (readFile1 >= (i+1) && readStartFile1 <= (int32_t)i); bool identic = (data1.data_8[i] != data2.data_8[i]); printElement((uint64_t)data2.data_8[i], myType, mySize, identic, OutOfRange); } else { @@ -469,8 +536,8 @@ void compareFile(FILE *filePointer1, FILE *filePointer2 ,int32_t CurentFilePosit case SHOW_TYPE_SIZE_16: numberOfCycle = 8; for (i = 0; i< numberOfCycle; i++) { - if ((readFile2/2) >= (i+1)) { - bool OutOfRange = ((readFile1/2) >= (i+1)); + if ((readFile2/2) >= (i+1) && readStartFile2/2 <= (int32_t)i ) { + bool OutOfRange = ((readFile1/2) >= (i+1) && readStartFile1/2 <= (int32_t)i); bool identic = (data1.data_16[i] != data2.data_16[i]); printElement((uint64_t)data2.data_16[i], myType, mySize, identic, OutOfRange); } else { @@ -481,8 +548,8 @@ void compareFile(FILE *filePointer1, FILE *filePointer2 ,int32_t CurentFilePosit case SHOW_TYPE_SIZE_32: numberOfCycle = 4; for (i = 0; i< numberOfCycle; i++) { - if ((readFile2/4) >= (i+1)) { - bool OutOfRange = ((readFile1/4) >= (i+1)); + if ((readFile2/4) >= (i+1) && readStartFile2/4 <= (int32_t)i ) { + bool OutOfRange = ((readFile1/4) >= (i+1) && readStartFile1/4 <= (int32_t)i); bool identic = (data1.data_32[i] != data2.data_32[i]); printElement((uint64_t)data2.data_32[i], myType, mySize, identic, OutOfRange); } else { @@ -493,8 +560,8 @@ void compareFile(FILE *filePointer1, FILE *filePointer2 ,int32_t CurentFilePosit case SHOW_TYPE_SIZE_64: numberOfCycle = 2; for (i = 0; i< numberOfCycle; i++) { - if ((readFile2/8) >= (i+1)) { - bool OutOfRange = ((readFile1/8) >= (i+1)); + if ((readFile2/8) >= (i+1) && readStartFile2/8 <= (int32_t)i ) { + bool OutOfRange = ((readFile1/8) >= (i+1) && readStartFile1/8 <= (int32_t)i); bool identic = (data1.data_64[i] != data2.data_64[i]); printElement((uint64_t)data2.data_64[i], myType, mySize, identic, OutOfRange); } else { @@ -509,7 +576,31 @@ void compareFile(FILE *filePointer1, FILE *filePointer2 ,int32_t CurentFilePosit i++; } } - printf(COLOR_NORMAL" |\n"); + + + lineNumber = positionStartDisplayFile2; + if (lineNumber+NB_DATA_PER_LINE*4-1 >= 0) { + switch(mySize) + { + case SHOW_TYPE_SIZE_8: + printf(COLOR_BOLD_MAGENTA" | %7d ", (int)(lineNumber)); + break; + case SHOW_TYPE_SIZE_16: + printf(COLOR_BOLD_MAGENTA" | %7d ", (int)(lineNumber/2)); + break; + case SHOW_TYPE_SIZE_32: + printf(COLOR_BOLD_MAGENTA" | %7d ", (int)(lineNumber/4)); + break; + case SHOW_TYPE_SIZE_64: + printf(COLOR_BOLD_MAGENTA" | %7d ", (int)(lineNumber/8)); + break; + default: + break; + } + printf(COLOR_BOLD_YELLOW"| 0x%08x"COLOR_NORMAL " |\n", (unsigned int)lineNumber); + } else { + printf(COLOR_BOLD_MAGENTA" | "COLOR_BOLD_YELLOW"| "COLOR_NORMAL " |\n"); + } } } @@ -526,14 +617,9 @@ void * threadDisplay (void * p_data) while (1) { if (getParamModification()) { - uint32_t CurentFilePosition = getOfsetFile(); - if (filePointer[0] != NULL) { - fseek ( filePointer[0] , CurentFilePosition , SEEK_SET ); - } - if (NULL != filePointer[1]) { - fseek ( filePointer[1] , CurentFilePosition , SEEK_SET ); - } - compareFile(filePointer[0],filePointer[1], CurentFilePosition); + uint32_t curentFilePosition = getOfsetFile(); + uint32_t curentFilePadding = getPaddingOffsetFile(); + compareFile(filePointer[0],filePointer[1], curentFilePosition, curentFilePadding); } else { usleep(10000); } diff --git a/generalDefine.h b/generalDefine.h index 9be62e9..e465205 100755 --- a/generalDefine.h +++ b/generalDefine.h @@ -82,7 +82,7 @@ typedef signed long long int int64_t; #define NB_DATA_PER_LINE (4) -#define NB_MAX_LINE (50) +#define NB_MAX_LINE (45) diff --git a/main.c b/main.c index 419d7d4..f4bd502 100755 --- a/main.c +++ b/main.c @@ -30,6 +30,7 @@ +bool filePresent[2] = {false, false}; FILE *filePointer[2] = {NULL, NULL}; uint32_t filesize[2] = {0, 0}; char fileName[2][2096] = {"",""}; @@ -52,6 +53,7 @@ void usage(void) printf("\t\t[LEFT] Go up 50 line in the view (one screen)\n"); printf("\t\t[RIGHT] Go down 50 line in the view (one screen)\n"); printf("\t\n"); + /* printf("\tTODO : \n"); printf("\t\t- The print of 128 bytes\n"); printf("\t\t- The print in Octal\n"); @@ -67,6 +69,7 @@ void usage(void) printf("\t\t- Add to the croling bar the differences in the two files\n"); printf("\t\t- The research of a sequency in the two files ==> [R]\n"); printf("\t\t- The jump to an offset directly ==> [J] \n"); + */ /*printf("\t\t- \n");*/ } @@ -87,69 +90,99 @@ int32_t findFirstDiff(void) || NULL == filePointer[1] ) { return 0; } + if(NULL != filePointer[0]) { + fseek ( filePointer[0] , 0 , SEEK_SET ); + } + if(NULL != filePointer[1]) { + fseek ( filePointer[1] , 0 , SEEK_SET ); + } while ( fread(&data1, sizeof(uint8_t), 1, filePointer[0]) == 1 && fread(&data2, sizeof(uint8_t), 1, filePointer[1]) == 1) { offset ++; - if (data1 != data2) - { + if (data1 != data2) { return offset; } } return offset; } +void UpdateFilesSize(void) +{ + // get size file 1 + if ( NULL != filePointer[0]) { + fseek ( filePointer[0] , 0 , SEEK_END ); + filesize[0] = ftell (filePointer[0]); + fseek ( filePointer[0] , 0 , SEEK_SET ); + } + // get size file 2 + if ( NULL != filePointer[1]) { + fseek ( filePointer[1] , 0 , SEEK_END ); + filesize[1] = ftell (filePointer[1]); + fseek ( filePointer[1] , 0 , SEEK_SET ); + } +} + +void OpenFiles(void) { + filePointer[0] = NULL; + filePointer[1] = NULL; + filesize[0] = 0; + filesize[1] = 0; + if (true == filePresent[0]) { + // Open file 1 + filePointer[0] = fopen(fileName[0], "rb"); + if ( NULL == filePointer[0]) { + printf("Can not Open [File_1] = %s\n", fileName[0]); + } + } + if (true == filePresent[1]) { + // open File 2 + filePointer[1] = fopen(fileName[1], "rb"); + if ( NULL == filePointer[1]) { + printf("Can not Open [File_2] = %s\n", fileName[1]); + } + } + UpdateFilesSize(); +} + + +void CloseFiles(void) { + if (NULL != filePointer[0]) { + fclose(filePointer[0]); + filePointer[0] = NULL; + } if (NULL != filePointer[1]) { + fclose(filePointer[1]); + filePointer[1] = NULL; + } +} + int main (int argc, char**argv) { int32_t first_Error = 0; filePointer[0] = NULL; filePointer[1] = NULL; - filesize[0] = 0; - filesize[1] = 0; strcpy(fileName[0], "No-File"); strcpy(fileName[1], "No-File"); + // check error if (3 < argc || argc < 2) { printf("You set more than 3 argument at the commande line\n"); usage(); return -1; } - + // one file if (2 <= argc) { - // Open file 1 - filePointer[0] = fopen(argv[1], "rb"); strcpy(fileName[0], argv[1]); - if ( NULL == filePointer[0]) { - printf("Can not Open [File_1] = %s\n", fileName[0]); - } - // get size file 1 - if ( NULL != filePointer[0]) { - fseek ( filePointer[0] , 0 , SEEK_END ); - filesize[0] = ftell (filePointer[0]); - fseek ( filePointer[0] , 0 , SEEK_SET ); - } else { - filesize[0] = 0; - } + filePresent[0] = true; } + // a second file if (3 <= argc) { - // open File 2 - filePointer[1] = fopen(argv[2], "rb"); strcpy(fileName[1], argv[2]); - if ( NULL == filePointer[1]) { - printf("Can not Open [File_2] = %s\n", fileName[1]); - } - // get size file 2 - if ( NULL != filePointer[1]) { - fseek ( filePointer[1] , 0 , SEEK_END ); - filesize[1] = ftell (filePointer[1]); - fseek ( filePointer[1] , 0 , SEEK_SET ); - } else { - filesize[1] = 0; - } + filePresent[1] = true; } - // try to find the first error... - first_Error = findFirstDiff(); + // open the files + OpenFiles(); // rendre la lecture des données non canonique system("stty -icanon"); @@ -214,7 +247,10 @@ int main (int argc, char**argv) // find the first ERROR case 'f': case 'F': - setOfsetFile((first_Error/16)*16 - 256); + // try to find the first error... + first_Error = findFirstDiff(); + setOfsetFile((first_Error/16)*16 - 128); + needRedraw(); break; // find the first ERROR case 'a': @@ -225,6 +261,7 @@ int main (int argc, char**argv) case 'z': case 'Z': { + UpdateFilesSize(); static bool whichElement = false; if (whichElement == false) { whichElement = true; @@ -235,6 +272,35 @@ int main (int argc, char**argv) } } break; + // Reload the 2 files + case 'r': + case 'R': + CloseFiles(); + OpenFiles(); + needRedraw(); + break; + // Add padding offset between left an right file + case 'o': + case 'O': + displayPaddingOffset(1); + break; + case 'l': + case 'L': + displayPaddingOffset(-1); + break; + case 'p': + case 'P': + displayPaddingOffset(16); + break; + case 'm': + case 'M': + displayPaddingOffset(-16); + break; + // Clear the padding + case 'k': + case 'K': + displayPaddingOffsetClear(); + break; } } } else { @@ -242,11 +308,7 @@ int main (int argc, char**argv) } exit_programme : - if (NULL != filePointer[0]) { - fclose(filePointer[0]); - } if (NULL != filePointer[1]) { - fclose(filePointer[1]); - } + CloseFiles(); // remettre la lecture des données canonique system("stty icanon"); diff --git a/parameter.c b/parameter.c index bcadb9c..5dceead 100755 --- a/parameter.c +++ b/parameter.c @@ -27,6 +27,7 @@ // Parameter Local Value : static uint32_t fileOfset = 0; +static uint32_t paddingOffset = 0; static bool parmamModifier = true; @@ -68,6 +69,24 @@ uint32_t getOfsetFile(void) return fileOfset; } +void displayPaddingOffset(int32_t size) +{ + paddingOffset += size; + parmamModifier = true; +} + +void displayPaddingOffsetClear(void) +{ + paddingOffset = 0; + parmamModifier = true; +} + +int32_t getPaddingOffsetFile(void) +{ + return paddingOffset; +} + + bool getParamModification() { if (parmamModifier == true) { @@ -78,7 +97,9 @@ bool getParamModification() } } - +void needRedraw(void) { + parmamModifier = true; +} void nextType(void) { @@ -137,3 +158,7 @@ showTypeSize_te getTypeSize(void) { return curentTypeSize; } + + + + diff --git a/parameter.h b/parameter.h index 0babd89..d3a94c2 100755 --- a/parameter.h +++ b/parameter.h @@ -35,12 +35,15 @@ void upDownOfsetFile(int32_t offset); uint32_t getOfsetFile(void); bool getParamModification(); - +void needRedraw(void); void nextType(void); showType_te getType(void); void nextTypeSize(void); showTypeSize_te getTypeSize(void); +void displayPaddingOffset(int32_t size); +void displayPaddingOffsetClear(void); +int32_t getPaddingOffsetFile(void); #endif