コード例 #1
0
ファイル: exfat_fat.c プロジェクト: jvesely/helenos
/** Read block from file located on a exFAT file system.
 *
 * @param block		Pointer to a block pointer for storing result.
 * @param bs		Buffer holding the boot sector of the file system.
 * @param service_id	Service ID of the file system.
 * @param fcl		First cluster used by the file. Can be zero if the file
 *			is empty.
 * @param clp		If not NULL, address where the cluster containing bn
 *			will be stored.
 *			stored
 * @param bn		Block number.
 * @param flags		Flags passed to libblock.
 *
 * @return		EOK on success or a negative error code.
 */
int
exfat_block_get_by_clst(block_t **block, exfat_bs_t *bs, 
    service_id_t service_id, bool fragmented, exfat_cluster_t fcl,
    exfat_cluster_t *clp, aoff64_t bn, int flags)
{
	uint32_t clusters;
	uint32_t max_clusters;
	exfat_cluster_t c;
	int rc;

	if (fcl < EXFAT_CLST_FIRST || fcl > DATA_CNT(bs) + 2)
		return ELIMIT;

	if (!fragmented) {
		rc = block_get(block, service_id, DATA_FS(bs) + 
		    (fcl - EXFAT_CLST_FIRST)*SPC(bs) + bn, flags);
	} else {
		max_clusters = bn / SPC(bs);
		rc = exfat_cluster_walk(bs, service_id, fcl, &c, &clusters, max_clusters);
		if (rc != EOK)
			return rc;
		assert(clusters == max_clusters);

		rc = block_get(block, service_id, DATA_FS(bs) + 
		    (c - EXFAT_CLST_FIRST) * SPC(bs) + (bn % SPC(bs)), flags);

		if (clp)
			*clp = c;
	}

	return rc;
}
コード例 #2
0
ファイル: filesystems.cpp プロジェクト: alhunor/projects
fileData::fileData(WIN32_FIND_DATAA& fd, const char* _path)
{
	dwFileAttributes = fd.dwFileAttributes;
	ftCreationTime = fd.ftCreationTime;
	ftLastAccessTime = fd.ftLastAccessTime;
	ftLastWriteTime = fd.ftLastWriteTime;
	fileSize = (((ULONGLONG)fd.nFileSizeHigh) << 32) + fd.nFileSizeLow;
	cFileName = SPC(cc(fd.cFileName));
	path = SPC(cc(_path));
	FileTimetoString(fd.ftCreationTime, creationTime);
}
コード例 #3
0
int maildir_search_start_str_chset(struct maildir_searchengine *engine,
				   const char *string,
				   const char *chset)
{
#define SPC(s) ((s) == ' '|| (s) == '\t' || (s) == '\r' || (s) == '\n')

	unicode_char *ucptr;
	size_t ucsize;
	unicode_convert_handle_t h=unicode_convert_tou_init(chset, &ucptr,
								&ucsize, 1);
	size_t i, j;
	int rc;

	if (h == NULL)
		return -1;

	if (unicode_convert(h, string, strlen(string)))
	{
		unicode_convert_deinit(h, NULL);
		return -1;
	}

	if (unicode_convert_deinit(h, NULL))
		return -1;

	for (i=j=0; ucptr[i]; )
	{
		while (SPC(ucptr[i]))
			++i;

		if (!ucptr[i])
			break;

		while (ucptr[i])
		{
			ucptr[j]=unicode_lc(ucptr[i]);
			++j;
			if (SPC(ucptr[i]))
				break;

			++i;
		}
	}

	while (j > 0 && SPC(ucptr[j-1]))
		--j;
	ucptr[j]=0;

	rc=maildir_search_start_unicode(engine, ucptr);
	free(ucptr);
	return rc;
}
コード例 #4
0
void Expression2PresentationMMLUnits::writeMathMLBox(std::ostream & out, const std::string & a, const std::string & b,
    const std::string & color, unsigned int l) const
{
  out << SPC(l) << "<mstyle background=\"" << color << "\"><mfrac linethickness=\"0\">" << std::endl;
  out << a;
  out << SPC(l + 1) << "<mstyle scriptlevel=\"+1\">" << std::endl;
  out << SPC(l + 2) << b << std::endl;
  out << SPC(l + 1) << "</mstyle>" << std::endl;
  out << SPC(l) << "</mfrac></mstyle>" << std::endl;

  //formating is done so that it looks best when a is already indented nicely while b
  //is just a one line string
}
コード例 #5
0
ファイル: CFunction.cpp プロジェクト: nabel/copasi-simple-api
void CFunction::writeMathML(std::ostream & out,
                            const std::vector<std::vector<std::string> > & env,
                            bool expand, bool fullExpand,
                            unsigned C_INT32 l) const
{
  if (expand && mpRoot)
    {
      bool flag = false; //TODO include check if parantheses are necessary

      if (flag) out << SPC(l) << "<mfenced>" << std::endl;

      mpRoot->writeMathML(out, env, fullExpand, l + 1);

      if (flag) out << SPC(l) << "</mfenced>" << std::endl;
    }
  else //no expand
    {
      out << SPC(l) << "<mrow>" << std::endl;
      out << SPC(l + 1) << CMathMl::fixName(getObjectName()) << std::endl;
      out << SPC(l + 1) << "<mfenced>" << std::endl;

      unsigned C_INT32 i, imax = getVariables().size();

      for (i = 0; i < imax; ++i)
        {
          out << SPC(l + 2) << env[i][0] << std::endl;
        }

      out << SPC(l + 1) << "</mfenced>" << std::endl;
      out << SPC(l) << "</mrow>" << std::endl;
    }
}
コード例 #6
0
ファイル: fat_fat.c プロジェクト: fhector/helenOS-0.5-Hector
/** Read block from file located on a FAT file system.
 *
 * @param block		Pointer to a block pointer for storing result.
 * @param bs		Buffer holding the boot sector of the file system.
 * @param nodep		FAT node.
 * @param bn		Block number.
 * @param flags		Flags passed to libblock.
 *
 * @return		EOK on success or a negative error code.
 */
