ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/common/color.c
(Generate patch)

Comparing ray/src/common/color.c (file contents):
Revision 2.4 by greg, Fri Oct 2 15:59:58 1992 UTC vs.
Revision 2.7 by greg, Fri Jun 4 14:51:39 1993 UTC

# Line 12 | Line 12 | static char SCCSid[] = "$SunId$ LBL";
12  
13   #include  <stdio.h>
14  
15 + #include  <math.h>
16 +
17   #include  "color.h"
18  
19   #define  MINELEN        8       /* minimum scanline length for encoding */
20 + #define  MAXELEN        0x7fff  /* maximum scanline length for encoding */
21   #define  MINRUN         4       /* minimum run length */
22  
20 #ifndef frexp
21 extern double  frexp();
22 #endif
23  
24
24   char *
25   tempbuffer(len)                 /* get a temporary buffer */
26   unsigned  len;
27   {
28          extern char  *malloc(), *realloc();
29          static char  *tempbuf = NULL;
30 <        static int  tempbuflen = 0;
30 >        static unsigned  tempbuflen = 0;
31  
32          if (len > tempbuflen) {
33                  if (tempbuflen > 0)
# Line 49 | Line 48 | register FILE  *fp;
48          register int  i, j, beg, cnt;
49          int  c2;
50          
51 <        if (len < MINELEN | len > 0x7fff)       /* OOBs, write out flat */
51 >        if (len < MINELEN | len > MAXELEN)      /* OOBs, write out flat */
52                  return(fwrite((char *)scanline,sizeof(COLR),len,fp) - len);
53                                          /* put magic header */
54          putc(2, fp);
# Line 99 | Line 98 | int  len;
98   register FILE  *fp;
99   {
100          register int  i, j;
101 <        int  code;
101 >        int  code, val;
102                                          /* determine scanline type */
103 <        if (len < MINELEN | len > 0x7fff)
103 >        if (len < MINELEN | len > MAXELEN)
104                  return(oldreadcolrs(scanline, len, fp));
105          if ((i = getc(fp)) == EOF)
106                  return(-1);
# Line 126 | Line 125 | register FILE  *fp;
125                  if ((code = getc(fp)) == EOF)
126                      return(-1);
127                  if (code > 128) {       /* run */
128 <                    scanline[j++][i] = getc(fp);
129 <                    for (code &= 127; --code; j++)
130 <                        scanline[j][i] = scanline[j-1][i];
128 >                    code &= 127;
129 >                    val = getc(fp);
130 >                    while (code--)
131 >                        scanline[j++][i] = val;
132                  } else                  /* non-run */
133                      while (code--)
134                          scanline[j++][i] = getc(fp);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines