Blob Blame Raw


#include "tasks.h"
#include "tconvert.h"
#include "casmfileinfo.h"
#include "util.h"
#include "texception.h"
#include "tsystem.h"

#define DDR_OUTPUTSCRIPT_FILENAME "D@D@R"

//==============================================================================

string SubmitPageTask::getFilePath()
{
	return m_filePath;
}

//------------------------------------------------------------------------------

void SubmitPageTask::setFilePath(const string &filePath)
{
	m_filePath = filePath;
}

//------------------------------------------------------------------------------

string SubmitPageTask::getName()
{
	return m_name;
}

//------------------------------------------------------------------------------

void SubmitPageTask::setName(const string &name)
{
	m_name = name;
}

//------------------------------------------------------------------------------

map<string, string> SubmitPageTask::getDependencies()
{
	return m_depTasks;
}

//------------------------------------------------------------------------------

void SubmitPageTask::setDependencies(const map<string, string> &tasks)
{
	m_depTasks = tasks;
}

//------------------------------------------------------------------------------

void SubmitPageTask::checkNameUnc()
{
	if (m_filePath == "")
		return;

	TFilePath fp(m_filePath);
	string uncString = "";
	try {
		uncString = convertToUncString(fp);
	} catch (TException &) {
		if (!TFileStatus(fp).doesExist()) {
			string msg = toString(fp.getWideString()) + "\n";
			msg += "File not found\n";
			msg += "Please verify that the path is correct";
			throw TException(msg);
		}
	}
}

//==============================================================================

CasmTask2::CasmTask2()
{
	setDefaultValue();
}

//------------------------------------------------------------------------------

CasmTask2::CasmTask2(const string &s, const string &setupFilePath)
	: m_setupFile(setupFilePath)
{
	setCommandLine(s);
}

//------------------------------------------------------------------------------

void CasmTask2::setDefaultValue()
{
	m_taskChunksize = 1;
	m_start = 0;
	m_end = 9999;
	m_step = 1;
	m_filePath = "";
	m_name = "";
	m_outname = "";
	m_firstFrame = 0;
	m_lastFrame = 0;
	m_reduction = 1;
	m_moveType = M_BG_FRACMOVE;
	m_prec = 32;
	m_renderTile = 1.;
	m_memChunk = 4.;
	m_multimedia = false;
	m_logfile = false;
	m_cf = false;
	m_restype = RES_TYPE_STANDARD;
	m_noOverwrite = false;
	m_clap = false;
	m_mprocess = false;
	m_numColumn = -1;
	m_lineart = -1;
	m_edgeAliasing = -1;
	m_gamma = -1.;
	m_bcScript = "";
	m_acScript = "";
	m_outputScript = "";
	m_outputScriptArgument = "";
	m_setupFile = "";
	xsize = 0;
	ysize = 0;
}

//------------------------------------------------------------------------------

void CasmTask2::setFileArg(const string &fp)
{
	TFilePath filePath = TFilePath(fp);
	CasmFileInfo casmFileInfo(filePath);
	int start, end;
	bool interlaced;
	casmFileInfo.getFrameRange(start, end, interlaced);

	m_filePath = fp;
	m_start = start;
	m_end = end;
	m_step = 1;

	setName(TFilePath(fp).getName());
}

//------------------------------------------------------------------------------

string CasmTask2::getCommandLine() const
{
	string qualifiers, prgname, dirname, biname;

	if (m_reduction != 1)
		qualifiers += " -shrink " + toString(m_reduction) + " ";

	if (m_moveType != moveType::M_BG_FRACMOVE)
		qualifiers += (m_moveType == moveType::M_FRACMOVE) ? " -fracmove " : " -intmove ";
	if (m_prec == 64)
		qualifiers += " -64bit";
	else
		qualifiers += " -32bit";

	qualifiers += " -tile " + toString(m_renderTile) + " ";

	qualifiers += " -mem " + toString(m_memChunk) + " ";

	if (m_multimedia) {
		if (m_numColumn < 0)
			qualifiers += " -mm ";
		else
			qualifiers += " -mmsingle " + toString(m_numColumn) + " ";
	}

	if (m_logfile)
		qualifiers += " -logfile +output/casm_batches.log ";

	if (m_lineart > -1)
		qualifiers += " -lineart " + toString(m_lineart) + " ";
	if (m_edgeAliasing > -1)
		qualifiers += " -edgealiasing " + toString(m_edgeAliasing) + " ";
	if (m_gamma > -1.0)
		qualifiers += " -gamma " + toString(m_gamma) + " ";

	switch (m_restype) {
		CASE RES_TYPE_STANDARD : qualifiers += " -sq ";
		CASE RES_TYPE_IMPROVED : qualifiers += " -iq ";
		CASE RES_TYPE_HIGH : qualifiers += " -hq ";
	}

	if (m_cf)
		qualifiers += " -cf ";

	if (m_noOverwrite)
		qualifiers += " -no_overwrite ";

	if (m_clap)
		qualifiers += " -clap ";

	if (m_bcScript != "")
		qualifiers += " -bc " + m_bcScript + " ";

	if (m_acScript != "" && m_outputScript == "")
		qualifiers += " -ac " + m_acScript + " ";

	if (m_outputScript != "") {
		bool outputToDdr = (m_outputScript ==
							DDR_OUTPUTSCRIPT_FILENAME);

		if (!outputToDdr)
			qualifiers += " -ac " + m_outputScript + " ";
		if (m_outputScriptArgument != "") {
			string entry_point = m_outputScriptArgument;
			string parity = "odd";
			int i;
			i = entry_point.size();
			if (i > 0 && entry_point[i - 1] == '+') {
				parity = "even";
				entry_point[i - 1] = '\0';
			}
			//convert_timecode_to_frame (entry_point);//??????
			if (outputToDdr)
				qualifiers += " -ddr " + entry_point + " ";
			else {
				string app;
#ifdef WIN32
				app = " -ac_args \"$filename $count " + entry_point;
				app += " " + parity;
				app += " $total\" ";
				qualifiers += app;
#else
				app = " -ac_args '$filename $count " + entry_point;
				app += " " + parity;
				app += " $total' ";
				qualifiers += " app;
#endif
			}
		} else {
			if (outputToDdr)
				qualifiers += " -ddr " + toString(0) + " ";
			else
#ifdef WIN32
				qualifiers += " -ac_args \"$filename $count $total\" ";
#else
				qualifiers += " -ac_args '$filename $count $total' ";
#endif
		}
	}

	qualifiers += "  -step " + toString(m_step);

	if (m_start > m_firstFrame || m_end < m_lastFrame)
		qualifiers += " -range " + toString(m_start) + " " + toString(m_end) + " ";

	//qualifiers += " -chunk "+toString(m_taskChunksize)+" ";

	return qualifiers;
}

//------------------------------------------------------------------------------

static bool is_num(string word)
{
	string::iterator it = word.begin();
	while (it != word.end()) {
		if ((*it < '0' || *it > '9') && *it != '.')
			return false;
		it++;
	}
	return true;
}

//------------------------------------------------------------------------------

static string cpy_word(string &word, string s)
{
	/* salto gli spazi bianchi iniziali */
	string::iterator it = s.begin();
	word = "";
	string::iterator it2 = word.begin();
	while (s[0] == ' ' || s[0] == '\t')
		it++;
	if (s[0] == '\'' || s[0] == '\"') {
		/* argomento fra virgolette */
		char quote = *it++;
		while (*it && *it != '\n') {
			if (*it == '\\') {
				it++;
				if (*it == '\0' || *it == '\n')
					break;
				switch (*it) {
					CASE '\\' : *it2++ = '\\';
				DEFAULT:
					*it2++ = *it;
				}
				it++;
			} else if (*it == quote) {
				it++;
				break;
			} else
				*it2++ = *it++;
		}
	} else {
		/* argomento senza virgolette */
		while (*it && *it != ' ' && *it != '\t' && *it != '\n')
			*it2++ = *it++;
	}
	//*word = '\0';

	/* salto gli spazi bianchi finali */
	while (*it == ' ' || *it == '\t')
		it++;
	return s.erase(s.begin(), it);
}

