/*
 * Domain Function:  solve
 */
void
sudoku_solve( void )
{
  i_t score;
  /* ASSIGN score = CELL::score() */
  score = sudoku_CELL_op_score();
  /* ::display(  ) */
  sudoku_display();
  /* SEQUENCE::solve() */
  sudoku_SEQUENCE_op_solve();
  /* ASSIGN score = CELL::score() */
  score = sudoku_CELL_op_score();
  /* IF ( ( 81 == score ) ) */
  if ( ( 81 == score ) ) {
    /* LOG::LogSuccess( message:'solved the puzzle' ) */
    LOG_LogSuccess( "solved the puzzle" );
  }
  else {
    /* LOG::LogFailure( message:'failed to solved the puzzle' ) */
    LOG_LogFailure( "failed to solved the puzzle" );
  }
  /* ::display(  ) */
  sudoku_display();

}
示例#2
0
文件: c2.c 项目: HebaKhaled/models
/*
 * Interface:  i2
 * Provided Port:  burn
 * To Provider Message:  o2
 */
i_t
c2_burn_o2( const i_t p_op2)
{
  /* <message compname="c2" compnum="1" portname="burn" portnum="1" msgname="o2" msgnum="0"/> */
  COMP_MSG_START_TRACE( "%d", 1, 1, 0, p_op2 );
  c_t s[ESCHER_SYS_MAX_STRING_LEN]; i_t p; 
  /* ASSIGN s = 'tac burn' */
  XTUML_OAL_STMT_TRACE( 1, "ASSIGN s = 'tac burn'" );
  Escher_strcpy( s, "tac burn" );
  /* LOG::LogInfo( message:s ) */
  XTUML_OAL_STMT_TRACE( 1, "LOG::LogInfo( message:s )" );
  LOG_LogInfo( s );
  /* ASSIGN p = PARAM.op2 */
  XTUML_OAL_STMT_TRACE( 1, "ASSIGN p = PARAM.op2" );
  p = p_op2;
  /* IF ( ( 2 != PARAM.op2 ) ) */
  XTUML_OAL_STMT_TRACE( 1, "IF ( ( 2 != PARAM.op2 ) )" );
  if ( ( 2 != p_op2 ) ) {
    /* LOG::LogFailure( message:'tac burn did not get 2' ) */
    XTUML_OAL_STMT_TRACE( 2, "LOG::LogFailure( message:'tac burn did not get 2' )" );
    LOG_LogFailure( "tac burn did not get 2" );
  }
  else {
    /* RETURN ( lase::o2(3) + 1 ) */
    XTUML_OAL_STMT_TRACE( 2, "RETURN ( lase::o2(3) + 1 )" );
    return ( c2_lase_o2( 3 ) + 1 );
  }
  /* RETURN 0 */
  XTUML_OAL_STMT_TRACE( 1, "RETURN 0" );
  return 0;
}
示例#3
0
/*
 * class operation:  validate
 */
void
ooaofooa_DOC_TBL_op_validate()
{
  ooaofooa_DOC_TBL * doc_tbl=0;Escher_ObjectSet_s doc_tbls_space={0}; Escher_ObjectSet_s * doc_tbls = &doc_tbls_space;
  /* SELECT many doc_tbls FROM INSTANCES OF DOC_TBL */
  Escher_CopySet( doc_tbls, &pG_ooaofooa_DOC_TBL_extent.active );
  /* FOR EACH doc_tbl IN doc_tbls */
  { Escher_Iterator_s iterdoc_tbl;
  ooaofooa_DOC_TBL * iidoc_tbl;
  Escher_IteratorReset( &iterdoc_tbl, doc_tbls );
  while ( (iidoc_tbl = (ooaofooa_DOC_TBL *)Escher_IteratorNext( &iterdoc_tbl )) != 0 ) {
    doc_tbl = iidoc_tbl; {
    ooaofooa_DOC_ROW * doc_row=0;ooaofooa_DOC_PAR * parent_doc_par=0;
    /* SELECT one parent_doc_par RELATED BY doc_tbl->DOC_PAR[R2315] */
    parent_doc_par = ( 0 != doc_tbl ) ? doc_tbl->DOC_PAR_R2315 : 0;
    /* SELECT one doc_row RELATED BY doc_tbl->DOC_ROW[R2317] */
    doc_row = ( 0 != doc_tbl ) ? doc_tbl->DOC_ROW_R2317_has_first : 0;
    /* IF ( ( empty parent_doc_par or empty doc_row ) ) */
    if ( ( ( 0 == parent_doc_par ) || ( 0 == doc_row ) ) ) {
      /* LOG::LogFailure( message:( ( !Table  + doc_tbl.title ) +  is not linked. ) ) */
      LOG_LogFailure( Escher_stradd( Escher_stradd( "!Table ", doc_tbl->title ), " is not linked." ) );
    }
  }}}
  Escher_ClearSet( doc_tbls );

}
示例#4
0
文件: c1.c 项目: HebaKhaled/models
/*
 * Interface:  i2
 * Provided Port:  burn
 * To Provider Message:  o2
 */
i_t
c1_burn_o2( const i_t p_op2)
{
  /* <message compname="c1" compnum="0" portname="burn" portnum="1" msgname="o2" msgnum="0"/> */
  COMP_MSG_START_TRACE( "%d", 0, 1, 0, p_op2 );
  c_t s[ESCHER_SYS_MAX_STRING_LEN]; 
  /* ASSIGN s = 'tic burn' */
  XTUML_OAL_STMT_TRACE( 1, "ASSIGN s = 'tic burn'" );
  Escher_strcpy( s, "tic burn" );
  /* LOG::LogInfo( message:s ) */
  XTUML_OAL_STMT_TRACE( 1, "LOG::LogInfo( message:s )" );
  LOG_LogInfo( s );
  /* IF ( ( 3 != PARAM.op2 ) ) */
  XTUML_OAL_STMT_TRACE( 1, "IF ( ( 3 != PARAM.op2 ) )" );
  if ( ( 3 != p_op2 ) ) {
    /* LOG::LogFailure( message:'tic burn did not get 3' ) */
    XTUML_OAL_STMT_TRACE( 2, "LOG::LogFailure( message:'tic burn did not get 3' )" );
    LOG_LogFailure( "tic burn did not get 3" );
  }
  else {
    /*  SEND toss::s1(sp1:1) */
    XTUML_OAL_STMT_TRACE( 2, " SEND toss::s1(sp1:1)" );
    c1_toss_s1( 1 );
  }
  /* RETURN 1 */
  XTUML_OAL_STMT_TRACE( 1, "RETURN 1" );
  return 1;
}
示例#5
0
文件: c1.c 项目: HebaKhaled/models
/*
 * Interface:  i1
 * Provided Port:  catch
 * To Provider Message:  s1
 */
void
c1_catch_s1( const i_t p_sp1)
{
  /* <message compname="c1" compnum="0" portname="catch" portnum="0" msgname="s1" msgnum="0"/> */
  COMP_MSG_START_TRACE( "%d", 0, 0, 0, p_sp1 );
  c_t s[ESCHER_SYS_MAX_STRING_LEN]; c1_PONG * pong=0; 
  /* ASSIGN s = 'tic catch' */
  XTUML_OAL_STMT_TRACE( 1, "ASSIGN s = 'tic catch'" );
  Escher_strcpy( s, "tic catch" );
  /* SELECT any pong FROM INSTANCES OF PONG */
  XTUML_OAL_STMT_TRACE( 1, "SELECT any pong FROM INSTANCES OF PONG" );
  pong = (c1_PONG *) Escher_SetGetAny( &pG_c1_PONG_extent.active );
  /* GENERATE PONG1:back() TO pong */
  XTUML_OAL_STMT_TRACE( 1, "GENERATE PONG1:back() TO pong" );
  { Escher_xtUMLEvent_t * e = Escher_NewxtUMLEvent( pong, &c1_PONGevent1c );
    Escher_SendEvent( e );
  }
  /* IF ( ( 3 != PARAM.sp1 ) ) */
  XTUML_OAL_STMT_TRACE( 1, "IF ( ( 3 != PARAM.sp1 ) )" );
  if ( ( 3 != p_sp1 ) ) {
    /* LOG::LogFailure( message:'tic catch did not get 3' ) */
    XTUML_OAL_STMT_TRACE( 2, "LOG::LogFailure( message:'tic catch did not get 3' )" );
    LOG_LogFailure( "tic catch did not get 3" );
  }
  else {
    i_t r; 
    /* ASSIGN r = lase::o2(op2:1) */
    XTUML_OAL_STMT_TRACE( 2, "ASSIGN r = lase::o2(op2:1)" );
    r = c1_lase_o2( 1 );
    /* IF ( ( 3 != r ) ) */
    XTUML_OAL_STMT_TRACE( 2, "IF ( ( 3 != r ) )" );
    if ( ( 3 != r ) ) {
      /* LOG::LogFailure( message:'tic catch did not get 3 returned from lase' ) */
      XTUML_OAL_STMT_TRACE( 3, "LOG::LogFailure( message:'tic catch did not get 3 returned from lase' )" );
      LOG_LogFailure( "tic catch did not get 3 returned from lase" );
    }
  }
}
/*
 * instance operation:  solve_by_pruning
 */
i_t
sudoku_SEQUENCE_op_solve_by_pruning( sudoku_SEQUENCE * self )
{
  i_t temperature;sudoku_ROW * row; /* row (ROW) */

  /* ASSIGN temperature = 0 */
  temperature = 0;
  /* SELECT one row RELATED BY self->ROW[R1] */
  row = self->R1_subtype;
  /* IF ( not_empty row ) */
  if ( ( 0 != row ) ) {
    /* ASSIGN temperature = row.prune() */
    temperature = sudoku_ROW_op_prune(row);
  }
  else {
    sudoku_COLUMN * column; /* column (COLUMN) */

    /* SELECT one column RELATED BY self->COLUMN[R1] */
    column = self->R1_subtype;
    /* IF ( not_empty column ) */
    if ( ( 0 != column ) ) {
      /* ASSIGN temperature = column.prune() */
      temperature = sudoku_COLUMN_op_prune(column);
    }
    else {
      sudoku_BOX * box; /* box (BOX) */

      /* SELECT one box RELATED BY self->BOX[R1] */
      box = self->R1_subtype;
      /* IF ( not_empty box ) */
      if ( ( 0 != box ) ) {
        /* ASSIGN temperature = box.prune() */
        temperature = sudoku_BOX_op_prune(box);
      }
      else {
        /* LOG::LogFailure( message:'could not prune related sequence' ) */
        LOG_LogFailure( "could not prune related sequence" );
      }
    }
  }
  /* RETURN temperature */
  return temperature ;

}
示例#7
0
/*
 * instance operation:  validate
 */
void
ooaofooa_DOC_DOC_op_validate( ooaofooa_DOC_DOC * self)
{
  ooaofooa_DOC_SEC * doc_sec=0;
  /* SELECT one doc_sec RELATED BY self->DOC_SEC[R2300] */
  doc_sec = ( 0 != self ) ? self->DOC_SEC_R2300_has_first : 0;
  /* IF ( empty doc_sec ) */
  if ( ( 0 == doc_sec ) ) {
    /* LOG::LogFailure( message:!Document has no first section. ) */
    LOG_LogFailure( "!Document has no first section." );
  }
  /* DOC_SEC::validate() */
  ooaofooa_DOC_SEC_op_validate();
  /* DOC_PAR::validate() */
  ooaofooa_DOC_PAR_op_validate();
  /* DOC_TBL::validate() */
  ooaofooa_DOC_TBL_op_validate();
  /* DOC_ROW::validate() */
  ooaofooa_DOC_ROW_op_validate();

}
示例#8
0
/*
 * class operation:  validate
 */
void
ooaofooa_DOC_SEC_op_validate()
{
  ooaofooa_DOC_SEC * doc_sec=0;Escher_ObjectSet_s doc_secs_space={0}; Escher_ObjectSet_s * doc_secs = &doc_secs_space;
  /* SELECT many doc_secs FROM INSTANCES OF DOC_SEC */
  Escher_CopySet( doc_secs, &pG_ooaofooa_DOC_SEC_extent.active );
  /* FOR EACH doc_sec IN doc_secs */
  { Escher_Iterator_s iterdoc_sec;
  ooaofooa_DOC_SEC * iidoc_sec;
  Escher_IteratorReset( &iterdoc_sec, doc_secs );
  while ( (iidoc_sec = (ooaofooa_DOC_SEC *)Escher_IteratorNext( &iterdoc_sec )) != 0 ) {
    doc_sec = iidoc_sec; {
    ooaofooa_DOC_SEC * predecessor_doc_sec=0;
    /* SELECT one predecessor_doc_sec RELATED BY doc_sec->DOC_SEC[R2306.precedes] */
    predecessor_doc_sec = ( 0 != doc_sec ) ? doc_sec->DOC_SEC_R2306_precedes : 0;
    /* IF ( empty predecessor_doc_sec ) */
    if ( ( 0 == predecessor_doc_sec ) ) {
      ooaofooa_DOC_SEC * parent_doc_sec=0;
      /* SELECT one parent_doc_sec RELATED BY doc_sec->DOC_SEC[R2307.has parent] */
      parent_doc_sec = ( 0 != doc_sec ) ? doc_sec->DOC_SEC_R2307_has_parent : 0;
      /* IF ( empty parent_doc_sec ) */
      if ( ( 0 == parent_doc_sec ) ) {
        ooaofooa_DOC_DOC * parent_doc_doc=0;
        /* SELECT one parent_doc_doc RELATED BY doc_sec->DOC_DOC[R2300] */
        parent_doc_doc = ( 0 != doc_sec ) ? doc_sec->DOC_DOC_R2300 : 0;
        /* IF ( empty parent_doc_doc ) */
        if ( ( 0 == parent_doc_doc ) ) {
          /* LOG::LogFailure( message:( ( !Section  + doc_sec.title ) +  is not linked. ) ) */
          LOG_LogFailure( Escher_stradd( Escher_stradd( "!Section ", doc_sec->title ), " is not linked." ) );
        }
      }
    }
  }}}
  Escher_ClearSet( doc_secs );

}
/*
 * Domain Function:  setup
 */
void
sudoku_setup( void )
{
    sudoku_SEQUENCE * sequence;
  /* SELECT any sequence FROM INSTANCES OF SEQUENCE */
  sequence = (sudoku_SEQUENCE *) Escher_SetGetAny( &pG_sudoku_SEQUENCE_extent.active );
  /* IF ( empty sequence ) */
  if ( ( 0 == sequence ) ) {
    i_t i;sudoku_DIGIT * digit;Escher_ObjectSet_s rows_space; Escher_ObjectSet_s * rows = &rows_space; /* rows (ROW) */sudoku_ROW * row;Escher_ObjectSet_s cells_space; Escher_ObjectSet_s * cells = &cells_space; /* cells (CELL) */sudoku_CELL * cell;
    Escher_InitSet( rows );Escher_InitSet( cells );
    /* ASSIGN i = NVS::space_used() */
    i = NVS_space_used();
    /* IF ( ( i < 100 ) ) */
    if ( ( i < 100 ) ) {
      /* ASSIGN i = NVS::format() */
      i = NVS_format();
      /* IF ( ( i != 0 ) ) */
      if ( ( i != 0 ) ) {
        /* LOG::LogFailure( message:'Error formatting the NVS.' ) */
        LOG_LogFailure( "Error formatting the NVS." );
      }
    }
    /* LOG::LogInfo( message:'Did not find any PEI data, initializing NVS' ) */
    LOG_LogInfo( "Did not find any PEI data, initializing NVS" );
    /* ASSIGN i = NVS::version(first:1, second:2) */
    i = NVS_version( 1, 2 );
    /* ASSIGN i = NVS::checksum(first:1, second:2) */
    i = NVS_checksum( 1, 2 );
    /* ASSIGN i = 9 */
    i = 9;
    /* WHILE ( ( 0 < i ) ) */
    while ( ( 0 < i ) ) {
      sudoku_DIGIT * digit;
      /* CREATE OBJECT INSTANCE digit OF DIGIT */
      digit = (sudoku_DIGIT *) Escher_CreateInstance( sudoku_DOMAIN_ID, sudoku_DIGIT_CLASS_NUMBER );
      /* ASSIGN digit.value = i */
      digit->value = i;
      /* ASSIGN i = ( i - 1 ) */
      i = ( i - 1 );
    }
    /* CREATE OBJECT INSTANCE digit OF DIGIT */
    digit = (sudoku_DIGIT *) Escher_CreateInstance( sudoku_DOMAIN_ID, sudoku_DIGIT_CLASS_NUMBER );
    /* ASSIGN digit.value = 0 */
    digit->value = 0;
    /* ASSIGN i = 9 */
    i = 9;
    /* WHILE ( ( 0 < i ) ) */
    while ( ( 0 < i ) ) {
      sudoku_ROW * row;sudoku_COLUMN * column;sudoku_BOX * box;
      /* CREATE OBJECT INSTANCE sequence OF SEQUENCE */
      sequence = (sudoku_SEQUENCE *) Escher_CreateInstance( sudoku_DOMAIN_ID, sudoku_SEQUENCE_CLASS_NUMBER );
      /* ASSIGN sequence.solved = FALSE */
      sequence->solved = FALSE;
      /* ASSIGN sequence.requests = 0 */
      sequence->requests = 0;
      /* CREATE OBJECT INSTANCE row OF ROW */
      row = (sudoku_ROW *) Escher_CreateInstance( sudoku_DOMAIN_ID, sudoku_ROW_CLASS_NUMBER );
      /* ASSIGN row.number = i */
      row->number = i;
      /* RELATE row TO sequence ACROSS R1 */
      sudoku_ROW_R1_Link( sequence, row );
      /* CREATE OBJECT INSTANCE sequence OF SEQUENCE */
      sequence = (sudoku_SEQUENCE *) Escher_CreateInstance( sudoku_DOMAIN_ID, sudoku_SEQUENCE_CLASS_NUMBER );
      /* ASSIGN sequence.solved = FALSE */
      sequence->solved = FALSE;
      /* ASSIGN sequence.requests = 0 */
      sequence->requests = 0;
      /* CREATE OBJECT INSTANCE column OF COLUMN */
      column = (sudoku_COLUMN *) Escher_CreateInstance( sudoku_DOMAIN_ID, sudoku_COLUMN_CLASS_NUMBER );
      /* ASSIGN column.number = i */
      column->number = i;
      /* RELATE column TO sequence ACROSS R1 */
      sudoku_COLUMN_R1_Link( sequence, column );
      /* CREATE OBJECT INSTANCE sequence OF SEQUENCE */
      sequence = (sudoku_SEQUENCE *) Escher_CreateInstance( sudoku_DOMAIN_ID, sudoku_SEQUENCE_CLASS_NUMBER );
      /* ASSIGN sequence.solved = FALSE */
      sequence->solved = FALSE;
      /* ASSIGN sequence.requests = 0 */
      sequence->requests = 0;
      /* CREATE OBJECT INSTANCE box OF BOX */
      box = (sudoku_BOX *) Escher_CreateInstance( sudoku_DOMAIN_ID, sudoku_BOX_CLASS_NUMBER );
      /* ASSIGN box.number = i */
      box->number = i;
      /* RELATE box TO sequence ACROSS R1 */
      sudoku_BOX_R1_Link( sequence, box );
      /* ASSIGN i = ( i - 1 ) */
      i = ( i - 1 );
    }
    /* SELECT many rows FROM INSTANCES OF ROW */
    Escher_CopySet( rows, &pG_sudoku_ROW_extent.active );
    /* FOR EACH row IN rows */
    { Escher_Iterator_s iter1;
  sudoku_ROW * sudoku_ROWiter1;
  Escher_IteratorReset( &iter1, rows );
  while ( (sudoku_ROWiter1 = (sudoku_ROW *)Escher_IteratorNext( &iter1 )) != 0 ) {
    row = sudoku_ROWiter1; {
      Escher_ObjectSet_s columns_space; Escher_ObjectSet_s * columns = &columns_space; /* columns (COLUMN) */sudoku_COLUMN * column;
      Escher_InitSet( columns );
      /* SELECT many columns FROM INSTANCES OF COLUMN */
      Escher_CopySet( columns, &pG_sudoku_COLUMN_extent.active );
      /* FOR EACH column IN columns */
      { Escher_Iterator_s iter3;
  sudoku_COLUMN * sudoku_COLUMNiter3;
  Escher_IteratorReset( &iter3, columns );
  while ( (sudoku_COLUMNiter3 = (sudoku_COLUMN *)Escher_IteratorNext( &iter3 )) != 0 ) {
    column = sudoku_COLUMNiter3; {
        sudoku_CELL * cell;Escher_ObjectSet_s digits_space; Escher_ObjectSet_s * digits = &digits_space; /* digit (DIGIT) */
        Escher_InitSet( digits );
        /* CREATE OBJECT INSTANCE cell OF CELL */
        cell = (sudoku_CELL *) Escher_CreateInstance( sudoku_DOMAIN_ID, sudoku_CELL_CLASS_NUMBER );
        /* SELECT any digit FROM INSTANCES OF DIGIT WHERE ( SELECTED.value == 0 ) */
        digit = 0;
{ sudoku_DIGIT * selected;
  Escher_Iterator_s iter30_DIGIT;
  Escher_IteratorReset( &iter30_DIGIT, &pG_sudoku_DIGIT_extent.active );
  while ( (selected = (sudoku_DIGIT *) Escher_IteratorNext( &iter30_DIGIT )) != 0 ) {
    if ( ( selected->value == 0 ) ) {
      digit = selected;
      break;
    }
  }
}
        /* RELATE cell TO digit ACROSS R9 */
        sudoku_CELL_R9_Link( digit, cell );
        /* RELATE cell TO row ACROSS R2 */
        sudoku_CELL_R2_Link( row, cell );
        /* RELATE cell TO column ACROSS R3 */
        sudoku_CELL_R3_Link( column, cell );
        /* SELECT many digits FROM INSTANCES OF DIGIT WHERE ( SELECTED.value != 0 ) */
        Escher_ClearSet( digits );
{ sudoku_DIGIT * selected;
  Escher_Iterator_s iter31_DIGIT;
  Escher_IteratorReset( &iter31_DIGIT, &pG_sudoku_DIGIT_extent.active );
  while ( (selected = (sudoku_DIGIT *) Escher_IteratorNext( &iter31_DIGIT )) != 0 ) {
    if ( ( selected->value != 0 ) ) {
      Escher_SetInsertElement( digits, selected );
    }
  }
}
        /* FOR EACH digit IN digits */
        { Escher_Iterator_s iter4;
  sudoku_DIGIT * sudoku_DIGITiter4;
  Escher_IteratorReset( &iter4, digits );
  while ( (sudoku_DIGITiter4 = (sudoku_DIGIT *)Escher_IteratorNext( &iter4 )) != 0 ) {
    digit = sudoku_DIGITiter4; {
          sudoku_ELIGIBLE * eligible;
          /* CREATE OBJECT INSTANCE eligible OF ELIGIBLE */
          eligible = (sudoku_ELIGIBLE *) Escher_CreateInstance( sudoku_DOMAIN_ID, sudoku_ELIGIBLE_CLASS_NUMBER );
          /* RELATE digit TO cell ACROSS R8 USING eligible */
          sudoku_ELIGIBLE_R8_Link( cell, digit, eligible );
          }}
}
        Escher_ClearSet( digits );  /* Clear set: digit */
        }}
}
      Escher_ClearSet( columns );
      }}
}
    /* SELECT many cells FROM INSTANCES OF CELL */
    Escher_CopySet( cells, &pG_sudoku_CELL_extent.active );
    /* FOR EACH cell IN cells */
    { Escher_Iterator_s iter2;
  sudoku_CELL * sudoku_CELLiter2;
  Escher_IteratorReset( &iter2, cells );
  while ( (sudoku_CELLiter2 = (sudoku_CELL *)Escher_IteratorNext( &iter2 )) != 0 ) {
    cell = sudoku_CELLiter2; {
      /* IF ( ( ( cell.row_number <= 3 ) and ( cell.column_number <= 3 ) ) ) */
      if ( ( ( cell->row_number <= 3 ) && ( cell->column_number <= 3 ) ) ) {
        sudoku_BOX * box;
        /* SELECT any box FROM INSTANCES OF BOX WHERE ( SELECTED.number == 1 ) */
        box = 0;
{ sudoku_BOX * selected;
  Escher_Iterator_s iter32_BOX;
  Escher_IteratorReset( &iter32_BOX, &pG_sudoku_BOX_extent.active );
  while ( (selected = (sudoku_BOX *) Escher_IteratorNext( &iter32_BOX )) != 0 ) {
    if ( ( selected->number == 1 ) ) {
      box = selected;
      break;
    }
  }
}
        /* RELATE cell TO box ACROSS R4 */
        sudoku_CELL_R4_Link( box, cell );
      }
      else if ( ( ( cell->row_number <= 3 ) && ( ( 4 <= cell->column_number ) && ( cell->column_number <= 6 ) ) ) ) {
        sudoku_BOX * box;
        /* SELECT any box FROM INSTANCES OF BOX WHERE ( SELECTED.number == 2 ) */
        box = 0;
{ sudoku_BOX * selected;
  Escher_Iterator_s iter33_BOX;
  Escher_IteratorReset( &iter33_BOX, &pG_sudoku_BOX_extent.active );
  while ( (selected = (sudoku_BOX *) Escher_IteratorNext( &iter33_BOX )) != 0 ) {
    if ( ( selected->number == 2 ) ) {
      box = selected;
      break;
    }
  }
}
        /* RELATE cell TO box ACROSS R4 */
        sudoku_CELL_R4_Link( box, cell );
      }
      else if ( ( ( cell->row_number <= 3 ) && ( 7 <= cell->column_number ) ) ) {
        sudoku_BOX * box;
        /* SELECT any box FROM INSTANCES OF BOX WHERE ( SELECTED.number == 3 ) */
        box = 0;
{ sudoku_BOX * selected;
  Escher_Iterator_s iter34_BOX;
  Escher_IteratorReset( &iter34_BOX, &pG_sudoku_BOX_extent.active );
  while ( (selected = (sudoku_BOX *) Escher_IteratorNext( &iter34_BOX )) != 0 ) {
    if ( ( selected->number == 3 ) ) {
      box = selected;
      break;
    }
  }
}
        /* RELATE cell TO box ACROSS R4 */
        sudoku_CELL_R4_Link( box, cell );
      }
      else if ( ( ( ( 4 <= cell->row_number ) && ( cell->row_number <= 6 ) ) && ( cell->column_number <= 3 ) ) ) {
        sudoku_BOX * box;
        /* SELECT any box FROM INSTANCES OF BOX WHERE ( SELECTED.number == 4 ) */
        box = 0;
{ sudoku_BOX * selected;
  Escher_Iterator_s iter35_BOX;
  Escher_IteratorReset( &iter35_BOX, &pG_sudoku_BOX_extent.active );
  while ( (selected = (sudoku_BOX *) Escher_IteratorNext( &iter35_BOX )) != 0 ) {
    if ( ( selected->number == 4 ) ) {
      box = selected;
      break;
    }
  }
}
        /* RELATE cell TO box ACROSS R4 */
        sudoku_CELL_R4_Link( box, cell );
      }
      else if ( ( ( ( 4 <= cell->row_number ) && ( cell->row_number <= 6 ) ) && ( ( 4 <= cell->column_number ) && ( cell->column_number <= 6 ) ) ) ) {
        sudoku_BOX * box;
        /* SELECT any box FROM INSTANCES OF BOX WHERE ( SELECTED.number == 5 ) */
        box = 0;
{ sudoku_BOX * selected;
  Escher_Iterator_s iter36_BOX;
  Escher_IteratorReset( &iter36_BOX, &pG_sudoku_BOX_extent.active );
  while ( (selected = (sudoku_BOX *) Escher_IteratorNext( &iter36_BOX )) != 0 ) {
    if ( ( selected->number == 5 ) ) {
      box = selected;
      break;
    }
  }
}
        /* RELATE cell TO box ACROSS R4 */
        sudoku_CELL_R4_Link( box, cell );
      }
      else if ( ( ( ( 4 <= cell->row_number ) && ( cell->row_number <= 6 ) ) && ( 7 <= cell->column_number ) ) ) {
        sudoku_BOX * box;
        /* SELECT any box FROM INSTANCES OF BOX WHERE ( SELECTED.number == 6 ) */
        box = 0;
{ sudoku_BOX * selected;
  Escher_Iterator_s iter37_BOX;
  Escher_IteratorReset( &iter37_BOX, &pG_sudoku_BOX_extent.active );
  while ( (selected = (sudoku_BOX *) Escher_IteratorNext( &iter37_BOX )) != 0 ) {
    if ( ( selected->number == 6 ) ) {
      box = selected;
      break;
    }
  }
}
        /* RELATE cell TO box ACROSS R4 */
        sudoku_CELL_R4_Link( box, cell );
      }
      else if ( ( ( 7 <= cell->row_number ) && ( cell->column_number <= 3 ) ) ) {
        sudoku_BOX * box;
        /* SELECT any box FROM INSTANCES OF BOX WHERE ( SELECTED.number == 7 ) */
        box = 0;
{ sudoku_BOX * selected;
  Escher_Iterator_s iter38_BOX;
  Escher_IteratorReset( &iter38_BOX, &pG_sudoku_BOX_extent.active );
  while ( (selected = (sudoku_BOX *) Escher_IteratorNext( &iter38_BOX )) != 0 ) {
    if ( ( selected->number == 7 ) ) {
      box = selected;
      break;
    }
  }
}
        /* RELATE cell TO box ACROSS R4 */
        sudoku_CELL_R4_Link( box, cell );
      }
      else if ( ( ( 7 <= cell->row_number ) && ( ( 4 <= cell->column_number ) && ( cell->column_number <= 6 ) ) ) ) {
        sudoku_BOX * box;
        /* SELECT any box FROM INSTANCES OF BOX WHERE ( SELECTED.number == 8 ) */
        box = 0;
{ sudoku_BOX * selected;
  Escher_Iterator_s iter39_BOX;
  Escher_IteratorReset( &iter39_BOX, &pG_sudoku_BOX_extent.active );
  while ( (selected = (sudoku_BOX *) Escher_IteratorNext( &iter39_BOX )) != 0 ) {
    if ( ( selected->number == 8 ) ) {
      box = selected;
      break;
    }
  }
}
        /* RELATE cell TO box ACROSS R4 */
        sudoku_CELL_R4_Link( box, cell );
      }
      else if ( ( ( 7 <= cell->row_number ) && ( 7 <= cell->column_number ) ) ) {
        sudoku_BOX * box;
        /* SELECT any box FROM INSTANCES OF BOX WHERE ( SELECTED.number == 9 ) */
        box = 0;
{ sudoku_BOX * selected;
  Escher_Iterator_s iter40_BOX;
  Escher_IteratorReset( &iter40_BOX, &pG_sudoku_BOX_extent.active );
  while ( (selected = (sudoku_BOX *) Escher_IteratorNext( &iter40_BOX )) != 0 ) {
    if ( ( selected->number == 9 ) ) {
      box = selected;
      break;
    }
  }
}
        /* RELATE cell TO box ACROSS R4 */
        sudoku_CELL_R4_Link( box, cell );
      }
      }}
}
    Escher_ClearSet( rows );Escher_ClearSet( cells );
  }
  else {
    /* LOG::LogInfo( message:'PEI data found.' ) */
    LOG_LogInfo( "PEI data found." );
  }

}