SHELLRET pov_shellout (SHELLTYPE Type) { char real_command[POV_MAX_CMD_LENGTH]; int i, j, l = 0; int length; SHELLRET Return_Code; char *s = NULL; char *template_command; if ( opts.Shellouts == NULL ) return(IGNORE_RET); template_command=opts.Shellouts[Type].Command; if ((length = strlen(template_command)) == 0) { return(IGNORE_RET); } switch(Type) { case PRE_SCENE_SHL: s="pre-scene"; break; case PRE_FRAME_SHL: s="pre-frame"; break; case POST_FRAME_SHL: s="post-frame"; break; case POST_SCENE_SHL: s="post-scene"; break; case USER_ABORT_SHL: s="user about"; break; case FATAL_SHL: s="fatal error"; break; case MAX_SHL: /* To remove warnings*/ break; } Send_Progress(pov_tsprintf("Performing %s shell-out command", s), PROGRESS_PERFORMING_SHELLOUT_COMMAND); /* First, find the real command */ for (i = 0, j = 0; i < length; ) { if (template_command[i] == '%') { switch (toupper(template_command[i+1])) { case 'O': strncpy(&real_command[j], opts.Output_Numbered_Name, (unsigned)(l=strlen(opts.Output_Numbered_Name))); break; case 'P': strncpy(&real_command[j], opts.Output_Path,(unsigned)(l=strlen(opts.Output_Path))); break; case 'S': strncpy(&real_command[j], opts.Scene_Name, (unsigned)(l=strlen(opts.Scene_Name))); break; case 'N': sprintf(&real_command[j],"%d",opts.FrameSeq.FrameNumber); l = strlen(&real_command[j]); break; case 'K': sprintf(&real_command[j],"%f",opts.FrameSeq.Clock_Value); l = strlen(&real_command[j]); break; case 'H': sprintf(&real_command[j],"%d",Frame.Screen_Height); l = strlen(&real_command[j]); break; case 'W': sprintf(&real_command[j],"%d",Frame.Screen_Width); l = strlen(&real_command[j]); break; case '%': real_command[j]='%'; l=1; break; } j+=l; i+=2; /* we used 2 characters of template_command */ } else { real_command[j++]=template_command[i++]; } } real_command[j]='\0'; Return_Code=(POV_SHELLOUT_CAST)POV_SYSTEM(real_command); if (opts.Shellouts[Type].Inverse) { Return_Code=(POV_SHELLOUT_CAST)(!((int)Return_Code)); } if (Return_Code) { if (Type < USER_ABORT_SHL) { switch(opts.Shellouts[Type].Ret) { case FATAL_RET: Error("Fatal error returned from shellout command."); break; case USER_RET: Check_User_Abort(true); /* the true forces user abort */ break; case QUIT_RET: povray_exit(0); break; case IGNORE_RET: case SKIP_ONCE_RET: case ALL_SKIP_RET: /* Added to remove warnings */ break; } } return(opts.Shellouts[Type].Ret); } return(IGNORE_RET); }
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); }