Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- int main(int argc, char* argv[])
- {
- FILE *infile, *outfile;
- long fsize, i, GBIX_start;
- size_t result;
- char *buffer;
- char filename[20];
- //open file
- infile = fopen(argv[1], "rb");
- if (infile==NULL) {fputs ("File open error",stderr); return -1;}
- // get file size
- fseek(infile, 0, SEEK_END);
- fsize = ftell(infile);
- fseek(infile, 0, SEEK_SET);
- //allocate memory
- buffer = (char *)malloc(fsize);
- if (buffer==NULL) {fputs ("Memory allocation error", stderr); return -1;}
- //read file into memory
- result = fread(buffer, 1, fsize, infile);
- if (result != fsize) {fputs ("File read error", stderr); return -1;}
- //close file
- fclose(infile);
- //scan memory for breaks
- GBIX_start = 0;
- for(i = 0; i < fsize - 4; i++)
- {
- //save location of tag
- if(buffer[i] == 'G' && buffer[i + 1] == 'B' && buffer[i + 2] == 'I' && buffer[i + 3] == 'X')
- {
- //if length of file is > tag length
- if(i - GBIX_start > 4)
- {
- //notify
- printf("Found at offset: 0x%06x\n", GBIX_start);
- //create offset filename
- sprintf(filename, "%06x.pvr", GBIX_start);
- //open file
- outfile = fopen(filename, "wb");
- //check error
- if (outfile == NULL) {
- fputs ("PVR file open error", stderr);
- free(buffer);
- return -1;
- }
- //write data
- result = fwrite(&buffer[GBIX_start], 1, i - GBIX_start, outfile);
- //check error
- if (result != i - GBIX_start) {
- fputs ("File write error", stderr);
- fclose(outfile);
- free(buffer);
- return -1;
- }
- //close outfile
- fclose(outfile);
- //save new tag location
- GBIX_start = i;
- }
- }
- }
- //finish last chunk
- //notify
- printf("Found at offset: 0x%06x\n", GBIX_start);
- //create offset filename
- sprintf(filename, "%06x.pvr", GBIX_start);
- //open file
- outfile = fopen(filename, "wb");
- //check error
- if (outfile == NULL) {
- fputs ("PVR file open error", stderr);
- free(buffer);
- return -1;
- }
- //write data
- result = fwrite(&buffer[GBIX_start], 1, fsize - GBIX_start, outfile);
- //check error
- if (result != fsize - GBIX_start) {
- fputs ("File write error", stderr);
- fclose(outfile);
- free(buffer);
- return -1;
- }
- //close outfile
- fclose(outfile);
- //free mem
- free(buffer);
- //success
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement