/[projet1]/public/pc/tools/osdk/main/old2mfm/sources/old2mfm.c
Defence Force logotype

Diff of /public/pc/tools/osdk/main/old2mfm/sources/old2mfm.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 907 by dbug, Sun Jan 20 18:29:01 2013 UTC revision 908 by mmu_man, Sun Jan 20 18:45:23 2013 UTC
# Line 1  Line 1 
1  #include <stdio.h>  #include <stdio.h>
2    #include <stdint.h>
3    #include <stdlib.h>
4    #include <string.h>
5  FILE *fd;  FILE *fd;
6  char bigbuf[1024*1024];  char *bigbuf;
7  char header[256];  char header[256];
8  char trackbuf[6400];  char trackbuf[6400];
9  int sides, tracks, sectors, geometry=1;  int32_t sides, tracks, sectors, geometry=1;
10  int gap1,gap2,gap3;  int gap1,gap2,gap3;
11  char old_signature[]="ORICDISK";  char old_signature[]="ORICDISK";
12  char new_signature[]="MFM_DISK";  char new_signature[]="MFM_DISK";
13    
14    /* TODO:Fix endianness! */
15    
16  main(int argc,char *argv[])  int main(int argc,char *argv[])
17  {  {
18          int i,s,t,offset;          int i,s,t,offset;
19    
# Line 17  main(int argc,char *argv[]) Line 21  main(int argc,char *argv[])
21          if (argc!=2) {          if (argc!=2) {
22                  printf("Usage: oric2mfm <diskimage>\n");                  printf("Usage: oric2mfm <diskimage>\n");
23                  printf("(converts old Euphoric disk image format to new MFM format)\n");                  printf("(converts old Euphoric disk image format to new MFM format)\n");
24                  exit(1);                  exit(EXIT_FAILURE);
25          }          }
26          fd=fopen(argv[1],"r+b");          fd=fopen(argv[1],"r+b");
27          if (fd==NULL) {          if (fd==NULL) {
28                  printf("Unable to open %s for read/write operation\n",argv[1]);                  printf("Unable to open %s for read/write operation\n",argv[1]);
29                  exit(1);                  exit(EXIT_FAILURE);
30          }          }
31          fread(header,8,1,fd);          fread(header,8,1,fd);
32          if (strncmp(header,old_signature,8)!=0) {          if (strncmp(header,old_signature,8)!=0) {
33                  printf("%s is not an old disk image\n",argv[1]);                  printf("%s is not an old disk image\n",argv[1]);
34                  exit(1);                  exit(EXIT_FAILURE);
35          }          }
36          fread(&sides,1,4,fd); fread(&tracks,1,4,fd); fread(&sectors,1,4,fd);          fread(&sides,1,sizeof(int32_t),fd);
37            fread(&tracks,1,sizeof(int32_t),fd);
38            fread(&sectors,1,sizeof(int32_t),fd);
39          fread(header+20,256-20,1,fd);          fread(header+20,256-20,1,fd);
40            bigbuf = malloc(sides*tracks*sectors*256);
41            if (bigbuf==NULL) {
42                    printf("Unable to allocate memory\n");
43                    exit(EXIT_FAILURE);
44            }
45          fread(bigbuf,sides*tracks*sectors,256,fd);          fread(bigbuf,sides*tracks*sectors,256,fd);
46          fseek(fd,0,SEEK_SET);          fseek(fd,0,SEEK_SET);
47    printf("read old.\n");
48    
49          switch (sectors) {          switch (sectors) {
50                  case 15: case 16: case 17:                  case 15: case 16: case 17:
# Line 43  main(int argc,char *argv[]) Line 55  main(int argc,char *argv[])
55                          break;                          break;
56                  default:                  default:
57                          printf("unrealistic sectors per track number\n");                          printf("unrealistic sectors per track number\n");
58                          exit(1);                          exit(EXIT_FAILURE);
59          }          }
60          init_track(sectors);          init_track(sectors);
61    
62    printf("writing header...\n");
63          fwrite(new_signature,8,1,fd);          fwrite(new_signature,8,1,fd);
64          fwrite(&sides,1,4,fd); fwrite(&tracks,1,4,fd); fwrite(&geometry,1,4,fd);          fwrite(&sides,1,sizeof(int32_t),fd);
65            fwrite(&tracks,1,sizeof(int32_t),fd);
66            fwrite(&geometry,1,sizeof(int32_t),fd);
67          fwrite(header+20,256-20,1,fd);          fwrite(header+20,256-20,1,fd);
68    
69          for(s=0;s<sides;s++)          for(s=0;s<sides;s++)
70            for(t=0;t<tracks;t++) {            for(t=0;t<tracks;t++) {
71              offset=gap1;              offset=gap1;
72              for(i=0;i<sectors;i++) {              for(i=0;i<sectors;i++) {
73    printf("writing size %d track %d sector %d...\n", s, t, i);
74                trackbuf[offset+4]=t;                trackbuf[offset+4]=t;
75                trackbuf[offset+5]=s;                trackbuf[offset+5]=s;
76                trackbuf[offset+6]=i+1;                trackbuf[offset+6]=i+1;
# Line 69  main(int argc,char *argv[]) Line 85  main(int argc,char *argv[])
85              }              }
86              fwrite(trackbuf,6400,1,fd);              fwrite(trackbuf,6400,1,fd);
87            }            }
88    printf("done.\n");
89            free(bigbuf);
90            return EXIT_SUCCESS;
91  }  }
92    
93  init_track(int n)  init_track(int n)

Legend:
Removed from v.907  
changed lines
  Added in v.908

  ViewVC Help
Powered by ViewVC 1.1.26