home *** CD-ROM | disk | FTP | other *** search
- rle_decode(indices, nindex, ncv)
- int **indices, *nindex, ncv;
- {
- int index = 0, *indices2, *max, *ptr1, val, run_length, i;
-
- ptr1 = *indices;
- indices2 = (int*)malloc(*nindex*sizeof(int));
- max = *indices + *nindex;
-
- while(ptr1 < max) {
- val = *ptr1++;
-
- if(val < ncv) {
- indices2[index++] = val;
- if(index == *nindex)
- indices2 = (int*)realloc(indices2,(*nindex+=1024)*sizeof(int));
- }
-
- else {
- if(val <= ncv + 31)
- run_length = val - ncv + 2;
- if(val == ncv+31)
- run_length = 64;
- if(val == ncv+32)
- run_length = 128;
- if(val == ncv+33)
- run_length = 256;
- if((index + run_length) < *nindex)
- indices2 = (int*)realloc(indices2,(*nindex+=1024)*sizeof(int));
- for(i = 0; i < run_length; i++)
- indices2[index++] = 0;
- }
- }
-
- *nindex = index;
- indices2 = (int*)realloc(indices2, *nindex*sizeof(int));
- free(*indices);
- *indices = indices2;
- }
-