X-Git-Url: http://gitweb.hugovil.com/?a=blobdiff_plain;f=src%2Fhexfile.c;h=5ec2055abe1769982c82fd0b48ad504c5bac43fe;hb=60f3340a9f321271f5ea96df2ccfc248f67bfd2f;hp=0f473d43d97d28debe07961cb1bb67477185be92;hpb=a78a174393ff9c8dbc0d5212576507f25d7e9bf1;p=emu8051.git diff --git a/src/hexfile.c b/src/hexfile.c index 0f473d4..5ec2055 100644 --- a/src/hexfile.c +++ b/src/hexfile.c @@ -38,42 +38,40 @@ /* Convert an ascii string to an hexadecimal number. */ unsigned int -Ascii2Hex( char *istring, int length ) +Ascii2Hex(char *istring, int length) { unsigned int result = 0; int i, ascii_code; - if ( !length || ( length > (int) strlen(istring) ) ) { + if (!length || (length > (int) strlen(istring))) length = strlen(istring); - } - - for ( i = 0; i < length; i++ ) { - ascii_code = istring[ i ]; - if ( ascii_code > 0x39 ) { + + for (i = 0; i < length; i++) { + ascii_code = istring[i]; + if (ascii_code > 0x39) ascii_code &= 0xDF; - } - if ( ( ascii_code >= 0x30 && ascii_code <= 0x39 ) || - ( ascii_code >= 0x41 && ascii_code <= 0x46 ) ) { + + if ((ascii_code >= 0x30 && ascii_code <= 0x39) || + (ascii_code >= 0x41 && ascii_code <= 0x46)) { ascii_code -= 0x30; - if ( ascii_code > 9 ) { + if (ascii_code > 9) ascii_code -= 7; - } + result <<= 4; result += ascii_code; - } - else { - printf( "%s: In Ascii2Hex(), syntax error.\n", PACKAGE ); + } else { + printf("%s: In Ascii2Hex(), syntax error.\n", PACKAGE); + printf(" str=%s, length=%d\n", istring, length); } } return result; } - void -LoadHexFile( const char *filename ) +LoadHexFile(const char *filename) { int i, j, RecLength, LoadOffset, RecType, Data, Checksum; - + #define LINE_BUFFER_LEN 256 FILE *fp; int status; @@ -85,74 +83,79 @@ LoadHexFile( const char *filename ) } /* Trying to open the file. */ - fp = fopen( filename, "r" ); - if( fp == NULL ) { - perror( PACKAGE ); - /*ErrorLocation( __FILE__, __LINE__ );*/ - exit( EXIT_FAILURE ); + fp = fopen(filename, "r"); + if (fp == NULL) { + perror(PACKAGE); + /*ErrorLocation(__FILE__, __LINE__);*/ + exit(EXIT_FAILURE); } - + /* Reading one line of data from the hex file. */ /* char *fgets(char *s, int size, FILE *stream); - Reading stops after an EOF or a newline. If a newline is read, it is - stored into the buffer. A '\0' is stored after the last character in - the buffer. */ - while( fgets( line, LINE_BUFFER_LEN, fp ) != NULL ) { + Reading stops after an EOF or a newline. If a newline is read, it is + stored into the buffer. A '\0' is stored after the last character + in the buffer. + */ + while (fgets(line, LINE_BUFFER_LEN, fp) != NULL) { i = 0; Checksum = 0; - if ( line[ i++ ] != ':' ) { - printf( "%s: line not beginning with \":\"\n", PACKAGE ); + if (line[i++] != ':') { + printf("%s: line not beginning with \":\"\n", PACKAGE); goto close_file; } - - RecLength = Ascii2Hex( &line[ i ], 2 ); + + RecLength = Ascii2Hex(&line[i], 2); i += 2; Checksum += RecLength; - - LoadOffset = Ascii2Hex( &line[i], 4 ); + + LoadOffset = Ascii2Hex(&line[i], 4); Checksum += LoadOffset / 256; Checksum += LoadOffset % 256; i += 4; - - RecType = Ascii2Hex( &line[i],2); + + RecType = Ascii2Hex(&line[i], 2); i += 2; Checksum += RecType; - - if ( RecType == 1 ) { - Checksum += Ascii2Hex( &line[ i ], 2 ); - if ( Checksum &= 0x000000FF ) { + + if (RecType == 1) { + Checksum += Ascii2Hex(&line[i], 2); + Checksum &= 0x000000FF; + + if (Checksum) { /* Error. */ - printf( "%s: Invalid format\n", PACKAGE ); + printf("%s: Invalid format\n", PACKAGE); goto close_file; - } - else { + } else { /* OK */ goto close_file; } - } - - for ( j = 0; j < RecLength; j++ ) { - Data = Ascii2Hex( &line[ i ], 2 ); - memory_write8( PGM_MEM_ID, (unsigned int)(LoadOffset + j), (unsigned char)Data ); + } + + for (j = 0; j < RecLength; j++) { + Data = Ascii2Hex(&line[i], 2); + memory_write8(PGM_MEM_ID, + (unsigned int)(LoadOffset + j), + (unsigned char)Data); i += 2; Checksum += Data; } - - RecType = Ascii2Hex( &line[ i ], 2 ); - Checksum += RecType; - - if ( Checksum &= 0x000000FF ) { - printf( "%s: Invalid format\n", PACKAGE ); + + RecType = Ascii2Hex(&line[i], 2); + Checksum += RecType; + Checksum &= 0x000000FF; + + if (Checksum) { + printf("%s: Invalid format\n", PACKAGE); goto close_file; } } - + close_file: - status = fclose( fp ); - if( status != EXIT_SUCCESS ) { - fprintf( stderr, "%s: Error closing hex file.\n", PACKAGE ); - /*ErrorLocation( __FILE__, __LINE__ );*/ - exit( EXIT_FAILURE ); + status = fclose(fp); + if (status != EXIT_SUCCESS) { + fprintf(stderr, "%s: Error closing hex file.\n", PACKAGE); + /*ErrorLocation(__FILE__, __LINE__);*/ + exit(EXIT_FAILURE); } }