/* POV to Radiance translator: pov2rad.c */ /* author : Congjiong Wang */ #include #include #include #include #include "numtypes.h" /* #include "numtable.h"*/ typedef struct { Word x,r,g,b; } colorinfo; FILE *finc, *fpov, *frad; char ch, frad_name[80], finc_name[80], fpov_name[80], is_num; char *pov_word; char chpov , colorend='f'; colorinfo color; Word texture[2600]; void reads_triangle(Word pov_num); void reads_smoothtriangle(Word pov_num); void reads_inc(void); void reads_color(void); void reads_texture(void); main() {int j2; printf("\n\n************ POV TO RADIANCE CONVERTION *************\n\n"); printf("Enter POV include file name ( *.inc ) : "); gets(finc_name); printf("\n"); printf("Enter POV source file name ( *.pov ) : "); gets(fpov_name); printf("\n"); printf("Enter Radiance target file name ( *.rad ) : "); gets(frad_name); printf("\n"); if (strlen(finc_name) == 0 || strlen(frad_name) == 0 ) exit( EXIT_FAILURE ); printf(" ........... Data Converting ............ \n\n"); /* reads_inc();*/ fpov = fopen(fpov_name, "r"); frad = fopen (frad_name, "w"); if (fpov == NULL ) { printf("Can't open %s\n", fpov); exit(EXIT_FAILURE); } chpov = getc(fpov); while (chpov != EOF) { if (( pov_word = malloc(25)) == NULL ) { printf("Out of memory"); exit(EXIT_FAILURE); } while (isspace (chpov)) chpov=getc(fpov); j2=0; while (chpov != EOF && isspace(chpov) == 0) { pov_word[j2++] = chpov; chpov = getc(fpov); } pov_word[j2] = '\0'; /* printf("pov_word = %s", pov_word); */ if ( strcmp( pov_word, "#declare" ) == 0 ) { reads_color(); fputs("void plastic ", frad); fputs(color.x, frad); fputs("\n", frad); fputs("0", frad); fputs("\n", frad); fputs("0", frad); fputs("\n", frad); fputs("5 ",frad); fputs(color.r, frad); fputs(" ", frad); fputs(color.g, frad); fputs(" ", frad); fputs(color.b, frad); fputs(" 0 .931 ", frad); fputs("\n\n", frad); } } reads_inc(); return 0; } void reads_color(void) { int j3 ,j4, j5, j6; colorend = 'f'; while (isspace(chpov)) chpov = getc(fpov); j3=0; while (chpov != EOF && isspace(chpov) == 0) { color.x[j3++] = chpov; chpov = getc(fpov); } color.x[j3] = '\0'; /* printf("color.x is %s ", color.x); */ while (isspace(chpov)) chpov = getc(fpov); while (chpov != EOF && chpov != '<') chpov = getc(fpov); j4 =0; chpov =getc(fpov); while (chpov != EOF && colorend == 'f') { while (chpov != ',') { color.r[j4++] = chpov; chpov = getc(fpov); } color.r[j4] = '\0'; /* printf("color.r = %s ", color.r); */ chpov = getc(fpov); while (isspace(chpov)) chpov = getc(fpov); j5 = 0; while ( chpov != ',') { color.g[j5++] = chpov; chpov = getc(fpov); } color.g[j5] = '\0'; /* printf("color.g = %s ",color.g); */ chpov = getc(fpov); while (isspace(chpov)) chpov = getc(fpov); j6 = 0 ; while (chpov != '>'&& chpov != ',') { color.b[j6++] = chpov; chpov = getc(fpov); } color.b[j6] = '\0'; /* printf("color.b = %s", color.b); */ colorend = 't'; } free(pov_word); } void reads_triangle(Word pov_num) { int i=0; is_num = 'f'; while (isspace(ch)) ch=getc(finc); while (ch!=EOF && isdigit(ch)==0 && ch != '-') { if ( ch != '}' ) ch = getc(finc); } while (ch!=EOF && ch != '}' && ch !='$') { if (ch!=',' && ch != '>' && ch != ' ') { is_num='t'; pov_num[i++]= ch; ch = getc(finc); } else { ch = '$'; pov_num[i] = '\0'; } } } void reads_smoothtriangle(Word pov_num) { int i=0; is_num = 'f'; while (isspace(ch)) ch=getc(finc); while (ch!=EOF && isdigit(ch)==0 && ch != '-') { if ( ch != '}' ) ch = getc(finc); } while (ch!=EOF && ch != '}' && ch !='$') { if (ch!=',' && ch != '>' && ch != ' ') { is_num='t'; pov_num[i++]= ch; ch = getc(finc); } else { ch = '$'; pov_num[i] = '\0'; } } } void reads_texture(void) { int m=1, n, j; char chtext, finish; char *inc_word; finc=fopen(finc_name, "r"); if (finc==NULL) { printf(" Can't open %s\n", finc); exit(EXIT_FAILURE); } chtext = getc(finc); while (chtext != EOF ) { finish ='f'; if ( ( inc_word = malloc(25)) == NULL ) { printf("Out of memory"); exit(EXIT_FAILURE);; } while (isspace(chtext)) chtext = getc(finc); j=0; while (chtext != EOF && isspace(chtext) == 0) { inc_word[j++] = chtext; chtext = getc(finc); } inc_word[j] = '\0'; /* printf("string are %s\n", inc_word); */ if (strcmp(inc_word, "texture") == 0 && finish == 'f') { while (isspace(chtext)) chtext = getc(finc); n=0; chtext = getc(finc); while ( chtext != '}' ) { texture[m][n++] = chtext; chtext = getc(finc); } texture[m][n] = '\0'; /* printf(" texture = %s ", texture[m]);*/ m++; finish = 't'; } free(inc_word); } fclose(finc); } void reads_inc(void) { Word pov_num; int j, m, t=1 ; char *inc_word; char str[10], /* string1[80] = "void plastic leg_material", */ string2[80] = " 0 ", /* string3[80] = " 5 .906 0 0 0 .1 ",*/ /* string4[80] = " leg_material polygon ",*/ string5[80] = " 9 "; int i = 0; reads_texture(); /* frad = fopen ( frad_name , "w"); fputs(string1, frad); fputs("\n", frad); fputs(string2, frad); fputs("\n", frad); fputs(string2, frad); fputs("\n", frad); fputs(string3, frad); fputs("\n", frad); */ finc=fopen(finc_name, "r"); if (finc==NULL) { printf(" Can't open %s\n", finc); exit(EXIT_FAILURE); } ch = getc(finc); while (ch != EOF ) { if ( ( inc_word = malloc( strlen(pov_num) + 7 )) == NULL ) { printf("Out of memory"); exit(EXIT_FAILURE);; } while (isspace(ch)) ch = getc(finc); j=0; while (ch != EOF && isspace(ch) == 0) { inc_word[j++] = ch; ch = getc(finc); } inc_word[j] = '\0'; /* printf("string are %s\n", inc_word); */ if (strcmp(inc_word, "texture") == 0 ) { t++; i=0; } if (strcmp(inc_word, "triangle") == 0 ) { fputs("\n\n", frad); i++; fputs(texture[t], frad); fputs(" polygon ",frad); fputs(itoa(i, str, 10), frad); fputs("\n", frad); fputs(string2, frad); fputs("\n", frad); fputs(string2, frad); fputs("\n", frad); fputs(string5, frad); fputs("\n", frad); for(m=1; m<=9; m++) { reads_triangle(pov_num); /* printf("Num is %s ", pov_num);*/ if (is_num == 't' && strlen(pov_num) > 0 ) { fputs(pov_num, frad); fputs(" ", frad); if ( m==3 || m==6 || m==9) fputs("\n", frad); } } } else if (strcmp(inc_word, "smooth_triangle") == 0 ) { fputs("\n", frad); fputs("\n", frad); i++; fputs(texture[t], frad); fputs(" polygon ",frad); fputs(itoa(i, str, 10), frad); fputs("\n", frad); fputs(string2, frad); fputs("\n", frad); fputs(string2, frad); fputs("\n", frad); fputs(string5, frad); fputs("\n", frad); for(m=1; m<=18; m++) { reads_smoothtriangle(pov_num); /* printf("Num is %s ", pov_num); */ if (is_num == 't' && strlen(pov_num) > 0 ) if ( m==1 || m==2 || m==3 || m==7 || m==8 || m==9 || m==13 || m==14 || m==15 ) { fputs(pov_num, frad); fputs(" ", frad); if ( m==3 || m==6 || m==9) fputs("\n", frad); } } } free(inc_word); } printf("............. Finish Converting ...............\n\n"); fclose(finc); fclose(frad); }