Advertisement
Guest User

Untitled

a guest
Oct 4th, 2012
296
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.31 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(int argc, char* argv[])
  5. {
  6.     FILE *infile, *outfile;
  7.     long fsize, i, GBIX_start;
  8.     size_t result;
  9.     char *buffer;
  10.     char filename[20];
  11.  
  12.     //open file
  13.     infile = fopen(argv[1], "rb");
  14.     if (infile==NULL) {fputs ("File open error",stderr); return -1;}
  15.    
  16.     // get file size
  17.     fseek(infile, 0, SEEK_END);
  18.     fsize = ftell(infile);
  19.     fseek(infile, 0, SEEK_SET);
  20.  
  21.     //allocate memory
  22.     buffer = (char *)malloc(fsize);
  23.     if (buffer==NULL) {fputs ("Memory allocation error", stderr); return -1;}
  24.  
  25.     //read file into memory
  26.     result = fread(buffer, 1, fsize, infile);
  27.     if (result != fsize) {fputs ("File read error", stderr); return -1;}
  28.  
  29.     //close file
  30.     fclose(infile);
  31.  
  32.     //scan memory for breaks
  33.     GBIX_start = 0;
  34.     for(i = 0; i < fsize - 4; i++)
  35.     {
  36.         //save location of tag
  37.         if(buffer[i] == 'G' && buffer[i + 1] == 'B' && buffer[i + 2] == 'I' && buffer[i + 3] == 'X')
  38.         {
  39.             //if length of file is > tag length
  40.             if(i - GBIX_start > 4)
  41.             {
  42.                 //notify
  43.                 printf("Found at offset: 0x%06x\n", GBIX_start);
  44.                 //create offset filename
  45.                 sprintf(filename, "%06x.pvr", GBIX_start);
  46.                 //open file
  47.                 outfile = fopen(filename, "wb");
  48.                 //check error
  49.                 if (outfile == NULL) {
  50.                     fputs ("PVR file open error", stderr);
  51.                     free(buffer);
  52.                     return -1;
  53.                 }
  54.                 //write data
  55.                 result = fwrite(&buffer[GBIX_start], 1, i - GBIX_start, outfile);
  56.                 //check error
  57.                 if (result != i - GBIX_start) {
  58.                     fputs ("File write error", stderr);
  59.                     fclose(outfile);
  60.                     free(buffer);
  61.                     return -1;
  62.                 }
  63.                 //close outfile
  64.                 fclose(outfile);
  65.  
  66.                 //save new tag location
  67.                 GBIX_start = i;
  68.             }
  69.         }
  70.     }
  71.  
  72.     //finish last chunk
  73.     //notify
  74.     printf("Found at offset: 0x%06x\n", GBIX_start);
  75.     //create offset filename
  76.     sprintf(filename, "%06x.pvr", GBIX_start);
  77.     //open file
  78.     outfile = fopen(filename, "wb");
  79.     //check error
  80.     if (outfile == NULL) {
  81.         fputs ("PVR file open error", stderr);
  82.         free(buffer);
  83.         return -1;
  84.     }
  85.     //write data
  86.     result = fwrite(&buffer[GBIX_start], 1, fsize - GBIX_start, outfile);
  87.     //check error
  88.     if (result != fsize - GBIX_start) {
  89.         fputs ("File write error", stderr);
  90.         fclose(outfile);
  91.         free(buffer);
  92.         return -1;
  93.     }
  94.     //close outfile
  95.     fclose(outfile);
  96.  
  97.     //free mem
  98.     free(buffer);
  99.     //success
  100.     return 0;
  101. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement