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

Comparing ray/src/px/pcompos.c (file contents):
Revision 1.1 by greg, Thu Feb 2 10:49:23 1989 UTC vs.
Revision 1.8 by greg, Thu May 30 10:33:30 1991 UTC

# Line 1 | Line 1
1 < /* Copyright (c) 1987 Regents of the University of California */
1 > /* Copyright (c) 1991 Regents of the University of California */
2  
3   #ifndef lint
4   static char SCCSid[] = "$SunId$ LBL";
# Line 15 | Line 15 | static char SCCSid[] = "$SunId$ LBL";
15   #include  "color.h"
16  
17  
18 < #define  MAXFILE        16
18 > #define  MAXFILE        32
19  
20 + #define  SIGNHT         24
21 + #define  setpscom(b,n)  sprintf(b, "psign -h %d '%.30s'|pfilt -1 -x /2 -y /2",\
22 +                                2*SIGNHT, n)
23 +
24                                          /* output picture size */
25   int  xsiz = 0;
26   int  ysiz = 0;
# Line 33 | Line 37 | int  checkthresh = 0;                  /* check threshold value */
37   char  *progname;
38  
39   struct {
40 <        char  *name;                    /* file name */
40 >        char  *name;                    /* file or command name */
41          FILE  *fp;                      /* stream pointer */
42          int  xres, yres;                /* picture size */
43          int  xloc, yloc;                /* anchor point */
# Line 43 | Line 47 | struct {
47  
48   int  nfile;                     /* number of files */
49  
50 + int  wrongformat = 0;
51  
52 + char  tmpbuf[128];
53 +
54 + FILE  *popen();
55 +
56 +
57   tabputs(s)                      /* print line preceded by a tab */
58   char  *s;
59   {
60 <        putc('\t', stdout);
61 <        fputs(s, stdout);
60 >        char  fmt[32];
61 >
62 >        if (isformat(s)) {
63 >                formatval(fmt, s);
64 >                wrongformat = strcmp(fmt, COLRFMT);
65 >        } else {
66 >                putc('\t', stdout);
67 >                fputs(s, stdout);
68 >        }
69   }
70  
71  
# Line 57 | Line 74 | int  argc;
74   char  *argv[];
75   {
76          double  atof();
77 +        int  ncolumns = 0;
78 +        int  dolabels = 0;
79 +        int  curcol = 0, curx = 0, cury = 0;
80          int  an;
81  
82          progname = argv[0];
# Line 75 | Line 95 | char  *argv[];
95                                          atof(argv[an+3]));
96                          an += 3;
97                          break;
98 +                case 'a':
99 +                        ncolumns = atoi(argv[++an]);
100 +                        break;
101 +                case 'l':
102 +                        dolabels++;
103 +                        break;
104                  case '\0':
105                  case 't':
106                          goto dofiles;
# Line 83 | Line 109 | char  *argv[];
109                  }
110   dofiles:
111          for (nfile = 0; an < argc; nfile++) {
112 <                if (nfile >= MAXFILE) {
113 <                        fprintf(stderr, "%s: too many files\n", progname);
114 <                        quit(1);
112 >                if (dolabels) {
113 >                        if (nfile >= MAXFILE-1) {
114 >                                fprintf(stderr,
115 >                                "%s: only %d files allowed with labels\n",
116 >                                        progname, MAXFILE/2);
117 >                                quit(1);
118 >                        }
119 >                } else {
120 >                        if (nfile >= MAXFILE) {
121 >                                fprintf(stderr, "%s: only %d files allowed\n",
122 >                                                progname, MAXFILE);
123 >                                quit(1);
124 >                        }
125                  }
126                  input[nfile].hasmin = input[nfile].hasmax = 0;
127                  while (an < argc && (argv[an][0] == '-' || argv[an][0] == '+'))
# Line 115 | Line 151 | dofiles:
151                                  goto userr;
152                          }
153   getfile:
154 <                if (argc-an < 3)
154 >                if (argc-an < (ncolumns ? 1 : 3))
155                          goto userr;
156                  if (!strcmp(argv[an], "-")) {
157                          input[nfile].name = "<stdin>";
158                          input[nfile].fp = stdin;
159                  } else {
160                          input[nfile].name = argv[an];
161 <                        if ((input[nfile].fp = fopen(argv[an], "r")) == NULL) {
162 <                                fprintf(stderr, "%s: cannot open\n", argv[an]);
161 >                        if ((input[nfile].fp = argv[an][0] == '!' ?
162 >                                        popen(argv[an]+1, "r") :
163 >                                        fopen(argv[an], "r")) == NULL) {
164 >                                perror(argv[an]);
165                                  quit(1);
166                          }
167                  }
168                  an++;
169                                                  /* get header */
170                  printf("%s:\n", input[nfile].name);
171 <                getheader(input[nfile].fp, tabputs);
171 >                getheader(input[nfile].fp, tabputs, NULL);
172 >                if (wrongformat) {
173 >                        fprintf(stderr, "%s: not a Radiance picture\n",
174 >                                        input[nfile].name);
175 >                        quit(1);
176 >                }
177                                                  /* get picture size */
178 <                if (fscanf(input[nfile].fp, "-Y %d +X %d\n",
179 <                                &input[nfile].yres, &input[nfile].xres) != 2) {
178 >                if (fgetresolu(&input[nfile].xres, &input[nfile].yres,
179 >                                input[nfile].fp) != (YMAJOR|YDECR)) {
180                          fprintf(stderr, "%s: bad picture size\n",
181                                          input[nfile].name);
182                          quit(1);
183                  }
184 <                input[nfile].xloc = atoi(argv[an++]);
185 <                input[nfile].yloc = atoi(argv[an++]);
184 >                if (ncolumns > 0) {
185 >                        if (curcol >= ncolumns) {
186 >                                cury = ymax;
187 >                                curx = 0;
188 >                                curcol = 0;
189 >                        }
190 >                        input[nfile].xloc = curx;
191 >                        input[nfile].yloc = cury;
192 >                        curx += input[nfile].xres;
193 >                        curcol++;
194 >                } else {
195 >                        input[nfile].xloc = atoi(argv[an++]);
196 >                        input[nfile].yloc = atoi(argv[an++]);
197 >                }
198                  if (input[nfile].xloc < xmin)
199                          xmin = input[nfile].xloc;
200                  if (input[nfile].yloc < ymin)
# Line 148 | Line 203 | getfile:
203                          xmax = input[nfile].xloc+input[nfile].xres;
204                  if (input[nfile].yloc+input[nfile].yres > ymax)
205                          ymax = input[nfile].yloc+input[nfile].yres;
206 +                if (dolabels) {
207 +                        input[++nfile].name = "<Label>";
208 +                        setpscom(tmpbuf, input[nfile-1].name);
209 +                        if ((input[nfile].fp = popen(tmpbuf, "r")) == NULL)
210 +                                goto labelerr;
211 +                        if (checkheader(input[nfile].fp, COLRFMT, NULL) < 0)
212 +                                goto labelerr;
213 +                        if (fgetresolu(&input[nfile].xres, &input[nfile].yres,
214 +                                        input[nfile].fp) != (YMAJOR|YDECR))
215 +                                goto labelerr;
216 +                        input[nfile].xloc = input[nfile-1].xloc;
217 +                        input[nfile].yloc = input[nfile-1].yloc +
218 +                                        input[nfile-1].yres - SIGNHT;
219 +                        input[nfile].hasmin = input[nfile].hasmax = 0;
220 +                }
221          }
222          if (xsiz <= 0)
223                  xsiz = xmax;
# Line 155 | Line 225 | getfile:
225                  ysiz = ymax;
226                                          /* add new header info. */
227          printargs(argc, argv, stdout);
228 +        fputformat(COLRFMT, stdout);
229          printf("\n-Y %d +X %d\n", ysiz, xsiz);
230  
231          compos();
232          
233          quit(0);
234   userr:
235 <        fprintf(stderr, "Usage: %s [-x xres][-y yres][-b r g b] ", progname);
236 <        fprintf(stderr, "[-t min1][+t max1] file1 x1 y1 ..\n");
235 >        fprintf(stderr, "Usage: %s [-x xr][-y yr][-b r g b][-a n][-l] ",
236 >                        progname);
237 >        fprintf(stderr, "[-t min1][+t max1] pic1 x1 y1 ..\n");
238          quit(1);
239 + labelerr:
240 +        fprintf(stderr, "%s: error opening label\n", progname);
241 +        quit(1);
242   }
243  
244  
# Line 173 | Line 248 | compos()                               /* composite pictures */
248          int  y;
249          register int  x, i;
250  
251 <        scanin = (COLR *)malloc((xmax-xmin)*sizeof(COLR)) - xmin;
177 <        scanin = (COLR *)malloc((xmax-xmin)*sizeof(COLR)) - xmin;
251 >        scanin = (COLR *)malloc((xmax-xmin)*sizeof(COLR));
252          if (scanin == NULL)
253                  goto memerr;
254          scanin -= xmin;
# Line 193 | Line 267 | compos()                               /* composite pictures */
267                                  continue;
268                          if (freadcolrs(scanin+input[i].xloc,
269                                          input[i].xres, input[i].fp) < 0) {
270 <                                fprintf(stderr, "%s: read error\n",
271 <                                                input[i].name);
270 >                                fprintf(stderr, "%s: read error (y==%d)\n",
271 >                                                input[i].name,
272 >                                                y-input[i].yloc);
273                                  quit(1);
274                          }
275                          if (y >= ysiz)
# Line 217 | Line 292 | compos()                               /* composite pictures */
292                  if (y >= ysiz)
293                          continue;
294                  if (fwritecolrs(scanout, xsiz, stdout) < 0) {
295 <                        fprintf(stderr, "%s: write error\n", progname);
295 >                        perror(progname);
296                          quit(1);
297                  }
298          }
299          return;
300   memerr:
301 <        fprintf(stderr, "%s: out of memory\n", progname);
301 >        perror(progname);
302          quit(1);
303   }
304  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines