home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 10 / 10.iso / tools / imsl.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-09-15  |  1.6 KB  |  78 lines

  1. #include <stdio.h>
  2. #include <dir.h>
  3. #include <dos.h>
  4. #include <alloc.h>
  5.  
  6. int tracklen[7]={0,9,15,9,18,36,8};
  7. char head[2048],newhead[2048];
  8.  
  9. main()
  10. {
  11.   struct ffblk fk;
  12.   FILE *f1,*f2;
  13.   char dtype,tmp[256],*buff,id,maxid,count,c,oc;
  14.   int i,j,done,ll,tl,bad;
  15.  
  16.   buff=malloc(10240);
  17.   for(i=1;i<7;i++) tracklen[i] *=512;
  18.   done=findfirst("*.ddi",&fk,0);
  19.   while(done==0)
  20.   {  f1=fopen(fk.ff_name,"rb");
  21.      fread(head,2048,1,f1);
  22.      dtype=head[10];
  23.      if(head[0]!='I'||head[1]!='M'||dtype>6||dtype<1)
  24.     {   printf("%s is not a real .DDI file !\n",fk.ff_name);
  25.         fclose(f1);
  26.      done=findnext(&fk);
  27.         continue;
  28.     }
  29.      tl=tracklen[dtype];
  30.      id=1;
  31.      ll=0x65;
  32.      maxid=1;
  33.      bad=0;
  34.      count=0;
  35.      while(head[ll]>0)
  36.        { if(head[ll]>maxid) maxid=head[ll];
  37.      if(head[ll]!=id) bad=1;
  38.      id++;
  39.      ll+=6;
  40.      count++;
  41.        }
  42.      if(maxid!=count)
  43.     {   printf("%s is not a good .DDI file !\n",fk.ff_name);
  44.         fclose(f1);
  45.         done=findnext(&fk);
  46.         continue;
  47.     }
  48.      if(bad==0)
  49.     {  fclose(f1);
  50.        done=findnext(&fk);
  51.        continue;   /* Normal .DDI file */
  52.     }
  53.      memcpy(newhead,head,2048);
  54.      ll=0x65;
  55.      for(c=1;c<=maxid;c++,ll+=6) newhead[ll]=c;
  56.      f2=fopen("ddi.fix","wb");
  57.      fwrite(newhead,2048,1,f2);
  58.      fread(buff,tl-2048,1,f1);
  59.      fwrite(buff,tl-2048,1,f2);
  60.      for(c=1;c<=maxid;c++)
  61.       { oc=1;
  62.     ll=0x65;
  63.     while(head[ll]!=c)
  64.      { oc++;
  65.        ll+=6;
  66.      }
  67.     fseek(f1,(long)oc*tl,SEEK_SET);
  68.     fread(buff,tl,1,f1);
  69.     fwrite(buff,tl,1,f2);
  70.       }
  71.      fclose(f1);
  72.      fclose(f2);
  73.      unlink(fk.ff_name);
  74.      rename("ddi.fix",fk.ff_name);
  75.      done=findnext(&fk);
  76.   }
  77. }
  78.