;================================================================================ ; Robert Johnstone ; Simon Fraser University ; ; Last Modified: 2000/11/01 ; ; Copyright 2000 Robert W. Johnstone ;-------------------------------------------------------------------------------- unless( boundp( 'admLibraryName ) warn( "Setting the destination library to default value of ADM" ) admLibraryName = "ADM" ) pcDefinePCell( list( ddGetObj(admLibraryName) "meter_2" "layout" ) ; end of list for first argument ( ( length 100.0 ) ( include_poly0 "boolean" nil ) ) ; end of parameter list prog( ; declare variables ( pcTechFile rodObj p0p_enclosure p_minWidth pa_enclosure a_nomWidth player alayer y flag poly ) ; setup layers player = "POLY2" alayer = "ANCHOR2" ; load tech file rules pcTechFile = techGetTechFile( pcCellView ) p0p_enclosure = techGetOrderedSpacingRule( pcTechFile "minEnclosure" "POLY0" player ) unless( p0p_enclosure warn( strcat("minEnclosure rule for POLY0->" player " not set")) ) p_minWidth = techGetSpacingRule( pcTechFile "minWidth" player ) unless( p_minWidth warn( strcat("minWidth rule for " player " not set")) ) pa_enclosure = techGetOrderedSpacingRule( pcTechFile "minEnclosure" player alayer ) unless( pa_enclosure warn( strcat("minEnclosure rule for " player "->" alayer " not set")) ) a_nomWidth = techGetSpacingRule( pcTechFile "nomWidth" alayer ) unless( a_nomWidth warn( strcat("nomWidth rule for " alayer " not set")) ) ; check parameters length = if( (length<2*p_minWidth) 2*p_minWidth length ) ; create poly1 meter y = 0 flag = t poly = list( ) while( (y < length) if( (flag==t) then poly = cons( p_minWidth:y poly ) y = y + p_minWidth poly = cons( p_minWidth:y poly ) else poly = cons( 0:y poly ) y = y + p_minWidth poly = cons( 0:y poly ) ) flag = !flag ) poly = cons( -2*pa_enclosure-a_nomWidth:y poly ) poly = cons( -2*pa_enclosure-a_nomWidth:0 poly ) rodObj = rodCreatePolygon( ?layer player ?pts poly ) rodAssignHandleToParameter( ?parameter "length" ?rodObj rodObj ?handleName "upperCenter" ?displayName "length" ?stretchDir "y" ?stretchType "absolute" ?updateIncrement p_minWidth ) rodAssignHandleToParameter( ?parameter "length" ?rodObj rodObj ?handleName "lowerCenter" ?displayName "length" ?stretchDir "y" ?stretchType "relative" ?moveOrigin t ?updateIncrement p_minWidth ) ; add anchor dbCreateRect( pcCellView alayer list( -pa_enclosure:pa_enclosure -pa_enclosure-a_nomWidth:y-pa_enclosure ) ) ; add poly0 if( include_poly0 then rodCreateRect( ?layer "POLY0" ?fromObj rodObj ?size p0p_enclosure ) ) ; Create the instNamePrefix property dbReplaceProp( pcCellView "instNamePrefix" "string" "meter" ) ; set version string dbReplaceProp( pcCellView "version" "string" "1.3.1" ) ; body SKILL code returns value t return(t) ) ; end of body-of-SKILL-code prog ) ; ; end of pcDefinePCell