diff options
Diffstat (limited to 'ld.mp')
-rw-r--r-- | ld.mp | 165 |
1 files changed, 145 insertions, 20 deletions
@@ -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; |