<> <> <> DIRECTORY CD USING [DesignNumber, ObPtr, Level, combined]; CMosContacts: CEDAR DEFINITIONS = BEGIN ContactType: TYPE = {burr, mDif, difShort, butt, mPol, mm2}; <<--burr, mDif, butt contacts can be characterized by the layer of their diffusion>> <<--(ndif, pdif, nwelCont, pwelCont)>> <<--difShort contacts can also be characterized by the layer of their diffusion,>> <<--but only (ndif, pdif) are allowed>> ContactPtr: TYPE = REF ContactRec; ContactRec: TYPE = RECORD [ typ: ContactType, wExt: CD.DesignNumber _ 0, lExt: CD.DesignNumber _ 0 ]; undef: PRIVATE CD.Level=CD.combined; --used to specify diffusion as default CreatePolyCon: PROC [l: CD.DesignNumber] RETURNS [CD.ObPtr]; CreateDifCon: PROC [l: CD.DesignNumber, difLev: CD.Level_undef] RETURNS [CD.ObPtr]; CreateDifShortCon: PROC [difLev: CD.Level_undef] RETURNS [CD.ObPtr]; CreateButCon: PROC [difLev: CD.Level_undef] RETURNS [CD.ObPtr]; CreateBurCon: PROC [w, l: CD.DesignNumber, wex: CD.DesignNumber_0, lex: CD.DesignNumber_0, difLev: CD.Level_undef] RETURNS [CD.ObPtr]; CreateMmCon: PROC [l: CD.DesignNumber, wex: CD.DesignNumber_0, lex: CD.DesignNumber_0] RETURNS [CD.ObPtr]; <<--All create procedures may (or may not) create references to>> <<--the same object. Therefore consider the contact objects as >> <<--readonly. If a contact needs to be modified create a new one!>> END.