%%% @mffile{
%%%     filename="necker.mf",
%%%     version="",
%%%     date="",
%%%     filetype="mf fontcreator",
%%%     package="m-capbas.arj"
%%%     author="Phons Bloemen (PhB)",
%%%     address="Eindhoven U. of Technology"
%%%     email="Internet: phons@ei.ele.tue.nl",
%%%     codetable="ISO/ASCII",
%%%     checksumtype="none",
%%%     checksum="0",
%%%     keywords="",
%%%     abstract="
%%%        Generates necker font, a 5x7 grid font.
%%%        This font was used on old terminals (Adm3a, the 'egg')
%%%        It is also used on flip-dot displays on buses, reason
%%%        why i called it 'Necker'. The Eindhoven bus station
%%%        is called 'Neckerspoel', and has futuristic route
%%%        indicators using this font.
%%%        Part of Capital Baseball package"
%%%     copyright="Copyleft (L) Phons Bloemen (PhB),
%%%        according to GNU public licence version 2 or later.
%%%        (1) Do not change this file (even its name)
%%%        (2) if you do make changes, first rename it to some
%%%            other name, and mark your changes clearly.",
%%%     }
%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


%% if unknown cmbase: input cmbase fi
%% mode_setup;
%% def generate suffix t= enddef;
%% input cmtt10; font_setup;
%% get some definitions from cmtt10 for proper setup
%% do not ask why this sequence is used, it works!

mode_setup;

if unknown gensize: gensize := 10; fi;
em# := gensize * 0.3pt#;
uu# := 0.3 em#;
font_coding_scheme:="TeX text";
font_identifier:="NECKER";
font_size gensize * 1pt#;
body_height#:=5uu#;  % height of tallest characters
asc_height#:=5uu#;    % height of lowercase ascenders
cap_height#:=5uu#;    % height of caps
fig_height#:=5uu#;    % height of numerals
x_height#:=4uu#;    % height of lowercase without ascenders
math_axis#:=3uu#;    % axis of symmetry for math symbols
bar_height#:=3uu#;    % height of crossbar in lowercase e
comma_depth#:=1uu#;    % depth of comma below baseline
desc_depth#:=1uu#;    % depth of lowercase descenders
%% monospace := false;
%% font_setup;
font_normal_space 4uu#;
font_quad 18uu#;
font_extra_space 4uu#;

%%% This draws the dot matrix (a generic function, can
%%% be used for many dot matrix characters).
%%% Parameters of 'flychar':
%%%     c : character number (decimal)
%%%     k : # dots horizontal ('width')           0  1  2  3
%%%     l : # dots vertical ('height')            4  5  6  7
%%%     m : # dots descender ('depth')            8  9 10 11
%%%     t : sequence of dot numbers to set.      12 13 14 15
%%%         Dot numbering of a 4 x 5 'flychar':  16 17 18 19

