home *** CD-ROM | disk | FTP | other *** search
-
- #include "aai86.h"
- #include "aaflisav.h"
- #include "aafii.h"
-
-
- static char *
- fii_brun_comp_line(s1, cbuf, count)
- Pixel *s1, *cbuf;
- int count;
- {
- int wcount;
- register char *c;
- register int bcount;
- int op_count;
- char *start_dif;
- int dif_count;
- int same_count;
-
- c = cbuf+1;
- op_count = 0;
- start_dif = s1;
- dif_count = 0;
- for (;;)
- {
- if (count < 3)
- {
- dif_count += count;
- while (dif_count > 0)
- {
- bcount = (dif_count < FLI_MAX_RUN ? dif_count : FLI_MAX_RUN );
- *c++ = -bcount;
- dif_count -= bcount;
- while (--bcount >= 0)
- *c++ = *start_dif++;
- op_count++;
- }
- *cbuf = op_count;
- return(i86_norm_ptr(c));
- }
- else
- {
- bcount = (count < FLI_MAX_RUN ? count : FLI_MAX_RUN );
- if ((wcount = i86_bsame(s1, bcount)) >= 3)
- {
- while (dif_count > 0)
- {
- bcount = (dif_count < FLI_MAX_RUN ? dif_count : FLI_MAX_RUN );
- *c++ = -bcount;
- dif_count -= bcount;
- while (--bcount >= 0)
- *c++ = *start_dif++;
- op_count++;
- }
- *c++ = wcount;
- *c++ = *s1;
- op_count++;
- s1 += wcount;
- count -= wcount;
- start_dif = s1;
- }
- else
- {
- dif_count++;
- s1++;
- count -= 1;
- }
- }
- }
- }
-
-
- Cbuf *fii_brun(Pixel *s1,Pixel *s2,USHORT *cbuf,int width,int height)
- {
- register char *c;
- char *oc;
- long total = 0;
-
- /* store offset of 1st real line and set up for main line-at-a-time loop */
- c = (char *)(cbuf);
- while (--height >= 0)
- {
- oc = c;
- c = fii_brun_comp_line(s1,c,width);
- total += i86_ptr_to_long(c) - i86_ptr_to_long(oc);
- if (total >= 60000L)
- return(NULL);
- s1 += width;
- }
- return(i86_enorm_ptr(c));
- }
-
-