//------------------------------------------------------------------------------

void CasmTask2::setCommandLine(const string &cmdLine)
{
	if (cmdLine.empty())
		return;

	setDefaultValue();
	string s = cmdLine;
	string::iterator it = s.begin();
	string word;
	while (it != s.end()) {
		s = cpy_word(word, s);

		if (word == "-64bit")
			m_prec = 64;
		else if (word == "-32bit")
			m_prec = 32;
		else if (word == "-sq")
			m_restype = RES_TYPE_STANDARD;
		else if (word == "-iq")
			m_restype = RES_TYPE_IMPROVED;
		else if (word == "-hq")
			m_restype = RES_TYPE_HIGH;
		else if (word == "-step") {
			s = cpy_word(word, s);
			if (is_num(word))
				m_step = atoi(word.c_str());
		} else if (word == "-range") {
			s = cpy_word(word, s);
			if (is_num(word))
				m_start = atoi(word.c_str());
			s = cpy_word(word, s);
			if (is_num(word))
				m_end = atoi(word.c_str());
		} else if (word == "-shrink") {
			s = cpy_word(word, s);
			if (is_num(word))
				m_reduction = atoi(word.c_str());
		} else if (word == "-fracmove") {
			m_moveType = M_FRACMOVE;
		} else if (word == "-intmove") {
			m_moveType = M_INTMOVE;
		}
		/*     else
     if (STR_EQ(word, "-64bit"))
        task->prec = 64;
     else 
     if (STR_EQ(word, "-32bit"))
        task->prec = 32;*/
		else if (word == "-tile") {
			s = cpy_word(word, s);
			if (is_num(word))
				m_renderTile = atof(word.c_str());
		} else if (word == "-mem") {
			s = cpy_word(word, s);
			if (is_num(word))
				m_taskChunksize = atoi(word.c_str());
		} else if (word == "-chunk") {
			s = cpy_word(word, s);
			if (is_num(word))
				m_memChunk = atof(word.c_str());
		} else if (word == "-mm") {
			m_multimedia = true;
			m_numColumn = -1;
		} else if (word == "-mmsingle") {
			m_multimedia = true;
			s = cpy_word(word, s);
			if (is_num(word))
				m_numColumn = atoi(word.c_str());
		} else if (word == "-lineart") {
			s = cpy_word(word, s);
			if (is_num(word))
				m_lineart = atoi(word.c_str());
		} else if (word == "-edgealiasing") {
			s = cpy_word(word, s);
			if (is_num(word))
				m_edgeAliasing = atoi(word.c_str());
		} else if (word == "-gamma") {
			s = cpy_word(word, s);
			if (is_num(word))
				m_gamma = atof(word.c_str());
		} else if (word == "-cf") {
			m_cf = true;
		} else if (word == "-no_overwrite") {
			m_noOverwrite = true;
		} else if (word == "-clap") {
			m_clap = true;
		} else if (word == "-bc") {
			s = cpy_word(word, s);
			m_bcScript = word;
		} else if (word == "-ac") {
			s = cpy_word(word, s);
			m_outputScript = word;
		} else if (word == "-ac_args") { /*
       char output_script_argument[1024];
       s = cpy_word(word, s);
       if(parse_ac_args(output_script_argument, word))
         task->output_script_argument = strsave(output_script_argument);*/
		} else if (word == "-logfile") {
			s = cpy_word(word, s);
			m_logfile = true;
		}
		/*     else
     if (!word.compare("-range"))
      {
	s = cpy_word(word, s);
        if (is_num(word))
	   task->start = atoi(word);
	else
         {
           delete_job((TASK *)task);
           return NULL;
         }
       s = cpy_word(word, s);
       if (is_num(word))
          task->end = atoi(word);
       else
        {
          delete_job((TASK *)task);
          return NULL;
        }
      }*/
		/*     else
     if (*word!='\n' && *word!='\0')
      {
        t = tim_get_type(word);
        if (*t == '.') t++;
        if (FILESTR_NE(t, "casm")) 
         {
           delete_job((TASK *)task);
//           return NULL;
         }
        else
         {
	   TCALLOC(task->casm_file, strlen(word)+1);
	   strcpy(task->casm_file, word);
	   compute_casm_range(task->casm_file, &(task->first_frame), &(task->last_frame), &dummy); 
	   if (task->start<task->first_frame) 
	      task->start=task->first_frame;
	   if (task->end>task->last_frame) 
	      task->end=task->last_frame;
           task->xsize = task->ysize = 0;
           casm_camera_size(task->casm_file, &task->xsize, &task->ysize);
  

         }
      }*/
		it = s.begin();
	}
}

