int add_multiple_option(unsigned char *optionptr, unsigned char code, char datalength, char *data1, char *data2, char *data3) { endOption(&optionptr); optionptr[0] = code; if(code == 0xff) return 0; optionptr++; optionptr[0] = datalength; optionptr++; if(data1 != NULL) { memcpy(optionptr, data1, 0x04); optionptr += 0x04; if(data2 != NULL) { memcpy(optionptr, data2, 0x04); optionptr += 0x04; if(data3 != NULL) { memcpy(optionptr, data3, 0x04); optionptr += 0x04; } } } optionptr[0] = 0xff; return 0; }
/* add new option data to the options field terminating * with an 0xff */ int addOption(unsigned char *optionptr, unsigned char code, char datalength, char *data) { endOption(&optionptr); optionptr[0] = code; if(code == 0xff) return 0; optionptr++; optionptr[0] = datalength; optionptr++; memcpy(optionptr, data, datalength); optionptr += datalength; optionptr[0] = 0xff; return 0; }
int addOptionMulti(unsigned char *optionptr, unsigned char code, char datalength, char *data,int mul) { int i; endOption(&optionptr); optionptr[0] = code; if(code == 0xff) return 0; optionptr++; optionptr[0] = (datalength * mul); optionptr++; for (i=0;i<mul;i++) { memcpy(optionptr, data, datalength); optionptr += datalength; } optionptr[0] = 0xff; return 0; }
cCommandLineInterface::cCommandLineInterface(QCoreApplication *qapplication) { // text from http://sourceforge.net/projects/mandelbulber/ parser.setApplicationDescription("Mandelbulber is an easy to use, " "handy application designed to help you render 3D Mandelbrot fractals called Mandelbulb " "and some other kind of 3D fractals like Mandelbox, Bulbbox, Juliabulb, Menger Sponge"); parser.addHelpOption(); parser.addVersionOption(); QCommandLineOption noguiOption(QStringList() << "n" << "nogui", QCoreApplication::translate("main", "Start program without GUI.")); QCommandLineOption keyframeOption(QStringList() << "K" << "keyframe", QCoreApplication::translate("main", "Render keyframe animation")); QCommandLineOption flightOption(QStringList() << "F" << "flight", QCoreApplication::translate("main", "Render flight animation")); QCommandLineOption startOption(QStringList() << "s" << "start", QCoreApplication::translate("main", "Start rendering from frame number <N>."), QCoreApplication::translate("main", "N")); QCommandLineOption endOption(QStringList() << "e" << "end", QCoreApplication::translate("main", "Stop rendering on frame number <N>."), QCoreApplication::translate("main", "N")); QCommandLineOption overrideOption(QStringList() << "O" << "override", QCoreApplication::translate("main", "Override item '<KEY>' from settings file with new value '<value>'.\n" "Specify multiple KEY=VALUE pairs by separating with a '#' (KEY1=VALUE1#KEY2=VALUE2). Quote whole expression to avoid whitespace parsing issues\n" "Override fractal parameter in the form 'fractal<N>_KEY=VALUE' with <N> as index of fractal"), QCoreApplication::translate("main", "KEY=VALUE")); QCommandLineOption listOption(QStringList() << "L" << "list", QCoreApplication::translate("main", "List all possible parameters '<KEY>' with corresponding default value '<value>'.")); QCommandLineOption formatOption(QStringList() << "f" << "format", QCoreApplication::translate("main", "Image output format:\n" "jpg - JPEG format\n" "png - PNG format\n" "png16 - 16-bit PNG format\n" "png16alpha - 16-bit PNG with alpha channel format\n" "exr - EXR format"), QCoreApplication::translate("main", "FORMAT")); QCommandLineOption resOption(QStringList() << "r" << "res", QCoreApplication::translate("main", "Override image resolution."), QCoreApplication::translate("main", "WIDTHxHEIGHT")); QCommandLineOption fpkOption("fpk", QCoreApplication::translate("main", "Override frames per key parameter."), QCoreApplication::translate("main", "N")); QCommandLineOption serverOption(QStringList() << "S" << "server", QCoreApplication::translate("main", "Set application as a server listening for clients.")); QCommandLineOption hostOption(QStringList() << "H" << "host", QCoreApplication::translate("main", "Set application as a client connected to server of given Host address" " (Host can be of type IPv4, IPv6 and Domain name address)."), QCoreApplication::translate("main", "N.N.N.N")); QCommandLineOption portOption(QStringList() << "p" << "port", QCoreApplication::translate("main", "Set network port number for Netrender (default 5555)."), QCoreApplication::translate("main", "N")); QCommandLineOption noColorOption(QStringList() << "C" << "no-cli-color", QCoreApplication::translate("main", "Start program without ANSI colors, when execution on CLI.")); QCommandLineOption outputOption(QStringList() << "o" << "output", QCoreApplication::translate("main", "Save rendered image(s) to this file / folder."), QCoreApplication::translate("main", "N")); QCommandLineOption queueOption(QStringList() << "q" << "queue", QCoreApplication::translate("main", "Render all images from common queue.")); QCommandLineOption statsOption(QStringList() << "stats", QCoreApplication::translate("main", "Show statistics while renderering in CLI mode.")); QCommandLineOption helpInputOption(QStringList() << "help-input", QCoreApplication::translate("main", "Show help about input.")); parser.addPositionalArgument("settings_file", QCoreApplication::translate("main", "file with fractal settings (program also tries\nto find file in ./mandelbulber/settings directory)\n" "When settings_file is put as a command line argument then program will start in noGUI mode" "<settings_file> can also be specified as a list, see all options with --help-input" )); parser.addOption(noguiOption); parser.addOption(outputOption); parser.addOption(keyframeOption); parser.addOption(flightOption); parser.addOption(startOption); parser.addOption(endOption); parser.addOption(overrideOption); parser.addOption(listOption); parser.addOption(formatOption); parser.addOption(resOption); parser.addOption(fpkOption); parser.addOption(serverOption); parser.addOption(hostOption); parser.addOption(portOption); parser.addOption(noColorOption); parser.addOption(queueOption); parser.addOption(statsOption); parser.addOption(helpInputOption); // Process the actual command line arguments given by the user parser.process(*qapplication); args = parser.positionalArguments(); cliData.nogui = parser.isSet(noguiOption); cliData.keyframe = parser.isSet(keyframeOption); cliData.flight = parser.isSet(flightOption); cliData.startFrameText = parser.value(startOption); cliData.endFrameText = parser.value(endOption); cliData.overrideParametersText = parser.value(overrideOption); cliData.imageFileFormat = parser.value(formatOption); cliData.resolution = parser.value(resOption); cliData.fpkText = parser.value(fpkOption); cliData.server = parser.isSet(serverOption); cliData.host = parser.value(hostOption); cliData.portText = parser.value(portOption); cliData.outputText = parser.value(outputOption); cliData.listParameters = parser.isSet(listOption); cliData.queue = parser.isSet(queueOption); cliData.showInputHelp = parser.isSet(helpInputOption); systemData.statsOnCLI = parser.isSet(statsOption); #ifdef WIN32 /* WINDOWS */ systemData.useColor = false; #else systemData.useColor = !parser.isSet(noColorOption); #endif /* WINDOWS */ if(cliData.listParameters) cliData.nogui = true; if(cliData.queue) cliData.nogui = true; cliTODO = modeBootOnly; }