/* #Specification: guruiter / principles
The guruiter may replace a gurusteps component if you have
to repeat the same question a few time. Instead of having
#
(...);
// One branche
// Another branche
#
you do
#
(3,...);
// The step parameter is supplied so you know where
// you are in the iteration
// The step parameter is also provided here.
// One branche
// Another branche
#
*/
#include "guruengine.h"
class guruiter_private {
public:
_F_gurupath *p;
};
void _F_guruiter::settitle (const char *title)
{
priv->p->settitle (title);
}
void _F_guruiter::setintro (const char *intro)
{
priv->p->setintro (intro);
}
void _F_guruiter::seticon (const char *icon)
{
priv->p->seticon (icon);
}
void _F_guruiter::attention ()
{
priv->p->attention ();
}
void _F_guruiter::allfine ()
{
priv->p->allfine ();
}
void _F_guruiter::setterminal (const char *s, const char *l)
{
priv->p->setterminal (s,l);
}
bool _F_guruiter::edit ()
{
return priv->p->edit ();
}
bool _F_guruiter::edit (HELP_FILE &help)
{
return priv->p->edit (help);
}
void _F_guruiter::setcursor (int nof)
{
priv->p->setcursor (nof);
}
void _F_guruiter::path1 (
GURUPATH_MODE,
GURUPATH_STATUS &status)
{
status.nodemissing = true;
}
void _F_guruiter::path2 (
GURUPATH_MODE,
GURUPATH_STATUS &status)
{
status.nodemissing = true;
}
void _F_guruiter::path3 (
GURUPATH_MODE,
GURUPATH_STATUS &status)
{
status.nodemissing = true;
}
void _F_guruiter::path4 (
GURUPATH_MODE,
GURUPATH_STATUS &status)
{
status.nodemissing = true;
}
void _F_guruiter::path5 (
GURUPATH_MODE,
GURUPATH_STATUS &status)
{
status.nodemissing = true;
}
void _F_guruiter::path6 (
GURUPATH_MODE,
GURUPATH_STATUS &status)
{
status.nodemissing = true;
}
static void guruiter0 (
_F_guruiter &c,
int nostep,
int nbsteps,
GURUPATH_MODE mode,
GURUPATH_STATUS &status);
static void guruiter0 (
_F_guruiter &c,
int nostep,
int nbsteps,
GURUPATH_MODE mode,
GURUPATH_STATUS &status)
{
_F_guruiter *c;
int nbsteps;
int nostep;
int nextstep;
bool moreiter;
glocal.c = &c;
glocal.nbsteps = nbsteps;
glocal.nostep = nostep;
glocal.nextstep = nostep+1;
glocal.moreiter = glocal.nextstep < nbsteps;
(mode,status);
glocal.c->priv->p = this;
glocal.c->eval (glocal.nostep,mode,status);
glocal.c->priv->p = this;
glocal.c->dialog (glocal.nostep,dia);
if (glocal.moreiter){
guruiter0 (*glocal.c,glocal.nextstep,glocal.nbsteps,mode,status);
}else{
glocal.c->path1(mode,status);
}
if (glocal.moreiter){
status.nodemissing = true;
}else{
glocal.c->path2(mode,status);
}
if (glocal.moreiter){
status.nodemissing = true;
}else{
glocal.c->path3(mode,status);
}
if (glocal.moreiter){
status.nodemissing = true;
}else{
glocal.c->path4(mode,status);
}
if (glocal.moreiter){
status.nodemissing = true;
}else{
glocal.c->path5(mode,status);
}
if (glocal.moreiter){
status.nodemissing = true;
}else{
glocal.c->path6(mode,status);
}
}
void guruiter (
_F_guruiter &c,
int nbsteps,
GURUPATH_MODE mode,
GURUPATH_STATUS &status)
{
guruiter_private priv;
c.priv = &priv;
guruiter0(c,0,nbsteps,mode,status);
}