def flychar(expr c,k,l,m)(text t) =
beginchar((char c), (k+1)*uu#, l*uu#, m*uu#);
   clearit;
   pickup pencircle xscaled (w/(k+1)) yscaled((h+d)/(l+m));
   for a = t :
      drawdot((0.5+(a mod k))*w/(k+1),h-((0.5+floor(a/k))*(h+d)/(l+m)));
   endfor;
endchar;
enddef;

%%% The space character is special

beginchar(32,4*uu#,5*uu#,0);
endchar;

%%% The 'flychar' characters follow (upper and lower case!)

flychar(33,1,7,0)(0,1,2,3,4,6);
flychar(34,3,7,0)(0,2,3,5);
flychar(35,5,7,0)(1,3,6,8,10,11,12,13,14,16,18,20,21,22,23,24,26,28,31,33)
flychar(36,5,7,0)(2,6,7,8,10,12,16,17,18,22,24,26,27,28,32);
flychar(37,5,7,0)(0,1,5,6,9,13,17,21,25,28,29,33,34);
flychar(38,5,7,0)(1,5,7,10,12,16,20,22,24,25,28,31,32,34);
flychar(39,2,7,0)(1,2);
flychar(40,3,7,0)(2,4,6,9,12,16,20);
flychar(41,3,7,0)(0,4,8,11,14,16,18);
flychar(42,5,7,0)(7,10,12,14,16,17,18,20,22,24,27);
flychar(43,5,7,0)(7,12,15,16,17,18,19,22,27);
flychar(44,2,2,1)(0,1,3,4);
flychar(45,5,7,0)(15,16,17,18,19);
flychar(46,2,2,0)(0,1,2,3);
flychar(47,5,7,0)(9,13,17,21,25);
flychar(48,5,7,0)(1,2,3,5,9,10,13,14,15,17,19,20,21,24,25,29,31,32,33);
flychar(49,3,7,0)(1,3,4,7,10,13,16,18,19,20);
flychar(50,5,7,0)(1,2,3,5,9,14,18,22,26,30,31,32,33,34);
flychar(51,5,7,0)(0,1,2,3,4,5,9,13,17,18,24,25,29,31,32,33);
flychar(52,5,7,0)(3,7,8,11,13,15,18,20,21,22,23,24,28,33);
flychar(53,5,7,0)(0,1,2,3,4,5,10,11,12,13,19,24,25,29,31,32,33);
flychar(54,5,7,0)(2,3,6,10,15,16,17,18,20,24,25,29,31,32,33);
flychar(55,5,7,0)(0,1,2,3,4,9,13,17,22,27,32);
flychar(56,5,7,0)(1,2,3,5,9,10,14,16,17,18,20,24,25,29,31,32,33);
flychar(57,5,7,0)(1,2,3,5,9,10,14,16,17,18,19,24,28,31,32);
flychar(58,2,5,0)(0,1,2,3,6,7,8,9);
flychar(59,2,5,1)(0,1,2,3,6,7,9,10);
flychar(60,4,7,0)(3,6,9,12,17,22,27);
flychar(61,5,7,0)(10,11,12,13,14,20,21,22,23,24);
flychar(62,4,7,0)(0,5,10,15,18,21,24);
flychar(63,5,7,0)(1,2,3,5,9,14,17,22,32);
flychar(64,5,7,0)(1,2,3,5,9,10,12,1,14,15,17,19,20,22,23,24,25,31,32,33,34);
flychar(65,5,7,0)(1,2,3,5,9,10,14,15,16,17,18,19,20,24,25,29,30,34);
flychar(66,5,7,0)(0,1,2,3,5,9,10,14,15,16,17,18,20,24,25,29,30,31,32,33);
flychar(67,5,7,0)(1,2,3,9,5,10,15,20,25,31,32,33,29);
flychar(68,5,7,0)(0,1,2,3,5,9,10,14,15,19,20,24,25,29,30,31,32,33);
flychar(69,5,7,0)(0,1,2,3,4,5,10,15,16,17,18,20,25,30,31,32,33,34);
flychar(70,5,7,0)(0,1,2,3,4,5,10,15,16,17,18,20,25,30);
flychar(71,5,7,0)(1,2,3,5,9,10,15,18,19,20,24,25,29,31,32,33);
flychar(72,5,7,0)(0,4,5,9,10,14,15,16,17,18,19,20,24,25,29,30,34);
flychar(73,3,7,0)(0,1,2,4,7,10,13,16,18,19,20);
flychar(74,5,7,0)(4,9,14,19,24,25,29,31,32,33);
flychar(75,5,7,0)(0,4,5,8,10,12,15,16,20,22,25,28,30,34);
flychar(76,5,7,0)(0,5,10,15,20,25,30,31,32,33,34);
flychar(77,5,7,0)(0,4,5,6,8,9,10,12,14,15,17,19,20,24,25,29,30,34);
flychar(78,5,7,0)(0,4,5,9,10,11,14,15,17,19,20,23,24,25,29,30,34);
flychar(79,5,7,0)(1,2,3,5,9,10,14,15,19,20,24,25,29,31,32,33);
flychar(80,5,7,0)(0,1,2,3,5,9,10,14,15,16,17,18,20,25,30);
flychar(81,5,7,0)(1,2,3,5,9,10,14,15,19,20,22,24,25,28,31,32,34);
flychar(82,5,7,0)(0,1,2,3,5,9,10,14,15,16,17,18,20,22,25,28,30,34);
flychar(83,5,7,0)(1,2,3,5,9,10,16,17,18,24,25,29,31,32,33);
flychar(84,5,7,0)(0,1,2,3,4,7,12,17,22,27,32);
flychar(85,5,7,0)(0,4,5,9,10,14,15,19,20,24,25,29,31,32,33);
flychar(86,5,7,0)(0,4,5,9,10,14,16,18,21,23,27,32);
flychar(87,5,7,0)(0,4,5,9,10,14,15,17,19,20,22,24,25,26,28,29,31,33);
flychar(88,5,7,0)(0,4,5,9,11,13,17,21,23,25,29,30,34);
flychar(89,5,7,0)(0,4,5,9,11,13,17,22,27,32);
flychar(90,5,7,0)(0,1,2,3,4,9,13,17,21,25,30,31,32,33,34);
flychar(91,2,7,0)(0,1,2,4,6,8,10,12,13);
flychar(92,5,7,0)(5,11,17,23,29);
flychar(93,2,7,0)(0,1,3,5,7,9,11,12,13);
flychar(94,3,7,0)(1,3,5);
flychar(95,5,1,1)(5,6,7,8,9);
flychar(96,2,7,0)(1,2);
flychar(97,5,5,0)(1,2,5,8,10,13,15,18,21,22,24);
flychar(98,5,7,0)(0,5,10,11,12,13,15,19,20,24,25,29,30,31,32,33);
flychar(99,5,5,0)(1,2,3,5,9,10,15,21,22,23,24);
flychar(100,5,7,0)(4,9,11,12,13,14,15,19,20,24,25,29,31,32,33,34);
flychar(101,5,5,0)(1,2,3,5,9,10,11,12,13,15,21,22,23);
flychar(102,3,7,0)(2,4,7,9,10,11,13,16,19);
flychar(103,5,5,1)(1,2,3,4,5,9,10,14,16,17,18,19,24,27,28);
flychar(104,5,7,0)(0,5,10,11,12,13,15,19,20,24,25,29,30,34);
flychar(105,2,7,0)(1,4,5,7,9,11,13);
flychar(106,2,7,1)(1,4,5,7,9,11,13,14);
flychar(107,5,7,0)(0,5,10,14,15,18,20,21,22,25,28,30,34);
flychar(108,2,7,0)(0,2,4,6,8,10,12,13);
flychar(109,5,5,0)(1,3,5,7,9,10,12,14,15,19,20,24);
flychar(110,5,5,0)(0,1,2,3,5,9,10,14,15,19,20,24);
flychar(111,5,5,0)(1,2,3,5,9,10,14,15,19,21,22,23);
flychar(112,5,5,1)(1,2,3,5,9,10,14,15,16,17,18,20,25);
flychar(113,5,5,1)(1,2,3,5,9,10,14,16,17,18,19,24,29);
flychar(114,5,5,0)(0,2,3,5,6,9,10,15,20);
flychar(115,5,5,0)(1,2,3,5,11,12,13,19,20,21,22,23);
flychar(116,3,7,0)(3,6,7,8,9,12,15,17,19);
flychar(117,5,5,0)(0,4,5,9,10,14,15,19,21,22,23);
flychar(118,5,5,0)(0,4,5,9,11,13,16,18,22);
flychar(119,5,5,0)(0,4,5,9,10,12,14,15,16,18,19,21,23);
flychar(120,5,5,0)(0,4,6,8,12,16,18,20,24);
flychar(121,5,5,1)(0,4,5,9,10,14,16,17,18,19,24,27,28);
flychar(122,5,5,0)(0,1,2,3,4,8,12,16,20,21,22,23,24);
flychar(123,3,7,0)(2,4,7,9,13,16,20);
flychar(124,1,7,0)(0,1,2,3,4,5,6);
flychar(125,3,7,0)(0,4,7,11,13,16,18);
flychar(126,5,7,0)(1,4,5,7,8);

bye.