//------------------------------------------------------------------------------

void CasmTask2::checkNameUnc()
{
	SubmitPageTask::checkNameUnc();
	if (m_setupFile == "")
		return;

	TFilePath fp(m_setupFile);
	string uncString = "";
	try {
		uncString = convertToUncString(fp);
	} catch (TException &) {
		if (!TFileStatus(fp).doesExist()) {
			string msg = toString(fp.getWideString()) + "\n";
			msg += "File not found\n";
			msg += "Please verify that the path is correct";
			throw TException(msg);
		}
	}
}

//==============================================================================

ScriptTask::ScriptTask()
{
	setDefaultValue();
}

//------------------------------------------------------------------------------

ScriptTask::ScriptTask(const string &s, const string &setupFilePath)
	: m_setupFile(setupFilePath)
{
	setCommandLine(s);
}

//------------------------------------------------------------------------------

void ScriptTask::setFileArg(const string &fp)
{
	m_filePath = fp;
	m_name = TFilePath(fp).getName();
}

//------------------------------------------------------------------------------

string ScriptTask::getCommandLine() const
{
	string cmdLine;
	if (m_filePath == "") {
		assert(false);
		return "";
	}
#ifdef WIN32
	/*
  if (is_fg)
    cmdLine = m_filePath;
  else
  */
	//viene sempre fatto girare in background
	cmdLine = "CALL " + m_filePath + " ";
#else
	cmdLine = m_filePath;
#endif
	cmdLine += "   ";

	if (m_arg1 != "")
		cmdLine += m_arg1 + "   ";
	if (m_arg2 != "")
		cmdLine += m_arg2 + "   ";
	if (m_arg3 != "")
		cmdLine += m_arg3 + "   ";
	if (m_arg4 != "")
		cmdLine += m_arg4 + "   ";
	if (m_arg5 != "")
		cmdLine += m_arg5 + "   ";
	return cmdLine;
}

//------------------------------------------------------------------------------

void ScriptTask::setCommandLine(const string &cmdLine)
{
	setDefaultValue();
	string s = cmdLine;
	string word;
	if (s == "") {
		s = cpy_word(word, s);
		//if (word == "")
		m_arg1 = word;
		//else
		//m_arg1 = "";
	}
	if (s == "") {
		s = cpy_word(word, s);
		//if (word == "")
		m_arg2 = word;
	}
	if (s == "") {
		s = cpy_word(word, s);
		//if (word == "")
		m_arg3 = word;
	}
	if (s == "") {
		s = cpy_word(word, s);
		//if (word == "")
		m_arg4 = word;
	}
	if (s == "") {
		s = cpy_word(word, s);
		//if (word == "")
		m_arg5 = word;
	}
}

//------------------------------------------------------------------------------

void ScriptTask::setDefaultValue()
{
	m_name = "";
	m_filePath = "";
	m_setupFile = "";
	m_arg1 = "";
	m_arg2 = "";
	m_arg3 = "";
	m_arg4 = "";
	m_arg5 = "";
}

//------------------------------------------------------------------------------

void ScriptTask::checkNameUnc()
{
	SubmitPageTask::checkNameUnc();
	if (m_arg1 == "")
		return;

	TFilePath fp(m_arg1);
	string uncString = "";
	try {
		uncString = convertToUncString(fp);
	} catch (TException &) {
		if (!TFileStatus(fp).doesExist()) {
			string msg = toString(fp.getWideString()) + "\n";
			msg += "File not found\n";
			msg += "Please verify that the path is correct";
			throw TException(msg);
		}
	}
}