for ud=1,-1:
for b=0,1:
beginchar(incr ccode,2curve#+2sidebar#,
2/3loop_h# if ud>0: -1/2curve# fi,
if ud>0: 1/2curve# else: 0 fi);
pickup pencircle xscaled thin yscaled fine;
ud*y3-ud*y1=5/4curve;
if ud>0: bot else: top fi y1=if ud>0: -d+ else: h- fi 1/3fine;
y4=if ud>0: h else: 0 fi;
y2=1/2[y3,y1];
if ud>0: rt else: lft fi x1=if ud>0: rside else: lside fi;
if ud>0: lft else: rt fi x2=if ud>0: lside else: rside fi;
x3=x4=1/2[lside,rside];
cutdraw z1..(x3,y1-ud*1/3fine){ud*left}..z2{ud*up}...z3{ud*right}&z3--z4;
pickup smallserifpen;
if ud>0: top else: bot fi y5=if ud>0: h else: 0 fi;
draw (lside,y5)--(rside,y5);
if b=1:
if ud>0: bot else: top fi y6=y3 + ud*fine;
draw (lside,y6)--(rside,y6);
fi
labels (1,2,3,4,5);
endchar;
endfor; endfor;
for ud=1,-1:
for b=0,1:
beginchar(incr ccode,2curve#+2sidebar#,
2/3loop_h# if ud<0: -1/2curve# fi,
if ud<0: 1/2curve# else: 0 fi);
if not odd (rside-lside): w:=w+1 fi;
pickup finepen;
lft x1=lside;
rt x2=rside;
y1=y2=if ud>0: h else: -d fi;
y3=1/2[-d,h];
x4=x3=1/2[lside,rside];
pickup thinpen;
if ud>0: bot else: top fi y4=if ud>0: 0 else: h fi;
draw z3--z4; cutoff(z3,ud*90);
cullit;
pickup finepen;
cutdraw z1{ud*down}..z3..{ud*up}z2;
pickup thinpen; % redo the cutting, or there are rounding bugs.
cutoff(z1,ud*90);
cutoff(z2,ud*90);
pickup smallserifpen;
if ud>0: bot else: top fi y5=if ud>0: 0 else: h fi;
draw (lside,y5)--(rside,y5);
if b=1:
if ud>0: top else: bot fi y6=y3 - ud*fine;
draw (lside,y6)--(rside,y6);
fi
endchar;
endfor; endfor;