int
fat_block_get(block_t **block, struct fat_bs *bs, fat_node_t *nodep,
    aoff64_t bn, int flags)
{
	fat_cluster_t firstc = nodep->firstc;
	fat_cluster_t currc;
	aoff64_t relbn = bn;
	int rc;

	if (!nodep->size)
		return ELIMIT;

	if (!FAT_IS_FAT32(bs) && nodep->firstc == FAT_CLST_ROOT)
		goto fall_through;

	if (((((nodep->size - 1) / BPS(bs)) / SPC(bs)) == bn / SPC(bs)) &&
	    nodep->lastc_cached_valid) {
	    	/*
		 * This is a request to read a block within the last cluster
		 * when fortunately we have the last cluster number cached.
		 */
		return block_get(block, nodep->idx->service_id,
		    CLBN2PBN(bs, nodep->lastc_cached_value, bn), flags);
	}

	if (nodep->currc_cached_valid && bn >= nodep->currc_cached_bn) {
		/*
		 * We can start with the cluster cached by the previous call to
		 * fat_block_get().
		 */
		firstc = nodep->currc_cached_value;
		relbn -= (nodep->currc_cached_bn / SPC(bs)) * SPC(bs);
	}

fall_through:
	rc = _fat_block_get(block, bs, nodep->idx->service_id, firstc,
	    &currc, relbn, flags);
	if (rc != EOK)
		return rc;

	/*
	 * Update the "current" cluster cache.
	 */
	nodep->currc_cached_valid = true;
	nodep->currc_cached_bn = bn;
	nodep->currc_cached_value = currc;

	return rc;
}
コード例 #7
0
int fat_directory_expand(fat_directory_t *di)
{
	int rc;
	fat_cluster_t mcl, lcl;

	if (!FAT_IS_FAT32(di->bs) && di->nodep->firstc == FAT_CLST_ROOT) {
		/* Can't grow the root directory on FAT12/16. */
		return ENOSPC;
	}
	rc = fat_alloc_clusters(di->bs, di->nodep->idx->service_id, 1, &mcl,
	    &lcl);
	if (rc != EOK)
		return rc;
	rc = fat_zero_cluster(di->bs, di->nodep->idx->service_id, mcl);
	if (rc != EOK) {
		(void) fat_free_clusters(di->bs, di->nodep->idx->service_id,
		    mcl);
		return rc;
	}
	rc = fat_append_clusters(di->bs, di->nodep, mcl, lcl);
	if (rc != EOK) {
		(void) fat_free_clusters(di->bs, di->nodep->idx->service_id,
		    mcl);
		return rc;
	}
	di->nodep->size += BPS(di->bs) * SPC(di->bs);
	di->nodep->dirty = true;		/* need to sync node */
	di->blocks = di->nodep->size / BPS(di->bs);
	
	return EOK;
}
コード例 #8
0
void CEvaluationNodeObject::writeMathML(std::ostream & out,
                                        const std::vector<std::vector<std::string> > & /* env */,
                                        bool /* expand */,
                                        unsigned C_INT32 l) const
{
  out << SPC(l) << CMathMl::getMMLName(mpObject) << std::endl;
}
コード例 #9
0
ファイル: CMMLOutput.cpp プロジェクト: PriKalra/COPASI
void CMMLOutput::writeLHS_ModelValue(std::ostream & out,
                                     const std::string & valueName, size_t l)
{
  out << SPC(l + 0) << "<mfrac>" << std::endl;
  out << SPC(l + 1) << "<mrow>" << std::endl;
  out << SPC(l + 2) << "<mo>d</mo>" << std::endl;
  out << SPC(l + 2) << "<mi>" << CMathMl::fixName(valueName) << "</mi>" << std::endl;
  out << SPC(l + 1) << "</mrow>" << std::endl;
  out << SPC(l + 1) << "<mrow>" << std::endl;
  out << SPC(l + 2) << "<mo>d</mo><mi>t</mi>" << std::endl;
  out << SPC(l + 1) << "</mrow>" << std::endl;
  out << SPC(l + 0) << "</mfrac>" << std::endl;
}
コード例 #10
0
void Expression2PresentationMMLUnits::writeMathMLBox(std::ostream & out, const std::string & a, const std::string & b, const std::string & c,
    const std::string & color, size_t l) const
{
  out << SPC(l) << "<mstyle background=\"" << color << "\"><mtable rowspacing=\"0.1 ex\">" << std::endl;
  out << SPC(l + 1) << "<mtr><mtd>" << std::endl;
  out << a;
  out << SPC(l + 1) << "</mtd></mtr>" << std::endl;
  out << SPC(l + 1) << "<mtr><mtd><mstyle scriptlevel=\"+1\">" << std::endl;
  out << SPC(l + 2) << b << std::endl;
  out << SPC(l + 1) << "</mstyle></mtd></mtr>" << std::endl;
  out << SPC(l + 1) << "<mtr><mtd><mstyle scriptlevel=\"+1\">" << std::endl;
  out << SPC(l + 2) << c << std::endl;
  out << SPC(l + 1) << "</mstyle></mtd></mtr>" << std::endl;
  out << SPC(l) << "</mtable></mstyle>" << std::endl;

  //formating is done so that it looks best when a is already indented nicely while b
  //is just a one line string
}
コード例 #11
0
ファイル: CMMLOutput.cpp プロジェクト: PriKalra/COPASI
void CMMLOutput::writeRHS_ModelEntity(std::ostream & out,
                                      const CModelEntity* pEntity,
                                      bool expandFull, size_t l)
{
  if (!pEntity)
    {
      out << SPC(l + 0) << "Error: invalid model entity" << std::endl;
      return;
    }

  if (!pEntity->getExpressionPtr())
    {
      out << SPC(l + 0) << "Error: no expression" << std::endl;
      return;
    }

  out << SPC(l + 0) << "<mrow>" << std::endl;

  pEntity->getExpressionPtr()->writeMathML(out, expandFull, l + 1);

  out << SPC(l + 0) << "</mrow>" << std::endl;
}
コード例 #12
0
ファイル: CAnnotatedMatrix.cpp プロジェクト: jonasfoe/COPASI
void CArrayAnnotation::printRecursively(std::ostream & ostream, size_t level,
                                        CCopasiAbstractArray::index_type & index,
                                        const std::vector<std::vector<std::string> > & display) const
{
  size_t indent = 2 * (dimensionality() - 1 - level);

  if (level == 0) //only vector
    {
      ostream << SPC(indent) << "Rows: " << getDimensionDescription(level) << "\n";

      size_t imax = size()[0];

      for (index[0] = 0; index[0] < imax; ++index[0])
        ostream << SPC(indent) << display[0][index[0]] << "\t" << (*array())[index] << "\n";
    }
  else if (level == 1) //matrix
    {
      ostream << SPC(indent) << "Rows:    " << getDimensionDescription(level - 1) << "\n";
      ostream << SPC(indent) << "Columns: " << getDimensionDescription(level) << "\n";

      size_t imax = size()[0];
      size_t jmax = size()[1];
      ostream << SPC(indent);

      for (index[1] = 0; index[1] < jmax; ++index[1])
        ostream << "\t" << display[1][index[1]];

      ostream << "\n";

      for (index[0] = 0; index[0] < imax; ++index[0])
        {
          ostream << SPC(indent) << display[0][index[0]];

          for (index[1] = 0; index[1] < jmax; ++index[1])
            ostream << "\t" << (*array())[index];

          ostream << "\n";
        }
    }
  else //dimensionality > 2
    {
      size_t i, imax = size()[level];

      for (i = 0; i < imax; ++i)
        {
          ostream << SPC(indent) << getDimensionDescription(level) << ": " << display[level][i] << "\n";
          index[level] = i;
          printRecursively(ostream, level - 1, index, display);
        }
    }
}
コード例 #13
0
ファイル: fat_fat.c プロジェクト: fhector/helenOS-0.5-Hector
/** Fill the gap between EOF and a new file position.
 *
 * @param bs		Buffer holding the boot sector for nodep.
 * @param nodep		FAT node with the gap.
 * @param mcl		First cluster in an independent cluster chain that will
 *			be later appended to the end of the node's own cluster
 *			chain. If pos is still in the last allocated cluster,
 *			this argument is ignored.
 * @param pos		Position in the last node block.
 *
 * @return		EOK on success or a negative error code.
 */
int
fat_fill_gap(fat_bs_t *bs, fat_node_t *nodep, fat_cluster_t mcl, aoff64_t pos)
{
	block_t *b;
	aoff64_t o, boundary;
	int rc;

	boundary = ROUND_UP(nodep->size, BPS(bs) * SPC(bs));

	/* zero out already allocated space */
	for (o = nodep->size; o < pos && o < boundary;
	    o = ALIGN_DOWN(o + BPS(bs), BPS(bs))) {
	    	int flags = (o % BPS(bs) == 0) ?
		    BLOCK_FLAGS_NOREAD : BLOCK_FLAGS_NONE;
		rc = fat_block_get(&b, bs, nodep, o / BPS(bs), flags);
		if (rc != EOK)
			return rc;
		memset(b->data + o % BPS(bs), 0, BPS(bs) - o % BPS(bs));
		b->dirty = true;		/* need to sync node */
		rc = block_put(b);
		if (rc != EOK)
			return rc;
	}

	if (o >= pos)
		return EOK;

	/* zero out the initial part of the new cluster chain */
	for (o = boundary; o < pos; o += BPS(bs)) {
		rc = _fat_block_get(&b, bs, nodep->idx->service_id, mcl,
		    NULL, (o - boundary) / BPS(bs), BLOCK_FLAGS_NOREAD);
		if (rc != EOK)
			return rc;
		memset(b->data, 0, min(BPS(bs), pos - o));
		b->dirty = true;		/* need to sync node */
		rc = block_put(b);
		if (rc != EOK)
			return rc;
	}

	return EOK;
}
コード例 #14
0
ファイル: exfat_fat.c プロジェクト: jvesely/helenos
/** Read block from file located on a exFAT file system.
 *
 * @param block		Pointer to a block pointer for storing result.
 * @param bs		Buffer holding the boot sector of the file system.
 * @param nodep		FAT node.
 * @param bn		Block number.
 * @param flags		Flags passed to libblock.
 *
 * @return		EOK on success or a negative error code.
 */
int
exfat_block_get(block_t **block, exfat_bs_t *bs, exfat_node_t *nodep,
    aoff64_t bn, int flags)
{
	exfat_cluster_t firstc = nodep->firstc;
	exfat_cluster_t currc = 0;
	aoff64_t relbn = bn;
	int rc;

	if (!nodep->size)
		return ELIMIT;

	if (nodep->fragmented) {
		if (((((nodep->size - 1) / BPS(bs)) / SPC(bs)) == bn / SPC(bs)) &&
		    nodep->lastc_cached_valid) {
			/*
			 * This is a request to read a block within the last cluster
			 * when fortunately we have the last cluster number cached.
			 */
			return block_get(block, nodep->idx->service_id, DATA_FS(bs) + 
		        (nodep->lastc_cached_value-EXFAT_CLST_FIRST)*SPC(bs) + 
			    (bn % SPC(bs)), flags);
		}

		if (nodep->currc_cached_valid && bn >= nodep->currc_cached_bn) {
			/*
			* We can start with the cluster cached by the previous call to
			* fat_block_get().
			*/
			firstc = nodep->currc_cached_value;
			relbn -= (nodep->currc_cached_bn / SPC(bs)) * SPC(bs);
		}
	}

	rc = exfat_block_get_by_clst(block, bs, nodep->idx->service_id,
	    nodep->fragmented, firstc, &currc, relbn, flags);
	if (rc != EOK)
		return rc;

	/*
	 * Update the "current" cluster cache.
	 */
	nodep->currc_cached_valid = true;
	nodep->currc_cached_bn = bn;
	nodep->currc_cached_value = currc;

	return rc;
}
コード例 #15
0
ファイル: exfat_fat.c プロジェクト: jvesely/helenos
int
exfat_zero_cluster(exfat_bs_t *bs, service_id_t service_id, exfat_cluster_t c)
{
	size_t i;
	block_t *b;
	int rc;

	for (i = 0; i < SPC(bs); i++) {
		rc = exfat_block_get_by_clst(&b, bs, service_id, false, c, NULL,
		    i, BLOCK_FLAGS_NOREAD);
		if (rc != EOK)
			return rc;
		memset(b->data, 0, BPS(bs));
		b->dirty = true;
		rc = block_put(b);
		if (rc != EOK)
			return rc;
	}

	return EOK;
}
コード例 #16
0
ファイル: fat_fat.c プロジェクト: fhector/helenOS-0.5-Hector
/** Read block from file located on a FAT file system.
 *
 * @param block		Pointer to a block pointer for storing result.
 * @param bs		Buffer holding the boot sector of the file system.
 * @param service_id	Service ID handle of the file system.
 * @param fcl		First cluster used by the file. Can be zero if the file
 *			is empty.
 * @param clp		If not NULL, address where the cluster containing bn
 *			will be stored.
 *			stored
 * @param bn		Block number.
 * @param flags		Flags passed to libblock.
 *
 * @return		EOK on success or a negative error code.
 */
