| 1 |
void compress_vol(FILE *fi,unsigned char *nameprefix,PARAMS *p) |
|---|
| 2 |
{ |
|---|
| 3 |
int i,j,k,nb; |
|---|
| 4 |
IMAGE_HEADER header; |
|---|
| 5 |
COMPRESS *c; |
|---|
| 6 |
unsigned char buffer[TOTALLG],*ptr,*dataptr; |
|---|
| 7 |
unsigned long remaining,used,skip; |
|---|
| 8 |
unsigned short lg,datalg; |
|---|
| 9 |
FILE *fo; |
|---|
| 10 |
unsigned char filename[128],firststring[200]; |
|---|
| 11 |
|
|---|
| 12 |
printf("Compressing Image :\n"); |
|---|
| 13 |
|
|---|
| 14 |
printf("- Bitmap lg : %ld\n",p->bitmaplg); |
|---|
| 15 |
printf("- Nb of blocks : %d\n",nb=((p->bitmaplg+ALLOCLG-1)/ALLOCLG)); |
|---|
| 16 |
|
|---|
| 17 |
remaining=p->bitmaplg; |
|---|
| 18 |
ptr=p->bitmap; |
|---|
| 19 |
|
|---|
| 20 |
skip=0; |
|---|
| 21 |
|
|---|
| 22 |
sprintf(firststring,"NTFS=1\nTYPE=%d\nSECTORS=%lld\nBLOCKS=%d\n",type,p->boot.sectors,nb); |
|---|
| 23 |
|
|---|
| 24 |
for (i=0;i<nb;i++) |
|---|
| 25 |
{ |
|---|
| 26 |
used=0; |
|---|
| 27 |
|
|---|
| 28 |
printf("- Block %d : O",i+1); |
|---|
| 29 |
|
|---|
| 30 |
sprintf(filename,"%s%03d",nameprefix,i); |
|---|
| 31 |
fo=fopen(filename,"wb"); |
|---|
| 32 |
|
|---|
| 33 |
printf("H"); |
|---|
| 34 |
|
|---|
| 35 |
if (remaining>ALLOCLG) lg=ALLOCLG; |
|---|
| 36 |
else lg=remaining; |
|---|
| 37 |
|
|---|
| 38 |
bzero(header.header,HEADERLG); |
|---|
| 39 |
sprintf(header.header,"%sALLOCTABLELG=%d\n",firststring,lg); |
|---|
| 40 |
firststring[0]=0; |
|---|
| 41 |
bzero(header.bitmap,ALLOCLG); |
|---|
| 42 |
memcpy(header.bitmap,ptr,lg); |
|---|
| 43 |
|
|---|
| 44 |
remaining-=lg; |
|---|
| 45 |
ptr+=lg; |
|---|
| 46 |
|
|---|
| 47 |
compress_init(&c); |
|---|
| 48 |
compress_data(c,(unsigned char *)&header,TOTALLG,fo,0); |
|---|
| 49 |
|
|---|
| 50 |
printf("D"); |
|---|
| 51 |
dataptr=buffer; |
|---|
| 52 |
datalg=0; |
|---|
| 53 |
|
|---|
| 54 |
for(j=0;j<lg;j++) |
|---|
| 55 |
{ |
|---|
| 56 |
printf("%3d\b\b\b",(100*j)/lg); |
|---|
| 57 |
|
|---|
| 58 |
for(k=1;k<256;k+=k) |
|---|
| 59 |
{ |
|---|
| 60 |
if (!(header.bitmap[j]&k)) |
|---|
| 61 |
{skip+=512; if (skip>30*1024*1024) {fseek(fi,skip,SEEK_CUR);skip=0;}} |
|---|
| 62 |
else { |
|---|
| 63 |
if (skip) fseek(fi,skip,SEEK_CUR); |
|---|
| 64 |
fread(dataptr,512,1,fi); |
|---|
| 65 |
skip=0; dataptr+=512; datalg+=512; used++; |
|---|
| 66 |
|
|---|
| 67 |
if (datalg==TOTALLG) |
|---|
| 68 |
{ compress_data(c,buffer,TOTALLG,fo,0); |
|---|
| 69 |
dataptr=buffer; |
|---|
| 70 |
datalg=0;} |
|---|
| 71 |
} |
|---|
| 72 |
} |
|---|
| 73 |
} |
|---|
| 74 |
|
|---|
| 75 |
printf("F"); |
|---|
| 76 |
|
|---|
| 77 |
if (datalg>0) compress_data(c,buffer,datalg,fo,1); |
|---|
| 78 |
|
|---|
| 79 |
printf("C"); |
|---|
| 80 |
|
|---|
| 81 |
compress_end(c,fo); |
|---|
| 82 |
fclose(fo); |
|---|
| 83 |
|
|---|
| 84 |
printf(". (used : %ld)\n",used); |
|---|
| 85 |
} |
|---|
| 86 |
} |
|---|