ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/util/getinfo.c
Revision: 2.16
Committed: Tue Mar 20 18:18:39 2018 UTC (6 years, 1 month ago) by greg
Content type: text/plain
Branch: MAIN
CVS Tags: rad5R2
Changes since 2.15: +3 -1 lines
Log Message:
Added redefine of getc()

File Contents

# Content
1 #ifndef lint
2 static const char RCSid[] = "$Id: getinfo.c,v 2.15 2018/03/20 17:48:16 greg Exp $";
3 #endif
4 /*
5 * getinfo.c - program to read info. header from file.
6 *
7 * 1/3/86
8 */
9
10 #include <stdio.h>
11 #include <string.h>
12
13 #include "platform.h"
14 #include "rtprocess.h"
15 #include "resolu.h"
16
17 #ifdef getc_unlocked /* avoid nasty file-locking overhead */
18 #undef getc
19 #undef getchar
20 #undef putchar
21 #define getc getc_unlocked
22 #define getchar getchar_unlocked
23 #define putchar putchar_unlocked
24 #endif
25
26 static gethfunc tabstr;
27 static void getdim(FILE *fp);
28 static void copycat(void);
29
30
31 static int
32 tabstr( /* put out line followed by tab */
33 char *s,
34 void *p
35 )
36 {
37 while (*s) {
38 putchar(*s);
39 s++;
40 }
41 if (*--s == '\n')
42 putchar('\t');
43 return(0);
44 }
45
46
47 int
48 main(
49 int argc,
50 char **argv
51 )
52 {
53 int dim = 0;
54 FILE *fp;
55 int i;
56
57 if (argc > 1 && !strcmp(argv[1], "-d")) {
58 argc--; argv++;
59 dim = 1;
60 SET_FILE_BINARY(stdin);
61 } else if (argc > 2 && !strcmp(argv[1], "-c")) {
62 SET_FILE_BINARY(stdin);
63 SET_FILE_BINARY(stdout);
64 setvbuf(stdin, NULL, _IONBF, 2);
65 getheader(stdin, (gethfunc *)fputs, stdout);
66 printargs(argc-2, argv+2, stdout);
67 fputc('\n', stdout);
68 fflush(stdout);
69 execvp(argv[2], argv+2);
70 perror(argv[2]);
71 return 1;
72 } else if (argc > 2 && !strcmp(argv[1], "-a")) {
73 SET_FILE_BINARY(stdin);
74 SET_FILE_BINARY(stdout);
75 getheader(stdin, (gethfunc *)fputs, stdout);
76 for (i = 2; i < argc; i++) {
77 int len = strlen(argv[i]);
78 if (!len) continue;
79 fputs(argv[i], stdout);
80 if (argv[i][len-1] != '\n')
81 fputc('\n', stdout);
82 }
83 fputc('\n', stdout);
84 copycat();
85 return 0;
86 } else if (argc == 2 && !strcmp(argv[1], "-")) {
87 SET_FILE_BINARY(stdin);
88 SET_FILE_BINARY(stdout);
89 getheader(stdin, NULL, NULL);
90 copycat();
91 return 0;
92 }
93 for (i = 1; i < argc; i++) {
94 fputs(argv[i], stdout);
95 if ((fp = fopen(argv[i], "r")) == NULL)
96 fputs(": cannot open\n", stdout);
97 else {
98 if (dim) {
99 fputs(": ", stdout);
100 getdim(fp);
101 } else {
102 tabstr(":\n", NULL);
103 getheader(fp, tabstr, NULL);
104 fputc('\n', stdout);
105 }
106 fclose(fp);
107 }
108 }
109 if (argc == 1) {
110 if (dim) {
111 getdim(stdin);
112 } else {
113 getheader(stdin, (gethfunc *)fputs, stdout);
114 fputc('\n', stdout);
115 }
116 }
117 return 0;
118 }
119
120
121 static void
122 getdim( /* get dimensions from file */
123 FILE *fp
124 )
125 {
126 int j;
127 int c;
128
129 getheader(fp, NULL, NULL); /* skip header */
130
131 switch (c = getc(fp)) {
132 case '+': /* picture */
133 case '-':
134 do
135 putchar(c);
136 while (c != '\n' && (c = getc(fp)) != EOF);
137 break;
138 case 1: /* octree */
139 getc(fp);
140 j = 0;
141 while ((c = getc(fp)) != EOF)
142 if (c == 0) {
143 if (++j >= 4)
144 break;
145 putchar(' ');
146 } else {
147 putchar(c);
148 }
149 putchar('\n');
150 break;
151 default: /* ??? */
152 fputs("unknown file type\n", stdout);
153 break;
154 }
155 }
156
157
158 static void
159 copycat(void) /* copy input to output */
160 {
161 char buf[8192];
162 int n;
163
164 fflush(stdout);
165 while ((n = fread(buf, 1, sizeof(buf), stdin)) > 0)
166 if (writebuf(fileno(stdout), buf, n) != n)
167 break;
168 }