PS
# ex16.m4
cct_init
[
define(`elen_',linewid*1.2)
 circlerad = delay_rad_
 {"\sl input" above ljust}
 line right_
J: Here
 delay
K: Here
 delay
L: Here
S1: circle "$+$" at (K.x,K.y+linewid)
S2: circle "$+$" at (L,S1)
 arrow up_ S1.y-J.y from J then to S1.w
 arrow from K to S1.s
 arrow from S1.e to S2.w
 arrow from L to S2.s
S3: circle "$+$" at (L.x,L.y-linewid)
 arrow down_ J.y-S3.y from J then to S3.w
 arrow from L to S3.n
 arrow from S2.e right_ linewid/2 then down_ (S2.y-S3.y)/2-circlerad \
   then right_ linewid/2
 arrow from S3.e right_ linewid/2 then up_   (S2.y-S3.y)/2-circlerad \
  then right_ linewid/2
 "\sl output" at 0.5<last arrow.end, 2nd last arrow.end>
 ]
[
 circlerad = 0.35/2
 d = linewid*1.75
 S00: circle "$00$"
 S10: circle "$10$" at S00+(d,d)
 S01: circle "$01$" at S00+(d,-d)
 S11: circle "$11$" at S01+(d,d)
 dx = circlerad*cosd(60)
 dy = circlerad*sind(60)
 brad = circlerad*1.3
 qrad = circlerad*6

 arc -> cw from S00+(-dx,-dy) to S00+(-dx,dy) rad brad \
   with .c at S00-(dx+sqrt(brad^2-dy^2),0)
 "$0/00$" at last arc.w rjust
 right
 arc -> cw from S00+(dx,dy) to S10+(-dy,-dx) rad qrad
 "$1/11$" at last arc.nw rjust above
 right
 arc -> cw from S10+(dy,-dx) to S11+(-dx,dy) rad qrad
 "$1/01$" at last arc.ne ljust above
 up_
 arc -> cw from S11+(dx,dy) to S11+(dx,-dy) rad brad \
   with .c at S11+(dx+sqrt(brad^2-dy^2),0)
 "$1/10$" at last arc.e ljust
 down_
 arc -> cw from S11+(-dx,-dy) to S01+(dy,dx) rad qrad
 "$0/01$" at last arc.se ljust below
 left_
 arc -> cw from S01+(-dy,dx) to S00+(dx,-dy) rad qrad
 "$0/11$" at last arc.sw rjust below
 up_
 arc -> cw from S01+(-dx,dy) to S10+(-dx,-dy) rad qrad*2
 "$1/00$" at last arc.w rjust
 down_
 arc -> cw from S10+(dx,-dy) to S01+(dx,dy) rad qrad*2
 "$0/10$" at last arc.e ljust
 ] with .sw at last [].se+(0.4,0)
PE