- #define _CRT_SECURE_NO_WARNINGS 
- #include <stdlib.h> 
- #include <stdio.h> 
- #include <memory.h> 
-   
-   
-   
- int main(int argc,char* argv[]) 
- { 
-         FILE *file; 
-         unsigned char *src,*dst; 
-         int i,pd,sec,off,sum,size,out_size,blocks,data_size; 
-   
-         if(argc<2) 
-         { 
-                 printf("Error: No input file\n"); 
-                 return 1; 
-         } 
-   
-         file=fopen(argv[1],"rb"); 
-   
-         if(!file) 
-         { 
-                 printf("Error: Can't open file\n"); 
-                 return 1; 
-         } 
-   
-         fseek(file,0,SEEK_END); 
-         size=ftell(file); 
-         fseek(file,0,SEEK_SET); 
-   
-         src=(unsigned char*)malloc(size); 
-         fread(src,size,1,file); 
-         fclose(file); 
-   
-         if(memcmp(src,"SINCLAIR",8)) 
-         { 
-                 printf("Error: Wrong format\n"); 
-                 free(src); 
-                 return 1; 
-         } 
-   
-         sec=0; 
-         off=9; 
-   
-         for(i=0;i<src[8];i++) 
-         { 
-                 sec+=src[off+13]; 
-                 off+=14; 
-         } 
-   
-         data_size=sec<<8; 
-         blocks=sec/255; 
-         if(sec%255) blocks++; 
-   
-         dst=(unsigned char*)malloc(size); 
-   
-         memcpy(dst,"SINCLAIR",8); 
-         dst[8]=blocks; 
-   
-         pd=9; 
-   
-         for(i=0;i<blocks;i++) 
-         { 
-                 if(!i) 
-                 { 
-                         memcpy(&dst[pd],&src[9],14); 
-                 } 
-                 else 
-                 { 
-                         memcpy(&dst[pd],"data    ",8); 
-                         dst[pd+8]=i-1+'0'; 
-                         dst[pd+9]=0; 
-                         dst[pd+10]=0; 
-                         dst[pd+11]=0; 
-                         dst[pd+12]=0; 
-                 } 
-   
-                 dst[pd+13]=sec>255?255:sec; 
-   
-                 sec-=255; 
-                 pd+=14; 
-         } 
-   
-         memcpy(&dst[pd],&src[off],data_size); 
-         pd+=data_size; 
-   
-         free(src); 
-   
-         sum=0; 
-   
-         for(i=0;i<pd;i++) sum+=dst[i]; 
-   
-         dst[pd++]=sum&255; 
-         dst[pd++]=(sum>>8)&255; 
-         dst[pd++]=(sum>>16)&255; 
-         dst[pd++]=(sum>>24)&255; 
-   
-         out_size=pd; 
-   
-         file=fopen(argv[1],"wb"); 
-   
-         if(!file) 
-         { 
-                 printf("Error: Can't create file\n"); 
-                 free(dst); 
-                 return 1; 
-         } 
-   
-         fwrite(dst,out_size,1,file); 
-         fclose(file); 
-   
-         free(dst); 
- }