<> <> <> 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.