ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/util/vwright.c
Revision: 2.11
Committed: Tue Jun 3 21:31:51 2025 UTC (3 days, 14 hours ago) by greg
Content type: text/plain
Branch: MAIN
Changes since 2.10: +2 -4 lines
Log Message:
refactor: More consistent use of global char * progname and fixargv0()

File Contents

# Content
1 #ifndef lint
2 static const char RCSid[] = "$Id: vwright.c,v 2.10 2018/03/19 16:35:19 greg Exp $";
3 #endif
4 /*
5 * Move a viewpoint the given distance to the right
6 */
7
8
9 #include "standard.h"
10
11 #include "view.h"
12
13 #include <ctype.h>
14
15 VIEW vw = STDVIEW;
16
17
18 int
19 main(
20 int argc,
21 char *argv[]
22 )
23 {
24 char *err;
25 int gotview = 0;
26 FVECT hvn, vvn;
27 double dist;
28 int i;
29
30 fixargv0(argv[0]); /* sets global progname */
31 ++argv; --argc;
32 while (argc && argv[0][0] == '-' && argv[0][1] == 'v') {
33 int rv;
34 if (argc > 2 && argv[0][2] == 'f') {
35 rv = viewfile(argv[1], &vw, NULL);
36 if (rv <= 0) {
37 fprintf(stderr, "%s: %s file '%s'\n",
38 progname,
39 rv < 0 ? "cannot open view" :
40 "no view in", argv[1]);
41 exit(1);
42 }
43 ++gotview;
44 ++argv; --argc;
45 } else {
46 rv = getviewopt(&vw, argc, argv);
47 if (rv < 0) {
48 fprintf(stderr, "%s: bad view option at '%s'\n",
49 progname, argv[0]);
50 exit(1);
51 }
52 ++gotview;
53 argv += rv; argc -= rv;
54 }
55 ++argv; --argc;
56 }
57 if (argc != 1)
58 goto userr;
59 if (!gotview) {
60 gotview = viewfile(NULL, &vw, NULL);
61 if (gotview <= 0) {
62 fprintf(stderr, "%s: no view on standard input\n",
63 progname);
64 exit(1);
65 }
66 }
67 if ((err= setview(&vw)) != NULL) {
68 fprintf(stderr, "%s: %s\n", progname, err);
69 exit(1);
70 }
71 VCOPY(hvn, vw.hvec);
72 normalize(hvn);
73 VCOPY(vvn, vw.vvec);
74 normalize(vvn);
75 if (isalpha(argv[0][0])) { /* print out variables */
76 switch (vw.type) {
77 case VT_PER: i=1; break;
78 case VT_PAR: i=2; break;
79 case VT_ANG: i=3; break;
80 case VT_HEM: i=4; break;
81 case VT_CYL: i=5; break;
82 case VT_PLS: i=6; break;
83 default: i=0; break;
84 }
85 printf("%st:%d;", argv[0], i);
86 printf("%spx:%g;%spy:%g;%spz:%g;", argv[0], vw.vp[0],
87 argv[0], vw.vp[1], argv[0], vw.vp[2]);
88 printf("%sdx:%g;%sdy:%g;%sdz:%g;", argv[0], vw.vdir[0],
89 argv[0], vw.vdir[1], argv[0], vw.vdir[2]);
90 printf("%sd:%g;", argv[0], vw.vdist);
91 printf("%sux:%g;%suy:%g;%suz:%g;", argv[0], vw.vup[0],
92 argv[0], vw.vup[1], argv[0], vw.vup[2]);
93 printf("%sh:%g;%sv:%g;", argv[0], vw.horiz,
94 argv[0], vw.vert);
95 printf("%ss:%g;%sl:%g;%so:%g;%sa:%g;",
96 argv[0], vw.hoff, argv[0], vw.voff,
97 argv[0], vw.vfore, argv[0], vw.vaft);
98 printf("%shx:%g;%shy:%g;%shz:%g;%shn:%g;",
99 argv[0], hvn[0], argv[0], hvn[1],
100 argv[0], hvn[2], argv[0], sqrt(vw.hn2));
101 printf("%svx:%g;%svy:%g;%svz:%g;%svn:%g;\n",
102 argv[0], vvn[0], argv[0], vvn[1],
103 argv[0], vvn[2], argv[0], sqrt(vw.vn2));
104 exit(0);
105 }
106 if (!isflt(argv[0]))
107 goto userr;
108 dist = atof(argv[0]);
109 VSUM(vw.vp, vw.vp, hvn, dist);
110 fprintview(&vw, stdout);
111 fputc('\n', stdout);
112 exit(0);
113 userr:
114 fprintf(stderr, "Usage: %s [view options] {offset|name}\n", progname);
115 exit(1);
116 }