--- /dev/null
+%! SDL shapes for Graphviz/dot in PostScript output mode
+
+% FILE
+% sdl.ps - SDL shapes for Graphviz/dot in PostScript output mode
+%
+% USE
+% All procedures expect to be passed a rectangular bounding box in the
+% order [upper right, lower right, lower left, upper left, upper right].
+% All procedures expect to be used with "peripheries = 0".
+%
+% BUGS
+% The following shapes are currently not implemented:
+% - frame/system/block/process/procedure/service/procedure, and types thereof
+% - macro inlet/outlet/call
+% - exception handler/handle/raise
+% - decision (suggest use diamond)
+% - alternative (suggest use triangle)
+% - internal input/output (suggest stop using historical relics!)
+%
+% COPYRIGHT AND PERMISSION NOTICE
+% Copyright (C) 2005 Cambridge Silicon Radio Ltd.; all rights reserved.
+%
+% Permission is hereby granted, free of charge, to any person obtaining
+% a copy of this software and associated documentation files (the
+% "Software"), to deal in the Software without restriction, including
+% without limitation the rights to use, copy, modify, merge, publish,
+% distribute, sublicense, and/or sell copies of the Software, and to
+% permit persons to whom the Software is furnished to do so, subject to
+% the following conditions:
+%
+% The above copyright notice and this permission notice shall be
+% included in all copies or substantial portions of the Software.
+%
+% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+% EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+% MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+% NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+% LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+% OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+% WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+%
+% Except as contained in this notice, the name of a copyright holder
+% shall not be used in advertising or otherwise to promote the sale, use
+% or other dealings in the Software without prior written authorization
+% of the copyright holder.
+%
+% REVISION
+% #4
+
+/xdef {exch def} bind def
+
+% SDL task
+
+/sdl_task {
+ 3 1 roll % put filled flag at end
+ 4 ne { stop } if % sanity-check number of sides
+ aload pop
+ newpath
+ moveto
+ lineto
+ lineto
+ lineto
+ pop pop
+ closepath
+ { fill } { stroke } ifelse
+} bind def
+
+% SDL input from right
+% The indent has lines at 45 degrees
+% There should be a few spaces at the end of this shape's label
+
+/sdl_input_from_right {
+ 9 dict begin
+ 3 1 roll % put filled flag at end
+ 4 ne { stop } if % sanity-check number of sides
+ aload pop
+ /ury xdef /urx xdef
+ /lry xdef /lrx xdef
+ /lly xdef /llx xdef
+ /uly xdef /ulx xdef
+ /h2 ury lry sub 2 div def
+ newpath
+ moveto
+ urx h2 sub ury h2 sub lineto
+ lrx lry lineto
+ llx lly lineto
+ ulx uly lineto
+ closepath
+ { fill } { stroke } ifelse
+ end
+} bind def
+
+% SDL input from left
+% Similar to SDL input from right
+% There should be a few spaces at the start of this shape's label
+
+/sdl_input_from_left {
+ 9 dict begin
+ 3 1 roll % put filled flag at end
+ 4 ne { stop } if % sanity-check number of sides
+ aload pop
+ /ury xdef /urx xdef
+ /lry xdef /lrx xdef
+ /lly xdef /llx xdef
+ /uly xdef /ulx xdef
+ /h2 uly lly sub 2 div def
+ newpath
+ moveto
+ lrx lry lineto
+ llx lly lineto
+ ulx h2 add ury h2 sub lineto
+ ulx uly lineto
+ closepath
+ { fill } { stroke } ifelse
+ end
+} bind def
+
+% SDL priority input from right
+% Similar to SDL input from right
+% The chevrons are displaced by an eighth of the shape height
+% The filled version is indistinguishable from a non-priority SDL input
+
+/sdl_priority_input_from_right {
+ 9 dict begin
+ 3 1 roll % put filled flag at end
+ 4 ne { stop } if % sanity-check number of sides
+ aload pop
+ /ury xdef /urx xdef
+ /lry xdef /lrx xdef
+ /lly xdef /llx xdef
+ /uly xdef /ulx xdef
+ /h2 ury lry sub 2 div def
+ newpath
+ moveto
+ urx h2 sub ury h2 sub lineto
+ lrx lry lineto
+ llx lly lineto
+ ulx uly lineto
+ closepath
+ { fill } { stroke
+ urx h2 4 div sub ury moveto
+ urx h2 sub h2 4 div sub ury h2 sub lineto
+ lrx h2 4 div sub lry lineto
+ stroke } ifelse
+ end
+} bind def
+
+% SDL priority input from left
+% Similar to SDL priority input from right
+
+/sdl_priority_input_from_left {
+ 9 dict begin
+ 3 1 roll % put filled flag at end
+ 4 ne { stop } if % sanity-check number of sides
+ aload pop
+ /ury xdef /urx xdef
+ /lry xdef /lrx xdef
+ /lly xdef /llx xdef
+ /uly xdef /ulx xdef
+ /h2 uly lly sub 2 div def
+ newpath
+ moveto
+ lrx lry lineto
+ llx lly lineto
+ ulx h2 add uly h2 sub lineto
+ ulx uly lineto
+ closepath
+ { fill } { stroke
+ llx h2 4 div add lly moveto
+ ulx h2 add h2 4 div add uly h2 sub lineto
+ ulx h2 4 div add uly lineto
+ stroke } ifelse
+ end
+} bind def
+
+% SDL start
+% The left and right sides are semicircles
+% This should be used with "label = " ""
+
+/sdl_start {
+ 9 dict begin
+ 3 1 roll % put filled flag at end
+ 4 ne { stop } if % sanity-check number of sides
+ aload pop
+ /ury xdef /urx xdef
+ /lry xdef /lrx xdef
+ /lly xdef /llx xdef
+ /uly xdef /ulx xdef
+ pop pop
+ /r ury lry sub 2 div def
+ newpath
+ urx r sub ury r sub r 90 -90 arcn
+ ulx r add uly r sub r -90 90 arcn
+ closepath
+ { fill } { stroke } ifelse
+ end
+} bind def
+
+% SDL procedure start
+% Similar to SDL start
+% The filled version is indistinguishable from an SDL start
+% This should be used with "label = " ""
+
+/sdl_procedure_start {
+ 9 dict begin
+ 3 1 roll % put filled flag at end
+ 4 ne { stop } if % sanity-check number of sides
+ aload pop
+ /ury xdef /urx xdef
+ /lry xdef /lrx xdef
+ /lly xdef /llx xdef
+ /uly xdef /ulx xdef
+ pop pop
+ /r ury lry sub 2 div def
+ newpath
+ urx r sub ury r sub r 90 -90 arcn
+ ulx r add uly r sub r -90 90 arcn
+ closepath
+ { fill } { stroke
+ lrx r sub lry moveto
+ 0 r 2 mul rlineto
+ llx r add lly moveto
+ 0 r 2 mul rlineto
+ stroke } ifelse
+ end
+} bind def
+
+% SDL state/nextstate
+% The left and right sides are arcs
+
+/sdl_state {
+ 12 dict begin
+ 3 1 roll % put filled flag at end
+ 4 ne { stop } if % sanity-check number of sides
+ aload pop
+ /ury xdef /urx xdef
+ /lry xdef /lrx xdef
+ /lly xdef /llx xdef
+ /uly xdef /ulx xdef
+ pop pop
+ /h2 ury lry sub 2 div def
+ /w2 h2 1.5 mul def % was urx ulx sub 2 div def but this made curvature width-dependent
+ /r w2 def
+ /th h2 r dup mul h2 dup mul sub sqrt atan def
+ newpath
+ urx w2 sub ury h2 sub r th th neg arcn
+ ulx w2 add uly h2 sub r -180 th add -180 th sub arcn
+ closepath
+ { fill } { stroke } ifelse
+ end
+} bind def
+
+% SDL output to right
+% The outdent has lines at 45 degrees
+% There should be a few spaces at the end of this shape's label
+
+/sdl_output_to_right {
+ 9 dict begin
+ 3 1 roll % put filled flag at end
+ 4 ne { stop } if % sanity-check number of sides
+ aload pop
+ /ury xdef /urx xdef
+ /lry xdef /lrx xdef
+ /lly xdef /llx xdef
+ /uly xdef /ulx xdef
+ /h2 ury lry sub 2 div def
+ newpath
+ exch h2 sub exch moveto
+ urx ury h2 sub lineto
+ lrx h2 sub lry lineto
+ llx lly lineto
+ ulx uly lineto
+ closepath
+ { fill } { stroke } ifelse
+ end
+} bind def
+
+% SDL output to left
+% Similar to SDL output to right
+% There should be a few spaces at the start of this shape's label
+
+/sdl_output_to_left {
+ 9 dict begin
+ 3 1 roll % put filled flag at end
+ 4 ne { stop } if % sanity-check number of sides
+ aload pop
+ /ury xdef /urx xdef
+ /lry xdef /lrx xdef
+ /lly xdef /llx xdef
+ /uly xdef /ulx xdef
+ /h2 ury lry sub 2 div def
+ newpath
+ moveto
+ lrx lry lineto
+ llx h2 add lly lineto
+ ulx ury h2 sub lineto
+ ulx h2 add uly lineto
+ closepath
+ { fill } { stroke } ifelse
+ end
+} bind def
+
+% SDL continuous signal/enabling condition
+% The chevrons have lines at 45 degrees
+% There should be a few spaces at the start and end of this shape's label
+
+/sdl_condition {
+ 9 dict begin
+ 3 1 roll % put filled flag at end
+ 4 ne { stop } if % sanity-check number of sides
+ aload pop
+ /ury xdef /urx xdef
+ /lry xdef /lrx xdef
+ /lly xdef /llx xdef
+ /uly xdef /ulx xdef
+ /h2 ury lry sub 2 div def
+ newpath
+ exch h2 sub exch moveto
+ urx ury h2 sub lineto
+ lrx h2 sub lry lineto
+ dup llx h2 add lly 3 -1 roll { lineto } { moveto } ifelse
+ ulx uly h2 sub lineto
+ ulx h2 add uly lineto
+ { fill } { stroke } ifelse
+ end
+} bind def
+
+% SDL save
+% The left and right edges are at about 60 degrees
+% There should be a few spaces at the start and end of this shape's label
+
+/sdl_save {
+ 9 dict begin
+ 3 1 roll % put filled flag at end
+ 4 ne { stop } if % sanity-check number of sides
+ aload pop
+ /ury xdef /urx xdef
+ /lry xdef /lrx xdef
+ /lly xdef /llx xdef
+ /uly xdef /ulx xdef
+ /h3 ury lry sub 3 div def
+ newpath
+ moveto
+ lrx h3 sub lry lineto
+ llx lly lineto
+ ulx h3 add uly lineto
+ closepath
+ { fill } { stroke } ifelse
+ end
+} bind def
+
+% SDL stop
+% The width of the bounding box is ignored; the lines are set at 45 degrees
+% This shape cannot be filled
+% This should be used with "label = """ and "arrowhead = none, headclip = false"
+
+/sdl_stop {
+ 7 dict begin
+ { stop } if % make sure not asked to fill this
+ 4 ne { stop } if % sanity-check number of sides
+ aload pop
+ pop pop
+ /lry xdef /lrx xdef
+ /lly xdef /llx xdef
+ /uly xdef pop
+ /h2 uly lly sub 2 div def
+ /mx llx lrx add 2 div def
+ newpath
+ mx h2 add exch moveto pop
+ mx h2 sub lly lineto
+ mx h2 sub uly moveto
+ mx h2 add lry lineto
+ closepath
+ stroke
+ end
+} bind def
+
+% SDL return
+% The width of the bounding box is ignored; the lines are set at 45 degrees
+% The filled version is indistinguishable from an SDL connection
+
+/sdl_return {
+ 9 dict begin
+ 3 1 roll % put filled flag at end
+ 4 ne { stop } if % sanity-check number of sides
+ aload pop
+ /ury xdef pop
+ /lry xdef /lrx xdef
+ /lly xdef /llx xdef
+ /uly xdef pop
+ pop pop
+ /h2 uly lly sub 2 div 2 sqrt div def
+ /mx llx lrx add 2 div def
+ /my lry ury add 2 div def
+ newpath
+ mx my uly lly sub 2 div 0 360 arc
+ { fill } { stroke
+ mx h2 add my h2 add moveto
+ mx h2 sub my h2 sub lineto
+ mx h2 sub my h2 add moveto
+ mx h2 add my h2 sub lineto
+ stroke } ifelse
+ end
+} bind def
+
+% SDL create
+% The extra lines are displaced by an eighth of the shape height
+% The filled version is indistinguishable from an SDL task
+
+/sdl_create {
+ 9 dict begin
+ 3 1 roll % put filled flag at end
+ 4 ne { stop } if % sanity-check number of sides
+ aload pop
+ /ury xdef /urx xdef
+ /lry xdef /lrx xdef
+ /lly xdef /llx xdef
+ /uly xdef /ulx xdef
+ /h8 ury lry sub 8 div def
+ newpath
+ moveto
+ lrx lry lineto
+ llx lly lineto
+ ulx uly lineto
+ closepath
+ { fill } { stroke
+ ulx uly h8 sub moveto
+ urx ury h8 sub lineto
+ llx lly h8 add moveto
+ lrx lry h8 add lineto
+ stroke } ifelse
+ end
+} bind def
+
+% SDL call
+% The extra lines are displaced by an eighth of the shape height
+% The filled version is indistinguishable from an SDL task
+% There should be a few spaces at the start and end of this shape's label
+
+/sdl_call {
+ 9 dict begin
+ 3 1 roll % put filled flag at end
+ 4 ne { stop } if % sanity-check number of sides
+ aload pop
+ /ury xdef /urx xdef
+ /lry xdef /lrx xdef
+ /lly xdef /llx xdef
+ /uly xdef /ulx xdef
+ /h8 ury lry sub 8 div def
+ newpath
+ moveto
+ lrx lry lineto
+ llx lly lineto
+ ulx uly lineto
+ closepath
+ { fill } { stroke
+ urx h8 sub ury moveto
+ lrx h8 sub lry lineto
+ llx h8 add lly moveto
+ ulx h8 add uly lineto
+ stroke } ifelse
+ end
+} bind def
+
+% SDL text symbol
+% The corner has a size of twice the H height
+
+/sdl_text {
+ 10 dict begin
+ 3 1 roll % put filled flag at end
+ 4 ne { stop } if % sanity-check number of sides
+ aload pop
+ /ury xdef /urx xdef
+ /lry xdef /lrx xdef
+ /lly xdef /llx xdef
+ /uly xdef /ulx xdef
+ /h8 ury lry sub 8 div def
+ newpath
+ moveto
+ /d (H) true charpath flattenpath pathbbox exch pop exch sub exch pop 2 mul def
+ newpath
+ urx ury d sub moveto
+ lrx lry lineto
+ llx lly lineto
+ ulx uly lineto
+ urx d sub ury lineto
+ closepath
+ { fill } { stroke } ifelse
+ urx ury d sub moveto
+ d neg 0 rlineto
+ 0 d rlineto
+ stroke
+ end
+} bind def
+
+% SDL text extension from left
+% This should be used with "rank = same"
+
+/sdl_text_extension_from_left {
+ 3 1 roll % put filled flag at end
+ 4 ne { stop } if % sanity-check number of sides
+ aload pop
+ pop pop
+ moveto
+ lineto
+ lineto
+ lineto
+ { fill } { stroke } ifelse
+} bind def
+
+% SDL text extension from right
+% This should be used with "rank = same"
+
+/sdl_text_extension_from_right {
+ 3 1 roll % put filled flag at end
+ 4 ne { stop } if % sanity-check number of sides
+ aload pop
+ pop pop
+ 8 4 roll
+ moveto
+ lineto
+ lineto
+ lineto
+ { fill } { stroke } ifelse
+} bind def
+
+% SDL comment from left
+% This should be used with "style = dashed" and "rank = same"
+
+/sdl_comment_from_left { sdl_text_extension_from_left } bind def
+
+% SDL comment from right
+% This should be used with "style = dashed" and "rank = same"
+
+/sdl_comment_from_right { sdl_text_extension_from_right } bind def
+
+% SDL connector
+% The width of the bounding box is ignored
+
+/sdl_connector {
+ 7 dict begin
+ 3 1 roll % put filled flag at end
+ 4 ne { stop } if % sanity-check number of sides
+ aload pop
+ pop pop
+ /lry xdef /lrx xdef
+ /lly xdef /llx xdef
+ /uly xdef pop
+ pop pop
+ /h2 uly lly sub 2 div def
+ /mx llx lrx add 2 div def
+ newpath
+ mx uly h2 sub h2 0 360 arc
+ { fill } { stroke } ifelse
+ end
+} bind def
+
+% SDL set (extension)
+% The hourglass has a size of twice the H height
+% There should be a few spaces at the start of this shape's label
+
+/sdl_set {
+ 10 dict begin
+ 3 1 roll % put filled flag at end
+ 4 ne { stop } if % sanity-check number of sides
+ aload pop
+ /ury xdef /urx xdef
+ /lry xdef /lrx xdef
+ /lly xdef /llx xdef
+ /uly xdef /ulx xdef
+ /my uly lly add 2 div def
+ newpath
+ moveto
+ /d (H) true charpath flattenpath pathbbox exch pop exch sub exch pop def
+ newpath
+ llx d add my d add moveto
+ ulx d add uly lineto
+ urx ury lineto
+ lrx lry lineto
+ llx d add lly lineto
+ llx d add my d sub lineto
+ dup { closepath fill } { stroke } ifelse
+ llx my d sub moveto
+ d 2 mul dup rlineto
+ d 2 mul neg 0 rlineto
+ d 2 mul dup neg rlineto
+ closepath
+ { fill } { stroke } ifelse
+ end
+} bind def
+
+% SDL reset (extension)
+% The cross has a size of twice the H height
+% There should be a few spaces at the start of this shape's label
+
+/sdl_reset {
+ 10 dict begin
+ 3 1 roll % put filled flag at end
+ 4 ne { stop } if % sanity-check number of sides
+ aload pop
+ /ury xdef /urx xdef
+ /lry xdef /lrx xdef
+ /lly xdef /llx xdef
+ /uly xdef /ulx xdef
+ /my uly lly add 2 div def
+ newpath
+ moveto
+ /d (H) true charpath flattenpath pathbbox exch pop exch sub exch pop def
+ newpath
+ urx ury moveto
+ lrx lry lineto
+ llx d add lly lineto
+ ulx d add uly lineto
+ closepath
+ { fill } { stroke } ifelse
+ llx my d sub moveto
+ d 2 mul dup rlineto
+ llx d 2 mul add my d sub moveto
+ d 2 mul dup neg exch rlineto
+ stroke
+ end
+} bind def
+
+% SDL export (extension)
+% The store has a width of twice the H height
+% There should be a few spaces at the start of this shape's label
+
+/sdl_export {
+ 10 dict begin
+ 3 1 roll % put filled flag at end
+ 4 ne { stop } if % sanity-check number of sides
+ aload pop
+ /ury xdef /urx xdef
+ /lry xdef /lrx xdef
+ /lly xdef /llx xdef
+ /uly xdef /ulx xdef
+ /my uly lly add 2 div def
+ newpath
+ moveto
+ /d (H) true charpath flattenpath pathbbox exch pop exch sub exch pop def
+ newpath
+ llx d add my d 2 div add moveto
+ ulx d add uly lineto
+ urx ury lineto
+ lrx lry lineto
+ llx d add lly lineto
+ llx d add my d 2 div sub lineto
+ { closepath fill } { stroke } ifelse
+ llx my d 2 div sub moveto
+ d 2 mul 0 rlineto
+ llx my d 2 div add moveto
+ d 2 mul 0 rlineto
+ stroke
+ end
+} bind def
\ No newline at end of file
--- /dev/null
+digraph test
+{
+ sdl_task [shape=sdl_task, color=red, fillcolor=cyan, style=filled, peripheries=0];
+ sdl_task2 [shape=sdl_task, label="sdl_task", peripheries=0];
+ sdl_task -> sdl_task2;
+ sdl_input_from_right [shape=sdl_input_from_right, color=red, fillcolor=cyan, style=filled, peripheries=0];
+ sdl_input_from_right2 [shape=sdl_input_from_right, label="sdl_input_from_right ", peripheries=0];
+ sdl_input_from_right -> sdl_input_from_right2;
+ sdl_input_from_left [shape=sdl_input_from_left, color=red, fillcolor=cyan, style=filled, peripheries=0];
+ sdl_input_from_left2 [shape=sdl_input_from_left, label=" sdl_input_from_left", peripheries=0];
+ sdl_input_from_left -> sdl_input_from_left2;
+ sdl_priority_input_from_right [shape=sdl_priority_input_from_right, color=red, fillcolor=cyan, style=filled, peripheries=0];
+ sdl_priority_input_from_right2 [shape=sdl_priority_input_from_right, label="sdl_priority_input_from_right ", peripheries=0];
+ sdl_priority_input_from_right -> sdl_priority_input_from_right2;
+ sdl_priority_input_from_left [shape=sdl_priority_input_from_left, color=red, fillcolor=cyan, style=filled, peripheries=0];
+ sdl_priority_input_from_left2 [shape=sdl_priority_input_from_left, label=" sdl_priority_input_from_left", peripheries=0];
+ sdl_priority_input_from_left -> sdl_priority_input_from_left2;
+ sdl_start [shape=sdl_start, color=red, fillcolor=cyan, style=filled, peripheries=0];
+ sdl_start2 [shape=sdl_start, label=" ", peripheries=0];
+ sdl_start -> sdl_start2;
+ sdl_procedure_start [shape=sdl_procedure_start, color=red, fillcolor=cyan, style=filled, peripheries=0];
+ sdl_procedure_start2 [shape=sdl_procedure_start, label=" ", peripheries=0];
+ sdl_procedure_start -> sdl_procedure_start2;
+ sdl_state [shape=sdl_state, color=red, fillcolor=cyan, style=filled, peripheries=0];
+ sdl_state2 [shape=sdl_state, peripheries=0];
+ sdl_state -> sdl_state2;
+ sdl_output_to_right [shape=sdl_output_to_right, color=red, fillcolor=cyan, style=filled, peripheries=0];
+ sdl_output_to_right2 [shape=sdl_output_to_right, label="sdl_output_to_right ", peripheries=0];
+ sdl_output_to_right -> sdl_output_to_right2;
+ sdl_output_to_left [shape=sdl_output_to_left, color=red, fillcolor=cyan, style=filled, peripheries=0];
+ sdl_output_to_left2 [shape=sdl_output_to_left, label=" sdl_output_to_left", peripheries=0];
+ sdl_output_to_left -> sdl_output_to_left2;
+ sdl_condition [shape=sdl_condition, color=red, fillcolor=cyan, style=filled, peripheries=0];
+ sdl_condition2 [shape=sdl_condition, label=" sdl_condition ", peripheries=0];
+ sdl_condition -> sdl_condition2;
+ sdl_save [shape=sdl_save, color=red, fillcolor=cyan, style=filled, peripheries=0];
+ sdl_save2 [shape=sdl_save, label=" sdl_save ", peripheries=0];
+ sdl_save -> sdl_save2;
+ sdl_stop [shape=sdl_stop, peripheries=0];
+ sdl_stop2 [shape=sdl_stop, label="", peripheries=0];
+ sdl_stop -> sdl_stop2 [arrowhead=none, headclip=false];
+ sdl_return [shape=sdl_return, color=red, fillcolor=cyan, style=filled, peripheries=0];
+ sdl_return2 [shape=sdl_return, label="", peripheries=0];
+ sdl_return -> sdl_return2;
+ sdl_create [shape=sdl_create, color=red, fillcolor=cyan, style=filled, peripheries=0];
+ sdl_create2 [shape=sdl_create, peripheries=0];
+ sdl_create -> sdl_create2;
+ sdl_call [shape=sdl_call, color=red, fillcolor=cyan, style=filled, peripheries=0];
+ sdl_call2 [shape=sdl_call, label=" sdl_call ", peripheries=0];
+ sdl_call -> sdl_call2;
+ sdl_text [shape=sdl_text, color=red, fillcolor=cyan, style=filled, peripheries=0];
+ sdl_text2 [shape=sdl_text, peripheries=0];
+ sdl_text -> sdl_text2;
+ sdl_text_extension_from_left [shape=sdl_text_extension_from_left, color=red, fillcolor=cyan, style=filled, peripheries=0];
+ sdl_text_extension_from_left2 [shape=sdl_text_extension_from_left, peripheries=0];
+ sdl_text_extension_from_left -> sdl_text_extension_from_left2;
+ sdl_text_extension_from_right [shape=sdl_text_extension_from_right, color=red, fillcolor=cyan, style=filled, peripheries=0];
+ sdl_text_extension_from_right2 [shape=sdl_text_extension_from_right, peripheries=0];
+ sdl_text_extension_from_right -> sdl_text_extension_from_right2;
+ sdl_comment_from_left [shape=sdl_comment_from_left, color=red, fillcolor=cyan, style=filled, peripheries=0];
+ sdl_comment_from_left2 [shape=sdl_comment_from_left, style=dashed, peripheries=0];
+ sdl_comment_from_left -> sdl_comment_from_left2;
+ sdl_comment_from_right [shape=sdl_comment_from_right, color=red, fillcolor=cyan, style=filled, peripheries=0];
+ sdl_comment_from_right2 [shape=sdl_comment_from_right, style=dashed, peripheries=0];
+ sdl_comment_from_right -> sdl_comment_from_right2;
+ sdl_connector [shape=sdl_connector, color=red, fillcolor=cyan, style=filled, peripheries=0];
+ sdl_connector2 [shape=sdl_connector, peripheries=0];
+ sdl_connector -> sdl_connector2;
+ sdl_set [shape=sdl_set, color=red, fillcolor=cyan, style=filled, peripheries=0];
+ sdl_set2 [shape=sdl_set, label=" sdl_set2", peripheries=0];
+ sdl_set -> sdl_set2;
+ sdl_reset [shape=sdl_reset, color=red, fillcolor=cyan, style=filled, peripheries=0];
+ sdl_reset2 [shape=sdl_reset, label=" sdl_reset2", peripheries=0];
+ sdl_reset -> sdl_reset2;
+ sdl_export [shape=sdl_export, color=red, fillcolor=cyan, style=filled, peripheries=0];
+ sdl_export2 [shape=sdl_export, label=" sdl_export", peripheries=0];
+ sdl_export -> sdl_export2;
+}
\ No newline at end of file