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.4 by greg, Tue Sep 12 13:04:24 1989 UTC vs.
Revision 1.7 by greg, Thu May 30 09:44:36 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) {
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 >                        }
118 >                } else {
119 >                        if (nfile >= MAXFILE) {
120 >                                fprintf(stderr, "%s: only %d files allowed\n",
121 >                                                progname, MAXFILE);
122 >                                quit(1);
123 >                        }
124 >                }
125 >                if (nfile >= (dolabels ? MAXFILE-1 : MAXFILE)) {
126                          fprintf(stderr, "%s: too many files\n", progname);
127                          quit(1);
128                  }
# Line 115 | Line 154 | dofiles:
154                                  goto userr;
155                          }
156   getfile:
157 <                if (argc-an < 3)
157 >                if (argc-an < (ncolumns ? 1 : 3))
158                          goto userr;
159                  if (!strcmp(argv[an], "-")) {
160                          input[nfile].name = "<stdin>";
161                          input[nfile].fp = stdin;
162                  } else {
163                          input[nfile].name = argv[an];
164 <                        if ((input[nfile].fp = fopen(argv[an], "r")) == NULL) {
165 <                                fprintf(stderr, "%s: cannot open\n", argv[an]);
164 >                        if ((input[nfile].fp = argv[an][0] == '!' ?
165 >                                        popen(argv[an]+1, "r") :
166 >                                        fopen(argv[an], "r")) == NULL) {
167 >                                perror(argv[an]);
168                                  quit(1);
169                          }
170                  }
171                  an++;
172                                                  /* get header */
173                  printf("%s:\n", input[nfile].name);
174 <                getheader(input[nfile].fp, tabputs);
174 >                getheader(input[nfile].fp, tabputs, NULL);
175 >                if (wrongformat) {
176 >                        fprintf(stderr, "%s: not a Radiance picture\n",
177 >                                        input[nfile].name);
178 >                        quit(1);
179 >                }
180                                                  /* get picture size */
181                  if (fgetresolu(&input[nfile].xres, &input[nfile].yres,
182                                  input[nfile].fp) != (YMAJOR|YDECR)) {
# Line 138 | Line 184 | getfile:
184                                          input[nfile].name);
185                          quit(1);
186                  }
187 <                input[nfile].xloc = atoi(argv[an++]);
188 <                input[nfile].yloc = atoi(argv[an++]);
187 >                if (ncolumns > 0) {
188 >                        if (curcol >= ncolumns) {
189 >                                cury = ymax;
190 >                                curx = 0;
191 >                                curcol = 0;
192 >                        }
193 >                        input[nfile].xloc = curx;
194 >                        input[nfile].yloc = cury;
195 >                        curx += input[nfile].xres;
196 >                        curcol++;
197 >                } else {
198 >                        input[nfile].xloc = atoi(argv[an++]);
199 >                        input[nfile].yloc = atoi(argv[an++]);
200 >                }
201                  if (input[nfile].xloc < xmin)
202                          xmin = input[nfile].xloc;
203                  if (input[nfile].yloc < ymin)
# Line 148 | Line 206 | getfile:
206                          xmax = input[nfile].xloc+input[nfile].xres;
207                  if (input[nfile].yloc+input[nfile].yres > ymax)
208                          ymax = input[nfile].yloc+input[nfile].yres;
209 +                if (dolabels) {
210 +                        input[++nfile].name = "<Label>";
211 +                        setpscom(tmpbuf, input[nfile-1].name);
212 +                        if ((input[nfile].fp = popen(tmpbuf, "r")) == NULL)
213 +                                goto labelerr;
214 +                        if (checkheader(input[nfile].fp, COLRFMT, NULL) < 0)
215 +                                goto labelerr;
216 +                        if (fgetresolu(&input[nfile].xres, &input[nfile].yres,
217 +                                        input[nfile].fp) != (YMAJOR|YDECR))
218 +                                goto labelerr;
219 +                        input[nfile].xloc = input[nfile-1].xloc;
220 +                        input[nfile].yloc = input[nfile-1].yloc +
221 +                                        input[nfile-1].yres - SIGNHT;
222 +                        input[nfile].hasmin = input[nfile].hasmax = 0;
223 +                }
224          }
225          if (xsiz <= 0)
226                  xsiz = xmax;
# Line 155 | Line 228 | getfile:
228                  ysiz = ymax;
229                                          /* add new header info. */
230          printargs(argc, argv, stdout);
231 +        fputformat(COLRFMT, stdout);
232          printf("\n-Y %d +X %d\n", ysiz, xsiz);
233  
234          compos();
# Line 164 | Line 238 | userr:
238          fprintf(stderr, "Usage: %s [-x xres][-y yres][-b r g b] ", progname);
239          fprintf(stderr, "[-t min1][+t max1] file1 x1 y1 ..\n");
240          quit(1);
241 + labelerr:
242 +        fprintf(stderr, "%s: error opening label\n", progname);
243 +        quit(1);
244   }
245  
246  
# Line 217 | Line 294 | compos()                               /* composite pictures */
294                  if (y >= ysiz)
295                          continue;
296                  if (fwritecolrs(scanout, xsiz, stdout) < 0) {
297 <                        fprintf(stderr, "%s: write error\n", progname);
297 >                        perror(progname);
298                          quit(1);
299                  }
300          }
301          return;
302   memerr:
303 <        fprintf(stderr, "%s: out of memory\n", progname);
303 >        perror(progname);
304          quit(1);
305   }
306  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines