home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
C++ Games Programming
/
CPPGAMES.ISO
/
povnet
/
povnet.c
< prev
next >
Wrap
C/C++ Source or Header
|
1995-02-09
|
2KB
|
92 lines
// --- povnet.c
// compile with Borland C
#include <stdio.h>
#include <conio.h>
#include <dir.h>
#include <string.h>
#include <process.h>
#include <dos.h>
#include <io.h>
#include <errno.h>
void render(char *povname)
{
char def[20], *defp = def;
int c;
FILE *fd, *fp, *fo;
int oldstderr;
char tmp[20], err[20];
*(povname+strlen(povname)-4) = '\0';
// --- use model's .def file or default.def
strcpy(def, povname);
strcat(def, ".def");
if (access(def, 0) != 0)
defp = "default.def";
// ---- build .def file
fo = fopen("povray.def", "wt");
fd = fopen(defp, "rt");
while ((c = fgetc(fd)) != EOF)
fputc(c, fo);
fprintf(fo, " -i%s.pov\n -o%s.tga\n +@%s.out\n -d\n", povname, povname, povname);
fclose(fd);
fclose(fo);
// --- build .tmp file to receive stderr output
strcpy(tmp, povname);
strcat(tmp, ".tmp");
fp = fopen(tmp, "wt");
// --- remove previous .err file
strcpy(err, povname);
strcat(err, ".err");
remove(err);
// ---- redirect stderr to .tmp file
oldstderr = dup(fileno(stderr));
dup2(fileno(fp), fileno(stderr));
printf("\n\aRendering %s\n", povname);
spawnlp(P_WAIT, "povray.exe", "povray.exe", "povray.def", NULL);
// --- un-redirect stderr
dup2(fileno(stderr), oldstderr);
fclose(fp);
// ---- copy redirected stderr .tmp file to .err file
fp = fopen(tmp, "rt");
fo = fopen(err, "wt");
while ((c = fgetc(fp)) != EOF)
fputc(c, fo);
fclose(fp);
fclose(fo);
// ---- delete the .tmp file
remove(tmp);
// --- turn off archive attribute in .pov file
*(povname+strlen(povname)) = '.';
_rtl_chmod(povname, 1, _rtl_chmod(povname, 0) & (~FA_ARCH));
putchar('\n');
}
int wait(void)
{
int i;
for (i = 0; i < 5; i++) {
putchar('.');
if (kbhit()) {
if (getch() == 27)
return 1;
}
sleep(1);
}
return 0;
}
int main()
{
int ax;
struct ffblk ff;
do {
printf("\rScanning for POVs (Esc to quit) \b\b\b\b\b");
ax = findfirst("*.pov", &ff, 0);
while (ax != -1) {
if (ff.ff_attrib && FA_ARCH)
render(ff.ff_name);
ax = findnext(&ff);
}
} while (!wait());
return 0;
}