<> <> <> <> <<@GCTest.cm>> DIRECTORY CD, CDDirectory, GC, IPMainViewer, RTStructure, PW, Rope; GCTest: CEDAR PROGRAM IMPORTS CDDirectory, GC, IPMainViewer, RTStructure, PW = BEGIN TestBasicGC: PW.UserProc = BEGIN hMaterial: Rope.ROPE _ "metal2"; vMaterial: Rope.ROPE _ "metal"; technologyKey: ATOM _ $cmosB; -- $cmosA or $cmosB result: GC.Result; rules: GC.DesignRules _ GC.CreateDesignRules[technologyKey, hMaterial, vMaterial]; block1: CD.Object _ PW.Get[design, "Block1"]; block2: CD.Object _ PW.Get[design, "Block2"]; block3: CD.Object _ PW.Get[design, "Block3"]; pos1: CD.Position _ [0, 0]; pos2: CD.Position _ [800, 0]; pos3: CD.Position _ [0, 800]; structure: RTStructure.Structure _ GetStructure[name: "GCTest", o1: block1, o2: block2, o3: block3, p1: pos1, p2: pos2, p3: pos3]; gcContext: GC.Context _ GC.CreateContext["GCTest", structure, rules]; GC.DoInitialGlobalRoute[gcContext]; IPMainViewer.BuildViewer["GCTest"]; IPMainViewer.SetTopTo[NARROW[gcContext.topology], structure.name, FALSE]; result _ GC.DoDetailRoute[gcContext]; RETURN[result.object]; END; GetStructure: PROC [name: Rope.ROPE, o1, o2, o3, o4, o5: CD.Object _ NIL, p1, p2, p3, p4, p5: CD.Position _ [0, 0]] RETURNS [structure: RTStructure.Structure] ~ { UseAll: RTStructure.CDPinFilterProc ~ {keepIt _ TRUE}; structure _ RTStructure.CreateForRopes[name]; IF o1 # NIL THEN RTStructure.InsertInstance[structure, CDDirectory.Name[o1], p1, original, o1, UseAll]; IF o2 # NIL THEN RTStructure.InsertInstance[structure, CDDirectory.Name[o2], p2, original, o2, UseAll]; IF o3 # NIL THEN RTStructure.InsertInstance[structure, CDDirectory.Name[o3], p3, original, o3, UseAll]; IF o4 # NIL THEN RTStructure.InsertInstance[structure, CDDirectory.Name[o4], p4, original, o4, UseAll]; IF o5 # NIL THEN RTStructure.InsertInstance[structure, CDDirectory.Name[o5], p5, original, o5, UseAll]; }; PW.Register[TestBasicGC, "TestBasicGC"]; END.