/* * img2dsk.c : converts .img disk image to .dsk image * * .img files have the following format: first a one byte header, which * is 1 (01h) for singled sided 360kB images, and 2 (02h) for double sided * 720kB images. These files can be found at ftp://ftp.funet.fi/pub/msx/ * * By Sean Young 1998 (sean@msxnet.org) */ #include #include #include int main(int argc, char *argv[]) { char buffer[9*512], h; int i; long l; FILE *fin, *fout; if (argc != 3) { fprintf (stderr, "%s: Missing file arguments or too many\n", argv[0]); fprintf (stderr, "Usage: img2dsk SOURCE DESTINATION\n" " SOURCE is the .img file, DESTINATION the .dsk file.\n"); return (2); } fin=fopen (argv[1],"rb"); if (fin == NULL) { perror (argv[1]); return (1); } errno = 0; i = fread(&h, 1, 1, fin); if (i != 1) { if (errno) perror (argv[1]); else fprintf (stderr, "%s: File wrong size (not .img file)\n", argv[1]); fclose (fin); return (1); } fseek (fin, 0L, SEEK_END); l = ftell (fin); if ( (l != (720L*1024L+1L)) && (l != (360L*1024L+1L)) ) { fprintf (stderr, "%s: File wrong size (not .img file)\n", argv[1]); fclose (fin); return (2); } if (((long)h * 368640L + 1L) != l) { fprintf (stderr, "%s: header wrong value, continuing anyway\n", argv[1]); } fseek (fin, 1L, SEEK_SET); i = (int)(l / (long)sizeof (buffer)); fout = fopen (argv[2], "wb"); if (fout == NULL) { perror (argv[2]); fclose (fin); return (1); } while (i--) { if (sizeof (buffer) != fread (buffer, 1, sizeof (buffer), fin) ) { perror (argv[1]); fclose (fin); fclose (fout); return (1); } if (sizeof (buffer) != fwrite (buffer, 1, sizeof (buffer), fout) ) { perror (argv[2]); fclose (fin); fclose (fout); return (1); } } fclose (fin); fclose (fout); return (0); }