summaryrefslogtreecommitdiff
path: root/ld.mp
diff options
context:
space:
mode:
Diffstat (limited to 'ld.mp')
-rw-r--r--ld.mp165
1 files changed, 145 insertions, 20 deletions
diff --git a/ld.mp b/ld.mp
index 552b21c..1b92f35 100644
--- a/ld.mp
+++ b/ld.mp
@@ -2,6 +2,8 @@ prologues := 3;
GNL = 20;
GAL = 46;
+GH = 20;
+GTH = 30;
% ========= OR GATE ===========
def gate_or(expr gox, goy) =
@@ -32,22 +34,29 @@ enddef;
% ========= AND GATE ===========
def gate_and(expr gax, gay) =
-numeric GAh, GAl, GAs;
+numeric il, ht, wt, gs, gr, gy, gh, md, GAe;
-GAh := 20;
-GAl := 10;
-GAe := gax+36;
-GAs := gax+GAl;
+ht = 20;
+il = 10;
+gs = gax + il;
+gr = 15;
+wt = gr + 10;
+gy = gay - 5;
+gh = gy + ht;
+md = gy + ht/2;
+
+draw (gax, gay)-- (gs, gay);
+draw (gax, gay + 10)--(gs, gay + 10);
-draw (GAs, gay-5)--(GAs, gay+GAh-5);
-draw (GAs, gay+GAh-5)--(gax+25,gay+GAh-5)..(GAe-1,gay+9)..(GAe,gay+5)..(GAe-6,gay-4)..
- (gax+25,gay-5)--(gax+GAl, gay-5);
+draw (gs, gy)--(gs, gh);
+draw (gs, gy)--(gs + gr, gy)..(gs + wt, md-1)..
+ (gs + gr, gh)--(gs, gh);
+
+gs := gs + wt;
+draw (gs, md)--(gs + il, md);
-draw (gax,gay)--(GAs,gay);
-draw (gax,gay+10)--(GAs,gay+10);
-draw (GAe, gay+5)--(GAe+GAl, gay+5);
+GAe = gs + il;
-GAe := GAe + GAl;
enddef;
% ========= NOT GATE ===========
@@ -57,7 +66,7 @@ numeric il, sz, wd, gns, GNe;
save il, gns;
il = 10;
-sz = 5;
+sz = 6;
wd = 10;
gns = gnx;
@@ -75,6 +84,70 @@ GNe := GNe + il;
enddef;
+% ======== TRIPLE AND =========
+
+def gate_tand(expr gx, gy) =
+
+numeric il, ht, wt, gs, gr, gh, md, GTAe;
+
+ht = 30;
+il = 10;
+gs = gx + il;
+gr = 20;
+wt = gr + 15;
+gh = gy + ht;
+md = gy + ht/2;
+
+draw (gx, gy+5)-- (gs, gy+5);
+draw (gx, gy+15)--(gs, gy+15);
+draw (gx, gy+25)--(gs, gy+25);
+
+draw (gs, gy)--(gs, gh);
+draw (gs, gy)--(gs + gr, gy)..(gs + wt, md-1)..
+ (gs + gr, gh)--(gs, gh);
+
+gs := gs + wt;
+draw (gs, md)--(gs + il, md);
+
+GTAe = gs + il;
+
+enddef;
+
+% ======== TRIPLE OR =========
+
+def gate_tor(expr gox, goy) =
+
+numeric gx, gy, wt, ht, il, gs, gr, gc, gh, md, GTOe;
+
+gx = gox;
+gy = goy - 5;
+ht = 30;
+il = 10;
+gs = gx + il;
+gc = 7;
+gr = 10;
+wt = gr + 25;
+gh = gy + ht;
+md = gy + ht/2;
+
+draw (gx, gy + 5)-- (gs + 4, gy + 5);
+draw (gx, gy + 15)--(gs + 7, gy + 15);
+draw (gx, gy + 25)--(gs + 4, gy + 25);
+
+draw (gs, gy)..(gs + gc, md)..(gs, gh);
+draw (gs, gy)--(gs + gr, gy)..(gs + gr + 2, gy)..(gs + wt, md);
+draw (gs, gh)--(gs + gr, gh)..(gs + gr + 2, gh)..(gs + wt, md);
+
+gs := gs + wt;
+draw (gs, md)--(gs + il, md);
+
+GTOe = gs + il;
+
+enddef;
+
+% ==============================
+% ==============================
+
% ======== TRIPLE INPUT ========
outputtemplate := "nora.eps";
@@ -224,7 +297,7 @@ endfig;
% ================================
outputtemplate := "ld3.eps";
-beginfig(0);
+beginfig(4);
pair FX, FY, FZ;
numeric hs;
@@ -254,13 +327,66 @@ endfig;
% ===============
+outputtemplate := "ld6a.eps";
+beginfig(9)
+
+numeric a, b, c, t, ga, gb, lb;
+
+c = 85;
+b = c + 10;
+a = b + 10;
+gb = 40;
+lb = 75;
+
+label.lft(btex $A$ etex, (0, a));
+label.lft(btex $B$ etex, (0, b));
+label.lft(btex $C$ etex, (0, c));
+
+draw (0, c)--(lb, c);
+draw (0, b)--(lb, b);
+draw (0, a)--(lb, a);
+gate_tand(lb, c - 5);
+
+t := 20;
+drawdot (t, c) withpen pencircle scaled 3pt;
+draw (t, c)--(t, 5);
+drawdot (t, gb) withpen pencircle scaled 3pt;
+draw (t, gb)--(t + 10, gb);
+gate_not(t + 10, gb);
+
+drawdot (lb - 5, a) withpen pencircle scaled 3pt;
+draw (lb - 5, a)--(lb - 5, gb + 20)--(lb, gb + 20);
+drawdot (lb - 15, b) withpen pencircle scaled 3pt;
+draw (lb - 15, b)--(lb - 15, gb + 10)--(lb, gb + 10);
+draw (GNe, gb)--(lb, gb);
+gate_tand(lb, gb - 5);
+
+drawdot (t + 10, a) withpen pencircle scaled 3pt;
+draw (t + 10, a)--(t + 10, GH - 5);
+gate_not(t + 10, GH - 5);
+draw (GNe, GH - 5)--(lb, GH - 5);
+
+draw (t, 5)--(lb, 5);
+gate_and(lb, 5);
+
+draw (GTAe, b)--(GTAe, gb + 20)--(GTAe + 5, gb + 20);
+draw (GTAe, gb + 10)--(GTAe + 5, gb + 10);
+draw (GAe, 10)--(GAe + 10, 10)--(GAe + 10, gb)--(GAe + 15, gb);
+gate_tor(GTAe + 5, gb);
+
+label.rt(btex $F$ etex, (GTOe, gb + 10));
+
+endfig;
+
+% ===============
+
outputtemplate := "ld6b.eps";
-beginfig(1)
+beginfig(10)
numeric FA, FB, FC, tmp;
FC = 0;
FB = 40;
- FA = FB+10;
+ FA = FB + 10;
label.lft(btex $C$ etex, (0, FC));
label.lft(btex $B$ etex, (0, FB));
@@ -281,10 +407,9 @@ beginfig(1)
draw (tmp, FB)--(GNe, FB);
gate_and(GNe, FB);
- draw (GAe, FB+5)--(GAe, FB-10)--(GAe+5, FB-10);
- draw (GAe, 5)--(GAe, 20)--(GAe+5, 20);
-
- gate_or(GAe+5, 20);
+ draw (GAe, FB + 5)--(GAe, FB - 10)--(GAe + 5, FB - 10);
+ draw (GAe, 5)--(GAe, 20)--(GAe + 5, 20);
+ gate_or(GAe + 5, 20);
label.rt(btex $F$ etex, GOe);
endfig;