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

Comparing ray/src/px/oki20.c (file contents):
Revision 2.2 by greg, Sat Apr 18 09:10:51 1992 UTC vs.
Revision 2.5 by greg, Fri Jul 3 10:46:27 1992 UTC

# Line 6 | Line 6 | static char SCCSid[] = "$SunId$ LBL";
6  
7   /*
8   *  oki20c.c - program to dump pixel file to OkiMate 20 color printer.
9 *
10 *     6/10/87
9   */
10  
11   #include  <stdio.h>
# Line 22 | Line 20 | static char SCCSid[] = "$SunId$ LBL";
20  
21   #define  FILTER         "pfilt -1 -x %d -y %d -p %f %s",NCOLS,NROWS,ASPECT
22  
25 #ifdef  BSD
26 #define  clearlbuf()    bzero((char *)lpat, sizeof(lpat))
27 #else
28 #define  clearlbuf()    (void)memset((char *)lpat, 0, sizeof(lpat))
29 #endif
30
23   long  lpat[NCOLS];
24  
25   int  dofilter = 0;              /* filter through pfilt first? */
# Line 91 | Line 83 | char  *fname;
83                  fprintf(stderr, "%s: bad picture size\n", fname);
84                  return(-1);
85          }
86 <        if (xres > NCOLS || yres > NROWS) {
86 >        if (xres > NCOLS) {
87                  fprintf(stderr, "%s: resolution mismatch\n", fname);
88                  return(-1);
89          }
90                                  /* set line spacing (overlap for knitting) */
91 <        fputs("\0333\042", stdout);
100 <                                /* clear line buffer */
101 <        clearlbuf();
91 >        fputs("\0333\042\022", stdout);
92                                  /* put out scanlines */
93          for (i = yres-1; i >= 0; i--) {
94                  if (freadcolrs(scanline, xres, input) < 0) {
# Line 125 | Line 115 | COLR  scan[];
115   int  len;
116   int  y;
117   {
118 <        int  bpos;
118 >        int  bpos, start, end;
119          register long  c;
120          register int  i;
121  
122 <        if (bpos = y % 23) {
122 >        bpos = y % 23;
123 >        for (i = 0; i < len; i++)
124 >                lpat[i] |= (long)bit(scan[i],i) << bpos;
125  
126 <                for (i = 0; i < len; i++)
127 <                        lpat[i] |= (long)bit(scan[i],i) << bpos;
128 <
129 <        } else {
130 <
131 <                fputs("\033%O", stdout);
132 <                putchar(len & 255);
141 <                putchar(len >> 8);
142 <                for (i = 0; i < len; i++) {
143 <                        c = lpat[i] | bit(scan[i],i);
144 <                                                /* repeat this row */
145 <                        lpat[i] = (c & 1) << 23;
146 <                        putchar(c>>16);
147 <                        putchar(c>>8 & 255);
148 <                        putchar(c & 255);
126 >        if (bpos)
127 >                return;
128 >                                /* find limits of non-zero print buffer */
129 >        for (i = 0; lpat[i] == 0; i++)
130 >                if (i == len-1) {
131 >                        putchar('\n');
132 >                        return;
133                  }
134 <                putchar('\r');
135 <                putchar('\n');
136 <                fflush(stdout);
134 >        start = i - i%12;
135 >        i = len;
136 >        while (lpat[--i] == 0)
137 >                ;
138 >        end = i;
139 >                                /* skip to start position */
140 >        for (i = start/12; i-- > 0; )
141 >                putchar(' ');
142 >                                /* print non-zero portion of buffer */
143 >        fputs("\033%O", stdout);
144 >        i = end+1-start;
145 >        putchar(i & 255);
146 >        putchar(i >> 8);
147 >        for (i = start; i <= end; i++) {
148 >                c = lpat[i];
149 >                putchar(c>>16);
150 >                putchar(c>>8 & 255);
151 >                putchar(c & 255);
152 >                if (y)                  /* repeat this row next time */
153 >                        lpat[i] = (c & 1) << 23;
154 >                else                    /* or clear for next image */
155 >                        lpat[i] = 0L;
156          }
157 +        putchar('\r');
158 +        putchar('\n');
159 +        fflush(stdout);
160   }
161  
162  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines