[net.sources] METAFONT source for OCR-A

tml@santra.UUCP (Tor Lillqvist) (05/09/86)

		Here are METAFONT sources for the OCR-A
		'alphanumeric character sets for optical
		recognition' ISO/R 1073-1969.

#! /bin/sh
# This is a shell archive, meaning:
# 1. Remove everything above the #! /bin/sh line.
# 2. Save the resulting text in a file.
# 3. Execute the file with /bin/sh (not csh) to create the files:
#	OCR-A.I.mf
#	OCR-A.II.mf
#	OCR-A.III.mf
#	OCR-A.IV.mf
#	OCR-A.mf
# This archive created: Fri May  9 03:10:29 1986
export PATH; PATH=/bin:$PATH
if test -f 'OCR-A.I.mf'
then
	echo shar: will not over-write existing file "'OCR-A.I.mf'"
else
cat << \SHAR_EOF > 'OCR-A.I.mf'
% OCR-A Size I
  
H# = 2.4mm#;
W# = 1.4mm#;
T# = .35mm#;
L# = 3.73mm#;
 
input OCR-A;
SHAR_EOF
fi # end of overwriting check
if test -f 'OCR-A.II.mf'
then
	echo shar: will not over-write existing file "'OCR-A.II.mf'"
else
cat << \SHAR_EOF > 'OCR-A.II.mf'
% OCR-A Size II
  
H# = 2.84mm#;
W# = 1.4mm#;
T# = .35mm#;
L# = 4.42mm#;
  
input OCR-A;
SHAR_EOF
fi # end of overwriting check
if test -f 'OCR-A.III.mf'
then
	echo shar: will not over-write existing file "'OCR-A.III.mf'"
else
cat << \SHAR_EOF > 'OCR-A.III.mf'
% OCR-A Size III
  
H# = 3.20mm#;
W# = 1.52mm#;
T# = .38mm#;
L# = 4.98mm#;
  
input OCR-A;
SHAR_EOF
fi # end of overwriting check
if test -f 'OCR-A.IV.mf'
then
	echo shar: will not over-write existing file "'OCR-A.IV.mf'"
else
cat << \SHAR_EOF > 'OCR-A.IV.mf'
% OCR-A Size IV
  
H# = 3.80mm#;
W# = 2.04mm#;
T# = .51mm#;
L# = 5.91mm#;
  
input OCR-A;
SHAR_EOF
fi # end of overwriting check
if test -f 'OCR-A.mf'
then
	echo shar: will not over-write existing file "'OCR-A.mf'"
else
cat << \SHAR_EOF > 'OCR-A.mf'
% OCR-A Optical Character Recognition Font
%
% Coded in METAFONT84 by Tor Lillqvist, VTT/ATK (Technical Research Centre
%  of Finland, Computing Services)
%  (tml@fingate.BITNET, tml@santra.UUCP, mcvax!santra!tml)
%
% Based on ISO Recommendation R1073, 1st ed., May 1969 (probably
%  obsolete by now).
%
% Labels are in French :-)
%
  
mode_setup;
  
letter_fit# := 1.25T#;
  
define_whole_pixels(W,H,L,T,letter_fit);
  
def adjust_fit =
 l:=-letter_fit;
 interim xoffset:=-l;
 charwd:=charwd+2letter_fit#;
 r:=l+hround(charwd*hppp);
 w:=r-letter_fit;
enddef;
 
pickup pencircle scaled T;
OCRpen := savepen;
  
extra_beginchar := extra_beginchar & "adjust_fit;";
  
extra_endchar := extra_endchar & "penlabels(range 1 thru 20);";
  
% The join macro performs the joining of two strokes so that the
% pen centre curvature radius is join_radius.
  
tertiarydef p join q =
  begingroup
    pair ipq_; ipq_ := p intersectionpoint q;
  
    pair dirv[];
    dirv0 = dir angle direction (length p) of p;
    dirv1 = dir angle direction 0 of q;
    if length (dirv1 - dirv0) < 1/10:
      p .. q
    else:
      path par[];
      k_ := if ypart (dirv1 rotated -angle dirv0) > 0: 90 else: -90 fi;
      forsuffixes $=0,1:
	par$ := ((ipq_ - (20join_radius*dirv$))--
	  (ipq_ + (20join_radius*dirv$)))
	  shifted ((join_radius*dirv$) rotated k_);
      endfor;
      numeric pt_,qt_;
      (pt_,qt_) = par0 intersectiontimes par1;
      if pt_ < 0: errmessage "No intersection curvature center found"; fi
  
      pair icc_; icc_ = point pt_ of par0;
      numeric cp_,cpp_,cq_,cqp_;
      (cp_, cpp_) = p intersectiontimes
	(icc_--icc_+(2join_radius*dirv0 rotated -k_));
      (cq_, cqp_) = q intersectiontimes
	(icc_--icc_+(2join_radius*dirv1 rotated -k_));
  
      subpath (0,cp_) of p ..
	(icc_ + join_radius*unitvector(dirv0-dirv1)) ..
	subpath (cq_, length q) of q
    fi
  endgroup
enddef;
  
def fill_corners(text t) =
  begingroup
    forsuffixes $=t:
      fill unitsquare shifted (-.5,-.5) scaled T shifted z$;
    endfor
  endgroup
enddef;
  
% The angle_fill_corner fills the corners like in the characters M and N
  
def angle_fill_corner(suffix a,b,c) =
  begingroup
    save p; path p.q,p.w,p.e,p.r;
    p.q = (z.a--z.b+(z.b-z.a)) shifted (T/2*unitvector (z.b-z.a) rotated 90);
    p.w = (z.a--z.b+(z.b-z.a)) shifted (T/2*unitvector (z.b-z.a) rotated -90);
    p.e = (z.b-(z.c-z.b)--z.c) shifted (T/2*unitvector (z.c-z.b) rotated 90);
    p.r = (z.b-(z.c-z.b)--z.c) shifted (T/2*unitvector (z.c-z.b) rotated -90);
  
    save q; pair q.u,q.l;
    q.u = p.q intersectionpoint p.e;
    q.l = p.w intersectionpoint p.r;
  
    fill point 0 of p.q -- q.u -- point 1 of p.e -- point 1 of p.r --
      q.l -- point 0 of p.w -- cycle;
  endgroup
enddef;
  
% The curvature radiuses used in some characters
  
r1# = H#/16 * ((7H#)/(6W#) + sqrt(((7H#)/(6W#))**2 + 1));
r2# = W#/8  * ((6W#)/(7H#) + sqrt(((6W#)/(7H#))**2 + 1));
r3# = W#/8  * (1 - H#/(2W#) + sqrt((H#/(2W#))**2 + 1));
r4# = H#/16 * (1 - (4W#)/(3H#) + sqrt(((4W#)/(3H#))**2 + 1));
r5# = H#/16 * (1 - (5H#)/(6W#) + sqrt(((5H#)/(6W#))**2 + 1));
r6# = W#/8  * (1 - (6W#)/(5H#) + sqrt(((6W#)/(5H#))**2 + 1));
  
define_pixels(r1,r2,r3,r4,r5,r6);
 
def OCRchar(expr code, wd, ht) =
  beginchar(code, wd, ht, 0);
    pickup OCRpen;
enddef;
  
OCRchar("1", W#, H#); "Chiffre UN";
  x1 = 0;	y1 = 0;
  x2 = W;	y2 = 0;
  x3 = W;	y3 = 3/8H;
  x4 = W/2;	y4 = H;
  x5 = 0;	y5 = H;
  
  draw z1--z2--z3; draw .5[z1,z2]--z4--z5;
  fill_corners(4);
endchar;
  
OCRchar("2", W#, H#); "Chiffre DEUX";
  x1 = 0;	y1 = H;
  x2 = W;	y2 = H;
  x3 = W;	y3 = H/2;
  x4 = 0;	y4 = H/2;
  x5 = 0;	y5 = 0;
  x6 = W;	y6 = 0;
  
  join_radius := T/2;
  draw (z1--z2) join ((z2--z3) join
    ((z3--z4) join (z4--z5--z6)));
  fill_corners(5);
endchar;
  
OCRchar("3", W#, H#); "Chiffre TROIS";
  x1 = 0;	y1 = H;
  x2 = W;	y2 = y1;
  x3 = x2;	y3 = H/2;
  x4 = W/4;	y4 = y3;
  x5 = x2;	y5 = 0;
  x6 = x1;	y6 = y5;
  
  join_radius := T/2;
  draw (z1--z2) join (z2--.6[z2,z3]);
  join_radius := T;
  draw (.4[z2,z3]--z3) join (z3--z4);
  draw (z4--z3) join (z3--.6[z3,z5]);
  join_radius := T/2;
  draw (.4[z3,z5]--z5) join (z5--z6);
endchar;
  
OCRchar("4", 7/8W#, H#); "Chiffre QUATRE";
  x1 = 0;	y1 = H;
  x2 = x1;	y2 = 3/8H;
  x3 = 7/8W;	y3 = y2;
  x4 = 3/4W;	y4 = 0;
  x5 = x4;	y5 = 7/8H;
  
  draw z1--z2--z3; draw z4--z5;
endchar;
  
OCRchar("5", W#, H#); "Chiffre CINQ";
  x1 = 0;	y1 = 1/16H;
  x2 = 1/4W;	y2 = 0;
  x3 = W;	y3 = y2;
  x4 = x3;	y4 = 1/2H;
  x5 = x2;	y5 = y4;
  x6 = x2;	y6 = H;
  x7 = x3;	y7 = y6;
  
  join_radius := T;
  draw (z1--z2) join (z2--.6[z2,z3]);
  join_radius := T/2;
  draw (.4[z2,z3]--z3) join (z3--.6[z3,z4]);
  draw (.4[z3,z4]--z4) join (z4--z5--z6--z7);
  fill_corners(5,6);
endchar;
  
OCRchar("6", W#, H#); "Chiffre SIX";
  x1 = 1/8W;	y1 = H;
  x2 = 0;	y2 = y1;
  x3 = x2;	y3 = 0;
  x4 = W;	y4 = y3;
  x5 = x4;	y5 = 3/8H;
  x6 = x2;	y6 = y5;
  
  draw z1--z2--z3--z4--z5--z6;
endchar;
  
OCRchar("7", W#, H#); "Chiffre SEPT";
  x1 = 0;	y1 = 15/16H;
  x2 = x1;	y2 = H;
  x3 = W;	y3 = y2;
  x4 = x3;	y4 = 5/8H;
  x5 = 1/2W;	y5 = 3/8H;
  x6 = x5;	y6 = 0;
 
  draw z1--z2--z3--z4--z5--z6;
  fill_corners(3);
endchar;
  
OCRchar("8", W#, H#); "Chiffre HUIT";
  x1 = 0;	y1 = 0;
  x2 = W;	y2 = y1;
  x3 = x2;	y3 = 1/2H;
  x4 = x1;	y4 = y3;
  x5 = 1/4W;	y5 = y3;
  x6 = 3/4W;	y6 = y5;
  x7 = x6;	y7 = H;
  x8 = x5;	y8 = y7;
  
  join_radius := T/2;
  draw (.4[z1,z2]--z2) join (z2--.6[z2,z3]);
  draw (.4[z2,z3]--z3) join (z3--.6[z3,z4]);
  draw (.4[z3,z4]--z4) join (z4--.6[z4,z1]);
  draw (.4[z4,z1]--z1) join (z1--.6[z1,z2]);
  draw z6--z7--z8--z5;
endchar;
  
OCRchar("9", W#, H#); "Chiffre NEUF";
  x1 = 7/8W;	y1 = 0;
  x2 = W;	y2 = y1;
  x3 = x2;	y3 = H;
  x4 = 0;	y4 = y3;
  x5 = x4;	y5 = 5/8H;
  x6 = x2;	y6 = y5;
  
  draw z1--z2--z3--z4--z5--z6;
endchar;
  
OCRchar("0", W#, H#); "Chiffre ZERO";
  x1 = 0;	y1 = 0;
  x2 = W;	y2 = y1;
  x3 = x2;	y3 = H;
  x4 = x1;	y4 = y3;
  
  join_radius := T/2;
  draw (.4[z1,z2]--z2) join (z2--.6[z2,z3]);
  draw (.4[z2,z3]--z3) join (z3--.6[z3,z4]);
  draw (.4[z3,z4]--z4) join (z4--.6[z4,z1]);
  draw (.4[z4,z1]--z1) join (z1--.6[z1,z2]);
endchar;
  
OCRchar(0, W#, H#); "Symbole CROCHET";
  x1 = 0;	y1 = 3/8H;
  x2 = x1;	y2 = 0;
  x3 = 1/2W;	y3 = y2;
  x4 = x3;	y4 = H;
  x5 = W;	y5 = y4;
  x6 = x5;	y6 = 5/8H;
  
  draw z1--z2--z3--z4--z5--z6;
  fill_corners(2,3,4,5);
endchar;
  
OCRchar(1, W#, H#); "Symbole FOURCHETTE";
  x1 = 0;	y1 = H;
  x2 = x1;	y2 = 1/2H;
  x3 = W;	y3 = y2;
  x4 = x3;	y4 = y1;
  x5 = 1/2W;	y5 = y2;
  x6 = x5;	y6 = 0;
  
  draw z1--z2--z3--z4;
  fill_corners(2,3);
  draw z5--z6;
endchar;
  
OCRchar(2, W#, H#); "Symbole CHAISE";
  x1 = 0;	y1 = 0;
  x2 = x1;	y2 = 1/2H;
  x3 = W;	y3 = y2;
  x4 = x3;	y4 = y1;
  x5 = x3;	y5 = H;
  
  draw z1--z2--z3;
  fill_corners(2);
  draw z4--z5;
endchar;
  
beginchar("|", 0, (H#+L#)/2, (L#-H#)/2); "Trait vertical";
  pickup OCRpen;
  x1 = 0;	y1 = (H-L)/2;
  x2 = x1;	y2 = (H+L)/2;
  
  cutdraw z1--z2;
endchar;
  
OCRchar("A", W#, H#); "Lettre A";
  x1 = 0;	y1 = 0;
  x2 = 1/2W;	y2 = H;
  x3 = W;	y3 = y1;
  z4 = 1/4[z1,z2];
  z5 = 1/4[z3,z2];
  
  draw z1--z2--z3; draw z4--z5;
endchar;
  
OCRchar("B", W#, H#); "Lettre B";
  x1 = 0;	y1 = 0;
  x2 = W;	y2 = y1;
  x3 = x2;	y3 = 1/2H;
  x4 = x1;	y4 = y3;
  x5 = x2;	y5 = H;
  x6 = x1;	y6 = y5;
  
  join_radius := 3/2T;
  draw (z1--z2) join (z2--.5[z2,z3]);
  draw (.5[z2,z3]--z3) join (z3--z4);
  draw (z4--z3) join (z3--.5[z3,z5]);
  draw (.5[z3,z5]--z5) join (z5--z6);
  draw z1--z6;
  fill_corners(1,6);
endchar;
  
OCRchar("C", W#, H#); "Lettre C";
  x1 = W;	y1 = H;
  x2 = 3/8W;	y2 = y1;
  x3 = 0;	y3 = y4 + 1/8H;
  x4 = x3;	y4 = 7/16H;
  x5 = x2;	y5 = 0;
  x6 = x1;	y6 = y5;
  z7 = (z2--z3+(z3-z2)) intersectionpoint (z5--z4+(z4-z5));
  
  join_radius := T;
  draw (z1--z2) join (z2--.6[z2,z3]);
  draw (z6--z5) join (z5--.6[z5,z4]);
  join_radius := r1;
  draw (.4[z2,z3]--z7) join (z7--.6[z4,z5]);
endchar;
  
OCRchar("D", W#, H#); "Lettre D";
  x1 = 0;	y1 = 0;
  x2 = 1/4W;	y2 = y1;
  x3 = 5/8W;	y3 = y1;
  x4 = W;	y4 = 7/16H;
  x5 = x4;	y5 = y4 + 1/8H;
  x6 = x3;	y6 = H;
  x7 = x2;	y7 = y6;
  x8 = x1;	y8 = y6;
  z9 = (z3--z4+(z4-z3)) intersectionpoint (z6--z5+(z5-z6));
  
  join_radius := T;
  draw (z1--z3) join (z3--.6[z3,z4]);
  draw (z8--z6) join (z6--.6[z6,z5]);
  join_radius := r1;
  draw (.4[z3,z4]--z9) join (z9--.6[z5,z6]);
  draw z2--z7;
endchar;
  
OCRchar("E", W#, H#); "Lettre E";
  x1 = W;	y1 = 0;
  x2 = 0;	y2 = y1;
  x3 = x2;	y3 = 1/2H;
  x4 = 1/2W;	y4 = y3;
  x5 = x2;	y5 = H;
  x6 = x1;	y6 = y5;
  
  draw z1--z2--z3--z4; draw z3--z5--z6;
  fill_corners(2,5);
endchar;
  
OCRchar("F", W#, H#); "Lettre F";
  x1 = 0;	y1 = 0;
  x2 = x1;	y2 = 5/8H;
  x3 = 3/4W;	y3 = y2;
  x4 = x1;	y4 = H;
  x5 = W;	y5 = y4;
  
  draw z1--z2--z3; draw z2--z4--z5;
  fill_corners(4);
endchar;
  
OCRchar("G", W#, H#); "Lettre G";
  x1 = 5/8W;	y1 = 3/8H;
  x2 = W;	y2 = y1;
  x3 = x2;	y3 = 0;
  x4 = 0;	y4 = y3;
  x5 = x4;	y5 = 5/8H;
  x6 = 1/2W;	y6 = H;
  x7 = x2;	y7 = y6;
  
  join_radius := T;
  draw (z1--z2--z3) join (z3--.6[z3,z4]);
  draw (.4[z3,z4]--z4) join (z4--.6[z4,z5]);
  join_radius := 3/2T;
  draw (.4[z4,z5]--z5) join (z5--.6[z5,z6]);
  join_radius := T;
  draw (.4[z5,z6]--z6) join (z6--z7);
  fill_corners(2);
endchar;
  
OCRchar("H", W#, H#); "Lettre H";
  x1 = 0;	y1 = 0;
  x2 = x1;	y2 = H;
  x3 = W;	y3 = y1;
  x4 = x3;	y4 = y2;
  
  draw z1--z2; draw z3--z4; draw .5[z1,z2]--.5[z3,z4];
endchar;
  
OCRchar("I", W#, H#); "Lettre I";
  x1 = 0;	y1 = 0;
  x2 = x1;	y2 = H;
  x3 = W;	y3 = y1;
  x4 = x3;	y4 = y2;
  
  draw z1--z3; draw z2--z4; draw .5[z1,z3]--.5[z2,z4];
endchar;
  
OCRchar("J", 3/4W#, H#); "Lettre J";
  x1 = 0;	y1 = 3/8H;
  x2 = x1;	y2 = 0;
  x3 = 3/4W;	y3 = y2;
  x4 = x3;	y4 = H;
  
  join_radius := T;
  draw (z1--z2) join ((z2--z3) join (z3--z4));
endchar;
  
OCRchar("K", W#, H#); "Lettre K";
  x1 = 0;	y1 = 0;
  x2 = x1;	y2 = H;
  x3 = W;	y3 = y1;
  x4 = x3;	y4 = y2;
  
  draw z1--z2; draw .5[z1,z2]--z3; draw .5[z1,z2]--z4;
endchar;
  
OCRchar("L", W#, H#); "Lettre L";
  x1 = 0;	y1 = H;
  x2 = x1;	y2 = 0;
  x3 = W;	y3 = y2;
 
  draw z1--z2--z3;
  fill_corners(2);
endchar;
 
OCRchar("M", W#, H#); "Lettre M";
  x1 = 0;	y1 = 0;
  x2 = x1;	y2 = H;
  x3 = 1/8W;	y3 = y2;
  x4 = 1/2W;	y4 = y5+1/16H;
  x5 = x4;	y5 = 5/8H;
  x6 = W-1/8W;	y6 = y2;
  x7 = W;	y7 = y2;
  x8 = x7;	y8 = y1;
  
  draw z1--z2--z3--z4--z5--z4--z6--z7--z8;
  fill_corners(2,7);
  angle_fill_corner(2,3,4);
  angle_fill_corner(4,6,7);
endchar;
  
OCRchar("N", W#, H#); "Lettre N";
  x1 = 0;	y1 = 0;
  x2 = x1;	y2 = H;
  x3 = 1/8W;	y3 = y2;
  x4 = W-1/8W;	y4 = y1;
  x5 = W;	y5 = y1;
  x6 = x5;	y6 = y2;
  
  draw z1--z2--z3--z4--z5--z6;
  fill_corners(2,5);
  angle_fill_corner(2,3,4);
  angle_fill_corner(3,4,5);
endchar;
  
OCRchar("O", W#, H#); "Lettre O";
  x1 = 0;	y1 = 7/16H;
  x2 = 3/8W;	y2 = 0;
  x3 = x2+1/4W; y3 = y2;
  x4 = W;	y4 = y1;
  x5 = x4;	y5 = y4+1/8H;
  x6 = x3;	y6 = H;
  x7 = x2;	y7 = y6;
  x8 = x1;	y8 = y5;
  z10 = (z1--z2+(z2-z1)) intersectionpoint (z3+(z3-z4)--z4);
  z11 = (z3--z4+(z4-z3)) intersectionpoint (z5+(z5-z6)--z6);
  z12 = (z5--z6+(z6-z5)) intersectionpoint (z7+(z7-z8)--z8);
  z13 = (z7--z8+(z8-z7)) intersectionpoint (z1+(z1-z2)--z2);
  
  join_radius := r2;
  draw (.4[z13,z10]--z10) join (z10--.6[z10,z11]);
  draw (.4[z11,z12]--z12) join (z12--.6[z12,z13]);
  join_radius := r1;
  draw (.4[z10,z11]--z11) join (z11--.6[z11,z12]);
  draw (.4[z12,z13]--z13) join (z13--.6[z13,z10]);
  picture O_char; O_char := currentpicture;
endchar;
  
OCRchar("P", W#, H#); "Lettre P";
  x1 = 0;	y1 = 0;
  x2 = x1;	y2 = 7/16H;
  x3 = x1;	y3 = H;
  x4 = W;	y4 = y3;
  x5 = x4;	y5 = y2;
  
  join_radius := T;
  draw (z1--z3--z4) join (z4--.6[z4,z5]);
  draw (.4[z4,z5]--z5) join (z5--z2);
  fill_corners(3);
endchar;
  
OCRchar("Q", W#, H#); "Lettre Q";
  x1 = 0;	y1 = 0;
  x2 = 1/4W;	y2 = y1;
  x3 = W;	y3 = 3/8H;
  x4 = x3;	y4 = H;
  x5 = W-1/4W;	y5 = y4;
  x6 = x1;	y6 = 5/8H;
  x7 = 1/2W;	y7 = y3;
  x8 = x5;	y8 = y1;
  x9 = x3;	y9 = y1;
  z10 = (z6--z1+(z1-z6)) intersectionpoint (z2-(z3-z2)--z3);
  z11 = (z3--z4+(z4-z3)) intersectionpoint (z5-(z6-z5)--z6);
  
  join_radius := r3;
  draw (.4[z6,z10]--z10) join (z10--.6[z10,z3]);
  draw (.4[z3,z11]--z11) join (z11--.6[z11,z6]);
  join_radius := T;
  draw (.4[z2,z3]--z3) join (z3--.6[z3,z4]);
  draw (.4[z5,z6]--z6) join (z6--.6[z6,z1]);
  draw z7--z8--z9;
  angle_fill_corner(7,8,9);
endchar;
 
OCRchar("R", W#, H#); "Lettre R";
  x1 = 0;	y1 = 0;
  x2 = x1;	y2 = 5/8H;
  x3 = x1;	y3 = H;
  x4 = W;	y4 = y3;
  x5 = x4;	y5 = y2;
  x6 = W-5/8W;	y6 = y2;
  x7 = x4;	y7 = y1;
  
  join_radius := T;
  draw (z1--z3--z4) join (z4--.6[z4,z5]);
  draw (.4[z4,z5]--z5) join (z5--z2);
  draw z6--z7;
  fill_corners(3);
endchar;
  
OCRchar("S", W#, H#); "Lettre S";
  x1 = 0;	y1 = 1/8H;
  x2 = x1;	y2 = 0;
  x3 = W;	y3 = y2;
  x4 = x3;	y4 = y1;
  x5 = x1;	y5 = H-1/8H;
  x6 = x1;	y6 = H;
  x7 = x3;	y7 = y6;
  x8 = x3;	y8 = y5;
  
  path p; p = z4-(z5-z4)--z5+(z5-z4);
  z10 = (z2--z3+(z3-z2)) intersectionpoint p;
  z11 = (z6-(z7-z6)--z7) intersectionpoint p;
  
  join_radius := 1/8H;
  draw (z1--z2) join (z2--.6[z2,z3]);
  draw (.4[z6,z7]--z7) join (z7--z8);
  join_radius := r4;
  draw (.4[z2,z3]--z10) join (z10--.6[z10,z11]);
  draw (.4[z10,z11]--z11) join (z11--.6[z6,z7]);
endchar;
  
OCRchar("T", W#, H#); "Lettre T";
  x1 = 1/2W;	y1 = 0;
  x2 = x1;	y2 = H;
  x3 = 0;	y3 = H-1/8H;
  x4 = x3;	y4 = y2;
  x5 = W;	y5 = y4;
  x6 = x5;	y6 = y3;
  
  draw z1--z2;
  draw z3--z4--z5--z6;
  fill_corners(4,5);
endchar;
  
OCRchar("U", W#, H#); "Lettre U";
  x1 = 0;	y1 = H;
  x2 = x1;	y2 = 0;
  x3 = W;	y3 = y2;
  x4 = x3;	y4 = y1;
  
  join_radius := T;
  draw ((z1--z2) join (z2--z3)) join (z3--z4);
endchar;
  
OCRchar("V", W#, H#); "Lettre V";
  x1 = 0;	y1 = H;
  x2 = x1;	y2 = 3/4H;
  x3 = 1/2W;	y3 = 0;
  x4 = W;	y4 = y2;
  x5 = x4;	y5 = y1;
  
  draw z1--z2--z3--z4--z5;
  angle_fill_corner(1,2,3); angle_fill_corner(3,4,5);
endchar;
  
OCRchar("W", W#, H#); "Lettre W";
  x1 = 0;	y1 = H;
  x2 = x1;	y2 = 1/8H;
  x3 = 1/8W;	y3 = 0;
  x4 = 3/8W;	y4 = y3;
  x5 = 1/2W;	y5 = y2;
  x6 = x5;	y6 = 5/8H;
  x7 = W-x4;	y7 = y4;
  x8 = W-x3;	y8 = y3;
  x9 = W;	y9 = y2;
  x10 = x9;	y10 = y1;
  
  draw z1--z2--z3--z4--z5--z6; draw z5--z7--z8--z9--z10;
  angle_fill_corner(1,2,3); angle_fill_corner(8,9,10);
endchar;
  
OCRchar("X", W#, H#); "Lettre X";
  x1 = 0;	y1 = H;
  x2 = W;	y2 = 0;
  x3 = x1;	y3 = y2;
  x4 = x2;	y4 = y1;
  
  draw z1--z2; draw z3--z4;
endchar;
  
OCRchar("Y", W#, H#); "Lettre Y";
  x1 = 0;	y1 = H;
  x2 = x1;	y2 = H-1/8H;
  x3 = 1/2W;	y3 = 1/2H;
  x4 = x3;	y4 = 0;
  x5 = W;	y5 = y2;
  x6 = x5;	y6 = y1;
  
  draw z1--z2--z3--z4; draw z3--z5--z6;
  angle_fill_corner(1,2,3); angle_fill_corner(3,5,6);
endchar;
  
OCRchar("Z", W#, H#); "Lettre Z";
  x1 = 0;	y1 = H;
  x2 = W;	y2 = y1;
  x3 = x1;	y3 = 0;
  x4 = x2;	y4 = y3;
  
  draw z1--z2--z3--z4;
  fill_corners(2,3);
  unfill unitsquare shifted (-1.5,-.5) scaled T
    rotated (angle (z2-z3) - 90) shifted z3;
  unfill unitsquare shifted (.5,-.5) scaled T
    rotated (angle (z2-z3) - 90) shifted z2;
endchar;
  
OCRchar(3, W#, H#); "Lettre \AA";
  x1 = 0;	y1 = 0;
  x2 = 1/2W;	y2 = H;
  z3 = 1/4[z1,z2];
  z4 = 3/4[z1,z2];
  x5 = W;	y5 = y1;
  z6 = 1/4[z5,z2];
  z7 = 3/4[z5,z2];
  x8 = 1/8W;	y8 = y4;
  x9 = x8;	y9 = y2;
  x10 = 7/8W;	y10 = y9;
  x11 = x10;	y11 = y8;
 
  draw z1--z4; draw z5--z7; draw z3--z6;
  join_radius := T/2;
  draw (.4[z8,z9]--z9) join (z9--.6[z9,z10]);
  draw (.4[z9,z10]--z10) join (z10--.6[z10,z11]);
  draw (.4[z10,z11]--z11) join (z11--.6[z11,z8]);
  draw (.4[z11,z8]--z8) join (z8--.6[z8,z9]);
endchar;
  
OCRchar(4, W#, H#); "Lettre \"&ditto&"A";
  x1 = 0;	y1 = 0;
  x2 = 1/2W;	y2 = 3/4H;
  x3 = W;	y3 = y1;
  z4 = 3/16[z1,z2];
  z5 = 3/16[z3,z2];
  x6 = x1;	y6 = H;
  x7 = x6;	y7 = H-1/8H;
  x8 = x3;	y8 = y6;
  x9 = x8;	y9 = y7;
  
  draw z1--z2--z3; draw z4--z5; draw z6--z7; draw z8--z9;
endchar;
 
OCRchar(29, W#, H#); "Lettre \AE";
  x1 = 0;	y1 = 0;
  x2 = 1/2W;	y2 = H;
  x3 = 5/8W;	y3 = y2;
  x4 = x3;	y4 = y1;
  z5 = 1/4[z1,z2];
  z6 = 1/4[z4,z3];
  x7 = W;	y7 = y2;
  z8 = 1/2[z4,z3];
  x9 = x7;	y9 = y8;
  x10 = x7;	y10 = y1;
  
  draw z1--z2--z3--z4--z10; draw z5--z6;
  draw z3--z7; draw z8--z9;
endchar;
  
OCRchar(5, W#, H#); "Lettre \~N";
  x1 = 0;	y1 = 0;
  x2 = x1;	y2 = 5/8H;
  x3 = W;	y3 = y1;
  x4 = x3;	y4 = y2;
  x5 = x1;	y5 = H-1/16H;
  x6 = x5;	y6 = H;
  x7 = x3;	y7 = y5;
  x8 = x7;	y8 = y6;
  
  draw z1--z2--z3--z4;
  draw z5--z6--z7--z8;
endchar;
  
OCRchar(31, W#, H#); "Lettre \O";
  currentpicture := O_char;
  x1 = 0;	y1 = 0;
  x2 = W;	y2 = H;
  
  draw z1--z2;
endchar;
  
OCRchar(6, W#, H#); "Lettre \"&ditto&"O";
  x1 = 0;	y1 = 5/16H;
  x2 = 3/8W;	y2 = 0;
  x3 = x2+1/4W; y3 = y2;
  x4 = W;	y4 = y1;
  x5 = x4;	y5 = y4+1/8H;
  x6 = x3;	y6 = 3/4H;
  x7 = x2;	y7 = y6;
  x8 = x1;	y8 = y5;
  z10 = (z1--z2+(z2-z1)) intersectionpoint (z3+(z3-z4)--z4);
  z11 = (z3--z4+(z4-z3)) intersectionpoint (z5+(z5-z6)--z6);
  z12 = (z5--z6+(z6-z5)) intersectionpoint (z7+(z7-z8)--z8);
  z13 = (z7--z8+(z8-z7)) intersectionpoint (z1+(z1-z2)--z2);
  x14 = x1;	y14 = H-1/8H;
  x15 = x14;	y15 = H;
  x16 = x4;	y16 = y14;
  x17 = x16;	y17 = y15;
  
  join_radius := r6;
  draw (.4[z13,z10]--z10) join (z10--.6[z10,z11]);
  draw (.4[z11,z12]--z12) join (z12--.6[z12,z13]);
  join_radius := r5;
  draw (.4[z10,z11]--z11) join (z11--.6[z11,z12]);
  draw (.4[z12,z13]--z13) join (z13--.6[z13,z10]);
  draw z14--z15; draw z16--z17;
endchar;
 
OCRchar(7, W#, H#); "Lettre \"&ditto&"U";
  x1 = 0;	y1 = 3/4H;
  x2 = x1;	y2 = 0;
  x3 = W;	y3 = y2;
  x4 = x3;	y4 = y1;
  x5 = 1/4W;	y5 = H-1/8H;
  x6 = x5;	y6 = H;
  x7 = x5+1/2W; y7 = y5;
  x8 = x7;	y8 = y6;
  
  join_radius := T;
  draw (z1--z2) join (z2--.6[z2,z3]);
  draw (.4[z2,z3]--z3) join (z3--z4);
  draw z5--z6; draw z7--z8;
endchar;
  
OCRchar(".", 1/4W#, 3/16H#+1/8H#); "Point";
  x1 = 0;	y1 = 3/16H;
  x2 = 1/4W;	y2 = y1;
  x3 = x2;	y3 = y1+1/8H;
  x4 = x1;	y4 = y3;
  
  draw z1--z2--z3--z4--cycle;
endchar;
 
OCRchar(",", 1/2W#, 3/8H#); "Virgule";
  x1 = 0;	y1 = 3/8H;
  x2 = 1/2W;	y2 = y1;
  x3 = x2;	y3 = 0;
  
  draw z1--z2--z3;
endchar;
  
OCRchar(":", 1/4W#, 3/16H#+1/8H#+3/8H#+1/8H#); "Deux points";
  x1 = 0;	y1 = 3/16H;
  x2 = 1/4W;	y2 = y1;
  x3 = x2;	y3 = y2+1/8H;
  x4 = x1;	y4 = y3;
  x5 = x1;	y5 = y4+3/8H;
  x6 = x2;	y6 = y5;
  x7 = x6;	y7 = y6+1/8H;
  x8 = x5;	y8 = y7;
  
  draw z1--z2--z3--z4--cycle;
  draw z5--z6--z7--z8--cycle;
endchar;
  
OCRchar(";", 1/2W#, 7/8H#); "Point virgule";
  x1 = 0;	y1 = 3/8H;
  x2 = 1/2W;	y2 = y1;
  x3 = x2;	y3 = 0;
  x4 = x1;	y4 = 3/4H;
  x5 = 1/4W;	y5 = y4;
  x6 = x5;	y6 = 7/8H;
  x7 = x4;	y7 = y6;
  
  draw z1--z2--z3;
  draw z4--z5--z6--z7--cycle;
endchar;
 
OCRchar("=", W#, 3/8H#+5/16H#); "Egale";
  x1 = 0;	y1 = 3/8H;
  x2 = W;	y2 = y1;
  x3 = x1;	y3 = y1+5/16H;
  x4 = x2;	y4 = y3;
  
  draw z1--z2; draw z3--z4;
endchar;
  
OCRchar("+", W#, 1/2H#-1/2W#+W#); "Plus";
  x1 = 0;	y1 = 1/2H;
  x2 = W;	y2 = y1;
  x3 = 1/2W;	y3 = 1/2H-1/2W;
  x4 = x3;	y4 = y3+W;
  
  draw z1--z2; draw z3--z4;
endchar;
  
OCRchar("/", W#, H#); "Barre oblique";
  x1 = 0;	y1 = 0;
  x2 = W;	y2 = H;
  
  draw z1--z2;
endchar;
  
OCRchar("*", W#, 1/8H#+3/4H#); "Ast\'erisque";
  x1 = 0;	y1 = 1/4H;
  x2 = 1/2W;	y2 = 1/8H;
  x3 = W;	y3 = y1;
  x4 = x3;	y4 = 3/4H;
  x5 = x2;	y5 = y2+3/4H;
  x6 = x1;	y6 = y4;
  
  draw z1--z4; draw z2--z5; draw z3--z6;
endchar;
  
OCRchar(ditto, W#, H#); "Guillemet";
  x1 = 0;	y1 = H;
  x2 = 1/8W;	y2 = 5/8H;
  x3 = 1/4W;	y3 = y1;
  x4 = 3/4W;	y4 = y1;
  x5 = x4+1/8W; y5 = y2;
  x6 = W;	y6 = y1;
  
  draw z3--z1--z2--z3--z4--z5--z6--z4;
  fill_corners(1,6);
  unfill unitsquare shifted (-1.5,-.5) rotated (angle (z1-z2) - 90)
    scaled T shifted z1;
  unfill unitsquare shifted (1.5,-.5) rotated (90 - angle (z6-z5))
    scaled T shifted z6;
endchar;
  
OCRchar("{", W#, H#); "Parenth\`ese gauche";
  x1 = 0;	y1 = 1/2H;
  x2 = 1/2W;	y2 = y1;
  x3 = x2;	y3 = 0;
  x4 = W;	y4 = y3;
  x5 = x2;	y5 = H;
  x6 = x4;	y6 = y5;
  
  join_radius := T;
  draw (z1--z2) join (z2--.6[z2,z3]);
  draw (z1--z2) join (z2--.6[z2,z5]);
  join_radius := 1/2T;
  draw (.4[z2,z3]--z3) join (z3--z4);
  draw (.4[z2,z5]--z5) join (z5--z6);
endchar;
  
OCRchar("}", W#, H#); "Parenth\`ese droite";
  x1 = W;	y1 = 1/2H;
  x2 = 1/2W;	y2 = y1;
  x3 = x2;	y3 = 0;
  x4 = 0;	y4 = y3;
  x5 = x2;	y5 = H;
  x6 = x4;	y6 = y5;
  
  join_radius := T;
  draw (z1--z2) join (z2--.6[z2,z3]);
  draw (z1--z2) join (z2--.6[z2,z5]);
  join_radius := 1/2T;
  draw (.4[z2,z3]--z3) join (z3--z4);
  draw (.4[z2,z5]--z5) join (z5--z6);
endchar;
 
OCRchar("%", W#, H#); "Pour cent";
  x1 = 0;	y1 = 1/8H;
  x2 = W;	y2 = y1+3/4H;
  x3 = x1;	y3 = y2;
  x4 = x3+1/4W; y4 = y3;
  x5 = x4;	y5 = H;
  x6 = x3;	y6 = y5;
  x7 = x2-1/4W; y7 = 0;
  x8 = x2;	y8 = y7;
  x9 = x8;	y9 = y1;
  x10 = x7;	y10 = y9;
  
  draw z1--z2;
  draw z3--z4--z5--z6--cycle;
  draw z7--z8--z9--z10--cycle;
endchar;
  
OCRchar("?", W#, H#); "Point d' interrogation";
  x1 = 0;	y1 = H-3/8H;
  x2 = W-1/4W;	y2 = H;
  x3 = W;	y3 = H-1/8H;
  x4 = x3;	y4 = 3/4H;
  x5 = 1/4W;	y5 = y6+1/8H;
  x6 = x5;	y6 = 1/4H;
  x7 = x5;	y7 = 0;
  
  draw z1--z2--z3--z4--z5--z6; drawdot z7;
endchar;
 
OCRchar("&", W#, 7/8H#); "Perlu\`ete";
  x1 = W;	y1 = 0;
  x2 = 0;	y2 = y6+3/8H;
  x3 = x2;	y3 = 7/8H;
  x4 = 3/4W;	y4 = y3;
  x5 = x4;	y5 = y2;
  x6 = x2;	y6 = 1/4H;
  x7 = x2;	y7 = y1;
  x8 = 1/2W;	y8 = y1;
  x9 = x1;	y9 = y6;
  
  join_radius := T;
  draw (z1--z2--z3) join (z3--.6[z3,z4]);
  draw (.4[z3,z4]--z4) join (z4--z5);
  draw (z5--z6--z7) join (z7--z8--z9);
endchar;
  
OCRchar("'", 1/4W#, H#); "Apostrophe";
  x1 = 0;	y1 = H;
  x2 = 1/8W;	y2 = 5/8H;
  x3 = 1/4W;	y3 = y1;
  
  draw z1--z2--z3--cycle;
endchar;
  
OCRchar("-", W#, 1/2H#); "Moins, trait d'union";
  x1 = 0;	y1 = 1/2H;
  x2 = W;	y2 = y1;
  
  draw z1--z2;
endchar;
  
OCRchar("$", W#, H#); "Symbole dollar";
  x1 = 0;	y1 = 1/4H;
  x2 = W;	y2 = y1;
  x3 = x2;	y3 = 1/2H;
  x4 = x1;	y4 = y3;
  x5 = x1;	y5 = y4+1/4H;
  x6 = x2;	y6 = y5;
  x7 = 1/2W;	y7 = 0;
  x8 = x7;	y8 = y1;
  x9 = x7;	y9 = y5;
  x10 = x7;	y10 = H;
 
  draw z1--z2--z3--z4--z5--z6; draw z7--z8; draw z9--z10;
endchar;
  
OCRchar(8, W#, H#); "Symbole livre";
  x1 = 0;	y1 = 0;
  x2 = W;	y2 = y1;
  x3 = 1/4W;	y3 = y1;
  x4 = x2-1/4W; y4 = H;
  x5 = x2;	y5 = y4;
  x6 = x1;	y6 = 1/2H;
  x7 = x2;	y7 = y6;
  
  join_radius := T;
  draw z1--z2; draw (z3--z4) join (z4--z5); draw z6--z7;
endchar;
  
OCRchar(9, W#, H#); "Symbole yen";
  x1 = 0;	y1 = H;
  x2 = 1/2W;	y2 = 1/2H;
  x3 = W;	y3 = y1;
  x4 = x2;	y4 = 0;
  x5 = x1;	y5 = 3/8H;
  x6 = x3;	y6 = y5;
  
  draw z1--z2--z3; draw z2--z4; draw z5--z6;
endchar;
 
designsize := L#;
  
font_slant := 0;
font_quad := 2W#;
font_normal_space := W#;
font_normal_stretch := .5W#;
font_normal_shrink := .4W#;
font_xheight := H#;
  
end.
SHAR_EOF
fi # end of overwriting check
#	End of shell archive
exit 0