ohmega bidirectional rm raytrace.2d /bin/umodem raytrace.2d plop ,........................|....., :main v : :*=================* *=======*: :!send [(Inl (),E)]!->!use ray!- :*=================* *=======*: ,.............................., ,......|........................................................................., :ray v : :*==================* *==============* *=================* : :!send [(N,S),(N,E)]!->!case W of S, E!->!send [(Inl (),E)]!---------------------- :*==================* *==============* *=================* : : | | : : v | : :*==================* v : :!send [(N,S),(N,E)]!-+ *=======* *==================* : :*==================* | !split N!--->!send [(W,S),(W,E)]!------------+ : : | | *=======* *==================* | : : | +----------------+ | | | : : | | v | | : : | | *=======* *=======*| *=======* | : : | | !split N!->!split W!#>!split W!------------#--+ : : | | *=======* *=======*| *=======* | | : : | | | | | | | | : : | | v +---#---#-----+ | | : : | | *==============* | | | | | : : | | !case N of S, E!-+ | | | | | : : | | *==============* | | | | | | : :+-#-#-------------------------#-----------+ | | | | | : :| | | v | | v | | : :| | | *==================* *============* | | *=======* | | : -#-#-#>!send [(W,S),(W,E)]!->!send [(W,S)]! +-+ | +->!use tms!--+ | | : :| | | *==================* *============* | | | *=======* | | | : :| | | | +----#-------------#-----#-+ | | | : :| | | | | | v v v | v : :| | +--#-----------------#----#---+ *=======* *=======* *=======*| *=======*: :| | | | | | +>!use ray!->!use tms!->!use pls!#>!use pls!- :| | | | | | | *=======* *=======* *=======*| *=======*: :| | v | | | | | : :| | *==================* | | | +------+ | : :| | !send [(N,S),(N,E)]!-+ | v | | : :| | *==================* | *=======* | | : :| | | +->!use mir!-+ | : :| | | +-------+ *=======* | : :| | | | | +--------------------------+ : :| | v | v v : :| | *============* | *=======* *=======* : :+-#-->!send [(N,E)]!-#-->!use mir!--->!use ray!---------------------------------- : | *============* | *=======* *=======* : : +------------------+ : ,................................................................................, ,......|.........................................................................., :mir v : : *==============* *=======* : : !case N of E, S!---->!split W!------+ : : *==============* *=======* | : : +-------------------------+ | : : v | +------------------+ : : *=======* *=======* *=======* | | | : : !split N!---->!split W!->!split W!------#----------#------------------#------+ : : *=======* *=======* *=======* | | | | : : | | | | | v | : : v | | | | *=======* | : : *==============* +-------#----------#--------+ | +-->!use pls!-+| : : !case N of S, E!---------+ | | | | | *=======* || : : *==============* | +----------#--------#-#-----+ +---+ || : : | | | | | v | || : : +--------------+ | | | | *=======* | +------+| : : | v | | | +->!use tms!-+ | v : : *==================* | *============* | | | | *=======* | *=======*: ->!send [(W,E),(W,S)]!--#->!send [(W,E)]!-#--------#-#-#-----------+ +>!use pls!- : *==================* | *============* | | | +------+ | *=======*: : | | | | +------+ | +--------------- : v v v v | | : :*==================* *============* *=======* *=======* | | : :!send [(N,E),(N,S)]!->!send [(W,E)]!->!use ray!->!use tms!-+ | : :*==================* *============* *=======* *=======* | : : | | : : +-----------------------------------------------------+ : ,................................................................................., ,..............|........................................., :pls v : : *==============* : : !case N of E, S!----+ : : *==============* v : : *==================* | *============* : ->!send [(W,S),(W,E)]!-#->!send [(W,E)]!------------------ : *==================* v *============* : : | *==============* : : | !case N of E, S!--+ : : | *==============* v : : | | *==============* *=====================* : : +---------#>!case W of E, S!->!send [(Inr Inl (),E)]!-- : | *==============* *=====================* : : | | *=========================* : : | +---->!send [(Inr Inr Inl (),E)]!-- : | *=========================* : : | *=========================* : : +-------------->!send [(Inr Inr Inl (),E)]!-- : *=========================* : ,........................................................, ,.............|................................................, :tms v +----------------------+ : :*==============* | *==============* | *=================*: :!case N of E, S!-+ +>!case W of E, S!-+ +->!send [(Inl (),E)]!- :*==============* ++*==============* | *=================*: : +------------------+ | v : : *==================* | *==============* *=================*: ->!send [(W,S),(W,E)]!-#>!case W of E, S!-->!send [(Inl (),E)]!- : *==================* | *==============* *=================*: : | | | *=====================*: : | | +--------->!send [(Inr Inl (),E)]!- : | v *=====================*: : | *==============* *=================*: : +-->!case W of E, S!------------------>!send [(Inl (),E)]!- : *==============* *=================*: : | *==============* *=====================*: : +------->!case W of E, S!->!send [(Inr Inl (),E)]!- : *==============* *=====================*: : | *=========================*: : +---->!send [(Inr Inr Inl (),E)]!- : *=========================*: ,.............................................................., plop ./verify raytrace raytrace.2d