From: erg Date: Fri, 20 Jan 2006 20:58:20 +0000 (+0000) Subject: Add contributed SDL node shapes X-Git-Tag: LAST_LIBGRAPH~32^2~6836 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=12327f812171161d7babb01690f3f2a0525b8fca;p=graphviz Add contributed SDL node shapes --- diff --git a/contrib/sdlshapes/README b/contrib/sdlshapes/README new file mode 100644 index 000000000..baa99dc0f --- /dev/null +++ b/contrib/sdlshapes/README @@ -0,0 +1,2 @@ +PostScript library for SDL node shapes (http://www.sdl-forum.org/SDL/index.htm) +by Mark Rison of Cambridge Silicon Radio Ltd. diff --git a/contrib/sdlshapes/sdl.ps b/contrib/sdlshapes/sdl.ps new file mode 100644 index 000000000..e645d0add --- /dev/null +++ b/contrib/sdlshapes/sdl.ps @@ -0,0 +1,655 @@ +%! 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 diff --git a/contrib/sdlshapes/sdlshapes.dot b/contrib/sdlshapes/sdlshapes.dot new file mode 100644 index 000000000..99bf6ae40 --- /dev/null +++ b/contrib/sdlshapes/sdlshapes.dot @@ -0,0 +1,78 @@ +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