#include "hyd2asc.h" #include "varext.h" /***************** decompression algorithm ****************************** * *************************************************************************/ void decomp(hyd_header *hyd, short int ph_len) { unsigned short int m, mask, mask2, bits, len; unsigned long int l1; unsigned short int remain; unsigned short int pixels[4*MAXLIN], mark, inbuf[4*MAXLIN]; unsigned short int j, k, l; short int i; len = (0x07ff & ph_len) - size_pixh; // printf("\n\n len=%d\n",len); if (fread(&inbuf,len,1,hyd_fil)!=1) perror(" decomp01 "); bits = (0x7800 & ph_len)>>11; mark=2*hyd->lines_a+2*hyd->lines_b; mask=0; for (j=0;j>(m*bits)); l1 &= mask2; m=(short int)((16+remain)/bits); l1 |= ((long)(inbuf[k])<>bits*l)&mask); j++; } remain += 16-m*bits; } for (i=0;ilines_a;i++) { pixA[0][i]=pixels[i]+hyd->min_a; } if ( ((2*hyd->lines_a+2*hyd->lines_b) >= (4*MAXLIN)) || ((hyd->lines_a) >= MAXLIN) || ((hyd->lines_b) >= MAXLIN) ){ fprintf(stderr,"decomp: MAXLIN exceeded"); // getch(); } mark=hyd->lines_a; for (i=0;ilines_a;i++) pixA[1][i]=pixels[mark+i]+hyd->min_a; mark=2*hyd->lines_a; for (i=0;ilines_b;i++) pixB[0][i]=pixels[mark+i]+hyd->min_b; mark=2*hyd->lines_a+hyd->lines_b; for (i=0;ilines_b;i++) pixB[1][i]=pixels[mark+i]+hyd->min_b; mark=2*hyd->lines_a+2*hyd->lines_b; return; }