| |
;; Initial the form when loading this file
when( boundp( 'skGenSchTreeForm ) && hiIsFormDisplayed( skGenSchTreeForm )
hiFormCancel( skGenSchTreeForm )
) ; when
skGenSchTreeForm = 'unbound
procedure( skGenSchTree()
unless( boundp( 'skGenSchTreeForm )
skGenSchTreeForm = skGenSchTreeSetupGui()
) ; unless
putpropq( skGenSchTreeForm hiGetCurrentWindow() treeWindow )
hiDisplayForm( skGenSchTreeForm )
) ; end of procedure *skGenSchTree*
procedure( skGenSchTreeSetupGui()
let( ( topOrCurrentField viewListField stopListField displayPinsField )
topOrCurrentField = hiCreateRadioField(
?name 'topOrCurrent
?prompt "From Cell"
?choices '( "Current" "Top" )
?value "Current"
)
viewListField = hiCreateStringField(
?name 'viewList
?prompt "View List"
?value "schematic"
)
stopListField = hiCreateStringField(
?name 'stopList
?prompt "Stop List"
?value "symbol"
)
displayPinsField = hiCreateBooleanButton(
?name 'displayPins
?buttonText "Display Pins"
?value nil
)
hiCreateAppForm(
?name 'skGenSchTreeForm
?formTitle "Generate Schematic Tree"
?callback "skGenSchTreeCB( hiGetCurrentForm() )"
?fields list(
list( topOrCurrentField 15:15 300:30 80 )
list( viewListField 15:55 300:30 80 )
list( stopListField 15:95 300:30 80 )
list( displayPinsField 15:135 300:30 80 )
)
?buttonlayout 'OKCancelApply
?unmapAfterCB nil
)
)) ; end of procedure *skGenSchTreeSetupGui*
procedure( skCompareCellName( ih1 ih2 )
let( ( result )
forall( p '( libName cellName viewName )
progn(
result = strcmp( dbGet( ih1 p ) dbGet( ih2 p ) )
zerop( result )
) ; progn
) ; forall
lessp( result 0 )
)) ; end of procedure *skCompareCellName*
procedure( skGenSchTreeForCv(
@key
( cellView geGetEditCellView() )
( viewList "schematic" )
( stopList "symbol" )
( port poport )
( displayPins nil )
( indent 0 )
)
let( ( stopAtList instHeaders insts switchedView )
stopAtList = parseString( stopList )
instHeaders = cellView~>instHeaders
unless( displayPins
instHeaders = setof( instHeader instHeaders
car( instHeader~>instances )~>purpose != "pin" )
) ; unless
foreach( instHeader sort( instHeaders 'skCompareCellName )
insts = instHeader~>instances
fprintf( port sprintf( nil "%%%ds %%s %%s %%s (%%d)\n" indent )
" "
instHeader~>libName
instHeader~>cellName
instHeader~>viewName
length( insts )
)
when( switchedView = dbGetAnyInstSwitchMaster( car( insts ) viewList )
unless( member( switchedView~>viewName stopAtList )
skGenSchTreeForCv(
?cellView switchedView
?viewList viewList
?stopList stopList
?port port
?displayPins displayPins
?indent indent + 2
) ; skGenSchTreeForCv
) ; unless
dbClose( switchedView )
) ; when
) ; foreach
t
)) ; end of procedure *skGenSchTreeForCv*
procedure( skGenSchTreeCB( theForm )
let( ( from cvId op fileName )
from = lowerCase( theForm->topOrCurrent->value )
if( from == "top" then
cvId = geGetTopLevelCellView( theForm->treeWindow )
else
cvId = geGetEditCellView( theForm->treeWindow )
) ; if
unless( cvId
error( "You must open a schematic cellview first." )
) ; unless
fileName = makeTempFileName( "/tmp/sch.tree" )
if( op = outfile( fileName ) then
fprintf( op "%40s\n", "Design Hierarchy" )
fprintf( op "**********************************************************\n" )
fprintf( op "Library : %s\n" cvId~>libName )
fprintf( op "Cell : %s\n" cvId~>cellName )
fprintf( op "View : %s\n" cvId~>viewName )
fprintf( op "Option : %s to bottom\n" from )
fprintf( op "**********************************************************\n" )
fprintf( op "\n" )
skGenSchTreeForCv(
?cellView cvId
?viewList theForm->viewList->value
?stopList theForm->stopList->value
?displayPins theForm->displayPins->value
?port op
) ; skGenSchTreeForCv
close( op )
view( fileName nil "Tree" )
deleteFile( fileName )
else
error( "Can not open temp file %s" fileName )
) ; if
)) ; end of procedure *skGenSchTreeCB*