home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Graphics 16,000
/
graphics-16000.iso
/
msdos
/
animutil
/
flilib
/
flisrc
/
brun.c
< prev
next >
Wrap
C/C++ Source or Header
|
1989-11-17
|
2KB
|
93 lines
#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));
}