int ProcessOptions::Process_Switch(Cmd_Parser_Table *option, char *param, POVMSObjectPtr obj, bool is_on) { double floatval = 0.0; int intval = 0; int intval2 = 0; int err = 0; char chr = 0; if(option->is_switch != kPOVMSType_Null) { err = POVMSUtil_SetBool(obj, option->is_switch, is_on); if(err != kNoErr) return err; } switch(option->type) { case kPOVMSType_Int: if(sscanf(param, "%d", &intval) == 1) err = POVMSUtil_SetInt(obj, option->key, intval); else { ParseError("Integer parameter expected for switch '%s', found '%s'.", option->command, param); err = kParseErr; } break; case kPOVMSType_Float: if(sscanf(param, "%lf", &floatval) == 1) err = POVMSUtil_SetFloat(obj, option->key, floatval); else { ParseError("Floating-point parameter expected for switch '%s', found '%s'.", option->command, param); err = kParseErr; } break; case kPOVMSType_Bool: err = POVMSUtil_SetBool(obj, option->key, IsTrue(param)); break; case kPOVObjectClass_File: // make the file object if(err == kNoErr) err = POVMSUtil_SetString(obj, option->key, param); else { ParseError("File name or path parameter expected for switch '%s', found '%s'.", option->command, param); err = kParseErr; } break; case kPOVMSType_WildCard: err = ReadSpecialSwitchHandler(option, param, obj, is_on); break; case kPOVMSType_Null: break; default: err = kParseErr; break; } return err; }
int Send_ProgressUpdate(int progressState, int t) { POVMSObject msg; int err = kNoErr; DBL time_dif; STOP_TIME time_dif = TIME_ELAPSED if((fabs(time_dif - Previous_t) >= t) || (t == 0)) { Previous_t = time_dif; if(err == kNoErr) err = POVMSObject_New(&msg, kPOVObjectClass_Progress); if(err == kNoErr) err = POVMSUtil_SetBool(&msg, kPOVAttrib_ProgressStatus, true); if(err == kNoErr) err = BuildProgress(&msg, progressState); if(err == kNoErr) err = POVMSMsg_SetupMessage(&msg, kPOVMsgClass_RenderOutput, kPOVMsgIdent_Progress); if(err == kNoErr) err = POVMSMsg_SetDestinationAddress(&msg, FRONTEND_ADDRESS); if(err == kNoErr) err = POVMS_Send(POVMS_Render_Context, &msg, NULL, kPOVMSSendMode_NoReply); } return err; }
int Send_Progress(const char *statusString, int progressState) { POVMSObject msg; int err = kNoErr; Previous_t = 0; if(err == kNoErr) err = POVMSObject_New(&msg, kPOVObjectClass_Progress); if(err == kNoErr) err = POVMSUtil_SetString(&msg, kPOVAttrib_EnglishText, statusString); if(err == kNoErr) err = POVMSUtil_SetBool(&msg, kPOVAttrib_ProgressStatus, false); if(err == kNoErr) err = BuildProgress(&msg, progressState); if(err == kNoErr) err = POVMSMsg_SetupMessage(&msg, kPOVMsgClass_RenderOutput, kPOVMsgIdent_Progress); if(err == kNoErr) err = POVMSMsg_SetDestinationAddress(&msg, FRONTEND_ADDRESS); if(err == kNoErr) err = POVMS_Send(POVMS_Render_Context, &msg, NULL, kPOVMSSendMode_NoReply); return err; }
void POVMS_Object::SetBool(POVMSType key, POVMSBool value) { int err; err = POVMSUtil_SetBool(&data, key, value); if(err != kNoErr) throw err; }
void POVMS_Object::SetBool(POVMSType key, POVMSBool value) { int err; err = POVMSUtil_SetBool(&data, key, value); if(err != pov_base::kNoErr) throw POV_EXCEPTION_CODE(err); }
int ProcessOptions::Process_INI_Option(INI_Parser_Table *option, char *param, POVMSObjectPtr obj) { double floatval = 0.0; int intval = 0; int intval2 = 0; int err = kNoErr; switch(option->type) { case kPOVMSType_Int: if(sscanf(param, "%d", &intval) == 1) err = POVMSUtil_SetInt(obj, option->key, intval); else { ParseError("Integer parameter expected for option '%s', found '%s'.", option->keyword, param); err = kParseErr; } break; case kPOVMSType_Float: if(sscanf(param, "%lf", &floatval) == 1) err = POVMSUtil_SetFloat(obj, option->key, floatval); else { ParseError("Floating-point parameter expected for option '%s', found '%s'.", option->keyword, param); err = kParseErr; } break; case kPOVMSType_Bool: err = POVMSUtil_SetBool(obj, option->key, IsTrue(param)); break; case kPOVObjectClass_File: // make the file object if(err == kNoErr) err = POVMSUtil_SetString(obj, option->key, param); else { ParseError("File name or path parameter expected for option '%s', found '%s'.", option->keyword, param); err = kParseErr; } break; case kPOVMSType_WildCard: err = ReadSpecialOptionHandler(option, param, obj); break; default: err = kParseErr; break; } return err; }
int Send_RenderStarted(bool continuetrace) { POVMSObject msg; int err = kNoErr; err = POVMSObject_New(&msg, kPOVMSType_WildCard); if(err == kNoErr) err = POVMSObject_Copy(gStartedStreamMessage, &msg); if(err == kNoErr) err = POVMSUtil_SetBool(&msg, kPOVAttrib_ContinueTrace, continuetrace); if(err == kNoErr) err = POVMSMsg_SetupMessage(&msg, kPOVMsgClass_RenderOutput, kPOVMsgIdent_RenderStarted); if(err == kNoErr) err = POVMSMsg_SetDestinationAddress(&msg, FRONTEND_ADDRESS); if(err == kNoErr) err = POVMS_Send(POVMS_Render_Context, &msg, NULL, kPOVMSSendMode_NoReply); return err; }
int Receive_RenderOptions(POVMSObjectPtr msg, POVMSObjectPtr result, int, void *) { POVMSAttribute attr; POVMSInt i; POVMSFloat f; POVMSBool b; int l = 0; if(Cooperate_Render_Flag != 1) return -1; if(gStartedStreamMessage == NULL) { if(POVMSObject_New(&gStartedStreamMessageData, kPOVMSType_WildCard) == kNoErr) gStartedStreamMessage = &gStartedStreamMessageData; } l = sizeof(unsigned long); if(POVMSObject_Get(msg, &attr, kPOVAttrib_PreviewRefCon) == kNoErr) { (void)POVMSAttr_Get(&attr, kPOVMSType_WildCard, (void *)(&opts.Preview_RefCon), &l); (void)POVMSAttr_Delete(&attr); } if(POVMSUtil_GetInt(msg, kPOVAttrib_WarningLevel, &i) == 0) opts.Warning_Level = i; if(POVMSUtil_GetInt(msg, kPOVAttrib_Height, &i) == 0) Frame.Screen_Height = i; if(POVMSUtil_GetInt(msg, kPOVAttrib_Width, &i) == 0) Frame.Screen_Width = i; if(POVMSUtil_GetFloat(msg, kPOVAttrib_StartColumn, &f) == 0) { if(f >= 0.0 && f < 1.0) { opts.First_Column = -1; opts.First_Column_Percent = f; } else opts.First_Column = (int)f; } if(POVMSUtil_GetFloat(msg, kPOVAttrib_EndColumn, &f) == 0) { if((f >= 0.0 && f < 1.0) || ((f >= 0.0 && f <= 1.0) && (opts.First_Column < 1))) { opts.Last_Column = -1; opts.Last_Column_Percent = f; } else opts.Last_Column = (int)f; } if(POVMSUtil_GetFloat(msg, kPOVAttrib_StartRow, &f) == 0) { if(f >= 0.0 && f < 1.0) { opts.First_Line = -1; opts.First_Line_Percent = f; } else opts.First_Line = (int)f; } if(POVMSUtil_GetFloat(msg, kPOVAttrib_EndRow, &f) == 0) { if((f >= 0.0 && f < 1.0) || ((f >= 0.0 && f <= 1.0) && (opts.First_Line < 1))) { opts.Last_Line = -1; opts.Last_Line_Percent = f; } else opts.Last_Line = (int)f; } if(POVMSUtil_GetBool(msg, kPOVAttrib_TestAbort, &b) == 0) { if(b == true) opts.Options |= EXITENABLE; else opts.Options &= ~EXITENABLE; } if(POVMSUtil_GetInt(msg, kPOVAttrib_TestAbortCount, &i) == 0) opts.Abort_Test_Counter = i; if(POVMSUtil_GetBool(msg, kPOVAttrib_ContinueTrace, &b) == 0) { if(b == true) opts.Options |= CONTINUE_TRACE; else opts.Options &= ~CONTINUE_TRACE; } l = FILE_NAME_LENGTH; (void)POVMSUtil_GetString(msg, kPOVAttrib_CreateIni, opts.Ini_Output_File_Name, &l); if(POVMSUtil_GetFloat(msg, kPOVAttrib_Clock, &f) == 0) opts.FrameSeq.Clock_Value = f; if(POVMSUtil_GetInt(msg, kPOVAttrib_InitialFrame, &i) == 0) opts.FrameSeq.InitialFrame = i; if(POVMSUtil_GetInt(msg, kPOVAttrib_FinalFrame, &i) == 0) opts.FrameSeq.FinalFrame = i; if(POVMSUtil_GetFloat(msg, kPOVAttrib_InitialClock, &f) == 0) opts.FrameSeq.InitialClock = f; if(POVMSUtil_GetFloat(msg, kPOVAttrib_FinalClock, &f) == 0) opts.FrameSeq.FinalClock = f; if(POVMSUtil_GetFloat(msg, kPOVAttrib_SubsetStartFrame, &f) == 0) { if(f > 0.0 && f < 1.0) opts.FrameSeq.SubsetStartPercent = f; else opts.FrameSeq.SubsetStartFrame = (int)f; } if(POVMSUtil_GetFloat(msg, kPOVAttrib_SubsetEndFrame, &f) == 0) { if(f > 0.0 && f < 1.0) opts.FrameSeq.SubsetEndPercent = f; else opts.FrameSeq.SubsetEndFrame = (int)f; } if(POVMSUtil_GetBool(msg, kPOVAttrib_CyclicAnimation, &b) == 0) { if(b == true) opts.Options |= CYCLIC_ANIMATION; else opts.Options &= ~CYCLIC_ANIMATION; } if(POVMSUtil_GetBool(msg, kPOVAttrib_FieldRender, &b) == 0) opts.FrameSeq.Field_Render_Flag = b; if(POVMSUtil_GetBool(msg, kPOVAttrib_OddField, &b) == 0) opts.FrameSeq.Odd_Field_Flag = b; if(POVMSUtil_GetBool(msg, kPOVAttrib_PauseWhenDone, &b) == 0) { if(b == true) opts.Options |= PROMPTEXIT; else opts.Options &= ~PROMPTEXIT; } if(POVMSUtil_GetBool(msg, kPOVAttrib_Verbose, &b) == 0) { if(b == true) opts.Options |= VERBOSE; else opts.Options &= ~VERBOSE; } if(POVMSUtil_GetBool(msg, kPOVAttrib_DrawVistas, &b) == 0) { if(b == true) opts.Options |= USE_VISTA_DRAW; else opts.Options &= ~USE_VISTA_DRAW; } if(POVMSUtil_GetBool(msg, kPOVAttrib_Display, &b) == 0) { if(b == true) opts.Options |= DISPLAY; else opts.Options &= ~DISPLAY; } if(POVMSUtil_GetInt(msg, kPOVAttrib_VideoMode, &i) == 0) opts.DisplayFormat = (char)toupper(i); if(POVMSUtil_GetInt(msg, kPOVAttrib_Palette, &i) == 0) opts.PaletteOption = (char)toupper(i); if(POVMSUtil_GetFloat(msg, kPOVAttrib_DisplayGamma, &f) == 0) { if(f > 0.0) opts.DisplayGamma = f; } if(POVMSUtil_GetInt(msg, kPOVAttrib_PreviewStartSize, &i) == 0) opts.PreviewGridSize_Start = i; if(POVMSUtil_GetInt(msg, kPOVAttrib_PreviewEndSize, &i) == 0) opts.PreviewGridSize_End = i; if(POVMSUtil_GetBool(msg, kPOVAttrib_OutputToFile, &b) == 0) { if(b == true) opts.Options |= DISKWRITE; else opts.Options &= ~DISKWRITE; } if(POVMSUtil_GetInt(msg, kPOVAttrib_OutputFileType, &i) == 0) opts.OutputFormat = (char)tolower(i); if(POVMSUtil_GetInt(msg, kPOVAttrib_Compression, &i) == 0) { if(opts.OutputFormat == 'j') { opts.OutputQuality = i; opts.OutputQuality = max(0, opts.OutputQuality); opts.OutputQuality = min(100, opts.OutputQuality); } } if(POVMSUtil_GetBool(msg, kPOVAttrib_OutputAlpha, &b) == 0) { if(b == true) opts.Options |= OUTPUT_ALPHA; else opts.Options &= ~OUTPUT_ALPHA; } if(POVMSUtil_GetInt(msg, kPOVAttrib_BitsPerColor, &i) == 0) { if(opts.OutputFormat != 'j') { opts.OutputQuality = i; opts.OutputQuality = max(5, opts.OutputQuality); opts.OutputQuality = min(16, opts.OutputQuality); } } l = FILE_NAME_LENGTH; if(POVMSUtil_GetString(msg, kPOVAttrib_OutputFile, opts.Output_File_Name, &l) == 0) { if(!strcmp(opts.Output_File_Name, "-") || !strcmp(opts.Output_File_Name, "stdout")) { strcpy(opts.Output_File_Name, "stdout"); opts.Options |= TO_STDOUT; } } l = FILE_NAME_LENGTH; opts.Ini_Output_File_Name[0] = '\0'; (void)POVMSUtil_GetString(msg, kPOVAttrib_CreateIni, opts.Ini_Output_File_Name, &l); #if PRECISION_TIMER_AVAILABLE if(POVMSUtil_GetBool(msg, kPOVAttrib_CreateHistogram, &b) == 0) opts.histogram_on = b; if(POVMSUtil_GetInt(msg, kPOVAttrib_HistogramFileType, &i) == 0) { char *def_ext = NULL; switch(i) { case 'C': case 'c': opts.histogram_type = CSV; opts.histogram_file_type = NO_FILE; // CSV has special handling in histogram output, so this is correct [trf] def_ext = ".csv"; break; case 'S': case 's': opts.histogram_type = SYS ; opts.histogram_file_type = SYS_FILE; def_ext = SYS_DEF_EXT; break ; case 'P' : case 'p' : opts.histogram_type = PPM; opts.histogram_file_type = PPM_FILE; def_ext = ".ppm"; break; case 'T': case 't': opts.histogram_type = TARGA; opts.histogram_file_type = TGA_FILE; def_ext = ".tga"; break; case 'N': case 'n': opts.histogram_type = PNG; opts.histogram_file_type = PNG_FILE; def_ext = ".png"; break; default: opts.histogram_type = TARGA; opts.histogram_file_type = TGA_FILE; Warning(0, "Unknown histogram output type '%c'.", (char)i); break ; } // Process the histogram file name now, if it hasn't // yet been specified, and in case it isn't set later. if (opts.histogram_on && (opts.Histogram_File_Name[0] == '\0') && (def_ext != NULL)) sprintf(opts.Histogram_File_Name, "histgram%s", def_ext); } l = FILE_NAME_LENGTH; if(POVMSUtil_GetString(msg, kPOVAttrib_HistogramFile, opts.Histogram_File_Name, &l) == 0) { if(opts.histogram_on && opts.Histogram_File_Name[0] == '\0') { char *def_ext = NULL; switch(opts.histogram_type) { case CSV: def_ext = ".csv"; break; case TARGA: def_ext = ".tga"; break; case PNG: def_ext = ".png"; break; case PPM: def_ext = ".ppm"; break; case SYS: def_ext = SYS_DEF_EXT; break; case NONE: def_ext = ""; break; /* To quiet warnings */ } sprintf(opts.Histogram_File_Name, "histgram%s", def_ext); } } if(POVMSUtil_GetInt(msg, kPOVAttrib_HistogramGridSizeX, &i) == 0) opts.histogram_x = i; if(POVMSUtil_GetInt(msg, kPOVAttrib_HistogramGridSizeY, &i) == 0) opts.histogram_y = i; #endif /* PRECISION_TIMER_AVAILABLE */ (void)SetCommandOption(msg, kPOVAttrib_PreSceneCommand, &opts.Shellouts[PRE_SCENE_SHL]); (void)SetCommandOption(msg, kPOVAttrib_PreFrameCommand, &opts.Shellouts[PRE_FRAME_SHL]); (void)SetCommandOption(msg, kPOVAttrib_PostSceneCommand, &opts.Shellouts[POST_SCENE_SHL]); (void)SetCommandOption(msg, kPOVAttrib_PostFrameCommand, &opts.Shellouts[POST_FRAME_SHL]); (void)SetCommandOption(msg, kPOVAttrib_UserAbortCommand, &opts.Shellouts[USER_ABORT_SHL]); (void)SetCommandOption(msg, kPOVAttrib_FatalErrorCommand, &opts.Shellouts[FATAL_SHL]); l = FILE_NAME_LENGTH; if(POVMSUtil_GetString(msg, kPOVAttrib_InputFile, opts.Input_File_Name, &l) == 0) { if(!strcmp(opts.Input_File_Name, "-") || !strcmp(opts.Input_File_Name, "stdin")) { strcpy (opts.Input_File_Name, "stdin"); opts.Options |= FROM_STDIN; } } if(POVMSObject_Get(msg, &attr, kPOVAttrib_LibraryPath) == 0) { int cnt = 0; if(POVMSAttrList_Count(&attr, &cnt) == 0) { POVMSAttribute item; int ii,iii; bool rem = false; for(ii = 1; ii <= cnt; ii++) { if(POVMSAttrList_GetNth(&attr, ii, &item) == 0) { l = 0; if(POVMSAttr_Size(&item, &l) == 0) { if(l > 0) { if(opts.Library_Path_Index >= MAX_LIBRARIES) Error ("Too many library directories specified."); opts.Library_Paths[opts.Library_Path_Index] = (char *)POV_MALLOC(l, "library paths"); if(POVMSAttr_Get(&item, kPOVMSType_CString, opts.Library_Paths[opts.Library_Path_Index], &l) == 0) rem = false; else rem = true; // remove path again if the same one already exists for(iii = 0; iii < opts.Library_Path_Index - 1; iii++) { if(strcmp(opts.Library_Paths[iii], opts.Library_Paths[opts.Library_Path_Index]) == 0) { rem = true; break; } } if(rem == true) { POV_FREE(opts.Library_Paths[opts.Library_Path_Index]); opts.Library_Paths[opts.Library_Path_Index] = NULL; } else opts.Library_Path_Index++; } } (void)POVMSAttr_Delete(&item); } } } (void)POVMSAttr_Delete(&attr); } if(POVMSUtil_GetFloat(msg, kPOVAttrib_Version, &f) == 0) opts.Language_Version = (int)(f * 100 + 0.5); (void)POVMSObject_Delete(gStartedStreamMessage); (void)POVMSObject_New(gStartedStreamMessage, kPOVMSType_WildCard); if(POVMSUtil_GetBool(msg, kPOVAttrib_AllConsole, &b) == 0) { (void)POVMSUtil_SetBool(gStartedStreamMessage, kPOVAttrib_AllConsole, b); (void)POVMSUtil_SetBool(gStartedStreamMessage, kPOVAttrib_DebugConsole, b); (void)POVMSUtil_SetBool(gStartedStreamMessage, kPOVAttrib_FatalConsole, b); (void)POVMSUtil_SetBool(gStartedStreamMessage, kPOVAttrib_RenderConsole, b); (void)POVMSUtil_SetBool(gStartedStreamMessage, kPOVAttrib_StatisticsConsole, b); (void)POVMSUtil_SetBool(gStartedStreamMessage, kPOVAttrib_WarningConsole, b); } if(POVMSUtil_GetBool(msg, kPOVAttrib_DebugConsole, &b) == 0) (void)POVMSUtil_SetBool(gStartedStreamMessage, kPOVAttrib_DebugConsole, b); if(POVMSUtil_GetBool(msg, kPOVAttrib_FatalConsole, &b) == 0) (void)POVMSUtil_SetBool(gStartedStreamMessage, kPOVAttrib_FatalConsole, b); if(POVMSUtil_GetBool(msg, kPOVAttrib_RenderConsole, &b) == 0) (void)POVMSUtil_SetBool(gStartedStreamMessage, kPOVAttrib_RenderConsole, b); if(POVMSUtil_GetBool(msg, kPOVAttrib_StatisticsConsole, &b) == 0) (void)POVMSUtil_SetBool(gStartedStreamMessage, kPOVAttrib_StatisticsConsole, b); if(POVMSUtil_GetBool(msg, kPOVAttrib_WarningConsole, &b) == 0) (void)POVMSUtil_SetBool(gStartedStreamMessage, kPOVAttrib_WarningConsole, b); for(i = 0; i < gStreamTypeUtilDataCount; i++) { l = 0; if(POVMSUtil_GetStringLength(msg, gStreamTypeUtilData[i], &l) == kNoErr) { char *str = (char *)POV_MALLOC(l, "stream name"); if(POVMSUtil_GetString(msg, gStreamTypeUtilData[i], str, &l) == kNoErr) { if(l > 1) { if(IsTrue(str) == true) (void)POVMSUtil_SetString(gStartedStreamMessage, gStreamTypeUtilData[i], gStreamDefaultFile[i]); else if(IsFalse(str) == false) (void)POVMSUtil_SetString(gStartedStreamMessage, gStreamTypeUtilData[i], str); } } POV_FREE(str); } } if(POVMSUtil_GetInt(msg, kPOVAttrib_Quality, &i) == 0) { opts.Quality = i; /* Emit a warning about the "radiosity" quality levels for * now. We can get rid of this some time in the future. */ if ((opts.Quality == 10) || (opts.Quality == 11)) { Warning(0, "Quality settings 10 and 11 are no longer valid."); opts.Quality = 9; } else if ((opts.Quality < 0) || (opts.Quality > 9)) Error("Illegal Quality setting."); opts.Quality_Flags = Quality_Values[opts.Quality]; } if(POVMSUtil_GetBool(msg, kPOVAttrib_Bounding, &b) == 0) opts.Use_Slabs = b; if(POVMSUtil_GetInt(msg, kPOVAttrib_BoundingThreshold, &i) == 0) { if(opts.BBox_Threshold < 1) Warning(0, "Too small bounding threshold adjusted to its minimum of one."); opts.BBox_Threshold = max(1, i); } if(POVMSUtil_GetBool(msg, kPOVAttrib_LightBuffer, &b) == 0) { if(b == true) opts.Options |= USE_LIGHT_BUFFER; else opts.Options &= ~USE_LIGHT_BUFFER; } if(POVMSUtil_GetBool(msg, kPOVAttrib_VistaBuffer, &b) == 0) { if(b == true) opts.Options |= USE_VISTA_BUFFER; else opts.Options &= ~USE_VISTA_BUFFER; } if(POVMSUtil_GetBool(msg, kPOVAttrib_Radiosity, &b) == 0) { Warning(0, "Radiosity commandline/INI switch is not needed in POV-Ray 3.5.\n" "Add a radiosity{}-block to your scene to turn on radiosity."); } if(POVMSUtil_GetBool(msg, kPOVAttrib_RemoveBounds, &b) == 0) { if(b == true) opts.Options |= REMOVE_BOUNDS; else opts.Options &= ~REMOVE_BOUNDS; } if(POVMSUtil_GetBool(msg, kPOVAttrib_SplitUnions, &b) == 0) { if(b == true) opts.Options |= SPLIT_UNION; else opts.Options &= ~SPLIT_UNION; } if(POVMSUtil_GetBool(msg, kPOVAttrib_Antialias, &b) == 0) { if(b == true) opts.Options |= ANTIALIAS; else opts.Options &= ~ANTIALIAS; } if(POVMSUtil_GetInt(msg, kPOVAttrib_SamplingMethod, &i) == 0) opts.Tracing_Method = i; if(POVMSUtil_GetFloat(msg, kPOVAttrib_AntialiasThreshold, &f) == 0) opts.Antialias_Threshold = f; if(POVMSUtil_GetInt(msg, kPOVAttrib_AntialiasDepth, &i) == 0) { opts.AntialiasDepth = i; if(opts.AntialiasDepth < 1) opts.AntialiasDepth = 1; if(opts.AntialiasDepth > 9) opts.AntialiasDepth = 9; } if(POVMSUtil_GetBool(msg, kPOVAttrib_Jitter, &b) == 0) { if(b == true) opts.Options |= JITTER; else opts.Options &= ~JITTER; } if(POVMSUtil_GetFloat(msg, kPOVAttrib_JitterAmount, &f) == 0) { opts.JitterScale = f; if(opts.JitterScale <= 0.0) opts.Options &= ~JITTER; } if(POVMSObject_Exist(msg, kPOVAttrib_IncludeHeader) == 0) { l = FILE_NAME_LENGTH; opts.Header_File_Name[0] = '\0'; (void)POVMSUtil_GetString(msg, kPOVAttrib_IncludeHeader, opts.Header_File_Name, &l); } (void)POVMSObject_Get(msg, &opts.Declared_Variables, kPOVAttrib_Declare); if(result != NULL) (void)BuildRenderOptions(result); return 0; }
void Send_InitInfo() { POVMSAttributeList attrlist; POVMSAttribute attr; POVMSObject msg; int err = kNoErr; if(err == kNoErr) err = POVMSObject_New(&msg, kPOVMSType_WildCard); if(err == kNoErr) err = POVMSUtil_SetString(&msg, kPOVAttrib_PlatformName, POVRAY_PLATFORM_NAME); if(err == kNoErr) err = POVMSUtil_SetFormatString(&msg, kPOVAttrib_CoreVersion, "Persistence of Vision(tm) Ray Tracer Version %s%s", POV_RAY_VERSION, COMPILER_VER); if(err == kNoErr) err = POVMSUtil_SetString(&msg, kPOVAttrib_EnglishText, DISTRIBUTION_MESSAGE_1 "\n" DISTRIBUTION_MESSAGE_2 "\n" DISTRIBUTION_MESSAGE_3 "\nPOV-Ray is based on DKBTrace 2.12 by David K. Buck & Aaron A. Collins\n" POV_RAY_COPYRIGHT); if(err == kNoErr) err = POVMSUtil_SetBool(&msg, kPOVAttrib_Official, POV_RAY_IS_OFFICIAL); if(err == kNoErr) err = POVMSAttrList_New(&attrlist); if(err == kNoErr) { for(int i = 0; Primary_Developers[i] != NULL; i++) { err = POVMSAttr_New(&attr); if(err == kNoErr) { err = POVMSAttr_Set(&attr, kPOVMSType_CString, Primary_Developers[i], strlen(Primary_Developers[i]) + 1); if(err == kNoErr) err = POVMSAttrList_Append(&attrlist, &attr); else err = POVMSAttr_Delete(&attr); } } } if(err == kNoErr) err = POVMSObject_Set(&msg, &attrlist, kPOVAttrib_PrimaryDevs); if(err == kNoErr) err = POVMSAttrList_New(&attrlist); if(err == kNoErr) { for(int i = 0; Contributing_Authors[i] != NULL; i++) { err = POVMSAttr_New(&attr); if(err == kNoErr) { err = POVMSAttr_Set(&attr, kPOVMSType_CString, Contributing_Authors[i], strlen(Contributing_Authors[i]) + 1); if(err == kNoErr) err = POVMSAttrList_Append(&attrlist, &attr); else err = POVMSAttr_Delete(&attr); } } } if(err == kNoErr) err = POVMSObject_Set(&msg, &attrlist, kPOVAttrib_ContributingDevs); if(err == kNoErr) err = POVMSAttrList_New(&attrlist); #ifndef DONT_SHOW_IMAGE_LIB_VERSIONS // ZLib library version and copyright notice if(err == kNoErr) { err = POVMSAttr_New(&attr); if(err == kNoErr) { const char *tempstr = pov_tsprintf("ZLib %s, Copyright 1995-1998 Jean-loup Gailly and Mark Adler", Extract_Version(zlibVersion())); err = POVMSAttr_Set(&attr, kPOVMSType_CString, (void *)tempstr, strlen(tempstr) + 1); if(err == kNoErr) err = POVMSAttrList_Append(&attrlist, &attr); else err = POVMSAttr_Delete(&attr); } } // LibPNG library version and copyright notice if(err == kNoErr) { err = POVMSAttr_New(&attr); if(err == kNoErr) { const char *tempstr = pov_tsprintf("LibPNG %s, Copyright 1998-2002 Glenn Randers-Pehrson", Extract_Version(png_get_libpng_ver(NULL))); err = POVMSAttr_Set(&attr, kPOVMSType_CString, (void *)tempstr, strlen(tempstr) + 1); if(err == kNoErr) err = POVMSAttrList_Append(&attrlist, &attr); else err = POVMSAttr_Delete(&attr); } } // LibJPEG library version and copyright notice if(err == kNoErr) { err = POVMSAttr_New(&attr); if(err == kNoErr) { const char *tempstr = pov_tsprintf("LibJPEG %s, Copyright 1998 Thomas G. Lane", Extract_Version(JVERSION)); err = POVMSAttr_Set(&attr, kPOVMSType_CString, (void *)tempstr, strlen(tempstr) + 1); if(err == kNoErr) err = POVMSAttrList_Append(&attrlist, &attr); else err = POVMSAttr_Delete(&attr); } } // LibTIFF library version and copyright notice if(err == kNoErr) { err = POVMSAttr_New(&attr); if(err == kNoErr) { const char *tempstr = pov_tsprintf("LibTIFF %s, Copyright 1988-1997 Sam Leffler, 1991-1997 SGI", Extract_Version(TIFFGetVersion())); err = POVMSAttr_Set(&attr, kPOVMSType_CString, (void *)tempstr, strlen(tempstr) + 1); if(err == kNoErr) err = POVMSAttrList_Append(&attrlist, &attr); else err = POVMSAttr_Delete(&attr); } } #endif if(err == kNoErr) err = POVMSObject_Set(&msg, &attrlist, kPOVAttrib_ImageLibVersions); if(err == kNoErr) err = POVMSMsg_SetupMessage(&msg, kPOVMsgClass_Miscellaneous, kPOVMsgIdent_InitInfo); if(err == kNoErr) err = POVMSMsg_SetDestinationAddress(&msg, FRONTEND_ADDRESS); if(err == kNoErr) err = POVMS_Send(POVMS_Render_Context, &msg, NULL, kPOVMSSendMode_NoReply); if(err != 0) (void)POVMS_ASSERT_OUTPUT("Sending InitInfo failed!", "povmsend.cpp", 0); }
int BuildRenderOptions(POVMSObjectPtr msg) { POVMSAttribute attr; int err = kNoErr; if(msg == NULL) return kParamErr; if(err == kNoErr) err = POVMSAttr_New(&attr); if(err == kNoErr) { err = POVMSAttr_Set(&attr, kPOVMSType_WildCard, (void *)(&opts.Preview_RefCon), sizeof(unsigned long)); if(err == kNoErr) err = POVMSObject_Set(msg, &attr, kPOVAttrib_PreviewRefCon); } if(err == kNoErr) err = POVMSUtil_SetInt(msg, kPOVAttrib_Height, Frame.Screen_Height); if(err == kNoErr) err = POVMSUtil_SetInt(msg, kPOVAttrib_Width, Frame.Screen_Width); if(err == kNoErr) { if (opts.First_Column == -1) err = POVMSUtil_SetFloat(msg, kPOVAttrib_StartColumn, opts.First_Column_Percent); else err = POVMSUtil_SetFloat(msg, kPOVAttrib_StartColumn, opts.First_Column); } if(err == kNoErr) { if (opts.Last_Column == -1) err = POVMSUtil_SetFloat(msg, kPOVAttrib_EndColumn, opts.Last_Column_Percent); else err = POVMSUtil_SetFloat(msg, kPOVAttrib_EndColumn, opts.Last_Column); } if(err == kNoErr) { if (opts.First_Line == -1) err = POVMSUtil_SetFloat(msg, kPOVAttrib_StartRow, opts.First_Line_Percent); else err = POVMSUtil_SetFloat(msg, kPOVAttrib_StartRow, opts.First_Line); } if(err == kNoErr) { if (opts.Last_Line == -1) err = POVMSUtil_SetFloat(msg, kPOVAttrib_EndRow, opts.Last_Line_Percent); else err = POVMSUtil_SetFloat(msg, kPOVAttrib_EndRow, opts.Last_Line); } if(err == kNoErr) err = POVMSUtil_SetBool(msg, kPOVAttrib_TestAbort, (opts.Options & EXITENABLE) != 0); if(err == kNoErr) err = POVMSUtil_SetInt(msg, kPOVAttrib_TestAbortCount, opts.Abort_Test_Counter); if(err == kNoErr) err = POVMSUtil_SetBool(msg, kPOVAttrib_ContinueTrace, (opts.Options & CONTINUE_TRACE) != 0); if(err == kNoErr) err = POVMSUtil_SetString(msg, kPOVAttrib_CreateIni, opts.Ini_Output_File_Name); if(err == kNoErr) err = POVMSUtil_SetFloat(msg, kPOVAttrib_Clock, opts.FrameSeq.Clock_Value); if(err == kNoErr) err = POVMSUtil_SetInt(msg, kPOVAttrib_InitialFrame, max(opts.FrameSeq.InitialFrame, 1)); if(err == kNoErr) err = POVMSUtil_SetInt(msg, kPOVAttrib_FinalFrame, max(opts.FrameSeq.FinalFrame, 1)); if(err == kNoErr) err = POVMSUtil_SetFloat(msg, kPOVAttrib_InitialClock, opts.FrameSeq.InitialClock); if(err == kNoErr) { if(opts.FrameSeq.FinalFrame <= 1) err = POVMSUtil_SetFloat(msg, kPOVAttrib_FinalClock, 1.0); else err = POVMSUtil_SetFloat(msg, kPOVAttrib_FinalClock, opts.FrameSeq.FinalClock); } if(err == kNoErr) err = POVMSUtil_SetInt(msg, kPOVAttrib_SubsetStartFrame, max(opts.FrameSeq.SubsetStartFrame, 1)); if(err == kNoErr) err = POVMSUtil_SetInt(msg, kPOVAttrib_SubsetEndFrame, max(opts.FrameSeq.SubsetEndFrame, 1)); if(err == kNoErr) err = POVMSUtil_SetBool(msg, kPOVAttrib_CyclicAnimation, (opts.Options & CYCLIC_ANIMATION) != 0); if(err == kNoErr) err = POVMSUtil_SetBool(msg, kPOVAttrib_FieldRender, opts.FrameSeq.Field_Render_Flag); if(err == kNoErr) err = POVMSUtil_SetBool(msg, kPOVAttrib_OddField, opts.FrameSeq.Odd_Field_Flag); if(err == kNoErr) err = POVMSUtil_SetBool(msg, kPOVAttrib_PauseWhenDone, (opts.Options & PROMPTEXIT) != 0); if(err == kNoErr) err = POVMSUtil_SetBool(msg, kPOVAttrib_Verbose, (opts.Options & VERBOSE) != 0); if(err == kNoErr) err = POVMSUtil_SetBool(msg, kPOVAttrib_DrawVistas, (opts.Options & USE_VISTA_DRAW) != 0); if(err == kNoErr) err = POVMSUtil_SetBool(msg, kPOVAttrib_Display, (opts.Options & DISPLAY) != 0); if(err == kNoErr) err = POVMSUtil_SetInt(msg, kPOVAttrib_VideoMode, opts.DisplayFormat); if(err == kNoErr) err = POVMSUtil_SetInt(msg, kPOVAttrib_Palette, opts.PaletteOption); if(err == kNoErr) err = POVMSUtil_SetFloat(msg, kPOVAttrib_DisplayGamma, opts.DisplayGamma); if(err == kNoErr) err = POVMSUtil_SetInt(msg, kPOVAttrib_PreviewStartSize, opts.PreviewGridSize_Start); if(err == kNoErr) err = POVMSUtil_SetInt(msg, kPOVAttrib_PreviewEndSize, opts.PreviewGridSize_End); if(err == kNoErr) err = POVMSUtil_SetBool(msg, kPOVAttrib_OutputToFile, (opts.Options & DISKWRITE) != 0); if(err == kNoErr) err = POVMSUtil_SetInt(msg, kPOVAttrib_OutputFileType, opts.OutputFormat); if(err == kNoErr) err = POVMSUtil_SetInt(msg, kPOVAttrib_Compression, opts.OutputQuality); if(err == kNoErr) err = POVMSUtil_SetBool(msg, kPOVAttrib_OutputAlpha, (opts.Options & OUTPUT_ALPHA) != 0); if(err == kNoErr) err = POVMSUtil_SetInt(msg, kPOVAttrib_BitsPerColor, opts.OutputQuality); if(err == kNoErr) err = POVMSUtil_SetString(msg, kPOVAttrib_OutputFile, opts.Output_File_Name); if(err == kNoErr) err = POVMSUtil_SetString(msg, kPOVAttrib_OutputPath, opts.Output_Path); #if PRECISION_TIMER_AVAILABLE if(err == kNoErr) err = POVMSUtil_SetBool(msg, kPOVAttrib_CreateHistogram, opts.histogram_on != 0); if(err == kNoErr) err = POVMSUtil_SetInt(msg, kPOVAttrib_HistogramFileType, opts.histogram_type); if(err == kNoErr) err = POVMSUtil_SetString(msg, kPOVAttrib_HistogramFile, opts.Histogram_File_Name); if(err == kNoErr) err = POVMSUtil_SetInt(msg, kPOVAttrib_HistogramGridSizeX, opts.histogram_x); if(err == kNoErr) err = POVMSUtil_SetInt(msg, kPOVAttrib_HistogramGridSizeY, opts.histogram_y); #endif /* PRECISION_TIMER_AVAILABLE */ if(err == kNoErr) err = BuildCommand(msg, kPOVAttrib_PreSceneCommand, &opts.Shellouts[PRE_SCENE_SHL]); if(err == kNoErr) err = BuildCommand(msg, kPOVAttrib_PreFrameCommand, &opts.Shellouts[PRE_FRAME_SHL]); if(err == kNoErr) err = BuildCommand(msg, kPOVAttrib_PostSceneCommand, &opts.Shellouts[POST_SCENE_SHL]); if(err == kNoErr) err = BuildCommand(msg, kPOVAttrib_PostFrameCommand, &opts.Shellouts[POST_FRAME_SHL]); if(err == kNoErr) err = BuildCommand(msg, kPOVAttrib_UserAbortCommand, &opts.Shellouts[USER_ABORT_SHL]); if(err == kNoErr) err = BuildCommand(msg, kPOVAttrib_FatalErrorCommand, &opts.Shellouts[FATAL_SHL]); if(err == kNoErr) err = POVMSUtil_SetString(msg, kPOVAttrib_InputFile, opts.Input_File_Name); if(err == kNoErr) { POVMSAttributeList list; err = POVMSAttrList_New(&list); if(err == kNoErr) { int ii; for(ii = 0; ii < opts.Library_Path_Index; ii++) { err = POVMSAttr_New(&attr); if(err == kNoErr) { err = POVMSAttr_Set(&attr, kPOVMSType_CString, opts.Library_Paths[ii], strlen(opts.Library_Paths[ii]) + 1); if(err == kNoErr) err = POVMSAttrList_Append(&list, &attr); else err = POVMSAttr_Delete(&attr); } } if(err == kNoErr) err = POVMSObject_Set(msg, &list, kPOVAttrib_LibraryPath); } } if(err == kNoErr) { POVMSFloat f = opts.Language_Version / 100.0; err = POVMSUtil_SetFloat(msg, kPOVAttrib_Version, f); } /* FIXME if(err == kNoErr) err = POVMSUtil_SetBool(msg, kPOVAttrib_DebugConsole, Stream_Info[DEBUG_STREAM]->console != NULL); if(err == kNoErr) err = POVMSUtil_SetBool(msg, kPOVAttrib_FatalConsole, Stream_Info[FATAL_STREAM]->console != NULL); if(err == kNoErr) err = POVMSUtil_SetBool(msg, kPOVAttrib_RenderConsole, Stream_Info[RENDER_STREAM]->console != NULL); if(err == kNoErr) err = POVMSUtil_SetBool(msg, kPOVAttrib_StatisticsConsole, Stream_Info[STATISTIC_STREAM]->console != NULL); if(err == kNoErr) err = POVMSUtil_SetBool(msg, kPOVAttrib_WarningConsole, Stream_Info[WARNING_STREAM]->console != NULL); if(err == kNoErr) err = POVMSUtil_SetBool(msg, kPOVAttrib_AllConsole, Stream_Info[ALL_STREAM]->console != NULL); if((err == kNoErr) && (Stream_Info[DEBUG_STREAM]->name != NULL)) err = POVMSUtil_SetString(msg, kPOVAttrib_DebugFile, Stream_Info[DEBUG_STREAM]->name); if((err == kNoErr) && (Stream_Info[FATAL_STREAM]->name != NULL)) err = POVMSUtil_SetString(msg, kPOVAttrib_FatalFile, Stream_Info[FATAL_STREAM]->name); if((err == kNoErr) && (Stream_Info[RENDER_STREAM]->name != NULL)) err = POVMSUtil_SetString(msg, kPOVAttrib_RenderFile, Stream_Info[RENDER_STREAM]->name); if((err == kNoErr) && (Stream_Info[STATISTIC_STREAM]->name != NULL)) err = POVMSUtil_SetString(msg, kPOVAttrib_StatisticsFile, Stream_Info[STATISTIC_STREAM]->name); if((err == kNoErr) && (Stream_Info[WARNING_STREAM]->name != NULL)) err = POVMSUtil_SetString(msg, kPOVAttrib_WarningFile, Stream_Info[WARNING_STREAM]->name); if((err == kNoErr) && (Stream_Info[ALL_STREAM]->name != NULL)) err = POVMSUtil_SetString(msg, kPOVAttrib_AllFile, Stream_Info[ALL_STREAM]->name); */ if(err == kNoErr) err = POVMSUtil_SetInt(msg, kPOVAttrib_Quality, opts.Quality); if(err == kNoErr) err = POVMSUtil_SetBool(msg, kPOVAttrib_Bounding, opts.Use_Slabs); if(err == kNoErr) err = POVMSUtil_SetInt(msg, kPOVAttrib_BoundingThreshold, opts.BBox_Threshold); if(err == kNoErr) err = POVMSUtil_SetBool(msg, kPOVAttrib_LightBuffer, (opts.Options & USE_LIGHT_BUFFER) != 0); if(err == kNoErr) err = POVMSUtil_SetBool(msg, kPOVAttrib_VistaBuffer, (opts.Options & USE_VISTA_BUFFER) != 0); if(err == kNoErr) err = POVMSUtil_SetBool(msg, kPOVAttrib_RemoveBounds, (opts.Options & REMOVE_BOUNDS) != 0); if(err == kNoErr) err = POVMSUtil_SetBool(msg, kPOVAttrib_SplitUnions, (opts.Options & SPLIT_UNION) != 0); if(err == kNoErr) err = POVMSUtil_SetBool(msg, kPOVAttrib_Antialias, (opts.Options & ANTIALIAS) != 0); if(err == kNoErr) err = POVMSUtil_SetInt(msg, kPOVAttrib_SamplingMethod, opts.Tracing_Method); if(err == kNoErr) err = POVMSUtil_SetFloat(msg, kPOVAttrib_AntialiasThreshold, opts.Antialias_Threshold); if(err == kNoErr) err = POVMSUtil_SetInt(msg, kPOVAttrib_AntialiasDepth, opts.AntialiasDepth); if(err == kNoErr) err = POVMSUtil_SetBool(msg, kPOVAttrib_Jitter, (opts.Options & JITTER) != 0); if(err == kNoErr) err = POVMSUtil_SetFloat(msg, kPOVAttrib_JitterAmount, opts.JitterScale); if(err == kNoErr) err = POVMSUtil_SetString(msg, kPOVAttrib_IncludeHeader, opts.Header_File_Name); return err; }