--- /dev/null
+define terminal {box $1 ht 0.3 rad 0.2}
+
+define diamond {[
+ FRAME: box invis "$1" $2 $3 $4
+ line from FRAME.e to FRAME.n
+ line from FRAME.w to FRAME.n
+ line from FRAME.e to FRAME.s
+ line from FRAME.w to FRAME.s
+]}
+
+define triangle {[
+ FRAME: box invis " $1" ht 1.0 $2 $3 $4
+ line from FRAME.w to FRAME.ne
+ line from FRAME.w to FRAME.se
+ line from FRAME.se to FRAME.ne
+ NO: 0.7<FRAME.se,FRAME.ne>
+ "NO" at NO + (0.2, 0.06)
+ YES: 0.2<FRAME.se,FRAME.ne>
+ "YES" at YES + (0.2, 0.06)
+]}
+
+define revtriangle {[
+ FRAME: box invis "$1" ht 1.0 $2 $3 $4
+ line from FRAME.e to FRAME.nw
+ line from FRAME.e to FRAME.sw
+ line from FRAME.sw to FRAME.nw
+ NO: 0.7<FRAME.sw,FRAME.nw>
+ "NO" at NO + (-0.2, 0.06)
+ YES: 0.2<FRAME.sw,FRAME.nw>
+ "YES" at YES + (-0.2, 0.06)
+]}
+
+define iter {[
+ FRAME: box " $4" " $3" " $5" ht 1.5 wid 1.0
+ line from FRAME.w to 0.85<FRAME.se,FRAME.ne>
+ line from FRAME.w to 0.15<FRAME.se,FRAME.ne>
+ line from FRAME.se to FRAME.ne
+ NO: 0.8<FRAME.se,FRAME.ne>
+ "NO" at NO + (0.2, 0.06)
+ YES: 0.2<FRAME.se,FRAME.ne>
+ "YES" at YES + (0.2, 0.06)
+ "$1" at FRAME.n + (-0.1, -0.2)
+ "$2" at FRAME.s + (-0.1, 0.2)
+]}
+
+define downbend {line right 0.1 $1; arrow down}
+
+define read {[
+ FRAME: box ht 0.5 wid 1.0 $1 invis
+ line from FRAME.ne to 0.8<FRAME.ne,FRAME.nw>
+ line from last line.end to 0.8<FRAME.sw,FRAME.nw>
+ line from last line.end to FRAME.sw
+ line from FRAME.se to FRAME.ne
+ line from FRAME.se to FRAME.sw
+ "READ" at FRAME.n - (0, 0.1)
+]}
+
+define printme {[
+ FRAME: box ht 0.8 invis
+ line from FRAME.ne to FRAME.nw
+ $1 $2 $3 at FRAME.c
+ L: line from FRAME.nw to FRAME.sw
+ R: line from FRAME.ne to 0.85<FRAME.ne,FRAME.se>
+ HILEFT: 0.9<FRAME.sw,FRAME.nw>
+ HIRIGHT: 0.9<FRAME.se,FRAME.ne>
+ MID: FRAME.s
+ arc from L.end to MID
+ arc from R.end to MID rad 0.4
+ "PRINT" at FRAME.n - (0, 0.1)
+]}
+
+define throughbox{[
+ FRAME: box invis wid 1.1 "THROUGH $1" "FOR $2 = $3,$4," "$5"
+ NW: 0.1<FRAME.nw,FRAME.ne>
+ NE: 0.1<FRAME.ne,FRAME.nw>
+ SW: 0.1<FRAME.sw,FRAME.se>
+ SE: 0.1<FRAME.se,FRAME.sw>
+ line from NE to NW
+ line from SE to SW
+ line from NE to FRAME.e
+ line from SE to FRAME.e
+ line from NW to FRAME.w
+ line from SW to FRAME.w
+]}
+
+define label {[
+ FRAME: box invis "$1"
+ line from FRAME.e to FRAME.n
+ line from FRAME.w to FRAME.n
+ line from FRAME.e to FRAME.s
+ line from FRAME.w to FRAME.s
+ circle rad 0.2 with .c at FRAME.c
+]}