summaryrefslogtreecommitdiff
path: root/macros/latex209/contrib/loggates/loggates.mf
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex209/contrib/loggates/loggates.mf
Initial commit
Diffstat (limited to 'macros/latex209/contrib/loggates/loggates.mf')
-rw-r--r--macros/latex209/contrib/loggates/loggates.mf777
1 files changed, 777 insertions, 0 deletions
diff --git a/macros/latex209/contrib/loggates/loggates.mf b/macros/latex209/contrib/loggates/loggates.mf
new file mode 100644
index 0000000000..73d5083de8
--- /dev/null
+++ b/macros/latex209/contrib/loggates/loggates.mf
@@ -0,0 +1,777 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Loggates.mf --- special characters for drawing digital
+% electronic circuits with logical gates.
+%
+% Version history:
+% - "milstd" font by Rick Simpson, font for logical gates
+% as in MIL-STD 806.
+% (published in UKTeX 1988, issue 30 (23 Sept. 1988).)
+% - Extended version, 30 March 1992, by Nico Verwer,
+% now called loggates.mf. Added XOR, NXOR and OR-input
+% lines, supported in loggates.sty.
+%
+% To create the "loggates" font, use the command:
+% makefont loggates
+% or:
+% mf '\mode=localfont; mag=magstepX ; input' loggates.mf
+% for X = 0, 0.5, 1, 2, 3, 4, 5.
+%
+% To use the characters in a PLAIN TeX document:
+% \font\loggates=loggates % define the font
+% . . .
+% {\loggates\char0} % typeset the character
+%
+% To use the characters in a LaTeX document:
+% \newfont{\loggates}{loggates} % define the font
+% . . .
+% {\loggates\char0} % typeset the character
+%
+% The file loggates.sty contains definitions that make this
+% font easy to use.
+%
+
+mode_setup;
+font_identifier "LOGGATES";
+font_size 10pt#;
+gatew = 1.2pt;
+linew = 0.4pt;
+
+picture pic;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Slanting line at 45-degree angle for marking
+% busses in logic diagrams.
+
+slwd#:=7pt#;
+define_pixels(slwd);
+
+beginchar(0,slwd#,slwd#,0); "Slanted line for buss widths";
+
+x1 = 0;
+y1 = 0;
+
+x2 = slwd;
+y2 = slwd;
+
+pickup pencircle scaled gatew;
+draw z1--z2;
+
+labels (1,2);
+
+endchar;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% AND gate, facing to the right
+%
+
+gateunit# := 6pt#;
+
+gatea# := 2 * gateunit#;
+gateb# := 4 * gateunit#;
+gatec# := 2.5 * gateunit#;
+gated# := 2 * gateunit#;
+
+define_pixels(gatea,gateb,gatec,gated);
+
+w_and# := gatec#+gated#;
+h_and# := gateb#;
+define_pixels(w_and,h_and);
+
+beginchar(1,w_and#,h_and#,0); "AND gate, right";
+
+x1 = x2 = 0;
+x3 = x5 = gatec;
+x4 = gatec + gated;
+
+y1 = y5 = 0;
+y2 = y3 = gateb;
+y4 = gatea;
+
+pickup pencircle scaled gatew;
+draw z1--z2--z3{right}..z4..{left}z5--z1;
+
+pic := currentpicture;
+
+labels (range 1 thru 5);
+
+endchar;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% AND gate, facing down
+%
+
+beginchar(2,h_and#,w_and#,0); "AND gate, down";
+
+currentpicture := pic rotated 270 shifted (0,w_and);
+
+endchar;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% AND gate, facing to the left
+%
+
+beginchar(3,w_and#,h_and#,0); "AND gate, right";
+
+currentpicture := pic rotated 180 shifted(w_and,h_and);
+
+endchar;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% AND gate, facing up
+%
+
+beginchar(4,h_and#,w_and#,0); "AND gate, up";
+
+currentpicture := pic rotated 90 shifted(h_and,0);
+
+endchar;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% NAND gate, facing to the right
+%
+
+gatee# := gateunit#;
+
+define_pixels(gatee);
+
+w_nand# := gatec#+gated#+gatee#;
+h_nand# := gateb#;
+define_pixels(w_nand,h_nand);
+
+beginchar(5,w_nand#,h_nand#,0); "NAND gate, right";
+
+x1 = x2 = 0;
+x3 = x5 = gatec;
+x4 = gatec + gated;
+x6 = x4 + gatee/2;
+
+y1 = y5 = 0;
+y2 = y3 = gateb;
+y4 = gatea;
+y6 = y4;
+
+pickup pencircle scaled gatew;
+draw z1--z2--z3{right}..z4..{left}z5--z1;
+draw fullcircle scaled gatee shifted(z6);
+
+pic := currentpicture;
+
+labels (range 1 thru 6);
+
+endchar;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% NAND gate, facing down
+%
+
+beginchar(6,h_nand#,w_nand#,0); "NAND gate, down";
+
+currentpicture := pic rotated 270 shifted (0,w_nand);
+
+endchar;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% NAND gate, facing to the left
+%
+
+beginchar(7,w_nand#,h_nand#,0); "NAND gate, left";
+
+currentpicture := pic rotated 180 shifted(w_nand,h_nand);
+
+endchar;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% NAND gate, facing up
+%
+
+beginchar(8,h_nand#,w_nand#,0); "NAND gate, up";
+
+currentpicture := pic rotated 90 shifted(h_nand,0);
+
+endchar;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% OR gate, facing to the right
+%
+
+gatef# := .75 * gateunit#;
+gateg# := 1.5 * gateunit#;
+gateh# := 3 * gateunit#;
+
+define_pixels(gatef,gateg,gateh);
+
+w_or# := gateg#+gateh#;
+h_or# := gateb#;
+define_pixels(w_or,h_or);
+
+beginchar(9,w_or#,h_or#,0); "OR gate, right";
+
+x1 = x2 = 0;
+x3 = x5 = gateg;
+x4 = gateg + gateh;
+x6 = gatef;
+
+y1 = y5 = 0;
+y2 = y3 = gateb;
+y4 = y6 = gatea;
+
+pickup pencircle scaled gatew;
+draw z1..z6..z2;
+draw z2--z3;
+draw z3{right}..{(1,-2)}z4;
+draw z4{-1,-2}..z5{left};
+draw z5--z1;
+
+pic := currentpicture;
+
+labels (range 1 thru 6);
+
+endchar;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% OR gate, facing down
+%
+
+beginchar(10,h_or#,w_or#,0); "OR gate, down";
+
+currentpicture := pic rotated 270 shifted (0,w_or);
+
+endchar;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% OR gate, facing to the left
+%
+
+beginchar(11,w_or#,h_or#,0); "OR gate, left";
+
+currentpicture := pic rotated 180 shifted(w_or,h_or);
+
+endchar;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% OR gate, facing up
+%
+
+beginchar(12,h_or#,w_or#,0); "OR gate, up";
+
+currentpicture := pic rotated 90 shifted(h_or,0);
+
+endchar;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% NOR gate, facing to the right
+%
+
+w_nor# := gateg#+gateh#+gatee#;
+h_nor# := gateb#;
+define_pixels(w_nor,h_nor);
+
+beginchar(13,w_nor#,h_nor#,0); "NOR gate, right";
+
+x1 = x2 = 0;
+x3 = x5 = gateg;
+x4 = gateg + gateh;
+x6 = gatef;
+x7 = x4 + gatee/2;
+
+y1 = y5 = 0;
+y2 = y3 = gateb;
+y4 = y6 = gatea;
+y7 = y4;
+
+pickup pencircle scaled gatew;
+draw z1..z6..z2;
+draw z2--z3;
+draw z3{right}..{(1,-2)}z4;
+draw z4{-1,-2}..z5{left};
+draw z5--z1;
+draw fullcircle scaled gatee shifted (z7);
+
+pic := currentpicture;
+
+labels (range 1 thru 7);
+
+endchar;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% NOR gate, facing down
+%
+
+beginchar(14,h_nor#,w_nor#,0); "NOR gate, down";
+
+currentpicture := pic rotated 270 shifted (0,w_nor);
+
+endchar;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% NOR gate, facing to the left
+%
+
+beginchar(15,w_nor#,h_nor#,0); "NOR gate, left";
+
+currentpicture := pic rotated 180 shifted(w_nor,h_nor);
+
+endchar;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% NOR gate, facing up
+%
+
+beginchar(16,h_nor#,w_nor#,0); "NOR gate, up";
+
+currentpicture := pic rotated 90 shifted(h_nor,0);
+
+endchar;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Buffer, facing to the right
+%
+
+gatei# := 3 * gateunit#;
+gatej# := .866 * gatei#;
+gatek# := 1.5 * gateunit#;
+
+define_pixels(gatei,gatej,gatek);
+
+w_buf# := gatej#;
+h_buf# := gatei#;
+define_pixels(w_buf,h_buf);
+
+beginchar(17,w_buf#,h_buf#,0); "Buffer, right";
+
+x1 = x2 = 0;
+x3 = gatej;
+
+y1 = 0;
+y2 = gatei;
+y3 = gatek;
+
+pickup pencircle scaled gatew;
+draw z1--z2--z3--z1;
+
+pic := currentpicture;
+
+labels (range 1 thru 3);
+
+endchar;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Buffer, facing down
+%
+
+beginchar(18,h_buf#,w_buf#,0); "Buffer, down";
+
+currentpicture := pic rotated 270 shifted (0,w_buf);
+
+endchar;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Buffer, facing to the left
+%
+
+beginchar(19,w_buf#,h_buf#,0); "Buffer, left";
+
+currentpicture := pic rotated 180 shifted(w_buf,h_buf);
+
+endchar;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Buffer, facing up
+%
+
+beginchar(20,h_buf#,w_buf#,0); "Buffer, up";
+
+currentpicture := pic rotated 90 shifted(h_buf,0);
+
+endchar;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Inverter, facing to the right
+%
+
+w_inv# := gatej#+gatee#;
+h_inv# := gatei#;
+define_pixels(w_inv,h_inv);
+
+beginchar(21,w_inv#,h_inv#,0); "Inverter, right";
+
+x1 = x2 = 0;
+x3 = gatej;
+x4 = x3 + gatee/2;
+
+y1 = 0;
+y2 = gatei;
+y3 = y4 = gatek;
+
+
+pickup pencircle scaled gatew;
+draw z1--z2--z3--z1;
+draw fullcircle scaled gatee shifted (z4);
+
+pic := currentpicture;
+
+labels (range 1 thru 4);
+
+endchar;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Inverter, facing down
+%
+
+beginchar(22,h_inv#,w_inv#,0); "Inverter, down";
+
+currentpicture := pic rotated 270 shifted (0,w_inv);
+
+endchar;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Inverter, facing to the left
+%
+
+beginchar(23,w_inv#,h_inv#,0); "Inverter, left";
+
+currentpicture := pic rotated 180 shifted(w_inv,h_inv);
+
+endchar;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Inverter, facing up
+%
+
+beginchar(24,h_inv#,w_inv#,0); "Inverter, up";
+
+currentpicture := pic rotated 90 shifted(h_inv,0);
+
+endchar;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% XOR gate, facing to the right
+%
+
+w_xor# := gatef#+gateg#+gateh#;
+h_xor# := gateb#;
+define_pixels(w_xor,h_xor);
+
+beginchar(25,w_xor#,h_xor#,0); "XOR gate, right";
+
+x1 = x2 = 0 + gatef;
+x3 = x5 = gateg + gatef;
+x4 = gateg + gateh + gatef;
+x6 = gatef + gatef;
+x7 = x8 = 0;
+x9 = 0 + gatef;
+
+y1 = y5 = 0;
+y2 = y3 = gateb;
+y4 = y6 = gatea;
+y7 = 0;
+y8 = gateb;
+y9 = gatea;
+
+pickup pencircle scaled gatew;
+draw z1..z6..z2;
+draw z2--z3;
+draw z3{right}..{(1,-2)}z4;
+draw z4{-1,-2}..z5{left};
+draw z5--z1;
+draw z8..z9..z7;
+
+pic := currentpicture;
+
+labels (range 1 thru 9);
+
+endchar;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% XOR gate, facing down
+%
+
+beginchar(26,h_xor#,w_xor#,0); "XOR gate, down";
+
+currentpicture := pic rotated 270 shifted (0,w_xor);
+
+endchar;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% XOR gate, facing to the left
+%
+
+beginchar(27,w_xor#,h_xor#,0); "XOR gate, left";
+
+currentpicture := pic rotated 180 shifted(w_xor,h_xor);
+
+endchar;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% XOR gate, facing up
+%
+
+beginchar(28,h_xor#,w_xor#,0); "XOR gate, up";
+
+currentpicture := pic rotated 90 shifted(h_xor,0);
+
+endchar;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% NXOR gate (a.k.a. comparator), facing to the right
+%
+
+w_nxor# := gatef#+gateg#+gateh#+gatee#;
+h_nxor# := gateb#;
+define_pixels(w_nxor,h_nxor);
+
+beginchar(29,w_nxor#,h_nxor#,0); "NXOR gate, right";
+
+x1 = x2 = 0 + gatef;
+x3 = x5 = gateg + gatef;
+x4 = gateg + gateh + gatef;
+x6 = gatef + gatef;
+x7 = x8 = 0;
+x9 = 0 + gatef;
+x10 = x4 + gatee/2;
+
+y1 = y5 = 0;
+y2 = y3 = gateb;
+y4 = y6 = gatea;
+y7 = 0;
+y8 = gateb;
+y9 = gatea;
+y10 = y4;
+
+pickup pencircle scaled gatew;
+draw z1..z6..z2;
+draw z2--z3;
+draw z3{right}..{(1,-2)}z4;
+draw z4{-1,-2}..z5{left};
+draw z5--z1;
+draw z8..z9..z7;
+draw fullcircle scaled gatee shifted (z10);
+
+pic := currentpicture;
+
+labels (range 1 thru 10);
+
+endchar;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% NXOR gate, facing down
+%
+
+beginchar(30,h_nxor#,w_nxor#,0); "NXOR gate, down";
+
+currentpicture := pic rotated 270 shifted (0,w_nxor);
+
+endchar;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% NXOR gate, facing to the left
+%
+
+beginchar(31,w_nxor#,h_nxor#,0); "NXOR gate, left";
+
+currentpicture := pic rotated 180 shifted(w_nxor,h_nxor);
+
+endchar;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% NXOR gate, facing up
+%
+
+beginchar(32,h_nxor#,w_nxor#,0); "NXOR gate, up";
+
+currentpicture := pic rotated 90 shifted(h_nxor,0);
+
+endchar;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% lines to connect inputs of OR-like gates
+% N.B.: right/down facing inputs come before the gate,
+% left/up facing inputs after the gate!
+% The left/down lines have to be shifted by TeX, since
+% this shift cannot be determined in advance for down-
+% facing lines.
+% Only the right-facing lines have a height, which should
+% be used to determine the exact place where connections
+% should enter the gate.
+%
+
+linea# := 0.2 * gateb#;
+lineb# := 0.25 * (gateb# - (2 * linea#));
+linec# := 0.3333 * (gateb# - (2 * linea#));
+
+lineea# := 0.5 * gatef#;
+lineeb# := 0.75 * gatef#;
+lineec# := 0.87 * gatef#;
+lineed# := 0.95 * gatef#;
+
+define_pixels(linea,lineb,linec,lineea,lineeb,lineec,lineed);
+
+beginchar(33,0,gateb#-linea#,0); "upper input facing right";
+x1 = 0;
+x2 = lineea;
+y1 = y2 = gateb - linea;
+pickup pencircle scaled linew;
+draw z1--z2;
+pic := currentpicture;
+labels (range 1 thru 2);
+endchar;
+beginchar(40,0,0,0); "upper input facing down";
+currentpicture := pic rotated 270;
+endchar;
+beginchar(47,0,0,0); "upper input facing left";
+currentpicture := pic rotated 180;
+endchar;
+beginchar(54,0,0,0); "upper input facing up";
+currentpicture := pic rotated 90;
+endchar;
+
+beginchar(34,0,linea#,0); "lower input facing right";
+x1 = 0;
+x2 = lineea;
+y1 = y2 = linea;
+pickup pencircle scaled linew;
+draw z1--z2;
+pic := currentpicture;
+labels (range 1 thru 2);
+endchar;
+beginchar(41,0,0,0); "lower input facing down";
+currentpicture := pic rotated 270;
+endchar;
+beginchar(48,0,0,0); "lower input facing left";
+currentpicture := pic rotated 180;
+endchar;
+beginchar(55,0,0,0); "lower input facing up";
+currentpicture := pic rotated 90;
+endchar;
+
+beginchar(35,0,linea#+(2*lineb#),0); "middle input facing right";
+x1 = 0;
+x2 = lineed;
+y1 = y2 = linea + (2 * lineb);
+pickup pencircle scaled linew;
+draw z1--z2;
+pic := currentpicture;
+labels (range 1 thru 2);
+endchar;
+beginchar(42,0,0,0); "middle input facing down";
+currentpicture := pic rotated 270;
+endchar;
+beginchar(49,0,0,0); "middle input facing left";
+currentpicture := pic rotated 180;
+endchar;
+beginchar(56,0,0,0); "middle input facing up";
+currentpicture := pic rotated 90;
+endchar;
+
+beginchar(36,0,gateb#-linea#-lineb#,0); "upper-middle input facing right";
+x1 = 0;
+x2 = lineeb;
+y1 = y2 = gateb - linea - lineb;
+pickup pencircle scaled linew;
+draw z1--z2;
+pic := currentpicture;
+labels (range 1 thru 2);
+endchar;
+beginchar(43,0,0,0); "upper-middle input facing down";
+currentpicture := pic rotated 270;
+endchar;
+beginchar(50,0,0,0); "upper-middle input facing left";
+currentpicture := pic rotated 180;
+endchar;
+beginchar(57,0,0,0); "upper-middle input facing up";
+currentpicture := pic rotated 90;
+endchar;
+
+beginchar(37,0,linea#+lineb#,0); "lower-middle input facing right";
+x1 = 0;
+x2 = lineeb;
+y1 = y2 = linea + lineb;
+pickup pencircle scaled linew;
+draw z1--z2;
+pic := currentpicture;
+labels (range 1 thru 2);
+endchar;
+beginchar(44,0,0,0); "lower-middle input facing down";
+currentpicture := pic rotated 270;
+endchar;
+beginchar(51,0,0,0); "lower-middle input facing left";
+currentpicture := pic rotated 180;
+endchar;
+beginchar(58,0,0,0); "lower-middle input facing up";
+currentpicture := pic rotated 90;
+endchar;
+
+beginchar(38,0,gateb#-linea#-linec#,0); "next-to-upper input facing right";
+x1 = 0;
+x2 = lineec;
+y1 = y2 = gateb - linea - linec;
+pickup pencircle scaled linew;
+draw z1--z2;
+pic := currentpicture;
+labels (range 1 thru 2);
+endchar;
+beginchar(45,0,0,0); "next-to-upper input facing down";
+currentpicture := pic rotated 270;
+endchar;
+beginchar(52,0,0,0); "next-to-upper input facing left";
+currentpicture := pic rotated 180;
+endchar;
+beginchar(59,0,0,0); "next-to-upper input facing up";
+currentpicture := pic rotated 90;
+endchar;
+
+beginchar(39,0,linea#+linec#,0); "next-to-lower input facing right";
+x1 = 0;
+x2 = lineec;
+y1 = y2 = linea + linec;
+pickup pencircle scaled linew;
+draw z1--z2;
+pic := currentpicture;
+labels (range 1 thru 2);
+endchar;
+beginchar(46,0,0,0); "next-to-lower input facing down";
+currentpicture := pic rotated 270;
+endchar;
+beginchar(53,0,0,0); "next-to-lower input facing left";
+currentpicture := pic rotated 180;
+endchar;
+beginchar(60,0,0,0); "next-to-lower input facing up";
+currentpicture := pic rotated 90;
+endchar;
+
+end;