int
_fat_block_get(block_t **block, fat_bs_t *bs, service_id_t service_id,
    fat_cluster_t fcl, fat_cluster_t *clp, aoff64_t bn, int flags)
{
	uint32_t clusters;
	uint32_t max_clusters;
	fat_cluster_t c;
	int rc;

	/*
	 * This function can only operate on non-zero length files.
	 */
	if (fcl == FAT_CLST_RES0)
		return ELIMIT;

	if (!FAT_IS_FAT32(bs) && fcl == FAT_CLST_ROOT) {
		/* root directory special case */
		assert(bn < RDS(bs));
		rc = block_get(block, service_id,
		    RSCNT(bs) + FATCNT(bs) * SF(bs) + bn, flags);
		return rc;
	}

	max_clusters = bn / SPC(bs);
	rc = fat_cluster_walk(bs, service_id, fcl, &c, &clusters, max_clusters);
	if (rc != EOK)
		return rc;
	assert(clusters == max_clusters);

	rc = block_get(block, service_id, CLBN2PBN(bs, c, bn), flags);

	if (clp)
		*clp = c;

	return rc;
}
コード例 #17
0
ファイル: CFunction.cpp プロジェクト: nabel/copasi-simple-api
void CFunction::writeMathML(std::ostream & out, unsigned C_INT32 l) const
{
  //out << "<math>" << std::endl;

  out << SPC(l) << "<mrow>" << std::endl;
  out << SPC(l + 1) << CMathMl::fixName(getObjectName()) << std::endl;
  out << SPC(l + 1) << "<mfenced>" << std::endl;

  unsigned C_INT32 i, imax = getVariables().size();

  for (i = 0; i < imax; ++i)
    {
      out << SPC(l + 2) << "<mi>" << getVariables()[i]->getObjectName() << "</mi>" << std::endl;
    }

  out << SPC(l + 1) << "</mfenced>" << std::endl;
  out << SPC(l) << "</mrow>" << std::endl;

  //out << "</math>" << std::endl;
}
コード例 #18
0
void CEvaluationNodeLogical::writeMathML(std::ostream & out,
    const std::vector<std::vector<std::string> > & env,
    bool expand,
    unsigned C_INT32 l) const
{
  if (const_cast<CEvaluationNodeLogical *>(this)->compile(NULL))
    {
      std::string data = "";
      bool flag = false;

      switch ((SubType)CEvaluationNode::subType(this->getType()))
        {
          case AND:
            data = " and ";
            break;
          case OR:
            data = " or ";
            break;
          case XOR:
            data = " xor ";
            break;
          case EQ:
            data = "=";
            break;
          case GE:
            data = "&gt;=";
            break;
          case GT:
            data = "&gt;";
            break;
          case LE:
            data = "&lt;=";
            break;
          case LT:
            data = "&lt;";
            break;
          case NE:
            data = "&NotEqual;";
            break;
          default:
            /*
             *
             */
            data = "@";
            break;
        }

      out << SPC(l) << "<mrow>" << std::endl;

      flag = ((*mpLeft < *(CEvaluationNode *)this));

      if (flag) out << SPC(l + 1) << "<mfenced>" << std::endl;

      mpLeft->writeMathML(out, env, expand, l + 1);

      if (flag) out << SPC(l + 1) << "</mfenced>" << std::endl;

      out << SPC(l + 1) << "<mo>" << data << "</mo>" << std::endl;

      flag = ((*(CEvaluationNode *)this < *mpRight));

      if (!flag) out << SPC(l + 1) << "<mfenced>" << std::endl;

      mpRight->writeMathML(out, env, expand, l + 1);

      if (!flag) out << SPC(l + 1) << "</mfenced>" << std::endl;

      out << SPC(l) << "</mrow>" << std::endl;
    }
}
コード例 #19
0
ファイル: CMMLOutput.cpp プロジェクト: PriKalra/COPASI
void CMMLOutput::writeLHS(std::ostream & out,
                          const std::string & metabName,
                          const std::string & compName, size_t l)
{
  out << SPC(l + 0) << "<mfrac>" << std::endl;
  out << SPC(l + 1) << "<mrow>" << std::endl;
  out << SPC(l + 2) << "<mo>d</mo>" << std::endl;
  out << SPC(l + 2) << "<mfenced>" << std::endl;
  out << SPC(l + 3) << "<mrow>" << std::endl;
  //out << SPC(l + 4) << "<mi>" << CMathMl::fixName(metabName) << "</mi>" << std::endl;
  out << SPC(l + 4) << "<mi>[" << CMathMl::fixName(metabName) << "]</mi>" << std::endl;
  out << SPC(l + 4) << "<mo>" << "&CenterDot;" << "</mo>" << std::endl;
  out << SPC(l + 4) << "<msub><mi>V</mi><mi>" << CMathMl::fixName(compName) << "</mi></msub>" << std::endl;

  out << SPC(l + 3) << "</mrow>" << std::endl;

  out << SPC(l + 2) << "</mfenced>" << std::endl;
  out << SPC(l + 1) << "</mrow>" << std::endl;
  out << SPC(l + 1) << "<mrow>" << std::endl;
  out << SPC(l + 2) << "<mo>d</mo><mi>t</mi>" << std::endl;
  out << SPC(l + 1) << "</mrow>" << std::endl;
  out << SPC(l + 0) << "</mfrac>" << std::endl;
}
コード例 #20
0
ファイル: CMMLOutput.cpp プロジェクト: PriKalra/COPASI
void CMMLOutput::writeDifferentialEquations(std::ostream & mml, CModel * model, bool localParameterNumbers, bool expand, bool expandFull)
{
  bool hasContents = false;
  //mml.str("");

  size_t l = 0;
  mml << SPC(l) << "<mtable>" << std::endl;

  //write equations for compartments
  size_t i, imax = model->getCompartments().size();

  for (i = 0; i < imax; i++)
    {
      if (model->getCompartments()[i]->getStatus() == CModelEntity::ODE)
        {
          mml << SPC(l + 1) << "<mtr>" << std::endl;

          //first column (lhs)
          mml << SPC(l + 2) << "<mtd>" << std::endl;

          mml << SPC(l + 3) << "<mfrac>" << std::endl;
          mml << SPC(l + 4) << "<mrow>" << std::endl;
          mml << SPC(l + 5) << "<mo>d</mo>" << std::endl;

          mml << SPC(l + 5) << "<msub><mi>V</mi><mi>"
          << CMathMl::fixName(model->getCompartments()[i]->getObjectName())
          << "</mi></msub>" << std::endl;

          mml << SPC(l + 4) << "</mrow>" << std::endl;
          mml << SPC(l + 3) << "<mrow>" << std::endl;
          mml << SPC(l + 2) << "<mo>d</mo><mi>t</mi>" << std::endl;
          mml << SPC(l + 1) << "</mrow>" << std::endl;
          mml << SPC(l + 0) << "</mfrac>" << std::endl;

          mml << SPC(l + 2) << "</mtd>" << std::endl;

          //second column ("=")
          mml << SPC(l + 2) << "<mtd>" << std::endl;
          mml << SPC(l + 3) << "<mo>=</mo>" << std::endl;
          mml << SPC(l + 2) << "</mtd>" << std::endl;

          //third column (rhs)
          mml << SPC(l + 2) << "<mtd columnalign='left'>" << std::endl;

          writeRHS_ModelEntity(mml, model->getCompartments()[i],
                               expandFull, l + 3);
          mml << SPC(l + 2) << "</mtd>" << std::endl;

          mml << SPC(l + 1) << "</mtr>" << std::endl;
        }
      else if (model->getCompartments()[i]->getStatus() == CModelEntity::ASSIGNMENT)
        {
          mml << SPC(l + 1) << "<mtr>" << std::endl;

          //first column (lhs)
          mml << SPC(l + 2) << "<mtd>" << std::endl;
          mml << SPC(l + 3) << "<msub><mi>V</mi><mi>"
          << CMathMl::fixName(model->getCompartments()[i]->getObjectName())
          << "</mi></msub>" << std::endl;
          mml << SPC(l + 2) << "</mtd>" << std::endl;

          //second column ("=")
          mml << SPC(l + 2) << "<mtd>" << std::endl;
          mml << SPC(l + 3) << "<mo>=</mo>" << std::endl;
          mml << SPC(l + 2) << "</mtd>" << std::endl;

          //third column (rhs)
          mml << SPC(l + 2) << "<mtd columnalign='left'>" << std::endl;
          writeRHS_ModelEntity(mml, model->getCompartments()[i],
                               expandFull, l + 3);
          mml << SPC(l + 2) << "</mtd>" << std::endl;

          mml << SPC(l + 1) << "</mtr>" << std::endl;
        }
    }

  //write equations for metabs
  imax = model->getMetabolites().size();

  for (i = 0; i < imax; i++)
    {
      if (model->getMetabolites()[i]->getStatus() == CModelEntity::REACTIONS)
        {

          std::set<std::string> reacKeys = listReactionsForMetab(model, model->getMetabolites()[i]->getKey());
          std::set<std::string>::const_iterator it, itEnd = reacKeys.end();

          for (it = reacKeys.begin(); it != itEnd; ++it)
            {
              hasContents = true;

              mml << SPC(l + 1) << "<mtr>" << std::endl;

              //first column (lhs)
              mml << SPC(l + 2) << "<mtd>" << std::endl;

              if (it == reacKeys.begin())
                writeLHS(mml, model->getMetabolites()[i]->getObjectDisplayName(),
                         model->getMetabolites()[i]->getCompartment()->getObjectName(), l + 3);

              mml << SPC(l + 2) << "</mtd>" << std::endl;

              //second column ("=")
              mml << SPC(l + 2) << "<mtd>" << std::endl;

              if (it == reacKeys.begin())
                mml << SPC(l + 3) << "<mo>=</mo>" << std::endl;

              mml << SPC(l + 2) << "</mtd>" << std::endl;

              //third column (rhs)
              mml << SPC(l + 2) << "<mtd columnalign='left'>" << std::endl;
              writeRHS(mml, model->getMetabolites()[i],
                       dynamic_cast<CReaction*>(CCopasiRootContainer::getKeyFactory()->get(*it)) ,
                       localParameterNumbers, expand, expandFull, l + 3);
              mml << SPC(l + 2) << "</mtd>" << std::endl;

              mml << SPC(l + 1) << "</mtr>" << std::endl;
            }
        }
      else if (model->getMetabolites()[i]->getStatus() == CModelEntity::ODE)
        {
          mml << SPC(l + 1) << "<mtr>" << std::endl;

          //first column (lhs)
          mml << SPC(l + 2) << "<mtd>" << std::endl;
          writeLHS(mml, model->getMetabolites()[i]->getObjectDisplayName(),
                   model->getMetabolites()[i]->getCompartment()->getObjectName(), l + 3);
          mml << SPC(l + 2) << "</mtd>" << std::endl;

          //second column ("=")
          mml << SPC(l + 2) << "<mtd>" << std::endl;
          mml << SPC(l + 3) << "<mo>=</mo>" << std::endl;
          mml << SPC(l + 2) << "</mtd>" << std::endl;

          //third column (rhs)
          mml << SPC(l + 2) << "<mtd columnalign='left'>" << std::endl;

          std::string compName = model->getMetabolites()[i]->getCompartment()->getObjectName();
          mml << SPC(l + 3) << "<msub><mi>V</mi><mi>" << CMathMl::fixName(compName)
          << "</mi></msub>" << std::endl;
          mml << SPC(l + 3) << "<mo>" << "&CenterDot;" << "</mo>" << std::endl;

          writeRHS_ModelEntity(mml, model->getMetabolites()[i],
                               expandFull, l + 3);
          mml << SPC(l + 2) << "</mtd>" << std::endl;

          mml << SPC(l + 1) << "</mtr>" << std::endl;
        }
      else if (model->getMetabolites()[i]->getStatus() == CModelEntity::ASSIGNMENT)
        {
          mml << SPC(l + 1) << "<mtr>" << std::endl;

          //first column (lhs)
          mml << SPC(l + 2) << "<mtd>" << std::endl;
          mml << SPC(l + 3) << "<mi>" << CMathMl::fixName("[" + model->getMetabolites()[i]->getObjectName() + "]") << "</mi>" << std::endl;
          mml << SPC(l + 2) << "</mtd>" << std::endl;

          //second column ("=")
          mml << SPC(l + 2) << "<mtd>" << std::endl;
          mml << SPC(l + 3) << "<mo>=</mo>" << std::endl;
          mml << SPC(l + 2) << "</mtd>" << std::endl;

          //third column (rhs)
          mml << SPC(l + 2) << "<mtd columnalign='left'>" << std::endl;
          writeRHS_ModelEntity(mml, model->getMetabolites()[i],
                               expandFull, l + 3);
          mml << SPC(l + 2) << "</mtd>" << std::endl;

          mml << SPC(l + 1) << "</mtr>" << std::endl;
        }
    }

  //write differential equations for model values
  imax = model->getModelValues().size();

  for (i = 0; i < imax; ++i)
    if (model->getModelValues()[i]->getStatus() == CModelEntity::ODE)
      {
        hasContents = true;
        mml << SPC(l + 1) << "<mtr>" << std::endl;

        //first column (lhs)
        mml << SPC(l + 2) << "<mtd columnalign='right'>" << std::endl;
        writeLHS_ModelValue(mml, model->getModelValues()[i]->getObjectName(), l + 3);
        mml << SPC(l + 2) << "</mtd>" << std::endl;

        //second column ("=")
        mml << SPC(l + 2) << "<mtd>" << std::endl;
        mml << SPC(l + 3) << "<mo>=</mo>" << std::endl;
        mml << SPC(l + 2) << "</mtd>" << std::endl;

        //third column (rhs)
        mml << SPC(l + 2) << "<mtd columnalign='left'>" << std::endl;
        writeRHS_ModelEntity(mml, model->getModelValues()[i],
                             expandFull, l + 3);
        mml << SPC(l + 2) << "</mtd>" << std::endl;

        mml << SPC(l + 1) << "</mtr>" << std::endl;
      }

  //write assignment rules
  imax = model->getModelValues().size();

  for (i = 0; i < imax; ++i)
    if (model->getModelValues()[i]->getStatus() == CModelEntity::ASSIGNMENT)
      {
        hasContents = true;
        mml << SPC(l + 1) << "<mtr>" << std::endl;

        //first column (lhs)
        mml << SPC(l + 2) << "<mtd columnalign='right'>" << std::endl;
        mml << SPC(l + 3) << "<mi>" << CMathMl::fixName(model->getModelValues()[i]->getObjectName()) << "</mi>" << std::endl;
        //writeLHS_ModelValue(mml, model->getModelValues()[i]->getObjectName(), l + 3);
        mml << SPC(l + 2) << "</mtd>" << std::endl;

        //second column ("=")
        mml << SPC(l + 2) << "<mtd>" << std::endl;
        mml << SPC(l + 3) << "<mo>=</mo>" << std::endl;
        mml << SPC(l + 2) << "</mtd>" << std::endl;

        //third column (rhs)
        mml << SPC(l + 2) << "<mtd columnalign='left'>" << std::endl;
        writeRHS_ModelEntity(mml, model->getModelValues()[i],
                             expandFull, l + 3);
        mml << SPC(l + 2) << "</mtd>" << std::endl;

        mml << SPC(l + 1) << "</mtr>" << std::endl;
      }

  mml << SPC(l) << "</mtable>" << std::endl;
}
コード例 #21
0
ファイル: btDbvtBroadphase.cpp プロジェクト: stolk/bullet3
void btDbvtBroadphase::collide(btDispatcher* dispatcher)
{
	/*printf("---------------------------------------------------------\n");
	printf("m_sets[0].m_leaves=%d\n",m_sets[0].m_leaves);
	printf("m_sets[1].m_leaves=%d\n",m_sets[1].m_leaves);
	printf("numPairs = %d\n",getOverlappingPairCache()->getNumOverlappingPairs());
	{
		int i;
		for (i=0;i<getOverlappingPairCache()->getNumOverlappingPairs();i++)
		{
			printf("pair[%d]=(%d,%d),",i,getOverlappingPairCache()->getOverlappingPairArray()[i].m_pProxy0->getUid(),
				getOverlappingPairCache()->getOverlappingPairArray()[i].m_pProxy1->getUid());
		}
		printf("\n");
	}
*/

	SPC(m_profiling.m_total);
	/* optimize				*/
	m_sets[0].optimizeIncremental(1 + (m_sets[0].m_leaves * m_dupdates) / 100);
	if (m_fixedleft)
	{
		const int count = 1 + (m_sets[1].m_leaves * m_fupdates) / 100;
		m_sets[1].optimizeIncremental(1 + (m_sets[1].m_leaves * m_fupdates) / 100);
		m_fixedleft = btMax<int>(0, m_fixedleft - count);
	}
	/* dynamic -> fixed set	*/
	m_stageCurrent = (m_stageCurrent + 1) % STAGECOUNT;
	btDbvtProxy* current = m_stageRoots[m_stageCurrent];
	if (current)
	{
#if DBVT_BP_ACCURATESLEEPING
		btDbvtTreeCollider collider(this);
#endif
		do
		{
			btDbvtProxy* next = current->links[1];
			listremove(current, m_stageRoots[current->stage]);
			listappend(current, m_stageRoots[STAGECOUNT]);
#if DBVT_BP_ACCURATESLEEPING
			m_paircache->removeOverlappingPairsContainingProxy(current, dispatcher);
			collider.proxy = current;
			btDbvt::collideTV(m_sets[0].m_root, current->aabb, collider);
			btDbvt::collideTV(m_sets[1].m_root, current->aabb, collider);
#endif
			m_sets[0].remove(current->leaf);
			ATTRIBUTE_ALIGNED16(btDbvtVolume)
			curAabb = btDbvtVolume::FromMM(current->m_aabbMin, current->m_aabbMax);
			current->leaf = m_sets[1].insert(curAabb, current);
			current->stage = STAGECOUNT;
			current = next;
		} while (current);
		m_fixedleft = m_sets[1].m_leaves;
		m_needcleanup = true;
	}
	/* collide dynamics		*/
	{
		btDbvtTreeCollider collider(this);
		if (m_deferedcollide)
		{
			SPC(m_profiling.m_fdcollide);
			m_sets[0].collideTTpersistentStack(m_sets[0].m_root, m_sets[1].m_root, collider);
		}
		if (m_deferedcollide)
		{
			SPC(m_profiling.m_ddcollide);
			m_sets[0].collideTTpersistentStack(m_sets[0].m_root, m_sets[0].m_root, collider);
		}
	}
	/* clean up				*/
	if (m_needcleanup)
	{
		SPC(m_profiling.m_cleanup);
		btBroadphasePairArray& pairs = m_paircache->getOverlappingPairArray();
		if (pairs.size() > 0)
		{
			int ni = btMin(pairs.size(), btMax<int>(m_newpairs, (pairs.size() * m_cupdates) / 100));
			for (int i = 0; i < ni; ++i)
			{
				btBroadphasePair& p = pairs[(m_cid + i) % pairs.size()];
				btDbvtProxy* pa = (btDbvtProxy*)p.m_pProxy0;
				btDbvtProxy* pb = (btDbvtProxy*)p.m_pProxy1;
				if (!Intersect(pa->leaf->volume, pb->leaf->volume))
				{
#if DBVT_BP_SORTPAIRS
					if (pa->m_uniqueId > pb->m_uniqueId)
						btSwap(pa, pb);
#endif
					m_paircache->removeOverlappingPair(pa, pb, dispatcher);
					--ni;
					--i;
				}
			}
			if (pairs.size() > 0)
				m_cid = (m_cid + ni) % pairs.size();
			else
				m_cid = 0;
		}
	}
	++m_pid;
	m_newpairs = 1;
	m_needcleanup = false;
	if (m_updates_call > 0)
	{
		m_updates_ratio = m_updates_done / (btScalar)m_updates_call;
	}
	else
	{
		m_updates_ratio = 0;
	}
	m_updates_done /= 2;
	m_updates_call /= 2;
}
コード例 #22
0
ファイル: CMMLOutput.cpp プロジェクト: PriKalra/COPASI
void CMMLOutput::writeRHS(std::ostream & out,
                          const CMetab* pMetab, const CReaction* pReac,
                          bool numbers, bool expand, bool expandFull,
                          size_t l)
{
  if (!pMetab)
    {
      out << SPC(l + 0) << "Error: invalid metabolite" << std::endl;
      return;
    }

  if (!pReac)
    {
      out << SPC(l + 0) << "Error: invalid reaction" << std::endl;
      return;
    }

  const CCopasiVector < CChemEqElement > & balances = pReac->getChemEq().getBalances();

  C_FLOAT64 balance = 0;

  size_t i, imax = balances.size();

  for (i = 0; i < imax; ++i)
    {
      if (balances[i]->getMetaboliteKey() == pMetab->getKey())
        {
          balance = balances[i]->getMultiplicity();
          break;
        }
    }

  if (0 == balance) return;

  out << SPC(l + 0) << "<mrow>" << std::endl;

  //balance
  if (balance == 1.0)
    {
      out << SPC(l + 1) << "<mo>" << "+" << "</mo>" << std::endl;
    }
  else if (balance == -1.0)
    {
      out << SPC(l + 1) << "<mo>" << "-" << "</mo>" << std::endl;
    }
  else if (balance < 0.0)
    {
      out << SPC(l + 1) << "<mo>" << "-" << "</mo><mn>" << -balance << "</mn>"
      << "<mo>" << "&CenterDot;" << "</mo>" << std::endl;
    }
  else // >0
    {
      out << SPC(l + 1) << "<mo>" << "+" << "</mo><mn>" << balance << "</mn>"
      << "<mo>" << "&CenterDot;" << "</mo>" << std::endl;
    }

  //compartment volume?
  if (pReac->getCompartmentNumber() == 1)
    {
      std::string compName = pMetab->getCompartment()->getObjectName();
      out << SPC(l + 1) << "<msub><mi>V</mi><mi>" << CMathMl::fixName(compName)
      << "</mi></msub>" << std::endl;
      out << SPC(l + 1) << "<mo>" << "&CenterDot;" << "</mo>" << std::endl;
    }

  //kinetic function
  if (pReac->getFunction())
    {
      std::vector<std::vector<std::string> > params;
      createParameterMapping(pReac, params, numbers);

      if (expand) out << SPC(l + 1) << "<mfenced>" << std::endl;

      out << pReac->getFunction()->writeMathML(params, expand, expandFull);

      if (expand) out << SPC(l + 1) << "</mfenced>" << std::endl;
    }

  out << SPC(l + 0) << "</mrow>" << std::endl;
}
コード例 #23
0
void CEvaluationNodeDelay::writeMathML(std::ostream & out,
                                       const std::vector<std::vector<std::string> > & env,
                                       bool expand,
                                       unsigned C_INT32 l) const
{
  switch (mType & 0x00FFFFFF)
    {
      case DELAY:
        out << SPC(l) << "<mrow>" << std::endl;

        out << SPC(l + 1) << "<mi>" << mData << "</mi>" << std::endl;
        out << SPC(l + 1) << "<mo> &ApplyFunction; </mo>" << std::endl;
        out << SPC(l + 1) << "<mrow>" << std::endl;
        out << SPC(l + 2) << "<mo> (</mo>" << std::endl;
        out << SPC(l + 2) << "<mrow>" << std::endl;

        mpDelayedObject->writeMathML(out, env, expand, l + 3);

        out << SPC(l + 3) << "<mo> , </mo>" << std::endl;

        mpDeltaT->writeMathML(out, env, expand, l + 3);

        out << SPC(l + 2) << "</mrow>" << std::endl;
        out << SPC(l + 2) << "<mo>) </mo>" << std::endl;

        out << SPC(l + 1) << "</mrow>" << std::endl;
        out << SPC(l) << "</mrow>" << std::endl;
        break;

      default:
        break;
    }

  return;
}
コード例 #24
0
void CEvaluationNodeCall::writeMathML(std::ostream & out,
                                      const std::vector<std::vector<std::string> > & env,
                                      bool expand,
                                      unsigned C_INT32 l) const
{
  switch (mType & 0x00FFFFFF)
    {
      case FUNCTION:
      {

        if (!expand || !mpFunction)
          {
            out << SPC(l) << "<mrow>" << std::endl;

            out << SPC(l + 1) << "<mi>" << mData << "</mi>" << std::endl;
            out << SPC(l + 1) << "<mo> &ApplyFunction; </mo>" << std::endl;
            out << SPC(l + 1) << "<mrow>" << std::endl;
            out << SPC(l + 2) << "<mo> (</mo>" << std::endl;
            out << SPC(l + 2) << "<mrow>" << std::endl;

            std::vector< CEvaluationNode * >::const_iterator it = mCallNodes.begin();
            std::vector< CEvaluationNode * >::const_iterator end = mCallNodes.end();

            if (it != end)(*it++)->writeMathML(out, env, expand, l + 3);

            for (; it != end; ++it)
              {

                out << SPC(l + 3) << "<mo> , </mo>" << std::endl;
                (*it)->writeMathML(out, env, expand, l + 3);
              }

            out << SPC(l + 2) << "</mrow>" << std::endl;
            out << SPC(l + 2) << "<mo>) </mo>" << std::endl;

            out << SPC(l + 1) << "</mrow>" << std::endl;
            out << SPC(l) << "</mrow>" << std::endl;
          }
        else
          {
            //construct the environment for the nested function
            std::vector<std::vector<std::string> > env2;

            std::vector< CEvaluationNode * >::const_iterator it = mCallNodes.begin();
            std::vector< CEvaluationNode * >::const_iterator end = mCallNodes.end();

            for (; it != end; ++it)
              {
                std::ostringstream oss;
                (*it)->writeMathML(oss, env, expand, l + 3);
                std::vector<std::string> tmpvector; tmpvector.push_back(oss.str());
                env2.push_back(tmpvector);
              }

            out << SPC(l) << "<mfenced>" << std::endl;
            mpFunction->writeMathML(out, env2, expand, expand, l + 1);
            out << SPC(l) << "</mfenced>" << std::endl;
          }
      }
      break;

      case EXPRESSION:
        break;
      default:
        break;
    }

  return;
}
コード例 #25
0
ファイル: dclarg.c プロジェクト: ThomasDickey/flist-snapshots
DCLARG	*dclarg(char *inp_, char *dft_, int cmd_arg, int cpy_dft)
{
	DCLARG	*arg_	= 0;
	struct	FAB	fab;
	struct	NAM	nam,	nam2;
	int	len,			/* (misc) string length		*/
		use_dna2 = FALSE;	/* TRUE if 'dna2[]' is default	*/
	char	rsa	[NAM$C_MAXRSS],	/* resultant string (SYS$SEARCH)*/
		esa	[NAM$C_MAXRSS],	/* expanded string (SYS$PARSE)	*/
		dna	[NAM$C_MAXRSS],	/* next 'sfld' default string	*/
		dna2	[NAM$C_MAXRSS],	/* next 'mfld' default if list	*/
		dna3	[NAM$C_MAXRSS],	/* next 'mfld' default if single*/
		cmdtok	[NAM$C_MAXRSS],
		*i_	= inp_,		/* beginning of item to parse	*/
		*j_,			/* end+1 of item to parse	*/
		*k_;			/* miscellaneous pointer	*/

	if (!dft_)	dft_ = "";
	strcpy (dna, dft_);
	strcpy (dna2,dft_);
	strcpy (dna3,dft_);

	dclarg_init ();
	for (;;)
	{
	    SPC(i_);	/* Ignore blanks between tokens */

	    j_ = i_;
	    if (*i_ == EOS)
		return (first_);
	    /*
	     * Options begin with "/", and are followed by:
	     *	(a) an optional alphanumeric+'_' name, then
	     *	(b) an optional (if name given) "="
	     *	(c) an option-value if "=", perhaps enclosed in
	     *	    "(" and ")".
	     *
	     * SET-commands may use an "=" without a preceding "/"
	     * (e.g., "SET PROTECTION=(OWN:RE)").
	     */
	    else if (isopt(*i_))
	    {
		if (*i_ == '/')
		{
		    i_++;
		    SPC(i_);
		    i_ = dclarg_keyw (i_);
		    k_ = i_;
		    SPC(k_);
		    if (isopt2(*k_))	i_ = k_;
		}
		if (isopt2(*i_))
		{
		    i_++;
		    SPC(i_);
		    if (*i_ == '(')
		    {
			while (*i_ && (*i_ != ')'))	i_++;
			if (*i_ == ')')			i_++;
		    }
		    else
			i_ = dclarg_spec (i_, "-");
		}
		status = 0;
		STRNCPY(esa, j_, i_ - j_);
		arg_ = dclarg_make (arg_, esa, FROM, (struct NAM *)0);
	    }
	    /*
	     * File names contain a mixture of ".", ":", ";", alphanumeric
	     * characters, and "[", "]" to delimit directories.  Many
	     * DCL-oriented programs permit a list of filenames separated
	     * by comma to indicate that the directory defaults.  Finally,
	     * wildcard characters "*" and "%" are used.
	     *
	     * Perform enough parsing here to pass along the defaults to
	     * the calling program.
	     */
	    else if (dclarg_name(*i_))
	    {
		i_ = dclarg_spec (i_, 0);
		if (cmd_arg > 0)
		{
		    STRNCPY(cmdtok, j_, i_ - j_);
		    arg_ = dclarg_make (arg_, cmdtok, FROM, (struct NAM *)0);
		}
		else
		{
		    if (mfld <= 0)	mfld = 1, sfld = 0;
		    rmsinit_fab (&fab, &nam,
					(sfld	? dna
						: (use_dna2 ? dna2
							    : dna3)), 0);
		    fab.fab$l_fna	= j_;
		    fab.fab$b_fns	= i_-j_;

		    rmsinit_nam (&nam, rsa, esa);
		    status = sys$parse(&fab);

		    /*
		     * If we're referring to a directory that doesn't exist,
		     * the parse will return a directory-not-found (something
		     * that we'd normally expect from sys$search).  That
		     * breaks the "create" command.
		     */
		    if (status == RMS$_DNF)
		    	status = 0;

		    /*
		     * Use the most recent name as a default name for the next
		     * parse:
		     */
		    STRNCPY(dna, esa, nam.nam$b_esl);
		    nam2 = nam;		/* Save to use in 'dclarg_make' */

		    /*
		     * If this was the first item in any list, (sfld==0),
		     * obtain the parsed string, and the first-found from a
		     * search for the defaults 'dna3' and 'dna2', respectively.
		     */
		    if (sfld == 0)
		    {
			dclarg__copy (dna3, &nam, cpy_dft);
			if (cpy_dft)
			{
			    sys$search (&fab);
			    dclarg__copy (dna2, &nam, cpy_dft);
			}
			use_dna2 = FALSE;
		    }

		    /*
		     * Make a new DCLARG-entry:
		     */
		    arg_ = dclarg_make (arg_,
				(nam.nam$b_esl ? dna : j_), FROM, &nam2);
		}
	    }
	    else
	    {
		while (!dclarg_name(*i_) && !isopt(*i_))	i_++;
		status = -1;
		arg_ = dclarg_make (arg_, err_parm, FROM, (struct NAM *)0);
	    }

	    SPC(i_);
	    if (*i_ == ',')
	    {
		use_dna2 = cpy_dft; 	/* COPY-output inherits 1st input */
		i_++; sfld++;
		SPC(i_);
		j_ = i_;
		while (isspace(*i_) || *i_ == ',')	i_++;
		if (j_ != i_ || isopt(*i_))
		{
		    status = -1;
		    arg_ = dclarg_make (arg_, err_null, FROM, (struct NAM *)0);
		}
	    }
	    else if (!isopt(*i_))
	    {
		strcpy (dna, dft_);
		if (cmd_arg <= 0)
		{
		    mfld++;
		    sfld = 0;
		}
	    }

	    if (cmd_arg > 0)
		cmd_arg--;	/* (On zero, look for filenames) */
	}
}