From 9ac121993d5bae2b55b8300c38fe198eace3dcf7 Mon Sep 17 00:00:00 2001 From: Edouard Dupin Date: Tue, 14 Feb 2012 11:37:18 +0100 Subject: [PATCH] Add mouse an auto adaptation of the windows size --- display.c | 5 +++- generalDefine.h | 5 +++- main.c | 68 +++++++++++++++++++++++++++++++++++++++++-------- parameter.c | 45 ++++++++++++++++++++++++++++++-- parameter.h | 10 ++++++++ 5 files changed, 119 insertions(+), 14 deletions(-) diff --git a/display.c b/display.c index 2ef8fae..d8de2d6 100755 --- a/display.c +++ b/display.c @@ -84,7 +84,10 @@ void showConfiguration(void) showType_te myType = getType(); showTypeSize_te mySize = getTypeSize(); + // TODO : Redraw periodicly + //CleanDisplay(); printf(GO_TOP); + printf(COLOR_BOLD_GREEN); drawLine(); printf(COLOR_GREEN); @@ -333,7 +336,7 @@ void compareFile(FILE *filePointer1, FILE *filePointer2 ,int32_t curentFilePosit // Display the main show printf(COLOR_BOLD_YELLOW); drawLine(); - for (j=0; j < NB_MAX_LINE; j++) { + for (j=0; j < (GetNumberOfRaw()-NB_HEARDER_RAW); j++) { uint32_t readFile1 = 0; uint32_t readFile2 = 0; int32_t lineNumber = 0; diff --git a/generalDefine.h b/generalDefine.h index e465205..143a0b1 100755 --- a/generalDefine.h +++ b/generalDefine.h @@ -75,14 +75,17 @@ typedef signed long long int int64_t; // Return to the normal color setings #define COLOR_NORMAL "\e[0m" +#define MOUSE_REPORTING_ENABLE "\e[?9h" +#define MOUSE_REPORTING_DISABLE "\e[?9l" +#define CURSOR_DISPLAY_DISABLE "\e[?25l" +#define CURSOR_DISPLAY_ENABLE "\e[?12l\e[?25h" //go to the Top of bash #define GO_TOP "\e[0;0f" #define NB_DATA_PER_LINE (4) -#define NB_MAX_LINE (45) diff --git a/main.c b/main.c index ea9e819..1db9b8b 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}; @@ -138,14 +139,14 @@ void OpenFiles(void) { // Open file 1 filePointer[0] = fopen(fileName[0], "rb"); if ( NULL == filePointer[0]) { - printf("Can not Open [File_1] = %s\n", fileName[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]); + //printf("Can not Open [File_2] = %s\n", fileName[1]); } } UpdateFilesSize(); @@ -171,6 +172,8 @@ int main (int argc, char**argv) strcpy(fileName[0], "No-File"); strcpy(fileName[1], "No-File"); + UpdateNumberOfRawAndColomn(); + // check error if (3 < argc || argc < 2) { printf("You set more than 3 argument at the commande line\n"); @@ -194,10 +197,14 @@ int main (int argc, char**argv) system("stty -icanon"); // supression de l'écho des caractères system("stty -echo"); - + // enable mouse event ... + printf(MOUSE_REPORTING_ENABLE); + // hide cursor ... + printf(CURSOR_DISPLAY_DISABLE); system("clear"); - - + CleanDisplay(); + + int ret = 0; pthread_t HangleThreadDisplay; @@ -206,9 +213,45 @@ int main (int argc, char**argv) { while (1) { - uint32_t inputValue; - inputValue = getc (stdin); - //printf("\n get data : 0x%08x ..... : \n", (unsigned int)inputValue); + int32_t inputValue; + inputValue = getc(stdin); + if (inputValue == 0x1b) { + // mose event : + int32_t val2 = getc(stdin); + int32_t val3 = getc(stdin); + int32_t val4 = getc(stdin); + int32_t val5 = getc(stdin); + int32_t val6 = getc(stdin); + int32_t bt=0; + switch (val4) { + case 97: + bt = 4; + break; + case 96: + bt = 5; + break; + case 32: + bt = 1; + break; + case 33: + bt = 3; + break; + } + //printf("\n mouse event : %d, %d, %d, %d=%d x=%d y=%d\n", inputValue, val2, val3, val4, bt, val5-33, val6-33); + (void)val2; + (void)val3; + (void)val4; + (void)val5; + (void)val6; + if (bt == 4) { + upDownOfsetFile(5); + } else if (bt == 5) { + upDownOfsetFile(-5); + } + inputValue = 0; + } else { + //printf("\n get data : 0x%08x ..... : \n", (unsigned int)inputValue); + } switch(inputValue) { case 'q': @@ -233,9 +276,9 @@ int main (int argc, char**argv) } else if ( inputValue == 0x42) { upDownOfsetFile(5); } else if ( inputValue == 0x43) { - upDownOfsetFile(NB_MAX_LINE); + upDownOfsetFile((GetNumberOfRaw()-NB_HEARDER_RAW)); } else if ( inputValue == 0x44) { - upDownOfsetFile(-NB_MAX_LINE); + upDownOfsetFile(-(GetNumberOfRaw()-NB_HEARDER_RAW)); } } } @@ -282,6 +325,7 @@ int main (int argc, char**argv) case 'r': case 'R': CloseFiles(); + //UpdateNumberOfRawAndColomn(); OpenFiles(); needRedraw(); break; @@ -312,6 +356,10 @@ int main (int argc, char**argv) exit_programme : CloseFiles(); + // disable mouse event ... + printf(MOUSE_REPORTING_DISABLE); + // Back cursor ON ... + printf(CURSOR_DISPLAY_ENABLE); // remettre la lecture des données canonique system("stty icanon"); // repositionnement de l'écho des caractères diff --git a/parameter.c b/parameter.c index 5dceead..87ed3d8 100755 --- a/parameter.c +++ b/parameter.c @@ -24,6 +24,8 @@ */ #include "parameter.h" +#include +#include // Parameter Local Value : static uint32_t fileOfset = 0; @@ -37,6 +39,25 @@ static showTypeSize_te curentTypeSize = SHOW_TYPE_SIZE_8; extern uint32_t filesize[2]; +void CleanDisplay(void) +{ + //system("clear"); + UpdateNumberOfRawAndColomn(); + printf(GO_TOP); + for (int32_t iii=0; iii< GetNumberOfRaw(); iii++) { + for (int32_t jjj=0; jjj < GetNumberOfColomn()-1; jjj++) { + printf(" "); + } + if (iii< GetNumberOfRaw()-1) { + printf("\n"); + } + } + printf(GO_TOP); +} + + + + void setOfsetFile(int32_t offset) { if (0 > offset) { @@ -118,7 +139,7 @@ void nextType(void) curentType = SHOW_TYPE_HEX; break; } - system("clear"); + CleanDisplay(); parmamModifier = true; } @@ -150,7 +171,7 @@ void nextTypeSize(void) curentTypeSize = SHOW_TYPE_SIZE_8; break; } - system("clear"); + CleanDisplay(); parmamModifier = true; } @@ -160,5 +181,25 @@ showTypeSize_te getTypeSize(void) } +int32_t nbRaw = 20; +int32_t nbColomn = 70; + +void UpdateNumberOfRawAndColomn(void) +{ + struct winsize w; + ioctl(0, TIOCGWINSZ, &w); + nbRaw = w.ws_row; + nbColomn = w.ws_col; +} +int32_t GetNumberOfRaw(void) +{ + return nbRaw; +} + +int32_t GetNumberOfColomn(void) +{ + return nbColomn; +} + diff --git a/parameter.h b/parameter.h index d3a94c2..ab6646b 100755 --- a/parameter.h +++ b/parameter.h @@ -45,5 +45,15 @@ showTypeSize_te getTypeSize(void); void displayPaddingOffset(int32_t size); void displayPaddingOffsetClear(void); int32_t getPaddingOffsetFile(void); + + +#define NB_HEARDER_RAW (8) + +void UpdateNumberOfRawAndColomn(void); +int32_t GetNumberOfRaw(void); +int32_t GetNumberOfColomn(void); + +void CleanDisplay(void); + #endif