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.6 by greg, Thu Apr 18 14:35:19 1991 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 17 | Line 17 | static char SCCSid[] = "$SunId$ LBL";
17  
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 45 | Line 49 | 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   {
# Line 66 | 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 84 | 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 92 | 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 124 | 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) {
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                          }
# Line 152 | 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 162 | 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 178 | Line 237 | getfile:
237   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  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines