DIRECTORY CD, CDCells, CDSymbolicObjects, CMos, IntStorageDefs, IO, ReadCif, ReadCifUserCmd, Rope; InsertChipwichPins: CEDAR PROGRAM IMPORTS CDCells, CDSymbolicObjects, CMos, IO, ReadCif, Rope EXPORTS ReadCifUserCmd = BEGIN ParseUserCmd: PUBLIC PROC [userCmd: IntStorageDefs.UserCmd, cell: CD.Object, design: CD.Design, reportError: ReadCifUserCmd.ReportErrorProc] = { userCmdText: Rope.ROPE _ NARROW[userCmd.data]; text: IO.STREAM _ IO.RIS[userCmdText]; pinName, layer: Rope.ROPE _ NIL; center: CD.Position _ [0, 0]; pinOb: CD.Object _ NIL; pinInst: CD.Instance _ NIL; width, height: CARDINAL; adjust: INT = 4; vertAdjust, horizAdjust: INT; cdLayer: CD.Layer _ CMos.met2; MyBreakProc: IO.BreakProc = { RETURN[SELECT char FROM IN [IO.NUL .. IO.SP], ',, ':, '; => sepr, '[, '], '(, '), '{, '}, '", '+, '*, '/, '@ => break, ENDCASE => other]}; FixPinName: PROC RETURNS [name: Rope.ROPE] = { ros: IO.STREAM _ IO.ROS[]; ris: IO.STREAM _ IO.RIS[pinName]; char: CHARACTER; IF Rope.Equal[pinName, "VDD", FALSE] THEN RETURN["Vdd"]; IF Rope.Equal[pinName, "GND", FALSE] THEN RETURN["Gnd"]; WHILE NOT ris.EndOf[] DO SELECT char _ IO.GetChar[ris] FROM IN ['a..'z], IN ['A..'Z], IN ['0..'9] => ros.PutChar[char]; ENDCASE => ros.PutChar['X]; ENDLOOP; RETURN[ros.RopeFromROS]; }; IF IO.GetChar[text] # '4 THEN { reportError[IO.PutFR["UserCmd %g not defined", IO.int[userCmd.command]], Warning]; RETURN}; pinName _ IO.GetTokenRope[text, MyBreakProc].token; center.x _ IO.GetInt[text]; center.y _ IO.GetInt[text]; layer _ IO.GetID[text]; SELECT TRUE FROM Rope.Equal[layer, "C62"] => { width _ height _ 8; cdLayer _ CMos.met2; horizAdjust _ -width/2; vertAdjust _ IF center.y < 0 THEN adjust ELSE -(adjust+height)}; Rope.Equal[layer, "C61"] => { width _ 4; height _ 20; cdLayer _ CMos.met; horizAdjust _ IF center.x < 0 THEN adjust ELSE - (adjust+width); vertAdjust _ -height/2}; ENDCASE => RETURN; pinName _ FixPinName[]; pinOb _ CDSymbolicObjects.CreatePin[[width, height]]; pinInst _ CDCells.IncludeOb[ design: IF cell = NIL THEN design ELSE NIL, cell: cell, ob: pinOb, position: [center.x/ReadCif.cifUnitsPerLambda+horizAdjust, center.y/ReadCif.cifUnitsPerLambda+vertAdjust], orientation: 0, cellCSystem: originCoords, obCSystem: interrestCoords, mode: dontPropagate].newInst; CDSymbolicObjects.SetName[pinInst, pinName]; CDSymbolicObjects.SetLayer[pinInst, cdLayer]; }; END. vInsertChipwichPins.mesa Frank Bowers January 24, 1986 10:59:50 am PST McCreight, April 14, 1986 2:07:35 pm PST Κ‹˜™Icode™-K™(—J™šΟk ˜ Kšœ˜K˜K˜K˜Kšœ˜Kšœ˜K˜K˜K˜K˜—šœœ˜!Kšœ#œ˜;Kšœ˜Kš˜K˜—š Οn œœœ)œœ9˜Jšœœœ˜.Jš œœœœœ˜&Jšœœœ˜ Jšœœ˜Jšœœ œ˜Jšœ œ œ˜Jšœœ˜Jšœœ˜Jšœœ˜Jšœ œ˜J˜šœ œ˜šœœ˜Kš œœœœœ˜*Kšœ5˜5Kšœ ˜K˜——šž œœœ œ˜.Jš œœœœœ˜Jš œœœœœ ˜!Jšœ œ˜Jšœœœœ˜8Jšœœœœ˜8šœœ ˜šœœ˜"Jšœ œ œ˜;Jšœ˜—Jšœœ˜ —Jšœ˜šœ˜J˜——šœœœ˜Jšœ œ!œ!˜RJšœ˜—Jšœ œ'˜3Jšœ œ˜Jšœ œ˜Jšœœ ˜šœœ˜˜K˜K˜Kšœ˜Kšœ œœœ˜@—˜K˜K˜Kšœœœœ˜@K˜—Kšœœ˜—J˜Jšœ5˜5šœ˜Jš œœœœœœ˜+Jšœ ˜ J˜ šœ:˜:Jšœ0˜0—Kšœ˜Kšœ˜Kšœ˜Kšœ˜—K˜,K˜-J˜J˜—šœ˜J˜K˜K˜——…— L M