.IS
...libfile arrow
...libfile arc
...libfile circle
osc {
    var wd, ht, nw, ne, sw, se, w1, w2, e1, e2, upper, lower, r ;
    var amp, ampin, incr, incrin, out, outin ;
    wd = 1 ;
    ht = 2*wd ;
    nw = sw + (0,1)*ht ;
    ne = nw + wd ;
    se = sw + wd ;
    w1 = .3[nw,sw] ;
    e1 = .3[ne,se] ;
    w2 = .4[nw,sw] ;
    e2 = .4[ne,se] ;
    upper = .5[w2,e2] ;
    r = abs(upper-w2) ;
    lower = upper - (0,.5)*r ;
    amp = .25[nw,ne] ;
    ampin = .25[w1,e1] ;
    incr = .25[ne,nw] ;
    incrin = .25[e1,w1] ;
    out = .5[sw,se] ;
    outin = upper - (0,1)*r ;
    put arc {
	center = upper ;
	radius = r ;
	startang = 180 ;
	endang = 360 ;
    }
    conn w1 to w2 ;
    conn e1 to e2 ;
    conn w1 to e1 ;
    conn amp to ampin ;
    conn incr to incrin ;
    conn out to outin ;
}
input {
    var n, s, e, w, r, c ;
    r = .05 ;
    n = c + (0,r) ;
    s = c - (0,r) ;
    w = c - (r,0) ;
    e = c + (r,0) ;
    put circle {
	z1 = n ;
	z2 = e ;
	z3 = s ;
    }
}
ad2 {
    var ht, wd, in1, in1in, in2, in2in, out, outin, r, c, se, sw ;
    wd = 1 ;
    ht = 1*wd ;
    in1 = sw + (0,1)*ht ;
    in2 = in1 + wd ;
    se = sw + wd ;
    c = .5[in1,se] ;
    r = .2 ;
    put circle {
	center = c ;
	radius = r ;
    }
    in1in = r*cis(120) + c ;
    in2in = r*cis(60) + c ;
    outin = r*cis(270) + c ;
    out = .5[sw,se] ;
    conn in1 to in1in ;
    conn in2 to in2in ;
    conn outin to out ;
    "+" at c - (0,.08) ;
}
mul2 {
    var ht, wd, in1, in1in, in2, in2in, out, outin, r, c, se, sw ;
    wd = 1 ;
    ht = 1*wd ;
    in1 = sw + (0,1)*ht ;
    in2 = in1 + wd ;
    se = sw + wd ;
    c = .5[in1,se] ;
    r = .2 ;
    put circle {
	center = c ;
	radius = r ;
    }
    in1in = r*cis(120) + c ;
    in2in = r*cis(60) + c ;
    outin = r*cis(270) + c ;
    out = .5[sw,se] ;
    conn in1 to in1in ;
    conn in2 to in2in ;
    conn outin to out ;
    "\(mu" at c - (0,.08) ;
}
out {
    var in, s, e, w, r, c ;
    r = .4 ;
    in = c + (0,r) ;
    s = c - (0,r) ;
    w = c - (r,0) ;
    e = c + (r,0) ;
    put circle {
	z1 = in ;
	z2 = e ;
	z3 = s ;
	"out" at center - (0,.05) ;
    }
}
sinewave {
    var c, sw, nw, ne, se, w, e, n, s, wd, ht ;
    wd = ht = .2 ;
    nw = sw + (0,1)*ht ;
    ne = nw + wd ;
    se = sw + wd ;
    w = .5[sw,nw] ;
    e = .5[se,ne] ;
    c = .5[e,w] ;
    n = .25[nw,ne] ;
    s = .25[se,sw] ;
    conn nw to sw ;
    conn w to e ;
    spline w to n to s to e ;
}
envwave {
    var c, sw, nw, ne, se, w, e, n1, n2, s, wd, ht ;
    wd = ht = .2 ;
    nw = sw + (0,1)*ht ;
    ne = nw + wd ;
    se = sw + wd ;
    w = .5[sw,nw] ;
    e = .5[se,ne] ;
    c = .5[e,w] ;
    n1 = .2[nw,ne] ;
    n2 = .8[nw,ne] ;
    conn nw to sw ;
    conn w to e ;
    conn w to n1 to n2 to e ;
}
dot {
    var c ;
    "\(bu" at c + (.02,-.08) ;
}
.IE
