/****************************************************************************** * * binConv.c: translate a binary file (little endian format) into the format * needed to insert it into the EVM memory (ascii hex word values * with a header). * * author: Douglas Ferguson. ******************************************************************************/ #include #include int main(int argc, char *argv[]) { char inFileName[100], outFileName[100], lineStr[15], charStr[3]; FILE *inFilePtr, *outFilePtr; long inFileSize, outFileSize, i, j, k; int status, nLines; unsigned char *buffer; memset(inFileName, 0, 100); memset(outFileName, 0, 100); strcpy(inFileName, "histoCtrl_pxl_mlist.txt"); //strcpy(inFileName,argv[1]); printf("Input file: %s\n",inFileName); if (strstr(inFileName,".txt")) { inFilePtr = fopen(inFileName, "r"); /* read-only */ if (inFilePtr == NULL) return(-1); fgets(lineStr, 15, inFilePtr); //discard 1st line nLines= 0; while (fgets(lineStr, 15, inFilePtr)) { ++nLines; } fclose(inFilePtr); buffer= calloc(nLines, sizeof(int)); inFilePtr = fopen(inFileName, "r"); /* read-only */ fgets(lineStr, 15, inFilePtr); //discard 1st line while (fgets(lineStr, 15, inFilePtr)) { j= k= 0; if ((lineStr[0] == '0')&&((lineStr[1] == 'X')||(lineStr[1] == 'x'))) { } } fclose(inFilePtr); } else if (strstr(inFileName,".bin")) { status= GetFileSize (inFileName, &inFileSize); if ((status != 0) || (inFileSize%4 !=0)) return(-1); /* eof= word boundary */ buffer= calloc(inFileSize, sizeof(char)); inFilePtr = fopen(inFileName, "rb"); /* rb= read-only, binary */ if (inFilePtr == NULL) return(-1); fread(buffer, sizeof(char), inFileSize, inFilePtr); fclose(inFilePtr); strncpy(outFileName, inFileName, strlen(inFileName)-4); /* chop off .bin */ strcat(outFileName,".txt"); outFilePtr = fopen(outFileName, "w"); if (outFilePtr == NULL) return(-1); /* outFileSize is the size of the data in words, to be tranferred into the EVM memory; it is inserted into the header together with other data: the 1651, 1, and 2 can be left constant, the memory location for the transfer is overwritten by whatever the actual location should be. */ outFileSize= inFileSize/4; fprintf(outFilePtr,"1651 1 80008000 2 %x \n",outFileSize); /* write the ascii file */ for (k= i= 0; i< outFileSize; ++i, k+= 4) { strcpy(lineStr,"0xXXXXXXXX\n"); for (j= 0; j< 4; ++j) { sprintf(charStr,"%02x",buffer[k+j]); lineStr[8-2*j]= charStr[0]; lineStr[9-2*j]= charStr[1]; /* buffer is in little endian format*/ } fputs(lineStr,outFilePtr); } } fclose(outFilePtr); }