/****************************************************************************** * * Title : commandFunc_compareFiles.c * Version 0.0 * * Description: This command compares the content of two binary files of the SAME size! * * * Author: Lukas Tomasek, tomasekl@fzu.cz * ******************************************************************************/ /****************************************************************************** * Header files * ******************************************************************************/ #include #include #include "commandListDefinitions.h" #include "commandFunc_compareFiles.h" #include "commandParamsUir.h" #include "globalDefinitions.h" #include "uirUtility.h" #include "commandStatusMessage.h" #include "RWlists.h" /****************************************************************************** * Global functions * ******************************************************************************/ /*============================================================================= * commandFunction_compareFiles() *============================================================================= * * * */ ERROR_ID commandFunction_compareFiles(COMMAND_FUNC_OPTION funcOption, struct COMMAND *command, UINT8 slotNumber, FILE *file){ struct HOST *host; const int panel=global.panel.commandEdit[COMPARE_FILES_COMMAND_ID]; struct COMPARE_FILES_PARAMS *compFiles=&command->params.compareFiles; int status; ERROR_ID errorId=SUCCESS; unsigned int rodFileSize; unsigned int commonFileSize; int option; UINT8 *commFileBuffer; UINT8 *rodFileBuffer; int i, m; char rodFileName[PATHNAME_LENGTH]; char inputText[500]; UINT8 *dataMaskByte; switch(funcOption){ case COMMAND_TO_LIST: GetCtrlVal(panel, COMP_FILES_COMMON_FILE, compFiles->commonFile); GetCtrlVal(panel, COMP_FILES_ROD_FILE, compFiles->rodFile); GetCtrlVal(panel, COMP_FILES_WORD_SIZE, &compFiles->wordSizeInBytes); GetCtrlVal(panel, COMP_FILES_DATA_MASK0, &compFiles->dataMask[0]); GetCtrlVal(panel, COMP_FILES_DATA_MASK1, &compFiles->dataMask[1]); if(compFiles->commonFile[0]==0) { status = MessagePopup ("WARNING", "No CommonDataFile selected!!"); UIR_STATUS_CHECK(status, MessagePopup()); return(PROGRAM_WARNING); } if(compFiles->rodFile[0]==0) { status = MessagePopup ("WARNING", "No RodDataFile selected!!"); UIR_STATUS_CHECK(status, MessagePopup()); return(PROGRAM_WARNING); } break; case LIST_TO_COMMAND: SetCtrlVal(panel, COMP_FILES_COMMON_FILE, compFiles->commonFile); SetCtrlVal(panel, COMP_FILES_ROD_FILE, compFiles->rodFile); SetCtrlVal(panel, COMP_FILES_WORD_SIZE, compFiles->wordSizeInBytes); SetCtrlVal(panel, COMP_FILES_DATA_MASK0, compFiles->dataMask[0]); SetCtrlVal(panel, COMP_FILES_DATA_MASK1, compFiles->dataMask[1]); status=SetInputMode(panel, COMP_FILES_DATA_MASK1, (compFiles->wordSizeInBytes>4)); UIR_STATUS_CHECK(status, SetInputMode()); break; case COMMAND_EXECUTION: host=global.host[HOST_INDEX(slotNumber)]; if(slotNumber==TIM_SLOT_NUMBER){ strcpy(rodFileName, global.rodDataDir[HOST_INDEX(slotNumber)]); }else{ strcpy(rodFileName, host->dataDir); } strcat(rodFileName, compFiles->rodFile); errorId=getFileSize(rodFileName, &rodFileSize); ERROR_CHECK(errorId, getFileSize()); if(errorId!=SUCCESS){ sprintf(inputText,"##COMPARE FILES - cannot read RodFile(%s)!!\n",rodFileName); if(slotNumber==TIM_SLOT_NUMBER){ programError(__FILE__, __LINE__, COMMAND_ERROR, "getFileSize()", errorId, inputText); }else{ errorId=commandStatusMessage(host, host->commandStatusFile, inputText); HOST_ERROR_CHECK(errorId, host, commandStatusMessage()); } return(COMMAND_ERROR); } errorId=getFileSize(compFiles->commonFile, &commonFileSize); ERROR_CHECK(errorId, getFileSize()); if(errorId!=SUCCESS){ sprintf(inputText,"##COMPARE FILES - cannot read CommonFile(%s)!!\n",compFiles->commonFile); if(slotNumber==TIM_SLOT_NUMBER){ programError(__FILE__, __LINE__, COMMAND_ERROR, "getFileSize()", errorId, inputText); }else{ errorId=commandStatusMessage(host, host->commandStatusFile, inputText); HOST_ERROR_CHECK(errorId, host, commandStatusMessage()); } return(COMMAND_ERROR); } /* compare sizes */ if(commonFileSize!=rodFileSize){ sprintf(inputText,"##COMPARE FILES - CommonFile(%s) and RodFile(%s)\n are NOT the same SIZE!!\n",compFiles->commonFile, rodFileName); if(slotNumber==TIM_SLOT_NUMBER){ programError(__FILE__, __LINE__, COMMAND_ERROR, "commandFunc_compareFiles()", errorId, inputText); }else{ errorId=commandStatusMessage(host, host->commandStatusFile, inputText); HOST_ERROR_CHECK(errorId, host, commandStatusMessage()); } return(COMMAND_ERROR); } rodFileBuffer=malloc(rodFileSize); if(rodFileBuffer==NULL){ ERROR_CHECK(PROGRAM_ERROR, malloc()); return(PROGRAM_ERROR); } errorId=readFromBinFile(rodFileName, rodFileBuffer, rodFileSize); ERROR_CHECK(errorId, readFromBinFile()); if(errorId!=SUCCESS){ free(rodFileBuffer); /* !!! */ return(COMMAND_ERROR); } commFileBuffer=malloc(commonFileSize); if(commFileBuffer==NULL){ ERROR_CHECK(PROGRAM_ERROR, malloc()); free(rodFileBuffer); return(PROGRAM_ERROR); } errorId=readFromBinFile(compFiles->commonFile, commFileBuffer, commonFileSize); ERROR_CHECK(errorId, readFromBinFile()); if(errorId!=SUCCESS){ free(rodFileBuffer); free(commFileBuffer); return(COMMAND_ERROR); } dataMaskByte=(UINT8*)compFiles->dataMask; /* compare data */ for(i=0, m=0; icommonFile, rodFileName, i); if(slotNumber==TIM_SLOT_NUMBER){ programError(__FILE__, __LINE__, COMMAND_ERROR, "commandFunc_compareFiles()", errorId, inputText); }else{ errorId=commandStatusMessage(host, host->commandStatusFile, inputText); HOST_ERROR_CHECK(errorId, host, commandStatusMessage()); } free(rodFileBuffer); free(commFileBuffer); return(COMMAND_ERROR); } ++m; if(m>=compFiles->wordSizeInBytes){ m=0; } } free(rodFileBuffer); free(commFileBuffer); break; case SAVE_CMD_TO_FILE: fprintf(file, "wordSizeInBytes= %d, dataMask[]={ 0x%X, 0x%X }\n", compFiles->wordSizeInBytes, compFiles->dataMask[0], compFiles->dataMask[1]); fprintf(file, "commonFile[]= %s\n", compFiles->commonFile); fprintf(file, "rodFile[]= %s\n", compFiles->rodFile); break; case LOAD_CMD_FROM_FILE: status=fscanf(file, "wordSizeInBytes= %d, dataMask[]={ 0x%X, 0x%X }\n", &compFiles->wordSizeInBytes, &compFiles->dataMask[0], &compFiles->dataMask[1]); if(status==-1) {ERROR_CHECK(FATAL_ERROR, Read from cmd file error!); return(FATAL_ERROR);} status=readLineFromIndex(file, strlen("commonFile[]= "), PATHNAME_LENGTH, compFiles->commonFile); if(status!=0) {ERROR_CHECK(FATAL_ERROR, Read from cmd file error!); return(FATAL_ERROR);} status=readLineFromIndex(file, strlen("rodFile[]= "), PATHNAME_LENGTH, compFiles->rodFile); if(status!=0) {ERROR_CHECK(FATAL_ERROR, Read from cmd file error!); return(FATAL_ERROR);} break; default: ; } return(SUCCESS); } /******************************************************************************/