PS
# Reg723.m4
# see Horowitz and Hill p 600
cct_init
 svg_font(sans-serif,10bp__)

R1: resistor(down_ dimen_*3/4)
 rlabel(,"R`'svg_sub(1)" rjust "1.15k" rjust)
R2: potentiometer(down_ dimen_) with .Start at Here
  rlabel(,"R`'svg_sub(2)" rjust "2.0k" rjust)
  "V`'svg_sub(adj)" at R2.T1 below
R3: resistor(down_ dimen_ from R2.End)
  rlabel(,"R`'svg_sub(3)" rjust "4.02k" wid 4*textht rjust)
  ground

  line right_ dimen_*4/3 from R2.T1
A: opamp(,,,,R) with .In1 at Here

  line right_ dimen_*3/4 from A.Out
B1: dot
Q2: bi_tr(up_ dimen_) with .B at Here
  line right_ dimen_ from Q2.E
Q1: bi_tr(up_ dimen_*3/2)  with .B at Here; heatsink(at Q1.e+(dimen_/2,0),,D)
  "heat" ljust at last [].e+(dimen_/5,0) "sink" ljust
  dot(at Q1.E)
  resistor(down_ dimen_*3/2)
  llabel(,"0.25`'svg_Omega" ljust "3W" ljust)
P5: dot

Q3: bi_tr(up_ dimen_,R) with .B at (Q2.C.x,Q1.E.y); dot(at Q3.C)
  { line to Q2.B }
  resistor(left_ dimen_ from Q1.E); llabel(,"100")
  line to Q3.B
  line from Q3.E to (Q3.E,P5) then to P5+(dimen_,0)
Out: "+5V" ljust "2A" ljust
  dot(at P5+(dimen_/2,0))
  capacitor(down_ dimen_,C+); ground(,T)
  rlabel(,"10`'svg_micro`'F" rjust "15V" rjust)

Vref: box wid boxwid/2 ht boxht/2 with .w at (A.E.x,A.n.y+dimen_/3) \
 "V`'svg_sub(ref)"
Bx: box thick 0.4 wid Q2.C.x-A.w.x+dimen_/2 rad 0.1 \
   ht Vref.n.y-Q3.E.y+dimen_/3 with .sw at (A.In1.x-dimen_/7,Q3.E.y) dashed
 "723" at Bx.n above

 line from Vref.w to (Bx.w,Vref.w)
 { "V`'svg_sub(ref)" above rjust }
 continue to ((R1.x+Here.x)/2,Here.y); continue to (Here,R1.start) \
  then to R1.start
 "+7.15V" above ljust

P6: dot(at P5-(dimen_*2/3,0))
 line from Q3.C left_ dimen_/2 then down_ Q3.C.y-Bx.s.y
Cp: capacitor(down_ dimen_*3/2); rlabel(,"100pF"); dot
 line from A.In2 left_ dimen_/2 then down_ A.In2.y-Cp.end.y then to Cp.end
R4: resistor(right_ to (P6,Here)); rlabel(,"R`'svg_sub(4) 1.5k"); line to P6

 line from A.SE to (A.SE,Bx.s); ground
 "COMP" at (Cp,Bx.s) below rjust
 "CS" at (Q3.E,Bx.s) below ljust
 "CL" at (Bx.e,Q1.E) below ljust
 "NI" at (Bx.w,A.In1) rjust above
 "V`'svg_sub(out)" at (Bx.e,Q1.B) above ljust
 "INV" at (Bx.w,A.In2) rjust above

 line from A.NE to (A.NE.x,Bx.n.y+dimen_/2)
 { "V`'svg_sub(+)" at (Here,Bx.n) above rjust }
 continue to (Out,Here)
 {"+V`'svg_sub(in) (unreg)" wid 8*textht "+9.5V (min)" below}
 {dot(at (Q2.C,Here)); line to Q2.C
  "V`'svg_sub(C)" at (Here,Bx.n) above rjust }
 dot(at (Q1.C,Here)); line to Q1.C
 "Q`'svg_sub(1)" ljust "TIP41" ljust

 command "</g>"
PE