\def\MFF@version{1.21 [June 1996]}
\typeout{LaTeX Style file MFF.STY, ver. \MFF@version}

\def\MFFcatcode{%
    \chardef\oldatcatcode=\catcode`@
    \chardef\oldsubcatcode=\catcode`_
    \catcode`@=11
    \catcode`_=11
}

\def\noMFFcatcode{%
    \catcode`@=\oldatcatcode
    \catcode`_=\oldsubcatcode
}

\def\otherMFFcatcode{%
    \catcode`@=12
    \catcode`_=12
}

\def\letterMFFcatcode{%
    \catcode`@=11
    \catcode`_=11
}

\MFFcatcode

\newif\ifMFF@dcfont
\MFF@dcfontfalse

%
% select approximation scheme: dcfonts, sauter
%

\def\MFFsauter{\def\MFF@apptype{SAUTER}}
\def\MFFdcfonts{\def\MFF@apptype{DCFONT}}

\input{mfdcdata.tex}
\input{mfsauter.tex}
\input{mfcorfnt.tex}
\input{mftricks.tex}
\input{mfarithm.tex}

\newwrite\MFF@outfont
\newread\MFF@checkfont

% type warning message
\def\MFF@warning#1{\immediate\write16{<MFF/line=\the\inputlineno>: #1}}
\def\MFF@warncorr#1{\MFF@warning{Variable "#1" is corrected}}

%  open new font: #1 = internal name, #2 = file name, #3 = scaling
\def\MFF@open#1#2#3{%
    \immediate\openout\MFF@outfont=#2.mf
    \openin\MFF@checkfont=#2.tfm
    \ifeof\MFF@checkfont
          \MFF@warning{No file #2.tfm -- dummy font will be used}%
          \font #1=dummy\relax
    \else
          \font #1=#2 #3\relax
    \fi
    \closein\MFF@checkfont
    \MFF@warning{Do not forget to process #2.mf
              and reprocess this file}%
}

%  write to \MFF@outfont some string
\def\MFF@write#1{\immediate\write\MFF@outfont{#1}\ignorespaces}

%  close output file
\def\MFF@close{\MFF@write{}\immediate\closeout\MFF@outfont}

%
%  output primitives
%
\chardef\tempoldCod=\catcode`# \chardef\tempoldcoD=\catcode`^
\chardef\tempoldCoD=\catcode37
\catcode`#=12 \catcode`^=6 \catcode37=12

\def\MFF@p{#}
\def\MFF@c{%}

\def\MFF@comment^1{\MFF@write{% \space ^1}}
\def\MFF@commstr^1^2{\MFF@write{^1 \space\space\space % ^2}}
\def\MFF@capsprmdc{\MFF@write{lower.uu#:= lower.u#;}}
\def\MFF@capsprm^1^2^3{\MFF@write{lower.^1#:= \space\space\space % ^3}
                       \MFF@write{ \space\space\space ^1# * (^2);}}
\def\MFF@capsval^1^2^3{\MFF@write{lower.^1:= \space\space\space % ^3}
                       \MFF@write{ \space\space\space ^1 * (^2) ;}}
\def\MFF@parameter^1^2^3{\MFF@write{^1:=\@tempa^2; \space\space\space % ^3}}
\def\MFF@parmreal^1^2{\MFF@parm{^1}\MFF@parameter{^1#}{/36pt#}{^2}}
\def\MFF@parmrule^1^2{\MFF@parm{^1}\MFF@parameter{^1#}{/100pt#}{^2}}
\def\MFF@parmfactor^1^2{\MFF@parm{^1}\MFF@parameter{^1}{}{^2}}
\def\MFF@parmsize^1{\MFF@convert{^1}\MFF@write{font_size \@tempa pt#;}}

\catcode`#=\tempoldCod \catcode`^=\tempoldcoD \catcode37=\tempoldCoD

% set slant value
\def\MFFslant#1{\global\edef\MFF@slant{#1}}
\def\MFFslantD#1{\global\edef\MFF@slant{sind(#1)/cosd(#1)}}

% set flags
\def\MFF@setflag#1#2{%
    \if y#1 \global\expandafter\edef\csname MFF@#2\endcsname{true}\fi
    \if n#1 \global\expandafter\edef\csname MFF@#2\endcsname{false}\fi}

\def\MFFflagLigs#1{%
    \if s#1 \def\MFF@ligs{\ifdim \@tempdima<6pt 1 \else 2\fi}\fi
    \if n#1 \def\MFF@ligs{0}\fi
    \if 0#1 \def\MFF@ligs{0}\fi
    \if 1#1 \def\MFF@ligs{1}\fi
    \if 2#1 \def\MFF@ligs{2}\fi
}

\def\MFFflagSquareDots#1{\MFF@setflag{#1}{squaredots}}
\def\MFFflagHefty#1{\MFF@setflag{#1}{hefty}}
\def\MFFflagSerifs#1{\MFF@setflag{#1}{serifs}}
\def\MFFflagMonospace#1{\MFF@setflag{#1}{monospace}}
\def\MFFflagVariantG#1{\MFF@setflag{#1}{variantg}}
\def\MFFflagLowAsterisk#1{\MFF@setflag{#1}{lowasterisk}}
\def\MFFflagMathSpacing#1{\MFF@setflag{#1}{mathfitting}}

%
% set font mixture
%
\def\MFF@add@cmr#1{\global\def\MFF@frac@CMR{#1}}
\def\MFF@add@bold#1{\global\def\MFF@frac@CMB{#1}}
\def\MFF@add@x#1{\global\def\MFF@frac@CMX{#1}}
\def\MFF@add@bx#1{\MFF@add@b{#1}\MFF@add@x{#1}}
\def\MFF@add@sf#1{\global\def\MFF@frac@CMS{#1}}
\def\MFF@add@tt#1{\global\def\MFF@frac@CMT{#1}}
\def\MFF@add@fib#1{\global\def\MFF@frac@FIB{#1}}
\def\MFF@add@funny#1{\global\def\MFF@frac@CMF{#1}}

\def\MFFmixture#1#2#3#4#5#6{\MFF@add@cmr{1}%
    \MFF@add@bold{#1}\MFF@add@x{#2}\MFF@add@sf{#3}\MFF@add@tt{#4}%
    \MFF@add@fib{#5}\MFF@add@funny{#6}%
}

\def\clearMFF{\MFFmixture{0}{0}{0}{0}{0}{0}}
\def\mixMFF{\@ifnextchar[{\mixMFF@}{\mixMFF@[1.0]}}
\def\setMFF{\clearMFF\mixMFF}

\def\mixMFF@[#1]#2{%
    \ifx \relax\expandafter\csname MFF@add@#2\endcsname
         \else \csname MFF@add@#2\endcsname{#1}\fi
}

\def\MFFscaleWidth#1{\global\def\MFF@scale@width{#1}}
\def\MFFscaleHeight#1{\global\def\MFF@scale@height{#1}}
\def\MFFscaleAsc#1{\global\def\MFF@scale@asc{#1}}
\def\MFFscaleDesc#1{\global\def\MFF@scale@desc{#1}}
\def\MFFscaleMath#1{\global\def\MFF@scale@math{#1}}
\def\MFFscaleBoldLines#1{\global\def\MFF@scale@bold{#1}}
\def\MFFscaleThinLines#1{\global\def\MFF@scale@thin{#1}}
\def\MFFscaleJoinLines#1{\global\def\MFF@scale@join{#1}}
\def\MFFscaleNotchCut#1{\global\def\MFF@scale@notch{#1}}
\def\MFFscaleDotSize#1{\global\def\MFF@scale@dot{#1}}
\def\MFFscaleSerifDish#1{\global\def\MFF@scale@dish{#1}}

\def\MFFcontrast{\@ifnextchar[{\MFF@@contrast}{\MFF@contrast}}%
\def\MFF@@contrast[#1]{\global\edef\MFF@contrasttype{#1}%
                        \global\edef\MFF@contrast{0.5}}
\def\MFF@contrast#1{\global\edef\MFF@contrasttype{d}%
                        \global\edef\MFF@contrast{#1}}


\newif\if@MFF@checkit
\def\MFFcheck{\@MFF@checkittrue}
\def\MFFnocheck{\@MFF@checkitfalse}

\newif\if@MFF@tricks

%   z = empty (white), b = black,
%   v = vertical, h = horizontal, r = slanted(/), l - slanted (\)
%   d = dotted,   g = rectangular grid, s - slanted grid
%   uppercase(*) = (*) + outline

% #1 - var name, #2 - value
\def\MFF@settrick#1#2{%
    \@negargtrue
    \@tfor \@temp:=zZbBvVhHrRlLdDgGsS\do
    {\if \@temp#2
         \@negargfalse \expandafter\edef\csname#1\endcsname{#2}%
     \fi}%
    \if@negarg \MFF@warning{Illegal pattern style: #2}\fi
}

% #1 - variable, #2 - list of legal values, #3 - command
\def\MFF@checktrick#1#2#3{%
    \@tfor \@temp:=#2\do
    {\if \@temp#1\relax \@negargfalse #3 \fi}%
}

% !!!
% argument #4 is not used currently - reserved for underline effect
% !!!
\def\MFFtrick#1#2#3#4#5{%
    \MFF@settrick{MFF@trickchar}{#1}%
    \MFF@settrick{MFF@trickbox}{#2}%
    \MFF@settrick{MFF@trickshadow}{#3}%
    \edef\MFF@trick@transform{#5}%
    \@MFF@trickstrue}

\def\trickMFFshadow#1{\MFF@settrick{MFF@trickshadow}{#1}}
\def\trickMFFbox#1{\MFF@settrick{MFF@trickbox}{#1}}
\def\trickMFFchar#1{\MFF@settrick{MFF@trickchar}{#1}}
\def\trickMFFtransform#1{\edef\MFF@trick@transform{#1}}

\def\MFFnotricks{\@MFF@tricksfalse}
\def\MFFfonttricks{\@MFF@trickstrue}

\def\MFFstdtrick#1{\csname MFF@stdtrick@#1\endcsname\@MFF@trickstrue}

\def\MFF@stdtrick@standard{\MFFtrick{b}{z}{z}{}{}}%
\def\MFF@stdtrick@reversed{\MFFtrick{z}{b}{z}{}{}}%
\def\MFF@stdtrick@dotted{\MFFtrick{D}{z}{z}{}{}}%
\def\MFF@stdtrick@striped{\MFFtrick{G}{z}{z}{}{}}%
\def\MFF@stdtrick@stripedH{\MFFtrick{H}{z}{z}{}{}}%
\def\MFF@stdtrick@stripedV{\MFFtrick{V}{z}{z}{}{}}%
\def\MFF@stdtrick@slanted{\MFFtrick{S}{z}{z}{}{}}%
\def\MFF@stdtrick@slantedR{\MFFtrick{R}{z}{z}{}{}}%
\def\MFF@stdtrick@slantedL{\MFFtrick{L}{z}{z}{}{}}%
\def\MFF@stdtrick@outlined{\MFFtrick{Z}{z}{z}{}{}}%
\def\MFF@stdtrick@shadowed{\MFFtrick{b}{z}{b}{}{}}%
\def\MFF@stdtrick@sHadowed{\MFFtrick{Z}{z}{Z}{}{}}%
\def\MFF@stdtrick@shadowonly{\MFFtrick{z}{z}{b}{}{}}%

\def\stepMFFoutline#1{\def\MFF@contourstep{#1}}
\def\stepMFFshadow#1{\def\MFF@shadowstep{#1}}
\def\cornerMFFshadow#1{\def\MFF@shadowstyle{#1}}

\def\stepMFFboxpattern#1{\def\MFF@HPenstep{#1}}
\def\penMFFboxpattern#1{\def\MFF@HPenpen{#1}}
\def\stepMFFcharpattern#1{\def\MFF@MPenstep{#1}}
\def\penMFFcharpattern#1{\def\MFF@MPenpen{#1}}
\def\stepMFFshadowpattern#1{\def\MFF@SPenstep{#1}}
\def\penMFFshadowpattern#1{\def\MFF@SPenpen{#1}}

%
% this code calculates the parameter value:
%   #1 = parameter name
%   #2 = font family
%   \@tempdima = size,
% output: \@tempdimb = value

\def\MFF@calc#1#2{\csname \MFF@apptype @calc\endcsname{#1}{#2}}

\def\SAUTER@calc#1#2{\@tempdimb=0pt \csname SAUTER@#2@#1\endcsname}

\def\DCFONT@calc#1#2{\@tempdimb=0pt
   \csname DCFNT@findpos@#2\endcsname
   % calculate reference points
   \@tempcntb=\@tempcnta \@tempdimb=\z@ \csname DCFNT@#2@#1\endcsname
   \@ovxx=\@tempdimb
   \advance\@tempcntb by 1 \@tempdimb=\z@ \csname DCFNT@#2@#1\endcsname
   \@ovyy=\@tempdimb
   % calculate local inclination
   \MFF@dimenD=\@ovyy \advance \MFF@dimenD by -\@ovxx
   \@tempcntb=\@tempcnta
     \MFF@dimenD=\csname DCFNT@revint@#2\endcsname \MFF@dimenD
   % calculate function
   \@tempcntb=\@tempcnta \csname DCFNT@fntsize@#2\endcsname
   \MFF@dimenA=\@tempdima \advance \MFF@dimenA by -\@tempdimb\relax
   \MFF@multiply{\MFF@dimenA}{\MFF@dimenD}{\@tempdimb}%
   \advance\@tempdimb by \@ovxx
}

% this macro adds fraction of parameter value from other font
% #1 = parm name, #2 = font name
\def\MFF@addparm#1#2{%
    \@tempdimb=\csname MFF@frac@#2\endcsname pt\relax
    \ifdim \@tempdimb=\z@\relax
    \else
        \MFF@calc{#1}{#2}%
        \advance\@tempdimb by -\@ovro
        \advance\@ovri by \csname MFF@frac@#2\endcsname \@tempdimb
    \fi
}

% this macro calculates parameter value:
%   #1 = variable name

\def\MFF@parm#1{%
    \MFF@calc{#1}{CMR}%
    \@ovro=\@tempdimb  \@ovri=\MFF@frac@CMR\@tempdimb
    %  add other font components
    \MFF@addparm{#1}{CMX}%
    \MFF@addparm{#1}{CMB}%
    \MFF@addparm{#1}{CMS}%
    \MFF@addparm{#1}{CMT}%
    \MFF@addparm{#1}{CMF}%
    \MFF@addparm{#1}{FIB}%
    %  correct value
    \@tempdimb=\@ovri
    \csname MFF@assign@#1\endcsname
    \csname MFF@correct@#1\endcsname
    \MFF@convert{\@tempdimb}%
}

%
%  this macro creates the parameter file for CMR font:
%       #1 is (optional) scaling parameter
%       #2 is internal font name
%       #3 is font file name
%       #4 is font size (in pt)
%
\def\MFFgener{\@ifnextchar[{\MFF@font}{\MFF@font[scaled 1000]}}

%
% !!! attention:
%        stem, cap_stem are processed before other "thickness" parms
%        bar_height is processed after x_height
%        asc_height is processed after x_height
%        curve      is processed after stem
%        cap_stem   is processed after stem
%        cap_curve  is processed after curve
%
%    the variables:
%        thin_join, hair, vair, stem, curve, ess, flare, dot_size, bar,
%        slab, cap_hair, cap_stem, cap_curve, cap_ess, cap_bar, cap_band
%    are processed after crisp, tiny, fine
%
%    the variables stem_corr, vair_corr
%    are processed after cap_hair, stem, fudge, curve
%
%    the variable vair_corr is processed after slab, fudge, hair
%
\def\MFF@font[#1]#2#3#4{%
   \MFF@open{#2}{\MFFprefix#3}{#1}
   \MFF@comment{Created by MMF/LaTeX (ver. \MFF@version) at \today.}
   \MFF@write{}
   \csname MFF@title@\MFF@apptype\endcsname
   \MFF@write{}
   \MFF@comment{This font is the modification of}
   \csname MFF@\MFF@class \MFF@fam @header\endcsname
   \@tempdima=#4\relax \ifdim \@tempdima<\z@ \@tempdima=\z@ \fi
   \MFF@parmsize{#4}
   \MFF@write{}
   \MFF@parmreal{u}{unit width}
   \MFF@parmreal{width_adj}{width adjustment for certain characters}
   \MFF@parmreal{serif_fit}{extra sidebar near lowercase serifs}
   \MFF@parmreal{cap_serif_fit}{extra sidebar near uppercase serifs}
   \MFF@parmreal{letter_fit}{extra space added to all sidebars}
   \MFF@write{}
   \MFF@parmreal{body_height}{height of tallest characters}
   \MFF@parmreal{x_height}{height of lowercase without ascenders}
   \MFF@parmreal{asc_height}{height of lowercase ascenders}
   \MFF@parmreal{cap_height}{height of caps}
   \MFF@parmreal{fig_height}{height of numerals}
   \MFF@parmreal{math_axis}{axis of symmetry for math symbols}
   \MFF@parmreal{bar_height}{height of crossbar in lowercase e}
   \MFF@parmreal{comma_depth}{depth of comma below baseline}
   \MFF@parmreal{desc_depth}{depth of lowercase descenders}
   \ifMFF@dcfont
      \MFF@parmreal{acc_height}{height of accents}
      \MFF@parmreal{dot_height}{height of y umlaut dots}
      \MFF@parmreal{udot_height}{height of u umlaut dots (skipped actually)}
   \fi
   \MFF@write{}
   \MFF@parmreal{crisp}{diameter of serif corners}
   \MFF@parmreal{tiny}{diameter of rounded corners}
   \MFF@parmreal{fine}{diameter of sharply rounded corners}
   \MFF@parmreal{stem}{lowercase stem breadth}
   \MFF@parmreal{cap_stem}{uppercase stem breadth}
   \MFF@parmreal{thin_join}{width of extrafine details}
   \MFF@parmreal{hair}{lowercase hairline breadth}
   \MFF@parmreal{curve}{lowercase curve breadth}
   \MFF@parmreal{ess}{breadth in middle of lowercase s}
   \MFF@parmreal{flare}{diameter of bulbs or breadth of terminals}
   \MFF@parmreal{dot_size}{diameter of dots}
   \MFF@parmreal{cap_hair}{uppercase hairline breadth}
   \MFF@parmreal{cap_curve}{uppercase curve breadth}
   \MFF@parmreal{cap_ess}{breadth in middle of uppercase s}
   \MFF@parmrule{rule_thickness}{thickness of lines in math symbols}
   \MFF@write{}
   \MFF@parmreal{dish}{amount erased at top or bottom of serifs}
   \MFF@parmreal{bracket}{vertical distance from serif base to tangent}
   \MFF@parmreal{jut}{protrusion of lowercase serifs}
   \MFF@parmreal{cap_jut}{protrusion of uppercase serifs}
   \MFF@parmreal{beak_jut}{horizontal protrusion of beak serifs}
   \MFF@parmreal{beak}{vertical protrusion of beak serifs}
   \MFF@parmreal{vair}{vertical diameter of hairlines}
   \MFF@parmrule{notch_cut}{maximum breadth above or below notches}
   \MFF@parmreal{bar}{lowercase bar thickness}
   \MFF@parmreal{slab}{serif and arm thickness}
   \MFF@parmreal{cap_bar}{uppercase bar thickness}
   \MFF@parmreal{cap_band}{uppercase thickness above/below lobes}
   \MFF@parmrule{cap_notch_cut}{max breadth above/below uppercase notches}
   \MFF@parmreal{serif_drop}{vertical drop of sloped serifs}
   \MFF@parmreal{apex_corr}{extra width at diagonal junctions}
   \MFF@write{}
   \MFF@parmreal{o}{amount of overshoot for curves}
   \MFF@parmreal{apex_o}{amount of overshoot for diagonal junctions}
   \MFF@write{}
   \edef\@tempa{\MFF@slant}%
   \MFF@parameter{slant}{}{tilt ratio (Delta x/Delta y)}
   \MFF@parmfactor{fudge}{factor applied to weights of heavy characters}
   \MFF@parmfactor{math_spread}{extra openness of math symbols}
   \MFF@parmfactor{superness}{parameter for superellipses}
   \MFF@parmfactor{superpull}{extra openness inside bowls}
   \MFF@parmfactor{beak_darkness}{fraction of triangle inside beak serifs}
   \MFF@write{}
   \MFF@parmreal{stem_corr}{for small refinements of stem breadth}
   \MFF@parmreal{vair_corr}{for small refinements of hairline height}
   \MFF@write{}
   \edef\@tempa{\MFF@ligs}%
   \MFF@commstr{ligs:=\@tempa;}{level of ligatures to be included}
   \MFF@write{}
   \MFF@commstr{square_dots:=\MFF@squaredots;}{should dots be square?}
   \MFF@commstr{hefty:=\MFF@hefty;}{should we try hard not to be overweight?}
   \MFF@commstr{serifs:=\MFF@serifs;}{should serifs and bulbs be attached?}
   \MFF@commstr{monospace:=\MFF@monospace;}{should all characters have the same width?}
   \MFF@commstr{variant_g:=\MFF@variantg;}{should an italic-style g be used?}
   \MFF@commstr{low_asterisk:=\MFF@lowasterisk;}{should the asterisk be centered at the axis?}
   \MFF@commstr{math_fitting:=\MFF@mathfitting;}{should math-mode spacing be used?}
   \if@MFF@tricks
      \MFF@write{}
      \MFF@comment{This part is taken from  "The ABC's of Special Effects"}
      \MFF@comment{by Georgia K.M. Tobin in TUGBoat 9 (1988) No 1 pp. 15--18}
      \MFF@comment{and from "Outline Fonts with Metafont"}
      \MFF@comment{by Doug Henderson in TUGBoat 10 (1989) No 1 pp. 36--38.}
      \MFF@maketrick
   \fi
   \MFF@write{}
   \csname MFF@\MFF@class \MFF@fam @generate\endcsname
   \MFF@close
}

%
%  this macro adds parameters for CAPS
\def\MFF@smallcaps{%
    \MFF@comment{now come replacements used to set the lowercase caps}
    \MFF@write{}
    \MFF@capsprm{u}{16.0/21.0}{unit width}
    \ifMFF@dcfont \MFF@capsprmdc \fi
    \MFF@capsprm{width_adj}{1.0}{width adjustment for certain characters}
    \MFF@capsprm{cap_serif_fit}{40.0/50.0}{extra sidebar near uppercase serifs}
    \MFF@capsprm{letter_fit}{24.0/50.0}{extra space added to all sidebars}
    \MFF@capsprm{body_height}{20.0/27.0}{height of tallest characters}
    \MFF@capsprm{cap_height}{18.5/24.6}{height of caps}
    \MFF@capsprm{x_height}{116.0/155.0}{height of lowercase without ascenders}
    \MFF@capsprm{bar_height}{65.0/87.0}{height of crossbar in lowercase e}
    \MFF@capsprm{comma_depth}{52.0/70.0}{depth of comma below baseline}
    \MFF@capsprm{stem}{21.0/25.0}{lowercase stem breadth}
    \MFF@capsprm{flare}{25.0/33.0}{diameter of bulbs or breadth of terminals}
    \MFF@capsprm{cap_hair}{91.0/110.0}{uppercase hairline breadth}
    \MFF@capsprm{cap_stem}{26.0/32.0}{uppercase stem breadth}
    \MFF@capsprm{cap_curve}{31.0/37.0}{uppercase curve breadth}
    \MFF@capsprm{cap_ess}{28.0/35.0}{breadth in middle of uppercase s}
    \MFF@capsprm{cap_jut}{26.0/37.0}{protrusion of uppercase serifs}
    \MFF@capsprm{beak_jut}{7.0/10.0}{horizontal protrusion of beak serifs}
    \MFF@capsprm{beak}{52.0/70.0}{vertical protrusion of beak serifs}
    \MFF@capsprm{slab}{91.0/110.0}{serif and arm thickness}
    \MFF@capsprm{cap_bar}{91.0/110.0}{uppercase bar thickness}
    \MFF@capsprm{cap_band}{91.0/110.0}{uppercase thickness above/below lobes}
    \MFF@capsprm{cap_notch_cut}{1.0}{max breadth above/below uppercase notches}
    \MFF@capsprm{o}{5.0/8.0}{amount of overshoot for curves}
    \MFF@capsprm{apex_o}{4.0/8.0}{amount of overshoot for diagonal junctions}
    \MFF@capsval{fudge}{1.0}{factor applied to weights of heavy characters}
}

\def\MFF@setcmbas#1{\MFF@common@header
   \MFF@write{}%
   \MFF@commstr{if unknown cmbase: input cmbase fi}{}%
   \MFF@write{}%
   \MFF@write{font_identifier:="#1/MFF";}%
}

\def\MFF@setdcbas#1{\MFF@common@header
   \MFF@write{}%
   \MFF@commstr{if unknown cmbase: }{}%
   \MFF@commstr{\space\space\space if unknown dxbase: input dxbase; fi;}{}%
   \MFF@commstr{else:}{}%
   \MFF@commstr{\space\space\space show "You cannot use cmbase with DC fonts!"; }{}%
   \MFF@commstr{\space\space\space endinput; }{}%
   \MFF@commstr{fi;}{}%
   \MFF@write{}%
   \MFF@write{font_identifier:="#1/MFF";}%
}

\def\MFF@setgener#1{%
   \MFF@commstr{generate #1}{switch to the driver file}%
}

% general header
\def\MFF@common@header{\MFF@write{}
   \MFF@comment{Composition\space\space\space\space\space\space\space:
                bold=\MFF@frac@CMB, x=\MFF@frac@CMX,
                sf=\MFF@frac@CMS, tt=\MFF@frac@CMT,
                fib=\MFF@frac@FIB, funny=\MFF@frac@CMF}
   \MFF@comment{Scale char size\space\space\space:
                widht=\MFF@scale@width, height=\MFF@scale@height,
                asc=\MFF@scale@asc, desc=\MFF@scale@desc,
                math=\MFF@scale@math}
   \MFF@comment{Scale char weight :
                bold line factor=\MFF@scale@bold,
                thin line factor=\MFF@scale@thin}
   \MFF@comment{\space\space\space\space\space\space
                \space\space\space\space\space\space
                \space\space\space\space\space\space\space\space
                contrast type=\MFF@contrasttype,
                contrast factor=\MFF@contrast}
   \MFF@comment{Scale variables\space\space\space:
                join_lines\MFF@p\space * \MFF@scale@join,
                notch_cut\MFF@p\space * \MFF@scale@notch,}
   \MFF@comment{\space\space\space\space\space\space
                \space\space\space\space\space\space
                \space\space\space\space\space\space\space\space
                dot_size\MFF@p\space * \MFF@scale@dot,
                dish\MFF@p\space * \MFF@scale@dish}
   \if@MFF@checkit \MFF@comment{Auto correction\space\space\space: ON}
             \else \MFF@comment{Auto correction\space\space\space: OFF}
   \fi
   \if@MFF@tricks \MFF@comment{Add font tricks\space\space\space:
                               foreground=\MFF@trickchar,
                               background=\MFF@trickbox,
                               shadow=\MFF@trickshadow,
                               transform=\MFF@trick@transform}
            \else  \MFF@comment{Add font tricks\space\space\space: none}
   \fi
}

% CMR family
\def\MFF@CMR@header{%
   \MFF@dcfontfalse
   \MFF@comment{Computer Modern Roman family}%
   \MFF@comment{created by D.E.Knuth [driver=roman.mf]}%
   \MFF@setcmbas{CMR}%
}
\def\MFF@CMR@generate{%
   \MFF@setgener{roman}%
}
\def\MFF@CMI@header{%
   \MFF@dcfontfalse
   \MFF@comment{Computer Modern Text Italic family}%
   \MFF@comment{created by D.E.Knuth [driver=textit.mf]}%
   \MFF@setcmbas{CMTI}%
}
\def\MFF@CMI@generate{%
   \MFF@setgener{textit}%
}
\def\MFF@CMC@header{%
   \MFF@dcfontfalse
   \MFF@comment{Computer Modern Caps and Small Caps family}%
   \MFF@comment{created by D.E.Knuth [driver=csc.mf]}%
   \MFF@setcmbas{CMCSC}%
}
\def\MFF@CMC@generate{%
   \MFF@smallcaps\MFF@write{}%
   \MFF@setgener{csc}%
}

% Samarin/Glonti Roman family
\def\MFF@SGR@header{%
   \MFF@dcfontfalse
   \MFF@comment{Computer Modern Roman Cyrillic family}%
   \MFF@comment{by N.Glonti and A.Samarin [driver=cyrillic.mf]}%
   \MFF@setcmbas{CMRZ}%
}
\def\MFF@SGR@generate{%
   \MFF@setgener{cyrillic}%
}
\def\MFF@SGI@header{%
   \MFF@dcfontfalse
   \MFF@comment{Computer Modern Text Italic Cyrillic family}%
   \MFF@comment{by N.Glonti and A.Samarin [driver=cytextit.mf]}%
   \MFF@setcmbas{CMRIZ}%
}
\def\MFF@SGI@generate{%
   \MFF@setgener{cytextit}%
}
\def\MFF@SGC@header{%
   \MFF@dcfontfalse
   \MFF@comment{Computer Modern Small Caps Cyrillic family}%
   \MFF@comment{by N.Glonti and A.Samarin [driver=cyccsc.mf]}%
   \MFF@setcmbas{CMCCSC}%
}
\def\MFF@SGC@generate{%
   \MFF@smallcaps\MFF@write{}%
   \MFF@setgener{cyccsc}%
}

% Lapko/Khodulev Roman family
\def\MFF@LHR@header{%
   \MFF@dcfontfalse
   \MFF@comment{Computer Modern Roman Cyrillic family}%
   \MFF@comment{by A.Khodulev and O.Lapko [driver=ldrmfont.mf]}%
   \MFF@setcmbas{LHR}%
}
\def\MFF@LHR@generate{%
   \MFF@setgener{ldrmfont;}%
   \MFF@write{bye.}%
}
\def\MFF@LHI@header{%
   \MFF@dcfontfalse
   \MFF@comment{Computer Modern Text Italic Cyrillic family}%
   \MFF@comment{by A.Khodulev and O.Lapko [driver=ldrifont.mf]}%
   \MFF@setcmbas{LHTI}%
}
\def\MFF@LHI@generate{%
   \MFF@setgener{ldrifont;}%
   \MFF@write{bye.}%
}
\def\MFF@LHC@header{%
   \MFF@dcfontfalse
   \MFF@comment{Computer Modern Small Caps Cyrillic family}%
   \MFF@comment{by A.Khodulev and O.Lapko [driver=ldrcfont.mf]}%
   \MFF@setcmbas{LHCSC}%
}
\def\MFF@LHC@generate{%
   \MFF@smallcaps\MFF@write{}%
   \MFF@setgener{ldrcfont;}%
   \MFF@write{bye.}%
}
% Lapko/Khodulev Roman family (cyrillic only)
\def\MFF@LLR@header{%
   \MFF@dcfontfalse
   \MFF@comment{Computer Modern Roman Cyrillic-only family}%
   \MFF@comment{by A.Khodulev and O.Lapko [driver=ldrmfont.mf]}%
   \MFF@setcmbas{LLR}%
}
\def\MFF@LLR@generate{%
   \MFF@commstr{vfcoding=1; }{only cyrillic characters}%
   \MFF@write{}\MFF@setgener{ldrmfont;}%
   \MFF@write{bye.}%
}
\def\MFF@LLI@header{%
   \MFF@dcfontfalse
   \MFF@comment{Computer Modern Text Italic Cyrillic-only family}%
   \MFF@comment{by A.Khodulev and O.Lapko [driver=ldrifont.mf]}%
   \MFF@setcmbas{LLTI}%
}
\def\MFF@LLI@generate{%
   \MFF@commstr{vfcoding=1; }{only cyrillic characters}%
   \MFF@write{}\MFF@setgener{ldrifont;}%
   \MFF@write{bye.}%
}
\def\MFF@LLC@header{%
   \MFF@dcfontfalse
   \MFF@comment{Computer Modern Small Caps Cyrillic-only family}%
   \MFF@comment{by A.Khodulev and O.Lapko [driver=ldrcfont.mf]}%
   \MFF@setcmbas{LLCSC}%
}
\def\MFF@LLC@generate{%
   \MFF@smallcaps\MFF@write{}%
   \MFF@commstr{vfcoding=1; }{only cyrillic characters}%
   \MFF@write{}\MFF@setgener{ldrcfont;}%
   \MFF@write{bye.}%
}

% DC family
\def\MFF@DCR@header{%
   \MFF@dcfonttrue
   \MFF@comment{European Computer Modern Roman family}%
   \MFF@comment{by J"org Knappen and Norbert Schwarz [driver=dxroman.mf]}%
   \MFF@setdcbas{DCR}%
}
\def\MFF@DCR@generate{%
   \MFF@setgener{dxroman}%
}
\def\MFF@DCI@header{%
   \MFF@dcfonttrue
   \MFF@comment{European Computer Modern Text Italic family}%
   \MFF@comment{by J"org Knappen and Norbert Schwarz [driver=dxtextit.mf]}%
   \MFF@setdcbas{DCTI}%
}
\def\MFF@DCI@generate{%
   \MFF@setgener{dxtextit}%
}
\def\MFF@DCC@header{%
   \MFF@dcfonttrue
   \MFF@comment{European Computer Modern Caps and Small Caps family}%
   \MFF@comment{by J"org Knappen and Norbert Schwarz [driver=dxcsc.mf]}%
   \MFF@setdcbas{DCCSC}%
}
\def\MFF@DCC@generate{%
   \MFF@smallcaps\MFF@write{}%
   \MFF@setgener{dxcsc}%
}

\def\MFFclass@CMR{\def\MFF@class{CM}\def\MFF@fam{R}}
\def\MFFclass@LHR{\def\MFF@class{LH}\def\MFF@fam{R}}
\def\MFFclass@LLR{\def\MFF@class{LH}\def\MFF@fam{R}}
\def\MFFclass@CMRZ{\def\MFF@class{SG}\def\MFF@fam{R}}
\def\MFFclass@DCR{\def\MFF@class{DC}\def\MFF@fam{R}}

\def\MFFclass@CMTI{\def\MFF@class{CM}\def\MFF@fam{I}}
\def\MFFclass@LHTI{\def\MFF@class{LH}\def\MFF@fam{I}}
\def\MFFclass@LLTI{\def\MFF@class{LH}\def\MFF@fam{I}}
\def\MFFclass@CMRIZ{\def\MFF@class{SG}\def\MFF@fam{I}}
\def\MFFclass@DCTI{\def\MFF@class{DC}\def\MFF@fam{I}}

\def\MFFclass@CMCSC{\def\MFF@class{CM}\def\MFF@fam{C}}
\def\MFFclass@LHCSC{\def\MFF@class{LH}\def\MFF@fam{C}}
\def\MFFclass@LLCSC{\def\MFF@class{LH}\def\MFF@fam{C}}
\def\MFFclass@CMCCSC{\def\MFF@class{SG}\def\MFF@fam{C}}
\def\MFFclass@DCCSC{\def\MFF@class{DC}\def\MFF@fam{C}}

\def\MFFclass#1{\csname MFFclass@#1\endcsname}

\def\MFFdefault{\MFFnocheck
%
    \MFFscaleWidth{1}%
    \MFFscaleHeight{1}%
    \MFFscaleAsc{1}%
    \MFFscaleDesc{1}%
    \MFFscaleMath{1}%
    \MFFscaleBoldLines{1}%
    \MFFscaleThinLines{1}%
    \MFFscaleJoinLines{1}%
    \MFFscaleNotchCut{1}%
    \MFFscaleDotSize{1}%
    \MFFscaleSerifDish{1}%
    \MFFcontrast[s]%
%
    \MFFslant{0}%
    \MFFflagLigs{s}%
    \MFFflagSquareDots{n}%
    \MFFflagHefty{n}%
    \MFFflagSerifs{y}%
    \MFFflagMonospace{n}%
    \MFFflagVariantG{n}%
    \MFFflagLowAsterisk{n}%
    \MFFflagMathSpacing{n}%
%
    \stepMFFoutline{0.075}%
    \stepMFFshadow{0.5}%
    \cornerMFFshadow{A}%
    \stepMFFboxpattern{0.375}\penMFFboxpattern{0.075}%
    \stepMFFcharpattern{0.375}\penMFFcharpattern{0.075}%
    \stepMFFshadowpattern{0.375}\penMFFshadowpattern{0.075}%
    \MFFstdtrick{standard}%
    \MFFnotricks%
%
    \def\MFFprefix{xx}%
    \MFFsauter
    \MFFmixture{0}{0}{0}{0}{0}{0}%
    \MFFclass{CMR}%
}

\MFFdefault
\noMFFcatcode