/*********************************************************************/ /* */ /* Command line: */ /* BIN2ASM */ /* */ /*********************************************************************/ #include #include #include #include #include #include #include #define maxline 76 unsigned char *buffer; int s_handle,d_handle; char errmsg1[] = "File read error."; char errmsg2[] = "File write error."; char linebuffer[maxline+6] = " DB "; char divider[] = "\r\n;--------------------------------------------------\r\n\r\n"; main(argc,argv) int argc; char **argv; { unsigned short i,fblock,byte_counter; long s_len; short linelength; char sbuf[8]; if (argc != 3) { puts("\nCommand line:"); puts(" BIN2ASM \n"); exit(1); } argv++; s_handle = open(*argv,O_BINARY|O_RDONLY); if (s_handle == -1) { puts(errmsg1); exit(1); } argv++; d_handle = open(*argv,O_BINARY|O_RDWR|O_CREAT|O_TRUNC,S_IREAD|S_IWRITE); if (d_handle == -1) { close(s_handle); puts(errmsg2); exit(1); } buffer = (unsigned char *)malloc(32768); if (buffer == NULL) { puts("Unable to allocate memory."); close(s_handle); close(d_handle); exit(1); } s_len = filelength(s_handle); byte_counter = 0; while (s_len > 0L) { if (s_len >= 32768L) fblock = 32768; else fblock = (unsigned short)s_len; if (read(s_handle,buffer,fblock) != fblock) { close(s_handle); close(d_handle); free(buffer); puts(errmsg1); exit(1); } s_len -= (long)fblock; byte_counter += fblock; for (i=0 ; i 4) strcat(linebuffer,","); strcat(linebuffer,sbuf); if (strlen(linebuffer) >= maxline) { strcat(linebuffer,"\r\n"); linelength = strlen(linebuffer); if (write(d_handle,linebuffer,linelength) != linelength) { close(s_handle); close(d_handle); free(buffer); puts(errmsg2); exit(1); } linebuffer[4] = 0; } } if (byte_counter == 0) { if (strlen(linebuffer) > 4) { strcat(linebuffer,"\r\n"); linelength = strlen(linebuffer); if (write(d_handle,linebuffer,linelength) != linelength) { close(s_handle); close(d_handle); free(buffer); puts(errmsg2); exit(1); } linebuffer[4] = 0; } if (write(d_handle,divider,strlen(divider)) != strlen(divider)) { close(s_handle); close(d_handle); free(buffer); puts(errmsg2); exit(1); } } } if (strlen(linebuffer) > 4) { strcat(linebuffer,"\r\n"); linelength = strlen(linebuffer); if (write(d_handle,linebuffer,linelength) != linelength) { close(s_handle); close(d_handle); free(buffer); puts(errmsg2); exit(1); } } puts("File conversion successful."); close(s_handle); close(d_handle); free(buffer); exit(0); }