portal Michała Hanćkowiaka
Begin main content
wm withdraw .; wm geom .output 348x512+20+15; wm geom .konsola 588x675+382+15
##nagelfar syntax fiber_iterate c
##nagelfar syntax fiber_eval x c
##nagelfar syntax iterate n x c
##nagelfar syntax iterate1 n x c
##nagelfar syntax fiber s x*
##nagelfar subcmd fiber create yield error
##nagelfar syntax wyslij e x
##nagelfar syntax czytaj e

## cykl NIEzorient, demonstracja, 12.2023
# + w tym alg nie ma znaczenia ze cykl jest niezorient !!!
# + sa tu deklaracje dla nagelfar
#

source symul_lib.tcl; # ladowanie symulatora
source symul_graf_lib.tcl

# tworzymy graf komunikacyjny (w tym wypadku cykl)
set liczbaWierz 7
set sasiedzi(0) {6 1}
set sasiedzi(1) {0 2}
#set sasiedzi(2) {1 3}
set sasiedzi(2) {3 1}
set sasiedzi(3) {2 4}
set sasiedzi(4) {3 5}
set sasiedzi(5) {4 6}
set sasiedzi(6) {5 0}

fiber create $liczbaWierz run

fiber_iterate {
proc run {} {
  global id id_los run kom0 kom1
  if {$id==0 || $id==1} {
    wyslij 0 "$id_los 0"; wyslij 1 "$id_los 0"
  }
  fiber yield; # oznacza koniec rundy

  while {$run} { # zmienna run pozwala zakonczyc dzialanie symulacji!!
    while {$kom0!=""} {
      lassign [czytaj 0] x0 x1
      incr x1
      wyslij 1 "$x0 $x1"
    }
    while {$kom1!=""} {
      lassign [czytaj 1] x0 x1
      incr x1
      wyslij 0 "$x0 $x1"
    }
    fiber yield; # oznacza koniec rundy
  }
}
}

Inicjalizacja; # koniecznie trzeba to wywolac!!!

proc wizualizacja {} {
  _puts "---"
  fiber_iterate {_puts "$id, $id_los: $kom0, $kom1"}
}

G::rysujGraf; wm geom .t 234x513+12+26

# !!! do tego miejsca mozna wszystko wykonac !!!!!!!!!!!!!!!!!!

fiber error

#fiber restart

#.output.t delete 1.0 end; # czyszczenie output
#set_run 0; fiber yield; set_run 1; fiber restart
#fiber_iterate {set id_los [expr round(rand()*10000)]}

fiber yield; runda; wizualizacja




exit

uwaga: portal używa ciasteczek tylko do obsługi tzw. sesji...