proc AddToQueue {queue s} {
  upvar $queue q

  lappend q $s
}

proc RemoveFromQueue {queue} {
  upvar $queue q

  set s [lindex $q 0]
  set q [lreplace $q 0 0]
  return $s
}

set qu ""
AddToQueue qu "First"
AddToQueue qu "Second"
AddToQueue qu "Third"
AddToQueue qu "Fourth"

while {[set s [RemoveFromQueue qu]] != ""} {
  puts $s
}
