예제 #1
0
파일: arrays.c 프로젝트: elifoster/CS-133U
int main() {
    printf("Enter string 1: ");
    char string[128];
    scanf("%[^\n]s", string);
    int length = strlen(string);

    int ary[ASCII_LENGTH] = { 0 };

    int charIndex;
    for (charIndex = 0; charIndex < length; charIndex++) {
        ary[(unsigned char) string[charIndex]]++;
    }

    printf("\nFREQUENCY TABLE\n");
    printf("---------------\n");
    printf("Char Count %% of Total\n");
    printf("---- ----- ----------\n");
    printf("ALL  %i   %.2f%%\n", length, getPercent(length, length));

    char done[ASCII_LENGTH];
    for (charIndex = 0; charIndex < length; charIndex++) {
        unsigned char c = string[charIndex];
        if (!in(c, done, ASCII_LENGTH)) {
            int count = ary[c];
            printf("\"%c\"  %i  %.2f%%\n", c, count, getPercent(count, length));
            done[charIndex] = c;
        }
    }

    return 0;
}
예제 #2
0
void GameScene::resumeGame(float dt)
{
	auto UIComponent = (cocostudio::ComRender*) UINode->getComponent("gameSceneUI");
	auto UILayer = (Layer*)UIComponent->getNode();
	auto loadingBar = dynamic_cast<LoadingBar*>(UILayer->getChildByTag(GAMESCENE_LOADINGBAR));
	auto labelCombo = dynamic_cast<Text*>(UILayer->getChildByTag(GAMESCENE_LABEL_COMBO));
	static int calledtime = 0;
	loadingBar->setPercent(calledtime++);
	if (loadingBar->getPercent() == 1)
	{
		labelCombo->setString("READY");
		labelCombo->setOpacity(255);
	}
	if (loadingBar->getPercent() == 50)
		labelCombo->runAction(FadeOut::create(1));
	if (loadingBar->getPercent() == 100)
	{
		this->unscheduleAllSelectors();
		calledtime = 0;
		labelCombo->setString("");
		labelCombo->setOpacity(100);
		for (auto&i : UINode->getChildren())
		{
			i->resume();
			for (auto&j : i->getChildren())
				j->resume();
		}
		AudioEngine::getInstance()->resume();
		this->scheduleUpdate();
	}
}
예제 #3
0
void IliadDrawArea::getSize(int iW, int iH, int &oW, int &oH)
{		

	int imageW = iW;
	int imageH = iH;
	
	int x;
	int resampleW;
	int resampleH;
	
	int a = getPercent(imageH, aHeight);
	int b = getPercent(imageW, aWidth);

	if (a > b)
		x = b;
	else 
		x = a;
	
	resampleW = imageW + (imageW * x / 100);
	resampleH = imageH + (imageH * x / 100);
	
	oW = resampleW;
	oH = resampleH;
	
	PV_LOGPRINTF("resampleW = %d", resampleW);
	PV_LOGPRINTF("resampleH = %d", resampleH);	
	
}
예제 #4
0
void AMDeadTimeButton::updateColorState()
{
    ColorState newState = AMToolButton::None;

    if (hasDeadTimeSources() || hasICRDataSource()) {

        // Identify the value used for color state comparison.

        double newValue = badReferencePoint_;

        if (countsMode_ == Percent && canDisplayPercentage())
            newValue = getPercent();
        else if (countsMode_ == Counts && canDisplayCounts())
            newValue = getCounts();
        else if (countsMode_ == CountRate && canDisplayCountRate())
            newValue = getCountRate();

        // Identify the new color state.

        if (newValue < goodReferencePoint_)
            newState = AMToolButton::Good;
        else if (newValue >= goodReferencePoint_ && newValue < badReferencePoint_)
            newState = AMToolButton::Neutral;
        else
            newState = AMToolButton::Bad;
    }

    setColorState(newState);
}
예제 #5
0
STDMETHODIMP ProgressWrap::COMGETTER(Percent)(ULONG *aPercent)
{
    LogRelFlow(("{%p} %s: enter aPercent=%p\n", this, "Progress::getPercent", aPercent));

    VirtualBoxBase::clearError();

    HRESULT hrc;

    try
    {
        CheckComArgOutPointerValidThrow(aPercent);

        AutoCaller autoCaller(this);
        if (FAILED(autoCaller.rc()))
            throw autoCaller.rc();

        hrc = getPercent(aPercent);
    }
    catch (HRESULT hrc2)
    {
        hrc = hrc2;
    }
    catch (...)
    {
        hrc = VirtualBoxBase::handleUnexpectedExceptions(this, RT_SRC_POS);
    }

    LogRelFlow(("{%p} %s: leave *aPercent=%RU32 hrc=%Rhrc\n", this, "Progress::getPercent", *aPercent, hrc));
    return hrc;
}
예제 #6
0
void AMDeadTimeButton::updateToolTip()
{
    QString toolTip = "";

    // Add the index, if we can display index information.

    if (canDisplayIndex())
        toolTip.append(QString("%1").arg(index_));

    // Add separator, if needed.

    if (canDisplayIndex() && isEnabled() && (canDisplayPercentage() || canDisplayCounts() || canDisplayCountRate()))
        toolTip.append(": ");

    // Add the counts information.

    if (countsMode_ == Percent && canDisplayPercentage())
        toolTip.append(QString("%1%").arg(getPercent(), 0, 'f', 0));
    else if (countsMode_ == Counts && canDisplayCounts())
        toolTip.append(QString("%1 counts").arg(getCounts()));
    else if (countsMode_ == CountRate && canDisplayCountRate())
        toolTip.append(QString("%1 counts/s").arg(getCountRate()));

    setToolTip(toolTip);
}
예제 #7
0
파일: Load.cpp 프로젝트: joyfish/MyGame
void Load::LoadingBar(float dt)
{
    auto size = Director::getInstance()->getVisibleSize();

    auto lb = dynamic_cast<class LoadingBar*>(getChildByTag(1));
    float per = lb->getPercent() + 1.0f;
    lb->setPercent(per);
   //图片加载
    auto load = Sprite::create("load.png");
    load->setPosition(Vec2(size.width/2-150,size.height/2+60));
    auto moveTo = MoveTo::create(0.6,Vec2( size.width/2+130,size.height/2+60));
    auto seq = Sequence::create(moveTo, NULL);
    load->runAction(seq);
    addChild(load);
    
   if (per==100) {
       unschedule("LoadingBar");
       auto callf=CallFunc::create([this](){
           Director::getInstance()->replaceScene(GameScene::createScene());
       });
       auto seq=Sequence::create(DelayTime::create(1.1), callf,NULL);
       this->runAction(seq);
   }
    
}
예제 #8
0
void PageTest::sliderEvent(Ref *pSender, ui::Slider::EventType type)
{
    if (type == ui::Slider::EventType::ON_PERCENTAGE_CHANGED)
    {
        auto slider = dynamic_cast<ui::Slider*>(pSender);
        CCLOG("sliderEvent:%d", slider->getPercent());
    }
}
예제 #9
0
void awardChallengeTrophies(void)
{
	char trophyId[MAX_NAME_LENGTH];
	int completed;

	/* check % of challenges completed - 25% increments*/
	completed = (getPercent(game.completedChallenges, game.totalChallenges) / 25) * 25;
	sprintf(trophyId, "CHALLENGE_%d", completed);
	awardTrophy(trophyId);
}
예제 #10
0
void GameScene::startGame(float dt)
{
	auto UIComponent = (cocostudio::ComRender*) UINode->getComponent("gameSceneUI");
	auto UILayer = (Layer*)UIComponent->getNode();
	auto loadingBar = dynamic_cast<LoadingBar*>(UILayer->getChildByTag(GAMESCENE_LOADINGBAR));
	auto labelCombo = dynamic_cast<Text*>(UILayer->getChildByTag(GAMESCENE_LABEL_COMBO));
	auto buttonPause = dynamic_cast<Button*>(UILayer->getChildByTag(GAMESCENE_BUTTON_PAUSE));
	loadingBar->setPercent(loadingBar->getPercent() + 1);
	if (loadingBar->getPercent() == 50)
		labelCombo->runAction(FadeOut::create(1));
	if (loadingBar->getPercent() == 100)
	{
		this->unscheduleAllSelectors();
		labelCombo->setString("");
		labelCombo->setOpacity(100);
		AudioEngine::getInstance()->play();
		this->scheduleUpdate();
		buttonPause->setTouchEnabled(true);
	}
}
예제 #11
0
void GlMenuSampler::rollOut(QPainter *p)
{
    int per = getPercent();
    int angle = int((per/100.) * 90);

    if(per < 0 || per > 100) return;


    buttonMain->drawImageAt(p, angle, per);
    buttonPlayer->drawImageAt(p, angle, per);
    listWidget->drawImageAt(p, angle, per);
}
예제 #12
0
void GlMenuGenre::rollIn(QPainter *p)
{

    int per = getPercent();
    int angle = int((per/100.)* -90);

    if(per < 0 || per > 100) return;
        qDebug() << QString("%1").arg(per);

    buttonMain->drawImageAt(p, angle, per);
    buttonPlayer->drawImageAt(p, angle, per);
    listWidget->drawImageAt(p, angle, per);
}
예제 #13
0
void GlMenuSampler::rollIn(QPainter *p)
{
    /*Alle Kindobjekte werden eingerollt*/

    int per = getPercent();
    int angle = int((per/100.)* -90);

    if(per < 0 || per > 100) return;


    buttonMain->drawImageAt(p, angle, per);
    buttonPlayer->drawImageAt(p, angle, per);
    listWidget->drawImageAt(p, angle, per);
}
예제 #14
0
ArrayElement* ToDo::clone() {
    ToDo* ret = new ToDo();
    if (getClass()) ret->setClass(*classEvent);
    if (getCompleted()) ret->setCompleted(*completed);
    if (getCreated()) ret->setCreated(*created);
    if (getDescription()) ret->setDescription(*description);
    if (getDtStamp()) ret->setDtStamp(*dtStamp);
    if (getDtStart()) ret->setDtStart(*dtStart);
    if (getGeo()) ret->setGeo(*geo);
    if (getLastMod()) ret->setLastMod(*lastMod);
    if (getLocation()) ret->setLocation(*location);
    if (getOrganizer()) ret->setOrganizer(*organizer);
    if (getPercent()) ret->setPercent(*percent);
    if (getPriority()) ret->setPriority(*priority);
    if (getRecurID()) ret->setRecurID(*recurID);
    if (getSequence()) ret->setSequence(*seq);
    if (getStatus()) ret->setStatus(*status);
    if (getSummary()) ret->setSummary(*summary);
    if (getUid()) ret->setUid(*uid);
    if (getUrl()) ret->setUrl(*url);
    if (getDue()) ret->setDue(*due);
    if (getDuration()) ret->setDuration(*duration);
    if (getAttach()) ret->setAttach(*attach);
    if (getAttendee()) ret->setAttendee(*attendee);
    if (getCategories()) ret->setCategories(*categories);
    if (getComment()) ret->setComment(*comment);
    if (getContact()) ret->setContact(*contact);
    if (getExDate()) ret->setExDate(*exDate);
    if (getExRule()) ret->setExRule(*exRule);
    if (getRStatus()) ret->setRStatus(*rStatus);
    if (getRelated()) ret->setRelated(*related);
    if (getResources()) ret->setResources(*resources);
    if (getRDate()) ret->setRDate(*rDate);
    if (getRRule()) ret->setRRule(*rRule);
    if (getXProp()) ret->setXProp(*xProp);

    return ret;
}
예제 #15
0
파일: Map.cpp 프로젝트: rhzchina/West
void Map::mapMove(GameScene* parent,Role* role){
	for(int i = 0;i < map->count();i++){
		CCSprite* m = (CCSprite*)map->objectAtIndex(i);

		if(i == 0){ //第二大关卡开始,结束玩家飞行状态
			if(role->getState() == Role::FLY){
				if(m->getPositionX() > 0 && m->getTag() < 7 && m->getPositionX() <= Role::POSX){
					role->nextLevel();
					speed += 0.5;  //每一关增加0.5速 度
					parent->addSpeed(0.5);
					startCur = true;
				}
			}
		}

		if(m->getPositionX() > 854){
			m->setVisible(false);
		}
		if(m->getPositionX()+m->getContentSize().width>= 0){
			float x = m->getPositionX();
			float y = m->getPositionY();
			if(mapUp){
				if(m->getTag() >= 7 ){
					switch(m->getTag()){
					case 7:
						if(y<-55){
							y+=getSpeed() / 1.5f;
						}
						break;
					case 8:
						if(y < -75){
							y+=getSpeed() / 1.5f;
						}
						break;
					case 9:
						if(y < -70){
							y+=getSpeed() / 1.5f;
						}
						break;
					}
				}else{
					if( y < 0){
						y += getSpeed();
					}
				}
				x -= getSpeed() / 1.5f;
			}else{
				x -= getSpeed();
			}
			//一关结束的地图向上移动
			if(!mapUp && i >= map->count() - 3){
				if(m->getPositionX() + 100 < 200){
					mapUp = true;
					role->setProtect(true);
				}
			}

			m->setPosition(ccp(x,y));
			if(m->getPositionX() < 854 && m->getPositionX() + m->getContentSize().width > 0){
				m->setVisible(true);
				if(startCur && m->getTag() == 9 && m->getPositionX()< role->getPositionX() - role->getContentSize().width){
					role->fly(true);
					startCur = false;
				}
			}
		}else{
		}
	}

	CCSprite* last = (CCSprite*)map->lastObject();
	if(last->getPositionX() + last->getContentSize().width <= 0 ){
		for(int i = 0;i < map->count();i++){
			parent->removeChild((CCSprite*)map->objectAtIndex(i),true);
		}
		map->removeAllObjects();
		resetMap(curLevel + 1,parent);
	}

	if(startCur){
		parent->setProgress(getPercent());
		curDis += getSpeed();
	}
}
예제 #16
0
double Scrollbar::getScrollerPercent()
{
	return getPercent(ypos + getScrollerLength() / 2 + WIDTH, scrollPos, ypos - getScrollerLength() / 2 + pxLength - WIDTH);
}
예제 #17
0
void GlPictureFlow::draw_backward(QPainter* p)
{
    QPoint point;
    int dist;
    int i;
    int angle;
    int size;

    QFont font = p->font();
    font.setPixelSize(20);
    font.setBold(true);
    p->setFont(font);

       p->setPen(QColor(255,255,255,125));
       p->drawText(QRect(0,0,getWidth(),30),Qt::AlignHCenter,alben.at(centerImage));
    centerAlbum = alben.at(centerImage);
    i = centerImage - 5;
    if(i > -1 && i < images.size())
      {
        dist = int((getPercent()/100.) * (distShort));
        point.setX(pt0.x() + dist);
        point.setY(pt0.y());

        size = int((getPercent()/100.) * (sizeSmall));
        t_drawImageAt(p, point, images.at(i), size,size*1.5,-50,0);
      }
    i = centerImage - 4;
    if(i > -1 && i < images.size())
      {
        dist = int((getPercent()/100.) * (distShort));
        point.setX(pt1.x() + dist);
        point.setY(pt1.y());
        t_drawImageAt(p, point, images.at(i), sizeSmall, sizeSmall*1.5,-50,0);
      }
    i = centerImage - 3;
    if(i > -1 && i < images.size())
      {
        dist = int((getPercent()/100.) * (distShort));
        point.setX(pt2.x() + dist);
        point.setY(pt2.y());
        t_drawImageAt(p, point, images.at(i), sizeSmall, sizeSmall*1.5,-50,0);
      }
    i = centerImage -2;
    if(i > -1 && i < images.size())
      {
        dist = int((getPercent()/100.) * (distShort));
        point.setX(pt3.x() + dist);
        point.setY(pt3.y());
        t_drawImageAt(p, point, images.at(i), sizeSmall, sizeSmall*1.5,-50,0);
      }

    i = centerImage - 1;
    if(i > -1 && i < images.size())
      {
        dist = int((getPercent()/100.) * (distLong));
        point.setX(pt4.x() + dist);
        point.setY(pt4.y());

        size = int((getPercent()/100.) * (sizeBig - sizeSmall)) + sizeSmall;
        angle = -50 + int((getPercent()/100.) * 50);
        t_drawImageAt(p, point, images.at(i), size,size*1.5,angle,0);
      }

    i = centerImage + 4;
    if(i > -1 && i < images.size())
      {
        dist = int((getPercent()/100.) * (distShort));
        point.setX(pt7.x() + dist);
        point.setY(pt7.y());

        size = sizeSmall - int((getPercent()/100.) * (sizeSmall));
        t_drawImageAt(p, point, images.at(i), size,size*1.5,50,0);
      }

    i = centerImage + 3;
    if(i > -1 && i < images.size())
      {
        dist = int((getPercent()/100.) * (distShort));
        point.setX(pt8.x() + dist);
        point.setY(pt8.y());
        t_drawImageAt(p, point, images.at(i), sizeSmall, sizeSmall*1.5,50,0);
      }

    i = centerImage + 2;
    if(i > -1 && i < images.size())
      {
        dist = int((getPercent()/100.) * (distShort));
        point.setX(pt9.x() + dist);
        point.setY(pt9.y());
        t_drawImageAt(p, point, images.at(i), sizeSmall, sizeSmall*1.5,50,0);
      }

    i = centerImage + 1;
    if(i > -1 && i < images.size())
      {
        dist = int((getPercent()/100.) * (distShort));
        point.setX(pt10.x() + dist);
        point.setY(pt10.y());
        t_drawImageAt(p, point, images.at(i), sizeSmall, sizeSmall*1.5,50,0);
    }

    i = centerImage;
    if(i > -1 && i < images.size())
      {
        dist = int((getPercent()/100.) * (distLong));
        point.setX(pt11.x() + dist);
        point.setY(pt11.y());

        angle = int((getPercent()/100.) * (50));

        size = int((getPercent()/100.) * (sizeSmall - sizeBig)) + sizeBig;
        t_drawImageAt(p, point, images.at(i), size,size*1.5,angle,0);
      }
}
예제 #18
0
int main (int argc, char *argv [])
{
  int percent ;
  int ring, leg ;

// Always initialise wiringPi:
//	Use the Sys method if you don't need to run as root

  wiringPiSetupSys () ;

// Initialise the piGlow devLib

  piGlowSetup (FALSE) ;

  if (argc == 1)
    failUsage () ;

  if ((argc == 2) && (strcasecmp (argv [1], "off") == 0))
  {
    for (leg = 0 ; leg < 3 ; ++leg)
      piGlowLeg (leg, 0) ;
    return 0 ;
  }

  if (argc == 3)
  {
    percent = getPercent (argv [2]) ;

    /**/ if (strcasecmp (argv [1], "red") == 0)
      piGlowRing (PIGLOW_RED, percent) ;
    else if (strcasecmp (argv [1], "yellow") == 0)
      piGlowRing (PIGLOW_YELLOW, percent) ;
    else if (strcasecmp (argv [1], "orange") == 0)
      piGlowRing (PIGLOW_ORANGE, percent) ;
    else if (strcasecmp (argv [1], "green") == 0)
      piGlowRing (PIGLOW_GREEN, percent) ;
    else if (strcasecmp (argv [1], "blue") == 0)
      piGlowRing (PIGLOW_BLUE, percent) ;
    else if (strcasecmp (argv [1], "white") == 0)
      piGlowRing (PIGLOW_WHITE, percent) ;
    else if (strcasecmp (argv [1], "all") == 0)
      for (ring = 0 ; ring < 6 ; ++ring)
	piGlowRing (ring, percent) ;
    else
    {
      fprintf (stderr, "piglow: invalid colour\n") ;
      exit (EXIT_FAILURE) ;
    }
    return 0 ;
  }

  if (argc == 4)
  {
    /**/ if (strcasecmp (argv [1], "leg") == 0)
    {
      leg = atoi (argv [2]) ;
      if ((leg < 0) || (leg > 2))
      {
	fprintf (stderr, "piglow: leg value out of range\n") ;
	exit (EXIT_FAILURE) ;
      }
      percent = getPercent (argv [3]) ;
      piGlowLeg (leg, percent) ;
    }
    else if (strcasecmp (argv [1], "ring") == 0)
    {
      ring = atoi (argv [2]) ;
      if ((ring < 0) || (ring > 5))
      {
	fprintf (stderr, "piglow: ring value out of range\n") ;
	exit (EXIT_FAILURE) ;
      }
      percent = getPercent (argv [3]) ;
      piGlowRing (ring, percent) ;
    }
    return 0 ;
  }

  if (argc == 5)
  {
    if (strcasecmp (argv [1], "led") != 0)
      failUsage () ;

    leg = atoi (argv [2]) ;
    if ((leg < 0) || (leg > 2))
    {
      fprintf (stderr, "piglow: leg value out of range\n") ;
      exit (EXIT_FAILURE) ;
    }
    ring = atoi (argv [3]) ;
    if ((ring < 0) || (ring > 5))
    {
      fprintf (stderr, "piglow: ring value out of range\n") ;
      exit (EXIT_FAILURE) ;
    }
    percent = getPercent (argv [4]) ;
    piGlow1 (leg, ring, percent) ;
    return 0 ;
  }

  failUsage () ;
  return 0 ; 
}
cinder::Surface ColorAlgoGen::operator()(const cinder::Surface& realImage)
{
    std::vector<SurfaceWrapper> nextGenPopulation;
    nextGenPopulation.reserve(m_popSize);


    std::for_each(m_population.begin(), m_population.end(), [this, &realImage](SurfaceWrapper& s)
    {
        s.fitness = getFitness(realImage, s.image);
    });

    std::sort(m_population.begin(), m_population.end(), [](const SurfaceWrapper& s1, const SurfaceWrapper& s2)
    {
        return s1.fitness < s2.fitness;
    });

    unsigned int copyRatio = tools::clamp<int>(
        static_cast<int>(getPercent(COPY) * m_popSize),
        0,
        m_popSize
        );

    if (copyRatio > 0)
    {
        std::transform(m_population.begin(), m_population.begin() + copyRatio, std::back_inserter(nextGenPopulation), [&realImage, this](const SurfaceWrapper& sw)
        {
            return sw;
        });
    }



    unsigned int mutateRatio = tools::clamp<int>(
        static_cast<int>(getPercent(MUTATE) * m_popSize),
        0,
        m_popSize - copyRatio
        );

    if (mutateRatio > 0)
    {
        std::transform(m_population.begin(), m_population.begin() + mutateRatio, std::back_inserter(nextGenPopulation), [&realImage, this](const SurfaceWrapper& sw)
        {
            cinder::Surface s = mutate(sw.image);
            
            return SurfaceWrapper(s, getFitness(realImage, s));
        });
    }

    unsigned int crossOverRatio = tools::clamp<int>(
        static_cast<int>(getPercent(CROSSOVER) * m_popSize),
        0,
        m_popSize - copyRatio - mutateRatio
        );

    if (crossOverRatio > 0)
    {
        std::transform(m_population.begin(), m_population.begin() + crossOverRatio, std::back_inserter(nextGenPopulation), [&realImage, this](const SurfaceWrapper& sw)
        {
            auto& pop = getPop();

            cinder::Surface s = crossOver(sw.image, pop[RANDOMIZER.nextUint(pop.size())].image);

            return SurfaceWrapper(s, getFitness(realImage, s));
        });
    }


    unsigned int randomRatio = tools::clamp<int>(
        static_cast<int>(getPercent(RANDOM) * m_popSize),
        0,
        m_popSize - copyRatio - mutateRatio - crossOverRatio
        );

    if (nextGenPopulation.size() + randomRatio < m_popSize)
    {
        randomRatio = m_popSize - nextGenPopulation.size();
    }

    if (randomRatio > 0)
    {
        std::transform(m_population.begin(), m_population.begin() + randomRatio, std::back_inserter(nextGenPopulation), [&realImage, this](const SurfaceWrapper& sw)
        {
            cinder::Surface s = getRandomSurface(sw.image.getWidth(), sw.image.getHeight());

            return SurfaceWrapper(s, getFitness(realImage, s));
        });
    }



    std::sort(nextGenPopulation.begin(), nextGenPopulation.end(), [](const SurfaceWrapper& s1, const SurfaceWrapper& s2)
    {
        return s1.fitness < s2.fitness;
    });


    m_population = nextGenPopulation;

    return m_population.front().image;
}
예제 #20
0
extern char *
OutputCubeAnalysis(float aarOutput[2][NUM_ROLLOUT_OUTPUTS],
                   float aarStdDev[2][NUM_ROLLOUT_OUTPUTS], const evalsetup * pes, const cubeinfo * pci)
{

    static char sz[4096];
    int i;
    float arDouble[4];
    const char *aszCube[] = {
        NULL,
        N_("No double"),
        N_("Double, take"),
        N_("Double, pass")
    };

    int ai[3];
    cubedecision cd;
    float r;

    FindCubeDecision(arDouble, aarOutput, pci);

    /* header */

    sprintf(sz, "\n%s\n", _("Cube analysis"));

    /* ply & cubeless equity */

    switch (pes->et) {
    case EVAL_NONE:
        strcat(sz, _("n/a"));
        break;
    case EVAL_EVAL:
        sprintf(strchr(sz, 0), "%u-%s", pes->ec.nPlies, _("ply"));
        break;
    case EVAL_ROLLOUT:
        strcat(sz, _("Rollout"));
        break;
    }

    if (pci->nMatchTo)
        sprintf(strchr(sz, 0), " %s %s (%s: %s)\n",
                (!pci->nMatchTo || (pci->nMatchTo && !fOutputMWC)) ?
                _("cubeless equity") : _("cubeless MWC"),
                OutputEquity(aarOutput[0][OUTPUT_EQUITY], pci, TRUE),
                _("Money"), OutputMoneyEquity(aarOutput[0], TRUE));
    else
        sprintf(strchr(sz, 0), " %s %s\n", _("cubeless equity"), OutputMoneyEquity(aarOutput[0], TRUE));




    /* Output percentags for evaluations */

    if (exsExport.fCubeDetailProb && pes->et == EVAL_EVAL) {

        strcat(sz, "  ");
        strcat(sz, OutputPercents(aarOutput[0], TRUE));

    }

    strcat(sz, "\n");

    /* equities */

    strcat(sz, _("Cubeful equities"));
    strcat(sz, ":\n");
    if (pes->et == EVAL_EVAL && exsExport.afCubeParameters[0]) {
        strcat(sz, "  ");
        strcat(sz, OutputEvalContext(&pes->ec, FALSE));
        strcat(sz, "\n");
    }

    getCubeDecisionOrdering(ai, arDouble, aarOutput, pci);

    for (i = 0; i < 3; i++) {

        sprintf(strchr(sz, 0), "%d. %-20s", i + 1, gettext(aszCube[ai[i]]));

        strcat(sz, OutputEquity(arDouble[ai[i]], pci, TRUE));

        if (i)
            sprintf(strchr(sz, 0), "  (%s)", OutputEquityDiff(arDouble[ai[i]], arDouble[OUTPUT_OPTIMAL], pci));
        strcat(sz, "\n");

    }

    /* cube decision */

    cd = FindBestCubeDecision(arDouble, aarOutput, pci);

    sprintf(strchr(sz, 0), "%s: %s", _("Proper cube action"), GetCubeRecommendation(cd));

    if ((r = getPercent(cd, arDouble)) >= 0.0)
        sprintf(strchr(sz, 0), " (%.1f%%)", 100.0f * r);

    strcat(sz, "\n");

    /* dump rollout */

    if (pes->et == EVAL_ROLLOUT && exsExport.fCubeDetailProb) {

        char asz[2][1024];
        cubeinfo aci[2];

        for (i = 0; i < 2; i++) {

            memcpy(&aci[i], pci, sizeof(cubeinfo));

            if (i) {
                aci[i].fCubeOwner = !pci->fMove;
                aci[i].nCube *= 2;
            }

            FormatCubePosition(asz[i], &aci[i]);

        }

        sprintf(strchr(sz, 0), "\n%s:\n", _("Rollout details"));

        strcat(strchr(sz, 0), OutputRolloutResult(NULL, asz, aarOutput, aarStdDev, aci, 0, 2, pes->rc.fCubeful));


    }

    if (pes->et == EVAL_ROLLOUT && exsExport.afCubeParameters[1])
        strcat(strchr(sz, 0), OutputRolloutContext(NULL, &pes->rc));

    return sz;
}