CoreWireImpl.mesa
Created by Don Curry, February 1, 1986 2:43:22 pm PST
Edited by Don Curry, March 26, 1986 7:37:24 am PST
DIRECTORY Core, CoreOps, CoreName, CoreWire, CoreXform;
CoreWireImpl: CEDAR PROGRAM
IMPORTS CoreOps, CoreName, CoreWire, CoreXform
EXPORTS CoreWire =
BEGIN OPEN CoreWire;
Signal: SIGNAL = CODE;
f: PUBLIC PROC[wire: CWire, name: ROPE] RETURNS[subWire: CWire] = {
index: INT ← CoreOps.GetWireIndex[wire.w, name];
RETURN[IF index=-1 OR wire.w.size<(index+1) THEN [NIL] ELSE [wire.w[index]]]};
i: PUBLIC PROC[wire: CWire, index: INT] RETURNS[subWire: CWire] = {
RETURN[IF index=-1 OR wire=NIL OR wire.w.size<(index+1)
THEN [NIL]
ELSE [wire.w[index]]]};
x: PUBLIC PROC[wire: CWire, index: INT] RETURNS[subWire: CWire] = {
wireXform: CoreXform.Xform ← CoreXform.GetXform[wire.w];
addr:   CoreXform.Addr;
IF wireXform=NIL THEN
RETURN[IF wire=NIL THEN [NIL] ELSE IF wire.size=0 THEN wire ELSE wire.i[index] ];
addr   ← CoreXform.XformIndex[wireXform, rl, index].a;
FOR addr ← addr, addr.rest WHILE addr#NIL DO
IF wire.size=0 THEN EXIT;
wire ← wire.i[ addr.first ] ENDLOOP;
RETURN[wire]};
n: PUBLIC PROC[wire: CWire] RETURNS[name: ROPE] =
{RETURN[ CoreName.WireNm[ wire.w ].n ]};
END.