digraph febug {
subgraph server {
listen [label="Listening",shape=box];
maybe_first [label="If first, assign directory",shape=box];
receive_febug_message [label="Make file under directory",shape=box];
receive_stop_febug_message [label="Disappear file",shape=box];
definitely_last [label="Disappear directory",shape=box];
send_open [label="Send attn_febug_message and pipe",shape=box];
send_kill [label="Send signal, if requested",shape=box];
send_read [label="Copy from pipe",shape=box];
}
subgraph program {
connection [label="Connection"];
febug_message [label="Sends febug_message"];
doing_stuff [label="Does stuff"];
stop_febug_message [label="Sends stop_febug_message"];
hang_up [label="Disconnection"];
get_signal [label="Serialise data to pipe"];
}
subgraph user {
open [label="open(\"/420/cool_data\")",shape=trapezium];
read [label="read(3, buf)",shape=trapezium];
close [label="close(3)",shape=trapezium];
}
listen -> listen;
maybe_first -> receive_febug_message;
receive_febug_message -> listen;
receive_stop_febug_message -> listen;
definitely_last -> listen;
connection -> febug_message;
febug_message -> doing_stuff;
doing_stuff -> stop_febug_message;
stop_febug_message -> hang_up;
connection -> listen;
febug_message -> maybe_first;
stop_febug_message -> receive_stop_febug_message;
hang_up -> definitely_last;
open -> listen;
open -> read;
read -> close;
read -> send_read;
listen -> send_open;
send_open -> send_kill;
send_kill -> open;
send_open -> get_signal;
get_signal -> send_read;
send_read -> read;
}