%% @mffile{
%%     filename="amsmodes.mf",
%%     version="2.1b",
%%     date="30-NOV-1992",
%%     filetype="Metafont: ",
%%     copyright="Copyright (C) American Mathematical Society,
%%            all rights reserved.  Copying of this file is
%%            authorized only if either:
%%            (1) you make absolutely no changes to your copy
%%                including name; OR
%%            (2) if you do make changes, you first rename it to some
%%                other name.",
%%     author="American Mathematical Society",
%%     address="American Mathematical Society,
%%            Technical Support Department,
%%            P. O. Box 6248,
%%            Providence, RI 02940,
%%            USA",
%%     telephone="401-455-4080 or (in the USA) 800-321-4AMS",
%%     email="Internet: Tech-Support@Math.AMS.org",
%%     codetable="ISO/ASCII",
%%     checksumtype="line count",
%%     checksum="178",
%%     keywords="amsfonts, tex, metafont  ",
%%     abstract=""
%%     }
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% This file is based on Stanford's WAITS.mf.  A few extra modes
% are added and the file CURMODE.mf is input at the end if
% the variable "mode" is unknown.

% This file can be loaded after PLAIN.MF.
base_version:=base_version&"/WAITS";

% We make the following modification of "mode_def" from PLAIN in order
% to accomodate modes not preloaded in MF.  Even though mode had been
% set dependently on the command line (as with mode=talaris), when
% mode_def came along to define "talaris" the assignment operator
% (:=) wiped out that dependency and left mode hanging and undefined
% when mode_setup was called.  We simply add a test to see whether
% "mode" has been set to the mode being defined.

% Furthermore, if mode was set to a mode which was preloaded and
% that mode was re-defined at run-time, the value of mode would
% only pick up the old definition.  So, for the other case,
% that the mode being defined already has a numeric realization,
% we avoid redefining that mode's (behind-the-scenes) value.

% We also add the following macros to enable conditional "and"
% and "or".  See The METAFONTBook, pp.288-9

def cand(text q) = startif true q else: false fi enddef;
def cor(text q) = startif true true else: q fi enddef;
tertiarydef p startif true = if p: enddef;


def mode_def suffix $ =
 if known($) cand
   (numeric $ cand
   ($<number_of_modes cand
   (mode_name[$] = (str $ & "_")))):
 else: if known(mode-$) cand (unknown mode): mode:= fi
       $:=incr number_of_modes;
       mode_name[$]:=str$ & "_";
 fi
 expandafter quote def scantokens mode_name[$] enddef;


screen_rows:=400; screen_cols:=480;

% Here are conventions for local output devices:

mode_def pcscreen =  % pcscreen mode: for screen fonts (118dpi)
 proofing:=0;      % no, we're not making proofs
 fontmaking:=1;      % yes, we are making a font
 tracingtitles:=0;    % no, don't show titles in the log
 pixels_per_inch:=118;
 blacker:=0;      % Canon engine is black enough
 fillin:=0;      % and it tends to fill in diagonals
 o_correction:=0;    % don't overshoot
 enddef;          

mode_def epsonlq =  % epsonlq mode: for the Epson LQ and Toshiba
 proofing:=0;      % no, we're not making proofs
 fontmaking:=1;      % yes, we are making a font
 tracingtitles:=0;    % no, don't show titles in the log
 pixels_per_inch:=180;
 blacker:=0;      % don't make pens any blacker
 fillin:=0;      % and don't compensate for diagonal fillin
 o_correction:=.3;    % but don't overshoot much
 enddef;

mode_def epsonx =  % Epson 240dpi
 proofing:=0;      % no, we're not making proofs
 fontmaking:=1;      % yes, we are making a font
 tracingtitles:=0;    % no, don't show titles in the log
 pixels_per_inch:=240;    % lowres
 blacker:=0;      % don't make the pens any blacker
 fillin:=0;      % and don't compensate for fillin
 o_correction:=.2;    % but suppress most overshoots
 aspect_ratio:=9/10;    % 216 dots/inch vertical
 enddef;

mode_def laser =  % laser mode: for the Apple LaserWriter or Canon 300dpi
 proofing:=0;      % no, we're not making proofs
 fontmaking:=1;      % yes, we are making a font
 tracingtitles:=0;    % no, don't show titles in the log
 pixels_per_inch:=300;
 blacker:=0;      % Canon engine is black enough
 fillin:=.2;      % and it tends to fill in diagonals
 o_correction:=.6;    %
 enddef;          

mode_def fourc =  % for 400dpi printers 
 proofing:=0;      % no, we're not making proofs
 fontmaking:=1;      % yes, we are making a font
 tracingtitles:=0;    % no, don't show titles in the log
 pixels_per_inch:=400;
 blacker:=0;      % engine is black enough
 fillin:=.2;      % and it tends to fill in diagonals
 o_correction:=.6;    %
 enddef;          

% macintosh mode: for screen fonts (72dpi) & imagewriter (144dpi)
mode_def macintosh =  
 proofing:=0;      % no, we're not making proofs
 fontmaking:=1;      % yes, we are making a font
 tracingtitles:=0;    % no, don't show titles in the log
 pixels_per_inch:=72;
 blacker:=0;      % Don't blacken
 fillin:=0;      % 
 o_correction:=0;    %
 enddef;          

mode_def notimagewriter =  % notimagewriter mode: to get 129pk for screen
       % Largest resolution which guarantees at least one point size less
       % than imagewriter size.
 proofing:=0;      % no, we're not making proofs
 fontmaking:=1;      % yes, we are making a font
 tracingtitles:=0;    % no, don't show titles in the log
 pixels_per_inch:=129;
 blacker:=0;      % Don't blacken
 fillin:=0;      % 
 o_correction:=0;    %
 enddef;          

localfont:=laser;

% Finally, here are macros for Xerox-world font info:

def font_family expr s =  % string s names the font family, e.g., "CMR"
 headerbyte 49: BCPL_string(s,20);
 special "identifier "&s enddef;
def coding_scheme expr s = % string s names the scheme, e.g. "TEX TEXT"
 headerbyte 9: BCPL_string(s,40);
 special "codingscheme "&s enddef;
def font_face_byte expr x = % integer x gives the family member number,
 headerbyte 72: x;          % which should be between 0 and 255
 special "fontfacebyte"; numspecial x enddef;

def BCPL_string(expr s,n)= % string s becomes an n-byte BCPL string
 for l:=if length(s)>=n: n-1 else: length(s) fi: l
  for k:=1 upto l: , substring (k-1,k) of s endfor
  for k:=l+2 upto n: , 0 endfor endfor enddef;

Xerox_world:=1;    % users can say `if known Xerox_world:...fi'

inner end;
def bye=
 if fontmaking>0: font_family font_identifier_;
  coding_scheme font_coding_scheme_;
  font_face_byte max(0,254-round 2designsize); fi
 tracingstats:=1;  % at least for now we want this
 end
 enddef;

outer bye,end;
