Ask Question

Name:
Title:
Your Question:

Answer Question

Name:
Your Answer:
User Submitted Source Code!


Description:
  1234
Language: C/C++
Code:
#include <stdio.h>
#pragma pack (1)

typedef struct {
 unsigned long index;
 unsigned long offset;
 unsigned long size;
} t_dirrec;

typedef struct {
 char c751234[6];
 unsigned long filesize;
 unsigned char magic1;
} t_bdbfooter;

t_bdbfooter bdbfooter={"751234",0,0x01};

void extractfile(FILE *src, char *fname, unsigned int offs, unsigned int size) {
 FILE *out;
 char *cb;
 out=fopen(fname,"wb");
 fseek(src,offs,SEEK_SET);
 cb=malloc(size);
 fread(cb,size,1,src);
 fwrite(cb,size,1,out); 
 free(cb);
 fclose(out);
}

int unpack() {
 FILE *index, *data;
 unsigned int fcount;
 t_dirrec entry;
 int ok;
 char fname[32];
 index=fopen("HMC70.list","rb");
 data=fopen("HMC70.bdb","rb");
 mkdir("./out");
 fread(&fcount,sizeof(fcount),1,index);
 do {
  ok=fread(&entry,1,sizeof(entry),index);
  if(ok) {
   sprintf(fname,"./out/%.08d.bmp",entry.index);
//   printf("%s %d %dn", fname, entry.size); 
   extractfile(data,fname,entry.offset,entry.size); 
  };
 } while (ok>0);
 printf("Itmes: %dn",fcount);
 fclose(data);
 fclose(index);
};

int pack() {
 FILE *index, *data, *src;
 unsigned int fcount;
 t_dirrec entry;
 int ok;
 char fname[32];
 char *mb; 
 index=fopen("HMC70_.list","wb");
 data=fopen("HMC70_.bdb","wb");
 fcount=0;
 fwrite(&fcount,sizeof(fcount),1,index);
 entry.index=0;
 
 do {
  ok=0;
  sprintf(fname,"out/%.08d.bmp",entry.index);
  src=fopen(fname,"rb");
  if(src) {
   fseek(src,0,SEEK_END);
   entry.offset=ftell(data);
   entry.size=ftell(src);
   fseek(src,0,SEEK_SET);
   mb=malloc(entry.size);
   fread(mb,entry.size,1,src);
   fwrite(mb,entry.size,1,data);
   free(mb);
   fwrite(&entry,sizeof(entry),1,index);

//   printf("#######         %s %d %dn", fname, entry.size); 
   fclose(src);
   entry.index++;
   ok=1;
  };
 } while (ok>0);
 fseek(index,0,SEEK_SET);
 fwrite(&(entry.index),sizeof(entry.index),1,index);

 bdbfooter.filesize=ftell(data)+sizeof(bdbfooter);
 fwrite(&bdbfooter,sizeof(bdbfooter),1,data);

 printf("Itmes: %dn",fcount);
 fclose(data);
 fclose(index);
};
void help() {
 printf("-x unpackn-c packn");
 exit(0);
};
int main(int argc, char *argv[]) {
 if(argc==1) help();
 if (!strcmp(argv[1],"-x")) unpack();
 else
 if (!strcmp(argv[1],"-c")) pack();
 else help();
 exit(0);
};
          
Comments: