From c12a50b64b8ac88257cbf2cacb62ef9d8e6d42f4 Mon Sep 17 00:00:00 2001
From: Jean-Paul Chaput
Date: Mon, 30 Oct 2017 15:38:29 +0100
Subject: [PATCH] Integrate LEF/DEF 5.8 into the tree (Apache 2.0 licensing)
* New: As, starting from version 5.8, LEF/DEF parser/drivers are
availables under Apache 2.0 license, integrate them inside the
project. Rewrite the Makefiles into CMakeLists.txt, build only
the C++ version. Create an entry for the LEF/DEF doc in the
documentation.
---
bootstrap/build.conf | 1 +
bootstrap/cmake_modules/FindLEFDEF.cmake | 159 +-
crlcore/src/ccore/lefdef/DefDriver.cpp | 10 +-
crlcore/src/ccore/lefdef/DefExport.cpp | 6 +-
crlcore/src/ccore/lefdef/DefImport.cpp | 6 +-
crlcore/src/ccore/lefdef/DefParser.cpp | 6 +-
crlcore/src/ccore/lefdef/LefExport.cpp | 8 +-
crlcore/src/ccore/lefdef/LefParser.cpp | 16 +-
lefdef/CMakeLists.txt | 25 +
lefdef/doc/CMakeLists.txt | 14 +
lefdef/doc/defapi/appA_DEFexamples.html | 14778 ++++++++++++++++
lefdef/doc/defapi/ch1Intro.html | 404 +
lefdef/doc/defapi/ch2DEFsetup.html | 484 +
lefdef/doc/defapi/ch3DEFcallback.html | 2860 +++
lefdef/doc/defapi/ch4DEFclasses.html | 841 +
lefdef/doc/defapi/ch5DEFwritercallback.html | 737 +
lefdef/doc/defapi/ch6DEFwriter.html | 5572 ++++++
lefdef/doc/defapi/ch7DEFcompressed.html | 320 +
lefdef/doc/defapi/ch8lefdiff.html | 381 +
lefdef/doc/defapi/defapi.pdf | 9477 ++++++++++
lefdef/doc/defapi/defapiTOC.html | 557 +
lefdef/doc/defapi/images/Diamond.gif | Bin 0 -> 92 bytes
lefdef/doc/defapi/images/Diamond1.gif | Bin 0 -> 178 bytes
lefdef/doc/defapi/images/Diamond12.gif | Bin 0 -> 285 bytes
lefdef/doc/defapi/images/Thumbs.db | Bin 0 -> 161792 bytes
lefdef/doc/defapi/images/aleph.gif | Bin 0 -> 155 bytes
lefdef/doc/defapi/images/alpha.gif | Bin 0 -> 147 bytes
lefdef/doc/defapi/images/ampersnd.gif | Bin 0 -> 209 bytes
lefdef/doc/defapi/images/angle.gif | Bin 0 -> 74 bytes
lefdef/doc/defapi/images/anglleft.gif | Bin 0 -> 118 bytes
lefdef/doc/defapi/images/anglrite.gif | Bin 0 -> 120 bytes
lefdef/doc/defapi/images/approx.gif | Bin 0 -> 125 bytes
lefdef/doc/defapi/images/arrwboth.gif | Bin 0 -> 154 bytes
lefdef/doc/defapi/images/arrwdbbo.gif | Bin 0 -> 145 bytes
lefdef/doc/defapi/images/arrwdbdn.gif | Bin 0 -> 138 bytes
lefdef/doc/defapi/images/arrwdblt.gif | Bin 0 -> 126 bytes
lefdef/doc/defapi/images/arrwdbrt.gif | Bin 0 -> 124 bytes
lefdef/doc/defapi/images/arrwdbup.gif | Bin 0 -> 137 bytes
lefdef/doc/defapi/images/arrwdown.gif | Bin 0 -> 131 bytes
lefdef/doc/defapi/images/arrwleft.gif | Bin 0 -> 131 bytes
lefdef/doc/defapi/images/arrwrite.gif | Bin 0 -> 131 bytes
lefdef/doc/defapi/images/arrwup.gif | Bin 0 -> 135 bytes
lefdef/doc/defapi/images/arrwvert.gif | Bin 0 -> 85 bytes
lefdef/doc/defapi/images/b_bullet.gif | Bin 0 -> 818 bytes
lefdef/doc/defapi/images/beta.gif | Bin 0 -> 151 bytes
lefdef/doc/defapi/images/blank.gif | Bin 0 -> 68 bytes
lefdef/doc/defapi/images/bracltbt.gif | Bin 0 -> 119 bytes
lefdef/doc/defapi/images/bracltmd.gif | Bin 0 -> 122 bytes
lefdef/doc/defapi/images/braclttp.gif | Bin 0 -> 116 bytes
lefdef/doc/defapi/images/bracrtbt.gif | Bin 0 -> 121 bytes
lefdef/doc/defapi/images/bracrtmd.gif | Bin 0 -> 125 bytes
lefdef/doc/defapi/images/bracrttp.gif | Bin 0 -> 122 bytes
lefdef/doc/defapi/images/brakltbt.gif | Bin 0 -> 90 bytes
lefdef/doc/defapi/images/braklttp.gif | Bin 0 -> 88 bytes
lefdef/doc/defapi/images/brakmidl.gif | Bin 0 -> 84 bytes
lefdef/doc/defapi/images/brakrtbt.gif | Bin 0 -> 122 bytes
lefdef/doc/defapi/images/brakrttp.gif | Bin 0 -> 92 bytes
lefdef/doc/defapi/images/bs_bullet_sub.gif | Bin 0 -> 834 bytes
.../doc/defapi/images/bss_bullet_sub_sub.gif | Bin 0 -> 837 bytes
lefdef/doc/defapi/images/bullet.gif | Bin 0 -> 120 bytes
lefdef/doc/defapi/images/capalpha.gif | Bin 0 -> 138 bytes
lefdef/doc/defapi/images/capbeta.gif | Bin 0 -> 141 bytes
lefdef/doc/defapi/images/capchi.gif | Bin 0 -> 144 bytes
lefdef/doc/defapi/images/capdelta.gif | Bin 0 -> 141 bytes
lefdef/doc/defapi/images/capepsil.gif | Bin 0 -> 130 bytes
lefdef/doc/defapi/images/capeta.gif | Bin 0 -> 139 bytes
lefdef/doc/defapi/images/capgamma.gif | Bin 0 -> 118 bytes
lefdef/doc/defapi/images/capiota.gif | Bin 0 -> 111 bytes
lefdef/doc/defapi/images/capkappa.gif | Bin 0 -> 143 bytes
lefdef/doc/defapi/images/caplambd.gif | Bin 0 -> 139 bytes
lefdef/doc/defapi/images/capmu.gif | Bin 0 -> 159 bytes
lefdef/doc/defapi/images/capnu.gif | Bin 0 -> 156 bytes
lefdef/doc/defapi/images/capomega.gif | Bin 0 -> 152 bytes
lefdef/doc/defapi/images/capomicr.gif | Bin 0 -> 145 bytes
lefdef/doc/defapi/images/capphi.gif | Bin 0 -> 161 bytes
lefdef/doc/defapi/images/cappi.gif | Bin 0 -> 132 bytes
lefdef/doc/defapi/images/cappsi.gif | Bin 0 -> 138 bytes
lefdef/doc/defapi/images/caprho.gif | Bin 0 -> 133 bytes
lefdef/doc/defapi/images/capsigma.gif | Bin 0 -> 131 bytes
lefdef/doc/defapi/images/captau.gif | Bin 0 -> 124 bytes
lefdef/doc/defapi/images/captheta.gif | Bin 0 -> 153 bytes
lefdef/doc/defapi/images/capupsil.gif | Bin 0 -> 140 bytes
lefdef/doc/defapi/images/capxi.gif | Bin 0 -> 138 bytes
lefdef/doc/defapi/images/capzeta.gif | Bin 0 -> 138 bytes
lefdef/doc/defapi/images/carretrn.gif | Bin 0 -> 119 bytes
lefdef/doc/defapi/images/caution.gif | Bin 0 -> 286 bytes
lefdef/doc/defapi/images/ch1Intro.04.1.1.png | Bin 0 -> 20516 bytes
lefdef/doc/defapi/images/chi.gif | Bin 0 -> 145 bytes
lefdef/doc/defapi/images/circmult.gif | Bin 0 -> 81 bytes
lefdef/doc/defapi/images/circplus.gif | Bin 0 -> 80 bytes
lefdef/doc/defapi/images/club.gif | Bin 0 -> 134 bytes
lefdef/doc/defapi/images/congrunt.gif | Bin 0 -> 115 bytes
lefdef/doc/defapi/images/delta.gif | Bin 0 -> 141 bytes
lefdef/doc/defapi/images/draft.gif | Bin 0 -> 279 bytes
lefdef/doc/defapi/images/element.gif | Bin 0 -> 121 bytes
lefdef/doc/defapi/images/emptyset.gif | Bin 0 -> 81 bytes
lefdef/doc/defapi/images/epsilon.gif | Bin 0 -> 123 bytes
lefdef/doc/defapi/images/epsilon1.gif | Bin 0 -> 74 bytes
lefdef/doc/defapi/images/equivlnt.gif | Bin 0 -> 115 bytes
lefdef/doc/defapi/images/eta.gif | Bin 0 -> 132 bytes
lefdef/doc/defapi/images/existntl.gif | Bin 0 -> 117 bytes
lefdef/doc/defapi/images/gamma.gif | Bin 0 -> 132 bytes
lefdef/doc/defapi/images/gradient.gif | Bin 0 -> 136 bytes
lefdef/doc/defapi/images/gtequal.gif | Bin 0 -> 126 bytes
lefdef/doc/defapi/images/header_doc.gif | Bin 0 -> 2954 bytes
lefdef/doc/defapi/images/heart.gif | Bin 0 -> 133 bytes
lefdef/doc/defapi/images/ifraktur.gif | Bin 0 -> 146 bytes
lefdef/doc/defapi/images/important.gif | Bin 0 -> 267 bytes
lefdef/doc/defapi/images/infinity.gif | Bin 0 -> 139 bytes
lefdef/doc/defapi/images/integbot.gif | Bin 0 -> 134 bytes
lefdef/doc/defapi/images/integral.gif | Bin 0 -> 123 bytes
lefdef/doc/defapi/images/integtop.gif | Bin 0 -> 131 bytes
lefdef/doc/defapi/images/intrsect.gif | Bin 0 -> 126 bytes
lefdef/doc/defapi/images/iota.gif | Bin 0 -> 112 bytes
lefdef/doc/defapi/images/kappa.gif | Bin 0 -> 124 bytes
lefdef/doc/defapi/images/lambda.gif | Bin 0 -> 137 bytes
lefdef/doc/defapi/images/logic_or.gif | Bin 0 -> 67 bytes
lefdef/doc/defapi/images/logicand.gif | Bin 0 -> 93 bytes
lefdef/doc/defapi/images/lozenge.gif | Bin 0 -> 129 bytes
lefdef/doc/defapi/images/lt_equal.gif | Bin 0 -> 124 bytes
lefdef/doc/defapi/images/nav2_index.gif | Bin 0 -> 1050 bytes
lefdef/doc/defapi/images/nav2_index_b.gif | Bin 0 -> 854 bytes
lefdef/doc/defapi/images/nav2_next_b.gif | Bin 0 -> 861 bytes
lefdef/doc/defapi/images/nav2_previous.gif | Bin 0 -> 1202 bytes
lefdef/doc/defapi/images/nav2_previous_b.gif | Bin 0 -> 871 bytes
lefdef/doc/defapi/images/nav2_print.gif | Bin 0 -> 1341 bytes
lefdef/doc/defapi/images/nav2_toc.gif | Bin 0 -> 1154 bytes
lefdef/doc/defapi/images/nav2_toc_b.gif | Bin 0 -> 866 bytes
lefdef/doc/defapi/images/nav_next.gif | Bin 0 -> 1092 bytes
lefdef/doc/defapi/images/nav_next_b.gif | Bin 0 -> 863 bytes
lefdef/doc/defapi/images/notelemn.gif | Bin 0 -> 141 bytes
lefdef/doc/defapi/images/notequal.gif | Bin 0 -> 121 bytes
lefdef/doc/defapi/images/notsbset.gif | Bin 0 -> 129 bytes
lefdef/doc/defapi/images/nu.gif | Bin 0 -> 124 bytes
lefdef/doc/defapi/images/omega.gif | Bin 0 -> 140 bytes
lefdef/doc/defapi/images/omega1.gif | Bin 0 -> 144 bytes
lefdef/doc/defapi/images/omicron.gif | Bin 0 -> 132 bytes
lefdef/doc/defapi/images/pareltbt.gif | Bin 0 -> 126 bytes
lefdef/doc/defapi/images/parelttp.gif | Bin 0 -> 126 bytes
lefdef/doc/defapi/images/parertbt.gif | Bin 0 -> 127 bytes
lefdef/doc/defapi/images/parerttp.gif | Bin 0 -> 124 bytes
lefdef/doc/defapi/images/partldif.gif | Bin 0 -> 137 bytes
lefdef/doc/defapi/images/perpend.gif | Bin 0 -> 111 bytes
lefdef/doc/defapi/images/phi.gif | Bin 0 -> 142 bytes
lefdef/doc/defapi/images/phi1.gif | Bin 0 -> 143 bytes
lefdef/doc/defapi/images/pi.gif | Bin 0 -> 134 bytes
lefdef/doc/defapi/images/product.gif | Bin 0 -> 80 bytes
lefdef/doc/defapi/images/proportn.gif | Bin 0 -> 132 bytes
lefdef/doc/defapi/images/prsprset.gif | Bin 0 -> 67 bytes
lefdef/doc/defapi/images/prsubset.gif | Bin 0 -> 117 bytes
lefdef/doc/defapi/images/psi.gif | Bin 0 -> 146 bytes
lefdef/doc/defapi/images/radical.gif | Bin 0 -> 78 bytes
lefdef/doc/defapi/images/refsbset.gif | Bin 0 -> 118 bytes
lefdef/doc/defapi/images/refspset.gif | Bin 0 -> 124 bytes
lefdef/doc/defapi/images/rfraktur.gif | Bin 0 -> 153 bytes
lefdef/doc/defapi/images/rho.gif | Bin 0 -> 134 bytes
lefdef/doc/defapi/images/second.gif | Bin 0 -> 115 bytes
lefdef/doc/defapi/images/sigma.gif | Bin 0 -> 132 bytes
lefdef/doc/defapi/images/sigma1.gif | Bin 0 -> 135 bytes
lefdef/doc/defapi/images/spade.gif | Bin 0 -> 122 bytes
lefdef/doc/defapi/images/suchthat.gif | Bin 0 -> 119 bytes
lefdef/doc/defapi/images/sumation.gif | Bin 0 -> 77 bytes
lefdef/doc/defapi/images/tau.gif | Bin 0 -> 119 bytes
lefdef/doc/defapi/images/therefor.gif | Bin 0 -> 111 bytes
lefdef/doc/defapi/images/theta.gif | Bin 0 -> 144 bytes
lefdef/doc/defapi/images/theta1.gif | Bin 0 -> 148 bytes
lefdef/doc/defapi/images/tip.gif | Bin 0 -> 241 bytes
lefdef/doc/defapi/images/tm.gif | Bin 0 -> 145 bytes
lefdef/doc/defapi/images/union.gif | Bin 0 -> 129 bytes
lefdef/doc/defapi/images/univrsal.gif | Bin 0 -> 135 bytes
lefdef/doc/defapi/images/upsilon.gif | Bin 0 -> 133 bytes
lefdef/doc/defapi/images/upsilon1.gif | Bin 0 -> 131 bytes
lefdef/doc/defapi/images/video.gif | Bin 0 -> 906 bytes
lefdef/doc/defapi/images/weierstr.gif | Bin 0 -> 153 bytes
lefdef/doc/defapi/images/xi.gif | Bin 0 -> 144 bytes
lefdef/doc/defapi/images/zeta.gif | Bin 0 -> 142 bytes
lefdef/doc/defapi/preface.html | 202 +
lefdef/doc/defapi/titlecopy.html | 226 +
lefdef/doc/defapiWN/ChangedFeatures.html | 869 +
lefdef/doc/defapiWN/NewFeatures.html | 628 +
lefdef/doc/defapiWN/defapiWN.pdf | Bin 0 -> 111804 bytes
lefdef/doc/defapiWN/defapiWNTOC.html | 180 +
lefdef/doc/defapiWN/images/Diamond.gif | Bin 0 -> 92 bytes
lefdef/doc/defapiWN/images/Diamond1.gif | Bin 0 -> 178 bytes
lefdef/doc/defapiWN/images/Diamond12.gif | Bin 0 -> 285 bytes
lefdef/doc/defapiWN/images/Thumbs.db | Bin 0 -> 161792 bytes
lefdef/doc/defapiWN/images/aleph.gif | Bin 0 -> 155 bytes
lefdef/doc/defapiWN/images/alpha.gif | Bin 0 -> 147 bytes
lefdef/doc/defapiWN/images/ampersnd.gif | Bin 0 -> 209 bytes
lefdef/doc/defapiWN/images/angle.gif | Bin 0 -> 74 bytes
lefdef/doc/defapiWN/images/anglleft.gif | Bin 0 -> 118 bytes
lefdef/doc/defapiWN/images/anglrite.gif | Bin 0 -> 120 bytes
lefdef/doc/defapiWN/images/approx.gif | Bin 0 -> 125 bytes
lefdef/doc/defapiWN/images/arrwboth.gif | Bin 0 -> 154 bytes
lefdef/doc/defapiWN/images/arrwdbbo.gif | Bin 0 -> 145 bytes
lefdef/doc/defapiWN/images/arrwdbdn.gif | Bin 0 -> 138 bytes
lefdef/doc/defapiWN/images/arrwdblt.gif | Bin 0 -> 126 bytes
lefdef/doc/defapiWN/images/arrwdbrt.gif | Bin 0 -> 124 bytes
lefdef/doc/defapiWN/images/arrwdbup.gif | Bin 0 -> 137 bytes
lefdef/doc/defapiWN/images/arrwdown.gif | Bin 0 -> 131 bytes
lefdef/doc/defapiWN/images/arrwleft.gif | Bin 0 -> 131 bytes
lefdef/doc/defapiWN/images/arrwrite.gif | Bin 0 -> 131 bytes
lefdef/doc/defapiWN/images/arrwup.gif | Bin 0 -> 135 bytes
lefdef/doc/defapiWN/images/arrwvert.gif | Bin 0 -> 85 bytes
lefdef/doc/defapiWN/images/b_bullet.gif | Bin 0 -> 818 bytes
lefdef/doc/defapiWN/images/beta.gif | Bin 0 -> 151 bytes
lefdef/doc/defapiWN/images/blank.gif | Bin 0 -> 68 bytes
lefdef/doc/defapiWN/images/bracltbt.gif | Bin 0 -> 119 bytes
lefdef/doc/defapiWN/images/bracltmd.gif | Bin 0 -> 122 bytes
lefdef/doc/defapiWN/images/braclttp.gif | Bin 0 -> 116 bytes
lefdef/doc/defapiWN/images/bracrtbt.gif | Bin 0 -> 121 bytes
lefdef/doc/defapiWN/images/bracrtmd.gif | Bin 0 -> 125 bytes
lefdef/doc/defapiWN/images/bracrttp.gif | Bin 0 -> 122 bytes
lefdef/doc/defapiWN/images/brakltbt.gif | Bin 0 -> 90 bytes
lefdef/doc/defapiWN/images/braklttp.gif | Bin 0 -> 88 bytes
lefdef/doc/defapiWN/images/brakmidl.gif | Bin 0 -> 84 bytes
lefdef/doc/defapiWN/images/brakrtbt.gif | Bin 0 -> 122 bytes
lefdef/doc/defapiWN/images/brakrttp.gif | Bin 0 -> 92 bytes
lefdef/doc/defapiWN/images/bs_bullet_sub.gif | Bin 0 -> 834 bytes
.../defapiWN/images/bss_bullet_sub_sub.gif | Bin 0 -> 837 bytes
lefdef/doc/defapiWN/images/bullet.gif | Bin 0 -> 120 bytes
lefdef/doc/defapiWN/images/capalpha.gif | Bin 0 -> 138 bytes
lefdef/doc/defapiWN/images/capbeta.gif | Bin 0 -> 141 bytes
lefdef/doc/defapiWN/images/capchi.gif | Bin 0 -> 144 bytes
lefdef/doc/defapiWN/images/capdelta.gif | Bin 0 -> 141 bytes
lefdef/doc/defapiWN/images/capepsil.gif | Bin 0 -> 130 bytes
lefdef/doc/defapiWN/images/capeta.gif | Bin 0 -> 139 bytes
lefdef/doc/defapiWN/images/capgamma.gif | Bin 0 -> 118 bytes
lefdef/doc/defapiWN/images/capiota.gif | Bin 0 -> 111 bytes
lefdef/doc/defapiWN/images/capkappa.gif | Bin 0 -> 143 bytes
lefdef/doc/defapiWN/images/caplambd.gif | Bin 0 -> 139 bytes
lefdef/doc/defapiWN/images/capmu.gif | Bin 0 -> 159 bytes
lefdef/doc/defapiWN/images/capnu.gif | Bin 0 -> 156 bytes
lefdef/doc/defapiWN/images/capomega.gif | Bin 0 -> 152 bytes
lefdef/doc/defapiWN/images/capomicr.gif | Bin 0 -> 145 bytes
lefdef/doc/defapiWN/images/capphi.gif | Bin 0 -> 161 bytes
lefdef/doc/defapiWN/images/cappi.gif | Bin 0 -> 132 bytes
lefdef/doc/defapiWN/images/cappsi.gif | Bin 0 -> 138 bytes
lefdef/doc/defapiWN/images/caprho.gif | Bin 0 -> 133 bytes
lefdef/doc/defapiWN/images/capsigma.gif | Bin 0 -> 131 bytes
lefdef/doc/defapiWN/images/captau.gif | Bin 0 -> 124 bytes
lefdef/doc/defapiWN/images/captheta.gif | Bin 0 -> 153 bytes
lefdef/doc/defapiWN/images/capupsil.gif | Bin 0 -> 140 bytes
lefdef/doc/defapiWN/images/capxi.gif | Bin 0 -> 138 bytes
lefdef/doc/defapiWN/images/capzeta.gif | Bin 0 -> 138 bytes
lefdef/doc/defapiWN/images/carretrn.gif | Bin 0 -> 119 bytes
lefdef/doc/defapiWN/images/caution.gif | Bin 0 -> 286 bytes
lefdef/doc/defapiWN/images/chi.gif | Bin 0 -> 145 bytes
lefdef/doc/defapiWN/images/circmult.gif | Bin 0 -> 81 bytes
lefdef/doc/defapiWN/images/circplus.gif | Bin 0 -> 80 bytes
lefdef/doc/defapiWN/images/club.gif | Bin 0 -> 134 bytes
lefdef/doc/defapiWN/images/congrunt.gif | Bin 0 -> 115 bytes
lefdef/doc/defapiWN/images/delta.gif | Bin 0 -> 141 bytes
lefdef/doc/defapiWN/images/draft.gif | Bin 0 -> 279 bytes
lefdef/doc/defapiWN/images/element.gif | Bin 0 -> 121 bytes
lefdef/doc/defapiWN/images/emptyset.gif | Bin 0 -> 81 bytes
lefdef/doc/defapiWN/images/epsilon.gif | Bin 0 -> 123 bytes
lefdef/doc/defapiWN/images/epsilon1.gif | Bin 0 -> 74 bytes
lefdef/doc/defapiWN/images/equivlnt.gif | Bin 0 -> 115 bytes
lefdef/doc/defapiWN/images/eta.gif | Bin 0 -> 132 bytes
lefdef/doc/defapiWN/images/existntl.gif | Bin 0 -> 117 bytes
lefdef/doc/defapiWN/images/gamma.gif | Bin 0 -> 132 bytes
lefdef/doc/defapiWN/images/gradient.gif | Bin 0 -> 136 bytes
lefdef/doc/defapiWN/images/gtequal.gif | Bin 0 -> 126 bytes
lefdef/doc/defapiWN/images/header_doc.gif | Bin 0 -> 2954 bytes
lefdef/doc/defapiWN/images/heart.gif | Bin 0 -> 133 bytes
lefdef/doc/defapiWN/images/ifraktur.gif | Bin 0 -> 146 bytes
lefdef/doc/defapiWN/images/important.gif | Bin 0 -> 267 bytes
lefdef/doc/defapiWN/images/infinity.gif | Bin 0 -> 139 bytes
lefdef/doc/defapiWN/images/integbot.gif | Bin 0 -> 134 bytes
lefdef/doc/defapiWN/images/integral.gif | Bin 0 -> 123 bytes
lefdef/doc/defapiWN/images/integtop.gif | Bin 0 -> 131 bytes
lefdef/doc/defapiWN/images/intrsect.gif | Bin 0 -> 126 bytes
lefdef/doc/defapiWN/images/iota.gif | Bin 0 -> 112 bytes
lefdef/doc/defapiWN/images/kappa.gif | Bin 0 -> 124 bytes
lefdef/doc/defapiWN/images/lambda.gif | Bin 0 -> 137 bytes
lefdef/doc/defapiWN/images/logic_or.gif | Bin 0 -> 67 bytes
lefdef/doc/defapiWN/images/logicand.gif | Bin 0 -> 93 bytes
lefdef/doc/defapiWN/images/lozenge.gif | Bin 0 -> 129 bytes
lefdef/doc/defapiWN/images/lt_equal.gif | Bin 0 -> 124 bytes
lefdef/doc/defapiWN/images/nav2_index.gif | Bin 0 -> 1050 bytes
lefdef/doc/defapiWN/images/nav2_index_b.gif | Bin 0 -> 854 bytes
lefdef/doc/defapiWN/images/nav2_next_b.gif | Bin 0 -> 861 bytes
lefdef/doc/defapiWN/images/nav2_previous.gif | Bin 0 -> 1202 bytes
.../doc/defapiWN/images/nav2_previous_b.gif | Bin 0 -> 871 bytes
lefdef/doc/defapiWN/images/nav2_print.gif | Bin 0 -> 1341 bytes
lefdef/doc/defapiWN/images/nav2_toc.gif | Bin 0 -> 1154 bytes
lefdef/doc/defapiWN/images/nav2_toc_b.gif | Bin 0 -> 866 bytes
lefdef/doc/defapiWN/images/nav_next.gif | Bin 0 -> 1092 bytes
lefdef/doc/defapiWN/images/nav_next_b.gif | Bin 0 -> 863 bytes
lefdef/doc/defapiWN/images/notelemn.gif | Bin 0 -> 141 bytes
lefdef/doc/defapiWN/images/notequal.gif | Bin 0 -> 121 bytes
lefdef/doc/defapiWN/images/notsbset.gif | Bin 0 -> 129 bytes
lefdef/doc/defapiWN/images/nu.gif | Bin 0 -> 124 bytes
lefdef/doc/defapiWN/images/omega.gif | Bin 0 -> 140 bytes
lefdef/doc/defapiWN/images/omega1.gif | Bin 0 -> 144 bytes
lefdef/doc/defapiWN/images/omicron.gif | Bin 0 -> 132 bytes
lefdef/doc/defapiWN/images/pareltbt.gif | Bin 0 -> 126 bytes
lefdef/doc/defapiWN/images/parelttp.gif | Bin 0 -> 126 bytes
lefdef/doc/defapiWN/images/parertbt.gif | Bin 0 -> 127 bytes
lefdef/doc/defapiWN/images/parerttp.gif | Bin 0 -> 124 bytes
lefdef/doc/defapiWN/images/partldif.gif | Bin 0 -> 137 bytes
lefdef/doc/defapiWN/images/perpend.gif | Bin 0 -> 111 bytes
lefdef/doc/defapiWN/images/phi.gif | Bin 0 -> 142 bytes
lefdef/doc/defapiWN/images/phi1.gif | Bin 0 -> 143 bytes
lefdef/doc/defapiWN/images/pi.gif | Bin 0 -> 134 bytes
lefdef/doc/defapiWN/images/product.gif | Bin 0 -> 80 bytes
lefdef/doc/defapiWN/images/proportn.gif | Bin 0 -> 132 bytes
lefdef/doc/defapiWN/images/prsprset.gif | Bin 0 -> 67 bytes
lefdef/doc/defapiWN/images/prsubset.gif | Bin 0 -> 117 bytes
lefdef/doc/defapiWN/images/psi.gif | Bin 0 -> 146 bytes
lefdef/doc/defapiWN/images/radical.gif | Bin 0 -> 78 bytes
lefdef/doc/defapiWN/images/refsbset.gif | Bin 0 -> 118 bytes
lefdef/doc/defapiWN/images/refspset.gif | Bin 0 -> 124 bytes
lefdef/doc/defapiWN/images/rfraktur.gif | Bin 0 -> 153 bytes
lefdef/doc/defapiWN/images/rho.gif | Bin 0 -> 134 bytes
lefdef/doc/defapiWN/images/second.gif | Bin 0 -> 115 bytes
lefdef/doc/defapiWN/images/sigma.gif | Bin 0 -> 132 bytes
lefdef/doc/defapiWN/images/sigma1.gif | Bin 0 -> 135 bytes
lefdef/doc/defapiWN/images/spade.gif | Bin 0 -> 122 bytes
lefdef/doc/defapiWN/images/suchthat.gif | Bin 0 -> 119 bytes
lefdef/doc/defapiWN/images/sumation.gif | Bin 0 -> 77 bytes
lefdef/doc/defapiWN/images/tau.gif | Bin 0 -> 119 bytes
lefdef/doc/defapiWN/images/therefor.gif | Bin 0 -> 111 bytes
lefdef/doc/defapiWN/images/theta.gif | Bin 0 -> 144 bytes
lefdef/doc/defapiWN/images/theta1.gif | Bin 0 -> 148 bytes
lefdef/doc/defapiWN/images/tip.gif | Bin 0 -> 241 bytes
lefdef/doc/defapiWN/images/tm.gif | Bin 0 -> 145 bytes
lefdef/doc/defapiWN/images/union.gif | Bin 0 -> 129 bytes
lefdef/doc/defapiWN/images/univrsal.gif | Bin 0 -> 135 bytes
lefdef/doc/defapiWN/images/upsilon.gif | Bin 0 -> 133 bytes
lefdef/doc/defapiWN/images/upsilon1.gif | Bin 0 -> 131 bytes
lefdef/doc/defapiWN/images/video.gif | Bin 0 -> 906 bytes
lefdef/doc/defapiWN/images/weierstr.gif | Bin 0 -> 153 bytes
lefdef/doc/defapiWN/images/xi.gif | Bin 0 -> 144 bytes
lefdef/doc/defapiWN/images/zeta.gif | Bin 0 -> 142 bytes
lefdef/doc/defapiWN/preface.html | 263 +
lefdef/doc/defapiWN/titlecopy.html | 220 +
lefdef/doc/lefapi/appA_LEFexamples.html | 12546 +++++++++++++
lefdef/doc/lefapi/ch1Intro.html | 404 +
lefdef/doc/lefapi/ch2LEFsetup.html | 571 +
lefdef/doc/lefapi/ch3LEFcallback.html | 1870 ++
lefdef/doc/lefapi/ch4LEFclasses.html | 1677 ++
lefdef/doc/lefapi/ch5LEFwritercallback.html | 555 +
lefdef/doc/lefapi/ch6LEFwriter.html | 4693 +++++
lefdef/doc/lefapi/ch7LEFcompressed.html | 352 +
lefdef/doc/lefapi/ch8lefdiff.html | 311 +
lefdef/doc/lefapi/images/Diamond.gif | Bin 0 -> 92 bytes
lefdef/doc/lefapi/images/Diamond1.gif | Bin 0 -> 178 bytes
lefdef/doc/lefapi/images/Diamond12.gif | Bin 0 -> 285 bytes
lefdef/doc/lefapi/images/Thumbs.db | Bin 0 -> 161792 bytes
lefdef/doc/lefapi/images/aleph.gif | Bin 0 -> 155 bytes
lefdef/doc/lefapi/images/alpha.gif | Bin 0 -> 147 bytes
lefdef/doc/lefapi/images/ampersnd.gif | Bin 0 -> 209 bytes
lefdef/doc/lefapi/images/angle.gif | Bin 0 -> 74 bytes
lefdef/doc/lefapi/images/anglleft.gif | Bin 0 -> 118 bytes
lefdef/doc/lefapi/images/anglrite.gif | Bin 0 -> 120 bytes
lefdef/doc/lefapi/images/approx.gif | Bin 0 -> 125 bytes
lefdef/doc/lefapi/images/arrwboth.gif | Bin 0 -> 154 bytes
lefdef/doc/lefapi/images/arrwdbbo.gif | Bin 0 -> 145 bytes
lefdef/doc/lefapi/images/arrwdbdn.gif | Bin 0 -> 138 bytes
lefdef/doc/lefapi/images/arrwdblt.gif | Bin 0 -> 126 bytes
lefdef/doc/lefapi/images/arrwdbrt.gif | Bin 0 -> 124 bytes
lefdef/doc/lefapi/images/arrwdbup.gif | Bin 0 -> 137 bytes
lefdef/doc/lefapi/images/arrwdown.gif | Bin 0 -> 131 bytes
lefdef/doc/lefapi/images/arrwleft.gif | Bin 0 -> 131 bytes
lefdef/doc/lefapi/images/arrwrite.gif | Bin 0 -> 131 bytes
lefdef/doc/lefapi/images/arrwup.gif | Bin 0 -> 135 bytes
lefdef/doc/lefapi/images/arrwvert.gif | Bin 0 -> 85 bytes
lefdef/doc/lefapi/images/b_bullet.gif | Bin 0 -> 818 bytes
lefdef/doc/lefapi/images/beta.gif | Bin 0 -> 151 bytes
lefdef/doc/lefapi/images/blank.gif | Bin 0 -> 68 bytes
lefdef/doc/lefapi/images/bracltbt.gif | Bin 0 -> 119 bytes
lefdef/doc/lefapi/images/bracltmd.gif | Bin 0 -> 122 bytes
lefdef/doc/lefapi/images/braclttp.gif | Bin 0 -> 116 bytes
lefdef/doc/lefapi/images/bracrtbt.gif | Bin 0 -> 121 bytes
lefdef/doc/lefapi/images/bracrtmd.gif | Bin 0 -> 125 bytes
lefdef/doc/lefapi/images/bracrttp.gif | Bin 0 -> 122 bytes
lefdef/doc/lefapi/images/brakltbt.gif | Bin 0 -> 90 bytes
lefdef/doc/lefapi/images/braklttp.gif | Bin 0 -> 88 bytes
lefdef/doc/lefapi/images/brakmidl.gif | Bin 0 -> 84 bytes
lefdef/doc/lefapi/images/brakrtbt.gif | Bin 0 -> 122 bytes
lefdef/doc/lefapi/images/brakrttp.gif | Bin 0 -> 92 bytes
lefdef/doc/lefapi/images/bs_bullet_sub.gif | Bin 0 -> 834 bytes
.../doc/lefapi/images/bss_bullet_sub_sub.gif | Bin 0 -> 837 bytes
lefdef/doc/lefapi/images/bullet.gif | Bin 0 -> 120 bytes
lefdef/doc/lefapi/images/capalpha.gif | Bin 0 -> 138 bytes
lefdef/doc/lefapi/images/capbeta.gif | Bin 0 -> 141 bytes
lefdef/doc/lefapi/images/capchi.gif | Bin 0 -> 144 bytes
lefdef/doc/lefapi/images/capdelta.gif | Bin 0 -> 141 bytes
lefdef/doc/lefapi/images/capepsil.gif | Bin 0 -> 130 bytes
lefdef/doc/lefapi/images/capeta.gif | Bin 0 -> 139 bytes
lefdef/doc/lefapi/images/capgamma.gif | Bin 0 -> 118 bytes
lefdef/doc/lefapi/images/capiota.gif | Bin 0 -> 111 bytes
lefdef/doc/lefapi/images/capkappa.gif | Bin 0 -> 143 bytes
lefdef/doc/lefapi/images/caplambd.gif | Bin 0 -> 139 bytes
lefdef/doc/lefapi/images/capmu.gif | Bin 0 -> 159 bytes
lefdef/doc/lefapi/images/capnu.gif | Bin 0 -> 156 bytes
lefdef/doc/lefapi/images/capomega.gif | Bin 0 -> 152 bytes
lefdef/doc/lefapi/images/capomicr.gif | Bin 0 -> 145 bytes
lefdef/doc/lefapi/images/capphi.gif | Bin 0 -> 161 bytes
lefdef/doc/lefapi/images/cappi.gif | Bin 0 -> 132 bytes
lefdef/doc/lefapi/images/cappsi.gif | Bin 0 -> 138 bytes
lefdef/doc/lefapi/images/caprho.gif | Bin 0 -> 133 bytes
lefdef/doc/lefapi/images/capsigma.gif | Bin 0 -> 131 bytes
lefdef/doc/lefapi/images/captau.gif | Bin 0 -> 124 bytes
lefdef/doc/lefapi/images/captheta.gif | Bin 0 -> 153 bytes
lefdef/doc/lefapi/images/capupsil.gif | Bin 0 -> 140 bytes
lefdef/doc/lefapi/images/capxi.gif | Bin 0 -> 138 bytes
lefdef/doc/lefapi/images/capzeta.gif | Bin 0 -> 138 bytes
lefdef/doc/lefapi/images/carretrn.gif | Bin 0 -> 119 bytes
lefdef/doc/lefapi/images/caution.gif | Bin 0 -> 286 bytes
lefdef/doc/lefapi/images/ch1Intro.04.1.1.png | Bin 0 -> 20516 bytes
lefdef/doc/lefapi/images/chi.gif | Bin 0 -> 145 bytes
lefdef/doc/lefapi/images/circmult.gif | Bin 0 -> 81 bytes
lefdef/doc/lefapi/images/circplus.gif | Bin 0 -> 80 bytes
lefdef/doc/lefapi/images/club.gif | Bin 0 -> 134 bytes
lefdef/doc/lefapi/images/congrunt.gif | Bin 0 -> 115 bytes
lefdef/doc/lefapi/images/delta.gif | Bin 0 -> 141 bytes
lefdef/doc/lefapi/images/draft.gif | Bin 0 -> 279 bytes
lefdef/doc/lefapi/images/element.gif | Bin 0 -> 121 bytes
lefdef/doc/lefapi/images/emptyset.gif | Bin 0 -> 81 bytes
lefdef/doc/lefapi/images/epsilon.gif | Bin 0 -> 123 bytes
lefdef/doc/lefapi/images/epsilon1.gif | Bin 0 -> 74 bytes
lefdef/doc/lefapi/images/equivlnt.gif | Bin 0 -> 115 bytes
lefdef/doc/lefapi/images/eta.gif | Bin 0 -> 132 bytes
lefdef/doc/lefapi/images/existntl.gif | Bin 0 -> 117 bytes
lefdef/doc/lefapi/images/gamma.gif | Bin 0 -> 132 bytes
lefdef/doc/lefapi/images/gradient.gif | Bin 0 -> 136 bytes
lefdef/doc/lefapi/images/gtequal.gif | Bin 0 -> 126 bytes
lefdef/doc/lefapi/images/header_doc.gif | Bin 0 -> 2954 bytes
lefdef/doc/lefapi/images/heart.gif | Bin 0 -> 133 bytes
lefdef/doc/lefapi/images/ifraktur.gif | Bin 0 -> 146 bytes
lefdef/doc/lefapi/images/important.gif | Bin 0 -> 267 bytes
lefdef/doc/lefapi/images/infinity.gif | Bin 0 -> 139 bytes
lefdef/doc/lefapi/images/integbot.gif | Bin 0 -> 134 bytes
lefdef/doc/lefapi/images/integral.gif | Bin 0 -> 123 bytes
lefdef/doc/lefapi/images/integtop.gif | Bin 0 -> 131 bytes
lefdef/doc/lefapi/images/intrsect.gif | Bin 0 -> 126 bytes
lefdef/doc/lefapi/images/iota.gif | Bin 0 -> 112 bytes
lefdef/doc/lefapi/images/kappa.gif | Bin 0 -> 124 bytes
lefdef/doc/lefapi/images/lambda.gif | Bin 0 -> 137 bytes
lefdef/doc/lefapi/images/logic_or.gif | Bin 0 -> 67 bytes
lefdef/doc/lefapi/images/logicand.gif | Bin 0 -> 93 bytes
lefdef/doc/lefapi/images/lozenge.gif | Bin 0 -> 129 bytes
lefdef/doc/lefapi/images/lt_equal.gif | Bin 0 -> 124 bytes
lefdef/doc/lefapi/images/nav2_index.gif | Bin 0 -> 1050 bytes
lefdef/doc/lefapi/images/nav2_index_b.gif | Bin 0 -> 854 bytes
lefdef/doc/lefapi/images/nav2_next_b.gif | Bin 0 -> 861 bytes
lefdef/doc/lefapi/images/nav2_previous.gif | Bin 0 -> 1202 bytes
lefdef/doc/lefapi/images/nav2_previous_b.gif | Bin 0 -> 871 bytes
lefdef/doc/lefapi/images/nav2_print.gif | Bin 0 -> 1341 bytes
lefdef/doc/lefapi/images/nav2_toc.gif | Bin 0 -> 1154 bytes
lefdef/doc/lefapi/images/nav2_toc_b.gif | Bin 0 -> 866 bytes
lefdef/doc/lefapi/images/nav_next.gif | Bin 0 -> 1092 bytes
lefdef/doc/lefapi/images/nav_next_b.gif | Bin 0 -> 863 bytes
lefdef/doc/lefapi/images/notelemn.gif | Bin 0 -> 141 bytes
lefdef/doc/lefapi/images/notequal.gif | Bin 0 -> 121 bytes
lefdef/doc/lefapi/images/notsbset.gif | Bin 0 -> 129 bytes
lefdef/doc/lefapi/images/nu.gif | Bin 0 -> 124 bytes
lefdef/doc/lefapi/images/omega.gif | Bin 0 -> 140 bytes
lefdef/doc/lefapi/images/omega1.gif | Bin 0 -> 144 bytes
lefdef/doc/lefapi/images/omicron.gif | Bin 0 -> 132 bytes
lefdef/doc/lefapi/images/pareltbt.gif | Bin 0 -> 126 bytes
lefdef/doc/lefapi/images/parelttp.gif | Bin 0 -> 126 bytes
lefdef/doc/lefapi/images/parertbt.gif | Bin 0 -> 127 bytes
lefdef/doc/lefapi/images/parerttp.gif | Bin 0 -> 124 bytes
lefdef/doc/lefapi/images/partldif.gif | Bin 0 -> 137 bytes
lefdef/doc/lefapi/images/perpend.gif | Bin 0 -> 111 bytes
lefdef/doc/lefapi/images/phi.gif | Bin 0 -> 142 bytes
lefdef/doc/lefapi/images/phi1.gif | Bin 0 -> 143 bytes
lefdef/doc/lefapi/images/pi.gif | Bin 0 -> 134 bytes
lefdef/doc/lefapi/images/product.gif | Bin 0 -> 80 bytes
lefdef/doc/lefapi/images/proportn.gif | Bin 0 -> 132 bytes
lefdef/doc/lefapi/images/prsprset.gif | Bin 0 -> 67 bytes
lefdef/doc/lefapi/images/prsubset.gif | Bin 0 -> 117 bytes
lefdef/doc/lefapi/images/psi.gif | Bin 0 -> 146 bytes
lefdef/doc/lefapi/images/radical.gif | Bin 0 -> 78 bytes
lefdef/doc/lefapi/images/refsbset.gif | Bin 0 -> 118 bytes
lefdef/doc/lefapi/images/refspset.gif | Bin 0 -> 124 bytes
lefdef/doc/lefapi/images/rfraktur.gif | Bin 0 -> 153 bytes
lefdef/doc/lefapi/images/rho.gif | Bin 0 -> 134 bytes
lefdef/doc/lefapi/images/second.gif | Bin 0 -> 115 bytes
lefdef/doc/lefapi/images/sigma.gif | Bin 0 -> 132 bytes
lefdef/doc/lefapi/images/sigma1.gif | Bin 0 -> 135 bytes
lefdef/doc/lefapi/images/spade.gif | Bin 0 -> 122 bytes
lefdef/doc/lefapi/images/suchthat.gif | Bin 0 -> 119 bytes
lefdef/doc/lefapi/images/sumation.gif | Bin 0 -> 77 bytes
lefdef/doc/lefapi/images/tau.gif | Bin 0 -> 119 bytes
lefdef/doc/lefapi/images/therefor.gif | Bin 0 -> 111 bytes
lefdef/doc/lefapi/images/theta.gif | Bin 0 -> 144 bytes
lefdef/doc/lefapi/images/theta1.gif | Bin 0 -> 148 bytes
lefdef/doc/lefapi/images/tip.gif | Bin 0 -> 241 bytes
lefdef/doc/lefapi/images/tm.gif | Bin 0 -> 145 bytes
lefdef/doc/lefapi/images/union.gif | Bin 0 -> 129 bytes
lefdef/doc/lefapi/images/univrsal.gif | Bin 0 -> 135 bytes
lefdef/doc/lefapi/images/upsilon.gif | Bin 0 -> 133 bytes
lefdef/doc/lefapi/images/upsilon1.gif | Bin 0 -> 131 bytes
lefdef/doc/lefapi/images/video.gif | Bin 0 -> 906 bytes
lefdef/doc/lefapi/images/weierstr.gif | Bin 0 -> 153 bytes
lefdef/doc/lefapi/images/xi.gif | Bin 0 -> 144 bytes
lefdef/doc/lefapi/images/zeta.gif | Bin 0 -> 142 bytes
lefdef/doc/lefapi/lefapi.pdf | 8657 +++++++++
lefdef/doc/lefapi/lefapiTOC.html | 609 +
lefdef/doc/lefapi/preface.html | 202 +
lefdef/doc/lefapi/titlecopy.html | 220 +
lefdef/doc/lefapiWN/ChangedFeatures.html | 488 +
lefdef/doc/lefapiWN/NewFeatures.html | 481 +
lefdef/doc/lefapiWN/images/Diamond.gif | Bin 0 -> 92 bytes
lefdef/doc/lefapiWN/images/Diamond1.gif | Bin 0 -> 178 bytes
lefdef/doc/lefapiWN/images/Diamond12.gif | Bin 0 -> 285 bytes
lefdef/doc/lefapiWN/images/Thumbs.db | Bin 0 -> 161792 bytes
lefdef/doc/lefapiWN/images/aleph.gif | Bin 0 -> 155 bytes
lefdef/doc/lefapiWN/images/alpha.gif | Bin 0 -> 147 bytes
lefdef/doc/lefapiWN/images/ampersnd.gif | Bin 0 -> 209 bytes
lefdef/doc/lefapiWN/images/angle.gif | Bin 0 -> 74 bytes
lefdef/doc/lefapiWN/images/anglleft.gif | Bin 0 -> 118 bytes
lefdef/doc/lefapiWN/images/anglrite.gif | Bin 0 -> 120 bytes
lefdef/doc/lefapiWN/images/approx.gif | Bin 0 -> 125 bytes
lefdef/doc/lefapiWN/images/arrwboth.gif | Bin 0 -> 154 bytes
lefdef/doc/lefapiWN/images/arrwdbbo.gif | Bin 0 -> 145 bytes
lefdef/doc/lefapiWN/images/arrwdbdn.gif | Bin 0 -> 138 bytes
lefdef/doc/lefapiWN/images/arrwdblt.gif | Bin 0 -> 126 bytes
lefdef/doc/lefapiWN/images/arrwdbrt.gif | Bin 0 -> 124 bytes
lefdef/doc/lefapiWN/images/arrwdbup.gif | Bin 0 -> 137 bytes
lefdef/doc/lefapiWN/images/arrwdown.gif | Bin 0 -> 131 bytes
lefdef/doc/lefapiWN/images/arrwleft.gif | Bin 0 -> 131 bytes
lefdef/doc/lefapiWN/images/arrwrite.gif | Bin 0 -> 131 bytes
lefdef/doc/lefapiWN/images/arrwup.gif | Bin 0 -> 135 bytes
lefdef/doc/lefapiWN/images/arrwvert.gif | Bin 0 -> 85 bytes
lefdef/doc/lefapiWN/images/b_bullet.gif | Bin 0 -> 818 bytes
lefdef/doc/lefapiWN/images/beta.gif | Bin 0 -> 151 bytes
lefdef/doc/lefapiWN/images/blank.gif | Bin 0 -> 68 bytes
lefdef/doc/lefapiWN/images/bracltbt.gif | Bin 0 -> 119 bytes
lefdef/doc/lefapiWN/images/bracltmd.gif | Bin 0 -> 122 bytes
lefdef/doc/lefapiWN/images/braclttp.gif | Bin 0 -> 116 bytes
lefdef/doc/lefapiWN/images/bracrtbt.gif | Bin 0 -> 121 bytes
lefdef/doc/lefapiWN/images/bracrtmd.gif | Bin 0 -> 125 bytes
lefdef/doc/lefapiWN/images/bracrttp.gif | Bin 0 -> 122 bytes
lefdef/doc/lefapiWN/images/brakltbt.gif | Bin 0 -> 90 bytes
lefdef/doc/lefapiWN/images/braklttp.gif | Bin 0 -> 88 bytes
lefdef/doc/lefapiWN/images/brakmidl.gif | Bin 0 -> 84 bytes
lefdef/doc/lefapiWN/images/brakrtbt.gif | Bin 0 -> 122 bytes
lefdef/doc/lefapiWN/images/brakrttp.gif | Bin 0 -> 92 bytes
lefdef/doc/lefapiWN/images/bs_bullet_sub.gif | Bin 0 -> 834 bytes
.../lefapiWN/images/bss_bullet_sub_sub.gif | Bin 0 -> 837 bytes
lefdef/doc/lefapiWN/images/bullet.gif | Bin 0 -> 120 bytes
lefdef/doc/lefapiWN/images/capalpha.gif | Bin 0 -> 138 bytes
lefdef/doc/lefapiWN/images/capbeta.gif | Bin 0 -> 141 bytes
lefdef/doc/lefapiWN/images/capchi.gif | Bin 0 -> 144 bytes
lefdef/doc/lefapiWN/images/capdelta.gif | Bin 0 -> 141 bytes
lefdef/doc/lefapiWN/images/capepsil.gif | Bin 0 -> 130 bytes
lefdef/doc/lefapiWN/images/capeta.gif | Bin 0 -> 139 bytes
lefdef/doc/lefapiWN/images/capgamma.gif | Bin 0 -> 118 bytes
lefdef/doc/lefapiWN/images/capiota.gif | Bin 0 -> 111 bytes
lefdef/doc/lefapiWN/images/capkappa.gif | Bin 0 -> 143 bytes
lefdef/doc/lefapiWN/images/caplambd.gif | Bin 0 -> 139 bytes
lefdef/doc/lefapiWN/images/capmu.gif | Bin 0 -> 159 bytes
lefdef/doc/lefapiWN/images/capnu.gif | Bin 0 -> 156 bytes
lefdef/doc/lefapiWN/images/capomega.gif | Bin 0 -> 152 bytes
lefdef/doc/lefapiWN/images/capomicr.gif | Bin 0 -> 145 bytes
lefdef/doc/lefapiWN/images/capphi.gif | Bin 0 -> 161 bytes
lefdef/doc/lefapiWN/images/cappi.gif | Bin 0 -> 132 bytes
lefdef/doc/lefapiWN/images/cappsi.gif | Bin 0 -> 138 bytes
lefdef/doc/lefapiWN/images/caprho.gif | Bin 0 -> 133 bytes
lefdef/doc/lefapiWN/images/capsigma.gif | Bin 0 -> 131 bytes
lefdef/doc/lefapiWN/images/captau.gif | Bin 0 -> 124 bytes
lefdef/doc/lefapiWN/images/captheta.gif | Bin 0 -> 153 bytes
lefdef/doc/lefapiWN/images/capupsil.gif | Bin 0 -> 140 bytes
lefdef/doc/lefapiWN/images/capxi.gif | Bin 0 -> 138 bytes
lefdef/doc/lefapiWN/images/capzeta.gif | Bin 0 -> 138 bytes
lefdef/doc/lefapiWN/images/carretrn.gif | Bin 0 -> 119 bytes
lefdef/doc/lefapiWN/images/caution.gif | Bin 0 -> 286 bytes
lefdef/doc/lefapiWN/images/chi.gif | Bin 0 -> 145 bytes
lefdef/doc/lefapiWN/images/circmult.gif | Bin 0 -> 81 bytes
lefdef/doc/lefapiWN/images/circplus.gif | Bin 0 -> 80 bytes
lefdef/doc/lefapiWN/images/club.gif | Bin 0 -> 134 bytes
lefdef/doc/lefapiWN/images/congrunt.gif | Bin 0 -> 115 bytes
lefdef/doc/lefapiWN/images/delta.gif | Bin 0 -> 141 bytes
lefdef/doc/lefapiWN/images/draft.gif | Bin 0 -> 279 bytes
lefdef/doc/lefapiWN/images/element.gif | Bin 0 -> 121 bytes
lefdef/doc/lefapiWN/images/emptyset.gif | Bin 0 -> 81 bytes
lefdef/doc/lefapiWN/images/epsilon.gif | Bin 0 -> 123 bytes
lefdef/doc/lefapiWN/images/epsilon1.gif | Bin 0 -> 74 bytes
lefdef/doc/lefapiWN/images/equivlnt.gif | Bin 0 -> 115 bytes
lefdef/doc/lefapiWN/images/eta.gif | Bin 0 -> 132 bytes
lefdef/doc/lefapiWN/images/existntl.gif | Bin 0 -> 117 bytes
lefdef/doc/lefapiWN/images/gamma.gif | Bin 0 -> 132 bytes
lefdef/doc/lefapiWN/images/gradient.gif | Bin 0 -> 136 bytes
lefdef/doc/lefapiWN/images/gtequal.gif | Bin 0 -> 126 bytes
lefdef/doc/lefapiWN/images/header_doc.gif | Bin 0 -> 2954 bytes
lefdef/doc/lefapiWN/images/heart.gif | Bin 0 -> 133 bytes
lefdef/doc/lefapiWN/images/ifraktur.gif | Bin 0 -> 146 bytes
lefdef/doc/lefapiWN/images/important.gif | Bin 0 -> 267 bytes
lefdef/doc/lefapiWN/images/infinity.gif | Bin 0 -> 139 bytes
lefdef/doc/lefapiWN/images/integbot.gif | Bin 0 -> 134 bytes
lefdef/doc/lefapiWN/images/integral.gif | Bin 0 -> 123 bytes
lefdef/doc/lefapiWN/images/integtop.gif | Bin 0 -> 131 bytes
lefdef/doc/lefapiWN/images/intrsect.gif | Bin 0 -> 126 bytes
lefdef/doc/lefapiWN/images/iota.gif | Bin 0 -> 112 bytes
lefdef/doc/lefapiWN/images/kappa.gif | Bin 0 -> 124 bytes
lefdef/doc/lefapiWN/images/lambda.gif | Bin 0 -> 137 bytes
lefdef/doc/lefapiWN/images/logic_or.gif | Bin 0 -> 67 bytes
lefdef/doc/lefapiWN/images/logicand.gif | Bin 0 -> 93 bytes
lefdef/doc/lefapiWN/images/lozenge.gif | Bin 0 -> 129 bytes
lefdef/doc/lefapiWN/images/lt_equal.gif | Bin 0 -> 124 bytes
lefdef/doc/lefapiWN/images/nav2_index.gif | Bin 0 -> 1050 bytes
lefdef/doc/lefapiWN/images/nav2_index_b.gif | Bin 0 -> 854 bytes
lefdef/doc/lefapiWN/images/nav2_next_b.gif | Bin 0 -> 861 bytes
lefdef/doc/lefapiWN/images/nav2_previous.gif | Bin 0 -> 1202 bytes
.../doc/lefapiWN/images/nav2_previous_b.gif | Bin 0 -> 871 bytes
lefdef/doc/lefapiWN/images/nav2_print.gif | Bin 0 -> 1341 bytes
lefdef/doc/lefapiWN/images/nav2_toc.gif | Bin 0 -> 1154 bytes
lefdef/doc/lefapiWN/images/nav2_toc_b.gif | Bin 0 -> 866 bytes
lefdef/doc/lefapiWN/images/nav_next.gif | Bin 0 -> 1092 bytes
lefdef/doc/lefapiWN/images/nav_next_b.gif | Bin 0 -> 863 bytes
lefdef/doc/lefapiWN/images/notelemn.gif | Bin 0 -> 141 bytes
lefdef/doc/lefapiWN/images/notequal.gif | Bin 0 -> 121 bytes
lefdef/doc/lefapiWN/images/notsbset.gif | Bin 0 -> 129 bytes
lefdef/doc/lefapiWN/images/nu.gif | Bin 0 -> 124 bytes
lefdef/doc/lefapiWN/images/omega.gif | Bin 0 -> 140 bytes
lefdef/doc/lefapiWN/images/omega1.gif | Bin 0 -> 144 bytes
lefdef/doc/lefapiWN/images/omicron.gif | Bin 0 -> 132 bytes
lefdef/doc/lefapiWN/images/pareltbt.gif | Bin 0 -> 126 bytes
lefdef/doc/lefapiWN/images/parelttp.gif | Bin 0 -> 126 bytes
lefdef/doc/lefapiWN/images/parertbt.gif | Bin 0 -> 127 bytes
lefdef/doc/lefapiWN/images/parerttp.gif | Bin 0 -> 124 bytes
lefdef/doc/lefapiWN/images/partldif.gif | Bin 0 -> 137 bytes
lefdef/doc/lefapiWN/images/perpend.gif | Bin 0 -> 111 bytes
lefdef/doc/lefapiWN/images/phi.gif | Bin 0 -> 142 bytes
lefdef/doc/lefapiWN/images/phi1.gif | Bin 0 -> 143 bytes
lefdef/doc/lefapiWN/images/pi.gif | Bin 0 -> 134 bytes
lefdef/doc/lefapiWN/images/product.gif | Bin 0 -> 80 bytes
lefdef/doc/lefapiWN/images/proportn.gif | Bin 0 -> 132 bytes
lefdef/doc/lefapiWN/images/prsprset.gif | Bin 0 -> 67 bytes
lefdef/doc/lefapiWN/images/prsubset.gif | Bin 0 -> 117 bytes
lefdef/doc/lefapiWN/images/psi.gif | Bin 0 -> 146 bytes
lefdef/doc/lefapiWN/images/radical.gif | Bin 0 -> 78 bytes
lefdef/doc/lefapiWN/images/refsbset.gif | Bin 0 -> 118 bytes
lefdef/doc/lefapiWN/images/refspset.gif | Bin 0 -> 124 bytes
lefdef/doc/lefapiWN/images/rfraktur.gif | Bin 0 -> 153 bytes
lefdef/doc/lefapiWN/images/rho.gif | Bin 0 -> 134 bytes
lefdef/doc/lefapiWN/images/second.gif | Bin 0 -> 115 bytes
lefdef/doc/lefapiWN/images/sigma.gif | Bin 0 -> 132 bytes
lefdef/doc/lefapiWN/images/sigma1.gif | Bin 0 -> 135 bytes
lefdef/doc/lefapiWN/images/spade.gif | Bin 0 -> 122 bytes
lefdef/doc/lefapiWN/images/suchthat.gif | Bin 0 -> 119 bytes
lefdef/doc/lefapiWN/images/sumation.gif | Bin 0 -> 77 bytes
lefdef/doc/lefapiWN/images/tau.gif | Bin 0 -> 119 bytes
lefdef/doc/lefapiWN/images/therefor.gif | Bin 0 -> 111 bytes
lefdef/doc/lefapiWN/images/theta.gif | Bin 0 -> 144 bytes
lefdef/doc/lefapiWN/images/theta1.gif | Bin 0 -> 148 bytes
lefdef/doc/lefapiWN/images/tip.gif | Bin 0 -> 241 bytes
lefdef/doc/lefapiWN/images/tm.gif | Bin 0 -> 145 bytes
lefdef/doc/lefapiWN/images/union.gif | Bin 0 -> 129 bytes
lefdef/doc/lefapiWN/images/univrsal.gif | Bin 0 -> 135 bytes
lefdef/doc/lefapiWN/images/upsilon.gif | Bin 0 -> 133 bytes
lefdef/doc/lefapiWN/images/upsilon1.gif | Bin 0 -> 131 bytes
lefdef/doc/lefapiWN/images/video.gif | Bin 0 -> 906 bytes
lefdef/doc/lefapiWN/images/weierstr.gif | Bin 0 -> 153 bytes
lefdef/doc/lefapiWN/images/xi.gif | Bin 0 -> 144 bytes
lefdef/doc/lefapiWN/images/zeta.gif | Bin 0 -> 142 bytes
lefdef/doc/lefapiWN/lefapiWN.pdf | Bin 0 -> 98432 bytes
lefdef/doc/lefapiWN/lefapiWNTOC.html | 182 +
lefdef/doc/lefapiWN/preface.html | 263 +
lefdef/doc/lefapiWN/titlecopy.html | 220 +
lefdef/doc/lefdefWN/NewFeatures.html | 1062 ++
lefdef/doc/lefdefWN/Preface.html | 249 +
lefdef/doc/lefdefWN/images/Diamond.gif | Bin 0 -> 92 bytes
lefdef/doc/lefdefWN/images/Diamond1.gif | Bin 0 -> 178 bytes
lefdef/doc/lefdefWN/images/Diamond12.gif | Bin 0 -> 285 bytes
lefdef/doc/lefdefWN/images/Thumbs.db | Bin 0 -> 161792 bytes
lefdef/doc/lefdefWN/images/aleph.gif | Bin 0 -> 155 bytes
lefdef/doc/lefdefWN/images/alpha.gif | Bin 0 -> 147 bytes
lefdef/doc/lefdefWN/images/ampersnd.gif | Bin 0 -> 209 bytes
lefdef/doc/lefdefWN/images/angle.gif | Bin 0 -> 74 bytes
lefdef/doc/lefdefWN/images/anglleft.gif | Bin 0 -> 118 bytes
lefdef/doc/lefdefWN/images/anglrite.gif | Bin 0 -> 120 bytes
lefdef/doc/lefdefWN/images/approx.gif | Bin 0 -> 125 bytes
lefdef/doc/lefdefWN/images/arrwboth.gif | Bin 0 -> 154 bytes
lefdef/doc/lefdefWN/images/arrwdbbo.gif | Bin 0 -> 145 bytes
lefdef/doc/lefdefWN/images/arrwdbdn.gif | Bin 0 -> 138 bytes
lefdef/doc/lefdefWN/images/arrwdblt.gif | Bin 0 -> 126 bytes
lefdef/doc/lefdefWN/images/arrwdbrt.gif | Bin 0 -> 124 bytes
lefdef/doc/lefdefWN/images/arrwdbup.gif | Bin 0 -> 137 bytes
lefdef/doc/lefdefWN/images/arrwdown.gif | Bin 0 -> 131 bytes
lefdef/doc/lefdefWN/images/arrwleft.gif | Bin 0 -> 131 bytes
lefdef/doc/lefdefWN/images/arrwrite.gif | Bin 0 -> 131 bytes
lefdef/doc/lefdefWN/images/arrwup.gif | Bin 0 -> 135 bytes
lefdef/doc/lefdefWN/images/arrwvert.gif | Bin 0 -> 85 bytes
lefdef/doc/lefdefWN/images/b_bullet.gif | Bin 0 -> 818 bytes
lefdef/doc/lefdefWN/images/beta.gif | Bin 0 -> 151 bytes
lefdef/doc/lefdefWN/images/blank.gif | Bin 0 -> 68 bytes
lefdef/doc/lefdefWN/images/bracltbt.gif | Bin 0 -> 119 bytes
lefdef/doc/lefdefWN/images/bracltmd.gif | Bin 0 -> 122 bytes
lefdef/doc/lefdefWN/images/braclttp.gif | Bin 0 -> 116 bytes
lefdef/doc/lefdefWN/images/bracrtbt.gif | Bin 0 -> 121 bytes
lefdef/doc/lefdefWN/images/bracrtmd.gif | Bin 0 -> 125 bytes
lefdef/doc/lefdefWN/images/bracrttp.gif | Bin 0 -> 122 bytes
lefdef/doc/lefdefWN/images/brakltbt.gif | Bin 0 -> 90 bytes
lefdef/doc/lefdefWN/images/braklttp.gif | Bin 0 -> 88 bytes
lefdef/doc/lefdefWN/images/brakmidl.gif | Bin 0 -> 84 bytes
lefdef/doc/lefdefWN/images/brakrtbt.gif | Bin 0 -> 122 bytes
lefdef/doc/lefdefWN/images/brakrttp.gif | Bin 0 -> 92 bytes
lefdef/doc/lefdefWN/images/bs_bullet_sub.gif | Bin 0 -> 834 bytes
.../lefdefWN/images/bss_bullet_sub_sub.gif | Bin 0 -> 837 bytes
lefdef/doc/lefdefWN/images/bullet.gif | Bin 0 -> 120 bytes
lefdef/doc/lefdefWN/images/capalpha.gif | Bin 0 -> 138 bytes
lefdef/doc/lefdefWN/images/capbeta.gif | Bin 0 -> 141 bytes
lefdef/doc/lefdefWN/images/capchi.gif | Bin 0 -> 144 bytes
lefdef/doc/lefdefWN/images/capdelta.gif | Bin 0 -> 141 bytes
lefdef/doc/lefdefWN/images/capepsil.gif | Bin 0 -> 130 bytes
lefdef/doc/lefdefWN/images/capeta.gif | Bin 0 -> 139 bytes
lefdef/doc/lefdefWN/images/capgamma.gif | Bin 0 -> 118 bytes
lefdef/doc/lefdefWN/images/capiota.gif | Bin 0 -> 111 bytes
lefdef/doc/lefdefWN/images/capkappa.gif | Bin 0 -> 143 bytes
lefdef/doc/lefdefWN/images/caplambd.gif | Bin 0 -> 139 bytes
lefdef/doc/lefdefWN/images/capmu.gif | Bin 0 -> 159 bytes
lefdef/doc/lefdefWN/images/capnu.gif | Bin 0 -> 156 bytes
lefdef/doc/lefdefWN/images/capomega.gif | Bin 0 -> 152 bytes
lefdef/doc/lefdefWN/images/capomicr.gif | Bin 0 -> 145 bytes
lefdef/doc/lefdefWN/images/capphi.gif | Bin 0 -> 161 bytes
lefdef/doc/lefdefWN/images/cappi.gif | Bin 0 -> 132 bytes
lefdef/doc/lefdefWN/images/cappsi.gif | Bin 0 -> 138 bytes
lefdef/doc/lefdefWN/images/caprho.gif | Bin 0 -> 133 bytes
lefdef/doc/lefdefWN/images/capsigma.gif | Bin 0 -> 131 bytes
lefdef/doc/lefdefWN/images/captau.gif | Bin 0 -> 124 bytes
lefdef/doc/lefdefWN/images/captheta.gif | Bin 0 -> 153 bytes
lefdef/doc/lefdefWN/images/capupsil.gif | Bin 0 -> 140 bytes
lefdef/doc/lefdefWN/images/capxi.gif | Bin 0 -> 138 bytes
lefdef/doc/lefdefWN/images/capzeta.gif | Bin 0 -> 138 bytes
lefdef/doc/lefdefWN/images/carretrn.gif | Bin 0 -> 119 bytes
lefdef/doc/lefdefWN/images/caution.gif | Bin 0 -> 286 bytes
lefdef/doc/lefdefWN/images/chi.gif | Bin 0 -> 145 bytes
lefdef/doc/lefdefWN/images/circmult.gif | Bin 0 -> 81 bytes
lefdef/doc/lefdefWN/images/circplus.gif | Bin 0 -> 80 bytes
lefdef/doc/lefdefWN/images/club.gif | Bin 0 -> 134 bytes
lefdef/doc/lefdefWN/images/congrunt.gif | Bin 0 -> 115 bytes
lefdef/doc/lefdefWN/images/delta.gif | Bin 0 -> 141 bytes
lefdef/doc/lefdefWN/images/draft.gif | Bin 0 -> 279 bytes
lefdef/doc/lefdefWN/images/element.gif | Bin 0 -> 121 bytes
lefdef/doc/lefdefWN/images/emptyset.gif | Bin 0 -> 81 bytes
lefdef/doc/lefdefWN/images/epsilon.gif | Bin 0 -> 123 bytes
lefdef/doc/lefdefWN/images/epsilon1.gif | Bin 0 -> 74 bytes
lefdef/doc/lefdefWN/images/equivlnt.gif | Bin 0 -> 115 bytes
lefdef/doc/lefdefWN/images/eta.gif | Bin 0 -> 132 bytes
lefdef/doc/lefdefWN/images/existntl.gif | Bin 0 -> 117 bytes
lefdef/doc/lefdefWN/images/gamma.gif | Bin 0 -> 132 bytes
lefdef/doc/lefdefWN/images/gradient.gif | Bin 0 -> 136 bytes
lefdef/doc/lefdefWN/images/gtequal.gif | Bin 0 -> 126 bytes
lefdef/doc/lefdefWN/images/header_doc.gif | Bin 0 -> 2954 bytes
lefdef/doc/lefdefWN/images/heart.gif | Bin 0 -> 133 bytes
lefdef/doc/lefdefWN/images/ifraktur.gif | Bin 0 -> 146 bytes
lefdef/doc/lefdefWN/images/important.gif | Bin 0 -> 267 bytes
lefdef/doc/lefdefWN/images/infinity.gif | Bin 0 -> 139 bytes
lefdef/doc/lefdefWN/images/integbot.gif | Bin 0 -> 134 bytes
lefdef/doc/lefdefWN/images/integral.gif | Bin 0 -> 123 bytes
lefdef/doc/lefdefWN/images/integtop.gif | Bin 0 -> 131 bytes
lefdef/doc/lefdefWN/images/intrsect.gif | Bin 0 -> 126 bytes
lefdef/doc/lefdefWN/images/iota.gif | Bin 0 -> 112 bytes
lefdef/doc/lefdefWN/images/kappa.gif | Bin 0 -> 124 bytes
lefdef/doc/lefdefWN/images/lambda.gif | Bin 0 -> 137 bytes
lefdef/doc/lefdefWN/images/logic_or.gif | Bin 0 -> 67 bytes
lefdef/doc/lefdefWN/images/logicand.gif | Bin 0 -> 93 bytes
lefdef/doc/lefdefWN/images/lozenge.gif | Bin 0 -> 129 bytes
lefdef/doc/lefdefWN/images/lt_equal.gif | Bin 0 -> 124 bytes
lefdef/doc/lefdefWN/images/nav2_index.gif | Bin 0 -> 1050 bytes
lefdef/doc/lefdefWN/images/nav2_index_b.gif | Bin 0 -> 854 bytes
lefdef/doc/lefdefWN/images/nav2_next_b.gif | Bin 0 -> 861 bytes
lefdef/doc/lefdefWN/images/nav2_previous.gif | Bin 0 -> 1202 bytes
.../doc/lefdefWN/images/nav2_previous_b.gif | Bin 0 -> 871 bytes
lefdef/doc/lefdefWN/images/nav2_print.gif | Bin 0 -> 1341 bytes
lefdef/doc/lefdefWN/images/nav2_toc.gif | Bin 0 -> 1154 bytes
lefdef/doc/lefdefWN/images/nav2_toc_b.gif | Bin 0 -> 866 bytes
lefdef/doc/lefdefWN/images/nav_next.gif | Bin 0 -> 1092 bytes
lefdef/doc/lefdefWN/images/nav_next_b.gif | Bin 0 -> 863 bytes
lefdef/doc/lefdefWN/images/notelemn.gif | Bin 0 -> 141 bytes
lefdef/doc/lefdefWN/images/notequal.gif | Bin 0 -> 121 bytes
lefdef/doc/lefdefWN/images/notsbset.gif | Bin 0 -> 129 bytes
lefdef/doc/lefdefWN/images/nu.gif | Bin 0 -> 124 bytes
lefdef/doc/lefdefWN/images/omega.gif | Bin 0 -> 140 bytes
lefdef/doc/lefdefWN/images/omega1.gif | Bin 0 -> 144 bytes
lefdef/doc/lefdefWN/images/omicron.gif | Bin 0 -> 132 bytes
lefdef/doc/lefdefWN/images/pareltbt.gif | Bin 0 -> 126 bytes
lefdef/doc/lefdefWN/images/parelttp.gif | Bin 0 -> 126 bytes
lefdef/doc/lefdefWN/images/parertbt.gif | Bin 0 -> 127 bytes
lefdef/doc/lefdefWN/images/parerttp.gif | Bin 0 -> 124 bytes
lefdef/doc/lefdefWN/images/partldif.gif | Bin 0 -> 137 bytes
lefdef/doc/lefdefWN/images/perpend.gif | Bin 0 -> 111 bytes
lefdef/doc/lefdefWN/images/phi.gif | Bin 0 -> 142 bytes
lefdef/doc/lefdefWN/images/phi1.gif | Bin 0 -> 143 bytes
lefdef/doc/lefdefWN/images/pi.gif | Bin 0 -> 134 bytes
lefdef/doc/lefdefWN/images/product.gif | Bin 0 -> 80 bytes
lefdef/doc/lefdefWN/images/proportn.gif | Bin 0 -> 132 bytes
lefdef/doc/lefdefWN/images/prsprset.gif | Bin 0 -> 67 bytes
lefdef/doc/lefdefWN/images/prsubset.gif | Bin 0 -> 117 bytes
lefdef/doc/lefdefWN/images/psi.gif | Bin 0 -> 146 bytes
lefdef/doc/lefdefWN/images/radical.gif | Bin 0 -> 78 bytes
lefdef/doc/lefdefWN/images/refsbset.gif | Bin 0 -> 118 bytes
lefdef/doc/lefdefWN/images/refspset.gif | Bin 0 -> 124 bytes
lefdef/doc/lefdefWN/images/rfraktur.gif | Bin 0 -> 153 bytes
lefdef/doc/lefdefWN/images/rho.gif | Bin 0 -> 134 bytes
lefdef/doc/lefdefWN/images/second.gif | Bin 0 -> 115 bytes
lefdef/doc/lefdefWN/images/sigma.gif | Bin 0 -> 132 bytes
lefdef/doc/lefdefWN/images/sigma1.gif | Bin 0 -> 135 bytes
lefdef/doc/lefdefWN/images/spade.gif | Bin 0 -> 122 bytes
lefdef/doc/lefdefWN/images/suchthat.gif | Bin 0 -> 119 bytes
lefdef/doc/lefdefWN/images/sumation.gif | Bin 0 -> 77 bytes
lefdef/doc/lefdefWN/images/tau.gif | Bin 0 -> 119 bytes
lefdef/doc/lefdefWN/images/therefor.gif | Bin 0 -> 111 bytes
lefdef/doc/lefdefWN/images/theta.gif | Bin 0 -> 144 bytes
lefdef/doc/lefdefWN/images/theta1.gif | Bin 0 -> 148 bytes
lefdef/doc/lefdefWN/images/tip.gif | Bin 0 -> 241 bytes
lefdef/doc/lefdefWN/images/tm.gif | Bin 0 -> 145 bytes
lefdef/doc/lefdefWN/images/union.gif | Bin 0 -> 129 bytes
lefdef/doc/lefdefWN/images/univrsal.gif | Bin 0 -> 135 bytes
lefdef/doc/lefdefWN/images/upsilon.gif | Bin 0 -> 133 bytes
lefdef/doc/lefdefWN/images/upsilon1.gif | Bin 0 -> 131 bytes
lefdef/doc/lefdefWN/images/video.gif | Bin 0 -> 906 bytes
lefdef/doc/lefdefWN/images/weierstr.gif | Bin 0 -> 153 bytes
lefdef/doc/lefdefWN/images/xi.gif | Bin 0 -> 144 bytes
lefdef/doc/lefdefWN/images/zeta.gif | Bin 0 -> 142 bytes
lefdef/doc/lefdefWN/lefdefWN.pdf | Bin 0 -> 112727 bytes
lefdef/doc/lefdefWN/lefdefWNTOC.html | 180 +
lefdef/doc/lefdefWN/titlecopy.html | 220 +
lefdef/doc/lefdefref/DEFINEandALIAS.html | 501 +
lefdef/doc/lefdefref/DEFSyntax.html | 8576 +++++++++
lefdef/doc/lefdefref/Examples.html | 288 +
lefdef/doc/lefdefref/LEFSyntax.html | 9441 ++++++++++
.../lefdefref/OptimizingLEFTechnology.html | 1140 ++
lefdef/doc/lefdefref/PAE.html | 3002 ++++
lefdef/doc/lefdefref/WorkingwithLEF.html | 570 +
.../lefdefref/images/DEFSyntax.07.1.01.png | Bin 0 -> 14996 bytes
.../lefdefref/images/DEFSyntax.07.1.02.png | Bin 0 -> 19807 bytes
.../lefdefref/images/DEFSyntax.07.1.03.png | Bin 0 -> 301 bytes
.../lefdefref/images/DEFSyntax.07.1.04.png | Bin 0 -> 234 bytes
.../lefdefref/images/DEFSyntax.07.1.05.png | Bin 0 -> 325 bytes
.../lefdefref/images/DEFSyntax.07.1.06.png | Bin 0 -> 336 bytes
.../lefdefref/images/DEFSyntax.07.1.07.png | Bin 0 -> 303 bytes
.../lefdefref/images/DEFSyntax.07.1.08.png | Bin 0 -> 278 bytes
.../lefdefref/images/DEFSyntax.07.1.09.png | Bin 0 -> 320 bytes
.../lefdefref/images/DEFSyntax.07.1.10.png | Bin 0 -> 339 bytes
.../lefdefref/images/DEFSyntax.07.1.11.png | Bin 0 -> 8110 bytes
.../lefdefref/images/DEFSyntax.07.1.12.png | Bin 0 -> 7704 bytes
.../lefdefref/images/DEFSyntax.07.1.13.png | Bin 0 -> 19536 bytes
.../lefdefref/images/DEFSyntax.07.1.14.png | Bin 0 -> 18947 bytes
.../lefdefref/images/DEFSyntax.07.1.15.png | Bin 0 -> 8106 bytes
.../lefdefref/images/DEFSyntax.07.1.16.png | Bin 0 -> 9246 bytes
.../lefdefref/images/DEFSyntax.07.1.17.png | Bin 0 -> 9716 bytes
.../lefdefref/images/DEFSyntax.07.1.18.png | Bin 0 -> 8812 bytes
.../lefdefref/images/DEFSyntax.07.1.19.png | Bin 0 -> 301 bytes
.../lefdefref/images/DEFSyntax.07.1.20.png | Bin 0 -> 234 bytes
.../lefdefref/images/DEFSyntax.07.1.21.png | Bin 0 -> 325 bytes
.../lefdefref/images/DEFSyntax.07.1.22.png | Bin 0 -> 336 bytes
.../lefdefref/images/DEFSyntax.07.1.23.png | Bin 0 -> 303 bytes
.../lefdefref/images/DEFSyntax.07.1.24.png | Bin 0 -> 278 bytes
.../lefdefref/images/DEFSyntax.07.1.25.png | Bin 0 -> 320 bytes
.../lefdefref/images/DEFSyntax.07.1.26.png | Bin 0 -> 339 bytes
.../lefdefref/images/DEFSyntax.07.1.27.png | Bin 0 -> 19528 bytes
.../lefdefref/images/DEFSyntax.07.1.28.png | Bin 0 -> 23209 bytes
.../lefdefref/images/DEFSyntax.07.1.29.png | Bin 0 -> 301 bytes
.../lefdefref/images/DEFSyntax.07.1.30.png | Bin 0 -> 234 bytes
.../lefdefref/images/DEFSyntax.07.1.31.png | Bin 0 -> 325 bytes
.../lefdefref/images/DEFSyntax.07.1.32.png | Bin 0 -> 336 bytes
.../lefdefref/images/DEFSyntax.07.1.33.png | Bin 0 -> 303 bytes
.../lefdefref/images/DEFSyntax.07.1.34.png | Bin 0 -> 278 bytes
.../lefdefref/images/DEFSyntax.07.1.35.png | Bin 0 -> 320 bytes
.../lefdefref/images/DEFSyntax.07.1.36.png | Bin 0 -> 339 bytes
.../lefdefref/images/DEFSyntax.07.1.37.png | Bin 0 -> 9943 bytes
.../lefdefref/images/DEFSyntax.07.1.38.png | Bin 0 -> 19762 bytes
.../lefdefref/images/DEFSyntax.07.1.39.png | Bin 0 -> 6269 bytes
.../lefdefref/images/DEFSyntax.07.1.40.png | Bin 0 -> 14064 bytes
.../lefdefref/images/DEFSyntax.07.1.41.png | Bin 0 -> 8626 bytes
.../lefdefref/images/DEFSyntax.07.1.42.png | Bin 0 -> 62470 bytes
.../lefdefref/images/DEFSyntax.07.1.43.png | Bin 0 -> 18808 bytes
.../lefdefref/images/DEFSyntax.07.1.44.png | Bin 0 -> 18533 bytes
.../lefdefref/images/DEFSyntax.07.1.45.png | Bin 0 -> 1637 bytes
.../lefdefref/images/DEFSyntax.07.1.46.png | Bin 0 -> 1501 bytes
.../lefdefref/images/DEFSyntax.07.1.47.png | Bin 0 -> 2017 bytes
.../lefdefref/images/DEFSyntax.07.1.48.png | Bin 0 -> 15196 bytes
.../lefdefref/images/DEFSyntax.07.1.49.png | Bin 0 -> 16133 bytes
.../lefdefref/images/DEFSyntax.07.1.50.png | Bin 0 -> 17057 bytes
.../lefdefref/images/DEFSyntax.07.1.51.png | Bin 0 -> 17350 bytes
.../lefdefref/images/DEFSyntax.07.1.52.png | Bin 0 -> 22182 bytes
.../lefdefref/images/DEFSyntax.07.1.53.png | Bin 0 -> 6047 bytes
.../lefdefref/images/DEFSyntax.07.1.54.png | Bin 0 -> 9247 bytes
.../lefdefref/images/DEFSyntax.07.1.55.png | Bin 0 -> 30319 bytes
.../lefdefref/images/DEFSyntax.07.1.56.png | Bin 0 -> 29108 bytes
.../lefdefref/images/DEFSyntax.07.1.57.png | Bin 0 -> 34255 bytes
.../lefdefref/images/DEFSyntax.07.1.58.png | Bin 0 -> 5597 bytes
.../lefdefref/images/DEFSyntax.07.1.59.png | Bin 0 -> 6816 bytes
lefdef/doc/lefdefref/images/Diamond.gif | Bin 0 -> 92 bytes
lefdef/doc/lefdefref/images/Diamond1.gif | Bin 0 -> 178 bytes
lefdef/doc/lefdefref/images/Diamond12.gif | Bin 0 -> 285 bytes
.../lefdefref/images/LEFSyntax.04.1.01.png | Bin 0 -> 22038 bytes
.../lefdefref/images/LEFSyntax.04.1.02.png | Bin 0 -> 17814 bytes
.../lefdefref/images/LEFSyntax.04.1.03.png | Bin 0 -> 8250 bytes
.../lefdefref/images/LEFSyntax.04.1.04.png | Bin 0 -> 32588 bytes
.../lefdefref/images/LEFSyntax.04.1.05.png | Bin 0 -> 48535 bytes
.../lefdefref/images/LEFSyntax.04.1.06.png | Bin 0 -> 7442 bytes
.../lefdefref/images/LEFSyntax.04.1.07.png | Bin 0 -> 13083 bytes
.../lefdefref/images/LEFSyntax.04.1.08.png | Bin 0 -> 16830 bytes
.../lefdefref/images/LEFSyntax.04.1.09.png | Bin 0 -> 23185 bytes
.../lefdefref/images/LEFSyntax.04.1.10.png | Bin 0 -> 31401 bytes
.../lefdefref/images/LEFSyntax.04.1.11.png | Bin 0 -> 45704 bytes
.../lefdefref/images/LEFSyntax.04.1.12.png | Bin 0 -> 19788 bytes
.../lefdefref/images/LEFSyntax.04.1.13.png | Bin 0 -> 5944 bytes
.../lefdefref/images/LEFSyntax.04.1.14.png | Bin 0 -> 13244 bytes
.../lefdefref/images/LEFSyntax.04.1.15.png | Bin 0 -> 35391 bytes
.../lefdefref/images/LEFSyntax.04.1.16.png | Bin 0 -> 14207 bytes
.../lefdefref/images/LEFSyntax.04.1.17.png | Bin 0 -> 14513 bytes
.../lefdefref/images/LEFSyntax.04.1.18.png | Bin 0 -> 11045 bytes
.../lefdefref/images/LEFSyntax.04.1.19.png | Bin 0 -> 12083 bytes
.../lefdefref/images/LEFSyntax.04.1.20.png | Bin 0 -> 10056 bytes
.../lefdefref/images/LEFSyntax.04.1.21.png | Bin 0 -> 11224 bytes
.../lefdefref/images/LEFSyntax.04.1.22.png | Bin 0 -> 12490 bytes
.../lefdefref/images/LEFSyntax.04.1.23.png | Bin 0 -> 14443 bytes
.../lefdefref/images/LEFSyntax.04.1.24.png | Bin 0 -> 15778 bytes
.../lefdefref/images/LEFSyntax.04.1.25.png | Bin 0 -> 5391 bytes
.../lefdefref/images/LEFSyntax.04.1.26.png | Bin 0 -> 10945 bytes
.../lefdefref/images/LEFSyntax.04.1.27.png | Bin 0 -> 5958 bytes
.../lefdefref/images/LEFSyntax.04.1.28.png | Bin 0 -> 16079 bytes
.../lefdefref/images/LEFSyntax.04.1.29.png | Bin 0 -> 24980 bytes
.../lefdefref/images/LEFSyntax.04.1.30.png | Bin 0 -> 5615 bytes
.../lefdefref/images/LEFSyntax.04.1.31.png | Bin 0 -> 9475 bytes
.../lefdefref/images/LEFSyntax.04.1.32.png | Bin 0 -> 12352 bytes
.../lefdefref/images/LEFSyntax.04.1.33.png | Bin 0 -> 40201 bytes
.../lefdefref/images/LEFSyntax.04.1.34.png | Bin 0 -> 7769 bytes
.../lefdefref/images/LEFSyntax.04.1.35.png | Bin 0 -> 10440 bytes
.../lefdefref/images/LEFSyntax.04.1.36.png | Bin 0 -> 7818 bytes
.../lefdefref/images/LEFSyntax.04.1.37.png | Bin 0 -> 18965 bytes
.../lefdefref/images/LEFSyntax.04.1.38.png | Bin 0 -> 16287 bytes
.../lefdefref/images/LEFSyntax.04.1.39.png | Bin 0 -> 27104 bytes
.../lefdefref/images/LEFSyntax.04.1.40.png | Bin 0 -> 8944 bytes
.../lefdefref/images/LEFSyntax.04.1.41.png | Bin 0 -> 33814 bytes
.../lefdefref/images/LEFSyntax.04.1.42.png | Bin 0 -> 26492 bytes
.../lefdefref/images/LEFSyntax.04.1.43.png | Bin 0 -> 16551 bytes
.../lefdefref/images/LEFSyntax.04.1.44.png | Bin 0 -> 864 bytes
.../lefdefref/images/LEFSyntax.04.1.45.png | Bin 0 -> 4121 bytes
.../lefdefref/images/LEFSyntax.04.1.46.png | Bin 0 -> 14990 bytes
.../lefdefref/images/LEFSyntax.04.1.47.png | Bin 0 -> 23887 bytes
.../lefdefref/images/LEFSyntax.04.1.48.png | Bin 0 -> 14586 bytes
.../lefdefref/images/LEFSyntax.04.1.49.png | Bin 0 -> 13697 bytes
.../lefdefref/images/LEFSyntax.04.1.50.png | Bin 0 -> 19544 bytes
.../lefdefref/images/LEFSyntax.04.1.51.png | Bin 0 -> 5848 bytes
.../lefdefref/images/LEFSyntax.04.1.52.png | Bin 0 -> 16076 bytes
.../lefdefref/images/LEFSyntax.04.1.53.png | Bin 0 -> 8892 bytes
.../lefdefref/images/LEFSyntax.04.1.54.png | Bin 0 -> 3411 bytes
.../lefdefref/images/LEFSyntax.04.1.55.png | Bin 0 -> 11243 bytes
.../lefdefref/images/LEFSyntax.04.1.56.png | Bin 0 -> 22182 bytes
.../lefdefref/images/LEFSyntax.04.1.57.png | Bin 0 -> 6033 bytes
.../lefdefref/images/LEFSyntax.04.1.58.png | Bin 0 -> 9574 bytes
.../lefdefref/images/LEFSyntax.04.1.59.png | Bin 0 -> 36970 bytes
.../lefdefref/images/LEFSyntax.04.1.60.png | Bin 0 -> 27343 bytes
.../lefdefref/images/LEFSyntax.04.1.61.png | Bin 0 -> 34864 bytes
.../lefdefref/images/LEFSyntax.04.1.62.png | Bin 0 -> 11706 bytes
.../images/OptimizingLEFTechnology.09.1.1.png | Bin 0 -> 7208 bytes
.../images/OptimizingLEFTechnology.09.1.2.png | Bin 0 -> 11067 bytes
.../images/OptimizingLEFTechnology.09.1.3.png | Bin 0 -> 5903 bytes
.../images/OptimizingLEFTechnology.09.1.4.png | Bin 0 -> 6689 bytes
.../images/OptimizingLEFTechnology.09.1.5.png | Bin 0 -> 13289 bytes
.../images/OptimizingLEFTechnology.09.1.6.png | Bin 0 -> 21317 bytes
lefdef/doc/lefdefref/images/PAE.10.1.01.png | Bin 0 -> 2881 bytes
lefdef/doc/lefdefref/images/PAE.10.1.02.png | Bin 0 -> 5403 bytes
lefdef/doc/lefdefref/images/PAE.10.1.03.png | Bin 0 -> 10016 bytes
lefdef/doc/lefdefref/images/PAE.10.1.04.png | Bin 0 -> 4136 bytes
lefdef/doc/lefdefref/images/PAE.10.1.05.png | Bin 0 -> 4934 bytes
lefdef/doc/lefdefref/images/PAE.10.1.06.png | Bin 0 -> 3877 bytes
lefdef/doc/lefdefref/images/PAE.10.1.07.png | Bin 0 -> 7778 bytes
lefdef/doc/lefdefref/images/PAE.10.1.08.png | Bin 0 -> 2688 bytes
lefdef/doc/lefdefref/images/PAE.10.1.09.png | Bin 0 -> 2526 bytes
lefdef/doc/lefdefref/images/PAE.10.1.10.png | Bin 0 -> 2456 bytes
lefdef/doc/lefdefref/images/PAE.10.1.11.png | Bin 0 -> 10104 bytes
lefdef/doc/lefdefref/images/PAE.10.1.12.png | Bin 0 -> 3225 bytes
lefdef/doc/lefdefref/images/PAE.10.1.13.png | Bin 0 -> 10623 bytes
lefdef/doc/lefdefref/images/PAE.10.1.14.png | Bin 0 -> 3329 bytes
lefdef/doc/lefdefref/images/PAE.10.1.15.png | Bin 0 -> 11382 bytes
lefdef/doc/lefdefref/images/PAE.10.1.16.png | Bin 0 -> 3509 bytes
lefdef/doc/lefdefref/images/PAE.10.1.17.png | Bin 0 -> 10368 bytes
lefdef/doc/lefdefref/images/PAE.10.1.18.png | Bin 0 -> 3792 bytes
lefdef/doc/lefdefref/images/PAE.10.1.19.png | Bin 0 -> 9570 bytes
lefdef/doc/lefdefref/images/PAE.10.1.20.png | Bin 0 -> 9732 bytes
lefdef/doc/lefdefref/images/PAE.10.1.21.png | Bin 0 -> 7237 bytes
lefdef/doc/lefdefref/images/PAE.10.1.22.png | Bin 0 -> 7239 bytes
lefdef/doc/lefdefref/images/PAE.10.1.23.png | Bin 0 -> 7984 bytes
lefdef/doc/lefdefref/images/PAE.10.1.24.png | Bin 0 -> 8006 bytes
lefdef/doc/lefdefref/images/PAE.10.1.25.png | Bin 0 -> 7994 bytes
lefdef/doc/lefdefref/images/PAE.10.1.26.png | Bin 0 -> 5047 bytes
lefdef/doc/lefdefref/images/PAE.10.1.27.png | Bin 0 -> 5413 bytes
lefdef/doc/lefdefref/images/PAE.10.1.28.png | Bin 0 -> 2957 bytes
lefdef/doc/lefdefref/images/PAE.10.1.29.png | Bin 0 -> 7865 bytes
lefdef/doc/lefdefref/images/PAE.10.1.30.png | Bin 0 -> 4049 bytes
lefdef/doc/lefdefref/images/PAE.10.1.31.png | Bin 0 -> 9628 bytes
lefdef/doc/lefdefref/images/PAE.10.1.32.png | Bin 0 -> 5844 bytes
lefdef/doc/lefdefref/images/PAE.10.1.33.png | Bin 0 -> 3371 bytes
lefdef/doc/lefdefref/images/PAE.10.1.34.png | Bin 0 -> 3500 bytes
lefdef/doc/lefdefref/images/PAE.10.1.35.png | Bin 0 -> 8912 bytes
lefdef/doc/lefdefref/images/PAE.10.1.36.png | Bin 0 -> 12504 bytes
lefdef/doc/lefdefref/images/PAE.10.1.37.png | Bin 0 -> 6293 bytes
lefdef/doc/lefdefref/images/PAE.10.1.38.png | Bin 0 -> 12257 bytes
lefdef/doc/lefdefref/images/PAE.10.1.39.png | Bin 0 -> 56696 bytes
lefdef/doc/lefdefref/images/PAE.10.1.40.png | Bin 0 -> 23303 bytes
lefdef/doc/lefdefref/images/PAE.10.1.41.png | Bin 0 -> 12299 bytes
lefdef/doc/lefdefref/images/Thumbs.db | Bin 0 -> 161792 bytes
lefdef/doc/lefdefref/images/aleph.gif | Bin 0 -> 155 bytes
lefdef/doc/lefdefref/images/alpha.gif | Bin 0 -> 147 bytes
lefdef/doc/lefdefref/images/ampersnd.gif | Bin 0 -> 209 bytes
lefdef/doc/lefdefref/images/angle.gif | Bin 0 -> 74 bytes
lefdef/doc/lefdefref/images/anglleft.gif | Bin 0 -> 118 bytes
lefdef/doc/lefdefref/images/anglrite.gif | Bin 0 -> 120 bytes
lefdef/doc/lefdefref/images/approx.gif | Bin 0 -> 125 bytes
lefdef/doc/lefdefref/images/arrwboth.gif | Bin 0 -> 154 bytes
lefdef/doc/lefdefref/images/arrwdbbo.gif | Bin 0 -> 145 bytes
lefdef/doc/lefdefref/images/arrwdbdn.gif | Bin 0 -> 138 bytes
lefdef/doc/lefdefref/images/arrwdblt.gif | Bin 0 -> 126 bytes
lefdef/doc/lefdefref/images/arrwdbrt.gif | Bin 0 -> 124 bytes
lefdef/doc/lefdefref/images/arrwdbup.gif | Bin 0 -> 137 bytes
lefdef/doc/lefdefref/images/arrwdown.gif | Bin 0 -> 131 bytes
lefdef/doc/lefdefref/images/arrwleft.gif | Bin 0 -> 131 bytes
lefdef/doc/lefdefref/images/arrwrite.gif | Bin 0 -> 131 bytes
lefdef/doc/lefdefref/images/arrwup.gif | Bin 0 -> 135 bytes
lefdef/doc/lefdefref/images/arrwvert.gif | Bin 0 -> 85 bytes
lefdef/doc/lefdefref/images/b_bullet.gif | Bin 0 -> 818 bytes
lefdef/doc/lefdefref/images/beta.gif | Bin 0 -> 151 bytes
lefdef/doc/lefdefref/images/blank.gif | Bin 0 -> 68 bytes
lefdef/doc/lefdefref/images/bracltbt.gif | Bin 0 -> 119 bytes
lefdef/doc/lefdefref/images/bracltmd.gif | Bin 0 -> 122 bytes
lefdef/doc/lefdefref/images/braclttp.gif | Bin 0 -> 116 bytes
lefdef/doc/lefdefref/images/bracrtbt.gif | Bin 0 -> 121 bytes
lefdef/doc/lefdefref/images/bracrtmd.gif | Bin 0 -> 125 bytes
lefdef/doc/lefdefref/images/bracrttp.gif | Bin 0 -> 122 bytes
lefdef/doc/lefdefref/images/brakltbt.gif | Bin 0 -> 90 bytes
lefdef/doc/lefdefref/images/braklttp.gif | Bin 0 -> 88 bytes
lefdef/doc/lefdefref/images/brakmidl.gif | Bin 0 -> 84 bytes
lefdef/doc/lefdefref/images/brakrtbt.gif | Bin 0 -> 122 bytes
lefdef/doc/lefdefref/images/brakrttp.gif | Bin 0 -> 92 bytes
lefdef/doc/lefdefref/images/bs_bullet_sub.gif | Bin 0 -> 834 bytes
.../lefdefref/images/bss_bullet_sub_sub.gif | Bin 0 -> 837 bytes
lefdef/doc/lefdefref/images/bullet.gif | Bin 0 -> 120 bytes
lefdef/doc/lefdefref/images/capalpha.gif | Bin 0 -> 138 bytes
lefdef/doc/lefdefref/images/capbeta.gif | Bin 0 -> 141 bytes
lefdef/doc/lefdefref/images/capchi.gif | Bin 0 -> 144 bytes
lefdef/doc/lefdefref/images/capdelta.gif | Bin 0 -> 141 bytes
lefdef/doc/lefdefref/images/capepsil.gif | Bin 0 -> 130 bytes
lefdef/doc/lefdefref/images/capeta.gif | Bin 0 -> 139 bytes
lefdef/doc/lefdefref/images/capgamma.gif | Bin 0 -> 118 bytes
lefdef/doc/lefdefref/images/capiota.gif | Bin 0 -> 111 bytes
lefdef/doc/lefdefref/images/capkappa.gif | Bin 0 -> 143 bytes
lefdef/doc/lefdefref/images/caplambd.gif | Bin 0 -> 139 bytes
lefdef/doc/lefdefref/images/capmu.gif | Bin 0 -> 159 bytes
lefdef/doc/lefdefref/images/capnu.gif | Bin 0 -> 156 bytes
lefdef/doc/lefdefref/images/capomega.gif | Bin 0 -> 152 bytes
lefdef/doc/lefdefref/images/capomicr.gif | Bin 0 -> 145 bytes
lefdef/doc/lefdefref/images/capphi.gif | Bin 0 -> 161 bytes
lefdef/doc/lefdefref/images/cappi.gif | Bin 0 -> 132 bytes
lefdef/doc/lefdefref/images/cappsi.gif | Bin 0 -> 138 bytes
lefdef/doc/lefdefref/images/caprho.gif | Bin 0 -> 133 bytes
lefdef/doc/lefdefref/images/capsigma.gif | Bin 0 -> 131 bytes
lefdef/doc/lefdefref/images/captau.gif | Bin 0 -> 124 bytes
lefdef/doc/lefdefref/images/captheta.gif | Bin 0 -> 153 bytes
lefdef/doc/lefdefref/images/capupsil.gif | Bin 0 -> 140 bytes
lefdef/doc/lefdefref/images/capxi.gif | Bin 0 -> 138 bytes
lefdef/doc/lefdefref/images/capzeta.gif | Bin 0 -> 138 bytes
lefdef/doc/lefdefref/images/carretrn.gif | Bin 0 -> 119 bytes
lefdef/doc/lefdefref/images/caution.gif | Bin 0 -> 286 bytes
lefdef/doc/lefdefref/images/chi.gif | Bin 0 -> 145 bytes
lefdef/doc/lefdefref/images/circmult.gif | Bin 0 -> 81 bytes
lefdef/doc/lefdefref/images/circplus.gif | Bin 0 -> 80 bytes
lefdef/doc/lefdefref/images/club.gif | Bin 0 -> 134 bytes
lefdef/doc/lefdefref/images/congrunt.gif | Bin 0 -> 115 bytes
lefdef/doc/lefdefref/images/delta.gif | Bin 0 -> 141 bytes
lefdef/doc/lefdefref/images/draft.gif | Bin 0 -> 279 bytes
lefdef/doc/lefdefref/images/element.gif | Bin 0 -> 121 bytes
lefdef/doc/lefdefref/images/emptyset.gif | Bin 0 -> 81 bytes
lefdef/doc/lefdefref/images/epsilon.gif | Bin 0 -> 123 bytes
lefdef/doc/lefdefref/images/epsilon1.gif | Bin 0 -> 74 bytes
lefdef/doc/lefdefref/images/equivlnt.gif | Bin 0 -> 115 bytes
lefdef/doc/lefdefref/images/eta.gif | Bin 0 -> 132 bytes
lefdef/doc/lefdefref/images/existntl.gif | Bin 0 -> 117 bytes
lefdef/doc/lefdefref/images/gamma.gif | Bin 0 -> 132 bytes
lefdef/doc/lefdefref/images/gradient.gif | Bin 0 -> 136 bytes
lefdef/doc/lefdefref/images/gtequal.gif | Bin 0 -> 126 bytes
lefdef/doc/lefdefref/images/header_doc.gif | Bin 0 -> 2954 bytes
lefdef/doc/lefdefref/images/heart.gif | Bin 0 -> 133 bytes
lefdef/doc/lefdefref/images/ifraktur.gif | Bin 0 -> 146 bytes
lefdef/doc/lefdefref/images/important.gif | Bin 0 -> 267 bytes
lefdef/doc/lefdefref/images/infinity.gif | Bin 0 -> 139 bytes
lefdef/doc/lefdefref/images/integbot.gif | Bin 0 -> 134 bytes
lefdef/doc/lefdefref/images/integral.gif | Bin 0 -> 123 bytes
lefdef/doc/lefdefref/images/integtop.gif | Bin 0 -> 131 bytes
lefdef/doc/lefdefref/images/intrsect.gif | Bin 0 -> 126 bytes
lefdef/doc/lefdefref/images/iota.gif | Bin 0 -> 112 bytes
lefdef/doc/lefdefref/images/kappa.gif | Bin 0 -> 124 bytes
lefdef/doc/lefdefref/images/lambda.gif | Bin 0 -> 137 bytes
lefdef/doc/lefdefref/images/logic_or.gif | Bin 0 -> 67 bytes
lefdef/doc/lefdefref/images/logicand.gif | Bin 0 -> 93 bytes
lefdef/doc/lefdefref/images/lozenge.gif | Bin 0 -> 129 bytes
lefdef/doc/lefdefref/images/lt_equal.gif | Bin 0 -> 124 bytes
lefdef/doc/lefdefref/images/nav2_index.gif | Bin 0 -> 1050 bytes
lefdef/doc/lefdefref/images/nav2_index_b.gif | Bin 0 -> 854 bytes
lefdef/doc/lefdefref/images/nav2_next_b.gif | Bin 0 -> 861 bytes
lefdef/doc/lefdefref/images/nav2_previous.gif | Bin 0 -> 1202 bytes
.../doc/lefdefref/images/nav2_previous_b.gif | Bin 0 -> 871 bytes
lefdef/doc/lefdefref/images/nav2_print.gif | Bin 0 -> 1341 bytes
lefdef/doc/lefdefref/images/nav2_toc.gif | Bin 0 -> 1154 bytes
lefdef/doc/lefdefref/images/nav2_toc_b.gif | Bin 0 -> 866 bytes
lefdef/doc/lefdefref/images/nav_next.gif | Bin 0 -> 1092 bytes
lefdef/doc/lefdefref/images/nav_next_b.gif | Bin 0 -> 863 bytes
lefdef/doc/lefdefref/images/notelemn.gif | Bin 0 -> 141 bytes
lefdef/doc/lefdefref/images/notequal.gif | Bin 0 -> 121 bytes
lefdef/doc/lefdefref/images/notsbset.gif | Bin 0 -> 129 bytes
lefdef/doc/lefdefref/images/nu.gif | Bin 0 -> 124 bytes
lefdef/doc/lefdefref/images/omega.gif | Bin 0 -> 140 bytes
lefdef/doc/lefdefref/images/omega1.gif | Bin 0 -> 144 bytes
lefdef/doc/lefdefref/images/omicron.gif | Bin 0 -> 132 bytes
lefdef/doc/lefdefref/images/pareltbt.gif | Bin 0 -> 126 bytes
lefdef/doc/lefdefref/images/parelttp.gif | Bin 0 -> 126 bytes
lefdef/doc/lefdefref/images/parertbt.gif | Bin 0 -> 127 bytes
lefdef/doc/lefdefref/images/parerttp.gif | Bin 0 -> 124 bytes
lefdef/doc/lefdefref/images/partldif.gif | Bin 0 -> 137 bytes
lefdef/doc/lefdefref/images/perpend.gif | Bin 0 -> 111 bytes
lefdef/doc/lefdefref/images/phi.gif | Bin 0 -> 142 bytes
lefdef/doc/lefdefref/images/phi1.gif | Bin 0 -> 143 bytes
lefdef/doc/lefdefref/images/pi.gif | Bin 0 -> 134 bytes
lefdef/doc/lefdefref/images/product.gif | Bin 0 -> 80 bytes
lefdef/doc/lefdefref/images/proportn.gif | Bin 0 -> 132 bytes
lefdef/doc/lefdefref/images/prsprset.gif | Bin 0 -> 67 bytes
lefdef/doc/lefdefref/images/prsubset.gif | Bin 0 -> 117 bytes
lefdef/doc/lefdefref/images/psi.gif | Bin 0 -> 146 bytes
lefdef/doc/lefdefref/images/radical.gif | Bin 0 -> 78 bytes
lefdef/doc/lefdefref/images/refsbset.gif | Bin 0 -> 118 bytes
lefdef/doc/lefdefref/images/refspset.gif | Bin 0 -> 124 bytes
lefdef/doc/lefdefref/images/rfraktur.gif | Bin 0 -> 153 bytes
lefdef/doc/lefdefref/images/rho.gif | Bin 0 -> 134 bytes
lefdef/doc/lefdefref/images/second.gif | Bin 0 -> 115 bytes
lefdef/doc/lefdefref/images/sigma.gif | Bin 0 -> 132 bytes
lefdef/doc/lefdefref/images/sigma1.gif | Bin 0 -> 135 bytes
lefdef/doc/lefdefref/images/spade.gif | Bin 0 -> 122 bytes
lefdef/doc/lefdefref/images/suchthat.gif | Bin 0 -> 119 bytes
lefdef/doc/lefdefref/images/sumation.gif | Bin 0 -> 77 bytes
lefdef/doc/lefdefref/images/tau.gif | Bin 0 -> 119 bytes
lefdef/doc/lefdefref/images/therefor.gif | Bin 0 -> 111 bytes
lefdef/doc/lefdefref/images/theta.gif | Bin 0 -> 144 bytes
lefdef/doc/lefdefref/images/theta1.gif | Bin 0 -> 148 bytes
lefdef/doc/lefdefref/images/tip.gif | Bin 0 -> 241 bytes
lefdef/doc/lefdefref/images/tm.gif | Bin 0 -> 145 bytes
lefdef/doc/lefdefref/images/union.gif | Bin 0 -> 129 bytes
lefdef/doc/lefdefref/images/univrsal.gif | Bin 0 -> 135 bytes
lefdef/doc/lefdefref/images/upsilon.gif | Bin 0 -> 133 bytes
lefdef/doc/lefdefref/images/upsilon1.gif | Bin 0 -> 131 bytes
lefdef/doc/lefdefref/images/video.gif | Bin 0 -> 906 bytes
lefdef/doc/lefdefref/images/weierstr.gif | Bin 0 -> 153 bytes
lefdef/doc/lefdefref/images/xi.gif | Bin 0 -> 144 bytes
lefdef/doc/lefdefref/images/zeta.gif | Bin 0 -> 142 bytes
lefdef/doc/lefdefref/lefdefref.pdf | Bin 0 -> 2602995 bytes
lefdef/doc/lefdefref/lefdefrefIX.html | 561 +
lefdef/doc/lefdefref/lefdefrefTOC.html | 287 +
lefdef/doc/lefdefref/preface.html | 249 +
lefdef/doc/lefdefref/titlecopy.html | 220 +
lefdef/doc/support/header_doc.gif | Bin 0 -> 2954 bytes
lefdef/doc/support/ix_ref.gif | Bin 0 -> 95 bytes
lefdef/doc/support/nav2_black.gif | Bin 0 -> 74 bytes
lefdef/doc/support/nav2_exit.gif | Bin 0 -> 996 bytes
lefdef/doc/support/nav2_feedback.gif | Bin 0 -> 1174 bytes
lefdef/doc/support/nav2_help.gif | Bin 0 -> 1023 bytes
lefdef/doc/support/nav2_index.gif | Bin 0 -> 1050 bytes
lefdef/doc/support/nav2_index_b.gif | Bin 0 -> 854 bytes
lefdef/doc/support/nav2_library.gif | Bin 0 -> 1085 bytes
lefdef/doc/support/nav2_next_b.gif | Bin 0 -> 861 bytes
lefdef/doc/support/nav2_previous.gif | Bin 0 -> 1202 bytes
lefdef/doc/support/nav2_previous_b.gif | Bin 0 -> 871 bytes
lefdef/doc/support/nav2_print.gif | Bin 0 -> 1341 bytes
lefdef/doc/support/nav2_toc.gif | Bin 0 -> 1154 bytes
lefdef/doc/support/nav2_toc_b.gif | Bin 0 -> 866 bytes
lefdef/doc/support/nav_next.gif | Bin 0 -> 1092 bytes
lefdef/doc/support/nav_next_b.gif | Bin 0 -> 863 bytes
lefdef/src/CMakeLists.txt | 4 +
lefdef/src/def/CMakeLists.txt | 7 +
lefdef/src/def/LICENSE.TXT | 13 +
lefdef/src/def/Makefile | 57 +
lefdef/src/def/TEST/Makefile | 18 +
lefdef/src/def/TEST/complete.5.8.def | 1007 ++
lefdef/src/def/TEST/complete.5.8.def.au | 808 +
lefdef/src/def/bin/lefdefdiff | 526 +
lefdef/src/def/cdef/Makefile | 70 +
lefdef/src/def/cdef/defMsgTable.h | 154 +
lefdef/src/def/cdef/defiAlias.h | 40 +
lefdef/src/def/cdef/defiAssertion.h | 82 +
lefdef/src/def/cdef/defiBlockage.h | 71 +
lefdef/src/def/cdef/defiComponent.h | 116 +
lefdef/src/def/cdef/defiDebug.h | 53 +
lefdef/src/def/cdef/defiDefs.h | 28 +
lefdef/src/def/cdef/defiFPC.h | 63 +
lefdef/src/def/cdef/defiFill.h | 67 +
lefdef/src/def/cdef/defiGroup.h | 65 +
lefdef/src/def/cdef/defiIOTiming.h | 69 +
lefdef/src/def/cdef/defiKRDefs.h | 28 +
lefdef/src/def/cdef/defiMisc.h | 46 +
lefdef/src/def/cdef/defiNet.h | 247 +
lefdef/src/def/cdef/defiNonDefault.h | 79 +
lefdef/src/def/cdef/defiPartition.h | 84 +
lefdef/src/def/cdef/defiPath.h | 98 +
lefdef/src/def/cdef/defiPinCap.h | 194 +
lefdef/src/def/cdef/defiPinProp.h | 54 +
lefdef/src/def/cdef/defiProp.h | 59 +
lefdef/src/def/cdef/defiPropType.h | 45 +
lefdef/src/def/cdef/defiRegion.h | 63 +
lefdef/src/def/cdef/defiRowTrack.h | 81 +
lefdef/src/def/cdef/defiScanchain.h | 93 +
lefdef/src/def/cdef/defiSite.h | 74 +
lefdef/src/def/cdef/defiSlot.h | 54 +
lefdef/src/def/cdef/defiTimingDisable.h | 60 +
lefdef/src/def/cdef/defiTypedefs.h | 115 +
lefdef/src/def/cdef/defiUser.h | 89 +
lefdef/src/def/cdef/defiVia.h | 69 +
lefdef/src/def/cdef/defrReader.h | 668 +
lefdef/src/def/cdef/defwWriter.h | 1455 ++
lefdef/src/def/cdef/defwWriterCalls.h | 207 +
lefdef/src/def/cdef/xdefiAssertion.cpp | 127 +
lefdef/src/def/cdef/xdefiBlockage.cpp | 149 +
lefdef/src/def/cdef/xdefiComponent.cpp | 247 +
lefdef/src/def/cdef/xdefiDebug.cpp | 59 +
lefdef/src/def/cdef/xdefiFPC.cpp | 91 +
lefdef/src/def/cdef/xdefiFill.cpp | 123 +
lefdef/src/def/cdef/xdefiGroup.cpp | 115 +
lefdef/src/def/cdef/xdefiIOTiming.cpp | 139 +
lefdef/src/def/cdef/xdefiMisc.cpp | 57 +
lefdef/src/def/cdef/xdefiNet.cpp | 539 +
lefdef/src/def/cdef/xdefiNonDefault.cpp | 159 +
lefdef/src/def/cdef/xdefiPartition.cpp | 183 +
lefdef/src/def/cdef/xdefiPath.cpp | 135 +
lefdef/src/def/cdef/xdefiPinCap.cpp | 551 +
lefdef/src/def/cdef/xdefiPinProp.cpp | 83 +
lefdef/src/def/cdef/xdefiProp.cpp | 87 +
lefdef/src/def/cdef/xdefiPropType.cpp | 43 +
lefdef/src/def/cdef/xdefiRegion.cpp | 103 +
lefdef/src/def/cdef/xdefiRowTrack.cpp | 175 +
lefdef/src/def/cdef/xdefiScanchain.cpp | 135 +
lefdef/src/def/cdef/xdefiSite.cpp | 105 +
lefdef/src/def/cdef/xdefiSlot.cpp | 81 +
lefdef/src/def/cdef/xdefiTimingDisable.cpp | 91 +
lefdef/src/def/cdef/xdefiVia.cpp | 133 +
lefdef/src/def/cdef/xdefrReader.cpp | 1119 ++
lefdef/src/def/cdef/xdefwWriter.cpp | 1115 ++
lefdef/src/def/cdef/xdefwWriterCalls.cpp | 203 +
lefdef/src/def/cdefzlib/Makefile | 13 +
lefdef/src/def/cdefzlib/cdefzlib.c | 69 +
lefdef/src/def/cdefzlib/defzlib.h | 51 +
lefdef/src/def/def/CMakeLists.txt | 186 +
lefdef/src/def/def/Makefile | 90 +
lefdef/src/def/def/def.msg | 163 +
lefdef/src/def/def/def.tab.h | 337 +
lefdef/src/def/def/def.y | 5189 ++++++
lefdef/src/def/def/def_keywords.cpp | 1363 ++
lefdef/src/def/def/def_objs.defs | 44 +
lefdef/src/def/def/defiAlias.cpp | 114 +
lefdef/src/def/def/defiAlias.hpp | 63 +
lefdef/src/def/def/defiAssertion.cpp | 425 +
lefdef/src/def/def/defiAssertion.hpp | 138 +
lefdef/src/def/def/defiBlockage.cpp | 459 +
lefdef/src/def/def/defiBlockage.hpp | 132 +
lefdef/src/def/def/defiComponent.cpp | 988 ++
lefdef/src/def/def/defiComponent.hpp | 249 +
lefdef/src/def/def/defiDebug.cpp | 96 +
lefdef/src/def/def/defiDebug.hpp | 56 +
lefdef/src/def/def/defiDefs.hpp | 182 +
lefdef/src/def/def/defiFPC.cpp | 269 +
lefdef/src/def/def/defiFPC.hpp | 107 +
lefdef/src/def/def/defiFill.cpp | 428 +
lefdef/src/def/def/defiFill.hpp | 120 +
lefdef/src/def/def/defiGroup.cpp | 447 +
lefdef/src/def/def/defiGroup.hpp | 122 +
lefdef/src/def/def/defiIOTiming.cpp | 424 +
lefdef/src/def/def/defiIOTiming.hpp | 128 +
lefdef/src/def/def/defiKRDefs.hpp | 37 +
lefdef/src/def/def/defiMisc.cpp | 201 +
lefdef/src/def/def/defiMisc.hpp | 96 +
lefdef/src/def/def/defiNet.cpp | 3022 ++++
lefdef/src/def/def/defiNet.hpp | 569 +
lefdef/src/def/def/defiNonDefault.cpp | 707 +
lefdef/src/def/def/defiNonDefault.hpp | 141 +
lefdef/src/def/def/defiPartition.cpp | 551 +
lefdef/src/def/def/defiPartition.hpp | 163 +
lefdef/src/def/def/defiPath.cpp | 563 +
lefdef/src/def/def/defiPath.hpp | 170 +
lefdef/src/def/def/defiPinCap.cpp | 2152 +++
lefdef/src/def/def/defiPinCap.hpp | 430 +
lefdef/src/def/def/defiPinProp.cpp | 314 +
lefdef/src/def/def/defiPinProp.hpp | 91 +
lefdef/src/def/def/defiProp.cpp | 223 +
lefdef/src/def/def/defiProp.hpp | 99 +
lefdef/src/def/def/defiPropType.cpp | 131 +
lefdef/src/def/def/defiPropType.hpp | 66 +
lefdef/src/def/def/defiRegion.cpp | 409 +
lefdef/src/def/def/defiRegion.hpp | 107 +
lefdef/src/def/def/defiRowTrack.cpp | 626 +
lefdef/src/def/def/defiRowTrack.hpp | 184 +
lefdef/src/def/def/defiScanchain.cpp | 590 +
lefdef/src/def/def/defiScanchain.hpp | 186 +
lefdef/src/def/def/defiSite.cpp | 281 +
lefdef/src/def/def/defiSite.hpp | 123 +
lefdef/src/def/def/defiSlot.cpp | 276 +
lefdef/src/def/def/defiSlot.hpp | 92 +
lefdef/src/def/def/defiTimingDisable.cpp | 320 +
lefdef/src/def/def/defiTimingDisable.hpp | 101 +
lefdef/src/def/def/defiUser.hpp | 87 +
lefdef/src/def/def/defiUtil.cpp | 121 +
lefdef/src/def/def/defiUtil.hpp | 52 +
lefdef/src/def/def/defiVia.cpp | 608 +
lefdef/src/def/def/defiVia.hpp | 149 +
lefdef/src/def/def/defrCallBacks.hpp | 159 +
lefdef/src/def/def/defrCallbacks.cpp | 351 +
lefdef/src/def/def/defrData.cpp | 506 +
lefdef/src/def/def/defrData.hpp | 307 +
lefdef/src/def/def/defrReader.cpp | 2538 +++
lefdef/src/def/def/defrReader.hpp | 723 +
lefdef/src/def/def/defrSettings.cpp | 343 +
lefdef/src/def/def/defrSettings.hpp | 142 +
lefdef/src/def/def/defwWriter.cpp | 6918 ++++++++
lefdef/src/def/def/defwWriter.hpp | 1752 ++
lefdef/src/def/def/defwWriterCalls.cpp | 613 +
lefdef/src/def/def/defwWriterCalls.hpp | 220 +
lefdef/src/def/def/lex.h | 46 +
lefdef/src/def/defdiff/CMakeLists.txt | 13 +
lefdef/src/def/defdiff/Makefile | 16 +
lefdef/src/def/defdiff/diffDefRW.cpp | 2253 +++
lefdef/src/def/defdiff/diffDefRW.hpp | 39 +
lefdef/src/def/defdiff/differDef.cpp | 99 +
lefdef/src/def/defrw/CMakeLists.txt | 12 +
lefdef/src/def/defrw/Makefile | 14 +
lefdef/src/def/defrw/defrw.cpp | 3395 ++++
lefdef/src/def/defwrite/CMakeLists.txt | 12 +
lefdef/src/def/defwrite/Makefile | 24 +
lefdef/src/def/defwrite/defwrite.cpp | 2294 +++
lefdef/src/def/defwrite/defwriteCbs.cpp | 1424 ++
lefdef/src/def/defzlib/CMakeLists.txt | 17 +
lefdef/src/def/defzlib/Makefile | 11 +
lefdef/src/def/defzlib/defzlib.cpp | 98 +
lefdef/src/def/defzlib/defzlib.hpp | 91 +
lefdef/src/def/doc/defapi.pdf | 9654 ++++++++++
lefdef/src/def/doc/defapiWN.pdf | Bin 0 -> 135946 bytes
lefdef/src/def/template.mk | 94 +
lefdef/src/lef/CMakeLists.txt | 7 +
lefdef/src/lef/LICENSE.TXT | 13 +
lefdef/src/lef/Makefile | 57 +
lefdef/src/lef/TEST/Makefile | 18 +
lefdef/src/lef/TEST/complete.5.8.lef | 1962 ++
lefdef/src/lef/TEST/complete.5.8.lef.au | 1574 ++
lefdef/src/lef/bin/lefdefdiff | 526 +
lefdef/src/lef/clef/Makefile | 49 +
lefdef/src/lef/clef/lefMsgTable.h | 408 +
lefdef/src/lef/clef/lefiArray.h | 73 +
lefdef/src/lef/clef/lefiCrossTalk.h | 53 +
lefdef/src/lef/clef/lefiDebug.h | 51 +
lefdef/src/lef/clef/lefiEncryptExt.c | 17 +
lefdef/src/lef/clef/lefiEncryptInt.h | 45 +
lefdef/src/lef/clef/lefiLayer.h | 437 +
lefdef/src/lef/clef/lefiMacro.h | 282 +
lefdef/src/lef/clef/lefiMisc.h | 174 +
lefdef/src/lef/clef/lefiNonDefault.h | 94 +
lefdef/src/lef/clef/lefiProp.h | 60 +
lefdef/src/lef/clef/lefiPropType.h | 45 +
lefdef/src/lef/clef/lefiTBInt.c | 38 +
lefdef/src/lef/clef/lefiTypedefs.h | 183 +
lefdef/src/lef/clef/lefiUnits.h | 62 +
lefdef/src/lef/clef/lefiUser.h | 64 +
lefdef/src/lef/clef/lefiUtil.h | 53 +
lefdef/src/lef/clef/lefiVia.h | 124 +
lefdef/src/lef/clef/lefiViaRule.h | 101 +
lefdef/src/lef/clef/lefrReader.h | 509 +
lefdef/src/lef/clef/lefwWriter.h | 2128 +++
lefdef/src/lef/clef/lefwWriterCalls.h | 200 +
lefdef/src/lef/clef/xlefiArray.cpp | 143 +
lefdef/src/lef/clef/xlefiCrossTalk.cpp | 67 +
lefdef/src/lef/clef/xlefiDebug.cpp | 55 +
lefdef/src/lef/clef/xlefiEncryptInt.cpp | 43 +
lefdef/src/lef/clef/xlefiLayer.cpp | 1215 ++
lefdef/src/lef/clef/xlefiMacro.cpp | 829 +
lefdef/src/lef/clef/xlefiMisc.cpp | 343 +
lefdef/src/lef/clef/xlefiNonDefault.cpp | 183 +
lefdef/src/lef/clef/xlefiProp.cpp | 87 +
lefdef/src/lef/clef/xlefiPropType.cpp | 43 +
lefdef/src/lef/clef/xlefiUnits.cpp | 111 +
lefdef/src/lef/clef/xlefiUtil.cpp | 59 +
lefdef/src/lef/clef/xlefiVia.cpp | 285 +
lefdef/src/lef/clef/xlefiViaRule.cpp | 199 +
lefdef/src/lef/clef/xlefrReader.cpp | 751 +
lefdef/src/lef/clef/xlefwWriter.cpp | 1303 ++
lefdef/src/lef/clef/xlefwWriterCalls.cpp | 191 +
lefdef/src/lef/clefzlib/Makefile | 13 +
lefdef/src/lef/clefzlib/clefzlib.c | 69 +
lefdef/src/lef/clefzlib/lefzlib.h | 51 +
lefdef/src/lef/doc/lefapi.pdf | 8601 +++++++++
lefdef/src/lef/doc/lefapiWN.pdf | Bin 0 -> 113772 bytes
lefdef/src/lef/lef/CMakeLists.txt | 116 +
lefdef/src/lef/lef/Makefile | 71 +
lefdef/src/lef/lef/crypt.cpp | 116 +
lefdef/src/lef/lef/crypt.hpp | 53 +
lefdef/src/lef/lef/lef.msg | 404 +
lefdef/src/lef/lef/lef.tab.h | 514 +
lefdef/src/lef/lef/lef.y | 7158 ++++++++
lefdef/src/lef/lef/lef_keywords.cpp | 2109 +++
lefdef/src/lef/lef/lefiArray.cpp | 675 +
lefdef/src/lef/lef/lefiArray.hpp | 147 +
lefdef/src/lef/lef/lefiCrossTalk.cpp | 994 ++
lefdef/src/lef/lef/lefiCrossTalk.hpp | 273 +
lefdef/src/lef/lef/lefiDebug.cpp | 400 +
lefdef/src/lef/lef/lefiDebug.hpp | 52 +
lefdef/src/lef/lef/lefiDefs.hpp | 184 +
lefdef/src/lef/lef/lefiEncryptInt.cpp | 48 +
lefdef/src/lef/lef/lefiEncryptInt.hpp | 47 +
lefdef/src/lef/lef/lefiKRDefs.hpp | 37 +
lefdef/src/lef/lef/lefiLayer.cpp | 6812 +++++++
lefdef/src/lef/lef/lefiLayer.hpp | 1064 ++
lefdef/src/lef/lef/lefiMacro.cpp | 4789 +++++
lefdef/src/lef/lef/lefiMacro.hpp | 939 +
lefdef/src/lef/lef/lefiMisc.cpp | 1867 ++
lefdef/src/lef/lef/lefiMisc.hpp | 493 +
lefdef/src/lef/lef/lefiNonDefault.cpp | 1120 ++
lefdef/src/lef/lef/lefiNonDefault.hpp | 178 +
lefdef/src/lef/lef/lefiProp.cpp | 259 +
lefdef/src/lef/lef/lefiProp.hpp | 96 +
lefdef/src/lef/lef/lefiPropType.cpp | 142 +
lefdef/src/lef/lef/lefiPropType.hpp | 65 +
lefdef/src/lef/lef/lefiTBExt.cpp | 158 +
lefdef/src/lef/lef/lefiUnits.cpp | 283 +
lefdef/src/lef/lef/lefiUnits.hpp | 102 +
lefdef/src/lef/lef/lefiUser.hpp | 63 +
lefdef/src/lef/lef/lefiUtil.hpp | 61 +
lefdef/src/lef/lef/lefiVia.cpp | 1460 ++
lefdef/src/lef/lef/lefiVia.hpp | 259 +
lefdef/src/lef/lef/lefiViaRule.cpp | 846 +
lefdef/src/lef/lef/lefiViaRule.hpp | 197 +
lefdef/src/lef/lef/lefrCallBacks.hpp | 112 +
lefdef/src/lef/lef/lefrCallbacks.cpp | 109 +
lefdef/src/lef/lef/lefrData.cpp | 361 +
lefdef/src/lef/lef/lefrData.hpp | 307 +
lefdef/src/lef/lef/lefrReader.cpp | 1910 ++
lefdef/src/lef/lef/lefrReader.hpp | 586 +
lefdef/src/lef/lef/lefrSettings.cpp | 652 +
lefdef/src/lef/lef/lefrSettings.hpp | 154 +
lefdef/src/lef/lef/lefwWriter.cpp | 9839 ++++++++++
lefdef/src/lef/lef/lefwWriter.hpp | 2374 +++
lefdef/src/lef/lef/lefwWriterCalls.cpp | 664 +
lefdef/src/lef/lef/lefwWriterCalls.hpp | 210 +
lefdef/src/lef/lef/lex.h | 69 +
lefdef/src/lef/lefdiff/CMakeLists.txt | 13 +
lefdef/src/lef/lefdiff/Makefile | 16 +
lefdef/src/lef/lefdiff/diffLefRW.cpp | 2101 +++
lefdef/src/lef/lefdiff/diffLefRW.hpp | 38 +
lefdef/src/lef/lefdiff/differLef.cpp | 98 +
lefdef/src/lef/lefrw/CMakeLists.txt | 12 +
lefdef/src/lef/lefrw/Makefile | 10 +
lefdef/src/lef/lefrw/lefrw.cpp | 2656 +++
lefdef/src/lef/lefwrite/CMakeLists.txt | 12 +
lefdef/src/lef/lefwrite/Makefile | 21 +
lefdef/src/lef/lefwrite/lefwrite.cpp | 2116 +++
lefdef/src/lef/lefwrite/lefwriteCbs.cpp | 997 ++
lefdef/src/lef/lefzlib/CMakeLists.txt | 17 +
lefdef/src/lef/lefzlib/Makefile | 13 +
lefdef/src/lef/lefzlib/lefzlib.cpp | 73 +
lefdef/src/lef/lefzlib/lefzlib.hpp | 55 +
lefdef/src/lef/template.mk | 94 +
lefdef/src/lefdefReadme.txt | 80 +
1464 files changed, 258553 insertions(+), 107 deletions(-)
create mode 100644 lefdef/CMakeLists.txt
create mode 100644 lefdef/doc/CMakeLists.txt
create mode 100644 lefdef/doc/defapi/appA_DEFexamples.html
create mode 100644 lefdef/doc/defapi/ch1Intro.html
create mode 100644 lefdef/doc/defapi/ch2DEFsetup.html
create mode 100644 lefdef/doc/defapi/ch3DEFcallback.html
create mode 100644 lefdef/doc/defapi/ch4DEFclasses.html
create mode 100644 lefdef/doc/defapi/ch5DEFwritercallback.html
create mode 100644 lefdef/doc/defapi/ch6DEFwriter.html
create mode 100644 lefdef/doc/defapi/ch7DEFcompressed.html
create mode 100644 lefdef/doc/defapi/ch8lefdiff.html
create mode 100644 lefdef/doc/defapi/defapi.pdf
create mode 100644 lefdef/doc/defapi/defapiTOC.html
create mode 100644 lefdef/doc/defapi/images/Diamond.gif
create mode 100644 lefdef/doc/defapi/images/Diamond1.gif
create mode 100644 lefdef/doc/defapi/images/Diamond12.gif
create mode 100644 lefdef/doc/defapi/images/Thumbs.db
create mode 100644 lefdef/doc/defapi/images/aleph.gif
create mode 100644 lefdef/doc/defapi/images/alpha.gif
create mode 100644 lefdef/doc/defapi/images/ampersnd.gif
create mode 100644 lefdef/doc/defapi/images/angle.gif
create mode 100644 lefdef/doc/defapi/images/anglleft.gif
create mode 100644 lefdef/doc/defapi/images/anglrite.gif
create mode 100644 lefdef/doc/defapi/images/approx.gif
create mode 100644 lefdef/doc/defapi/images/arrwboth.gif
create mode 100644 lefdef/doc/defapi/images/arrwdbbo.gif
create mode 100644 lefdef/doc/defapi/images/arrwdbdn.gif
create mode 100644 lefdef/doc/defapi/images/arrwdblt.gif
create mode 100644 lefdef/doc/defapi/images/arrwdbrt.gif
create mode 100644 lefdef/doc/defapi/images/arrwdbup.gif
create mode 100644 lefdef/doc/defapi/images/arrwdown.gif
create mode 100644 lefdef/doc/defapi/images/arrwleft.gif
create mode 100644 lefdef/doc/defapi/images/arrwrite.gif
create mode 100644 lefdef/doc/defapi/images/arrwup.gif
create mode 100644 lefdef/doc/defapi/images/arrwvert.gif
create mode 100644 lefdef/doc/defapi/images/b_bullet.gif
create mode 100644 lefdef/doc/defapi/images/beta.gif
create mode 100644 lefdef/doc/defapi/images/blank.gif
create mode 100644 lefdef/doc/defapi/images/bracltbt.gif
create mode 100644 lefdef/doc/defapi/images/bracltmd.gif
create mode 100644 lefdef/doc/defapi/images/braclttp.gif
create mode 100644 lefdef/doc/defapi/images/bracrtbt.gif
create mode 100644 lefdef/doc/defapi/images/bracrtmd.gif
create mode 100644 lefdef/doc/defapi/images/bracrttp.gif
create mode 100644 lefdef/doc/defapi/images/brakltbt.gif
create mode 100644 lefdef/doc/defapi/images/braklttp.gif
create mode 100644 lefdef/doc/defapi/images/brakmidl.gif
create mode 100644 lefdef/doc/defapi/images/brakrtbt.gif
create mode 100644 lefdef/doc/defapi/images/brakrttp.gif
create mode 100644 lefdef/doc/defapi/images/bs_bullet_sub.gif
create mode 100644 lefdef/doc/defapi/images/bss_bullet_sub_sub.gif
create mode 100644 lefdef/doc/defapi/images/bullet.gif
create mode 100644 lefdef/doc/defapi/images/capalpha.gif
create mode 100644 lefdef/doc/defapi/images/capbeta.gif
create mode 100644 lefdef/doc/defapi/images/capchi.gif
create mode 100644 lefdef/doc/defapi/images/capdelta.gif
create mode 100644 lefdef/doc/defapi/images/capepsil.gif
create mode 100644 lefdef/doc/defapi/images/capeta.gif
create mode 100644 lefdef/doc/defapi/images/capgamma.gif
create mode 100644 lefdef/doc/defapi/images/capiota.gif
create mode 100644 lefdef/doc/defapi/images/capkappa.gif
create mode 100644 lefdef/doc/defapi/images/caplambd.gif
create mode 100644 lefdef/doc/defapi/images/capmu.gif
create mode 100644 lefdef/doc/defapi/images/capnu.gif
create mode 100644 lefdef/doc/defapi/images/capomega.gif
create mode 100644 lefdef/doc/defapi/images/capomicr.gif
create mode 100644 lefdef/doc/defapi/images/capphi.gif
create mode 100644 lefdef/doc/defapi/images/cappi.gif
create mode 100644 lefdef/doc/defapi/images/cappsi.gif
create mode 100644 lefdef/doc/defapi/images/caprho.gif
create mode 100644 lefdef/doc/defapi/images/capsigma.gif
create mode 100644 lefdef/doc/defapi/images/captau.gif
create mode 100644 lefdef/doc/defapi/images/captheta.gif
create mode 100644 lefdef/doc/defapi/images/capupsil.gif
create mode 100644 lefdef/doc/defapi/images/capxi.gif
create mode 100644 lefdef/doc/defapi/images/capzeta.gif
create mode 100644 lefdef/doc/defapi/images/carretrn.gif
create mode 100644 lefdef/doc/defapi/images/caution.gif
create mode 100644 lefdef/doc/defapi/images/ch1Intro.04.1.1.png
create mode 100644 lefdef/doc/defapi/images/chi.gif
create mode 100644 lefdef/doc/defapi/images/circmult.gif
create mode 100644 lefdef/doc/defapi/images/circplus.gif
create mode 100644 lefdef/doc/defapi/images/club.gif
create mode 100644 lefdef/doc/defapi/images/congrunt.gif
create mode 100644 lefdef/doc/defapi/images/delta.gif
create mode 100644 lefdef/doc/defapi/images/draft.gif
create mode 100644 lefdef/doc/defapi/images/element.gif
create mode 100644 lefdef/doc/defapi/images/emptyset.gif
create mode 100644 lefdef/doc/defapi/images/epsilon.gif
create mode 100644 lefdef/doc/defapi/images/epsilon1.gif
create mode 100644 lefdef/doc/defapi/images/equivlnt.gif
create mode 100644 lefdef/doc/defapi/images/eta.gif
create mode 100644 lefdef/doc/defapi/images/existntl.gif
create mode 100644 lefdef/doc/defapi/images/gamma.gif
create mode 100644 lefdef/doc/defapi/images/gradient.gif
create mode 100644 lefdef/doc/defapi/images/gtequal.gif
create mode 100644 lefdef/doc/defapi/images/header_doc.gif
create mode 100644 lefdef/doc/defapi/images/heart.gif
create mode 100644 lefdef/doc/defapi/images/ifraktur.gif
create mode 100644 lefdef/doc/defapi/images/important.gif
create mode 100644 lefdef/doc/defapi/images/infinity.gif
create mode 100644 lefdef/doc/defapi/images/integbot.gif
create mode 100644 lefdef/doc/defapi/images/integral.gif
create mode 100644 lefdef/doc/defapi/images/integtop.gif
create mode 100644 lefdef/doc/defapi/images/intrsect.gif
create mode 100644 lefdef/doc/defapi/images/iota.gif
create mode 100644 lefdef/doc/defapi/images/kappa.gif
create mode 100644 lefdef/doc/defapi/images/lambda.gif
create mode 100644 lefdef/doc/defapi/images/logic_or.gif
create mode 100644 lefdef/doc/defapi/images/logicand.gif
create mode 100644 lefdef/doc/defapi/images/lozenge.gif
create mode 100644 lefdef/doc/defapi/images/lt_equal.gif
create mode 100644 lefdef/doc/defapi/images/nav2_index.gif
create mode 100644 lefdef/doc/defapi/images/nav2_index_b.gif
create mode 100644 lefdef/doc/defapi/images/nav2_next_b.gif
create mode 100644 lefdef/doc/defapi/images/nav2_previous.gif
create mode 100644 lefdef/doc/defapi/images/nav2_previous_b.gif
create mode 100644 lefdef/doc/defapi/images/nav2_print.gif
create mode 100644 lefdef/doc/defapi/images/nav2_toc.gif
create mode 100644 lefdef/doc/defapi/images/nav2_toc_b.gif
create mode 100644 lefdef/doc/defapi/images/nav_next.gif
create mode 100644 lefdef/doc/defapi/images/nav_next_b.gif
create mode 100644 lefdef/doc/defapi/images/notelemn.gif
create mode 100644 lefdef/doc/defapi/images/notequal.gif
create mode 100644 lefdef/doc/defapi/images/notsbset.gif
create mode 100644 lefdef/doc/defapi/images/nu.gif
create mode 100644 lefdef/doc/defapi/images/omega.gif
create mode 100644 lefdef/doc/defapi/images/omega1.gif
create mode 100644 lefdef/doc/defapi/images/omicron.gif
create mode 100644 lefdef/doc/defapi/images/pareltbt.gif
create mode 100644 lefdef/doc/defapi/images/parelttp.gif
create mode 100644 lefdef/doc/defapi/images/parertbt.gif
create mode 100644 lefdef/doc/defapi/images/parerttp.gif
create mode 100644 lefdef/doc/defapi/images/partldif.gif
create mode 100644 lefdef/doc/defapi/images/perpend.gif
create mode 100644 lefdef/doc/defapi/images/phi.gif
create mode 100644 lefdef/doc/defapi/images/phi1.gif
create mode 100644 lefdef/doc/defapi/images/pi.gif
create mode 100644 lefdef/doc/defapi/images/product.gif
create mode 100644 lefdef/doc/defapi/images/proportn.gif
create mode 100644 lefdef/doc/defapi/images/prsprset.gif
create mode 100644 lefdef/doc/defapi/images/prsubset.gif
create mode 100644 lefdef/doc/defapi/images/psi.gif
create mode 100644 lefdef/doc/defapi/images/radical.gif
create mode 100644 lefdef/doc/defapi/images/refsbset.gif
create mode 100644 lefdef/doc/defapi/images/refspset.gif
create mode 100644 lefdef/doc/defapi/images/rfraktur.gif
create mode 100644 lefdef/doc/defapi/images/rho.gif
create mode 100644 lefdef/doc/defapi/images/second.gif
create mode 100644 lefdef/doc/defapi/images/sigma.gif
create mode 100644 lefdef/doc/defapi/images/sigma1.gif
create mode 100644 lefdef/doc/defapi/images/spade.gif
create mode 100644 lefdef/doc/defapi/images/suchthat.gif
create mode 100644 lefdef/doc/defapi/images/sumation.gif
create mode 100644 lefdef/doc/defapi/images/tau.gif
create mode 100644 lefdef/doc/defapi/images/therefor.gif
create mode 100644 lefdef/doc/defapi/images/theta.gif
create mode 100644 lefdef/doc/defapi/images/theta1.gif
create mode 100644 lefdef/doc/defapi/images/tip.gif
create mode 100644 lefdef/doc/defapi/images/tm.gif
create mode 100644 lefdef/doc/defapi/images/union.gif
create mode 100644 lefdef/doc/defapi/images/univrsal.gif
create mode 100644 lefdef/doc/defapi/images/upsilon.gif
create mode 100644 lefdef/doc/defapi/images/upsilon1.gif
create mode 100644 lefdef/doc/defapi/images/video.gif
create mode 100644 lefdef/doc/defapi/images/weierstr.gif
create mode 100644 lefdef/doc/defapi/images/xi.gif
create mode 100644 lefdef/doc/defapi/images/zeta.gif
create mode 100644 lefdef/doc/defapi/preface.html
create mode 100644 lefdef/doc/defapi/titlecopy.html
create mode 100644 lefdef/doc/defapiWN/ChangedFeatures.html
create mode 100644 lefdef/doc/defapiWN/NewFeatures.html
create mode 100644 lefdef/doc/defapiWN/defapiWN.pdf
create mode 100644 lefdef/doc/defapiWN/defapiWNTOC.html
create mode 100644 lefdef/doc/defapiWN/images/Diamond.gif
create mode 100644 lefdef/doc/defapiWN/images/Diamond1.gif
create mode 100644 lefdef/doc/defapiWN/images/Diamond12.gif
create mode 100644 lefdef/doc/defapiWN/images/Thumbs.db
create mode 100644 lefdef/doc/defapiWN/images/aleph.gif
create mode 100644 lefdef/doc/defapiWN/images/alpha.gif
create mode 100644 lefdef/doc/defapiWN/images/ampersnd.gif
create mode 100644 lefdef/doc/defapiWN/images/angle.gif
create mode 100644 lefdef/doc/defapiWN/images/anglleft.gif
create mode 100644 lefdef/doc/defapiWN/images/anglrite.gif
create mode 100644 lefdef/doc/defapiWN/images/approx.gif
create mode 100644 lefdef/doc/defapiWN/images/arrwboth.gif
create mode 100644 lefdef/doc/defapiWN/images/arrwdbbo.gif
create mode 100644 lefdef/doc/defapiWN/images/arrwdbdn.gif
create mode 100644 lefdef/doc/defapiWN/images/arrwdblt.gif
create mode 100644 lefdef/doc/defapiWN/images/arrwdbrt.gif
create mode 100644 lefdef/doc/defapiWN/images/arrwdbup.gif
create mode 100644 lefdef/doc/defapiWN/images/arrwdown.gif
create mode 100644 lefdef/doc/defapiWN/images/arrwleft.gif
create mode 100644 lefdef/doc/defapiWN/images/arrwrite.gif
create mode 100644 lefdef/doc/defapiWN/images/arrwup.gif
create mode 100644 lefdef/doc/defapiWN/images/arrwvert.gif
create mode 100644 lefdef/doc/defapiWN/images/b_bullet.gif
create mode 100644 lefdef/doc/defapiWN/images/beta.gif
create mode 100644 lefdef/doc/defapiWN/images/blank.gif
create mode 100644 lefdef/doc/defapiWN/images/bracltbt.gif
create mode 100644 lefdef/doc/defapiWN/images/bracltmd.gif
create mode 100644 lefdef/doc/defapiWN/images/braclttp.gif
create mode 100644 lefdef/doc/defapiWN/images/bracrtbt.gif
create mode 100644 lefdef/doc/defapiWN/images/bracrtmd.gif
create mode 100644 lefdef/doc/defapiWN/images/bracrttp.gif
create mode 100644 lefdef/doc/defapiWN/images/brakltbt.gif
create mode 100644 lefdef/doc/defapiWN/images/braklttp.gif
create mode 100644 lefdef/doc/defapiWN/images/brakmidl.gif
create mode 100644 lefdef/doc/defapiWN/images/brakrtbt.gif
create mode 100644 lefdef/doc/defapiWN/images/brakrttp.gif
create mode 100644 lefdef/doc/defapiWN/images/bs_bullet_sub.gif
create mode 100644 lefdef/doc/defapiWN/images/bss_bullet_sub_sub.gif
create mode 100644 lefdef/doc/defapiWN/images/bullet.gif
create mode 100644 lefdef/doc/defapiWN/images/capalpha.gif
create mode 100644 lefdef/doc/defapiWN/images/capbeta.gif
create mode 100644 lefdef/doc/defapiWN/images/capchi.gif
create mode 100644 lefdef/doc/defapiWN/images/capdelta.gif
create mode 100644 lefdef/doc/defapiWN/images/capepsil.gif
create mode 100644 lefdef/doc/defapiWN/images/capeta.gif
create mode 100644 lefdef/doc/defapiWN/images/capgamma.gif
create mode 100644 lefdef/doc/defapiWN/images/capiota.gif
create mode 100644 lefdef/doc/defapiWN/images/capkappa.gif
create mode 100644 lefdef/doc/defapiWN/images/caplambd.gif
create mode 100644 lefdef/doc/defapiWN/images/capmu.gif
create mode 100644 lefdef/doc/defapiWN/images/capnu.gif
create mode 100644 lefdef/doc/defapiWN/images/capomega.gif
create mode 100644 lefdef/doc/defapiWN/images/capomicr.gif
create mode 100644 lefdef/doc/defapiWN/images/capphi.gif
create mode 100644 lefdef/doc/defapiWN/images/cappi.gif
create mode 100644 lefdef/doc/defapiWN/images/cappsi.gif
create mode 100644 lefdef/doc/defapiWN/images/caprho.gif
create mode 100644 lefdef/doc/defapiWN/images/capsigma.gif
create mode 100644 lefdef/doc/defapiWN/images/captau.gif
create mode 100644 lefdef/doc/defapiWN/images/captheta.gif
create mode 100644 lefdef/doc/defapiWN/images/capupsil.gif
create mode 100644 lefdef/doc/defapiWN/images/capxi.gif
create mode 100644 lefdef/doc/defapiWN/images/capzeta.gif
create mode 100644 lefdef/doc/defapiWN/images/carretrn.gif
create mode 100644 lefdef/doc/defapiWN/images/caution.gif
create mode 100644 lefdef/doc/defapiWN/images/chi.gif
create mode 100644 lefdef/doc/defapiWN/images/circmult.gif
create mode 100644 lefdef/doc/defapiWN/images/circplus.gif
create mode 100644 lefdef/doc/defapiWN/images/club.gif
create mode 100644 lefdef/doc/defapiWN/images/congrunt.gif
create mode 100644 lefdef/doc/defapiWN/images/delta.gif
create mode 100644 lefdef/doc/defapiWN/images/draft.gif
create mode 100644 lefdef/doc/defapiWN/images/element.gif
create mode 100644 lefdef/doc/defapiWN/images/emptyset.gif
create mode 100644 lefdef/doc/defapiWN/images/epsilon.gif
create mode 100644 lefdef/doc/defapiWN/images/epsilon1.gif
create mode 100644 lefdef/doc/defapiWN/images/equivlnt.gif
create mode 100644 lefdef/doc/defapiWN/images/eta.gif
create mode 100644 lefdef/doc/defapiWN/images/existntl.gif
create mode 100644 lefdef/doc/defapiWN/images/gamma.gif
create mode 100644 lefdef/doc/defapiWN/images/gradient.gif
create mode 100644 lefdef/doc/defapiWN/images/gtequal.gif
create mode 100644 lefdef/doc/defapiWN/images/header_doc.gif
create mode 100644 lefdef/doc/defapiWN/images/heart.gif
create mode 100644 lefdef/doc/defapiWN/images/ifraktur.gif
create mode 100644 lefdef/doc/defapiWN/images/important.gif
create mode 100644 lefdef/doc/defapiWN/images/infinity.gif
create mode 100644 lefdef/doc/defapiWN/images/integbot.gif
create mode 100644 lefdef/doc/defapiWN/images/integral.gif
create mode 100644 lefdef/doc/defapiWN/images/integtop.gif
create mode 100644 lefdef/doc/defapiWN/images/intrsect.gif
create mode 100644 lefdef/doc/defapiWN/images/iota.gif
create mode 100644 lefdef/doc/defapiWN/images/kappa.gif
create mode 100644 lefdef/doc/defapiWN/images/lambda.gif
create mode 100644 lefdef/doc/defapiWN/images/logic_or.gif
create mode 100644 lefdef/doc/defapiWN/images/logicand.gif
create mode 100644 lefdef/doc/defapiWN/images/lozenge.gif
create mode 100644 lefdef/doc/defapiWN/images/lt_equal.gif
create mode 100644 lefdef/doc/defapiWN/images/nav2_index.gif
create mode 100644 lefdef/doc/defapiWN/images/nav2_index_b.gif
create mode 100644 lefdef/doc/defapiWN/images/nav2_next_b.gif
create mode 100644 lefdef/doc/defapiWN/images/nav2_previous.gif
create mode 100644 lefdef/doc/defapiWN/images/nav2_previous_b.gif
create mode 100644 lefdef/doc/defapiWN/images/nav2_print.gif
create mode 100644 lefdef/doc/defapiWN/images/nav2_toc.gif
create mode 100644 lefdef/doc/defapiWN/images/nav2_toc_b.gif
create mode 100644 lefdef/doc/defapiWN/images/nav_next.gif
create mode 100644 lefdef/doc/defapiWN/images/nav_next_b.gif
create mode 100644 lefdef/doc/defapiWN/images/notelemn.gif
create mode 100644 lefdef/doc/defapiWN/images/notequal.gif
create mode 100644 lefdef/doc/defapiWN/images/notsbset.gif
create mode 100644 lefdef/doc/defapiWN/images/nu.gif
create mode 100644 lefdef/doc/defapiWN/images/omega.gif
create mode 100644 lefdef/doc/defapiWN/images/omega1.gif
create mode 100644 lefdef/doc/defapiWN/images/omicron.gif
create mode 100644 lefdef/doc/defapiWN/images/pareltbt.gif
create mode 100644 lefdef/doc/defapiWN/images/parelttp.gif
create mode 100644 lefdef/doc/defapiWN/images/parertbt.gif
create mode 100644 lefdef/doc/defapiWN/images/parerttp.gif
create mode 100644 lefdef/doc/defapiWN/images/partldif.gif
create mode 100644 lefdef/doc/defapiWN/images/perpend.gif
create mode 100644 lefdef/doc/defapiWN/images/phi.gif
create mode 100644 lefdef/doc/defapiWN/images/phi1.gif
create mode 100644 lefdef/doc/defapiWN/images/pi.gif
create mode 100644 lefdef/doc/defapiWN/images/product.gif
create mode 100644 lefdef/doc/defapiWN/images/proportn.gif
create mode 100644 lefdef/doc/defapiWN/images/prsprset.gif
create mode 100644 lefdef/doc/defapiWN/images/prsubset.gif
create mode 100644 lefdef/doc/defapiWN/images/psi.gif
create mode 100644 lefdef/doc/defapiWN/images/radical.gif
create mode 100644 lefdef/doc/defapiWN/images/refsbset.gif
create mode 100644 lefdef/doc/defapiWN/images/refspset.gif
create mode 100644 lefdef/doc/defapiWN/images/rfraktur.gif
create mode 100644 lefdef/doc/defapiWN/images/rho.gif
create mode 100644 lefdef/doc/defapiWN/images/second.gif
create mode 100644 lefdef/doc/defapiWN/images/sigma.gif
create mode 100644 lefdef/doc/defapiWN/images/sigma1.gif
create mode 100644 lefdef/doc/defapiWN/images/spade.gif
create mode 100644 lefdef/doc/defapiWN/images/suchthat.gif
create mode 100644 lefdef/doc/defapiWN/images/sumation.gif
create mode 100644 lefdef/doc/defapiWN/images/tau.gif
create mode 100644 lefdef/doc/defapiWN/images/therefor.gif
create mode 100644 lefdef/doc/defapiWN/images/theta.gif
create mode 100644 lefdef/doc/defapiWN/images/theta1.gif
create mode 100644 lefdef/doc/defapiWN/images/tip.gif
create mode 100644 lefdef/doc/defapiWN/images/tm.gif
create mode 100644 lefdef/doc/defapiWN/images/union.gif
create mode 100644 lefdef/doc/defapiWN/images/univrsal.gif
create mode 100644 lefdef/doc/defapiWN/images/upsilon.gif
create mode 100644 lefdef/doc/defapiWN/images/upsilon1.gif
create mode 100644 lefdef/doc/defapiWN/images/video.gif
create mode 100644 lefdef/doc/defapiWN/images/weierstr.gif
create mode 100644 lefdef/doc/defapiWN/images/xi.gif
create mode 100644 lefdef/doc/defapiWN/images/zeta.gif
create mode 100644 lefdef/doc/defapiWN/preface.html
create mode 100644 lefdef/doc/defapiWN/titlecopy.html
create mode 100644 lefdef/doc/lefapi/appA_LEFexamples.html
create mode 100644 lefdef/doc/lefapi/ch1Intro.html
create mode 100644 lefdef/doc/lefapi/ch2LEFsetup.html
create mode 100644 lefdef/doc/lefapi/ch3LEFcallback.html
create mode 100644 lefdef/doc/lefapi/ch4LEFclasses.html
create mode 100644 lefdef/doc/lefapi/ch5LEFwritercallback.html
create mode 100644 lefdef/doc/lefapi/ch6LEFwriter.html
create mode 100644 lefdef/doc/lefapi/ch7LEFcompressed.html
create mode 100644 lefdef/doc/lefapi/ch8lefdiff.html
create mode 100644 lefdef/doc/lefapi/images/Diamond.gif
create mode 100644 lefdef/doc/lefapi/images/Diamond1.gif
create mode 100644 lefdef/doc/lefapi/images/Diamond12.gif
create mode 100644 lefdef/doc/lefapi/images/Thumbs.db
create mode 100644 lefdef/doc/lefapi/images/aleph.gif
create mode 100644 lefdef/doc/lefapi/images/alpha.gif
create mode 100644 lefdef/doc/lefapi/images/ampersnd.gif
create mode 100644 lefdef/doc/lefapi/images/angle.gif
create mode 100644 lefdef/doc/lefapi/images/anglleft.gif
create mode 100644 lefdef/doc/lefapi/images/anglrite.gif
create mode 100644 lefdef/doc/lefapi/images/approx.gif
create mode 100644 lefdef/doc/lefapi/images/arrwboth.gif
create mode 100644 lefdef/doc/lefapi/images/arrwdbbo.gif
create mode 100644 lefdef/doc/lefapi/images/arrwdbdn.gif
create mode 100644 lefdef/doc/lefapi/images/arrwdblt.gif
create mode 100644 lefdef/doc/lefapi/images/arrwdbrt.gif
create mode 100644 lefdef/doc/lefapi/images/arrwdbup.gif
create mode 100644 lefdef/doc/lefapi/images/arrwdown.gif
create mode 100644 lefdef/doc/lefapi/images/arrwleft.gif
create mode 100644 lefdef/doc/lefapi/images/arrwrite.gif
create mode 100644 lefdef/doc/lefapi/images/arrwup.gif
create mode 100644 lefdef/doc/lefapi/images/arrwvert.gif
create mode 100644 lefdef/doc/lefapi/images/b_bullet.gif
create mode 100644 lefdef/doc/lefapi/images/beta.gif
create mode 100644 lefdef/doc/lefapi/images/blank.gif
create mode 100644 lefdef/doc/lefapi/images/bracltbt.gif
create mode 100644 lefdef/doc/lefapi/images/bracltmd.gif
create mode 100644 lefdef/doc/lefapi/images/braclttp.gif
create mode 100644 lefdef/doc/lefapi/images/bracrtbt.gif
create mode 100644 lefdef/doc/lefapi/images/bracrtmd.gif
create mode 100644 lefdef/doc/lefapi/images/bracrttp.gif
create mode 100644 lefdef/doc/lefapi/images/brakltbt.gif
create mode 100644 lefdef/doc/lefapi/images/braklttp.gif
create mode 100644 lefdef/doc/lefapi/images/brakmidl.gif
create mode 100644 lefdef/doc/lefapi/images/brakrtbt.gif
create mode 100644 lefdef/doc/lefapi/images/brakrttp.gif
create mode 100644 lefdef/doc/lefapi/images/bs_bullet_sub.gif
create mode 100644 lefdef/doc/lefapi/images/bss_bullet_sub_sub.gif
create mode 100644 lefdef/doc/lefapi/images/bullet.gif
create mode 100644 lefdef/doc/lefapi/images/capalpha.gif
create mode 100644 lefdef/doc/lefapi/images/capbeta.gif
create mode 100644 lefdef/doc/lefapi/images/capchi.gif
create mode 100644 lefdef/doc/lefapi/images/capdelta.gif
create mode 100644 lefdef/doc/lefapi/images/capepsil.gif
create mode 100644 lefdef/doc/lefapi/images/capeta.gif
create mode 100644 lefdef/doc/lefapi/images/capgamma.gif
create mode 100644 lefdef/doc/lefapi/images/capiota.gif
create mode 100644 lefdef/doc/lefapi/images/capkappa.gif
create mode 100644 lefdef/doc/lefapi/images/caplambd.gif
create mode 100644 lefdef/doc/lefapi/images/capmu.gif
create mode 100644 lefdef/doc/lefapi/images/capnu.gif
create mode 100644 lefdef/doc/lefapi/images/capomega.gif
create mode 100644 lefdef/doc/lefapi/images/capomicr.gif
create mode 100644 lefdef/doc/lefapi/images/capphi.gif
create mode 100644 lefdef/doc/lefapi/images/cappi.gif
create mode 100644 lefdef/doc/lefapi/images/cappsi.gif
create mode 100644 lefdef/doc/lefapi/images/caprho.gif
create mode 100644 lefdef/doc/lefapi/images/capsigma.gif
create mode 100644 lefdef/doc/lefapi/images/captau.gif
create mode 100644 lefdef/doc/lefapi/images/captheta.gif
create mode 100644 lefdef/doc/lefapi/images/capupsil.gif
create mode 100644 lefdef/doc/lefapi/images/capxi.gif
create mode 100644 lefdef/doc/lefapi/images/capzeta.gif
create mode 100644 lefdef/doc/lefapi/images/carretrn.gif
create mode 100644 lefdef/doc/lefapi/images/caution.gif
create mode 100644 lefdef/doc/lefapi/images/ch1Intro.04.1.1.png
create mode 100644 lefdef/doc/lefapi/images/chi.gif
create mode 100644 lefdef/doc/lefapi/images/circmult.gif
create mode 100644 lefdef/doc/lefapi/images/circplus.gif
create mode 100644 lefdef/doc/lefapi/images/club.gif
create mode 100644 lefdef/doc/lefapi/images/congrunt.gif
create mode 100644 lefdef/doc/lefapi/images/delta.gif
create mode 100644 lefdef/doc/lefapi/images/draft.gif
create mode 100644 lefdef/doc/lefapi/images/element.gif
create mode 100644 lefdef/doc/lefapi/images/emptyset.gif
create mode 100644 lefdef/doc/lefapi/images/epsilon.gif
create mode 100644 lefdef/doc/lefapi/images/epsilon1.gif
create mode 100644 lefdef/doc/lefapi/images/equivlnt.gif
create mode 100644 lefdef/doc/lefapi/images/eta.gif
create mode 100644 lefdef/doc/lefapi/images/existntl.gif
create mode 100644 lefdef/doc/lefapi/images/gamma.gif
create mode 100644 lefdef/doc/lefapi/images/gradient.gif
create mode 100644 lefdef/doc/lefapi/images/gtequal.gif
create mode 100644 lefdef/doc/lefapi/images/header_doc.gif
create mode 100644 lefdef/doc/lefapi/images/heart.gif
create mode 100644 lefdef/doc/lefapi/images/ifraktur.gif
create mode 100644 lefdef/doc/lefapi/images/important.gif
create mode 100644 lefdef/doc/lefapi/images/infinity.gif
create mode 100644 lefdef/doc/lefapi/images/integbot.gif
create mode 100644 lefdef/doc/lefapi/images/integral.gif
create mode 100644 lefdef/doc/lefapi/images/integtop.gif
create mode 100644 lefdef/doc/lefapi/images/intrsect.gif
create mode 100644 lefdef/doc/lefapi/images/iota.gif
create mode 100644 lefdef/doc/lefapi/images/kappa.gif
create mode 100644 lefdef/doc/lefapi/images/lambda.gif
create mode 100644 lefdef/doc/lefapi/images/logic_or.gif
create mode 100644 lefdef/doc/lefapi/images/logicand.gif
create mode 100644 lefdef/doc/lefapi/images/lozenge.gif
create mode 100644 lefdef/doc/lefapi/images/lt_equal.gif
create mode 100644 lefdef/doc/lefapi/images/nav2_index.gif
create mode 100644 lefdef/doc/lefapi/images/nav2_index_b.gif
create mode 100644 lefdef/doc/lefapi/images/nav2_next_b.gif
create mode 100644 lefdef/doc/lefapi/images/nav2_previous.gif
create mode 100644 lefdef/doc/lefapi/images/nav2_previous_b.gif
create mode 100644 lefdef/doc/lefapi/images/nav2_print.gif
create mode 100644 lefdef/doc/lefapi/images/nav2_toc.gif
create mode 100644 lefdef/doc/lefapi/images/nav2_toc_b.gif
create mode 100644 lefdef/doc/lefapi/images/nav_next.gif
create mode 100644 lefdef/doc/lefapi/images/nav_next_b.gif
create mode 100644 lefdef/doc/lefapi/images/notelemn.gif
create mode 100644 lefdef/doc/lefapi/images/notequal.gif
create mode 100644 lefdef/doc/lefapi/images/notsbset.gif
create mode 100644 lefdef/doc/lefapi/images/nu.gif
create mode 100644 lefdef/doc/lefapi/images/omega.gif
create mode 100644 lefdef/doc/lefapi/images/omega1.gif
create mode 100644 lefdef/doc/lefapi/images/omicron.gif
create mode 100644 lefdef/doc/lefapi/images/pareltbt.gif
create mode 100644 lefdef/doc/lefapi/images/parelttp.gif
create mode 100644 lefdef/doc/lefapi/images/parertbt.gif
create mode 100644 lefdef/doc/lefapi/images/parerttp.gif
create mode 100644 lefdef/doc/lefapi/images/partldif.gif
create mode 100644 lefdef/doc/lefapi/images/perpend.gif
create mode 100644 lefdef/doc/lefapi/images/phi.gif
create mode 100644 lefdef/doc/lefapi/images/phi1.gif
create mode 100644 lefdef/doc/lefapi/images/pi.gif
create mode 100644 lefdef/doc/lefapi/images/product.gif
create mode 100644 lefdef/doc/lefapi/images/proportn.gif
create mode 100644 lefdef/doc/lefapi/images/prsprset.gif
create mode 100644 lefdef/doc/lefapi/images/prsubset.gif
create mode 100644 lefdef/doc/lefapi/images/psi.gif
create mode 100644 lefdef/doc/lefapi/images/radical.gif
create mode 100644 lefdef/doc/lefapi/images/refsbset.gif
create mode 100644 lefdef/doc/lefapi/images/refspset.gif
create mode 100644 lefdef/doc/lefapi/images/rfraktur.gif
create mode 100644 lefdef/doc/lefapi/images/rho.gif
create mode 100644 lefdef/doc/lefapi/images/second.gif
create mode 100644 lefdef/doc/lefapi/images/sigma.gif
create mode 100644 lefdef/doc/lefapi/images/sigma1.gif
create mode 100644 lefdef/doc/lefapi/images/spade.gif
create mode 100644 lefdef/doc/lefapi/images/suchthat.gif
create mode 100644 lefdef/doc/lefapi/images/sumation.gif
create mode 100644 lefdef/doc/lefapi/images/tau.gif
create mode 100644 lefdef/doc/lefapi/images/therefor.gif
create mode 100644 lefdef/doc/lefapi/images/theta.gif
create mode 100644 lefdef/doc/lefapi/images/theta1.gif
create mode 100644 lefdef/doc/lefapi/images/tip.gif
create mode 100644 lefdef/doc/lefapi/images/tm.gif
create mode 100644 lefdef/doc/lefapi/images/union.gif
create mode 100644 lefdef/doc/lefapi/images/univrsal.gif
create mode 100644 lefdef/doc/lefapi/images/upsilon.gif
create mode 100644 lefdef/doc/lefapi/images/upsilon1.gif
create mode 100644 lefdef/doc/lefapi/images/video.gif
create mode 100644 lefdef/doc/lefapi/images/weierstr.gif
create mode 100644 lefdef/doc/lefapi/images/xi.gif
create mode 100644 lefdef/doc/lefapi/images/zeta.gif
create mode 100644 lefdef/doc/lefapi/lefapi.pdf
create mode 100644 lefdef/doc/lefapi/lefapiTOC.html
create mode 100644 lefdef/doc/lefapi/preface.html
create mode 100644 lefdef/doc/lefapi/titlecopy.html
create mode 100644 lefdef/doc/lefapiWN/ChangedFeatures.html
create mode 100644 lefdef/doc/lefapiWN/NewFeatures.html
create mode 100644 lefdef/doc/lefapiWN/images/Diamond.gif
create mode 100644 lefdef/doc/lefapiWN/images/Diamond1.gif
create mode 100644 lefdef/doc/lefapiWN/images/Diamond12.gif
create mode 100644 lefdef/doc/lefapiWN/images/Thumbs.db
create mode 100644 lefdef/doc/lefapiWN/images/aleph.gif
create mode 100644 lefdef/doc/lefapiWN/images/alpha.gif
create mode 100644 lefdef/doc/lefapiWN/images/ampersnd.gif
create mode 100644 lefdef/doc/lefapiWN/images/angle.gif
create mode 100644 lefdef/doc/lefapiWN/images/anglleft.gif
create mode 100644 lefdef/doc/lefapiWN/images/anglrite.gif
create mode 100644 lefdef/doc/lefapiWN/images/approx.gif
create mode 100644 lefdef/doc/lefapiWN/images/arrwboth.gif
create mode 100644 lefdef/doc/lefapiWN/images/arrwdbbo.gif
create mode 100644 lefdef/doc/lefapiWN/images/arrwdbdn.gif
create mode 100644 lefdef/doc/lefapiWN/images/arrwdblt.gif
create mode 100644 lefdef/doc/lefapiWN/images/arrwdbrt.gif
create mode 100644 lefdef/doc/lefapiWN/images/arrwdbup.gif
create mode 100644 lefdef/doc/lefapiWN/images/arrwdown.gif
create mode 100644 lefdef/doc/lefapiWN/images/arrwleft.gif
create mode 100644 lefdef/doc/lefapiWN/images/arrwrite.gif
create mode 100644 lefdef/doc/lefapiWN/images/arrwup.gif
create mode 100644 lefdef/doc/lefapiWN/images/arrwvert.gif
create mode 100644 lefdef/doc/lefapiWN/images/b_bullet.gif
create mode 100644 lefdef/doc/lefapiWN/images/beta.gif
create mode 100644 lefdef/doc/lefapiWN/images/blank.gif
create mode 100644 lefdef/doc/lefapiWN/images/bracltbt.gif
create mode 100644 lefdef/doc/lefapiWN/images/bracltmd.gif
create mode 100644 lefdef/doc/lefapiWN/images/braclttp.gif
create mode 100644 lefdef/doc/lefapiWN/images/bracrtbt.gif
create mode 100644 lefdef/doc/lefapiWN/images/bracrtmd.gif
create mode 100644 lefdef/doc/lefapiWN/images/bracrttp.gif
create mode 100644 lefdef/doc/lefapiWN/images/brakltbt.gif
create mode 100644 lefdef/doc/lefapiWN/images/braklttp.gif
create mode 100644 lefdef/doc/lefapiWN/images/brakmidl.gif
create mode 100644 lefdef/doc/lefapiWN/images/brakrtbt.gif
create mode 100644 lefdef/doc/lefapiWN/images/brakrttp.gif
create mode 100644 lefdef/doc/lefapiWN/images/bs_bullet_sub.gif
create mode 100644 lefdef/doc/lefapiWN/images/bss_bullet_sub_sub.gif
create mode 100644 lefdef/doc/lefapiWN/images/bullet.gif
create mode 100644 lefdef/doc/lefapiWN/images/capalpha.gif
create mode 100644 lefdef/doc/lefapiWN/images/capbeta.gif
create mode 100644 lefdef/doc/lefapiWN/images/capchi.gif
create mode 100644 lefdef/doc/lefapiWN/images/capdelta.gif
create mode 100644 lefdef/doc/lefapiWN/images/capepsil.gif
create mode 100644 lefdef/doc/lefapiWN/images/capeta.gif
create mode 100644 lefdef/doc/lefapiWN/images/capgamma.gif
create mode 100644 lefdef/doc/lefapiWN/images/capiota.gif
create mode 100644 lefdef/doc/lefapiWN/images/capkappa.gif
create mode 100644 lefdef/doc/lefapiWN/images/caplambd.gif
create mode 100644 lefdef/doc/lefapiWN/images/capmu.gif
create mode 100644 lefdef/doc/lefapiWN/images/capnu.gif
create mode 100644 lefdef/doc/lefapiWN/images/capomega.gif
create mode 100644 lefdef/doc/lefapiWN/images/capomicr.gif
create mode 100644 lefdef/doc/lefapiWN/images/capphi.gif
create mode 100644 lefdef/doc/lefapiWN/images/cappi.gif
create mode 100644 lefdef/doc/lefapiWN/images/cappsi.gif
create mode 100644 lefdef/doc/lefapiWN/images/caprho.gif
create mode 100644 lefdef/doc/lefapiWN/images/capsigma.gif
create mode 100644 lefdef/doc/lefapiWN/images/captau.gif
create mode 100644 lefdef/doc/lefapiWN/images/captheta.gif
create mode 100644 lefdef/doc/lefapiWN/images/capupsil.gif
create mode 100644 lefdef/doc/lefapiWN/images/capxi.gif
create mode 100644 lefdef/doc/lefapiWN/images/capzeta.gif
create mode 100644 lefdef/doc/lefapiWN/images/carretrn.gif
create mode 100644 lefdef/doc/lefapiWN/images/caution.gif
create mode 100644 lefdef/doc/lefapiWN/images/chi.gif
create mode 100644 lefdef/doc/lefapiWN/images/circmult.gif
create mode 100644 lefdef/doc/lefapiWN/images/circplus.gif
create mode 100644 lefdef/doc/lefapiWN/images/club.gif
create mode 100644 lefdef/doc/lefapiWN/images/congrunt.gif
create mode 100644 lefdef/doc/lefapiWN/images/delta.gif
create mode 100644 lefdef/doc/lefapiWN/images/draft.gif
create mode 100644 lefdef/doc/lefapiWN/images/element.gif
create mode 100644 lefdef/doc/lefapiWN/images/emptyset.gif
create mode 100644 lefdef/doc/lefapiWN/images/epsilon.gif
create mode 100644 lefdef/doc/lefapiWN/images/epsilon1.gif
create mode 100644 lefdef/doc/lefapiWN/images/equivlnt.gif
create mode 100644 lefdef/doc/lefapiWN/images/eta.gif
create mode 100644 lefdef/doc/lefapiWN/images/existntl.gif
create mode 100644 lefdef/doc/lefapiWN/images/gamma.gif
create mode 100644 lefdef/doc/lefapiWN/images/gradient.gif
create mode 100644 lefdef/doc/lefapiWN/images/gtequal.gif
create mode 100644 lefdef/doc/lefapiWN/images/header_doc.gif
create mode 100644 lefdef/doc/lefapiWN/images/heart.gif
create mode 100644 lefdef/doc/lefapiWN/images/ifraktur.gif
create mode 100644 lefdef/doc/lefapiWN/images/important.gif
create mode 100644 lefdef/doc/lefapiWN/images/infinity.gif
create mode 100644 lefdef/doc/lefapiWN/images/integbot.gif
create mode 100644 lefdef/doc/lefapiWN/images/integral.gif
create mode 100644 lefdef/doc/lefapiWN/images/integtop.gif
create mode 100644 lefdef/doc/lefapiWN/images/intrsect.gif
create mode 100644 lefdef/doc/lefapiWN/images/iota.gif
create mode 100644 lefdef/doc/lefapiWN/images/kappa.gif
create mode 100644 lefdef/doc/lefapiWN/images/lambda.gif
create mode 100644 lefdef/doc/lefapiWN/images/logic_or.gif
create mode 100644 lefdef/doc/lefapiWN/images/logicand.gif
create mode 100644 lefdef/doc/lefapiWN/images/lozenge.gif
create mode 100644 lefdef/doc/lefapiWN/images/lt_equal.gif
create mode 100644 lefdef/doc/lefapiWN/images/nav2_index.gif
create mode 100644 lefdef/doc/lefapiWN/images/nav2_index_b.gif
create mode 100644 lefdef/doc/lefapiWN/images/nav2_next_b.gif
create mode 100644 lefdef/doc/lefapiWN/images/nav2_previous.gif
create mode 100644 lefdef/doc/lefapiWN/images/nav2_previous_b.gif
create mode 100644 lefdef/doc/lefapiWN/images/nav2_print.gif
create mode 100644 lefdef/doc/lefapiWN/images/nav2_toc.gif
create mode 100644 lefdef/doc/lefapiWN/images/nav2_toc_b.gif
create mode 100644 lefdef/doc/lefapiWN/images/nav_next.gif
create mode 100644 lefdef/doc/lefapiWN/images/nav_next_b.gif
create mode 100644 lefdef/doc/lefapiWN/images/notelemn.gif
create mode 100644 lefdef/doc/lefapiWN/images/notequal.gif
create mode 100644 lefdef/doc/lefapiWN/images/notsbset.gif
create mode 100644 lefdef/doc/lefapiWN/images/nu.gif
create mode 100644 lefdef/doc/lefapiWN/images/omega.gif
create mode 100644 lefdef/doc/lefapiWN/images/omega1.gif
create mode 100644 lefdef/doc/lefapiWN/images/omicron.gif
create mode 100644 lefdef/doc/lefapiWN/images/pareltbt.gif
create mode 100644 lefdef/doc/lefapiWN/images/parelttp.gif
create mode 100644 lefdef/doc/lefapiWN/images/parertbt.gif
create mode 100644 lefdef/doc/lefapiWN/images/parerttp.gif
create mode 100644 lefdef/doc/lefapiWN/images/partldif.gif
create mode 100644 lefdef/doc/lefapiWN/images/perpend.gif
create mode 100644 lefdef/doc/lefapiWN/images/phi.gif
create mode 100644 lefdef/doc/lefapiWN/images/phi1.gif
create mode 100644 lefdef/doc/lefapiWN/images/pi.gif
create mode 100644 lefdef/doc/lefapiWN/images/product.gif
create mode 100644 lefdef/doc/lefapiWN/images/proportn.gif
create mode 100644 lefdef/doc/lefapiWN/images/prsprset.gif
create mode 100644 lefdef/doc/lefapiWN/images/prsubset.gif
create mode 100644 lefdef/doc/lefapiWN/images/psi.gif
create mode 100644 lefdef/doc/lefapiWN/images/radical.gif
create mode 100644 lefdef/doc/lefapiWN/images/refsbset.gif
create mode 100644 lefdef/doc/lefapiWN/images/refspset.gif
create mode 100644 lefdef/doc/lefapiWN/images/rfraktur.gif
create mode 100644 lefdef/doc/lefapiWN/images/rho.gif
create mode 100644 lefdef/doc/lefapiWN/images/second.gif
create mode 100644 lefdef/doc/lefapiWN/images/sigma.gif
create mode 100644 lefdef/doc/lefapiWN/images/sigma1.gif
create mode 100644 lefdef/doc/lefapiWN/images/spade.gif
create mode 100644 lefdef/doc/lefapiWN/images/suchthat.gif
create mode 100644 lefdef/doc/lefapiWN/images/sumation.gif
create mode 100644 lefdef/doc/lefapiWN/images/tau.gif
create mode 100644 lefdef/doc/lefapiWN/images/therefor.gif
create mode 100644 lefdef/doc/lefapiWN/images/theta.gif
create mode 100644 lefdef/doc/lefapiWN/images/theta1.gif
create mode 100644 lefdef/doc/lefapiWN/images/tip.gif
create mode 100644 lefdef/doc/lefapiWN/images/tm.gif
create mode 100644 lefdef/doc/lefapiWN/images/union.gif
create mode 100644 lefdef/doc/lefapiWN/images/univrsal.gif
create mode 100644 lefdef/doc/lefapiWN/images/upsilon.gif
create mode 100644 lefdef/doc/lefapiWN/images/upsilon1.gif
create mode 100644 lefdef/doc/lefapiWN/images/video.gif
create mode 100644 lefdef/doc/lefapiWN/images/weierstr.gif
create mode 100644 lefdef/doc/lefapiWN/images/xi.gif
create mode 100644 lefdef/doc/lefapiWN/images/zeta.gif
create mode 100644 lefdef/doc/lefapiWN/lefapiWN.pdf
create mode 100644 lefdef/doc/lefapiWN/lefapiWNTOC.html
create mode 100644 lefdef/doc/lefapiWN/preface.html
create mode 100644 lefdef/doc/lefapiWN/titlecopy.html
create mode 100644 lefdef/doc/lefdefWN/NewFeatures.html
create mode 100644 lefdef/doc/lefdefWN/Preface.html
create mode 100644 lefdef/doc/lefdefWN/images/Diamond.gif
create mode 100644 lefdef/doc/lefdefWN/images/Diamond1.gif
create mode 100644 lefdef/doc/lefdefWN/images/Diamond12.gif
create mode 100644 lefdef/doc/lefdefWN/images/Thumbs.db
create mode 100644 lefdef/doc/lefdefWN/images/aleph.gif
create mode 100644 lefdef/doc/lefdefWN/images/alpha.gif
create mode 100644 lefdef/doc/lefdefWN/images/ampersnd.gif
create mode 100644 lefdef/doc/lefdefWN/images/angle.gif
create mode 100644 lefdef/doc/lefdefWN/images/anglleft.gif
create mode 100644 lefdef/doc/lefdefWN/images/anglrite.gif
create mode 100644 lefdef/doc/lefdefWN/images/approx.gif
create mode 100644 lefdef/doc/lefdefWN/images/arrwboth.gif
create mode 100644 lefdef/doc/lefdefWN/images/arrwdbbo.gif
create mode 100644 lefdef/doc/lefdefWN/images/arrwdbdn.gif
create mode 100644 lefdef/doc/lefdefWN/images/arrwdblt.gif
create mode 100644 lefdef/doc/lefdefWN/images/arrwdbrt.gif
create mode 100644 lefdef/doc/lefdefWN/images/arrwdbup.gif
create mode 100644 lefdef/doc/lefdefWN/images/arrwdown.gif
create mode 100644 lefdef/doc/lefdefWN/images/arrwleft.gif
create mode 100644 lefdef/doc/lefdefWN/images/arrwrite.gif
create mode 100644 lefdef/doc/lefdefWN/images/arrwup.gif
create mode 100644 lefdef/doc/lefdefWN/images/arrwvert.gif
create mode 100644 lefdef/doc/lefdefWN/images/b_bullet.gif
create mode 100644 lefdef/doc/lefdefWN/images/beta.gif
create mode 100644 lefdef/doc/lefdefWN/images/blank.gif
create mode 100644 lefdef/doc/lefdefWN/images/bracltbt.gif
create mode 100644 lefdef/doc/lefdefWN/images/bracltmd.gif
create mode 100644 lefdef/doc/lefdefWN/images/braclttp.gif
create mode 100644 lefdef/doc/lefdefWN/images/bracrtbt.gif
create mode 100644 lefdef/doc/lefdefWN/images/bracrtmd.gif
create mode 100644 lefdef/doc/lefdefWN/images/bracrttp.gif
create mode 100644 lefdef/doc/lefdefWN/images/brakltbt.gif
create mode 100644 lefdef/doc/lefdefWN/images/braklttp.gif
create mode 100644 lefdef/doc/lefdefWN/images/brakmidl.gif
create mode 100644 lefdef/doc/lefdefWN/images/brakrtbt.gif
create mode 100644 lefdef/doc/lefdefWN/images/brakrttp.gif
create mode 100644 lefdef/doc/lefdefWN/images/bs_bullet_sub.gif
create mode 100644 lefdef/doc/lefdefWN/images/bss_bullet_sub_sub.gif
create mode 100644 lefdef/doc/lefdefWN/images/bullet.gif
create mode 100644 lefdef/doc/lefdefWN/images/capalpha.gif
create mode 100644 lefdef/doc/lefdefWN/images/capbeta.gif
create mode 100644 lefdef/doc/lefdefWN/images/capchi.gif
create mode 100644 lefdef/doc/lefdefWN/images/capdelta.gif
create mode 100644 lefdef/doc/lefdefWN/images/capepsil.gif
create mode 100644 lefdef/doc/lefdefWN/images/capeta.gif
create mode 100644 lefdef/doc/lefdefWN/images/capgamma.gif
create mode 100644 lefdef/doc/lefdefWN/images/capiota.gif
create mode 100644 lefdef/doc/lefdefWN/images/capkappa.gif
create mode 100644 lefdef/doc/lefdefWN/images/caplambd.gif
create mode 100644 lefdef/doc/lefdefWN/images/capmu.gif
create mode 100644 lefdef/doc/lefdefWN/images/capnu.gif
create mode 100644 lefdef/doc/lefdefWN/images/capomega.gif
create mode 100644 lefdef/doc/lefdefWN/images/capomicr.gif
create mode 100644 lefdef/doc/lefdefWN/images/capphi.gif
create mode 100644 lefdef/doc/lefdefWN/images/cappi.gif
create mode 100644 lefdef/doc/lefdefWN/images/cappsi.gif
create mode 100644 lefdef/doc/lefdefWN/images/caprho.gif
create mode 100644 lefdef/doc/lefdefWN/images/capsigma.gif
create mode 100644 lefdef/doc/lefdefWN/images/captau.gif
create mode 100644 lefdef/doc/lefdefWN/images/captheta.gif
create mode 100644 lefdef/doc/lefdefWN/images/capupsil.gif
create mode 100644 lefdef/doc/lefdefWN/images/capxi.gif
create mode 100644 lefdef/doc/lefdefWN/images/capzeta.gif
create mode 100644 lefdef/doc/lefdefWN/images/carretrn.gif
create mode 100644 lefdef/doc/lefdefWN/images/caution.gif
create mode 100644 lefdef/doc/lefdefWN/images/chi.gif
create mode 100644 lefdef/doc/lefdefWN/images/circmult.gif
create mode 100644 lefdef/doc/lefdefWN/images/circplus.gif
create mode 100644 lefdef/doc/lefdefWN/images/club.gif
create mode 100644 lefdef/doc/lefdefWN/images/congrunt.gif
create mode 100644 lefdef/doc/lefdefWN/images/delta.gif
create mode 100644 lefdef/doc/lefdefWN/images/draft.gif
create mode 100644 lefdef/doc/lefdefWN/images/element.gif
create mode 100644 lefdef/doc/lefdefWN/images/emptyset.gif
create mode 100644 lefdef/doc/lefdefWN/images/epsilon.gif
create mode 100644 lefdef/doc/lefdefWN/images/epsilon1.gif
create mode 100644 lefdef/doc/lefdefWN/images/equivlnt.gif
create mode 100644 lefdef/doc/lefdefWN/images/eta.gif
create mode 100644 lefdef/doc/lefdefWN/images/existntl.gif
create mode 100644 lefdef/doc/lefdefWN/images/gamma.gif
create mode 100644 lefdef/doc/lefdefWN/images/gradient.gif
create mode 100644 lefdef/doc/lefdefWN/images/gtequal.gif
create mode 100644 lefdef/doc/lefdefWN/images/header_doc.gif
create mode 100644 lefdef/doc/lefdefWN/images/heart.gif
create mode 100644 lefdef/doc/lefdefWN/images/ifraktur.gif
create mode 100644 lefdef/doc/lefdefWN/images/important.gif
create mode 100644 lefdef/doc/lefdefWN/images/infinity.gif
create mode 100644 lefdef/doc/lefdefWN/images/integbot.gif
create mode 100644 lefdef/doc/lefdefWN/images/integral.gif
create mode 100644 lefdef/doc/lefdefWN/images/integtop.gif
create mode 100644 lefdef/doc/lefdefWN/images/intrsect.gif
create mode 100644 lefdef/doc/lefdefWN/images/iota.gif
create mode 100644 lefdef/doc/lefdefWN/images/kappa.gif
create mode 100644 lefdef/doc/lefdefWN/images/lambda.gif
create mode 100644 lefdef/doc/lefdefWN/images/logic_or.gif
create mode 100644 lefdef/doc/lefdefWN/images/logicand.gif
create mode 100644 lefdef/doc/lefdefWN/images/lozenge.gif
create mode 100644 lefdef/doc/lefdefWN/images/lt_equal.gif
create mode 100644 lefdef/doc/lefdefWN/images/nav2_index.gif
create mode 100644 lefdef/doc/lefdefWN/images/nav2_index_b.gif
create mode 100644 lefdef/doc/lefdefWN/images/nav2_next_b.gif
create mode 100644 lefdef/doc/lefdefWN/images/nav2_previous.gif
create mode 100644 lefdef/doc/lefdefWN/images/nav2_previous_b.gif
create mode 100644 lefdef/doc/lefdefWN/images/nav2_print.gif
create mode 100644 lefdef/doc/lefdefWN/images/nav2_toc.gif
create mode 100644 lefdef/doc/lefdefWN/images/nav2_toc_b.gif
create mode 100644 lefdef/doc/lefdefWN/images/nav_next.gif
create mode 100644 lefdef/doc/lefdefWN/images/nav_next_b.gif
create mode 100644 lefdef/doc/lefdefWN/images/notelemn.gif
create mode 100644 lefdef/doc/lefdefWN/images/notequal.gif
create mode 100644 lefdef/doc/lefdefWN/images/notsbset.gif
create mode 100644 lefdef/doc/lefdefWN/images/nu.gif
create mode 100644 lefdef/doc/lefdefWN/images/omega.gif
create mode 100644 lefdef/doc/lefdefWN/images/omega1.gif
create mode 100644 lefdef/doc/lefdefWN/images/omicron.gif
create mode 100644 lefdef/doc/lefdefWN/images/pareltbt.gif
create mode 100644 lefdef/doc/lefdefWN/images/parelttp.gif
create mode 100644 lefdef/doc/lefdefWN/images/parertbt.gif
create mode 100644 lefdef/doc/lefdefWN/images/parerttp.gif
create mode 100644 lefdef/doc/lefdefWN/images/partldif.gif
create mode 100644 lefdef/doc/lefdefWN/images/perpend.gif
create mode 100644 lefdef/doc/lefdefWN/images/phi.gif
create mode 100644 lefdef/doc/lefdefWN/images/phi1.gif
create mode 100644 lefdef/doc/lefdefWN/images/pi.gif
create mode 100644 lefdef/doc/lefdefWN/images/product.gif
create mode 100644 lefdef/doc/lefdefWN/images/proportn.gif
create mode 100644 lefdef/doc/lefdefWN/images/prsprset.gif
create mode 100644 lefdef/doc/lefdefWN/images/prsubset.gif
create mode 100644 lefdef/doc/lefdefWN/images/psi.gif
create mode 100644 lefdef/doc/lefdefWN/images/radical.gif
create mode 100644 lefdef/doc/lefdefWN/images/refsbset.gif
create mode 100644 lefdef/doc/lefdefWN/images/refspset.gif
create mode 100644 lefdef/doc/lefdefWN/images/rfraktur.gif
create mode 100644 lefdef/doc/lefdefWN/images/rho.gif
create mode 100644 lefdef/doc/lefdefWN/images/second.gif
create mode 100644 lefdef/doc/lefdefWN/images/sigma.gif
create mode 100644 lefdef/doc/lefdefWN/images/sigma1.gif
create mode 100644 lefdef/doc/lefdefWN/images/spade.gif
create mode 100644 lefdef/doc/lefdefWN/images/suchthat.gif
create mode 100644 lefdef/doc/lefdefWN/images/sumation.gif
create mode 100644 lefdef/doc/lefdefWN/images/tau.gif
create mode 100644 lefdef/doc/lefdefWN/images/therefor.gif
create mode 100644 lefdef/doc/lefdefWN/images/theta.gif
create mode 100644 lefdef/doc/lefdefWN/images/theta1.gif
create mode 100644 lefdef/doc/lefdefWN/images/tip.gif
create mode 100644 lefdef/doc/lefdefWN/images/tm.gif
create mode 100644 lefdef/doc/lefdefWN/images/union.gif
create mode 100644 lefdef/doc/lefdefWN/images/univrsal.gif
create mode 100644 lefdef/doc/lefdefWN/images/upsilon.gif
create mode 100644 lefdef/doc/lefdefWN/images/upsilon1.gif
create mode 100644 lefdef/doc/lefdefWN/images/video.gif
create mode 100644 lefdef/doc/lefdefWN/images/weierstr.gif
create mode 100644 lefdef/doc/lefdefWN/images/xi.gif
create mode 100644 lefdef/doc/lefdefWN/images/zeta.gif
create mode 100644 lefdef/doc/lefdefWN/lefdefWN.pdf
create mode 100644 lefdef/doc/lefdefWN/lefdefWNTOC.html
create mode 100644 lefdef/doc/lefdefWN/titlecopy.html
create mode 100644 lefdef/doc/lefdefref/DEFINEandALIAS.html
create mode 100644 lefdef/doc/lefdefref/DEFSyntax.html
create mode 100644 lefdef/doc/lefdefref/Examples.html
create mode 100644 lefdef/doc/lefdefref/LEFSyntax.html
create mode 100644 lefdef/doc/lefdefref/OptimizingLEFTechnology.html
create mode 100644 lefdef/doc/lefdefref/PAE.html
create mode 100644 lefdef/doc/lefdefref/WorkingwithLEF.html
create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.01.png
create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.02.png
create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.03.png
create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.04.png
create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.05.png
create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.06.png
create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.07.png
create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.08.png
create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.09.png
create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.10.png
create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.11.png
create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.12.png
create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.13.png
create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.14.png
create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.15.png
create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.16.png
create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.17.png
create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.18.png
create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.19.png
create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.20.png
create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.21.png
create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.22.png
create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.23.png
create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.24.png
create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.25.png
create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.26.png
create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.27.png
create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.28.png
create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.29.png
create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.30.png
create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.31.png
create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.32.png
create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.33.png
create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.34.png
create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.35.png
create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.36.png
create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.37.png
create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.38.png
create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.39.png
create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.40.png
create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.41.png
create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.42.png
create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.43.png
create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.44.png
create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.45.png
create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.46.png
create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.47.png
create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.48.png
create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.49.png
create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.50.png
create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.51.png
create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.52.png
create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.53.png
create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.54.png
create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.55.png
create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.56.png
create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.57.png
create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.58.png
create mode 100644 lefdef/doc/lefdefref/images/DEFSyntax.07.1.59.png
create mode 100644 lefdef/doc/lefdefref/images/Diamond.gif
create mode 100644 lefdef/doc/lefdefref/images/Diamond1.gif
create mode 100644 lefdef/doc/lefdefref/images/Diamond12.gif
create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.01.png
create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.02.png
create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.03.png
create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.04.png
create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.05.png
create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.06.png
create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.07.png
create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.08.png
create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.09.png
create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.10.png
create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.11.png
create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.12.png
create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.13.png
create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.14.png
create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.15.png
create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.16.png
create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.17.png
create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.18.png
create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.19.png
create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.20.png
create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.21.png
create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.22.png
create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.23.png
create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.24.png
create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.25.png
create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.26.png
create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.27.png
create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.28.png
create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.29.png
create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.30.png
create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.31.png
create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.32.png
create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.33.png
create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.34.png
create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.35.png
create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.36.png
create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.37.png
create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.38.png
create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.39.png
create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.40.png
create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.41.png
create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.42.png
create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.43.png
create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.44.png
create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.45.png
create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.46.png
create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.47.png
create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.48.png
create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.49.png
create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.50.png
create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.51.png
create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.52.png
create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.53.png
create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.54.png
create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.55.png
create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.56.png
create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.57.png
create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.58.png
create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.59.png
create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.60.png
create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.61.png
create mode 100644 lefdef/doc/lefdefref/images/LEFSyntax.04.1.62.png
create mode 100644 lefdef/doc/lefdefref/images/OptimizingLEFTechnology.09.1.1.png
create mode 100644 lefdef/doc/lefdefref/images/OptimizingLEFTechnology.09.1.2.png
create mode 100644 lefdef/doc/lefdefref/images/OptimizingLEFTechnology.09.1.3.png
create mode 100644 lefdef/doc/lefdefref/images/OptimizingLEFTechnology.09.1.4.png
create mode 100644 lefdef/doc/lefdefref/images/OptimizingLEFTechnology.09.1.5.png
create mode 100644 lefdef/doc/lefdefref/images/OptimizingLEFTechnology.09.1.6.png
create mode 100644 lefdef/doc/lefdefref/images/PAE.10.1.01.png
create mode 100644 lefdef/doc/lefdefref/images/PAE.10.1.02.png
create mode 100644 lefdef/doc/lefdefref/images/PAE.10.1.03.png
create mode 100644 lefdef/doc/lefdefref/images/PAE.10.1.04.png
create mode 100644 lefdef/doc/lefdefref/images/PAE.10.1.05.png
create mode 100644 lefdef/doc/lefdefref/images/PAE.10.1.06.png
create mode 100644 lefdef/doc/lefdefref/images/PAE.10.1.07.png
create mode 100644 lefdef/doc/lefdefref/images/PAE.10.1.08.png
create mode 100644 lefdef/doc/lefdefref/images/PAE.10.1.09.png
create mode 100644 lefdef/doc/lefdefref/images/PAE.10.1.10.png
create mode 100644 lefdef/doc/lefdefref/images/PAE.10.1.11.png
create mode 100644 lefdef/doc/lefdefref/images/PAE.10.1.12.png
create mode 100644 lefdef/doc/lefdefref/images/PAE.10.1.13.png
create mode 100644 lefdef/doc/lefdefref/images/PAE.10.1.14.png
create mode 100644 lefdef/doc/lefdefref/images/PAE.10.1.15.png
create mode 100644 lefdef/doc/lefdefref/images/PAE.10.1.16.png
create mode 100644 lefdef/doc/lefdefref/images/PAE.10.1.17.png
create mode 100644 lefdef/doc/lefdefref/images/PAE.10.1.18.png
create mode 100644 lefdef/doc/lefdefref/images/PAE.10.1.19.png
create mode 100644 lefdef/doc/lefdefref/images/PAE.10.1.20.png
create mode 100644 lefdef/doc/lefdefref/images/PAE.10.1.21.png
create mode 100644 lefdef/doc/lefdefref/images/PAE.10.1.22.png
create mode 100644 lefdef/doc/lefdefref/images/PAE.10.1.23.png
create mode 100644 lefdef/doc/lefdefref/images/PAE.10.1.24.png
create mode 100644 lefdef/doc/lefdefref/images/PAE.10.1.25.png
create mode 100644 lefdef/doc/lefdefref/images/PAE.10.1.26.png
create mode 100644 lefdef/doc/lefdefref/images/PAE.10.1.27.png
create mode 100644 lefdef/doc/lefdefref/images/PAE.10.1.28.png
create mode 100644 lefdef/doc/lefdefref/images/PAE.10.1.29.png
create mode 100644 lefdef/doc/lefdefref/images/PAE.10.1.30.png
create mode 100644 lefdef/doc/lefdefref/images/PAE.10.1.31.png
create mode 100644 lefdef/doc/lefdefref/images/PAE.10.1.32.png
create mode 100644 lefdef/doc/lefdefref/images/PAE.10.1.33.png
create mode 100644 lefdef/doc/lefdefref/images/PAE.10.1.34.png
create mode 100644 lefdef/doc/lefdefref/images/PAE.10.1.35.png
create mode 100644 lefdef/doc/lefdefref/images/PAE.10.1.36.png
create mode 100644 lefdef/doc/lefdefref/images/PAE.10.1.37.png
create mode 100644 lefdef/doc/lefdefref/images/PAE.10.1.38.png
create mode 100644 lefdef/doc/lefdefref/images/PAE.10.1.39.png
create mode 100644 lefdef/doc/lefdefref/images/PAE.10.1.40.png
create mode 100644 lefdef/doc/lefdefref/images/PAE.10.1.41.png
create mode 100644 lefdef/doc/lefdefref/images/Thumbs.db
create mode 100644 lefdef/doc/lefdefref/images/aleph.gif
create mode 100644 lefdef/doc/lefdefref/images/alpha.gif
create mode 100644 lefdef/doc/lefdefref/images/ampersnd.gif
create mode 100644 lefdef/doc/lefdefref/images/angle.gif
create mode 100644 lefdef/doc/lefdefref/images/anglleft.gif
create mode 100644 lefdef/doc/lefdefref/images/anglrite.gif
create mode 100644 lefdef/doc/lefdefref/images/approx.gif
create mode 100644 lefdef/doc/lefdefref/images/arrwboth.gif
create mode 100644 lefdef/doc/lefdefref/images/arrwdbbo.gif
create mode 100644 lefdef/doc/lefdefref/images/arrwdbdn.gif
create mode 100644 lefdef/doc/lefdefref/images/arrwdblt.gif
create mode 100644 lefdef/doc/lefdefref/images/arrwdbrt.gif
create mode 100644 lefdef/doc/lefdefref/images/arrwdbup.gif
create mode 100644 lefdef/doc/lefdefref/images/arrwdown.gif
create mode 100644 lefdef/doc/lefdefref/images/arrwleft.gif
create mode 100644 lefdef/doc/lefdefref/images/arrwrite.gif
create mode 100644 lefdef/doc/lefdefref/images/arrwup.gif
create mode 100644 lefdef/doc/lefdefref/images/arrwvert.gif
create mode 100644 lefdef/doc/lefdefref/images/b_bullet.gif
create mode 100644 lefdef/doc/lefdefref/images/beta.gif
create mode 100644 lefdef/doc/lefdefref/images/blank.gif
create mode 100644 lefdef/doc/lefdefref/images/bracltbt.gif
create mode 100644 lefdef/doc/lefdefref/images/bracltmd.gif
create mode 100644 lefdef/doc/lefdefref/images/braclttp.gif
create mode 100644 lefdef/doc/lefdefref/images/bracrtbt.gif
create mode 100644 lefdef/doc/lefdefref/images/bracrtmd.gif
create mode 100644 lefdef/doc/lefdefref/images/bracrttp.gif
create mode 100644 lefdef/doc/lefdefref/images/brakltbt.gif
create mode 100644 lefdef/doc/lefdefref/images/braklttp.gif
create mode 100644 lefdef/doc/lefdefref/images/brakmidl.gif
create mode 100644 lefdef/doc/lefdefref/images/brakrtbt.gif
create mode 100644 lefdef/doc/lefdefref/images/brakrttp.gif
create mode 100644 lefdef/doc/lefdefref/images/bs_bullet_sub.gif
create mode 100644 lefdef/doc/lefdefref/images/bss_bullet_sub_sub.gif
create mode 100644 lefdef/doc/lefdefref/images/bullet.gif
create mode 100644 lefdef/doc/lefdefref/images/capalpha.gif
create mode 100644 lefdef/doc/lefdefref/images/capbeta.gif
create mode 100644 lefdef/doc/lefdefref/images/capchi.gif
create mode 100644 lefdef/doc/lefdefref/images/capdelta.gif
create mode 100644 lefdef/doc/lefdefref/images/capepsil.gif
create mode 100644 lefdef/doc/lefdefref/images/capeta.gif
create mode 100644 lefdef/doc/lefdefref/images/capgamma.gif
create mode 100644 lefdef/doc/lefdefref/images/capiota.gif
create mode 100644 lefdef/doc/lefdefref/images/capkappa.gif
create mode 100644 lefdef/doc/lefdefref/images/caplambd.gif
create mode 100644 lefdef/doc/lefdefref/images/capmu.gif
create mode 100644 lefdef/doc/lefdefref/images/capnu.gif
create mode 100644 lefdef/doc/lefdefref/images/capomega.gif
create mode 100644 lefdef/doc/lefdefref/images/capomicr.gif
create mode 100644 lefdef/doc/lefdefref/images/capphi.gif
create mode 100644 lefdef/doc/lefdefref/images/cappi.gif
create mode 100644 lefdef/doc/lefdefref/images/cappsi.gif
create mode 100644 lefdef/doc/lefdefref/images/caprho.gif
create mode 100644 lefdef/doc/lefdefref/images/capsigma.gif
create mode 100644 lefdef/doc/lefdefref/images/captau.gif
create mode 100644 lefdef/doc/lefdefref/images/captheta.gif
create mode 100644 lefdef/doc/lefdefref/images/capupsil.gif
create mode 100644 lefdef/doc/lefdefref/images/capxi.gif
create mode 100644 lefdef/doc/lefdefref/images/capzeta.gif
create mode 100644 lefdef/doc/lefdefref/images/carretrn.gif
create mode 100644 lefdef/doc/lefdefref/images/caution.gif
create mode 100644 lefdef/doc/lefdefref/images/chi.gif
create mode 100644 lefdef/doc/lefdefref/images/circmult.gif
create mode 100644 lefdef/doc/lefdefref/images/circplus.gif
create mode 100644 lefdef/doc/lefdefref/images/club.gif
create mode 100644 lefdef/doc/lefdefref/images/congrunt.gif
create mode 100644 lefdef/doc/lefdefref/images/delta.gif
create mode 100644 lefdef/doc/lefdefref/images/draft.gif
create mode 100644 lefdef/doc/lefdefref/images/element.gif
create mode 100644 lefdef/doc/lefdefref/images/emptyset.gif
create mode 100644 lefdef/doc/lefdefref/images/epsilon.gif
create mode 100644 lefdef/doc/lefdefref/images/epsilon1.gif
create mode 100644 lefdef/doc/lefdefref/images/equivlnt.gif
create mode 100644 lefdef/doc/lefdefref/images/eta.gif
create mode 100644 lefdef/doc/lefdefref/images/existntl.gif
create mode 100644 lefdef/doc/lefdefref/images/gamma.gif
create mode 100644 lefdef/doc/lefdefref/images/gradient.gif
create mode 100644 lefdef/doc/lefdefref/images/gtequal.gif
create mode 100644 lefdef/doc/lefdefref/images/header_doc.gif
create mode 100644 lefdef/doc/lefdefref/images/heart.gif
create mode 100644 lefdef/doc/lefdefref/images/ifraktur.gif
create mode 100644 lefdef/doc/lefdefref/images/important.gif
create mode 100644 lefdef/doc/lefdefref/images/infinity.gif
create mode 100644 lefdef/doc/lefdefref/images/integbot.gif
create mode 100644 lefdef/doc/lefdefref/images/integral.gif
create mode 100644 lefdef/doc/lefdefref/images/integtop.gif
create mode 100644 lefdef/doc/lefdefref/images/intrsect.gif
create mode 100644 lefdef/doc/lefdefref/images/iota.gif
create mode 100644 lefdef/doc/lefdefref/images/kappa.gif
create mode 100644 lefdef/doc/lefdefref/images/lambda.gif
create mode 100644 lefdef/doc/lefdefref/images/logic_or.gif
create mode 100644 lefdef/doc/lefdefref/images/logicand.gif
create mode 100644 lefdef/doc/lefdefref/images/lozenge.gif
create mode 100644 lefdef/doc/lefdefref/images/lt_equal.gif
create mode 100644 lefdef/doc/lefdefref/images/nav2_index.gif
create mode 100644 lefdef/doc/lefdefref/images/nav2_index_b.gif
create mode 100644 lefdef/doc/lefdefref/images/nav2_next_b.gif
create mode 100644 lefdef/doc/lefdefref/images/nav2_previous.gif
create mode 100644 lefdef/doc/lefdefref/images/nav2_previous_b.gif
create mode 100644 lefdef/doc/lefdefref/images/nav2_print.gif
create mode 100644 lefdef/doc/lefdefref/images/nav2_toc.gif
create mode 100644 lefdef/doc/lefdefref/images/nav2_toc_b.gif
create mode 100644 lefdef/doc/lefdefref/images/nav_next.gif
create mode 100644 lefdef/doc/lefdefref/images/nav_next_b.gif
create mode 100644 lefdef/doc/lefdefref/images/notelemn.gif
create mode 100644 lefdef/doc/lefdefref/images/notequal.gif
create mode 100644 lefdef/doc/lefdefref/images/notsbset.gif
create mode 100644 lefdef/doc/lefdefref/images/nu.gif
create mode 100644 lefdef/doc/lefdefref/images/omega.gif
create mode 100644 lefdef/doc/lefdefref/images/omega1.gif
create mode 100644 lefdef/doc/lefdefref/images/omicron.gif
create mode 100644 lefdef/doc/lefdefref/images/pareltbt.gif
create mode 100644 lefdef/doc/lefdefref/images/parelttp.gif
create mode 100644 lefdef/doc/lefdefref/images/parertbt.gif
create mode 100644 lefdef/doc/lefdefref/images/parerttp.gif
create mode 100644 lefdef/doc/lefdefref/images/partldif.gif
create mode 100644 lefdef/doc/lefdefref/images/perpend.gif
create mode 100644 lefdef/doc/lefdefref/images/phi.gif
create mode 100644 lefdef/doc/lefdefref/images/phi1.gif
create mode 100644 lefdef/doc/lefdefref/images/pi.gif
create mode 100644 lefdef/doc/lefdefref/images/product.gif
create mode 100644 lefdef/doc/lefdefref/images/proportn.gif
create mode 100644 lefdef/doc/lefdefref/images/prsprset.gif
create mode 100644 lefdef/doc/lefdefref/images/prsubset.gif
create mode 100644 lefdef/doc/lefdefref/images/psi.gif
create mode 100644 lefdef/doc/lefdefref/images/radical.gif
create mode 100644 lefdef/doc/lefdefref/images/refsbset.gif
create mode 100644 lefdef/doc/lefdefref/images/refspset.gif
create mode 100644 lefdef/doc/lefdefref/images/rfraktur.gif
create mode 100644 lefdef/doc/lefdefref/images/rho.gif
create mode 100644 lefdef/doc/lefdefref/images/second.gif
create mode 100644 lefdef/doc/lefdefref/images/sigma.gif
create mode 100644 lefdef/doc/lefdefref/images/sigma1.gif
create mode 100644 lefdef/doc/lefdefref/images/spade.gif
create mode 100644 lefdef/doc/lefdefref/images/suchthat.gif
create mode 100644 lefdef/doc/lefdefref/images/sumation.gif
create mode 100644 lefdef/doc/lefdefref/images/tau.gif
create mode 100644 lefdef/doc/lefdefref/images/therefor.gif
create mode 100644 lefdef/doc/lefdefref/images/theta.gif
create mode 100644 lefdef/doc/lefdefref/images/theta1.gif
create mode 100644 lefdef/doc/lefdefref/images/tip.gif
create mode 100644 lefdef/doc/lefdefref/images/tm.gif
create mode 100644 lefdef/doc/lefdefref/images/union.gif
create mode 100644 lefdef/doc/lefdefref/images/univrsal.gif
create mode 100644 lefdef/doc/lefdefref/images/upsilon.gif
create mode 100644 lefdef/doc/lefdefref/images/upsilon1.gif
create mode 100644 lefdef/doc/lefdefref/images/video.gif
create mode 100644 lefdef/doc/lefdefref/images/weierstr.gif
create mode 100644 lefdef/doc/lefdefref/images/xi.gif
create mode 100644 lefdef/doc/lefdefref/images/zeta.gif
create mode 100644 lefdef/doc/lefdefref/lefdefref.pdf
create mode 100644 lefdef/doc/lefdefref/lefdefrefIX.html
create mode 100644 lefdef/doc/lefdefref/lefdefrefTOC.html
create mode 100644 lefdef/doc/lefdefref/preface.html
create mode 100644 lefdef/doc/lefdefref/titlecopy.html
create mode 100755 lefdef/doc/support/header_doc.gif
create mode 100755 lefdef/doc/support/ix_ref.gif
create mode 100755 lefdef/doc/support/nav2_black.gif
create mode 100755 lefdef/doc/support/nav2_exit.gif
create mode 100755 lefdef/doc/support/nav2_feedback.gif
create mode 100755 lefdef/doc/support/nav2_help.gif
create mode 100755 lefdef/doc/support/nav2_index.gif
create mode 100755 lefdef/doc/support/nav2_index_b.gif
create mode 100755 lefdef/doc/support/nav2_library.gif
create mode 100755 lefdef/doc/support/nav2_next_b.gif
create mode 100755 lefdef/doc/support/nav2_previous.gif
create mode 100755 lefdef/doc/support/nav2_previous_b.gif
create mode 100755 lefdef/doc/support/nav2_print.gif
create mode 100755 lefdef/doc/support/nav2_toc.gif
create mode 100755 lefdef/doc/support/nav2_toc_b.gif
create mode 100755 lefdef/doc/support/nav_next.gif
create mode 100755 lefdef/doc/support/nav_next_b.gif
create mode 100644 lefdef/src/CMakeLists.txt
create mode 100644 lefdef/src/def/CMakeLists.txt
create mode 100644 lefdef/src/def/LICENSE.TXT
create mode 100644 lefdef/src/def/Makefile
create mode 100644 lefdef/src/def/TEST/Makefile
create mode 100644 lefdef/src/def/TEST/complete.5.8.def
create mode 100644 lefdef/src/def/TEST/complete.5.8.def.au
create mode 100644 lefdef/src/def/bin/lefdefdiff
create mode 100644 lefdef/src/def/cdef/Makefile
create mode 100644 lefdef/src/def/cdef/defMsgTable.h
create mode 100644 lefdef/src/def/cdef/defiAlias.h
create mode 100644 lefdef/src/def/cdef/defiAssertion.h
create mode 100644 lefdef/src/def/cdef/defiBlockage.h
create mode 100644 lefdef/src/def/cdef/defiComponent.h
create mode 100644 lefdef/src/def/cdef/defiDebug.h
create mode 100644 lefdef/src/def/cdef/defiDefs.h
create mode 100644 lefdef/src/def/cdef/defiFPC.h
create mode 100644 lefdef/src/def/cdef/defiFill.h
create mode 100644 lefdef/src/def/cdef/defiGroup.h
create mode 100644 lefdef/src/def/cdef/defiIOTiming.h
create mode 100644 lefdef/src/def/cdef/defiKRDefs.h
create mode 100644 lefdef/src/def/cdef/defiMisc.h
create mode 100644 lefdef/src/def/cdef/defiNet.h
create mode 100644 lefdef/src/def/cdef/defiNonDefault.h
create mode 100644 lefdef/src/def/cdef/defiPartition.h
create mode 100644 lefdef/src/def/cdef/defiPath.h
create mode 100644 lefdef/src/def/cdef/defiPinCap.h
create mode 100644 lefdef/src/def/cdef/defiPinProp.h
create mode 100644 lefdef/src/def/cdef/defiProp.h
create mode 100644 lefdef/src/def/cdef/defiPropType.h
create mode 100644 lefdef/src/def/cdef/defiRegion.h
create mode 100644 lefdef/src/def/cdef/defiRowTrack.h
create mode 100644 lefdef/src/def/cdef/defiScanchain.h
create mode 100644 lefdef/src/def/cdef/defiSite.h
create mode 100644 lefdef/src/def/cdef/defiSlot.h
create mode 100644 lefdef/src/def/cdef/defiTimingDisable.h
create mode 100644 lefdef/src/def/cdef/defiTypedefs.h
create mode 100644 lefdef/src/def/cdef/defiUser.h
create mode 100644 lefdef/src/def/cdef/defiVia.h
create mode 100644 lefdef/src/def/cdef/defrReader.h
create mode 100644 lefdef/src/def/cdef/defwWriter.h
create mode 100644 lefdef/src/def/cdef/defwWriterCalls.h
create mode 100644 lefdef/src/def/cdef/xdefiAssertion.cpp
create mode 100644 lefdef/src/def/cdef/xdefiBlockage.cpp
create mode 100644 lefdef/src/def/cdef/xdefiComponent.cpp
create mode 100644 lefdef/src/def/cdef/xdefiDebug.cpp
create mode 100644 lefdef/src/def/cdef/xdefiFPC.cpp
create mode 100644 lefdef/src/def/cdef/xdefiFill.cpp
create mode 100644 lefdef/src/def/cdef/xdefiGroup.cpp
create mode 100644 lefdef/src/def/cdef/xdefiIOTiming.cpp
create mode 100644 lefdef/src/def/cdef/xdefiMisc.cpp
create mode 100644 lefdef/src/def/cdef/xdefiNet.cpp
create mode 100644 lefdef/src/def/cdef/xdefiNonDefault.cpp
create mode 100644 lefdef/src/def/cdef/xdefiPartition.cpp
create mode 100644 lefdef/src/def/cdef/xdefiPath.cpp
create mode 100644 lefdef/src/def/cdef/xdefiPinCap.cpp
create mode 100644 lefdef/src/def/cdef/xdefiPinProp.cpp
create mode 100644 lefdef/src/def/cdef/xdefiProp.cpp
create mode 100644 lefdef/src/def/cdef/xdefiPropType.cpp
create mode 100644 lefdef/src/def/cdef/xdefiRegion.cpp
create mode 100644 lefdef/src/def/cdef/xdefiRowTrack.cpp
create mode 100644 lefdef/src/def/cdef/xdefiScanchain.cpp
create mode 100644 lefdef/src/def/cdef/xdefiSite.cpp
create mode 100644 lefdef/src/def/cdef/xdefiSlot.cpp
create mode 100644 lefdef/src/def/cdef/xdefiTimingDisable.cpp
create mode 100644 lefdef/src/def/cdef/xdefiVia.cpp
create mode 100644 lefdef/src/def/cdef/xdefrReader.cpp
create mode 100644 lefdef/src/def/cdef/xdefwWriter.cpp
create mode 100644 lefdef/src/def/cdef/xdefwWriterCalls.cpp
create mode 100644 lefdef/src/def/cdefzlib/Makefile
create mode 100644 lefdef/src/def/cdefzlib/cdefzlib.c
create mode 100644 lefdef/src/def/cdefzlib/defzlib.h
create mode 100644 lefdef/src/def/def/CMakeLists.txt
create mode 100644 lefdef/src/def/def/Makefile
create mode 100644 lefdef/src/def/def/def.msg
create mode 100644 lefdef/src/def/def/def.tab.h
create mode 100644 lefdef/src/def/def/def.y
create mode 100644 lefdef/src/def/def/def_keywords.cpp
create mode 100755 lefdef/src/def/def/def_objs.defs
create mode 100644 lefdef/src/def/def/defiAlias.cpp
create mode 100644 lefdef/src/def/def/defiAlias.hpp
create mode 100644 lefdef/src/def/def/defiAssertion.cpp
create mode 100644 lefdef/src/def/def/defiAssertion.hpp
create mode 100644 lefdef/src/def/def/defiBlockage.cpp
create mode 100644 lefdef/src/def/def/defiBlockage.hpp
create mode 100644 lefdef/src/def/def/defiComponent.cpp
create mode 100644 lefdef/src/def/def/defiComponent.hpp
create mode 100644 lefdef/src/def/def/defiDebug.cpp
create mode 100644 lefdef/src/def/def/defiDebug.hpp
create mode 100644 lefdef/src/def/def/defiDefs.hpp
create mode 100644 lefdef/src/def/def/defiFPC.cpp
create mode 100644 lefdef/src/def/def/defiFPC.hpp
create mode 100644 lefdef/src/def/def/defiFill.cpp
create mode 100644 lefdef/src/def/def/defiFill.hpp
create mode 100644 lefdef/src/def/def/defiGroup.cpp
create mode 100644 lefdef/src/def/def/defiGroup.hpp
create mode 100644 lefdef/src/def/def/defiIOTiming.cpp
create mode 100644 lefdef/src/def/def/defiIOTiming.hpp
create mode 100644 lefdef/src/def/def/defiKRDefs.hpp
create mode 100644 lefdef/src/def/def/defiMisc.cpp
create mode 100644 lefdef/src/def/def/defiMisc.hpp
create mode 100644 lefdef/src/def/def/defiNet.cpp
create mode 100644 lefdef/src/def/def/defiNet.hpp
create mode 100644 lefdef/src/def/def/defiNonDefault.cpp
create mode 100644 lefdef/src/def/def/defiNonDefault.hpp
create mode 100644 lefdef/src/def/def/defiPartition.cpp
create mode 100644 lefdef/src/def/def/defiPartition.hpp
create mode 100644 lefdef/src/def/def/defiPath.cpp
create mode 100644 lefdef/src/def/def/defiPath.hpp
create mode 100644 lefdef/src/def/def/defiPinCap.cpp
create mode 100644 lefdef/src/def/def/defiPinCap.hpp
create mode 100644 lefdef/src/def/def/defiPinProp.cpp
create mode 100644 lefdef/src/def/def/defiPinProp.hpp
create mode 100644 lefdef/src/def/def/defiProp.cpp
create mode 100644 lefdef/src/def/def/defiProp.hpp
create mode 100644 lefdef/src/def/def/defiPropType.cpp
create mode 100644 lefdef/src/def/def/defiPropType.hpp
create mode 100644 lefdef/src/def/def/defiRegion.cpp
create mode 100644 lefdef/src/def/def/defiRegion.hpp
create mode 100644 lefdef/src/def/def/defiRowTrack.cpp
create mode 100644 lefdef/src/def/def/defiRowTrack.hpp
create mode 100644 lefdef/src/def/def/defiScanchain.cpp
create mode 100644 lefdef/src/def/def/defiScanchain.hpp
create mode 100644 lefdef/src/def/def/defiSite.cpp
create mode 100644 lefdef/src/def/def/defiSite.hpp
create mode 100644 lefdef/src/def/def/defiSlot.cpp
create mode 100644 lefdef/src/def/def/defiSlot.hpp
create mode 100644 lefdef/src/def/def/defiTimingDisable.cpp
create mode 100644 lefdef/src/def/def/defiTimingDisable.hpp
create mode 100644 lefdef/src/def/def/defiUser.hpp
create mode 100644 lefdef/src/def/def/defiUtil.cpp
create mode 100644 lefdef/src/def/def/defiUtil.hpp
create mode 100644 lefdef/src/def/def/defiVia.cpp
create mode 100644 lefdef/src/def/def/defiVia.hpp
create mode 100644 lefdef/src/def/def/defrCallBacks.hpp
create mode 100644 lefdef/src/def/def/defrCallbacks.cpp
create mode 100644 lefdef/src/def/def/defrData.cpp
create mode 100644 lefdef/src/def/def/defrData.hpp
create mode 100644 lefdef/src/def/def/defrReader.cpp
create mode 100644 lefdef/src/def/def/defrReader.hpp
create mode 100644 lefdef/src/def/def/defrSettings.cpp
create mode 100644 lefdef/src/def/def/defrSettings.hpp
create mode 100644 lefdef/src/def/def/defwWriter.cpp
create mode 100644 lefdef/src/def/def/defwWriter.hpp
create mode 100644 lefdef/src/def/def/defwWriterCalls.cpp
create mode 100644 lefdef/src/def/def/defwWriterCalls.hpp
create mode 100644 lefdef/src/def/def/lex.h
create mode 100644 lefdef/src/def/defdiff/CMakeLists.txt
create mode 100644 lefdef/src/def/defdiff/Makefile
create mode 100644 lefdef/src/def/defdiff/diffDefRW.cpp
create mode 100644 lefdef/src/def/defdiff/diffDefRW.hpp
create mode 100644 lefdef/src/def/defdiff/differDef.cpp
create mode 100644 lefdef/src/def/defrw/CMakeLists.txt
create mode 100644 lefdef/src/def/defrw/Makefile
create mode 100644 lefdef/src/def/defrw/defrw.cpp
create mode 100644 lefdef/src/def/defwrite/CMakeLists.txt
create mode 100644 lefdef/src/def/defwrite/Makefile
create mode 100644 lefdef/src/def/defwrite/defwrite.cpp
create mode 100644 lefdef/src/def/defwrite/defwriteCbs.cpp
create mode 100644 lefdef/src/def/defzlib/CMakeLists.txt
create mode 100644 lefdef/src/def/defzlib/Makefile
create mode 100644 lefdef/src/def/defzlib/defzlib.cpp
create mode 100644 lefdef/src/def/defzlib/defzlib.hpp
create mode 100644 lefdef/src/def/doc/defapi.pdf
create mode 100644 lefdef/src/def/doc/defapiWN.pdf
create mode 100644 lefdef/src/def/template.mk
create mode 100644 lefdef/src/lef/CMakeLists.txt
create mode 100644 lefdef/src/lef/LICENSE.TXT
create mode 100644 lefdef/src/lef/Makefile
create mode 100644 lefdef/src/lef/TEST/Makefile
create mode 100644 lefdef/src/lef/TEST/complete.5.8.lef
create mode 100644 lefdef/src/lef/TEST/complete.5.8.lef.au
create mode 100644 lefdef/src/lef/bin/lefdefdiff
create mode 100644 lefdef/src/lef/clef/Makefile
create mode 100644 lefdef/src/lef/clef/lefMsgTable.h
create mode 100644 lefdef/src/lef/clef/lefiArray.h
create mode 100644 lefdef/src/lef/clef/lefiCrossTalk.h
create mode 100644 lefdef/src/lef/clef/lefiDebug.h
create mode 100755 lefdef/src/lef/clef/lefiEncryptExt.c
create mode 100644 lefdef/src/lef/clef/lefiEncryptInt.h
create mode 100644 lefdef/src/lef/clef/lefiLayer.h
create mode 100644 lefdef/src/lef/clef/lefiMacro.h
create mode 100644 lefdef/src/lef/clef/lefiMisc.h
create mode 100644 lefdef/src/lef/clef/lefiNonDefault.h
create mode 100644 lefdef/src/lef/clef/lefiProp.h
create mode 100644 lefdef/src/lef/clef/lefiPropType.h
create mode 100755 lefdef/src/lef/clef/lefiTBInt.c
create mode 100644 lefdef/src/lef/clef/lefiTypedefs.h
create mode 100644 lefdef/src/lef/clef/lefiUnits.h
create mode 100644 lefdef/src/lef/clef/lefiUser.h
create mode 100644 lefdef/src/lef/clef/lefiUtil.h
create mode 100644 lefdef/src/lef/clef/lefiVia.h
create mode 100644 lefdef/src/lef/clef/lefiViaRule.h
create mode 100644 lefdef/src/lef/clef/lefrReader.h
create mode 100644 lefdef/src/lef/clef/lefwWriter.h
create mode 100644 lefdef/src/lef/clef/lefwWriterCalls.h
create mode 100644 lefdef/src/lef/clef/xlefiArray.cpp
create mode 100644 lefdef/src/lef/clef/xlefiCrossTalk.cpp
create mode 100644 lefdef/src/lef/clef/xlefiDebug.cpp
create mode 100644 lefdef/src/lef/clef/xlefiEncryptInt.cpp
create mode 100644 lefdef/src/lef/clef/xlefiLayer.cpp
create mode 100644 lefdef/src/lef/clef/xlefiMacro.cpp
create mode 100644 lefdef/src/lef/clef/xlefiMisc.cpp
create mode 100644 lefdef/src/lef/clef/xlefiNonDefault.cpp
create mode 100644 lefdef/src/lef/clef/xlefiProp.cpp
create mode 100644 lefdef/src/lef/clef/xlefiPropType.cpp
create mode 100644 lefdef/src/lef/clef/xlefiUnits.cpp
create mode 100644 lefdef/src/lef/clef/xlefiUtil.cpp
create mode 100644 lefdef/src/lef/clef/xlefiVia.cpp
create mode 100644 lefdef/src/lef/clef/xlefiViaRule.cpp
create mode 100644 lefdef/src/lef/clef/xlefrReader.cpp
create mode 100644 lefdef/src/lef/clef/xlefwWriter.cpp
create mode 100644 lefdef/src/lef/clef/xlefwWriterCalls.cpp
create mode 100644 lefdef/src/lef/clefzlib/Makefile
create mode 100644 lefdef/src/lef/clefzlib/clefzlib.c
create mode 100644 lefdef/src/lef/clefzlib/lefzlib.h
create mode 100644 lefdef/src/lef/doc/lefapi.pdf
create mode 100644 lefdef/src/lef/doc/lefapiWN.pdf
create mode 100644 lefdef/src/lef/lef/CMakeLists.txt
create mode 100644 lefdef/src/lef/lef/Makefile
create mode 100644 lefdef/src/lef/lef/crypt.cpp
create mode 100644 lefdef/src/lef/lef/crypt.hpp
create mode 100644 lefdef/src/lef/lef/lef.msg
create mode 100644 lefdef/src/lef/lef/lef.tab.h
create mode 100644 lefdef/src/lef/lef/lef.y
create mode 100644 lefdef/src/lef/lef/lef_keywords.cpp
create mode 100644 lefdef/src/lef/lef/lefiArray.cpp
create mode 100644 lefdef/src/lef/lef/lefiArray.hpp
create mode 100644 lefdef/src/lef/lef/lefiCrossTalk.cpp
create mode 100644 lefdef/src/lef/lef/lefiCrossTalk.hpp
create mode 100644 lefdef/src/lef/lef/lefiDebug.cpp
create mode 100644 lefdef/src/lef/lef/lefiDebug.hpp
create mode 100644 lefdef/src/lef/lef/lefiDefs.hpp
create mode 100644 lefdef/src/lef/lef/lefiEncryptInt.cpp
create mode 100644 lefdef/src/lef/lef/lefiEncryptInt.hpp
create mode 100644 lefdef/src/lef/lef/lefiKRDefs.hpp
create mode 100644 lefdef/src/lef/lef/lefiLayer.cpp
create mode 100644 lefdef/src/lef/lef/lefiLayer.hpp
create mode 100644 lefdef/src/lef/lef/lefiMacro.cpp
create mode 100644 lefdef/src/lef/lef/lefiMacro.hpp
create mode 100644 lefdef/src/lef/lef/lefiMisc.cpp
create mode 100644 lefdef/src/lef/lef/lefiMisc.hpp
create mode 100644 lefdef/src/lef/lef/lefiNonDefault.cpp
create mode 100644 lefdef/src/lef/lef/lefiNonDefault.hpp
create mode 100644 lefdef/src/lef/lef/lefiProp.cpp
create mode 100644 lefdef/src/lef/lef/lefiProp.hpp
create mode 100644 lefdef/src/lef/lef/lefiPropType.cpp
create mode 100644 lefdef/src/lef/lef/lefiPropType.hpp
create mode 100644 lefdef/src/lef/lef/lefiTBExt.cpp
create mode 100644 lefdef/src/lef/lef/lefiUnits.cpp
create mode 100644 lefdef/src/lef/lef/lefiUnits.hpp
create mode 100644 lefdef/src/lef/lef/lefiUser.hpp
create mode 100644 lefdef/src/lef/lef/lefiUtil.hpp
create mode 100644 lefdef/src/lef/lef/lefiVia.cpp
create mode 100644 lefdef/src/lef/lef/lefiVia.hpp
create mode 100644 lefdef/src/lef/lef/lefiViaRule.cpp
create mode 100644 lefdef/src/lef/lef/lefiViaRule.hpp
create mode 100644 lefdef/src/lef/lef/lefrCallBacks.hpp
create mode 100644 lefdef/src/lef/lef/lefrCallbacks.cpp
create mode 100644 lefdef/src/lef/lef/lefrData.cpp
create mode 100644 lefdef/src/lef/lef/lefrData.hpp
create mode 100644 lefdef/src/lef/lef/lefrReader.cpp
create mode 100644 lefdef/src/lef/lef/lefrReader.hpp
create mode 100644 lefdef/src/lef/lef/lefrSettings.cpp
create mode 100644 lefdef/src/lef/lef/lefrSettings.hpp
create mode 100644 lefdef/src/lef/lef/lefwWriter.cpp
create mode 100644 lefdef/src/lef/lef/lefwWriter.hpp
create mode 100644 lefdef/src/lef/lef/lefwWriterCalls.cpp
create mode 100644 lefdef/src/lef/lef/lefwWriterCalls.hpp
create mode 100644 lefdef/src/lef/lef/lex.h
create mode 100644 lefdef/src/lef/lefdiff/CMakeLists.txt
create mode 100644 lefdef/src/lef/lefdiff/Makefile
create mode 100644 lefdef/src/lef/lefdiff/diffLefRW.cpp
create mode 100644 lefdef/src/lef/lefdiff/diffLefRW.hpp
create mode 100644 lefdef/src/lef/lefdiff/differLef.cpp
create mode 100644 lefdef/src/lef/lefrw/CMakeLists.txt
create mode 100644 lefdef/src/lef/lefrw/Makefile
create mode 100644 lefdef/src/lef/lefrw/lefrw.cpp
create mode 100644 lefdef/src/lef/lefwrite/CMakeLists.txt
create mode 100644 lefdef/src/lef/lefwrite/Makefile
create mode 100644 lefdef/src/lef/lefwrite/lefwrite.cpp
create mode 100644 lefdef/src/lef/lefwrite/lefwriteCbs.cpp
create mode 100644 lefdef/src/lef/lefzlib/CMakeLists.txt
create mode 100644 lefdef/src/lef/lefzlib/Makefile
create mode 100644 lefdef/src/lef/lefzlib/lefzlib.cpp
create mode 100644 lefdef/src/lef/lefzlib/lefzlib.hpp
create mode 100644 lefdef/src/lef/template.mk
create mode 100644 lefdef/src/lefdefReadme.txt
diff --git a/bootstrap/build.conf b/bootstrap/build.conf
index fbd80aea..41a8e19d 100644
--- a/bootstrap/build.conf
+++ b/bootstrap/build.conf
@@ -13,6 +13,7 @@ projects = [
}
, { 'name' : "coriolis"
, 'tools' : [ "bootstrap"
+ , "lefdef"
, "vlsisapd"
, "hurricane"
, "crlcore"
diff --git a/bootstrap/cmake_modules/FindLEFDEF.cmake b/bootstrap/cmake_modules/FindLEFDEF.cmake
index cbc00c89..79b58e2f 100644
--- a/bootstrap/cmake_modules/FindLEFDEF.cmake
+++ b/bootstrap/cmake_modules/FindLEFDEF.cmake
@@ -7,124 +7,121 @@
#
# The DEF C API library: LEFDEF_CDEF_LIBRARY
# LEFDEF_CDEF_LIBRARY_RELEASE
-# LEFDEF_CDEF_LIBRARY_DEBUG
#
# The DEF C API library (zlib) : LEFDEF_ZCDEF_LIBRARY
# LEFDEF_ZCDEF_LIBRARY_RELEASE
-# LEFDEF_ZCDEF_LIBRARY_DEBUG
#
# The DEF C++ API library: LEFDEF_DEF_LIBRARY
# LEFDEF_DEF_LIBRARY_RELEASE
-# LEFDEF_DEF_LIBRARY_DEBUG
#
# The DEF C++ API library (zlib) : LEFDEF_ZDEF_LIBRARY
# LEFDEF_ZDEF_LIBRARY_RELEASE
-# LEFDEF_ZDEF_LIBRARY_DEBUG
#
# The LEF C API library: LEFDEF_CLEF_LIBRARY
# LEFDEF_CLEF_LIBRARY_RELEASE
-# LEFDEF_CLEF_LIBRARY_DEBUG
#
# The LEF C API library (zlib) : LEFDEF_ZCLEF_LIBRARY
# LEFDEF_ZCLEF_LIBRARY_RELEASE
-# LEFDEF_ZCLEF_LIBRARY_DEBUG
#
# The LEF C++ API library: LEFDEF_LEF_LIBRARY
# LEFDEF_LEF_LIBRARY_RELEASE
-# LEFDEF_LEF_LIBRARY_DEBUG
#
# The LEF C++ API library (zlib) : LEFDEF_ZLEF_LIBRARY
# LEFDEF_ZLEF_LIBRARY_RELEASE
-# LEFDEF_ZLEF_LIBRARY_DEBUG
+
+# Try to find a reasonable CORIOLIS_TOP value.
+ if( NOT("$ENV{CORIOLIS_USER_TOP}" STREQUAL "") )
+ set ( CORIOLIS_USER_TOP "$ENV{CORIOLIS_USER_TOP}" )
+ else( NOT("$ENV{CORIOLIS_USER_TOP}" STREQUAL "") )
+ if( NOT("$ENV{CORIOLIS_TOP}" STREQUAL "") )
+ set ( CORIOLIS_TOP "$ENV{CORIOLIS_TOP}" )
+ endif( NOT("$ENV{CORIOLIS_TOP}" STREQUAL "") )
+ endif( NOT("$ENV{CORIOLIS_USER_TOP}" STREQUAL "") )
-macro( _find_lefdef_lib varname libname )
- find_library( LEFDEF_${varname}_LIBRARY_RELEASE NAMES ${libname} PATHS ${LEFDEF_LIBRARY_DIR} )
- find_library( LEFDEF_${varname}_LIBRARY_DEBUG NAMES ${libname}_Debug PATHS ${LEFDEF_LIBRARY_DIR} )
-
- if( LEFDEF_${varname}_LIBRARY_RELEASE AND NOT LEFDEF_${varname}_LIBRARY_DEBUG )
- set( LEFDEF_${varname}_LIBRARY_DEBUG ${LEFDEF_${varname}_LIBRARY_RELEASE} CACHE STRING "Path to a library" FORCE )
- endif()
-
- if( LEFDEF_${varname}_LIBRARY_DEBUG AND NOT LEFDEF_${varname}_LIBRARY_RELEASE )
- set( LEFDEF_${varname}_LIBRARY_RELEASE LEFDEF_${varname}_LIBRARY_DEBUG CACHE STRING "Path to a library" FORCE )
- endif()
-
- if( LEFDEF_${varname}_LIBRARY_RELEASE )
- list( APPEND LEFDEF_LIBRARIES "optimized" ${LEFDEF_${varname}_LIBRARY_RELEASE}
- "debug" ${LEFDEF_${varname}_LIBRARY_DEBUG} )
- set( LEFDEF_${varname}_LIBRARY_FOUND 1 )
- mark_as_advanced( LEFDEF_${varname}_LIBRARY_RELEASE
- LEFDEF_${varname}_LIBRARY_DEBUG )
- else()
- set ( LEFDEF_FOUND "NO" )
- endif()
-endmacro()
+ macro( _find_lefdef_lib varname libname )
+ find_library( LEFDEF_${varname}_LIBRARY_RELEASE NAMES ${libname} PATHS ${LEFDEF_LIBRARY_DIR} )
+
+ if( LEFDEF_${varname}_LIBRARY_RELEASE )
+ set( LEFDEF_${varname}_LIBRARY_DEBUG ${LEFDEF_${varname}_LIBRARY_RELEASE} CACHE STRING "Path to a library" FORCE )
+ endif()
+
+ if( LEFDEF_${varname}_LIBRARY_RELEASE )
+ list( APPEND LEFDEF_LIBRARIES "optimized" ${LEFDEF_${varname}_LIBRARY_RELEASE}
+ "debug" ${LEFDEF_${varname}_LIBRARY_DEBUG} )
+ set( LEFDEF_${varname}_LIBRARY_FOUND 1 )
+ mark_as_advanced( LEFDEF_${varname}_LIBRARY_RELEASE
+ LEFDEF_${varname}_LIBRARY_DEBUG )
+ else()
+ set ( LEFDEF_FOUND "NO" )
+ endif()
+ endmacro()
-set( LEFDEF_INCLUDE_DIR_DESCRIPTION "directory containing the LEF/DEF include files. E.g /opt/lefdef-5.6/include" )
-set( LEFDEF_LIBRARY_DIR_DESCRIPTION "directory containing the LEF/DEF library files. E.g /opt/lefdef-5.6/lib" )
-set( LEFDEF_DIR_MESSAGE "Set the LEFDEF_INCLUDE_DIR cmake cache entry to the ${LEFDEF_INCLUDE_DIR_DESCRIPTION}" )
+ set( LEFDEF_INCLUDE_DIR_DESCRIPTION "directory containing the LEF/DEF include files. E.g /opt/lefdef-5.6/include" )
+ set( LEFDEF_LIBRARY_DIR_DESCRIPTION "directory containing the LEF/DEF library files. E.g /opt/lefdef-5.6/lib" )
+ set( LEFDEF_DIR_MESSAGE "Set the LEFDEF_INCLUDE_DIR cmake cache entry to the ${LEFDEF_INCLUDE_DIR_DESCRIPTION}" )
# Don't even bother under Win32
-if ( UNIX )
- set ( LEFDEF_FOUND "YES" )
- set ( LEFDEF_SEARCH_PATH "$ENV{LEFDEF_TOP}"
+ if( UNIX )
+ set( LEFDEF_FOUND "YES" )
+ set( LEFDEF_SEARCH_PATH "$ENV{CORIOLIS_TOP}"
+ "$ENV{LEFDEF_TOP}"
"/usr"
- "/opt/lefdef-5.6"
+ "/opt/lefdef-5.8"
"/opt/lefdef-5.7"
+ "/opt/lefdef-5.6"
"/opt/lefdef"
"$ENV{HOME}/oa/lefdef/5.7-s038"
"/soc/oa"
)
- message("-- Components of LEFDEF_DIR_SEARCH:")
- foreach(PATH ${LEFDEF_DIR_SEARCH})
- message("-- ${PATH}")
- endforeach(PATH)
-
- set ( LEFDEF_LIBRARIES "" )
- set ( LEFDEF_LIBRARY_SEARCH_PATH "" )
-
- find_path ( LEFDEF_INCLUDE_DIR NAMES "defiDefs.h"
+ message( "-- Components of LEFDEF_DIR_SEARCH:" )
+ foreach( PATH ${LEFDEF_DIR_SEARCH} )
+ message( "-- ${PATH}" )
+ endforeach()
+
+ set( LEFDEF_LIBRARIES "" )
+ set( LEFDEF_LIBRARY_SEARCH_PATH "" )
+
+ find_path( LEFDEF_INCLUDE_DIR NAMES "defiDefs.h"
PATHS ${LEFDEF_SEARCH_PATH}
PATH_SUFFIXES "include" "include/lefdef"
DOC "The ${LEFDEF_INCLUDE_DIR_DESCRIPTION}" )
- message( STATUS "LEFDEF_INCLUDE_DIR: ${LEFDEF_INCLUDE_DIR}" )
-
- find_path ( LEFDEF_LIBRARY_DIR NAMES "libdef.a" "libdef_Debug.a"
+ message( STATUS "LEFDEF_INCLUDE_DIR: ${LEFDEF_INCLUDE_DIR}" )
+
+ find_path( LEFDEF_LIBRARY_DIR NAMES "libdef.a"
PATHS ${LEFDEF_SEARCH_PATH}
PATH_SUFFIXES "lib${LIB_SUFFIX}"
DOC "The ${LEFDEF_LIBRARY_DIR_DESCRIPTION}" )
- message( STATUS "LEFDEF_LIBRARY_DIR: ${LEFDEF_LIBRARY_DIR}" )
-
- if ( LEFDEF_INCLUDE_DIR AND LEFDEF_LIBRARY_DIR )
- _find_lefdef_lib ( "CDEF" "cdef" )
- _find_lefdef_lib ( "ZCDEF" "cdefzlib" )
- _find_lefdef_lib ( "DEF" "def" )
- _find_lefdef_lib ( "ZDEF" "defzlib" )
- _find_lefdef_lib ( "CLEF" "clef" )
- _find_lefdef_lib ( "ZCLEF" "clefzlib" )
- _find_lefdef_lib ( "LEF" "lef" )
- _find_lefdef_lib ( "ZLEF" "lefzlib" )
- else ( LEFDEF_INCLUDE_DIR AND LEFDEF_LIBRARY_DIR )
- set ( LEFDEF_FOUND "NO" )
- endif ( LEFDEF_INCLUDE_DIR AND LEFDEF_LIBRARY_DIR )
-
- if ( LEFDEF_FOUND )
- message ( STATUS "Found LEF/DEF" )
- add_definitions ( -DHAVE_LEFDEF )
- if ( NOT LEFDEF_FIND_QUIETLY )
- message ( STATUS "Found LEF/DEF" )
- endif ( NOT LEFDEF_FIND_QUIETLY )
- else ( LEFDEF_FOUND )
- set ( LEFDEF_LIBRARIES "" )
- set ( LEFDEF_INCLUDE_DIR "" )
- set ( LEFDEF_LIBRARY_DIR "" )
- if ( LEFDEF_FIND_REQUIRED )
- message ( STATUS "LEF/DEF libraries and/or includes NOT found!" )
- endif ( LEFDEF_FIND_REQUIRED )
- endif ( LEFDEF_FOUND )
-
- mark_as_advanced ( LEFDEF_INCLUDE_DIR LEFDEF_LIBRARY_DIR LEFDEF_LIBRARIES )
-endif ( UNIX )
+ message( STATUS "LEFDEF_LIBRARY_DIR: ${LEFDEF_LIBRARY_DIR}" )
+
+ if( LEFDEF_INCLUDE_DIR AND LEFDEF_LIBRARY_DIR )
+ _find_lefdef_lib( "CDEF" "cdef" )
+ _find_lefdef_lib( "ZCDEF" "cdefzlib" )
+ _find_lefdef_lib( "DEF" "def" )
+ _find_lefdef_lib( "ZDEF" "defzlib" )
+ _find_lefdef_lib( "CLEF" "clef" )
+ _find_lefdef_lib( "ZCLEF" "clefzlib" )
+ _find_lefdef_lib( "LEF" "lef" )
+ _find_lefdef_lib( "ZLEF" "lefzlib" )
+ else()
+ set( LEFDEF_FOUND "NO" )
+ endif()
+
+ if( LEFDEF_FOUND )
+ add_definitions( -DHAVE_LEFDEF )
+ if( NOT LEFDEF_FIND_QUIETLY )
+ message( STATUS "Found LEF/DEF" )
+ endif()
+ else( LEFDEF_FOUND )
+ set( LEFDEF_LIBRARIES "" )
+ set( LEFDEF_INCLUDE_DIR "" )
+ set( LEFDEF_LIBRARY_DIR "" )
+ if( LEFDEF_FIND_REQUIRED )
+ message( STATUS "LEF/DEF libraries and/or includes NOT found!" )
+ endif()
+ endif( LEFDEF_FOUND )
+
+ mark_as_advanced( LEFDEF_INCLUDE_DIR LEFDEF_LIBRARY_DIR LEFDEF_LIBRARIES )
+ endif( UNIX )
diff --git a/crlcore/src/ccore/lefdef/DefDriver.cpp b/crlcore/src/ccore/lefdef/DefDriver.cpp
index 73eec44a..9d2dc54a 100644
--- a/crlcore/src/ccore/lefdef/DefDriver.cpp
+++ b/crlcore/src/ccore/lefdef/DefDriver.cpp
@@ -92,7 +92,7 @@ namespace CRL {
// x-----------------------------------------------------------------x
-# if HAVE_LEFDEF && defined(LEF_ENABLED)
+#if defined(HAVE_LEFDEF) && defined(LEF_ENABLED)
#define CHECK_STATUS(status) \
if (status) { \
defwPrintError(status); \
@@ -162,14 +162,14 @@ bool LessNet::operator () ( Net* net1, Net* net2 ) {
return false;
}
-# endif // HAVE_LEFDEF
+#endif // HAVE_LEFDEF
void defDriver ( const string cellPath, Cell *cell, unsigned int &saveState )
{
-# if HAVE_LEFDEF && defined(LEF_ENABLED)
+#if defined(HAVE_LEFDEF) && defined(LEF_ENABLED)
CDataBase* dataBase = GetCDataBase();
if ( dataBase == NULL )
throw CError ( NullDataBase, "CDrivDEF()" );
@@ -663,9 +663,9 @@ void defDriver ( const string cellPath, Cell *cell, unsigned int &saveState )
CHECK_STATUS(status);
ccell.Close ();
-# else // HAVE_LEFDEF
+#else // HAVE_LEFDEF
cerr << "\nDummy LEF driver call for \"" << cellPath << "\"." << endl;
-# endif // HAVE_LEFDEF
+#endif // HAVE_LEFDEF
}
diff --git a/crlcore/src/ccore/lefdef/DefExport.cpp b/crlcore/src/ccore/lefdef/DefExport.cpp
index b865c3b8..d9b8ec18 100644
--- a/crlcore/src/ccore/lefdef/DefExport.cpp
+++ b/crlcore/src/ccore/lefdef/DefExport.cpp
@@ -15,7 +15,7 @@
#include
-#if HAVE_LEFDEF
+#if defined(HAVE_LEFDEF)
# include "lefwWriter.hpp"
# include "defwWriter.hpp"
# include "defwWriterCalls.hpp"
@@ -42,7 +42,7 @@
#include "crlcore/DefExport.h"
-#if HAVE_LEFDEF
+#if defined(HAVE_LEFDEF)
namespace {
@@ -747,7 +747,7 @@ namespace CRL {
void DefExport::drive ( Cell* cell, unsigned int flags )
{
-#if HAVE_LEFDEF
+#if defined(HAVE_LEFDEF)
DefDriver::drive ( cell, flags );
if ( flags & WithLEF ) LefExport::drive ( cell, LefExport::WithTechnology|LefExport::WithSpacers );
diff --git a/crlcore/src/ccore/lefdef/DefImport.cpp b/crlcore/src/ccore/lefdef/DefImport.cpp
index a93a2299..ac3c5ee6 100644
--- a/crlcore/src/ccore/lefdef/DefImport.cpp
+++ b/crlcore/src/ccore/lefdef/DefImport.cpp
@@ -17,7 +17,7 @@
#include
#include
#include
-#if HAVE_LEFDEF
+#if defined(HAVE_LEFDEF)
# include "lefrReader.hpp"
# include "defrReader.hpp"
#endif
@@ -39,7 +39,7 @@
#include "crlcore/DefImport.h"
-#if HAVE_LEFDEF
+#if defined(HAVE_LEFDEF)
namespace {
@@ -591,7 +591,7 @@ namespace CRL {
UpdateSession::open ();
Cell* cell = NULL;
-#if HAVE_LEFDEF
+#if defined(HAVE_LEFDEF)
cell = DefParser::parse ( design+".def", flags );
#else
cerr << "[ERROR] CRL::DefImport::load(): \n"
diff --git a/crlcore/src/ccore/lefdef/DefParser.cpp b/crlcore/src/ccore/lefdef/DefParser.cpp
index b8aaa631..1cff4e12 100644
--- a/crlcore/src/ccore/lefdef/DefParser.cpp
+++ b/crlcore/src/ccore/lefdef/DefParser.cpp
@@ -37,7 +37,7 @@
#include "crlcore/LefDefExtension.h"
#include "LefDef.h"
-#if HAVE_LEFDEF
+#if defined(HAVE_LEFDEF)
# include "defrReader.hpp"
#endif
@@ -82,7 +82,7 @@ namespace {
unsigned int __lefConvertFactor = 1;
-#if HAVE_LEFDEF
+#if defined(HAVE_LEFDEF)
// ---------------------------------------------------------------
// Module Global Functions.
@@ -639,7 +639,7 @@ namespace CRL {
cmess2 << " " << tab << "+ " << cellPath << endl;
-#if HAVE_LEFDEF
+#if defined(HAVE_LEFDEF)
DataBase* db = DataBase::getDB ();
if ( !db ) throw Error ( NullDataBase, "defParser()" );
diff --git a/crlcore/src/ccore/lefdef/LefExport.cpp b/crlcore/src/ccore/lefdef/LefExport.cpp
index 259d1a3d..e278097f 100644
--- a/crlcore/src/ccore/lefdef/LefExport.cpp
+++ b/crlcore/src/ccore/lefdef/LefExport.cpp
@@ -15,7 +15,7 @@
#include
-#ifdef HAVE_LEFDEF
+#if defined(HAVE_LEFDEF)
#include "lefwWriter.hpp"
#include "lefwWriterCalls.hpp"
#endif
@@ -41,7 +41,7 @@
#include "crlcore/LefExport.h"
-#ifdef HAVE_LEFDEF
+#if defined(HAVE_LEFDEF)
namespace {
@@ -717,7 +717,7 @@ namespace CRL {
void LefExport::drive ( Cell* cell, unsigned int flags )
{
-#if HAVE_LEFDEF
+#if defined(HAVE_LEFDEF)
string libraryName = "symbolic";
set cells;
@@ -751,7 +751,7 @@ namespace CRL {
void LefExport::drive ( Library* library, unsigned int flags )
{
-#ifdef HAVE_LEFDEF
+#if defined(HAVE_LEFDEF)
string libraryName = "symbolic";
set cells;
diff --git a/crlcore/src/ccore/lefdef/LefParser.cpp b/crlcore/src/ccore/lefdef/LefParser.cpp
index f356703e..31dbae49 100644
--- a/crlcore/src/ccore/lefdef/LefParser.cpp
+++ b/crlcore/src/ccore/lefdef/LefParser.cpp
@@ -26,7 +26,7 @@
#include "hurricane/Cell.h"
#include "crlcore/AllianceFramework.h"
#include "LefDef.h"
-#if HAVE_LEFDEF && defined(LEF_ENABLED)
+#if defined(HAVE_LEFDEF) && defined(LEF_ENABLED)
# include "lefrReader.hpp"
#endif
@@ -102,7 +102,7 @@ namespace CRL {
// x-----------------------------------------------------------------x
-# if HAVE_LEFDEF && defined(LEF_ENABLED)
+# if defined(HAVE_LEFDEF) && defined(LEF_ENABLED)
// -------------------------------------------------------------------
// Function : "badOpenTechno()".
@@ -609,7 +609,7 @@ void lefParser ( const string libPath, Library* library, Catalog& catalog )
{
static int callNumber = 0;
-# if HAVE_LEFDEF && defined(LEF_ENABLED)
+#if defined(HAVE_LEFDEF) && defined(LEF_ENABLED)
if ( !library )
throw Error ( "lefParser() : Library argument is NULL." );
@@ -633,9 +633,9 @@ void lefParser ( const string libPath, Library* library, Catalog& catalog )
clibrary.open ( "r" );
lefrRead ( clibrary.getFile(), getString(&clibrary).c_str(), (void*)userData );
clibrary.close ();
-# else // HAVE_LEFDEF
+#else // HAVE_LEFDEF
cerr << Warning("Dummy LEF parser call for %s.",libPath.c_str()) << endl;
-# endif // HAVE_LEFDEF
+#endif // HAVE_LEFDEF
callNumber++;
}
@@ -647,7 +647,7 @@ void CParsLEFTechno ( string fileTechno )
{
static int callNumber = 0;
-# if HAVE_LEFDEF && defined(LEF_ENABLED)
+# if defined(HAVE_LEFDEF) && defined(LEF_ENABLED)
string nameTechno = fileTechno;
nameTechno.erase ( 0, nameTechno.find_last_of ("/")+1 );
@@ -682,9 +682,9 @@ void CParsLEFTechno ( string fileTechno )
throw ( Error("CParsLEFTechno() : Can't open file %s", fileTechno.c_str()) );
lefrRead(inLefFile, fileTechno.c_str(), (void*)(long)userData);
-# else // HAVE_LEFDEF
+#else // HAVE_LEFDEF
cerr << Warning("Dummy LEF technology parser call for \"%s\".",fileTechno.c_str()) << endl;
-# endif // HAVE_LEFDEF
+#endif // HAVE_LEFDEF
callNumber++;
}
diff --git a/lefdef/CMakeLists.txt b/lefdef/CMakeLists.txt
new file mode 100644
index 00000000..295a68e9
--- /dev/null
+++ b/lefdef/CMakeLists.txt
@@ -0,0 +1,25 @@
+# -*- mode: CMAKE explicit-buffer-name: "CMakeLists.txt" -*-
+
+ set(CMAKE_LEGACY_CYGWIN_WIN32 0)
+ project(LEFDEF)
+
+ cmake_minimum_required(VERSION 2.8.9)
+
+ list(INSERT CMAKE_MODULE_PATH 0 "${DESTDIR}$ENV{CORIOLIS_TOP}/share/cmake/Modules/")
+ find_package(Bootstrap REQUIRED)
+ setup_project_paths(CORIOLIS)
+ list(INSERT CMAKE_MODULE_PATH 0 "${CRLCORE_SOURCE_DIR}/cmake_modules/")
+ print_cmake_module_path()
+
+ set_cmake_policies()
+ set_lib_link_mode()
+ setup_sysconfdir("${CMAKE_INSTALL_PREFIX}")
+
+ find_package(BISON REQUIRED)
+ find_package(FLEX REQUIRED)
+
+ add_subdirectory(src)
+
+ if(BUILD_DOC)
+ add_subdirectory(doc)
+ endif()
diff --git a/lefdef/doc/CMakeLists.txt b/lefdef/doc/CMakeLists.txt
new file mode 100644
index 00000000..afef31ef
--- /dev/null
+++ b/lefdef/doc/CMakeLists.txt
@@ -0,0 +1,14 @@
+# -*- mode: CMAKE explicit-buffer-name: "CMakeLists.txt" -*-
+
+ set ( htmlInstallDir share/doc/coriolis2/en/html )
+ set ( latexInstallDir share/doc/coriolis2/en/pdf )
+ set ( pdfInstallDir share/doc/coriolis2/en/pdf )
+
+ install ( DIRECTORY support
+ lefapi
+ defapi
+ lefdefref DESTINATION ${htmlInstallDir}/lefdef )
+ install ( FILES lefapi/lefapi.pdf
+ defapi/defapi.pdf
+ lefdefref/lefdefref.pdf DESTINATION ${pdfInstallDir}/lefdef )
+
diff --git a/lefdef/doc/defapi/appA_DEFexamples.html b/lefdef/doc/defapi/appA_DEFexamples.html
new file mode 100644
index 00000000..fe3991f3
--- /dev/null
+++ b/lefdef/doc/defapi/appA_DEFexamples.html
@@ -0,0 +1,14778 @@
+
+
+
+
+ DEF 5.8 C/C++ Programming Interface -- A
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ |
+
+
+
+
+ |
+
+
+ |
+
+
+
+ |
+
+
+ |
+
+
+ |
+
+
+
+
+ |
+
+
+ |
+
+
+ |
+
+
+ |
+
+
+ |
+
+
+ |
+
+
+
+
+
+
+
+
+
+ DEF 5.8 C/C++ Programming Interface (Open Licensing Program)
+
+
+
+
+
+
+
+ | |
+
+
A
+
+
This appendix contains examples of the Cadence® Design Exchange Format (DEF) reader and writer.
+
+
+
+
+ #include <stdlib.h>
+
+
+ #include <stdio.h>
+
+
+ #include <string.h>
+
+
+ #include <time.h>
+
+
+ #ifndef WIN32
+
+
+ # include <unistd.h>
+
+
+ #endif /* not WIN32 */
+
+
+ #include "defrReader.hpp"
+
+
+ #include "defiAlias.hpp"
+
+
+
+
+
+ char defaultName[64];
+
+
+ char defaultOut[64];
+
+
+
+
+
+ // Global variables
+
+
+ FILE* fout;
+
+
+ int userData;
+
+
+ int numObjs;
+
+
+ int isSumSet; // to keep track if within SUM
+
+
+ int isProp = 0; // for PROPERTYDEFINITIONS
+
+
+ int begOperand; // to keep track for constraint, to print - as the 1st char
+
+
+ static double curVer = 0;
+
+
+ static int setSNetWireCbk = 0;
+
+
+
+
+
+ // TX_DIR:TRANSLATION ON
+
+
+
+
+
+ void myLogFunction(const char* errMsg){
+
+
+ fprintf(fout, "ERROR: found error: %s\n", errMsg);
+
+
+ }
+
+
+
+
+
+ void myWarningLogFunction(const char* errMsg){
+
+
+ fprintf(fout, "WARNING: found error: %s\n", errMsg);
+
+
+ }
+
+
+
+
+
+ void dataError() {
+
+
+ fprintf(fout, "ERROR: returned user data is not correct!\n");
+
+
+ }
+
+
+
+
+
+ void checkType(defrCallbackType_e c) {
+
+
+ if (c >= 0 && c <= defrDesignEndCbkType) {
+
+
+ // OK
+
+
+ } else {
+
+
+ fprintf(fout, "ERROR: callback type is out of bounds!\n");
+
+
+ }
+
+
+ }
+
+
+
+
+
+
+
+
+ int done(defrCallbackType_e c, void* dummy, defiUserData ud) {
+
+
+ checkType(c);
+
+
+ if ((long)ud != userData) dataError();
+
+
+ fprintf(fout, "END DESIGN\n");
+
+
+ return 0;
+
+
+ }
+
+
+
+
+
+ int endfunc(defrCallbackType_e c, void* dummy, defiUserData ud) {
+
+
+ checkType(c);
+
+
+ if ((long)ud != userData) dataError();
+
+
+ return 0;
+
+
+ }
+
+
+
+
+
+
+
+
+ char* orientStr(int orient) {
+
+
+ switch (orient) {
+
+
+ case 0: return ((char*)"N");
+
+
+ case 1: return ((char*)"W");
+
+
+ case 2: return ((char*)"S");
+
+
+ case 3: return ((char*)"E");
+
+
+ case 4: return ((char*)"FN");
+
+
+ case 5: return ((char*)"FW");
+
+
+ case 6: return ((char*)"FS");
+
+
+ case 7: return ((char*)"FE");
+
+
+ };
+
+
+ return ((char*)"BOGUS");
+
+
+ }
+
+
+
+
+
+
+
+
+ int compf(defrCallbackType_e c, defiComponent* co, defiUserData ud) {
+
+
+ int i;
+
+
+
+
+
+ checkType(c);
+
+
+ if ((long)ud != userData) dataError();
+
+
+ fprintf(fout, "- %s %s ", co->defiComponent::id(),
+
+
+ co->defiComponent::name());
+
+
+ if (co->defiComponent::hasNets()) {
+
+
+ for (i = 0; i < co->defiComponent::numNets(); i++)
+
+
+ fprintf(fout, "%s ", co->defiComponent::net(i));
+
+
+ }
+
+
+ if (co->defiComponent::isFixed())
+
+
+ fprintf(fout, "+ FIXED %d %d %s ",
+
+
+ co->defiComponent::placementX(),
+
+
+ co->defiComponent::placementY(),
+
+
+ //orientStr(co->defiComponent::placementOrient()));
+
+
+ co->defiComponent::placementOrientStr());
+
+
+ if (co->defiComponent::isCover())
+
+
+ fprintf(fout, "+ COVER %d %d %s ",
+
+
+ co->defiComponent::placementX(),
+
+
+ co->defiComponent::placementY(),
+
+
+ orientStr(co->defiComponent::placementOrient()));
+
+
+ if (co->defiComponent::isPlaced())
+
+
+ fprintf(fout,"+ PLACED %d %d %s ",
+
+
+ co->defiComponent::placementX(),
+
+
+ co->defiComponent::placementY(),
+
+
+ orientStr(co->defiComponent::placementOrient()));
+
+
+ if (co->defiComponent::isUnplaced()) {
+
+
+ fprintf(fout,"+ UNPLACED ");
+
+
+ if ((co->defiComponent::placementX() != -1) ||
+
+
+ (co->defiComponent::placementY() != -1))
+
+
+ fprintf(fout,"%d %d %s ",
+
+
+ co->defiComponent::placementX(),
+
+
+ co->defiComponent::placementY(),
+
+
+ orientStr(co->defiComponent::placementOrient()));
+
+
+ }
+
+
+ if (co->defiComponent::hasSource())
+
+
+ fprintf(fout, "+ SOURCE %s ", co->defiComponent::source());
+
+
+ if (co->defiComponent::hasGenerate()) {
+
+
+ fprintf(fout, "+ GENERATE %s ", co->defiComponent::generateName());
+
+
+ if (co->defiComponent::macroName() &&
+
+
+ *(co->defiComponent::macroName()))
+
+
+ fprintf(fout, "%s ", co->defiComponent::macroName());
+
+
+ }
+
+
+ if (co->defiComponent::hasWeight())
+
+
+ fprintf(fout, "+ WEIGHT %d ", co->defiComponent::weight());
+
+
+ if (co->defiComponent::hasEEQ())
+
+
+ fprintf(fout, "+ EEQMASTER %s ", co->defiComponent::EEQ());
+
+
+ if (co->defiComponent::hasRegionName())
+
+
+ fprintf(fout, "+ REGION %s ", co->defiComponent::regionName());
+
+
+ if (co->defiComponent::hasRegionBounds()) {
+
+
+ int *xl, *yl, *xh, *yh;
+
+
+ int size;
+
+
+ co->defiComponent::regionBounds(&size, &xl, &yl, &xh, &yh);
+
+
+ for (i = 0; i < size; i++) {
+
+
+ fprintf(fout, "+ REGION %d %d %d %d \n",
+
+
+ xl[i], yl[i], xh[i], yh[i]);
+
+
+ }
+
+
+ }
+
+
+ if (co->defiComponent::hasHalo()) {
+
+
+ int left, bottom, right, top;
+
+
+ (void) co->defiComponent::haloEdges(&left, &bottom, &right, &top);
+
+
+ fprintf(fout, "+ HALO ");
+
+
+ if (co->defiComponent::hasHaloSoft())
+
+
+ fprintf(fout, "SOFT ");
+
+
+ fprintf(fout, "%d %d %d %d\n", left, bottom, right, top);
+
+
+ }
+
+
+ if (co->defiComponent::hasRouteHalo()) {
+
+
+ fprintf(fout, "+ ROUTEHALO %d %s %s\n", co->defiComponent::haloDist(),
+
+
+ co->defiComponent::minLayer(), co->defiComponent::maxLayer());
+
+
+ }
+
+
+ if (co->defiComponent::hasForeignName()) {
+
+
+ fprintf(fout, "+ FOREIGN %s %d %d %s %d ",
+
+
+ co->defiComponent::foreignName(), co->defiComponent::foreignX(),
+
+
+ co->defiComponent::foreignY(), co->defiComponent::foreignOri(),
+
+
+ co->defiComponent::foreignOrient());
+
+
+ }
+
+
+ if (co->defiComponent::numProps()) {
+
+
+ for (i = 0; i < co->defiComponent::numProps(); i++) {
+
+
+ fprintf(fout, "+ PROPERTY %s %s ", co->defiComponent::propName(i),
+
+
+ co->defiComponent::propValue(i));
+
+
+ switch (co->defiComponent::propType(i)) {
+
+
+ case 'R': fprintf(fout, "REAL ");
+
+
+ break;
+
+
+ case 'I': fprintf(fout, "INTEGER ");
+
+
+ break;
+
+
+ case 'S': fprintf(fout, "STRING ");
+
+
+ break;
+
+
+ case 'Q': fprintf(fout, "QUOTESTRING ");
+
+
+ break;
+
+
+ case 'N': fprintf(fout, "NUMBER ");
+
+
+ break;
+
+
+ }
+
+
+ }
+
+
+ }
+
+
+ fprintf(fout, ";\n");
+
+
+ --numObjs;
+
+
+ if (numObjs <= 0)
+
+
+ fprintf(fout, "END COMPONENTS\n");
+
+
+ return 0;
+
+
+ }
+
+
+
+
+
+
+
+
+ int netpath(defrCallbackType_e c, defiNet* ppath, defiUserData ud) {
+
+
+ fprintf(fout, "\n");
+
+
+
+
+
+ fprintf (fout, "Callback of partial path for net\n");
+
+
+
+
+
+ return 0;
+
+
+ }
+
+
+
+
+
+
+
+
+ int netNamef(defrCallbackType_e c, const char* netName, defiUserData ud) {
+
+
+ checkType(c);
+
+
+ if ((long)ud != userData) dataError();
+
+
+ fprintf(fout, "- %s ", netName);
+
+
+ return 0;
+
+
+ }
+
+
+
+
+
+ int subnetNamef(defrCallbackType_e c, const char* subnetName, defiUserData ud) {
+
+
+ checkType(c);
+
+
+ if ((long)ud != userData) dataError();
+
+
+ if (curVer >= 5.6)
+
+
+ fprintf(fout, " + SUBNET CBK %s ", subnetName);
+
+
+ return 0;
+
+
+ }
+
+
+
+
+
+ int nondefRulef(defrCallbackType_e c, const char* ruleName, defiUserData ud) {
+
+
+ checkType(c);
+
+
+ if ((long)ud != userData) dataError();
+
+
+ if (curVer >= 5.6)
+
+
+ fprintf(fout, " + NONDEFAULTRULE CBK %s ", ruleName);
+
+
+ return 0;
+
+
+ }
+
+
+
+
+
+ int netf(defrCallbackType_e c, defiNet* net, defiUserData ud) {
+
+
+ // For net and special net.
+
+
+ int i, j, k, x, y, z, count, newLayer;
+
+
+ defiPath* p;
+
+
+ defiSubnet *s;
+
+
+ int path;
+
+
+ defiVpin *vpin;
+
+
+ // defiShield *noShield;
+
+
+ defiWire *wire;
+
+
+
+
+
+ checkType(c);
+
+
+ if ((long)ud != userData) dataError();
+
+
+ if (c != defrNetCbkType)
+
+
+ fprintf(fout, "BOGUS NET TYPE ");
+
+
+ if (net->defiNet::pinIsMustJoin(0))
+
+
+ fprintf(fout, "- MUSTJOIN ");
+
+
+
+
+
+ // compName & pinName
+
+
+ for (i = 0; i < net->defiNet::numConnections(); i++) {
+
+
+ // set the limit of only 5 items per line
+
+
+ count++;
+
+
+ if (count >= 5) {
+
+
+ fprintf(fout, "\n");
+
+
+ count = 0;
+
+
+ }
+
+
+ fprintf(fout, "( %s %s ) ", net->defiNet::instance(i),
+
+
+ net->defiNet::pin(i));
+
+
+ if (net->defiNet::pinIsSynthesized(i))
+
+
+ fprintf(fout, "+ SYNTHESIZED ");
+
+
+ }
+
+
+
+
+
+ if (net->hasNonDefaultRule())
+
+
+ fprintf(fout, "+ NONDEFAULTRULE %s\n", net->nonDefaultRule());
+
+
+
+
+
+ for (i = 0; i < net->defiNet::numVpins(); i++) {
+
+
+ vpin = net->defiNet::vpin(i);
+
+
+ fprintf(fout, " + %s", vpin->name());
+
+
+ if (vpin->layer())
+
+
+ fprintf(fout, " %s", vpin->layer());
+
+
+ fprintf(fout, " %d %d %d %d", vpin->xl(), vpin->yl(), vpin->xh(),
+
+
+ vpin->yh());
+
+
+ if (vpin->status() != ' ') {
+
+
+ fprintf(fout, " %c", vpin->status());
+
+
+ fprintf(fout, " %d %d", vpin->xLoc(), vpin->yLoc());
+
+
+ if (vpin->orient() != -1)
+
+
+ fprintf(fout, " %s", orientStr(vpin->orient()));
+
+
+ }
+
+
+ fprintf(fout, "\n");
+
+
+ }
+
+
+
+
+
+ // regularWiring
+
+
+ if (net->defiNet::numWires()) {
+
+
+ for (i = 0; i < net->defiNet::numWires(); i++) {
+
+
+ newLayer = 0;
+
+
+ wire = net->defiNet::wire(i);
+
+
+ fprintf(fout, "\n + %s ", wire->wireType());
+
+
+ count = 0;
+
+
+ for (j = 0; j < wire->defiWire::numPaths(); j++) {
+
+
+ p = wire->defiWire::path(j);
+
+
+ p->initTraverse();
+
+
+ while ((path = (int)p->defiPath::next()) != DEFIPATH_DONE) {
+
+
+ count++;
+
+
+ // Don't want the line to be too long
+
+
+ if (count >= 5) {
+
+
+ fprintf(fout, "\n");
+
+
+ count = 0;
+
+
+ }
+
+
+ switch (path) {
+
+
+ case DEFIPATH_LAYER:
+
+
+ if (newLayer == 0) {
+
+
+ fprintf(fout, "%s ", p->defiPath::getLayer());
+
+
+ newLayer = 1;
+
+
+ } else
+
+
+ fprintf(fout, "NEW %s ", p->defiPath::getLayer());
+
+
+ break;
+
+
+ case DEFIPATH_VIA:
+
+
+ fprintf(fout, "%s ", p->defiPath::getVia());
+
+
+ break;
+
+
+ case DEFIPATH_VIAROTATION:
+
+
+ fprintf(fout, "%s ",
+
+
+ orientStr(p->defiPath::getViaRotation()));
+
+
+ break;
+
+
+ case DEFIPATH_WIDTH:
+
+
+ fprintf(fout, "%d ", p->defiPath::getWidth());
+
+
+ break;
+
+
+ case DEFIPATH_POINT:
+
+
+ p->defiPath::getPoint(&x, &y);
+
+
+ fprintf(fout, "( %d %d ) ", x, y);
+
+
+ break;
+
+
+ case DEFIPATH_FLUSHPOINT:
+
+
+ p->defiPath::getFlushPoint(&x, &y, &z);
+
+
+ fprintf(fout, "( %d %d %d ) ", x, y, z);
+
+
+ break;
+
+
+ case DEFIPATH_TAPER:
+
+
+ fprintf(fout, "TAPER ");
+
+
+ break;
+
+
+ case DEFIPATH_TAPERRULE:
+
+
+ fprintf(fout, "TAPERRULE %s ",p->defiPath::getTaperRule());
+
+
+ break;
+
+
+ case DEFIPATH_STYLE:
+
+
+ fprintf(fout, "STYLE %d ",p->defiPath::getStyle());
+
+
+ break;
+
+
+ }
+
+
+ }
+
+
+ }
+
+
+ fprintf(fout, "\n");
+
+
+ count = 0;
+
+
+ }
+
+
+ }
+
+
+
+
+
+ // SHIELDNET
+
+
+ if (net->defiNet::numShieldNets()) {
+
+
+ for (i = 0; i < net->defiNet::numShieldNets(); i++)
+
+
+ fprintf(fout, "\n + SHIELDNET %s", net->defiNet::shieldNet(i));
+
+
+ }
+
+
+
+
+
+ if (net->defiNet::hasSubnets()) {
+
+
+ for (i = 0; i < net->defiNet::numSubnets(); i++) {
+
+
+ s = net->defiNet::subnet(i);
+
+
+ fprintf(fout, "\n");
+
+
+
+
+
+ if (s->defiSubnet::numConnections()) {
+
+
+ if (s->defiSubnet::pinIsMustJoin(0))
+
+
+ fprintf(fout, "- MUSTJOIN ");
+
+
+ else
+
+
+ fprintf(fout, " + SUBNET %s ", s->defiSubnet::name());
+
+
+ for (j = 0; j < s->defiSubnet::numConnections(); j++)
+
+
+ fprintf(fout, " ( %s %s )\n", s->defiSubnet::instance(j),
+
+
+ s->defiSubnet::pin(j));
+
+
+
+
+
+ // regularWiring
+
+
+ if (s->defiSubnet::numWires()) {
+
+
+ for (k = 0; k < s->defiSubnet::numWires(); k++) {
+
+
+ newLayer = 0;
+
+
+ wire = s->defiSubnet::wire(k);
+
+
+ fprintf(fout, " %s ", wire->wireType());
+
+
+ count = 0;
+
+
+ for (j = 0; j < wire->defiWire::numPaths(); j++) {
+
+
+ p = wire->defiWire::path(j);
+
+
+ p->initTraverse();
+
+
+ while ((path = (int)p->defiPath::next()) != DEFIPATH_DONE) {
+
+
+ count++;
+
+
+ // Don't want the line to be too long
+
+
+ if (count >= 5) {
+
+
+ fprintf(fout, "\n");
+
+
+ count = 0;
+
+
+ }
+
+
+ switch (path) {
+
+
+ case DEFIPATH_LAYER:
+
+
+ if (newLayer == 0) {
+
+
+ fprintf(fout, "%s ", p->defiPath::getLayer());
+
+
+ newLayer = 1;
+
+
+ } else
+
+
+ fprintf(fout, "NEW %s ",
+
+
+ p->defiPath::getLayer());
+
+
+ break;
+
+
+ case DEFIPATH_VIA:
+
+
+ fprintf(fout, "%s ", p->defiPath::getVia());
+
+
+ break;
+
+
+ case DEFIPATH_VIAROTATION:
+
+
+ fprintf(fout, "%s ",
+
+
+ p->defiPath::getViaRotationStr());
+
+
+ break;
+
+
+ case DEFIPATH_WIDTH:
+
+
+ fprintf(fout, "%d ", p->defiPath::getWidth());
+
+
+ break;
+
+
+ case DEFIPATH_POINT:
+
+
+ p->defiPath::getPoint(&x, &y);
+
+
+ fprintf(fout, "( %d %d ) ", x, y);
+
+
+ break;
+
+
+ case DEFIPATH_FLUSHPOINT:
+
+
+ p->defiPath::getFlushPoint(&x, &y, &z);
+
+
+ fprintf(fout, "( %d %d %d ) ", x, y, z);
+
+
+ break;
+
+
+ case DEFIPATH_TAPER:
+
+
+ fprintf(fout, "TAPER ");
+
+
+ break;
+
+
+ case DEFIPATH_TAPERRULE:
+
+
+ fprintf(fout, "TAPERRULE %s ",
+
+
+ p->defiPath::getTaperRule());
+
+
+ break;
+
+
+ case DEFIPATH_STYLE:
+
+
+ fprintf(fout, "STYLE %d ",
+
+
+ p->defiPath::getStyle());
+
+
+ break;
+
+
+ }
+
+
+ }
+
+
+ }
+
+
+ }
+
+
+ }
+
+
+ }
+
+
+ }
+
+
+ }
+
+
+
+
+
+ if (net->defiNet::numProps()) {
+
+
+ for (i = 0; i < net->defiNet::numProps(); i++) {
+
+
+ fprintf(fout, " + PROPERTY %s ", net->defiNet::propName(i));
+
+
+ switch (net->defiNet::propType(i)) {
+
+
+ case 'R': fprintf(fout, "%g REAL ", net->defiNet::propNumber(i));
+
+
+ break;
+
+
+ case 'I': fprintf(fout, "%g INTEGER ", net->defiNet::propNumber(i));
+
+
+ break;
+
+
+ case 'S': fprintf(fout, "%s STRING ", net->defiNet::propValue(i));
+
+
+ break;
+
+
+ case 'Q': fprintf(fout, "%s QUOTESTRING ", net->defiNet::propValue(i));
+
+
+ break;
+
+
+ case 'N': fprintf(fout, "%g NUMBER ", net->defiNet::propNumber(i));
+
+
+ break;
+
+
+ }
+
+
+ fprintf(fout, "\n");
+
+
+ }
+
+
+ }
+
+
+
+
+
+ if (net->defiNet::hasWeight())
+
+
+ fprintf(fout, "+ WEIGHT %d ", net->defiNet::weight());
+
+
+ if (net->defiNet::hasCap())
+
+
+ fprintf(fout, "+ ESTCAP %g ", net->defiNet::cap());
+
+
+ if (net->defiNet::hasSource())
+
+
+ fprintf(fout, "+ SOURCE %s ", net->defiNet::source());
+
+
+ if (net->defiNet::hasFixedbump())
+
+
+ fprintf(fout, "+ FIXEDBUMP ");
+
+
+ if (net->defiNet::hasFrequency())
+
+
+ fprintf(fout, "+ FREQUENCY %g ", net->defiNet::frequency());
+
+
+ if (net->defiNet::hasPattern())
+
+
+ fprintf(fout, "+ PATTERN %s ", net->defiNet::pattern());
+
+
+ if (net->defiNet::hasOriginal())
+
+
+ fprintf(fout, "+ ORIGINAL %s ", net->defiNet::original());
+
+
+ if (net->defiNet::hasUse())
+
+
+ fprintf(fout, "+ USE %s ", net->defiNet::use());
+
+
+
+
+
+ fprintf (fout, ";\n");
+
+
+ --numObjs;
+
+
+ if (numObjs <= 0)
+
+
+ fprintf(fout, "END NETS\n");
+
+
+ return 0;
+
+
+ }
+
+
+
+
+
+
+
+
+ int snetpath(defrCallbackType_e c, defiNet* ppath, defiUserData ud) {
+
+
+ int i, j, x, y, z, count, newLayer;
+
+
+ char* layerName;
+
+
+ double dist, left, right;
+
+
+ defiPath* p;
+
+
+ defiSubnet *s;
+
+
+ int path;
+
+
+ defiShield* shield;
+
+
+ defiWire* wire;
+
+
+ int numX, numY, stepX, stepY;
+
+
+
+
+
+ if (c != defrSNetPartialPathCbkType)
+
+
+ return 1;
+
+
+ if ((long)ud != userData) dataError();
+
+
+
+
+
+ fprintf (fout, "SPECIALNET partial data\n");
+
+
+
+
+
+ fprintf(fout, "- %s ", ppath->defiNet::name());
+
+
+
+
+
+ count = 0;
+
+
+ // compName & pinName
+
+
+ for (i = 0; i < ppath->defiNet::numConnections(); i++) {
+
+
+ // set the limit of only 5 items print out in one line
+
+
+ count++;
+
+
+ if (count >= 5) {
+
+
+ fprintf(fout, "\n");
+
+
+ count = 0;
+
+
+ }
+
+
+ fprintf (fout, "( %s %s ) ", ppath->defiNet::instance(i),
+
+
+ ppath->defiNet::pin(i));
+
+
+ if (ppath->defiNet::pinIsSynthesized(i))
+
+
+ fprintf(fout, "+ SYNTHESIZED ");
+
+
+ }
+
+
+
+
+
+ // specialWiring
+
+
+ // POLYGON
+
+
+ if (ppath->defiNet::numPolygons()) {
+
+
+ struct defiPoints points;
+
+
+ for (i = 0; i < ppath->defiNet::numPolygons(); i++) {
+
+
+ fprintf(fout, "\n + POLYGON %s ", ppath->polygonName(i));
+
+
+ points = ppath->getPolygon(i);
+
+
+ for (j = 0; j < points.numPoints; j++)
+
+
+ fprintf(fout, "%d %d ", points.x[j], points.y[j]);
+
+
+ }
+
+
+ }
+
+
+ // RECT
+
+
+ if (ppath->defiNet::numRectangles()) {
+
+
+ for (i = 0; i < ppath->defiNet::numRectangles(); i++) {
+
+
+ fprintf(fout, "\n + RECT %s %d %d %d %d", ppath->defiNet::rectName(i),
+
+
+ ppath->defiNet::xl(i), ppath->defiNet::yl(i),
+
+
+ ppath->defiNet::xh(i), ppath->defiNet::yh(i));
+
+
+ }
+
+
+ }
+
+
+
+
+
+ // COVER, FIXED, ROUTED or SHIELD
+
+
+ if (ppath->defiNet::numWires()) {
+
+
+ newLayer = 0;
+
+
+ for (i = 0; i < ppath->defiNet::numWires(); i++) {
+
+
+ newLayer = 0;
+
+
+ wire = ppath->defiNet::wire(i);
+
+
+ fprintf(fout, "\n + %s ", wire->wireType());
+
+
+ if (strcmp (wire->wireType(), "SHIELD") == 0)
+
+
+ fprintf(fout, "%s ", wire->wireShieldNetName());
+
+
+ for (j = 0; j < wire->defiWire::numPaths(); j++) {
+
+
+ p = wire->defiWire::path(j);
+
+
+ p->initTraverse();
+
+
+ while ((path = (int)p->defiPath::next()) != DEFIPATH_DONE) {
+
+
+ count++;
+
+
+ // Don't want the line to be too long
+
+
+ if (count >= 5) {
+
+
+ fprintf(fout, "\n");
+
+
+ count = 0;
+
+
+ }
+
+
+ switch (path) {
+
+
+ case DEFIPATH_LAYER:
+
+
+ if (newLayer == 0) {
+
+
+ fprintf(fout, "%s ", p->defiPath::getLayer());
+
+
+ newLayer = 1;
+
+
+ } else
+
+
+ fprintf(fout, "NEW %s ", p->defiPath::getLayer());
+
+
+ break;
+
+
+ case DEFIPATH_VIA:
+
+
+ fprintf(fout, "%s ", p->defiPath::getVia());
+
+
+ break;
+
+
+ case DEFIPATH_VIAROTATION:
+
+
+ fprintf(fout, "%s ",
+
+
+ orientStr(p->defiPath::getViaRotation()));
+
+
+ break;
+
+
+ case DEFIPATH_VIADATA:
+
+
+ p->defiPath::getViaData(&numX, &numY, &stepX, &stepY);
+
+
+ fprintf(fout, "DO %d BY %d STEP %d %d ", numX, numY,
+
+
+ stepX, stepY);
+
+
+ break;
+
+
+ case DEFIPATH_WIDTH:
+
+
+ fprintf(fout, "%d ", p->defiPath::getWidth());
+
+
+ break;
+
+
+ case DEFIPATH_POINT:
+
+
+ p->defiPath::getPoint(&x, &y);
+
+
+ fprintf(fout, "( %d %d ) ", x, y);
+
+
+ break;
+
+
+ case DEFIPATH_FLUSHPOINT:
+
+
+ p->defiPath::getFlushPoint(&x, &y, &z);
+
+
+ fprintf(fout, "( %d %d %d ) ", x, y, z);
+
+
+ break;
+
+
+ case DEFIPATH_TAPER:
+
+
+ fprintf(fout, "TAPER ");
+
+
+ break;
+
+
+ case DEFIPATH_SHAPE:
+
+
+ fprintf(fout, "+ SHAPE %s ", p->defiPath::getShape());
+
+
+ break;
+
+
+ case DEFIPATH_STYLE:
+
+
+ fprintf(fout, "+ STYLE %d ", p->defiPath::getStyle());
+
+
+ break;
+
+
+ }
+
+
+ }
+
+
+ }
+
+
+ fprintf(fout, "\n");
+
+
+ count = 0;
+
+
+ }
+
+
+ }
+
+
+
+
+
+ if (ppath->defiNet::hasSubnets()) {
+
+
+ for (i = 0; i < ppath->defiNet::numSubnets(); i++) {
+
+
+ s = ppath->defiNet::subnet(i);
+
+
+ if (s->defiSubnet::numConnections()) {
+
+
+ if (s->defiSubnet::pinIsMustJoin(0))
+
+
+ fprintf(fout, "- MUSTJOIN ");
+
+
+ else
+
+
+ fprintf(fout, "- %s ", s->defiSubnet::name());
+
+
+ for (j = 0; j < s->defiSubnet::numConnections(); j++) {
+
+
+ fprintf(fout, " ( %s %s )\n", s->defiSubnet::instance(j),
+
+
+ s->defiSubnet::pin(j));
+
+
+ }
+
+
+ }
+
+
+
+
+
+ // regularWiring
+
+
+ if (s->defiSubnet::numWires()) {
+
+
+ for (i = 0; i < s->defiSubnet::numWires(); i++) {
+
+
+ wire = s->defiSubnet::wire(i);
+
+
+ fprintf(fout, " + %s ", wire->wireType());
+
+
+ for (j = 0; j < wire->defiWire::numPaths(); j++) {
+
+
+ p = wire->defiWire::path(j);
+
+
+ p->defiPath::print(fout);
+
+
+ }
+
+
+ }
+
+
+ }
+
+
+ }
+
+
+ }
+
+
+
+
+
+ if (ppath->defiNet::numProps()) {
+
+
+ for (i = 0; i < ppath->defiNet::numProps(); i++) {
+
+
+ if (ppath->defiNet::propIsString(i))
+
+
+ fprintf(fout, " + PROPERTY %s %s ", ppath->defiNet::propName(i),
+
+
+ ppath->defiNet::propValue(i));
+
+
+ if (ppath->defiNet::propIsNumber(i))
+
+
+ fprintf(fout, " + PROPERTY %s %g ", ppath->defiNet::propName(i),
+
+
+ ppath->defiNet::propNumber(i));
+
+
+ switch (ppath->defiNet::propType(i)) {
+
+
+ case 'R': fprintf(fout, "REAL ");
+
+
+ break;
+
+
+ case 'I': fprintf(fout, "INTEGER ");
+
+
+ break;
+
+
+ case 'S': fprintf(fout, "STRING ");
+
+
+ break;
+
+
+ case 'Q': fprintf(fout, "QUOTESTRING ");
+
+
+ break;
+
+
+ case 'N': fprintf(fout, "NUMBER ");
+
+
+ break;
+
+
+ }
+
+
+ fprintf(fout, "\n");
+
+
+ }
+
+
+ }
+
+
+
+
+
+ // SHIELD
+
+
+ count = 0;
+
+
+ // testing the SHIELD for 5.3, obsolete in 5.4
+
+
+ if (ppath->defiNet::numShields()) {
+
+
+ for (i = 0; i < ppath->defiNet::numShields(); i++) {
+
+
+ shield = ppath->defiNet::shield(i);
+
+
+ fprintf(fout, "\n + SHIELD %s ", shield->defiShield::shieldName());
+
+
+ newLayer = 0;
+
+
+ for (j = 0; j < shield->defiShield::numPaths(); j++) {
+
+
+ p = shield->defiShield::path(j);
+
+
+ p->initTraverse();
+
+
+ while ((path = (int)p->defiPath::next()) != DEFIPATH_DONE) {
+
+
+ count++;
+
+
+ // Don't want the line to be too long
+
+
+ if (count >= 5) {
+
+
+ fprintf(fout, "\n");
+
+
+ count = 0;
+
+
+ }
+
+
+ switch (path) {
+
+
+ case DEFIPATH_LAYER:
+
+
+ if (newLayer == 0) {
+
+
+ fprintf(fout, "%s ", p->defiPath::getLayer());
+
+
+ newLayer = 1;
+
+
+ } else
+
+
+ fprintf(fout, "NEW %s ", p->defiPath::getLayer());
+
+
+ break;
+
+
+ case DEFIPATH_VIA:
+
+
+ fprintf(fout, "%s ", p->defiPath::getVia());
+
+
+ break;
+
+
+ case DEFIPATH_VIAROTATION:
+
+
+ if (newLayer)
+
+
+ fprintf(fout, "%s ",
+
+
+ orientStr(p->defiPath::getViaRotation()));
+
+
+ else
+
+
+ fprintf(fout, "Str %s ",
+
+
+ p->defiPath::getViaRotationStr());
+
+
+ break;
+
+
+ case DEFIPATH_WIDTH:
+
+
+ fprintf(fout, "%d ", p->defiPath::getWidth());
+
+
+ break;
+
+
+ case DEFIPATH_POINT:
+
+
+ p->defiPath::getPoint(&x, &y);
+
+
+ fprintf(fout, "( %d %d ) ", x, y);
+
+
+ break;
+
+
+ case DEFIPATH_FLUSHPOINT:
+
+
+ p->defiPath::getFlushPoint(&x, &y, &z);
+
+
+ fprintf(fout, "( %d %d %d ) ", x, y, z);
+
+
+ break;
+
+
+ case DEFIPATH_TAPER:
+
+
+ fprintf(fout, "TAPER ");
+
+
+ break;
+
+
+ case DEFIPATH_SHAPE:
+
+
+ fprintf(fout, "+ SHAPE %s ", p->defiPath::getShape());
+
+
+ break;
+
+
+ case DEFIPATH_STYLE:
+
+
+ fprintf(fout, "+ STYLE %d ", p->defiPath::getStyle());
+
+
+ }
+
+
+ }
+
+
+ }
+
+
+ }
+
+
+ }
+
+
+
+
+
+ // layerName width
+
+
+ if (ppath->defiNet::hasWidthRules()) {
+
+
+ for (i = 0; i < ppath->defiNet::numWidthRules(); i++) {
+
+
+ ppath->defiNet::widthRule(i, &layerName, &dist);
+
+
+ fprintf (fout, "\n + WIDTH %s %g ", layerName, dist);
+
+
+ }
+
+
+ }
+
+
+
+
+
+ // layerName spacing
+
+
+ if (ppath->defiNet::hasSpacingRules()) {
+
+
+ for (i = 0; i < ppath->defiNet::numSpacingRules(); i++) {
+
+
+ ppath->defiNet::spacingRule(i, &layerName, &dist, &left, &right);
+
+
+ if (left == right)
+
+
+ fprintf (fout, "\n + SPACING %s %g ", layerName, dist);
+
+
+ else
+
+
+ fprintf (fout, "\n + SPACING %s %g RANGE %g %g ",
+
+
+ layerName, dist, left, right);
+
+
+ }
+
+
+ }
+
+
+
+
+
+ if (ppath->defiNet::hasFixedbump())
+
+
+ fprintf(fout, "\n + FIXEDBUMP ");
+
+
+ if (ppath->defiNet::hasFrequency())
+
+
+ fprintf(fout, "\n + FREQUENCY %g ", ppath->defiNet::frequency());
+
+
+ if (ppath->defiNet::hasVoltage())
+
+
+ fprintf(fout, "\n + VOLTAGE %g ", ppath->defiNet::voltage());
+
+
+ if (ppath->defiNet::hasWeight())
+
+
+ fprintf(fout, "\n + WEIGHT %d ", ppath->defiNet::weight());
+
+
+ if (ppath->defiNet::hasCap())
+
+
+ fprintf(fout, "\n + ESTCAP %g ", ppath->defiNet::cap());
+
+
+ if (ppath->defiNet::hasSource())
+
+
+ fprintf(fout, "\n + SOURCE %s ", ppath->defiNet::source());
+
+
+ if (ppath->defiNet::hasPattern())
+
+
+ fprintf(fout, "\n + PATTERN %s ", ppath->defiNet::pattern());
+
+
+ if (ppath->defiNet::hasOriginal())
+
+
+ fprintf(fout, "\n + ORIGINAL %s ", ppath->defiNet::original());
+
+
+ if (ppath->defiNet::hasUse())
+
+
+ fprintf(fout, "\n + USE %s ", ppath->defiNet::use());
+
+
+
+
+
+ fprintf(fout, "\n");
+
+
+
+
+
+ return 0;
+
+
+ }
+
+
+
+
+
+
+
+
+ int snetwire(defrCallbackType_e c, defiNet* ppath, defiUserData ud) {
+
+
+ int i, j, x, y, z, count = 0, newLayer;
+
+
+ defiPath* p;
+
+
+ int path;
+
+
+ defiWire* wire;
+
+
+ defiShield* shield;
+
+
+ int numX, numY, stepX, stepY;
+
+
+
+
+
+ if (c != defrSNetWireCbkType)
+
+
+ return 1;
+
+
+ if ((long)ud != userData) dataError();
+
+
+
+
+
+ fprintf (fout, "SPECIALNET wire data\n");
+
+
+
+
+
+ fprintf(fout, "- %s ", ppath->defiNet::name());
+
+
+
+
+
+ // specialWiring
+
+
+ if (ppath->defiNet::numWires()) {
+
+
+ newLayer = 0;
+
+
+ for (i = 0; i < ppath->defiNet::numWires(); i++) {
+
+
+ newLayer = 0;
+
+
+ wire = ppath->defiNet::wire(i);
+
+
+ fprintf(fout, "\n + %s ", wire->wireType());
+
+
+ if (strcmp (wire->wireType(), "SHIELD") == 0)
+
+
+ fprintf(fout, "%s ", wire->wireShieldNetName());
+
+
+ for (j = 0; j < wire->defiWire::numPaths(); j++) {
+
+
+ p = wire->defiWire::path(j);
+
+
+ p->initTraverse();
+
+
+ while ((path = (int)p->defiPath::next()) != DEFIPATH_DONE) {
+
+
+ count++;
+
+
+ // Don't want the line to be too long
+
+
+ if (count >= 5) {
+
+
+ fprintf(fout, "\n");
+
+
+ count = 0;
+
+
+ }
+
+
+ switch (path) {
+
+
+ case DEFIPATH_LAYER:
+
+
+ if (newLayer == 0) {
+
+
+ fprintf(fout, "%s ", p->defiPath::getLayer());
+
+
+ newLayer = 1;
+
+
+ } else
+
+
+ fprintf(fout, "NEW %s ", p->defiPath::getLayer());
+
+
+ break;
+
+
+ case DEFIPATH_VIA:
+
+
+ fprintf(fout, "%s ", p->defiPath::getVia());
+
+
+ break;
+
+
+ case DEFIPATH_VIAROTATION:
+
+
+ fprintf(fout, "%s ",
+
+
+ orientStr(p->defiPath::getViaRotation()));
+
+
+ break;
+
+
+ case DEFIPATH_VIADATA:
+
+
+ p->defiPath::getViaData(&numX, &numY, &stepX, &stepY);
+
+
+ fprintf(fout, "DO %d BY %d STEP %d %d ", numX, numY,
+
+
+ stepX, stepY);
+
+
+ break;
+
+
+ case DEFIPATH_WIDTH:
+
+
+ fprintf(fout, "%d ", p->defiPath::getWidth());
+
+
+ break;
+
+
+ case DEFIPATH_POINT:
+
+
+ p->defiPath::getPoint(&x, &y);
+
+
+ fprintf(fout, "( %d %d ) ", x, y);
+
+
+ break;
+
+
+ case DEFIPATH_FLUSHPOINT:
+
+
+ p->defiPath::getFlushPoint(&x, &y, &z);
+
+
+ fprintf(fout, "( %d %d %d ) ", x, y, z);
+
+
+ break;
+
+
+ case DEFIPATH_TAPER:
+
+
+ fprintf(fout, "TAPER ");
+
+
+ break;
+
+
+ case DEFIPATH_SHAPE:
+
+
+ fprintf(fout, "+ SHAPE %s ", p->defiPath::getShape());
+
+
+ break;
+
+
+ case DEFIPATH_STYLE:
+
+
+ fprintf(fout, "+ STYLE %d ", p->defiPath::getStyle());
+
+
+ break;
+
+
+ }
+
+
+ }
+
+
+ }
+
+
+ fprintf(fout, "\n");
+
+
+ count = 0;
+
+
+ }
+
+
+ } else if (ppath->defiNet::numShields()) {
+
+
+ for (i = 0; i < ppath->defiNet::numShields(); i++) {
+
+
+ shield = ppath->defiNet::shield(i);
+
+
+ fprintf(fout, "\n + SHIELD %s ", shield->defiShield::shieldName());
+
+
+ newLayer = 0;
+
+
+ for (j = 0; j < shield->defiShield::numPaths(); j++) {
+
+
+ p = shield->defiShield::path(j);
+
+
+ p->initTraverse();
+
+
+ while ((path = (int)p->defiPath::next()) != DEFIPATH_DONE) {
+
+
+ count++;
+
+
+ // Don't want the line to be too long
+
+
+ if (count >= 5) {
+
+
+ fprintf(fout, "\n");
+
+
+ count = 0;
+
+
+ }
+
+
+ switch (path) {
+
+
+ case DEFIPATH_LAYER:
+
+
+ if (newLayer == 0) {
+
+
+ fprintf(fout, "%s ", p->defiPath::getLayer());
+
+
+ newLayer = 1;
+
+
+ } else
+
+
+ fprintf(fout, "NEW %s ", p->defiPath::getLayer());
+
+
+ break;
+
+
+ case DEFIPATH_VIA:
+
+
+ fprintf(fout, "%s ", p->defiPath::getVia());
+
+
+ break;
+
+
+ case DEFIPATH_VIAROTATION:
+
+
+ fprintf(fout, "%s ",
+
+
+ orientStr(p->defiPath::getViaRotation()));
+
+
+ break;
+
+
+ case DEFIPATH_WIDTH:
+
+
+ fprintf(fout, "%d ", p->defiPath::getWidth());
+
+
+ break;
+
+
+ case DEFIPATH_POINT:
+
+
+ p->defiPath::getPoint(&x, &y);
+
+
+ fprintf(fout, "( %d %d ) ", x, y);
+
+
+ break;
+
+
+ case DEFIPATH_FLUSHPOINT:
+
+
+ p->defiPath::getFlushPoint(&x, &y, &z);
+
+
+ fprintf(fout, "( %d %d %d ) ", x, y, z);
+
+
+ break;
+
+
+ case DEFIPATH_TAPER:
+
+
+ fprintf(fout, "TAPER ");
+
+
+ break;
+
+
+ case DEFIPATH_SHAPE:
+
+
+ fprintf(fout, "+ SHAPE %s ", p->defiPath::getShape());
+
+
+ break;
+
+
+ case DEFIPATH_STYLE:
+
+
+ fprintf(fout, "+ STYLE %d ", p->defiPath::getStyle());
+
+
+ break;
+
+
+ }
+
+
+ }
+
+
+ }
+
+
+ }
+
+
+ }
+
+
+
+
+
+ fprintf(fout, "\n");
+
+
+
+
+
+ return 0;
+
+
+ }
+
+
+
+
+
+ int snetf(defrCallbackType_e c, defiNet* net, defiUserData ud) {
+
+
+ // For net and special net.
+
+
+ int i, j, x, y, z, count, newLayer;
+
+
+ char* layerName;
+
+
+ double dist, left, right;
+
+
+ defiPath* p;
+
+
+ defiSubnet *s;
+
+
+ int path;
+
+
+ defiShield* shield;
+
+
+ defiWire* wire;
+
+
+ int numX, numY, stepX, stepY;
+
+
+
+
+
+ checkType(c);
+
+
+ if ((long)ud != userData) dataError();
+
+
+ if (c != defrSNetCbkType)
+
+
+ fprintf(fout, "BOGUS NET TYPE ");
+
+
+
+
+
+ count = 0;
+
+
+ // compName & pinName
+
+
+ for (i = 0; i < net->defiNet::numConnections(); i++) {
+
+
+ // set the limit of only 5 items print out in one line
+
+
+ count++;
+
+
+ if (count >= 5) {
+
+
+ fprintf(fout, "\n");
+
+
+ count = 0;
+
+
+ }
+
+
+ fprintf (fout, "( %s %s ) ", net->defiNet::instance(i),
+
+
+ net->defiNet::pin(i));
+
+
+ if (net->defiNet::pinIsSynthesized(i))
+
+
+ fprintf(fout, "+ SYNTHESIZED ");
+
+
+ }
+
+
+
+
+
+ // specialWiring
+
+
+ if (net->defiNet::numWires()) {
+
+
+ newLayer = 0;
+
+
+ for (i = 0; i < net->defiNet::numWires(); i++) {
+
+
+ newLayer = 0;
+
+
+ wire = net->defiNet::wire(i);
+
+
+ fprintf(fout, "\n + %s ", wire->wireType());
+
+
+ if (strcmp (wire->wireType(), "SHIELD") == 0)
+
+
+ fprintf(fout, "%s ", wire->wireShieldNetName());
+
+
+ for (j = 0; j < wire->defiWire::numPaths(); j++) {
+
+
+ p = wire->defiWire::path(j);
+
+
+ p->initTraverse();
+
+
+ while ((path = (int)p->defiPath::next()) != DEFIPATH_DONE) {
+
+
+ count++;
+
+
+ // Don't want the line to be too long
+
+
+ if (count >= 5) {
+
+
+ fprintf(fout, "\n");
+
+
+ count = 0;
+
+
+ }
+
+
+ switch (path) {
+
+
+ case DEFIPATH_LAYER:
+
+
+ if (newLayer == 0) {
+
+
+ fprintf(fout, "%s ", p->defiPath::getLayer());
+
+
+ newLayer = 1;
+
+
+ } else
+
+
+ fprintf(fout, "NEW %s ", p->defiPath::getLayer());
+
+
+ break;
+
+
+ case DEFIPATH_VIA:
+
+
+ fprintf(fout, "%s ", p->defiPath::getVia());
+
+
+ break;
+
+
+ case DEFIPATH_VIAROTATION:
+
+
+ fprintf(fout, "%s ",
+
+
+ orientStr(p->defiPath::getViaRotation()));
+
+
+ break;
+
+
+ case DEFIPATH_VIADATA:
+
+
+ p->defiPath::getViaData(&numX, &numY, &stepX, &stepY);
+
+
+ fprintf(fout, "DO %d BY %d STEP %d %d ", numX, numY,
+
+
+ stepX, stepY);
+
+
+ break;
+
+
+ case DEFIPATH_WIDTH:
+
+
+ fprintf(fout, "%d ", p->defiPath::getWidth());
+
+
+ break;
+
+
+ case DEFIPATH_POINT:
+
+
+ p->defiPath::getPoint(&x, &y);
+
+
+ fprintf(fout, "( %d %d ) ", x, y);
+
+
+ break;
+
+
+ case DEFIPATH_FLUSHPOINT:
+
+
+ p->defiPath::getFlushPoint(&x, &y, &z);
+
+
+ fprintf(fout, "( %d %d %d ) ", x, y, z);
+
+
+ break;
+
+
+ case DEFIPATH_TAPER:
+
+
+ fprintf(fout, "TAPER ");
+
+
+ break;
+
+
+ case DEFIPATH_SHAPE:
+
+
+ fprintf(fout, "+ SHAPE %s ", p->defiPath::getShape());
+
+
+ break;
+
+
+ case DEFIPATH_STYLE:
+
+
+ fprintf(fout, "+ STYLE %d ", p->defiPath::getStyle());
+
+
+ break;
+
+
+ }
+
+
+ }
+
+
+ }
+
+
+ fprintf(fout, "\n");
+
+
+ count = 0;
+
+
+ }
+
+
+ }
+
+
+ // POLYGON
+
+
+ if (net->defiNet::numPolygons()) {
+
+
+ struct defiPoints points;
+
+
+ for (i = 0; i < net->defiNet::numPolygons(); i++) {
+
+
+ fprintf(fout, "\n + POLYGON %s ", net->polygonName(i));
+
+
+ points = net->getPolygon(i);
+
+
+ for (j = 0; j < points.numPoints; j++)
+
+
+ fprintf(fout, "%d %d ", points.x[j], points.y[j]);
+
+
+ }
+
+
+ }
+
+
+ // RECT
+
+
+ if (net->defiNet::numRectangles()) {
+
+
+ for (i = 0; i < net->defiNet::numRectangles(); i++) {
+
+
+ fprintf(fout, "\n + RECT %s %d %d %d %d", net->defiNet::rectName(i),
+
+
+ net->defiNet::xl(i), net->defiNet::yl(i), net->defiNet::xh(i),
+
+
+ net->defiNet::yh(i));
+
+
+ }
+
+
+ }
+
+
+
+
+
+ if (net->defiNet::hasSubnets()) {
+
+
+ for (i = 0; i < net->defiNet::numSubnets(); i++) {
+
+
+ s = net->defiNet::subnet(i);
+
+
+ if (s->defiSubnet::numConnections()) {
+
+
+ if (s->defiSubnet::pinIsMustJoin(0))
+
+
+ fprintf(fout, "- MUSTJOIN ");
+
+
+ else
+
+
+ fprintf(fout, "- %s ", s->defiSubnet::name());
+
+
+ for (j = 0; j < s->defiSubnet::numConnections(); j++) {
+
+
+ fprintf(fout, " ( %s %s )\n", s->defiSubnet::instance(j),
+
+
+ s->defiSubnet::pin(j));
+
+
+ }
+
+
+ }
+
+
+
+
+
+ // regularWiring
+
+
+ if (s->defiSubnet::numWires()) {
+
+
+ for (i = 0; i < s->defiSubnet::numWires(); i++) {
+
+
+ wire = s->defiSubnet::wire(i);
+
+
+ fprintf(fout, " + %s ", wire->wireType());
+
+
+ for (j = 0; j < wire->defiWire::numPaths(); j++) {
+
+
+ p = wire->defiWire::path(j);
+
+
+ p->defiPath::print(fout);
+
+
+ }
+
+
+ }
+
+
+ }
+
+
+ }
+
+
+ }
+
+
+
+
+
+ if (net->defiNet::numProps()) {
+
+
+ for (i = 0; i < net->defiNet::numProps(); i++) {
+
+
+ if (net->defiNet::propIsString(i))
+
+
+ fprintf(fout, " + PROPERTY %s %s ", net->defiNet::propName(i),
+
+
+ net->defiNet::propValue(i));
+
+
+ if (net->defiNet::propIsNumber(i))
+
+
+ fprintf(fout, " + PROPERTY %s %g ", net->defiNet::propName(i),
+
+
+ net->defiNet::propNumber(i));
+
+
+ switch (net->defiNet::propType(i)) {
+
+
+ case 'R': fprintf(fout, "REAL ");
+
+
+ break;
+
+
+ case 'I': fprintf(fout, "INTEGER ");
+
+
+ break;
+
+
+ case 'S': fprintf(fout, "STRING ");
+
+
+ break;
+
+
+ case 'Q': fprintf(fout, "QUOTESTRING ");
+
+
+ break;
+
+
+ case 'N': fprintf(fout, "NUMBER ");
+
+
+ break;
+
+
+ }
+
+
+ fprintf(fout, "\n");
+
+
+ }
+
+
+ }
+
+
+
+
+
+ // SHIELD
+
+
+ count = 0;
+
+
+ // testing the SHIELD for 5.3, obsolete in 5.4
+
+
+ if (net->defiNet::numShields()) {
+
+
+ for (i = 0; i < net->defiNet::numShields(); i++) {
+
+
+ shield = net->defiNet::shield(i);
+
+
+ fprintf(fout, "\n + SHIELD %s ", shield->defiShield::shieldName());
+
+
+ newLayer = 0;
+
+
+ for (j = 0; j < shield->defiShield::numPaths(); j++) {
+
+
+ p = shield->defiShield::path(j);
+
+
+ p->initTraverse();
+
+
+ while ((path = (int)p->defiPath::next()) != DEFIPATH_DONE) {
+
+
+ count++;
+
+
+ // Don't want the line to be too long
+
+
+ if (count >= 5) {
+
+
+ fprintf(fout, "\n");
+
+
+ count = 0;
+
+
+ }
+
+
+ switch (path) {
+
+
+ case DEFIPATH_LAYER:
+
+
+ if (newLayer == 0) {
+
+
+ fprintf(fout, "%s ", p->defiPath::getLayer());
+
+
+ newLayer = 1;
+
+
+ } else
+
+
+ fprintf(fout, "NEW %s ", p->defiPath::getLayer());
+
+
+ break;
+
+
+ case DEFIPATH_VIA:
+
+
+ fprintf(fout, "%s ", p->defiPath::getVia());
+
+
+ break;
+
+
+ case DEFIPATH_VIAROTATION:
+
+
+ fprintf(fout, "%s ",
+
+
+ orientStr(p->defiPath::getViaRotation()));
+
+
+ break;
+
+
+ case DEFIPATH_WIDTH:
+
+
+ fprintf(fout, "%d ", p->defiPath::getWidth());
+
+
+ break;
+
+
+ case DEFIPATH_POINT:
+
+
+ p->defiPath::getPoint(&x, &y);
+
+
+ fprintf(fout, "( %d %d ) ", x, y);
+
+
+ break;
+
+
+ case DEFIPATH_FLUSHPOINT:
+
+
+ p->defiPath::getFlushPoint(&x, &y, &z);
+
+
+ fprintf(fout, "( %d %d %d ) ", x, y, z);
+
+
+ break;
+
+
+ case DEFIPATH_TAPER:
+
+
+ fprintf(fout, "TAPER ");
+
+
+ break;
+
+
+ case DEFIPATH_SHAPE:
+
+
+ fprintf(fout, "+ SHAPE %s ", p->defiPath::getShape());
+
+
+ break;
+
+
+ case DEFIPATH_STYLE:
+
+
+ fprintf(fout, "+ STYLE %d ", p->defiPath::getStyle());
+
+
+ break;
+
+
+ }
+
+
+ }
+
+
+ }
+
+
+ }
+
+
+ }
+
+
+
+
+
+ // layerName width
+
+
+ if (net->defiNet::hasWidthRules()) {
+
+
+ for (i = 0; i < net->defiNet::numWidthRules(); i++) {
+
+
+ net->defiNet::widthRule(i, &layerName, &dist);
+
+
+ fprintf (fout, "\n + WIDTH %s %g ", layerName, dist);
+
+
+ }
+
+
+ }
+
+
+
+
+
+ // layerName spacing
+
+
+ if (net->defiNet::hasSpacingRules()) {
+
+
+ for (i = 0; i < net->defiNet::numSpacingRules(); i++) {
+
+
+ net->defiNet::spacingRule(i, &layerName, &dist, &left, &right);
+
+
+ if (left == right)
+
+
+ fprintf (fout, "\n + SPACING %s %g ", layerName, dist);
+
+
+ else
+
+
+ fprintf (fout, "\n + SPACING %s %g RANGE %g %g ",
+
+
+ layerName, dist, left, right);
+
+
+ }
+
+
+ }
+
+
+
+
+
+ if (net->defiNet::hasFixedbump())
+
+
+ fprintf(fout, "\n + FIXEDBUMP ");
+
+
+ if (net->defiNet::hasFrequency())
+
+
+ fprintf(fout, "\n + FREQUENCY %g ", net->defiNet::frequency());
+
+
+ if (net->defiNet::hasVoltage())
+
+
+ fprintf(fout, "\n + VOLTAGE %g ", net->defiNet::voltage());
+
+
+ if (net->defiNet::hasWeight())
+
+
+ fprintf(fout, "\n + WEIGHT %d ", net->defiNet::weight());
+
+
+ if (net->defiNet::hasCap())
+
+
+ fprintf(fout, "\n + ESTCAP %g ", net->defiNet::cap());
+
+
+ if (net->defiNet::hasSource())
+
+
+ fprintf(fout, "\n + SOURCE %s ", net->defiNet::source());
+
+
+ if (net->defiNet::hasPattern())
+
+
+ fprintf(fout, "\n + PATTERN %s ", net->defiNet::pattern());
+
+
+ if (net->defiNet::hasOriginal())
+
+
+ fprintf(fout, "\n + ORIGINAL %s ", net->defiNet::original());
+
+
+ if (net->defiNet::hasUse())
+
+
+ fprintf(fout, "\n + USE %s ", net->defiNet::use());
+
+
+
+
+
+ fprintf (fout, ";\n");
+
+
+ --numObjs;
+
+
+ if (numObjs <= 0)
+
+
+ fprintf(fout, "END SPECIALNETS\n");
+
+
+ return 0;
+
+
+ }
+
+
+
+
+
+
+
+
+ int ndr(defrCallbackType_e c, defiNonDefault* nd, defiUserData ud) {
+
+
+ // For nondefaultrule
+
+
+ int i;
+
+
+
+
+
+ checkType(c);
+
+
+ if ((long)ud != userData) dataError();
+
+
+ if (c != defrNonDefaultCbkType)
+
+
+ fprintf(fout, "BOGUS NONDEFAULTRULE TYPE ");
+
+
+ fprintf(fout, "- %s\n", nd->defiNonDefault::name());
+
+
+ if (nd->defiNonDefault::hasHardspacing())
+
+
+ fprintf(fout, " + HARDSPACING\n");
+
+
+ for (i = 0; i < nd->defiNonDefault::numLayers(); i++) {
+
+
+ fprintf(fout, " + LAYER %s", nd->defiNonDefault::layerName(i));
+
+
+ fprintf(fout, " WIDTH %d", nd->defiNonDefault::layerWidthVal(i));
+
+
+ if (nd->defiNonDefault::hasLayerDiagWidth(i))
+
+
+ fprintf(fout, " DIAGWIDTH %d",
+
+
+ nd->defiNonDefault::layerDiagWidthVal(i));
+
+
+ if (nd->defiNonDefault::hasLayerSpacing(i))
+
+
+ fprintf(fout, " SPACING %d", nd->defiNonDefault::layerSpacingVal(i));
+
+
+ if (nd->defiNonDefault::hasLayerWireExt(i))
+
+
+ fprintf(fout, " WIREEXT %d", nd->defiNonDefault::layerWireExtVal(i));
+
+
+ fprintf(fout, "\n");
+
+
+ }
+
+
+ for (i = 0; i < nd->defiNonDefault::numVias(); i++)
+
+
+ fprintf(fout, " + VIA %s\n", nd->defiNonDefault::viaName(i));
+
+
+ for (i = 0; i < nd->defiNonDefault::numViaRules(); i++)
+
+
+ fprintf(fout, " + VIARULE %s\n", nd->defiNonDefault::viaRuleName(i));
+
+
+ for (i = 0; i < nd->defiNonDefault::numMinCuts(); i++)
+
+
+ fprintf(fout, " + MINCUTS %s %d\n", nd->defiNonDefault::cutLayerName(i),
+
+
+ nd->defiNonDefault::numCuts(i));
+
+
+ for (i = 0; i < nd->defiNonDefault::numProps(); i++) {
+
+
+ fprintf(fout, " + PROPERTY %s %s ", nd->defiNonDefault::propName(i),
+
+
+ nd->defiNonDefault::propValue(i));
+
+
+ switch (nd->defiNonDefault::propType(i)) {
+
+
+ case 'R': fprintf(fout, "REAL\n");
+
+
+ break;
+
+
+ case 'I': fprintf(fout, "INTEGER\n");
+
+
+ break;
+
+
+ case 'S': fprintf(fout, "STRING\n");
+
+
+ break;
+
+
+ case 'Q': fprintf(fout, "QUOTESTRING\n");
+
+
+ break;
+
+
+ case 'N': fprintf(fout, "NUMBER\n");
+
+
+ break;
+
+
+ }
+
+
+ }
+
+
+ --numObjs;
+
+
+ if (numObjs <= 0)
+
+
+ fprintf(fout, "END NONDEFAULTRULES\n");
+
+
+ return 0;
+
+
+ }
+
+
+
+
+
+ int tname(defrCallbackType_e c, const char* string, defiUserData ud) {
+
+
+ checkType(c);
+
+
+ if ((long)ud != userData) dataError();
+
+
+ fprintf(fout, "TECHNOLOGY %s ;\n", string);
+
+
+ return 0;
+
+
+ }
+
+
+
+
+
+ int dname(defrCallbackType_e c, const char* string, defiUserData ud) {
+
+
+ checkType(c);
+
+
+ if ((long)ud != userData) dataError();
+
+
+ fprintf(fout, "DESIGN %s ;\n", string);
+
+
+
+
+
+ // Test changing the user data.
+
+
+ userData = 89;
+
+
+ defrSetUserData((void*)userData);
+
+
+
+
+
+ return 0;
+
+
+ }
+
+
+
+
+
+
+
+
+ char* address(const char* in) {
+
+
+ return ((char*)in);
+
+
+ }
+
+
+
+
+
+ int cs(defrCallbackType_e c, int num, defiUserData ud) {
+
+
+ char* name;
+
+
+
+
+
+ checkType(c);
+
+
+
+
+
+ if ((long)ud != userData) dataError();
+
+
+
+
+
+ switch (c) {
+
+
+ case defrComponentStartCbkType : name = address("COMPONENTS"); break;
+
+
+ case defrNetStartCbkType : name = address("NETS"); break;
+
+
+ case defrStartPinsCbkType : name = address("PINS"); break;
+
+
+ case defrViaStartCbkType : name = address("VIAS"); break;
+
+
+ case defrRegionStartCbkType : name = address("REGIONS"); break;
+
+
+ case defrSNetStartCbkType : name = address("SPECIALNETS"); break;
+
+
+ case defrGroupsStartCbkType : name = address("GROUPS"); break;
+
+
+ case defrScanchainsStartCbkType : name = address("SCANCHAINS"); break;
+
+
+ case defrIOTimingsStartCbkType : name = address("IOTIMINGS"); break;
+
+
+ case defrFPCStartCbkType : name = address("FLOORPLANCONSTRAINTS"); break;
+
+
+ case defrTimingDisablesStartCbkType : name = address("TIMING DISABLES"); break;
+
+
+ case defrPartitionsStartCbkType : name = address("PARTITIONS"); break;
+
+
+ case defrPinPropStartCbkType : name = address("PINPROPERTIES"); break;
+
+
+ case defrBlockageStartCbkType : name = address("BLOCKAGES"); break;
+
+
+ case defrSlotStartCbkType : name = address("SLOTS"); break;
+
+
+ case defrFillStartCbkType : name = address("FILLS"); break;
+
+
+ case defrNonDefaultStartCbkType : name = address("NONDEFAULTRULES"); break;
+
+
+ case defrStylesStartCbkType : name = address("STYLES"); break;
+
+
+ default : name = address("BOGUS"); return 1;
+
+
+ }
+
+
+ fprintf(fout, "\n%s %d ;\n", name, num);
+
+
+ numObjs = num;
+
+
+ return 0;
+
+
+ }
+
+
+
+
+
+ int constraintst(defrCallbackType_e c, int num, defiUserData ud) {
+
+
+ // Handles both constraints and assertions
+
+
+ checkType(c);
+
+
+ if ((long)ud != userData) dataError();
+
+
+ if (c == defrConstraintsStartCbkType)
+
+
+ fprintf(fout, "\nCONSTRAINTS %d ;\n\n", num);
+
+
+ else
+
+
+ fprintf(fout, "\nASSERTIONS %d ;\n\n", num);
+
+
+ numObjs = num;
+
+
+ return 0;
+
+
+ }
+
+
+
+
+
+ void operand(defrCallbackType_e c, defiAssertion* a, int ind) {
+
+
+ int i, first = 1;
+
+
+ char* netName;
+
+
+ char* fromInst, * fromPin, * toInst, * toPin;
+
+
+
+
+
+ if (a->defiAssertion::isSum()) {
+
+
+ // Sum in operand, recursively call operand
+
+
+ fprintf(fout, "- SUM ( ");
+
+
+ a->defiAssertion::unsetSum();
+
+
+ isSumSet = 1;
+
+
+ begOperand = 0;
+
+
+ operand (c, a, ind);
+
+
+ fprintf(fout, ") ");
+
+
+ } else {
+
+
+ // operand
+
+
+ if (ind >= a->defiAssertion::numItems()) {
+
+
+ fprintf(fout, "ERROR: when writing out SUM in Constraints.\n");
+
+
+ return;
+
+
+ }
+
+
+ if (begOperand) {
+
+
+ fprintf(fout, "- ");
+
+
+ begOperand = 0;
+
+
+ }
+
+
+ for (i = ind; i < a->defiAssertion::numItems(); i++) {
+
+
+ if (a->defiAssertion::isNet(i)) {
+
+
+ a->defiAssertion::net(i, &netName);
+
+
+ if (!first)
+
+
+ fprintf(fout, ", "); // print , as separator
+
+
+ fprintf(fout, "NET %s ", netName);
+
+
+ } else if (a->defiAssertion::isPath(i)) {
+
+
+ a->defiAssertion::path(i, &fromInst, &fromPin, &toInst,
+
+
+ &toPin);
+
+
+ if (!first)
+
+
+ fprintf(fout, ", ");
+
+
+ fprintf(fout, "PATH %s %s %s %s ", fromInst, fromPin, toInst,
+
+
+ toPin);
+
+
+ } else if (isSumSet) {
+
+
+ // SUM within SUM, reset the flag
+
+
+ a->defiAssertion::setSum();
+
+
+ operand(c, a, i);
+
+
+ }
+
+
+ first = 0;
+
+
+ }
+
+
+
+
+
+ }
+
+
+ }
+
+
+
+
+
+ int constraint(defrCallbackType_e c, defiAssertion* a, defiUserData ud) {
+
+
+ // Handles both constraints and assertions
+
+
+
+
+
+ checkType(c);
+
+
+ if ((long)ud != userData) dataError();
+
+
+ if (a->defiAssertion::isWiredlogic())
+
+
+ // Wirelogic
+
+
+ fprintf(fout, "- WIREDLOGIC %s + MAXDIST %g ;\n",
+
+
+ a->defiAssertion::netName(), a->defiAssertion::fallMax());
+
+
+ else {
+
+
+ // Call the operand function
+
+
+ isSumSet = 0; // reset the global variable
+
+
+ begOperand = 1;
+
+
+ operand (c, a, 0);
+
+
+ // Get the Rise and Fall
+
+
+ if (a->defiAssertion::hasRiseMax())
+
+
+ fprintf(fout, "+ RISEMAX %g ", a->defiAssertion::riseMax());
+
+
+ if (a->defiAssertion::hasFallMax())
+
+
+ fprintf(fout, "+ FALLMAX %g ", a->defiAssertion::fallMax());
+
+
+ if (a->defiAssertion::hasRiseMin())
+
+
+ fprintf(fout, "+ RISEMIN %g ", a->defiAssertion::riseMin());
+
+
+ if (a->defiAssertion::hasFallMin())
+
+
+ fprintf(fout, "+ FALLMIN %g ", a->defiAssertion::fallMin());
+
+
+ fprintf(fout, ";\n");
+
+
+ }
+
+
+ --numObjs;
+
+
+ if (numObjs <= 0) {
+
+
+ if (c == defrConstraintCbkType)
+
+
+ fprintf(fout, "END CONSTRAINTS\n");
+
+
+ else
+
+
+ fprintf(fout, "END ASSERTIONS\n");
+
+
+ }
+
+
+ return 0;
+
+
+ }
+
+
+
+
+
+
+
+
+ int propstart(defrCallbackType_e c, void* dummy, defiUserData ud) {
+
+
+ checkType(c);
+
+
+ fprintf(fout, "\nPROPERTYDEFINITIONS\n");
+
+
+ isProp = 1;
+
+
+
+
+
+ return 0;
+
+
+ }
+
+
+
+
+
+
+
+
+ int prop(defrCallbackType_e c, defiProp* p, defiUserData ud) {
+
+
+ checkType(c);
+
+
+ if ((long)ud != userData) dataError();
+
+
+ if (strcmp(p->defiProp::propType(), "design") == 0)
+
+
+ fprintf(fout, "DESIGN %s ", p->defiProp::propName());
+
+
+ else if (strcmp(p->defiProp::propType(), "net") == 0)
+
+
+ fprintf(fout, "NET %s ", p->defiProp::propName());
+
+
+ else if (strcmp(p->defiProp::propType(), "component") == 0)
+
+
+ fprintf(fout, "COMPONENT %s ", p->defiProp::propName());
+
+
+ else if (strcmp(p->defiProp::propType(), "specialnet") == 0)
+
+
+ fprintf(fout, "SPECIALNET %s ", p->defiProp::propName());
+
+
+ else if (strcmp(p->defiProp::propType(), "group") == 0)
+
+
+ fprintf(fout, "GROUP %s ", p->defiProp::propName());
+
+
+ else if (strcmp(p->defiProp::propType(), "row") == 0)
+
+
+ fprintf(fout, "ROW %s ", p->defiProp::propName());
+
+
+ else if (strcmp(p->defiProp::propType(), "componentpin") == 0)
+
+
+ fprintf(fout, "COMPONENTPIN %s ", p->defiProp::propName());
+
+
+ else if (strcmp(p->defiProp::propType(), "region") == 0)
+
+
+ fprintf(fout, "REGION %s ", p->defiProp::propName());
+
+
+ else if (strcmp(p->defiProp::propType(), "nondefaultrule") == 0)
+
+
+ fprintf(fout, "NONDEFAULTRULE %s ", p->defiProp::propName());
+
+
+ if (p->defiProp::dataType() == 'I')
+
+
+ fprintf(fout, "INTEGER ");
+
+
+ if (p->defiProp::dataType() == 'R')
+
+
+ fprintf(fout, "REAL ");
+
+
+ if (p->defiProp::dataType() == 'S')
+
+
+ fprintf(fout, "STRING ");
+
+
+ if (p->defiProp::dataType() == 'Q')
+
+
+ fprintf(fout, "STRING ");
+
+
+ if (p->defiProp::hasRange()) {
+
+
+ fprintf(fout, "RANGE %g %g ", p->defiProp::left(),
+
+
+ p->defiProp::right());
+
+
+ }
+
+
+ if (p->defiProp::hasNumber())
+
+
+ fprintf(fout, "%g ", p->defiProp::number());
+
+
+ if (p->defiProp::hasString())
+
+
+ fprintf(fout, "\"%s\" ", p->defiProp::string());
+
+
+ fprintf(fout, ";\n");
+
+
+
+
+
+ return 0;
+
+
+ }
+
+
+
+
+
+
+
+
+ int propend(defrCallbackType_e c, void* dummy, defiUserData ud) {
+
+
+ checkType(c);
+
+
+ if (isProp) {
+
+
+ fprintf(fout, "END PROPERTYDEFINITIONS\n\n");
+
+
+ isProp = 0;
+
+
+ }
+
+
+
+
+
+ defrSetCaseSensitivity(1);
+
+
+ return 0;
+
+
+ }
+
+
+
+
+
+
+
+
+ int hist(defrCallbackType_e c, const char* h, defiUserData ud) {
+
+
+ checkType(c);
+
+
+ defrSetCaseSensitivity(0);
+
+
+ if ((long)ud != userData) dataError();
+
+
+ fprintf(fout, "HISTORY %s ;\n", h);
+
+
+ defrSetCaseSensitivity(1);
+
+
+ return 0;
+
+
+ }
+
+
+
+
+
+
+
+
+ int an(defrCallbackType_e c, const char* h, defiUserData ud) {
+
+
+ checkType(c);
+
+
+ if ((long)ud != userData) dataError();
+
+
+ fprintf(fout, "ARRAY %s ;\n", h);
+
+
+ return 0;
+
+
+ }
+
+
+
+
+
+
+
+
+ int fn(defrCallbackType_e c, const char* h, defiUserData ud) {
+
+
+ checkType(c);
+
+
+ if ((long)ud != userData) dataError();
+
+
+ fprintf(fout, "FLOORPLAN %s ;\n", h);
+
+
+ return 0;
+
+
+ }
+
+
+
+
+
+
+
+
+ int bbn(defrCallbackType_e c, const char* h, defiUserData ud) {
+
+
+ checkType(c);
+
+
+ if ((long)ud != userData) dataError();
+
+
+ fprintf(fout, "BUSBITCHARS \"%s\" ;\n", h);
+
+
+ return 0;
+
+
+ }
+
+
+
+
+
+
+
+
+ int vers(defrCallbackType_e c, double d, defiUserData ud) {
+
+
+ checkType(c);
+
+
+ if ((long)ud != userData) dataError();
+
+
+ fprintf(fout, "VERSION %g ;\n", d);
+
+
+ curVer = d;
+
+
+
+
+
+ defrAddAlias ("alias1", "aliasValue1", 1);
+
+
+ defrAddAlias ("alias2", "aliasValue2", 0);
+
+
+ defiAlias_itr *aliasStore;
+
+
+ aliasStore = (defiAlias_itr*)malloc(sizeof(defiAlias_itr*));
+
+
+ aliasStore->Init();
+
+
+ while (aliasStore->defiAlias_itr::Next()) {
+
+
+ fprintf(fout, "ALIAS %s %s %d ;\n", aliasStore->defiAlias_itr::Key(),
+
+
+ aliasStore->defiAlias_itr::Data(),
+
+
+ aliasStore->defiAlias_itr::Marked());
+
+
+ }
+
+
+ free(aliasStore);
+
+
+ return 0;
+
+
+ }
+
+
+
+
+
+
+
+
+ int versStr(defrCallbackType_e c, const char* versionName, defiUserData ud) {
+
+
+ checkType(c);
+
+
+ if ((long)ud != userData) dataError();
+
+
+ fprintf(fout, "VERSION %s ;\n", versionName);
+
+
+ return 0;
+
+
+ }
+
+
+
+
+
+
+
+
+ int units(defrCallbackType_e c, double d, defiUserData ud) {
+
+
+ checkType(c);
+
+
+ if ((long)ud != userData) dataError();
+
+
+ fprintf(fout, "UNITS DISTANCE MICRONS %g ;\n", d);
+
+
+ return 0;
+
+
+ }
+
+
+
+
+
+
+
+
+ int casesens(defrCallbackType_e c, int d, defiUserData ud) {
+
+
+ checkType(c);
+
+
+ if ((long)ud != userData) dataError();
+
+
+ if (d == 1)
+
+
+ fprintf(fout, "NAMESCASESENSITIVE ON ;\n", d);
+
+
+ else
+
+
+ fprintf(fout, "NAMESCASESENSITIVE OFF ;\n", d);
+
+
+ return 0;
+
+
+ }
+
+
+
+
+
+
+
+
+ int cls(defrCallbackType_e c, void* cl, defiUserData ud) {
+
+
+ defiSite* site; // Site and Canplace and CannotOccupy
+
+
+ defiBox* box; // DieArea and
+
+
+ defiPinCap* pc;
+
+
+ defiPin* pin;
+
+
+ int i, j;
+
+
+ defiRow* row;
+
+
+ defiTrack* track;
+
+
+ defiGcellGrid* gcg;
+
+
+ defiVia* via;
+
+
+ defiRegion* re;
+
+
+ defiGroup* group;
+
+
+ defiScanchain* sc;
+
+
+ defiIOTiming* iot;
+
+
+ defiFPC* fpc;
+
+
+ defiTimingDisable* td;
+
+
+ defiPartition* part;
+
+
+ defiPinProp* pprop;
+
+
+ defiBlockage* block;
+
+
+ defiSlot* slots;
+
+
+ defiFill* fills;
+
+
+ defiStyles* styles;
+
+
+ int xl, yl, xh, yh;
+
+
+ char *name, *a1, *b1;
+
+
+ char **inst, **inPin, **outPin;
+
+
+ int *bits;
+
+
+ int size;
+
+
+ int corner, typ;
+
+
+ const char *itemT;
+
+
+ char dir;
+
+
+ defiPinAntennaModel* aModel;
+
+
+ struct defiPoints points;
+
+
+
+
+
+ checkType(c);
+
+
+ if ((long)ud != userData) dataError();
+
+
+ switch (c) {
+
+
+
+
+
+ case defrSiteCbkType :
+
+
+ site = (defiSite*)cl;
+
+
+ fprintf(fout, "SITE %s %g %g %s ", site->defiSite::name(),
+
+
+ site->defiSite::x_orig(), site->defiSite::y_orig(),
+
+
+ orientStr(site->defiSite::orient()));
+
+
+ fprintf(fout, "DO %g BY %g STEP %g %g ;\n",
+
+
+ site->defiSite::x_num(), site->defiSite::y_num(),
+
+
+ site->defiSite::x_step(), site->defiSite::y_step());
+
+
+ break;
+
+
+ case defrCanplaceCbkType :
+
+
+ site = (defiSite*)cl;
+
+
+ fprintf(fout, "CANPLACE %s %g %g %s ", site->defiSite::name(),
+
+
+ site->defiSite::x_orig(), site->defiSite::y_orig(),
+
+
+ orientStr(site->defiSite::orient()));
+
+
+ fprintf(fout, "DO %g BY %g STEP %g %g ;\n",
+
+
+ site->defiSite::x_num(), site->defiSite::y_num(),
+
+
+ site->defiSite::x_step(), site->defiSite::y_step());
+
+
+ break;
+
+
+ case defrCannotOccupyCbkType :
+
+
+ site = (defiSite*)cl;
+
+
+ fprintf(fout, "CANNOTOCCUPY %s %g %g %s ",
+
+
+ site->defiSite::name(), site->defiSite::x_orig(),
+
+
+ site->defiSite::y_orig(), orientStr(site->defiSite::orient()));
+
+
+ fprintf(fout, "DO %g BY %g STEP %g %g ;\n",
+
+
+ site->defiSite::x_num(), site->defiSite::y_num(),
+
+
+ site->defiSite::x_step(), site->defiSite::y_step());
+
+
+ break;
+
+
+ case defrDieAreaCbkType :
+
+
+ box = (defiBox*)cl;
+
+
+ fprintf(fout, "DIEAREA %d %d %d %d ;\n",
+
+
+ box->defiBox::xl(), box->defiBox::yl(), box->defiBox::xh(),
+
+
+ box->defiBox::yh());
+
+
+ fprintf(fout, "DIEAREA ");
+
+
+ points = box->defiBox::getPoint();
+
+
+ for (i = 0; i < points.numPoints; i++)
+
+
+ fprintf(fout, "%d %d ", points.x[i], points.y[i]);
+
+
+ fprintf(fout, ";\n");
+
+
+ break;
+
+
+ case defrPinCapCbkType :
+
+
+ pc = (defiPinCap*)cl;
+
+
+ fprintf(fout, "MINPINS %d WIRECAP %g ;\n",
+
+
+ pc->defiPinCap::pin(), pc->defiPinCap::cap());
+
+
+ --numObjs;
+
+
+ if (numObjs <= 0)
+
+
+ fprintf(fout, "END DEFAULTCAP\n");
+
+
+ break;
+
+
+ case defrPinCbkType :
+
+
+ pin = (defiPin*)cl;
+
+
+ fprintf(fout, "- %s + NET %s ", pin->defiPin::pinName(),
+
+
+ pin->defiPin::netName());
+
+
+ if (pin->defiPin::hasDirection())
+
+
+ fprintf(fout, "+ DIRECTION %s ", pin->defiPin::direction());
+
+
+ if (pin->defiPin::hasUse())
+
+
+ fprintf(fout, "+ USE %s ", pin->defiPin::use());
+
+
+ if (pin->defiPin::hasNetExpr())
+
+
+ fprintf(fout, "+ NETEXPR \"%s\" ", pin->defiPin::netExpr());
+
+
+ if (pin->defiPin::hasSupplySensitivity())
+
+
+ fprintf(fout, "+ SUPPLYSENSITIVITY %s ",
+
+
+ pin->defiPin::supplySensitivity());
+
+
+ if (pin->defiPin::hasGroundSensitivity())
+
+
+ fprintf(fout, "+ GROUNDSENSITIVITY %s ",
+
+
+ pin->defiPin::groundSensitivity());
+
+
+ if (pin->defiPin::hasLayer()) {
+
+
+ struct defiPoints points;
+
+
+ for (i = 0; i < pin->defiPin::numLayer(); i++) {
+
+
+ fprintf(fout, "\n + LAYER %s ", pin->defiPin::layer(i));
+
+
+ if (pin->defiPin::hasLayerSpacing(i))
+
+
+ fprintf(fout, "SPACING %d ",
+
+
+ pin->defiPin::layerSpacing(i));
+
+
+ if (pin->defiPin::hasLayerDesignRuleWidth(i))
+
+
+ fprintf(fout, "DESIGNRULEWIDTH %d ",
+
+
+ pin->defiPin::layerDesignRuleWidth(i));
+
+
+ pin->defiPin::bounds(i, &xl, &yl, &xh, &yh);
+
+
+ fprintf(fout, "%d %d %d %d ", xl, yl, xh, yh);
+
+
+ }
+
+
+ for (i = 0; i < pin->defiPin::numPolygons(); i++) {
+
+
+ fprintf(fout, "\n + POLYGON %s ",
+
+
+ pin->defiPin::polygonName(i));
+
+
+ if (pin->defiPin::hasPolygonSpacing(i))
+
+
+ fprintf(fout, "SPACING %d ",
+
+
+ pin->defiPin::polygonSpacing(i));
+
+
+ if (pin->defiPin::hasPolygonDesignRuleWidth(i))
+
+
+ fprintf(fout, "DESIGNRULEWIDTH %d ",
+
+
+ pin->defiPin::polygonDesignRuleWidth(i));
+
+
+ points = pin->defiPin::getPolygon(i);
+
+
+ for (j = 0; j < points.numPoints; j++)
+
+
+ fprintf(fout, "%d %d ", points.x[j], points.y[j]);
+
+
+ }
+
+
+ for (i = 0; i < pin->defiPin::numVias(); i++) {
+
+
+ fprintf(fout, "\n + VIA %s %d %d ", pin->defiPin::viaName(i),
+
+
+ pin->defiPin::viaPtX(i), pin->defiPin::viaPtY(i));
+
+
+ }
+
+
+ }
+
+
+ if (pin->defiPin::hasPort()) {
+
+
+ struct defiPoints points;
+
+
+ defiPinPort* port;
+
+
+ for (j = 0; j < pin->defiPin::numPorts(); j++) {
+
+
+ port = pin->defiPin::pinPort(j);
+
+
+ fprintf(fout, "\n + PORT");
+
+
+ for (i = 0; i < port->defiPinPort::numLayer(); i++) {
+
+
+ fprintf(fout, "\n + LAYER %s ",
+
+
+ port->defiPinPort::layer(i));
+
+
+ if (port->defiPinPort::hasLayerSpacing(i))
+
+
+ fprintf(fout, "SPACING %d ",
+
+
+ port->defiPinPort::layerSpacing(i));
+
+
+ if (port->defiPinPort::hasLayerDesignRuleWidth(i))
+
+
+ fprintf(fout, "DESIGNRULEWIDTH %d ",
+
+
+ port->defiPinPort::layerDesignRuleWidth(i));
+
+
+ port->defiPinPort::bounds(i, &xl, &yl, &xh, &yh);
+
+
+ fprintf(fout, "%d %d %d %d ", xl, yl, xh, yh);
+
+
+ }
+
+
+ for (i = 0; i < port->defiPinPort::numPolygons(); i++) {
+
+
+ fprintf(fout, "\n + POLYGON %s ",
+
+
+ port->defiPinPort::polygonName(i));
+
+
+ if (port->defiPinPort::hasPolygonSpacing(i))
+
+
+ fprintf(fout, "SPACING %d ",
+
+
+ port->defiPinPort::polygonSpacing(i));
+
+
+ if (port->defiPinPort::hasPolygonDesignRuleWidth(i))
+
+
+ fprintf(fout, "DESIGNRULEWIDTH %d ",
+
+
+ port->defiPinPort::polygonDesignRuleWidth(i));
+
+
+ points = port->defiPinPort::getPolygon(i);
+
+
+ for (j = 0; j < points.numPoints; j++)
+
+
+ fprintf(fout, "%d %d ", points.x[j], points.y[j]);
+
+
+ }
+
+
+ for (i = 0; i < port->defiPinPort::numVias(); i++) {
+
+
+ fprintf(fout, "\n + VIA %s %g %g",
+
+
+ port->defiPinPort::viaName(i),
+
+
+ port->defiPinPort::viaPtX(i),
+
+
+ port->defiPinPort::viaPtY(i));
+
+
+ }
+
+
+ if (port->defiPinPort::hasPlacement()) {
+
+
+ if (port->defiPinPort::isPlaced()) {
+
+
+ fprintf(fout, "\n + PLACED ");
+
+
+ fprintf(fout, "( %d %d ) %s ",
+
+
+ port->defiPinPort::placementX(),
+
+
+ port->defiPinPort::placementY(),
+
+
+ orientStr(port->defiPinPort::orient()));
+
+
+ }
+
+
+ if (port->defiPinPort::isCover()) {
+
+
+ fprintf(fout, "\n + COVER ");
+
+
+ fprintf(fout, "( %d %d ) %s ",
+
+
+ port->defiPinPort::placementX(),
+
+
+ port->defiPinPort::placementY(),
+
+
+ orientStr(port->defiPinPort::orient()));
+
+
+ }
+
+
+ if (port->defiPinPort::isFixed()) {
+
+
+ fprintf(fout, "\n + FIXED ");
+
+
+ fprintf(fout, "( %d %d ) %s ",
+
+
+ port->defiPinPort::placementX(),
+
+
+ port->defiPinPort::placementY(),
+
+
+ orientStr(port->defiPinPort::orient()));
+
+
+ }
+
+
+ }
+
+
+ }
+
+
+ }
+
+
+ if (pin->defiPin::hasPlacement()) {
+
+
+ if (pin->defiPin::isPlaced()) {
+
+
+ fprintf(fout, "+ PLACED ");
+
+
+ fprintf(fout, "( %d %d ) %s ", pin->defiPin::placementX(),
+
+
+ pin->defiPin::placementY(),
+
+
+ orientStr(pin->defiPin::orient()));
+
+
+ }
+
+
+ if (pin->defiPin::isCover()) {
+
+
+ fprintf(fout, "+ COVER ");
+
+
+ fprintf(fout, "( %d %d ) %s ", pin->defiPin::placementX(),
+
+
+ pin->defiPin::placementY(),
+
+
+ orientStr(pin->defiPin::orient()));
+
+
+ }
+
+
+ if (pin->defiPin::isFixed()) {
+
+
+ fprintf(fout, "+ FIXED ");
+
+
+ fprintf(fout, "( %d %d ) %s ", pin->defiPin::placementX(),
+
+
+ pin->defiPin::placementY(),
+
+
+ orientStr(pin->defiPin::orient()));
+
+
+ }
+
+
+ if (pin->defiPin::isUnplaced())
+
+
+ fprintf(fout, "+ UNPLACED ");
+
+
+ }
+
+
+ if (pin->defiPin::hasSpecial()) {
+
+
+ fprintf(fout, "+ SPECIAL ");
+
+
+ }
+
+
+ if (pin->hasAPinPartialMetalArea()) {
+
+
+ for (i = 0; i < pin->defiPin::numAPinPartialMetalArea(); i++) {
+
+
+ fprintf(fout, "ANTENNAPINPARTIALMETALAREA %d",
+
+
+ pin->APinPartialMetalArea(i));
+
+
+ if (*(pin->APinPartialMetalAreaLayer(i)))
+
+
+ fprintf(fout, " LAYER %s",
+
+
+ pin->APinPartialMetalAreaLayer(i));
+
+
+ fprintf(fout, "\n");
+
+
+ }
+
+
+ }
+
+
+ if (pin->hasAPinPartialMetalSideArea()) {
+
+
+ for (i = 0; i < pin->defiPin::numAPinPartialMetalSideArea(); i++) {
+
+
+ fprintf(fout, "ANTENNAPINPARTIALMETALSIDEAREA %d",
+
+
+ pin->APinPartialMetalSideArea(i));
+
+
+ if (*(pin->APinPartialMetalSideAreaLayer(i)))
+
+
+ fprintf(fout, " LAYER %s",
+
+
+ pin->APinPartialMetalSideAreaLayer(i));
+
+
+ fprintf(fout, "\n");
+
+
+ }
+
+
+ }
+
+
+ if (pin->hasAPinDiffArea()) {
+
+
+ for (i = 0; i < pin->defiPin::numAPinDiffArea(); i++) {
+
+
+ fprintf(fout, "ANTENNAPINDIFFAREA %d", pin->APinDiffArea(i));
+
+
+ if (*(pin->APinDiffAreaLayer(i)))
+
+
+ fprintf(fout, " LAYER %s", pin->APinDiffAreaLayer(i));
+
+
+ fprintf(fout, "\n");
+
+
+ }
+
+
+ }
+
+
+ if (pin->hasAPinPartialCutArea()) {
+
+
+ for (i = 0; i < pin->defiPin::numAPinPartialCutArea(); i++) {
+
+
+ fprintf(fout, "ANTENNAPINPARTIALCUTAREA %d",
+
+
+ pin->APinPartialCutArea(i));
+
+
+ if (*(pin->APinPartialCutAreaLayer(i)))
+
+
+ fprintf(fout, " LAYER %s", pin->APinPartialCutAreaLayer(i));
+
+
+ fprintf(fout, "\n");
+
+
+ }
+
+
+ }
+
+
+
+
+
+ for (j = 0; j < pin->numAntennaModel(); j++) {
+
+
+ aModel = pin->antennaModel(j);
+
+
+
+
+
+ fprintf(fout, "ANTENNAMODEL %s\n",
+
+
+ aModel->defiPinAntennaModel::antennaOxide());
+
+
+
+
+
+ if (aModel->hasAPinGateArea()) {
+
+
+ for (i = 0; i < aModel->defiPinAntennaModel::numAPinGateArea();
+
+
+ i++) {
+
+
+ fprintf(fout, "ANTENNAPINGATEAREA %d",
+
+
+ aModel->APinGateArea(i));
+
+
+ if (aModel->hasAPinGateAreaLayer(i))
+
+
+ fprintf(fout, " LAYER %s", aModel->APinGateAreaLayer(i));
+
+
+ fprintf(fout, "\n");
+
+
+ }
+
+
+ }
+
+
+ if (aModel->hasAPinMaxAreaCar()) {
+
+
+ for (i = 0;
+
+
+ i < aModel->defiPinAntennaModel::numAPinMaxAreaCar(); i++) {
+
+
+ fprintf(fout, "ANTENNAPINMAXAREACAR %d",
+
+
+ aModel->APinMaxAreaCar(i));
+
+
+ if (aModel->hasAPinMaxAreaCarLayer(i))
+
+
+ fprintf(fout,
+
+
+ " LAYER %s", aModel->APinMaxAreaCarLayer(i));
+
+
+ fprintf(fout, "\n");
+
+
+ }
+
+
+ }
+
+
+ if (aModel->hasAPinMaxSideAreaCar()) {
+
+
+ for (i = 0;
+
+
+ i < aModel->defiPinAntennaModel::numAPinMaxSideAreaCar();
+
+
+ i++) {
+
+
+ fprintf(fout, "ANTENNAPINMAXSIDEAREACAR %d",
+
+
+ aModel->APinMaxSideAreaCar(i));
+
+
+ if (aModel->hasAPinMaxSideAreaCarLayer(i))
+
+
+ fprintf(fout,
+
+
+ " LAYER %s", aModel->APinMaxSideAreaCarLayer(i));
+
+
+ fprintf(fout, "\n");
+
+
+ }
+
+
+ }
+
+
+ if (aModel->hasAPinMaxCutCar()) {
+
+
+ for (i = 0; i < aModel->defiPinAntennaModel::numAPinMaxCutCar();
+
+
+ i++) {
+
+
+ fprintf(fout, "ANTENNAPINMAXCUTCAR %d",
+
+
+ aModel->APinMaxCutCar(i));
+
+
+ if (aModel->hasAPinMaxCutCarLayer(i))
+
+
+ fprintf(fout, " LAYER %s",
+
+
+ aModel->APinMaxCutCarLayer(i));
+
+
+ fprintf(fout, "\n");
+
+
+ }
+
+
+ }
+
+
+ }
+
+
+ fprintf(fout, ";\n");
+
+
+ --numObjs;
+
+
+ if (numObjs <= 0)
+
+
+ fprintf(fout, "END PINS\n");
+
+
+ break;
+
+
+ case defrDefaultCapCbkType :
+
+
+ i = (long)cl;
+
+
+ fprintf(fout, "DEFAULTCAP %d\n", i);
+
+
+ numObjs = i;
+
+
+ break;
+
+
+ case defrRowCbkType :
+
+
+ row = (defiRow*)cl;
+
+
+ fprintf(fout, "ROW %s %s %g %g %s ", row->defiRow::name(),
+
+
+ row->defiRow::macro(), row->defiRow::x(), row->defiRow::y(),
+
+
+ orientStr(row->defiRow::orient()));
+
+
+ if (row->defiRow::hasDo()) {
+
+
+ fprintf(fout, "DO %g BY %g ",
+
+
+ row->defiRow::xNum(), row->defiRow::yNum());
+
+
+ if (row->defiRow::hasDoStep())
+
+
+ fprintf(fout, "STEP %g %g ;\n",
+
+
+ row->defiRow::xStep(), row->defiRow::yStep());
+
+
+ else
+
+
+ fprintf(fout, ";\n");
+
+
+ } else
+
+
+ fprintf(fout, ";\n");
+
+
+ if (row->defiRow::numProps() > 0) {
+
+
+ for (i = 0; i < row->defiRow::numProps(); i++) {
+
+
+ fprintf(fout, " + PROPERTY %s %s ",
+
+
+ row->defiRow::propName(i),
+
+
+ row->defiRow::propValue(i));
+
+
+ switch (row->defiRow::propType(i)) {
+
+
+ case 'R': fprintf(fout, "REAL ");
+
+
+ break;
+
+
+ case 'I': fprintf(fout, "INTEGER ");
+
+
+ break;
+
+
+ case 'S': fprintf(fout, "STRING ");
+
+
+ break;
+
+
+ case 'Q': fprintf(fout, "QUOTESTRING ");
+
+
+ break;
+
+
+ case 'N': fprintf(fout, "NUMBER ");
+
+
+ break;
+
+
+ }
+
+
+ }
+
+
+ fprintf(fout, ";\n");
+
+
+ }
+
+
+ break;
+
+
+ case defrTrackCbkType :
+
+
+ track = (defiTrack*)cl;
+
+
+ fprintf(fout, "TRACKS %s %g DO %g STEP %g LAYER ",
+
+
+ track->defiTrack::macro(), track->defiTrack::x(),
+
+
+ track->defiTrack::xNum(), track->defiTrack::xStep());
+
+
+ for (i = 0; i < track->defiTrack::numLayers(); i++)
+
+
+ fprintf(fout, "%s ", track->defiTrack::layer(i));
+
+
+ fprintf(fout, ";\n");
+
+
+ break;
+
+
+ case defrGcellGridCbkType :
+
+
+ gcg = (defiGcellGrid*)cl;
+
+
+ fprintf(fout, "GCELLGRID %s %d DO %d STEP %g ;\n",
+
+
+ gcg->defiGcellGrid::macro(), gcg->defiGcellGrid::x(),
+
+
+ gcg->defiGcellGrid::xNum(), gcg->defiGcellGrid::xStep());
+
+
+ break;
+
+
+ case defrViaCbkType :
+
+
+ via = (defiVia*)cl;
+
+
+ fprintf(fout, "- %s ", via->defiVia::name());
+
+
+ if (via->defiVia::hasPattern())
+
+
+ fprintf(fout, "+ PATTERNNAME %s ", via->defiVia::pattern());
+
+
+ for (i = 0; i < via->defiVia::numLayers(); i++) {
+
+
+ via->defiVia::layer(i, &name, &xl, &yl, &xh, &yh);
+
+
+ fprintf(fout, "+ RECT %s %d %d %d %d \n",
+
+
+ name, xl, yl, xh, yh);
+
+
+ }
+
+
+ // POLYGON
+
+
+ if (via->defiVia::numPolygons()) {
+
+
+ struct defiPoints points;
+
+
+ for (i = 0; i < via->defiVia::numPolygons(); i++) {
+
+
+ fprintf(fout, "\n + POLYGON %s ", via->polygonName(i));
+
+
+ points = via->getPolygon(i);
+
+
+ for (j = 0; j < points.numPoints; j++)
+
+
+ fprintf(fout, "%d %d ", points.x[j], points.y[j]);
+
+
+ }
+
+
+ }
+
+
+ fprintf(fout, " ;\n");
+
+
+ if (via->defiVia::hasViaRule()) {
+
+
+ char *vrn, *bl, *cl, *tl;
+
+
+ int xs, ys, xcs, ycs, xbe, ybe, xte, yte;
+
+
+ int cr, cc, xo, yo, xbo, ybo, xto, yto;
+
+
+ (void)via->defiVia::viaRule(&vrn, &xs, &ys, &bl, &cl, &tl, &xcs,
+
+
+ &ycs, &xbe, &ybe, &xte, &yte);
+
+
+ fprintf(fout, "+ VIARULE '%s'\n", vrn);
+
+
+ fprintf(fout, " + CUTSIZE %d %d\n", xs, ys);
+
+
+ fprintf(fout, " + LAYERS %s %s %s\n", bl, cl, tl);
+
+
+ fprintf(fout, " + CUTSPACING %d %d\n", xcs, ycs);
+
+
+ fprintf(fout, " + ENCLOSURE %d %d %d %d\n", xbe, ybe, xte, yte);
+
+
+ if (via->defiVia::hasRowCol()) {
+
+
+ (void)via->defiVia::rowCol(&cr, &cc);
+
+
+ fprintf(fout, " + ROWCOL %d %d\n", cr, cc);
+
+
+ }
+
+
+ if (via->defiVia::hasOrigin()) {
+
+
+ (void)via->defiVia::origin(&xo, &yo);
+
+
+ fprintf(fout, " + ORIGIN %d %d\n", xo, yo);
+
+
+ }
+
+
+ if (via->defiVia::hasOffset()) {
+
+
+ (void)via->defiVia::offset(&xbo, &ybo, &xto, &yto);
+
+
+ fprintf(fout, " + OFFSET %d %d %d %d\n", xbo, ybo, xto, yto);
+
+
+ }
+
+
+ if (via->defiVia::hasCutPattern())
+
+
+ fprintf(fout, " + PATTERN '%s'\n", via->defiVia::cutPattern());
+
+
+ }
+
+
+ --numObjs;
+
+
+ if (numObjs <= 0)
+
+
+ fprintf(fout, "END VIAS\n");
+
+
+ break;
+
+
+ case defrRegionCbkType :
+
+
+ re = (defiRegion*)cl;
+
+
+ fprintf(fout, "- %s ", re->defiRegion::name());
+
+
+ for (i = 0; i < re->defiRegion::numRectangles(); i++)
+
+
+ fprintf(fout, "%d %d %d %d \n", re->defiRegion::xl(i),
+
+
+ re->defiRegion::yl(i), re->defiRegion::xh(i),
+
+
+ re->defiRegion::yh(i));
+
+
+ if (re->defiRegion::hasType())
+
+
+ fprintf(fout, "+ TYPE %s\n", re->defiRegion::type());
+
+
+ if (re->defiRegion::numProps()) {
+
+
+ for (i = 0; i < re->defiRegion::numProps(); i++) {
+
+
+ fprintf(fout, "+ PROPERTY %s %s ", re->defiRegion::propName(i),
+
+
+ re->defiRegion::propValue(i));
+
+
+ switch (re->defiRegion::propType(i)) {
+
+
+ case 'R': fprintf(fout, "REAL ");
+
+
+ break;
+
+
+ case 'I': fprintf(fout, "INTEGER ");
+
+
+ break;
+
+
+ case 'S': fprintf(fout, "STRING ");
+
+
+ break;
+
+
+ case 'Q': fprintf(fout, "QUOTESTRING ");
+
+
+ break;
+
+
+ case 'N': fprintf(fout, "NUMBER ");
+
+
+ break;
+
+
+ }
+
+
+ }
+
+
+ }
+
+
+ fprintf(fout, ";\n");
+
+
+ --numObjs;
+
+
+ if (numObjs <= 0) {
+
+
+ fprintf(fout, "END REGIONS\n");
+
+
+ }
+
+
+ break;
+
+
+ case defrGroupNameCbkType :
+
+
+ if ((char*)cl) {
+
+
+ fprintf(fout, "- %s", (char*)cl);
+
+
+ break;
+
+
+ }
+
+
+ case defrGroupMemberCbkType :
+
+
+ if ((char*)cl) {
+
+
+ fprintf(fout, " %s", (char*)cl);
+
+
+ break;
+
+
+ }
+
+
+ case defrGroupCbkType :
+
+
+ group = (defiGroup*)cl;
+
+
+ if (group->defiGroup::hasMaxX() | group->defiGroup::hasMaxY()
+
+
+ | group->defiGroup::hasPerim()) {
+
+
+ fprintf(fout, "\n + SOFT ");
+
+
+ if (group->defiGroup::hasPerim())
+
+
+ fprintf(fout, "MAXHALFPERIMETER %d ",
+
+
+ group->defiGroup::perim());
+
+
+ if (group->defiGroup::hasMaxX())
+
+
+ fprintf(fout, "MAXX %d ", group->defiGroup::maxX());
+
+
+ if (group->defiGroup::hasMaxY())
+
+
+ fprintf(fout, "MAXY %d ", group->defiGroup::maxY());
+
+
+ }
+
+
+ if (group->defiGroup::hasRegionName())
+
+
+ fprintf(fout, "\n + REGION %s ", group->defiGroup::regionName());
+
+
+ if (group->defiGroup::hasRegionBox()) {
+
+
+ int *gxl, *gyl, *gxh, *gyh;
+
+
+ int size;
+
+
+ group->defiGroup::regionRects(&size, &gxl, &gyl, &gxh, &gyh);
+
+
+ for (i = 0; i < size; i++)
+
+
+ fprintf(fout, "REGION %d %d %d %d ", gxl[i], gyl[i],
+
+
+ gxh[i], gyh[i]);
+
+
+ }
+
+
+ if (group->defiGroup::numProps()) {
+
+
+ for (i = 0; i < group->defiGroup::numProps(); i++) {
+
+
+ fprintf(fout, "\n + PROPERTY %s %s ",
+
+
+ group->defiGroup::propName(i),
+
+
+ group->defiGroup::propValue(i));
+
+
+ switch (group->defiGroup::propType(i)) {
+
+
+ case 'R': fprintf(fout, "REAL ");
+
+
+ break;
+
+
+ case 'I': fprintf(fout, "INTEGER ");
+
+
+ break;
+
+
+ case 'S': fprintf(fout, "STRING ");
+
+
+ break;
+
+
+ case 'Q': fprintf(fout, "QUOTESTRING ");
+
+
+ break;
+
+
+ case 'N': fprintf(fout, "NUMBER ");
+
+
+ break;
+
+
+ }
+
+
+ }
+
+
+ }
+
+
+ fprintf(fout, " ;\n");
+
+
+ --numObjs;
+
+
+ if (numObjs <= 0)
+
+
+ fprintf(fout, "END GROUPS\n");
+
+
+ break;
+
+
+ case defrScanchainCbkType :
+
+
+ sc = (defiScanchain*)cl;
+
+
+ fprintf(fout, "- %s\n", sc->defiScanchain::name());
+
+
+ if (sc->defiScanchain::hasStart()) {
+
+
+ sc->defiScanchain::start(&a1, &b1);
+
+
+ fprintf(fout, " + START %s %s\n", a1, b1);
+
+
+ }
+
+
+ if (sc->defiScanchain::hasStop()) {
+
+
+ sc->defiScanchain::stop(&a1, &b1);
+
+
+ fprintf(fout, " + STOP %s %s\n", a1, b1);
+
+
+ }
+
+
+ if (sc->defiScanchain::hasCommonInPin() ||
+
+
+ sc->defiScanchain::hasCommonOutPin()) {
+
+
+ fprintf(fout, " + COMMONSCANPINS ");
+
+
+ if (sc->defiScanchain::hasCommonInPin())
+
+
+ fprintf(fout, " ( IN %s ) ", sc->defiScanchain::commonInPin());
+
+
+ if (sc->defiScanchain::hasCommonOutPin())
+
+
+ fprintf(fout, " ( OUT %s ) ",sc->defiScanchain::commonOutPin());
+
+
+ fprintf(fout, "\n");
+
+
+ }
+
+
+ if (sc->defiScanchain::hasFloating()) {
+
+
+ sc->defiScanchain::floating(&size, &inst, &inPin, &outPin, &bits);
+
+
+ if (size > 0)
+
+
+ fprintf(fout, " + FLOATING\n");
+
+
+ for (i = 0; i < size; i++) {
+
+
+ fprintf(fout, " %s ", inst[i]);
+
+
+ if (inPin[i])
+
+
+ fprintf(fout, "( IN %s ) ", inPin[i]);
+
+
+ if (outPin[i])
+
+
+ fprintf(fout, "( OUT %s ) ", outPin[i]);
+
+
+ if (bits[i] != -1)
+
+
+ fprintf(fout, "( BITS %d ) ", bits[i]);
+
+
+ fprintf(fout, "\n");
+
+
+ }
+
+
+ }
+
+
+
+
+
+ if (sc->defiScanchain::hasOrdered()) {
+
+
+ for (i = 0; i < sc->defiScanchain::numOrderedLists(); i++) {
+
+
+ sc->defiScanchain::ordered(i, &size, &inst, &inPin, &outPin,
+
+
+ &bits);
+
+
+ if (size > 0)
+
+
+ fprintf(fout, " + ORDERED\n");
+
+
+ for (j = 0; j < size; j++) {
+
+
+ fprintf(fout, " %s ", inst[j]);
+
+
+ if (inPin[j])
+
+
+ fprintf(fout, "( IN %s ) ", inPin[j]);
+
+
+ if (outPin[j])
+
+
+ fprintf(fout, "( OUT %s ) ", outPin[j]);
+
+
+ if (bits[j] != -1)
+
+
+ fprintf(fout, "( BITS %d ) ", bits[j]);
+
+
+ fprintf(fout, "\n");
+
+
+ }
+
+
+ }
+
+
+ }
+
+
+
+
+
+ if (sc->defiScanchain::hasPartition()) {
+
+
+ fprintf(fout, " + PARTITION %s ",
+
+
+ sc->defiScanchain::partitionName());
+
+
+ if (sc->defiScanchain::hasPartitionMaxBits())
+
+
+ fprintf(fout, "MAXBITS %d ",
+
+
+ sc->defiScanchain::partitionMaxBits());
+
+
+ }
+
+
+ fprintf(fout, ";\n");
+
+
+ --numObjs;
+
+
+ if (numObjs <= 0)
+
+
+ fprintf(fout, "END SCANCHAINS\n");
+
+
+ break;
+
+
+ case defrIOTimingCbkType :
+
+
+ iot = (defiIOTiming*)cl;
+
+
+ fprintf(fout, "- ( %s %s )\n", iot->defiIOTiming::inst(),
+
+
+ iot->defiIOTiming::pin());
+
+
+ if (iot->defiIOTiming::hasSlewRise())
+
+
+ fprintf(fout, " + RISE SLEWRATE %g %g\n",
+
+
+ iot->defiIOTiming::slewRiseMin(),
+
+
+ iot->defiIOTiming::slewRiseMax());
+
+
+ if (iot->defiIOTiming::hasSlewFall())
+
+
+ fprintf(fout, " + FALL SLEWRATE %g %g\n",
+
+
+ iot->defiIOTiming::slewFallMin(),
+
+
+ iot->defiIOTiming::slewFallMax());
+
+
+ if (iot->defiIOTiming::hasVariableRise())
+
+
+ fprintf(fout, " + RISE VARIABLE %g %g\n",
+
+
+ iot->defiIOTiming::variableRiseMin(),
+
+
+ iot->defiIOTiming::variableRiseMax());
+
+
+ if (iot->defiIOTiming::hasVariableFall())
+
+
+ fprintf(fout, " + FALL VARIABLE %g %g\n",
+
+
+ iot->defiIOTiming::variableFallMin(),
+
+
+ iot->defiIOTiming::variableFallMax());
+
+
+ if (iot->defiIOTiming::hasCapacitance())
+
+
+ fprintf(fout, " + CAPACITANCE %g\n",
+
+
+ iot->defiIOTiming::capacitance());
+
+
+ if (iot->defiIOTiming::hasDriveCell()) {
+
+
+ fprintf(fout, " + DRIVECELL %s ",
+
+
+ iot->defiIOTiming::driveCell());
+
+
+ if (iot->defiIOTiming::hasFrom())
+
+
+ fprintf(fout, " FROMPIN %s ",
+
+
+ iot->defiIOTiming::from());
+
+
+ if (iot->defiIOTiming::hasTo())
+
+
+ fprintf(fout, " TOPIN %s ",
+
+
+ iot->defiIOTiming::to());
+
+
+ if (iot->defiIOTiming::hasParallel())
+
+
+ fprintf(fout, "PARALLEL %g",
+
+
+ iot->defiIOTiming::parallel());
+
+
+ fprintf(fout, "\n");
+
+
+ }
+
+
+ fprintf(fout, ";\n");
+
+
+ --numObjs;
+
+
+ if (numObjs <= 0)
+
+
+ fprintf(fout, "END IOTIMINGS\n");
+
+
+ break;
+
+
+ case defrFPCCbkType :
+
+
+ fpc = (defiFPC*)cl;
+
+
+ fprintf(fout, "- %s ", fpc->defiFPC::name());
+
+
+ if (fpc->defiFPC::isVertical())
+
+
+ fprintf(fout, "VERTICAL ");
+
+
+ if (fpc->defiFPC::isHorizontal())
+
+
+ fprintf(fout, "HORIZONTAL ");
+
+
+ if (fpc->defiFPC::hasAlign())
+
+
+ fprintf(fout, "ALIGN ");
+
+
+ if (fpc->defiFPC::hasMax())
+
+
+ fprintf(fout, "%g ", fpc->defiFPC::alignMax());
+
+
+ if (fpc->defiFPC::hasMin())
+
+
+ fprintf(fout, "%g ", fpc->defiFPC::alignMin());
+
+
+ if (fpc->defiFPC::hasEqual())
+
+
+ fprintf(fout, "%g ", fpc->defiFPC::equal());
+
+
+ for (i = 0; i < fpc->defiFPC::numParts(); i++) {
+
+
+ fpc->defiFPC::getPart(i, &corner, &typ, &name);
+
+
+ if (corner == 'B')
+
+
+ fprintf(fout, "BOTTOMLEFT ");
+
+
+ else
+
+
+ fprintf(fout, "TOPRIGHT ");
+
+
+ if (typ == 'R')
+
+
+ fprintf(fout, "ROWS %s ", name);
+
+
+ else
+
+
+ fprintf(fout, "COMPS %s ", name);
+
+
+ }
+
+
+ fprintf(fout, ";\n");
+
+
+ --numObjs;
+
+
+ if (numObjs <= 0)
+
+
+ fprintf(fout, "END FLOORPLANCONSTRAINTS\n");
+
+
+ break;
+
+
+ case defrTimingDisableCbkType :
+
+
+ td = (defiTimingDisable*)cl;
+
+
+ if (td->defiTimingDisable::hasFromTo())
+
+
+ fprintf(fout, "- FROMPIN %s %s ",
+
+
+ td->defiTimingDisable::fromInst(),
+
+
+ td->defiTimingDisable::fromPin(),
+
+
+ td->defiTimingDisable::toInst(),
+
+
+ td->defiTimingDisable::toPin());
+
+
+ if (td->defiTimingDisable::hasThru())
+
+
+ fprintf(fout, "- THRUPIN %s %s ",
+
+
+ td->defiTimingDisable::thruInst(),
+
+
+ td->defiTimingDisable::thruPin());
+
+
+ if (td->defiTimingDisable::hasMacroFromTo())
+
+
+ fprintf(fout, "- MACRO %s FROMPIN %s %s ",
+
+
+ td->defiTimingDisable::macroName(),
+
+
+ td->defiTimingDisable::fromPin(),
+
+
+ td->defiTimingDisable::toPin());
+
+
+ if (td->defiTimingDisable::hasMacroThru())
+
+
+ fprintf(fout, "- MACRO %s THRUPIN %s %s ",
+
+
+ td->defiTimingDisable::macroName(),
+
+
+ td->defiTimingDisable::fromPin());
+
+
+ fprintf(fout, ";\n");
+
+
+ break;
+
+
+ case defrPartitionCbkType :
+
+
+ part = (defiPartition*)cl;
+
+
+ fprintf(fout, "- %s ", part->defiPartition::name());
+
+
+ if (part->defiPartition::isSetupRise() |
+
+
+ part->defiPartition::isSetupFall() |
+
+
+ part->defiPartition::isHoldRise() |
+
+
+ part->defiPartition::isHoldFall()) {
+
+
+ // has turnoff
+
+
+ fprintf(fout, "TURNOFF ");
+
+
+ if (part->defiPartition::isSetupRise())
+
+
+ fprintf(fout, "SETUPRISE ");
+
+
+ if (part->defiPartition::isSetupFall())
+
+
+ fprintf(fout, "SETUPFALL ");
+
+
+ if (part->defiPartition::isHoldRise())
+
+
+ fprintf(fout, "HOLDRISE ");
+
+
+ if (part->defiPartition::isHoldFall())
+
+
+ fprintf(fout, "HOLDFALL ");
+
+
+ }
+
+
+ itemT = part->defiPartition::itemType();
+
+
+ dir = part->defiPartition::direction();
+
+
+ if (strcmp(itemT, "CLOCK") == 0) {
+
+
+ if (dir == 'T') // toclockpin
+
+
+ fprintf(fout, "+ TOCLOCKPIN %s %s ",
+
+
+ part->defiPartition::instName(),
+
+
+ part->defiPartition::pinName());
+
+
+ if (dir == 'F') // fromclockpin
+
+
+ fprintf(fout, "+ FROMCLOCKPIN %s %s ",
+
+
+ part->defiPartition::instName(),
+
+
+ part->defiPartition::pinName());
+
+
+ if (part->defiPartition::hasMin())
+
+
+ fprintf(fout, "MIN %g %g ",
+
+
+ part->defiPartition::partitionMin(),
+
+
+ part->defiPartition::partitionMax());
+
+
+ if (part->defiPartition::hasMax())
+
+
+ fprintf(fout, "MAX %g %g ",
+
+
+ part->defiPartition::partitionMin(),
+
+
+ part->defiPartition::partitionMax());
+
+
+ fprintf(fout, "PINS ");
+
+
+ for (i = 0; i < part->defiPartition::numPins(); i++)
+
+
+ fprintf(fout, "%s ", part->defiPartition::pin(i));
+
+
+ } else if (strcmp(itemT, "IO") == 0) {
+
+
+ if (dir == 'T') // toiopin
+
+
+ fprintf(fout, "+ TOIOPIN %s %s ",
+
+
+ part->defiPartition::instName(),
+
+
+ part->defiPartition::pinName());
+
+
+ if (dir == 'F') // fromiopin
+
+
+ fprintf(fout, "+ FROMIOPIN %s %s ",
+
+
+ part->defiPartition::instName(),
+
+
+ part->defiPartition::pinName());
+
+
+ } else if (strcmp(itemT, "COMP") == 0) {
+
+
+ if (dir == 'T') // tocomppin
+
+
+ fprintf(fout, "+ TOCOMPPIN %s %s ",
+
+
+ part->defiPartition::instName(),
+
+
+ part->defiPartition::pinName());
+
+
+ if (dir == 'F') // fromcomppin
+
+
+ fprintf(fout, "+ FROMCOMPPIN %s %s ",
+
+
+ part->defiPartition::instName(),
+
+
+ part->defiPartition::pinName());
+
+
+ }
+
+
+ fprintf(fout, ";\n");
+
+
+ --numObjs;
+
+
+ if (numObjs <= 0)
+
+
+ fprintf(fout, "END PARTITIONS\n");
+
+
+ break;
+
+
+
+
+
+ case defrPinPropCbkType :
+
+
+ pprop = (defiPinProp*)cl;
+
+
+ if (pprop->defiPinProp::isPin())
+
+
+ fprintf(fout, "- PIN %s ", pprop->defiPinProp::pinName());
+
+
+ else
+
+
+ fprintf(fout, "- %s %s ",
+
+
+ pprop->defiPinProp::instName(),
+
+
+ pprop->defiPinProp::pinName());
+
+
+ fprintf(fout, ";\n");
+
+
+ if (pprop->defiPinProp::numProps() > 0) {
+
+
+ for (i = 0; i < pprop->defiPinProp::numProps(); i++) {
+
+
+ fprintf(fout, " + PROPERTY %s %s ",
+
+
+ pprop->defiPinProp::propName(i),
+
+
+ pprop->defiPinProp::propValue(i));
+
+
+ switch (pprop->defiPinProp::propType(i)) {
+
+
+ case 'R': fprintf(fout, "REAL ");
+
+
+ break;
+
+
+ case 'I': fprintf(fout, "INTEGER ");
+
+
+ break;
+
+
+ case 'S': fprintf(fout, "STRING ");
+
+
+ break;
+
+
+ case 'Q': fprintf(fout, "QUOTESTRING ");
+
+
+ break;
+
+
+ case 'N': fprintf(fout, "NUMBER ");
+
+
+ break;
+
+
+ }
+
+
+ }
+
+
+ fprintf(fout, ";\n");
+
+
+ }
+
+
+ --numObjs;
+
+
+ if (numObjs <= 0)
+
+
+ fprintf(fout, "END PINPROPERTIES\n");
+
+
+ break;
+
+
+ case defrBlockageCbkType :
+
+
+ block = (defiBlockage*)cl;
+
+
+ if (block->defiBlockage::hasLayer()) {
+
+
+ fprintf(fout, "- LAYER %s\n", block->defiBlockage::layerName());
+
+
+ if (block->defiBlockage::hasComponent())
+
+
+ fprintf(fout, " + COMPONENT %s\n",
+
+
+ block->defiBlockage::layerComponentName());
+
+
+ if (block->defiBlockage::hasSlots())
+
+
+ fprintf(fout, " + SLOTS\n");
+
+
+ if (block->defiBlockage::hasFills())
+
+
+ fprintf(fout, " + FILLS\n");
+
+
+ if (block->defiBlockage::hasPushdown())
+
+
+ fprintf(fout, " + PUSHDOWN\n");
+
+
+ if (block->defiBlockage::hasExceptpgnet())
+
+
+ fprintf(fout, " + EXCEPTPGNET\n");
+
+
+ if (block->defiBlockage::hasSpacing())
+
+
+ fprintf(fout, " + SPACING %d\n",
+
+
+ block->defiBlockage::minSpacing());
+
+
+ if (block->defiBlockage::hasDesignRuleWidth())
+
+
+ fprintf(fout, " + DESIGNRULEWIDTH %d\n",
+
+
+ block->defiBlockage::designRuleWidth());
+
+
+ }
+
+
+ else if (block->defiBlockage::hasPlacement()) {
+
+
+ fprintf(fout, "- PLACEMENT\n");
+
+
+ if (block->defiBlockage::hasSoft())
+
+
+ fprintf(fout, " + SOFT\n");
+
+
+ if (block->defiBlockage::hasPartial())
+
+
+ fprintf(fout, " + PARTIAL %g\n",
+
+
+ block->defiBlockage::placementMaxDensity());
+
+
+ if (block->defiBlockage::hasComponent())
+
+
+ fprintf(fout, " + COMPONENT %s\n",
+
+
+ block->defiBlockage::placementComponentName());
+
+
+ if (block->defiBlockage::hasPushdown())
+
+
+ fprintf(fout, " + PUSHDOWN\n");
+
+
+ }
+
+
+
+
+
+ for (i = 0; i < block->defiBlockage::numRectangles(); i++) {
+
+
+ fprintf(fout, " RECT %d %d %d %d\n",
+
+
+ block->defiBlockage::xl(i), block->defiBlockage::yl(i),
+
+
+ block->defiBlockage::xh(i), block->defiBlockage::yh(i));
+
+
+ }
+
+
+
+
+
+ for (i = 0; i < block->defiBlockage::numPolygons(); i++) {
+
+
+ fprintf(fout, " POLYGON ");
+
+
+ points = block->getPolygon(i);
+
+
+ for (j = 0; j < points.numPoints; j++)
+
+
+ fprintf(fout, "%d %d ", points.x[j], points.y[j]);
+
+
+ fprintf(fout, "\n");
+
+
+ }
+
+
+ fprintf(fout, ";\n");
+
+
+ --numObjs;
+
+
+ if (numObjs <= 0)
+
+
+ fprintf(fout, "END BLOCKAGES\n");
+
+
+ break;
+
+
+ case defrSlotCbkType :
+
+
+ slots = (defiSlot*)cl;
+
+
+ if (slots->defiSlot::hasLayer())
+
+
+ fprintf(fout, "- LAYER %s\n", slots->defiSlot::layerName());
+
+
+
+
+
+ for (i = 0; i < slots->defiSlot::numRectangles(); i++) {
+
+
+ fprintf(fout, " RECT %d %d %d %d\n",
+
+
+ slots->defiSlot::xl(i), slots->defiSlot::yl(i),
+
+
+ slots->defiSlot::xh(i), slots->defiSlot::yh(i));
+
+
+ }
+
+
+ for (i = 0; i < slots->defiSlot::numPolygons(); i++) {
+
+
+ fprintf(fout, " POLYGON ");
+
+
+ points = slots->getPolygon(i);
+
+
+ for (j = 0; j < points.numPoints; j++)
+
+
+ fprintf(fout, "%d %d ", points.x[j], points.y[j]);
+
+
+ fprintf(fout, ";\n");
+
+
+ }
+
+
+ fprintf(fout, ";\n");
+
+
+ --numObjs;
+
+
+ if (numObjs <= 0)
+
+
+ fprintf(fout, "END SLOTS\n");
+
+
+ break;
+
+
+ case defrFillCbkType :
+
+
+ fills = (defiFill*)cl;
+
+
+ if (fills->defiFill::hasLayer()) {
+
+
+ fprintf(fout, "- LAYER %s", fills->defiFill::layerName());
+
+
+ if (fills->defiFill::hasLayerOpc())
+
+
+ fprintf(fout, " + OPC");
+
+
+ fprintf(fout, "\n");
+
+
+
+
+
+ for (i = 0; i < fills->defiFill::numRectangles(); i++) {
+
+
+ fprintf(fout, " RECT %d %d %d %d\n",
+
+
+ fills->defiFill::xl(i), fills->defiFill::yl(i),
+
+
+ fills->defiFill::xh(i), fills->defiFill::yh(i));
+
+
+ }
+
+
+ for (i = 0; i < fills->defiFill::numPolygons(); i++) {
+
+
+ fprintf(fout, " POLYGON ");
+
+
+ points = fills->getPolygon(i);
+
+
+ for (j = 0; j < points.numPoints; j++)
+
+
+ fprintf(fout, "%d %d ", points.x[j], points.y[j]);
+
+
+ fprintf(fout, ";\n");
+
+
+ }
+
+
+ fprintf(fout, ";\n");
+
+
+ }
+
+
+ --numObjs;
+
+
+ if (fills->defiFill::hasVia()) {
+
+
+ fprintf(fout, "- VIA %s", fills->defiFill::viaName());
+
+
+ if (fills->defiFill::hasViaOpc())
+
+
+ fprintf(fout, " + OPC");
+
+
+ fprintf(fout, "\n");
+
+
+
+
+
+ for (i = 0; i < fills->defiFill::numViaPts(); i++) {
+
+
+ points = fills->getViaPts(i);
+
+
+ for (j = 0; j < points.numPoints; j++)
+
+
+ fprintf(fout, " %d %d", points.x[j], points.y[j]);
+
+
+ fprintf(fout, ";\n");
+
+
+ }
+
+
+ fprintf(fout, ";\n");
+
+
+ }
+
+
+ if (numObjs <= 0)
+
+
+ fprintf(fout, "END FILLS\n");
+
+
+ break;
+
+
+ case defrStylesCbkType :
+
+
+ struct defiPoints points;
+
+
+ styles = (defiStyles*)cl;
+
+
+ fprintf(fout, "- STYLE %d ", styles->defiStyles::style());
+
+
+ points = styles->defiStyles::getPolygon();
+
+
+ for (j = 0; j < points.numPoints; j++)
+
+
+ fprintf(fout, "%d %d ", points.x[j], points.y[j]);
+
+
+ fprintf(fout, ";\n");
+
+
+ --numObjs;
+
+
+ if (numObjs <= 0)
+
+
+ fprintf(fout, "END STYLES\n");
+
+
+ break;
+
+
+
+
+
+ default: fprintf(fout, "BOGUS callback to cls.\n"); return 1;
+
+
+ }
+
+
+ return 0;
+
+
+ }
+
+
+
+
+
+
+
+
+ int dn(defrCallbackType_e c, const char* h, defiUserData ud) {
+
+
+ checkType(c);
+
+
+ if ((long)ud != userData) dataError();
+
+
+ fprintf(fout, "DIVIDERCHAR \"%s\" ;\n",h);
+
+
+ return 0;
+
+
+ }
+
+
+
+
+
+
+
+
+ int ext(defrCallbackType_e t, const char* c, defiUserData ud) {
+
+
+ char* name;
+
+
+
+
+
+ checkType(t);
+
+
+ if ((long)ud != userData) dataError();
+
+
+
+
+
+ switch (t) {
+
+
+ case defrNetExtCbkType : name = address("net"); break;
+
+
+ case defrComponentExtCbkType : name = address("component"); break;
+
+
+ case defrPinExtCbkType : name = address("pin"); break;
+
+
+ case defrViaExtCbkType : name = address("via"); break;
+
+
+ case defrNetConnectionExtCbkType : name = address("net connection"); break;
+
+
+ case defrGroupExtCbkType : name = address("group"); break;
+
+
+ case defrScanChainExtCbkType : name = address("scanchain"); break;
+
+
+ case defrIoTimingsExtCbkType : name = address("io timing"); break;
+
+
+ case defrPartitionsExtCbkType : name = address("partition"); break;
+
+
+ default: name = address("BOGUS"); return 1;
+
+
+ }
+
+
+ fprintf(fout, " %s extension %s\n", name, c);
+
+
+ return 0;
+
+
+ }
+
+
+
+
+
+ int extension(defrCallbackType_e c, const char* extsn, defiUserData ud) {
+
+
+ checkType(c);
+
+
+ if ((long)ud != userData) dataError();
+
+
+ fprintf(fout, "BEGINEXT %s\n", extsn);
+
+
+ return 0;
+
+
+ }
+
+
+
+
+
+ void* mallocCB(int size) {
+
+
+ return malloc(size);
+
+
+ }
+
+
+
+
+
+ void* reallocCB(void* name, int size) {
+
+
+ return realloc(name, size);
+
+
+ }
+
+
+
+
+
+ void freeCB(void* name) {
+
+
+ free(name);
+
+
+ return;
+
+
+ }
+
+
+
+
+
+ void lineNumberCB(int lineNo) {
+
+
+ fprintf(fout, "Parsed %d number of lines!!\n", lineNo);
+
+
+ return;
+
+
+ }
+
+
+
+
+
+ int main(int argc, char** argv) {
+
+
+ int num = 1734;
+
+
+ char* inFile[6];
+
+
+ char* outFile;
+
+
+ FILE* f;
+
+
+ int res;
+
+
+ int noCalls = 0;
+
+
+ int retStr = 0;
+
+
+ int numInFile = 0;
+
+
+ int fileCt = 0;
+
+
+
+
+
+ strcpy(defaultName, "def.in");
+
+
+ strcpy(defaultOut, "list");
+
+
+ inFile[0] = defaultName;
+
+
+ outFile = defaultOut;
+
+
+ fout = stdout;
+
+
+ userData = 0x01020304;
+
+
+
+
+
+ argc--;
+
+
+ argv++;
+
+
+ while (argc--) {
+
+
+
+
+
+ if (strcmp(*argv, "-d") == 0) {
+
+
+ argv++;
+
+
+ argc--;
+
+
+ sscanf(*argv, "%d", &num);
+
+
+ defiSetDebug(num, 1);
+
+
+
+
+
+ } else if (strcmp(*argv, "-nc") == 0) {
+
+
+ noCalls = 1;
+
+
+
+
+
+ } else if (strcmp(*argv, "-o") == 0) {
+
+
+ argv++;
+
+
+ argc--;
+
+
+ outFile = *argv;
+
+
+ if ((fout = fopen(outFile, "w")) == 0) {
+
+
+ fprintf(stderr, "ERROR: could not open output file\n");
+
+
+ return 2;
+
+
+ }
+
+
+
+
+
+ } else if (strcmp(*argv, "-verStr") == 0) {
+
+
+ /* New to set the version callback routine to return a string */
+
+
+ /* instead of double. */
+
+
+ retStr = 1;
+
+
+
+
+
+ } else if (argv[0][0] != '-') {
+
+
+ if (numInFile >= 6) {
+
+
+ fprintf(stderr, "ERROR: too many input files, max = 6.\n");
+
+
+ return 2;
+
+
+ }
+
+
+ inFile[numInFile++] = *argv;
+
+
+ } else if (strcmp(*argv, "-h") == 0) {
+
+
+ fprintf(stderr, "Usage: defrw [<defFilename>] [-o <outputFilename>]\n");
+
+
+ return 2;
+
+
+ } else if (strcmp(*argv, "-setSNetWireCbk") == 0) {
+
+
+ setSNetWireCbk = 1;
+
+
+ } else {
+
+
+ fprintf(stderr, "ERROR: Illegal command line option: '%s'\n", *argv);
+
+
+ return 2;
+
+
+ }
+
+
+
+
+
+ argv++;
+
+
+ }
+
+
+
+
+
+ if (noCalls == 0) {
+
+
+ defrSetUserData((void*)3);
+
+
+ defrSetDesignCbk(dname);
+
+
+ defrSetTechnologyCbk(tname);
+
+
+ defrSetExtensionCbk(extension);
+
+
+ defrSetDesignEndCbk(done);
+
+
+ defrSetPropDefStartCbk(propstart);
+
+
+ defrSetPropCbk(prop);
+
+
+ defrSetPropDefEndCbk(propend);
+
+
+ defrSetNetCbk(netf);
+
+
+ defrSetNetNameCbk(netNamef);
+
+
+ defrSetNetNonDefaultRuleCbk(nondefRulef);
+
+
+ defrSetNetSubnetNameCbk(subnetNamef);
+
+
+ defrSetNetPartialPathCbk(netpath);
+
+
+ defrSetSNetCbk(snetf);
+
+
+ defrSetSNetPartialPathCbk(snetpath);
+
+
+ if (setSNetWireCbk)
+
+
+ defrSetSNetWireCbk(snetwire);
+
+
+ defrSetComponentCbk(compf);
+
+
+ defrSetAddPathToNet();
+
+
+ defrSetHistoryCbk(hist);
+
+
+ defrSetConstraintCbk(constraint);
+
+
+ defrSetAssertionCbk(constraint);
+
+
+ defrSetArrayNameCbk(an);
+
+
+ defrSetFloorPlanNameCbk(fn);
+
+
+ defrSetDividerCbk(dn);
+
+
+ defrSetBusBitCbk(bbn);
+
+
+ defrSetNonDefaultCbk(ndr);
+
+
+
+
+
+ defrSetAssertionsStartCbk(constraintst);
+
+
+ defrSetConstraintsStartCbk(constraintst);
+
+
+ defrSetComponentStartCbk(cs);
+
+
+ defrSetPinPropStartCbk(cs);
+
+
+ defrSetNetStartCbk(cs);
+
+
+ defrSetStartPinsCbk(cs);
+
+
+ defrSetViaStartCbk(cs);
+
+
+ defrSetRegionStartCbk(cs);
+
+
+ defrSetSNetStartCbk(cs);
+
+
+ defrSetGroupsStartCbk(cs);
+
+
+ defrSetScanchainsStartCbk(cs);
+
+
+ defrSetIOTimingsStartCbk(cs);
+
+
+ defrSetFPCStartCbk(cs);
+
+
+ defrSetTimingDisablesStartCbk(cs);
+
+
+ defrSetPartitionsStartCbk(cs);
+
+
+ defrSetBlockageStartCbk(cs);
+
+
+ defrSetSlotStartCbk(cs);
+
+
+ defrSetFillStartCbk(cs);
+
+
+ defrSetNonDefaultStartCbk(cs);
+
+
+ defrSetStylesStartCbk(cs);
+
+
+
+
+
+ // All of the extensions point to the same function.
+
+
+ defrSetNetExtCbk(ext);
+
+
+ defrSetComponentExtCbk(ext);
+
+
+ defrSetPinExtCbk(ext);
+
+
+ defrSetViaExtCbk(ext);
+
+
+ defrSetNetConnectionExtCbk(ext);
+
+
+ defrSetGroupExtCbk(ext);
+
+
+ defrSetScanChainExtCbk(ext);
+
+
+ defrSetIoTimingsExtCbk(ext);
+
+
+ defrSetPartitionsExtCbk(ext);
+
+
+
+
+
+ defrSetUnitsCbk(units);
+
+
+ if (!retStr)
+
+
+ defrSetVersionCbk(vers);
+
+
+ else
+
+
+ defrSetVersionStrCbk(versStr);
+
+
+ defrSetCaseSensitiveCbk(casesens);
+
+
+
+
+
+ // The following calls are an example of using one function "cls"
+
+
+ // to be the callback for many DIFFERENT types of constructs.
+
+
+ // We have to cast the function type to meet the requirements
+
+
+ // of each different set function.
+
+
+ defrSetSiteCbk((defrSiteCbkFnType)cls);
+
+
+ defrSetCanplaceCbk((defrSiteCbkFnType)cls);
+
+
+ defrSetCannotOccupyCbk((defrSiteCbkFnType)cls);
+
+
+ defrSetDieAreaCbk((defrBoxCbkFnType)cls);
+
+
+ defrSetPinCapCbk((defrPinCapCbkFnType)cls);
+
+
+ defrSetPinCbk((defrPinCbkFnType)cls);
+
+
+ defrSetPinPropCbk((defrPinPropCbkFnType)cls);
+
+
+ defrSetDefaultCapCbk((defrIntegerCbkFnType)cls);
+
+
+ defrSetRowCbk((defrRowCbkFnType)cls);
+
+
+ defrSetTrackCbk((defrTrackCbkFnType)cls);
+
+
+ defrSetGcellGridCbk((defrGcellGridCbkFnType)cls);
+
+
+ defrSetViaCbk((defrViaCbkFnType)cls);
+
+
+ defrSetRegionCbk((defrRegionCbkFnType)cls);
+
+
+ defrSetGroupNameCbk((defrStringCbkFnType)cls);
+
+
+ defrSetGroupMemberCbk((defrStringCbkFnType)cls);
+
+
+ defrSetGroupCbk((defrGroupCbkFnType)cls);
+
+
+ defrSetScanchainCbk((defrScanchainCbkFnType)cls);
+
+
+ defrSetIOTimingCbk((defrIOTimingCbkFnType)cls);
+
+
+ defrSetFPCCbk((defrFPCCbkFnType)cls);
+
+
+ defrSetTimingDisableCbk((defrTimingDisableCbkFnType)cls);
+
+
+ defrSetPartitionCbk((defrPartitionCbkFnType)cls);
+
+
+ defrSetBlockageCbk((defrBlockageCbkFnType)cls);
+
+
+ defrSetSlotCbk((defrSlotCbkFnType)cls);
+
+
+ defrSetFillCbk((defrFillCbkFnType)cls);
+
+
+ defrSetStylesCbk((defrStylesCbkFnType)cls);
+
+
+
+
+
+ defrSetAssertionsEndCbk(endfunc);
+
+
+ defrSetComponentEndCbk(endfunc);
+
+
+ defrSetConstraintsEndCbk(endfunc);
+
+
+ defrSetNetEndCbk(endfunc);
+
+
+ defrSetFPCEndCbk(endfunc);
+
+
+ defrSetFPCEndCbk(endfunc);
+
+
+ defrSetGroupsEndCbk(endfunc);
+
+
+ defrSetIOTimingsEndCbk(endfunc);
+
+
+ defrSetNetEndCbk(endfunc);
+
+
+ defrSetPartitionsEndCbk(endfunc);
+
+
+ defrSetRegionEndCbk(endfunc);
+
+
+ defrSetSNetEndCbk(endfunc);
+
+
+ defrSetScanchainsEndCbk(endfunc);
+
+
+ defrSetPinEndCbk(endfunc);
+
+
+ defrSetTimingDisablesEndCbk(endfunc);
+
+
+ defrSetViaEndCbk(endfunc);
+
+
+ defrSetPinPropEndCbk(endfunc);
+
+
+ defrSetBlockageEndCbk(endfunc);
+
+
+ defrSetSlotEndCbk(endfunc);
+
+
+ defrSetFillEndCbk(endfunc);
+
+
+ defrSetNonDefaultEndCbk(endfunc);
+
+
+ defrSetStylesEndCbk(endfunc);
+
+
+
+
+
+ defrSetMallocFunction(mallocCB);
+
+
+ defrSetReallocFunction(reallocCB);
+
+
+ defrSetFreeFunction(freeCB);
+
+
+
+
+
+ defrSetLineNumberFunction(lineNumberCB);
+
+
+ defrSetDeltaNumberLines(50);
+
+
+
+
+
+ // Testing to set the number of warnings
+
+
+ defrSetAssertionWarnings(3);
+
+
+ defrSetBlockageWarnings(3);
+
+
+ defrSetCaseSensitiveWarnings(3);
+
+
+ defrSetComponentWarnings(3);
+
+
+ defrSetConstraintWarnings(0);
+
+
+ defrSetDefaultCapWarnings(3);
+
+
+ defrSetGcellGridWarnings(3);
+
+
+ defrSetIOTimingWarnings(3);
+
+
+ defrSetNetWarnings(3);
+
+
+ defrSetNonDefaultWarnings(3);
+
+
+ defrSetPinExtWarnings(3);
+
+
+ defrSetPinWarnings(3);
+
+
+ defrSetRegionWarnings(3);
+
+
+ defrSetRowWarnings(3);
+
+
+ defrSetScanchainWarnings(3);
+
+
+ defrSetSNetWarnings(3);
+
+
+ defrSetStylesWarnings(3);
+
+
+ defrSetTrackWarnings(3);
+
+
+ defrSetUnitsWarnings(3);
+
+
+ defrSetVersionWarnings(3);
+
+
+ defrSetViaWarnings(3);
+
+
+ }
+
+
+
+
+
+ defrInit();
+
+
+
+
+
+ for (fileCt = 0; fileCt < numInFile; fileCt++) {
+
+
+ defrReset();
+
+
+ if ((f = fopen(inFile[fileCt],"r")) == 0) {
+
+
+ fprintf(stderr,"Couldn't open input file '%s'\n", inFile[fileCt]);
+
+
+ return(2);
+
+
+ }
+
+
+ // Set case sensitive to 0 to start with, in History & PropertyDefinition
+
+
+ // reset it to 1.
+
+
+ res = defrRead(f, inFile[fileCt], (void*)userData, 1);
+
+
+
+
+
+ if (res)
+
+
+ fprintf(stderr, "Reader returns bad status.\n", inFile[fileCt]);
+
+
+
+
+
+ (void)defrPrintUnusedCallbacks(fout);
+
+
+ (void)defrReleaseNResetMemory();
+
+
+
+
+
+ }
+
+
+ fclose(fout);
+
+
+
+
+
+ return res;
+
+
+ }
+
+
+
+
+
+
+ #include <stdlib.h>
+
+
+ #include <stdio.h>
+
+
+ #include <string.h>
+
+
+ #ifndef WIN32
+
+
+ # include <unistd.h>
+
+
+ #endif /* not WIN32 */
+
+
+ #include "defwWriter.hpp"
+
+
+
+
+
+ char defaultOut[128];
+
+
+
+
+
+ // Global variables
+
+
+ FILE* fout;
+
+
+
+
+
+ #define CHECK_STATUS(status) \
+
+
+ if (status) { \
+
+
+ defwPrintError(status); \
+
+
+ return(status); \
+
+
+ }
+
+
+
+
+
+ int main(int argc, char** argv) {
+
+
+ char* outfile;
+
+
+ int status; // return code, if none 0 means error
+
+
+ int lineNumber = 0;
+
+
+
+
+
+ const char** layers;
+
+
+ const char** foreigns;
+
+
+ int *foreignX, *foreignY, *foreignOrient;
+
+
+ const char** foreignOrientStr;
+
+
+ const char **coorX, **coorY;
+
+
+ const char **coorValue;
+
+
+ const char **groupExpr;
+
+
+ int *xPoints, *yPoints;
+
+
+ double *xP, *yP;
+
+
+
+
+
+ // assign the default
+
+
+ strcpy(defaultOut, "def.in");
+
+
+ outfile = defaultOut;
+
+
+ fout = stdout;
+
+
+
+
+
+ argc--;
+
+
+ argv++;
+
+
+ while (argc--) {
+
+
+ if (strcmp(*argv, "-o") == 0) { // output filename
+
+
+ argv++;
+
+
+ argc--;
+
+
+ outfile = *argv;
+
+
+ if ((fout = fopen(outfile, "w")) == 0) {
+
+
+ fprintf(stderr, "ERROR: could not open output file\n");
+
+
+ return 2;
+
+
+ }
+
+
+ } else if (strncmp(*argv, "-h", 2) == 0) { // compare with -h[elp]
+
+
+ fprintf(stderr, "Usage: defwrite [-o <filename>] [-help]\n");
+
+
+ return 1;
+
+
+ } else {
+
+
+ fprintf(stderr, "ERROR: Illegal command line option: '%s'\n", *argv);
+
+
+ return 2;
+
+
+ }
+
+
+ argv++;
+
+
+ }
+
+
+
+
+
+ status = defwInitCbk(fout);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwVersion (5, 7);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwDividerChar(":");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwBusBitChars("[]");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwDesignName("muk");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwTechnology("muk");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwArray("core_array");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwFloorplan("DEFAULT");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwUnits(100);
+
+
+ CHECK_STATUS(status);
+
+
+
+
+
+ // initalize
+
+
+ status = defwNewLine();
+
+
+ CHECK_STATUS(status);
+
+
+
+
+
+ // history
+
+
+ status = defwHistory("Corrected STEP for ROW_9 and added ROW_10 of SITE CORE1 (def)");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwHistory("Removed NONDEFAULTRULE from the net XX100 (def)");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwHistory("Changed some cell orientations (def)");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNewLine();
+
+
+ CHECK_STATUS(status);
+
+
+
+
+
+ // PROPERTYDEFINITIONS
+
+
+ status = defwStartPropDef();
+
+
+ CHECK_STATUS(status);
+
+
+ defwAddComment("defwPropDef is broken into 3 routines, defwStringPropDef");
+
+
+ defwAddComment("defwIntPropDef, and defwRealPropDef");
+
+
+ status = defwStringPropDef("REGION", "scum", 0, 0, 0 );
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwIntPropDef("REGION", "center", 0, 0, 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwRealPropDef("REGION", "area", 0, 0, 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwStringPropDef("GROUP", "ggrp", 0, 0, 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwIntPropDef("GROUP", "site", 0, 25, 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwRealPropDef("GROUP", "maxarea", 0, 0, 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwStringPropDef("COMPONENT", "cc", 0, 0, 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwIntPropDef("COMPONENT", "index", 0, 0, 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwRealPropDef("COMPONENT", "size", 0, 0, 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwIntPropDef("NET", "alt", 0, 0, 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwStringPropDef("NET", "lastName", 0, 0, 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwRealPropDef("NET", "length", 0, 0, 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwStringPropDef("SPECIALNET", "contype", 0, 0, 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwIntPropDef("SPECIALNET", "ind", 0, 0, 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwRealPropDef("SPECIALNET", "maxlength", 0, 0, 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwStringPropDef("DESIGN", "title", 0, 0, "Buffer");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwIntPropDef("DESIGN", "priority", 0, 0, 14);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwRealPropDef("DESIGN", "howbig", 0, 0, 15.16);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwRealPropDef("ROW", "minlength", 1.0, 100.0, 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwStringPropDef("ROW", "firstName", 0, 0, 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwIntPropDef("ROW", "idx", 0, 0, 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwIntPropDef("COMPONENTPIN", "dpIgnoreTerm", 0, 0, 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwStringPropDef("COMPONENTPIN", "dpBit", 0, 0, 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwRealPropDef("COMPONENTPIN", "realProperty", 0, 0, 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwStringPropDef("NET", "IGNOREOPTIMIZATION", 0, 0, 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwStringPropDef("SPECIALNET", "IGNOREOPTIMIZATION", 0, 0, 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwRealPropDef("NET", "FREQUENCY", 0, 0, 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwRealPropDef("SPECIALNET", "FREQUENCY", 0, 0, 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwStringPropDef("NONDEFAULTRULE", "ndprop1", 0, 0, 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwIntPropDef("NONDEFAULTRULE", "ndprop2", 0, 0, 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwRealPropDef("NONDEFAULTRULE", "ndprop3", 0, 0, 0.009);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwRealPropDef("NONDEFAULTRULE", "ndprop4", .1, 1.0, 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwEndPropDef();
+
+
+ CHECK_STATUS(status);
+
+
+
+
+
+ // DIEAREA
+
+
+ xPoints = (int*)malloc(sizeof(int)*6);
+
+
+ yPoints = (int*)malloc(sizeof(int)*6);
+
+
+ xPoints[0] = 2000;
+
+
+ yPoints[0] = 2000;
+
+
+ xPoints[1] = 3000;
+
+
+ yPoints[1] = 3000;
+
+
+ xPoints[2] = 4000;
+
+
+ yPoints[2] = 4000;
+
+
+ xPoints[3] = 5000;
+
+
+ yPoints[3] = 5000;
+
+
+ xPoints[4] = 6000;
+
+
+ yPoints[4] = 6000;
+
+
+ xPoints[5] = 7000;
+
+
+ yPoints[5] = 7000;
+
+
+ status = defwDieAreaList(6, xPoints, yPoints);
+
+
+ CHECK_STATUS(status);
+
+
+ free((char*)xPoints);
+
+
+ free((char*)yPoints);
+
+
+
+
+
+ status = defwNewLine();
+
+
+ CHECK_STATUS(status);
+
+
+
+
+
+ // ROW
+
+
+ status = defwRow("ROW_9", "CORE", -177320, -111250, 6, 911, 1, 360, 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwRealProperty("minlength", 50.5);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwStringProperty("firstName", "Only");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwIntProperty("idx", 1);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwRowStr("ROW_10", "CORE1", -19000, -11000, "FN", 1, 100, 0, 600);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwRowStr("ROW_11", "CORE1", -19000, -11000, "FN", 1, 100, 0, 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwRow("ROW_12", "CORE1", -19000, -11000, 3, 0, 0, 0, 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwRowStr("ROW_13", "CORE1", -19000, -11000, "FN", 0, 0, 0, 0);
+
+
+ CHECK_STATUS(status);
+
+
+
+
+
+ // TRACKS
+
+
+ layers = (const char**)malloc(sizeof(char*)*1);
+
+
+ layers[0] = strdup("M1");
+
+
+ status = defwTracks("X", 3000, 40, 120, 1, layers);
+
+
+ CHECK_STATUS(status);
+
+
+ free((char*)layers[0]);
+
+
+ layers[0] = strdup("M2");
+
+
+ status = defwTracks("Y", 5000, 10, 20, 1,layers);
+
+
+ CHECK_STATUS(status);
+
+
+ free((char*)layers[0]);
+
+
+ free((char*)layers);
+
+
+ status = defwNewLine();
+
+
+ CHECK_STATUS(status);
+
+
+
+
+
+ // GCELLGRID
+
+
+ status = defwGcellGrid("X", 0, 100, 600);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwGcellGrid("Y", 10, 120, 400);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNewLine();
+
+
+ CHECK_STATUS(status);
+
+
+
+
+
+ // CANPLACE
+
+
+ status = defwCanPlaceStr("dp", 45, 64, "N", 35, 1, 39, 1);
+
+
+ CHECK_STATUS(status);
+
+
+
+
+
+ status = defwCanPlace("dp", 45, 64, 1, 35, 1, 39, 1);
+
+
+ CHECK_STATUS(status);
+
+
+
+
+
+ // CANNOTOCCUPY
+
+
+ status = defwCannotOccupyStr("dp", 54, 44, "S", 55, 2, 45, 3);
+
+
+ CHECK_STATUS(status);
+
+
+
+
+
+ // VIAS
+
+
+ status = defwStartVias(7);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwViaName("VIA_ARRAY");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwViaPattern("P1-435-543-IJ1FS");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwViaRect("M1", -40, -40, 40, 40);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwViaRect("V1", -40, -40, 40, 40);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwViaRect("M2", -50, -50, 50, 50);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwOneViaEnd();
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwViaName("VIA_ARRAY1");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwViaRect("M1", -40, -40, 40, 40);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwViaRect("V1", -40, -40, 40, 40);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwViaRect("M2", -50, -50, 50, 50);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwOneViaEnd();
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwViaName("myUnshiftedVia");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwViaViarule("myViaRule", 20, 20, "metal1", "cut12", "metal2",
+
+
+ 5, 5, 0, 4, 0, 1);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwViaViaruleRowCol(2, 3);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwOneViaEnd();
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwViaName("via2");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwViaViarule("viaRule2", 5, 6, "botLayer2", "cutLayer2",
+
+
+ "topLayer2", 6, 6, 1, 4, 1, 4);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwViaViaruleOrigin(10, -10);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwViaViaruleOffset(0, 0, 20, -20);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwViaViarulePattern("2_F0_2_F8_1_78");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwOneViaEnd();
+
+
+ CHECK_STATUS(status);
+
+
+
+
+
+ status = defwViaName("via3");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwViaPattern("P2-435-543-IJ1FS");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwViaRect("M2", -40, -40, 40, 40);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwOneViaEnd();
+
+
+ CHECK_STATUS(status);
+
+
+
+
+
+ xP = (double*)malloc(sizeof(double)*6);
+
+
+ yP = (double*)malloc(sizeof(double)*6);
+
+
+ xP[0] = -2.1;
+
+
+ yP[0] = -1.0;
+
+
+ xP[1] = -2;
+
+
+ yP[1] = 1;
+
+
+ xP[2] = 2.1;
+
+
+ yP[2] = 1.0;
+
+
+ xP[3] = 2.0;
+
+
+ yP[3] = -1.0;
+
+
+ status = defwViaName("via4");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwViaPolygon("M3", 4, xP, yP);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwViaRect("M4", -40, -40, 40, 40);
+
+
+ CHECK_STATUS(status);
+
+
+ xP[0] = 100;
+
+
+ yP[0] = 100;
+
+
+ xP[1] = 200;
+
+
+ yP[1] = 200;
+
+
+ xP[2] = 300;
+
+
+ yP[2] = 300;
+
+
+ xP[3] = 400;
+
+
+ yP[3] = 400;
+
+
+ xP[4] = 500;
+
+
+ yP[4] = 500;
+
+
+ xP[5] = 600;
+
+
+ yP[5] = 600;
+
+
+ status = defwViaPolygon("M5", 6, xP, yP);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwOneViaEnd();
+
+
+ CHECK_STATUS(status);
+
+
+
+
+
+ xP[0] = 200;
+
+
+ yP[0] = 200;
+
+
+ xP[1] = 300;
+
+
+ yP[1] = 300;
+
+
+ xP[2] = 400;
+
+
+ yP[2] = 500;
+
+
+ xP[3] = 100;
+
+
+ yP[3] = 300;
+
+
+ xP[4] = 300;
+
+
+ yP[4] = 200;
+
+
+ status = defwViaName("via5");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwViaPolygon("M6", 5, xP, yP);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwOneViaEnd();
+
+
+ CHECK_STATUS(status);
+
+
+ free((char*)xP);
+
+
+ free((char*)yP);
+
+
+ status = defwEndVias();
+
+
+ CHECK_STATUS(status);
+
+
+
+
+
+ // REGIONS
+
+
+ status = defwStartRegions(2);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwRegionName("region1");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwRegionPoints(-500, -500, 300, 100);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwRegionPoints(500, 500, 1000, 1000);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwRegionType("FENCE");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwStringProperty("scum", "on top");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwIntProperty("center", 250);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwIntProperty("area", 730000);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwRegionName("region2");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwRegionPoints(4000, 0, 5000, 1000);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwStringProperty("scum", "on bottom");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwEndRegions();
+
+
+ CHECK_STATUS(status);
+
+
+
+
+
+ // COMPONENTS
+
+
+ foreigns = (const char**)malloc(sizeof(char*)*2);
+
+
+ foreignX = (int*)malloc(sizeof(int)*2);
+
+
+ foreignY = (int*)malloc(sizeof(int)*2);
+
+
+ foreignOrient = (int*)malloc(sizeof(int)*2);
+
+
+ foreignOrientStr = (const char**)malloc(sizeof(char*)*2);
+
+
+ status = defwStartComponents(11);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwComponent("Z38A01", "DFF3", 0, NULL, NULL, NULL, NULL, NULL,
+
+
+ 0, NULL, NULL, NULL, NULL, "PLACED", 18592, 5400, 6, 0,
+
+
+ NULL, 0, 0, 0, 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwComponentHalo(100, 0, 50, 200);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwComponentStr("Z38A03", "DFF3", 0, NULL, NULL, NULL, NULL, NULL,
+
+
+ 0, NULL, NULL, NULL, NULL, "PLACED", 16576, 45600,
+
+
+ "FS", 0, NULL, 0, 0, 0, 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwComponentHalo(200, 2, 60, 300);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwComponent("Z38A05", "DFF3", 0, NULL, NULL, NULL, NULL, NULL,
+
+
+ 0, NULL, NULL, NULL, NULL, "PLACED", 51520, 9600, 6, 0,
+
+
+ NULL, 0, 0, 0, 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwComponent("|i0", "INV_B", 0, NULL, "INV", NULL, NULL, NULL,
+
+
+ 0, NULL, NULL, NULL, NULL, NULL, 0, 0, -1, 0,
+
+
+ "region1", 0, 0, 0, 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwComponentHaloSoft(100, 0, 50, 200);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwComponent("|i1", "INV_B", 0, NULL, "INV", NULL, NULL, NULL,
+
+
+ 0, NULL, NULL, NULL, NULL, "UNPLACED", 1000, 1000, 0,
+
+
+ 0, NULL, 0, 0, 0, 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwComponent("cell1", "CHM6A", 0, NULL, NULL, "generator", NULL,
+
+
+ "USER", 0, NULL, NULL, NULL, NULL, "FIXED", 0, 10, 0,
+
+
+ 100.4534535, NULL, 0, 0, 0, 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwComponent("cell2", "CHM6A", 0, NULL, NULL, NULL, NULL,
+
+
+ "NETLIST", 0, NULL, NULL, NULL, NULL, "COVER", 120,
+
+
+ 10, 4, 2, NULL, 0, 0, 0, 0);
+
+
+ CHECK_STATUS(status);
+
+
+ foreigns[0] = strdup("gds2name");
+
+
+ foreignX[0] = -500;
+
+
+ foreignY[0] = -500;
+
+
+ foreignOrient[0] = 3;
+
+
+ status = defwComponent("cell3", "CHM6A", 0, NULL, NULL, NULL, NULL,
+
+
+ "TIMING", 1, foreigns, foreignX, foreignY,
+
+
+ foreignOrient, "PLACED", 240,
+
+
+ 10, 0, 0, "region1", 0, 0, 0, 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwComponentRouteHalo(100, "metal1", "metal3");
+
+
+ CHECK_STATUS(status);
+
+
+ free((char*)foreigns[0]);
+
+
+ foreigns[0] = strdup("gds3name");
+
+
+ foreignX[0] = -500;
+
+
+ foreignY[0] = -500;
+
+
+ foreignOrientStr[0] = strdup("FW");
+
+
+ foreigns[1] = strdup("gds4name");
+
+
+ foreignX[1] = -300;
+
+
+ foreignY[1] = -300;
+
+
+ foreignOrientStr[1] = strdup("FS");
+
+
+ status = defwComponentStr("cell4", "CHM3A", 0, NULL, "CHM6A", NULL, NULL,
+
+
+ "DIST", 2, foreigns, foreignX, foreignY,
+
+
+ foreignOrientStr, "PLACED", 360,
+
+
+ 10, "W", 0, "region2", 0, 0, 0, 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwComponentHaloSoft(100, 0, 50, 200);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwStringProperty("cc", "This is the copy list");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwIntProperty("index", 9);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwRealProperty("size", 7.8);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwComponent("scancell1", "CHK3A", 0, NULL, NULL, NULL, NULL,
+
+
+ NULL, 0, NULL, NULL, NULL, NULL, "PLACED", 500,
+
+
+ 10, 7, 0, NULL, 0, 0, 0, 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwComponent("scancell2", "CHK3A", 0, NULL, NULL, NULL, NULL,
+
+
+ NULL, 0, NULL, NULL, NULL, NULL, "PLACED", 700,
+
+
+ 10, 6, 0, NULL, 0, 0, 0, 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwEndComponents();
+
+
+ CHECK_STATUS(status);
+
+
+ free((char*)foreigns[0]);
+
+
+ free((char*)foreigns[1]);
+
+
+ free((char*)foreigns);
+
+
+ free((char*)foreignX);
+
+
+ free((char*)foreignY);
+
+
+ free((char*)foreignOrient);
+
+
+ free((char*)foreignOrientStr[0]);
+
+
+ free((char*)foreignOrientStr[1]);
+
+
+ free((char*)foreignOrientStr);
+
+
+
+
+
+ xP = (double*)malloc(sizeof(double)*6);
+
+
+ yP = (double*)malloc(sizeof(double)*6);
+
+
+ xP[0] = 2.1;
+
+
+ yP[0] = 2.1;
+
+
+ xP[1] = 3.1;
+
+
+ yP[1] = 3.1;
+
+
+ xP[2] = 4.1;
+
+
+ yP[2] = 4.1;
+
+
+ xP[3] = 5.1;
+
+
+ yP[3] = 5.1;
+
+
+ xP[4] = 6.1;
+
+
+ yP[4] = 6.1;
+
+
+ xP[5] = 7.1;
+
+
+ yP[5] = 7.1;
+
+
+
+
+
+ // PINS
+
+
+ status = defwStartPins(11);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwPin("scanpin", "net1", 0, "INPUT", NULL, NULL, 0, 0, -1, NULL,
+
+
+ 0, 0, 0, 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwPinPolygon("metal1", 0, 1000, 6, xP, yP);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwPinNetExpr("power1 VDD1");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwPin("pin0", "net1", 0, "INPUT", "SCAN", NULL, 0, 0, -1, NULL,
+
+
+ 0, 0, 0, 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwPinStr("pin0.5", "net1", 0, "INPUT", "RESET", "FIXED", 0, 0, "S",
+
+
+ NULL, 0, 0, 0, 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwPinPolygon("metal2", 0, 0, 4, xP, yP);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwPinLayer("metal3", 500, 0, -5000, -100, -4950, -90);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwPin("pin1", "net1", 1, NULL, "POWER", NULL, 0, 0, -1, "M1",
+
+
+ -5000, -100, -4950, -90);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwPinAntennaPinPartialMetalArea(4580, "M1");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwPinAntennaPinPartialMetalArea(4580, "M11");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwPinAntennaPinPartialMetalArea(4580, "M12");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwPinAntennaPinGateArea(4580, "M2");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwPinAntennaPinDiffArea(4580, "M3");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwPinAntennaPinDiffArea(4580, "M31");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwPinAntennaPinMaxAreaCar(5000, "L1");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwPinAntennaPinMaxSideAreaCar(5000, "M4");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwPinAntennaPinPartialCutArea(4580, "M4");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwPinAntennaPinMaxCutCar(5000, "L1");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwPin("pin2", "net2", 0, "INPUT", "SIGNAL", NULL, 0, 0, -1, "M1",
+
+
+ -5000, 0, -4950, 10);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwPinLayer("M1", 500, 0, -5000, 0, -4950, 10);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwPinPolygon("M2", 0, 0, 4, xP, yP);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwPinPolygon("M3", 0, 0, 3, xP, yP);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwPinLayer("M4", 0, 500, 0, 100, -400, 100);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwPinSupplySensitivity("vddpin1");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwPinGroundSensitivity("gndpin1");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwPinAntennaPinPartialMetalArea(5000, NULL);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwPinAntennaPinPartialMetalSideArea(4580, "M2");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwPinAntennaPinGateArea(5000, NULL);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwPinAntennaPinPartialCutArea(5000, NULL);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwPin("INBUS[1]", "|INBUS[1]", 0, "INPUT", "SIGNAL", "FIXED",
+
+
+ 45, -2160, 0, "M2", 0, 0, 30, 135);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwPinLayer("M2", 0, 0, 0, 0, 30, 135);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwPinAntennaPinPartialMetalArea(1, "M1");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwPinAntennaPinPartialMetalSideArea(2, "M1");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwPinAntennaPinDiffArea(4, "M2");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwPinAntennaPinPartialCutArea(5, "V1");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwPinAntennaModel("OXIDE1");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwPinAntennaPinGateArea(3, "M1");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwPinAntennaPinMaxAreaCar(6, "M2");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwPinAntennaPinMaxSideAreaCar(7, "M2");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwPinAntennaPinMaxCutCar(8, "V1");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwPinAntennaModel("OXIDE2");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwPinAntennaPinGateArea(30, "M1");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwPinAntennaPinMaxAreaCar(60, "M2");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwPinAntennaPinMaxSideAreaCar(70, "M2");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwPinAntennaPinMaxCutCar(80, "V1");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwPin("INBUS<0>", "|INBUS<0>", 0, "INPUT", "SIGNAL", "PLACED",
+
+
+ -45, 2160, 1, "M2", 0, 0, 30, 134);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwPinLayer("M2", 0, 1000, 0, 0, 30, 134);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwPin("OUTBUS<1>", "|OUTBUS<1>", 0, "OUTPUT", "SIGNAL", "COVER",
+
+
+ 2160, 645, 2, "M1", 0, 0, 30, 135);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwPinLayer("M1", 0, 0, 0, 0, 30, 134);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwPinNetExpr("gnd1 GND");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwPin("VDD", "VDD", 1, "INOUT", "POWER", NULL, 0, 0, -1, NULL,
+
+
+ 0, 0, 0, 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwPin("BUSA[0]", "BUSA[0]", 0, "INPUT", "SIGNAL", "PLACED",
+
+
+ 0, 2500, 1, NULL, 0, 0, 0, 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwPinLayer("M1", 0, 0, -25, 0, 25, 50);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwPinLayer("M2", 0, 0, -10, 0, 10, 75);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwPinVia("via12", 0, 25);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwPin("VDD", "VDD", 1, "INOUT", "POWER", NULL,
+
+
+ 0, 0, -1, NULL, 0, 0, 0, 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwPinPort();
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwPinPortLayer("M2", 0, 0, -25, 0, 25, 50);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwPinPortLocation("PLACED", 0, 2500, "S");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwPinPort();
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwPinPortLayer("M1", 0, 0, -25, 0, 25, 50);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwPinPortLocation("COVER", 0, 2500, "S");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwPinPort();
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwPinPortLayer("M1", 0, 0, -25, 0, 25, 50);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwPinPortLocation("FIXED", 0, 2500, "S");
+
+
+ CHECK_STATUS(status);
+
+
+
+
+
+ status = defwEndPins();
+
+
+ CHECK_STATUS(status);
+
+
+
+
+
+ free((char*)xP);
+
+
+ free((char*)yP);
+
+
+
+
+
+ // PINPROPERTIES
+
+
+ status = defwStartPinProperties(2);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwPinProperty("cell1", "PB1");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwStringProperty("dpBit", "1");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwRealProperty("realProperty", 3.4);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwPinProperty("cell2", "vdd");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwIntProperty("dpIgnoreTerm", 2);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwEndPinProperties();
+
+
+ CHECK_STATUS(status);
+
+
+
+
+
+ // SPECIALNETS
+
+
+ status = defwStartSpecialNets(7);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSpecialNet("net1");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSpecialNetConnection("cell1", "VDD", 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSpecialNetConnection("cell2", "VDD", 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSpecialNetConnection("cell3", "VDD", 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSpecialNetConnection("cell4", "VDD", 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSpecialNetWidth("M1", 200);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSpecialNetWidth("M2", 300);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSpecialNetVoltage(3.2);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSpecialNetSpacing("M1", 200, 190, 210);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSpecialNetSource("TIMING");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSpecialNetOriginal("VDD");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSpecialNetUse("POWER");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSpecialNetWeight(30);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwStringProperty("contype", "star");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwIntProperty("ind", 1);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwRealProperty("maxlength", 12.13);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSpecialNetEndOneNet();
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSpecialNet("VSS");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSpecialNetConnection("cell1", "GND", 1);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSpecialNetConnection("cell2", "GND", 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSpecialNetConnection("cell3", "GND", 1);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSpecialNetConnection("cell4", "GND", 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSpecialNetUse("SCAN");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSpecialNetPathStart("ROUTED");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSpecialNetPathLayer("M1");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSpecialNetPathWidth(250);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSpecialNetPathShape("IOWIRE");
+
+
+ CHECK_STATUS(status);
+
+
+ coorX = (const char**)malloc(sizeof(char*)*3);
+
+
+ coorY = (const char**)malloc(sizeof(char*)*3);
+
+
+ coorValue = (const char**)malloc(sizeof(char*)*3);
+
+
+ coorX[0] = strdup("5");
+
+
+ coorY[0] = strdup("15");
+
+
+ coorValue[0] = NULL;
+
+
+ coorX[1] = strdup("125");
+
+
+ coorY[1] = strdup("*");
+
+
+ coorValue[1] = strdup("235");
+
+
+ coorX[2] = strdup("245");
+
+
+ coorY[2] = strdup("*");
+
+
+ coorValue[2] = strdup("255");
+
+
+ status = defwSpecialNetPathPointWithWireExt(3, coorX, coorY, coorValue);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSpecialNetPathEnd();
+
+
+ CHECK_STATUS(status);
+
+
+ free((char*)coorX[0]);
+
+
+ free((char*)coorY[0]);
+
+
+ free((char*)coorX[1]);
+
+
+ free((char*)coorY[1]);
+
+
+ free((char*)coorValue[0]);
+
+
+ free((char*)coorValue[1]);
+
+
+ free((char*)coorValue[2]);
+
+
+ free((char*)coorValue);
+
+
+ status = defwSpecialNetShieldStart("my_net");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSpecialNetShieldLayer("M2");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSpecialNetShieldWidth(90);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSpecialNetShieldShape("STRIPE");
+
+
+ CHECK_STATUS(status);
+
+
+ coorX[0] = strdup("14100");
+
+
+ coorY[0] = strdup("342440");
+
+
+ coorX[1] = strdup("13920");
+
+
+ coorY[1] = strdup("*");
+
+
+ status = defwSpecialNetShieldPoint(2, coorX, coorY);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSpecialNetShieldVia("M2_TURN");
+
+
+ CHECK_STATUS(status);
+
+
+ free((char*)coorX[0]);
+
+
+ free((char*)coorY[0]);
+
+
+ coorX[0] = strdup("*");
+
+
+ coorY[0] = strdup("263200");
+
+
+ status = defwSpecialNetShieldPoint(1, coorX, coorY);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSpecialNetShieldVia("M1_M2");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSpecialNetShieldViaData(10, 20, 1000, 2000);
+
+
+ CHECK_STATUS(status);
+
+
+ free((char*)coorX[0]);
+
+
+ free((char*)coorY[0]);
+
+
+ coorX[0] = strdup("2400");
+
+
+ coorY[0] = strdup("*");
+
+
+ status = defwSpecialNetShieldPoint(1, coorX, coorY);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSpecialNetShieldEnd();
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSpecialNetShieldStart("my_net1");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSpecialNetShieldLayer("M2");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSpecialNetShieldWidth(90);
+
+
+ CHECK_STATUS(status);
+
+
+ free((char*)coorX[0]);
+
+
+ free((char*)coorY[0]);
+
+
+ free((char*)coorX[1]);
+
+
+ free((char*)coorY[1]);
+
+
+ coorX[0] = strdup("14100");
+
+
+ coorY[0] = strdup("342440");
+
+
+ coorX[1] = strdup("13920");
+
+
+ coorY[1] = strdup("*");
+
+
+ status = defwSpecialNetShieldPoint(2, coorX, coorY);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSpecialNetShieldVia("M2_TURN");
+
+
+ CHECK_STATUS(status);
+
+
+ free((char*)coorX[0]);
+
+
+ free((char*)coorY[0]);
+
+
+ coorX[0] = strdup("*");
+
+
+ coorY[0] = strdup("263200");
+
+
+ status = defwSpecialNetShieldPoint(1, coorX, coorY);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSpecialNetShieldVia("M1_M2");
+
+
+ CHECK_STATUS(status);
+
+
+ free((char*)coorX[0]);
+
+
+ free((char*)coorY[0]);
+
+
+ coorX[0] = strdup("2400");
+
+
+ coorY[0] = strdup("*");
+
+
+ status = defwSpecialNetShieldPoint(1, coorX, coorY);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSpecialNetShieldEnd();
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSpecialNetPattern("STEINER");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSpecialNetEstCap(100);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSpecialNetEndOneNet();
+
+
+ CHECK_STATUS(status);
+
+
+ free((char*)coorX[0]);
+
+
+ free((char*)coorY[0]);
+
+
+ free((char*)coorX[1]);
+
+
+ free((char*)coorY[1]);
+
+
+ free((char*)coorX[2]);
+
+
+ free((char*)coorY[2]);
+
+
+ status = defwSpecialNet("VDD");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSpecialNetConnection("*", "VDD", 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSpecialNetPathStart("ROUTED");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSpecialNetPathLayer("metal2");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSpecialNetPathWidth(100);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSpecialNetPathShape("RING");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSpecialNetPathStyle(1);
+
+
+ CHECK_STATUS(status);
+
+
+ coorX[0] = strdup("0");
+
+
+ coorY[0] = strdup("0");
+
+
+ coorX[1] = strdup("100");
+
+
+ coorY[1] = strdup("100");
+
+
+ coorX[2] = strdup("200");
+
+
+ coorY[2] = strdup("100");
+
+
+ status = defwSpecialNetPathPoint(3, coorX, coorY);
+
+
+ CHECK_STATUS(status);
+
+
+ free((char*)coorX[0]);
+
+
+ free((char*)coorY[0]);
+
+
+ free((char*)coorX[1]);
+
+
+ free((char*)coorY[1]);
+
+
+ free((char*)coorX[2]);
+
+
+ free((char*)coorY[2]);
+
+
+ status = defwSpecialNetPathStart("NEW");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSpecialNetPathLayer("M2");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSpecialNetPathWidth(270);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSpecialNetPathShape("PADRING");
+
+
+ CHECK_STATUS(status);
+
+
+ coorX[0] = strdup("-45");
+
+
+ coorY[0] = strdup("1350");
+
+
+ coorX[1] = strdup("44865");
+
+
+ coorY[1] = strdup("*");
+
+
+ status = defwSpecialNetPathPoint(2, coorX, coorY);
+
+
+ CHECK_STATUS(status);
+
+
+ free((char*)coorX[0]);
+
+
+ free((char*)coorY[0]);
+
+
+ free((char*)coorX[1]);
+
+
+ free((char*)coorY[1]);
+
+
+ status = defwSpecialNetPathStart("NEW");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSpecialNetPathLayer("M2");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSpecialNetPathWidth(270);
+
+
+ CHECK_STATUS(status);
+
+
+ coorX[0] = strdup("-45");
+
+
+ coorY[0] = strdup("1350");
+
+
+ coorX[1] = strdup("44865");
+
+
+ coorY[1] = strdup("*");
+
+
+ status = defwSpecialNetPathPoint(2, coorX, coorY);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSpecialNetPathEnd();
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSpecialNetEndOneNet();
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSpecialNet("CLOCK");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSpecialNetPathStart("ROUTED");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSpecialNetPathLayer("M2");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSpecialNetPathWidth(200);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSpecialNetPathShape("BLOCKRING");
+
+
+ CHECK_STATUS(status);
+
+
+ free((char*)coorX[0]);
+
+
+ free((char*)coorY[0]);
+
+
+ free((char*)coorX[1]);
+
+
+ free((char*)coorY[1]);
+
+
+ coorX[0] = strdup("-45");
+
+
+ coorY[0] = strdup("1350");
+
+
+ coorX[1] = strdup("44865");
+
+
+ coorY[1] = strdup("*");
+
+
+ status = defwSpecialNetPathPoint(2, coorX, coorY);
+
+
+ CHECK_STATUS(status);
+
+
+ free((char*)coorX[0]);
+
+
+ free((char*)coorY[0]);
+
+
+ free((char*)coorX[1]);
+
+
+ free((char*)coorY[1]);
+
+
+ status = defwSpecialNetPathStart("NEW");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSpecialNetPathLayer("M2");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSpecialNetPathWidth(270);
+
+
+ CHECK_STATUS(status);
+
+
+ coorX[0] = strdup("-45");
+
+
+ coorY[0] = strdup("1350");
+
+
+ coorX[1] = strdup("44865");
+
+
+ coorY[1] = strdup("*");
+
+
+ status = defwSpecialNetPathPoint(2, coorX, coorY);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSpecialNetPathEnd();
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSpecialNetEndOneNet();
+
+
+ CHECK_STATUS(status);
+
+
+ free((char*)coorX[0]);
+
+
+ free((char*)coorY[0]);
+
+
+ free((char*)coorX[1]);
+
+
+ free((char*)coorY[1]);
+
+
+ status = defwSpecialNet("VCC");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSpecialNetPathStart("ROUTED");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSpecialNetPathLayer("M2");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSpecialNetPathWidth(200);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSpecialNetPathShape("DRCFILL");
+
+
+ CHECK_STATUS(status);
+
+
+ coorX[0] = strdup("-45");
+
+
+ coorY[0] = strdup("1350");
+
+
+ coorX[1] = strdup("44865");
+
+
+ coorY[1] = strdup("*");
+
+
+ status = defwSpecialNetPathPoint(2, coorX, coorY);
+
+
+ CHECK_STATUS(status);
+
+
+ free((char*)coorX[0]);
+
+
+ free((char*)coorY[0]);
+
+
+ free((char*)coorX[1]);
+
+
+ free((char*)coorY[1]);
+
+
+ status = defwSpecialNetPathStart("NEW");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSpecialNetPathLayer("M2");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSpecialNetPathWidth(270);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSpecialNetPathShape("STRIPE");
+
+
+ CHECK_STATUS(status);
+
+
+ coorX[0] = strdup("-45");
+
+
+ coorY[0] = strdup("1350");
+
+
+ coorX[1] = strdup("44865");
+
+
+ coorY[1] = strdup("*");
+
+
+ status = defwSpecialNetPathPoint(2, coorX, coorY);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSpecialNetPathEnd();
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSpecialNetEndOneNet();
+
+
+ CHECK_STATUS(status);
+
+
+ free((char*)coorX[0]);
+
+
+ free((char*)coorY[0]);
+
+
+ free((char*)coorX[1]);
+
+
+ free((char*)coorY[1]);
+
+
+ status = defwSpecialNet("n1");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSpecialNetConnection("PIN", "n1", 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSpecialNetConnection("driver1", "in", 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSpecialNetConnection("bumpa1", "bumppin", 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSpecialNetFixedbump();
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSpecialNetPathStart("ROUTED");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSpecialNetPathLayer("M2");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSpecialNetPathWidth(200);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSpecialNetPathShape("FILLWIREOPC");
+
+
+ CHECK_STATUS(status);
+
+
+ coorX[0] = strdup("-45");
+
+
+ coorY[0] = strdup("1350");
+
+
+ coorX[1] = strdup("44865");
+
+
+ coorY[1] = strdup("*");
+
+
+ status = defwSpecialNetPathPoint(2, coorX, coorY);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSpecialNetPathEnd();
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSpecialNetEndOneNet();
+
+
+ CHECK_STATUS(status);
+
+
+ free((char*)coorX[0]);
+
+
+ free((char*)coorY[0]);
+
+
+ free((char*)coorX[1]);
+
+
+ free((char*)coorY[1]);
+
+
+ free((char*)coorX);
+
+
+ free((char*)coorY);
+
+
+
+
+
+ status = defwSpecialNet("VSS1");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSpecialNetUse("POWER");
+
+
+ CHECK_STATUS(status);
+
+
+ xP = (double*)malloc(sizeof(double)*6);
+
+
+ yP = (double*)malloc(sizeof(double)*6);
+
+
+ xP[0] = 2.1;
+
+
+ yP[0] = 2.1;
+
+
+ xP[1] = 3.1;
+
+
+ yP[1] = 3.1;
+
+
+ xP[2] = 4.1;
+
+
+ yP[2] = 4.1;
+
+
+ xP[3] = 5.1;
+
+
+ yP[3] = 5.1;
+
+
+ xP[4] = 6.1;
+
+
+ yP[4] = 6.1;
+
+
+ xP[5] = 7.1;
+
+
+ yP[5] = 7.1;
+
+
+ status = defwSpecialNetPolygon("metal1", 4, xP, yP);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSpecialNetPolygon("metal1", 6, xP, yP);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSpecialNetRect("metal1", 0, 0, 100, 200);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSpecialNetRect("metal2", 1, 1, 100, 200);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSpecialNetEndOneNet();
+
+
+ CHECK_STATUS(status);
+
+
+ free((char*)xP);
+
+
+ free((char*)yP);
+
+
+ status = defwEndSpecialNets();
+
+
+ CHECK_STATUS(status);
+
+
+
+
+
+ // NETS
+
+
+ status = defwStartNets(12);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNet("net1");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetConnection("Z38A01", "Q", 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetConnection("Z38A03", "Q", 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetConnection("Z38A05", "Q", 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetEndOneNet();
+
+
+ CHECK_STATUS(status);
+
+
+
+
+
+ status = defwNet("net2");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetConnection("cell1", "PB1", 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetConnection("cell2", "PB1", 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetConnection("cell3", "PB1", 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetEstCap(200);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetWeight(2);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetVpin("P1", NULL, 0, 0, 0, 0, "PLACED", 54, 64, 3);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetEndOneNet();
+
+
+ CHECK_STATUS(status);
+
+
+
+
+
+ status = defwNet("net3");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetConnection("cell4", "PA3", 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetConnection("cell2", "P10", 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetXtalk(30);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetOriginal("extra_crispy");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetSource("USER");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetUse("SIGNAL");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetFrequency(100);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwIntProperty("alt", 37);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwStringProperty("lastName", "Unknown");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwRealProperty("length", 10.11);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetPattern("BALANCED");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetVpinStr("P2", "L1", 45, 54, 3, 46, "FIXED", 23, 12, "FN");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetEndOneNet();
+
+
+ CHECK_STATUS(status);
+
+
+
+
+
+ coorX = (const char**)malloc(sizeof(char*)*5);
+
+
+ coorY = (const char**)malloc(sizeof(char*)*5);
+
+
+ coorValue = (const char**)malloc(sizeof(char*)*5);
+
+
+ status = defwNet("my_net");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetConnection("I1", "A", 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetConnection("BUF", "Z", 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetNondefaultRule("RULE1");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetUse("RESET");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetShieldnet("VSS");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetShieldnet("VDD");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetPathStart("ROUTED");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetPathLayer("M2", 0, NULL);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetPathStyle(2);
+
+
+ CHECK_STATUS(status);
+
+
+ coorX[0] = strdup("14000");
+
+
+ coorY[0] = strdup("341440");
+
+
+ coorValue[0] = NULL;
+
+
+ coorX[1] = strdup("9600");
+
+
+ coorY[1] = strdup("*");
+
+
+ coorValue[1] = NULL;
+
+
+ coorX[2] = strdup("*");
+
+
+ coorY[2] = strdup("282400");
+
+
+ coorValue[2] = NULL;
+
+
+ status = defwNetPathPoint(3, coorX, coorY, coorValue);
+
+
+ CHECK_STATUS(status);
+
+
+ free((char*)coorX[0]);
+
+
+ free((char*)coorY[0]);
+
+
+ status = defwNetPathVia("nd1VIA12");
+
+
+ CHECK_STATUS(status);
+
+
+ coorX[0] = strdup("2400");
+
+
+ coorY[0] = strdup("*");
+
+
+ coorValue[0] = NULL;
+
+
+ status = defwNetPathPoint(1, coorX, coorY, coorValue);
+
+
+ CHECK_STATUS(status);
+
+
+ free((char*)coorX[0]);
+
+
+ free((char*)coorY[0]);
+
+
+ free((char*)coorX[1]);
+
+
+ free((char*)coorY[1]);
+
+
+ status = defwNetPathStart("NEW");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetPathLayer("M1", 1, NULL);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetPathStyle(4);
+
+
+ CHECK_STATUS(status);
+
+
+ coorX[0] = strdup("2400");
+
+
+ coorY[0] = strdup("282400");
+
+
+ coorValue[0] = NULL;
+
+
+ coorX[1] = strdup("240");
+
+
+ coorY[1] = strdup("*");
+
+
+ coorValue[1] = NULL;
+
+
+ status = defwNetPathPoint(2, coorX, coorY, coorValue);
+
+
+ CHECK_STATUS(status);
+
+
+ free((char*)coorX[0]);
+
+
+ free((char*)coorY[0]);
+
+
+ free((char*)coorX[1]);
+
+
+ free((char*)coorY[1]);
+
+
+ free((char*)coorX[2]);
+
+
+ free((char*)coorY[2]);
+
+
+ status = defwNetPathEnd();
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetNoshieldStart("M2");
+
+
+ CHECK_STATUS(status);
+
+
+ coorX[0] = strdup("14100");
+
+
+ coorY[0] = strdup("341440");
+
+
+ coorX[1] = strdup("14000");
+
+
+ coorY[1] = strdup("*");
+
+
+ status = defwNetNoshieldPoint(2, coorX, coorY);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetNoshieldEnd();
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetEndOneNet();
+
+
+ CHECK_STATUS(status);
+
+
+
+
+
+ status = defwNet("|INBUS[1]");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetConnection("|i1", "A", 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetEndOneNet();
+
+
+ CHECK_STATUS(status);
+
+
+
+
+
+ status = defwNet("|INBUS<0>");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetConnection("|i0", "A", 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetEndOneNet();
+
+
+ CHECK_STATUS(status);
+
+
+
+
+
+ status = defwNet("|OUTBUS<1>");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetConnection("|i0", "Z", 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetEndOneNet();
+
+
+ CHECK_STATUS(status);
+
+
+
+
+
+ status = defwNet("MUSTJOIN");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetConnection("cell4", "PA1", 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetEndOneNet();
+
+
+ CHECK_STATUS(status);
+
+
+
+
+
+ status = defwNet("XX100");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetConnection("Z38A05", "G", 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetConnection("Z38A03", "G", 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetConnection("Z38A01", "G", 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetVpin("V_SUB3_XX100", NULL, -333, -333, 333, 333, "PLACED",
+
+
+ 189560, 27300, 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetVpin("V_SUB2_XX100", NULL, -333, -333, 333, 333, "PLACED",
+
+
+ 169400, 64500, 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetVpin("V_SUB1_XX100", NULL, -333, -333, 333, 333, "PLACED",
+
+
+ 55160, 31500, 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetSubnetStart("SUB1_XX100");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetSubnetPin("Z38A05", "G");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetSubnetPin("VPIN", "V_SUB1_XX100");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetPathStart("ROUTED");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetPathLayer("M1", 0, "RULE1");
+
+
+ CHECK_STATUS(status);
+
+
+ free((char*)coorX[0]);
+
+
+ free((char*)coorY[0]);
+
+
+ free((char*)coorX[1]);
+
+
+ free((char*)coorY[1]);
+
+
+ coorX[0] = strdup("54040");
+
+
+ coorY[0] = strdup("30300");
+
+
+ coorValue[0] = strdup("0");
+
+
+ coorX[1] = strdup("*");
+
+
+ coorY[1] = strdup("30900");
+
+
+ coorValue[1] = NULL;
+
+
+ status = defwNetPathPoint(2, coorX, coorY, coorValue);
+
+
+ CHECK_STATUS(status);
+
+
+ free((char*)coorX[0]);
+
+
+ free((char*)coorY[0]);
+
+
+ free((char*)coorValue[0]);
+
+
+ free((char*)coorX[1]);
+
+
+ free((char*)coorY[1]);
+
+
+ status = defwNetPathVia("nd1VIA12");
+
+
+ CHECK_STATUS(status);
+
+
+ coorX[0] = strdup("*");
+
+
+ coorY[0] = strdup("*");
+
+
+ coorValue[0] = strdup("0");
+
+
+ coorX[1] = strdup("56280");
+
+
+ coorY[1] = strdup("*");
+
+
+ coorValue[1] = NULL;
+
+
+ status = defwNetPathPoint(2, coorX, coorY, coorValue);
+
+
+ CHECK_STATUS(status);
+
+
+ free((char*)coorX[0]);
+
+
+ free((char*)coorY[0]);
+
+
+ free((char*)coorValue[0]);
+
+
+ free((char*)coorX[1]);
+
+
+ free((char*)coorY[1]);
+
+
+ status = defwNetPathViaWithOrient("nd1VIA23", 6);
+
+
+ CHECK_STATUS(status);
+
+
+ coorX[0] = strdup("*");
+
+
+ coorY[0] = strdup("31500");
+
+
+ coorValue[0] = NULL;
+
+
+ coorX[1] = strdup("55160");
+
+
+ coorY[1] = strdup("*");
+
+
+ coorValue[1] = NULL;
+
+
+ status = defwNetPathPoint(2, coorX, coorY, coorValue);
+
+
+ CHECK_STATUS(status);
+
+
+ free((char*)coorX[0]);
+
+
+ free((char*)coorY[0]);
+
+
+ free((char*)coorX[1]);
+
+
+ free((char*)coorY[1]);
+
+
+ status = defwNetPathEnd();
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetSubnetEnd();
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetSubnetStart("SUB2_XX100");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetSubnetPin("Z38A03", "G");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetSubnetPin("VPIN", "V_SUB2_XX100");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetPathStart("ROUTED");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetPathLayer("M1", 0, NULL);
+
+
+ CHECK_STATUS(status);
+
+
+ coorX[0] = strdup("168280");
+
+
+ coorY[0] = strdup("63300");
+
+
+ coorValue[0] = strdup("7");
+
+
+ coorX[1] = strdup("*");
+
+
+ coorY[1] = strdup("64500");
+
+
+ coorValue[1] = NULL;
+
+
+ status = defwNetPathPoint(2, coorX, coorY, coorValue);
+
+
+ CHECK_STATUS(status);
+
+
+ free((char*)coorX[0]);
+
+
+ free((char*)coorY[0]);
+
+
+ free((char*)coorValue[0]);
+
+
+ free((char*)coorX[1]);
+
+
+ free((char*)coorY[1]);
+
+
+ status = defwNetPathVia("M1_M2");
+
+
+ CHECK_STATUS(status);
+
+
+ coorX[0] = strdup("169400");
+
+
+ coorY[0] = strdup("*");
+
+
+ coorValue[0] = strdup("8");
+
+
+ status = defwNetPathPoint(1, coorX, coorY, coorValue);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetPathViaWithOrientStr("M2_M3", "SE");
+
+
+ CHECK_STATUS(status);
+
+
+ free((char*)coorX[0]);
+
+
+ free((char*)coorY[0]);
+
+
+ free((char*)coorValue[0]);
+
+
+ status = defwNetPathEnd();
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetSubnetEnd();
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetSubnetStart("SUB3_XX100");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetSubnetPin("Z38A01", "G");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetSubnetPin("VPIN", "V_SUB3_XX100");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetPathStart("ROUTED");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetPathLayer("M1", 0, NULL);
+
+
+ CHECK_STATUS(status);
+
+
+ coorX[0] = strdup("188400");
+
+
+ coorY[0] = strdup("26100");
+
+
+ coorValue[0] = strdup("0");
+
+
+ coorX[1] = strdup("*");
+
+
+ coorY[1] = strdup("27300");
+
+
+ coorValue[1] = strdup("0");
+
+
+ status = defwNetPathPoint(2, coorX, coorY, coorValue);
+
+
+ CHECK_STATUS(status);
+
+
+ free((char*)coorX[0]);
+
+
+ free((char*)coorY[0]);
+
+
+ free((char*)coorValue[0]);
+
+
+ free((char*)coorX[1]);
+
+
+ free((char*)coorY[1]);
+
+
+ free((char*)coorValue[1]);
+
+
+ status = defwNetPathVia("M1_M2");
+
+
+ CHECK_STATUS(status);
+
+
+ coorX[0] = strdup("189560");
+
+
+ coorY[0] = strdup("*");
+
+
+ coorValue[0] = strdup("0");
+
+
+ status = defwNetPathPoint(1, coorX, coorY, coorValue);
+
+
+ CHECK_STATUS(status);
+
+
+ free((char*)coorX[0]);
+
+
+ free((char*)coorY[0]);
+
+
+ free((char*)coorValue[0]);
+
+
+ status = defwNetPathVia("M1_M2");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetPathEnd();
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetSubnetEnd();
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetSubnetStart("SUB0_XX100");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetSubnetPin("VPIN", "V_SUB1_XX100");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetSubnetPin("VPIN", "V_SUB2_XX100");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetSubnetPin("VPIN", "V_SUB3_XX100");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetNondefaultRule("RULE1");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetPathStart("ROUTED");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetPathLayer("M3", 0, NULL);
+
+
+ CHECK_STATUS(status);
+
+
+ coorX[0] = strdup("269400");
+
+
+ coorY[0] = strdup("64500");
+
+
+ coorValue[0] = strdup("0");
+
+
+ coorX[1] = strdup("*");
+
+
+ coorY[1] = strdup("54900");
+
+
+ coorValue[1] = NULL;
+
+
+ coorX[2] = strdup("170520");
+
+
+ coorY[2] = strdup("*");
+
+
+ coorValue[2] = NULL;
+
+
+ coorX[3] = strdup("*");
+
+
+ coorY[3] = strdup("37500");
+
+
+ coorValue[3] = NULL;
+
+
+ coorX[4] = strdup("*");
+
+
+ coorY[4] = strdup("30300");
+
+
+ coorValue[4] = NULL;
+
+
+ status = defwNetPathPoint(5, coorX, coorY, coorValue);
+
+
+ CHECK_STATUS(status);
+
+
+ free((char*)coorX[0]);
+
+
+ free((char*)coorY[0]);
+
+
+ free((char*)coorValue[0]);
+
+
+ free((char*)coorX[1]);
+
+
+ free((char*)coorY[1]);
+
+
+ free((char*)coorX[2]);
+
+
+ free((char*)coorY[2]);
+
+
+ free((char*)coorX[3]);
+
+
+ free((char*)coorY[3]);
+
+
+ free((char*)coorX[4]);
+
+
+ free((char*)coorY[4]);
+
+
+ status = defwNetPathVia("nd1VIA23");
+
+
+ CHECK_STATUS(status);
+
+
+ coorX[0] = strdup("171080");
+
+
+ coorY[0] = strdup("*");
+
+
+ coorValue[0] = NULL;
+
+
+ coorX[1] = strdup("17440");
+
+
+ coorY[1] = strdup("0");
+
+
+ coorValue[1] = strdup("0");
+
+
+ status = defwNetPathPoint(2, coorX, coorY, coorValue);
+
+
+ CHECK_STATUS(status);
+
+
+ free((char*)coorX[0]);
+
+
+ free((char*)coorY[0]);
+
+
+ free((char*)coorX[1]);
+
+
+ free((char*)coorY[1]);
+
+
+ free((char*)coorValue[1]);
+
+
+ status = defwNetPathVia("nd1VIA23");
+
+
+ CHECK_STATUS(status);
+
+
+ coorX[0] = strdup("*");
+
+
+ coorY[0] = strdup("*");
+
+
+ coorValue[0] = NULL;
+
+
+ coorX[1] = strdup("*");
+
+
+ coorY[1] = strdup("26700");
+
+
+ coorValue[1] = strdup("8");
+
+
+ status = defwNetPathPoint(2, coorX, coorY, coorValue);
+
+
+ CHECK_STATUS(status);
+
+
+ free((char*)coorX[0]);
+
+
+ free((char*)coorY[0]);
+
+
+ free((char*)coorX[1]);
+
+
+ free((char*)coorY[1]);
+
+
+ free((char*)coorValue[1]);
+
+
+ status = defwNetPathVia("nd1VIA23");
+
+
+ CHECK_STATUS(status);
+
+
+ coorX[0] = strdup("177800");
+
+
+ coorY[0] = strdup("*");
+
+
+ coorValue[0] = NULL;
+
+
+ status = defwNetPathPoint(1, coorX, coorY, coorValue);
+
+
+ CHECK_STATUS(status);
+
+
+ free((char*)coorX[0]);
+
+
+ free((char*)coorY[0]);
+
+
+ status = defwNetPathVia("nd1VIA23");
+
+
+ CHECK_STATUS(status);
+
+
+ coorX[0] = strdup("*");
+
+
+ coorY[0] = strdup("*");
+
+
+ coorValue[0] = strdup("8");
+
+
+ coorX[1] = strdup("*");
+
+
+ coorY[1] = strdup("30300");
+
+
+ coorValue[1] = strdup("8");
+
+
+ status = defwNetPathPoint(2, coorX, coorY, coorValue);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetPathVia("nd1VIA23");
+
+
+ CHECK_STATUS(status);
+
+
+ free((char*)coorX[0]);
+
+
+ free((char*)coorY[0]);
+
+
+ free((char*)coorValue[0]);
+
+
+ free((char*)coorX[1]);
+
+
+ free((char*)coorY[1]);
+
+
+ free((char*)coorValue[1]);
+
+
+ status = defwNetPathVia("nd1VIA23");
+
+
+ CHECK_STATUS(status);
+
+
+ coorX[0] = strdup("189560");
+
+
+ coorY[0] = strdup("*");
+
+
+ coorValue[0] = strdup("8");
+
+
+ status = defwNetPathPoint(1, coorX, coorY, coorValue);
+
+
+ CHECK_STATUS(status);
+
+
+ free((char*)coorX[0]);
+
+
+ free((char*)coorY[0]);
+
+
+ free((char*)coorValue[0]);
+
+
+ status = defwNetPathVia("nd1VIA12");
+
+
+ CHECK_STATUS(status);
+
+
+ coorX[0] = strdup("*");
+
+
+ coorY[0] = strdup("27300");
+
+
+ coorValue[0] = strdup("0");
+
+
+ status = defwNetPathPoint(1, coorX, coorY, coorValue);
+
+
+ CHECK_STATUS(status);
+
+
+ free((char*)coorX[0]);
+
+
+ free((char*)coorY[0]);
+
+
+ free((char*)coorValue[0]);
+
+
+ status = defwNetPathStart("NEW");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetPathLayer("M3", 1, NULL);
+
+
+ CHECK_STATUS(status);
+
+
+ coorX[0] = strdup("55160");
+
+
+ coorY[0] = strdup("31500");
+
+
+ coorValue[0] = strdup("8");
+
+
+ coorX[1] = strdup("*");
+
+
+ coorY[1] = strdup("34500");
+
+
+ coorValue[1] = strdup("0");
+
+
+ status = defwNetPathPoint(2, coorX, coorY, coorValue);
+
+
+ CHECK_STATUS(status);
+
+
+ free((char*)coorX[0]);
+
+
+ free((char*)coorY[0]);
+
+
+ free((char*)coorValue[0]);
+
+
+ free((char*)coorX[1]);
+
+
+ free((char*)coorY[1]);
+
+
+ free((char*)coorValue[1]);
+
+
+ status = defwNetPathVia("M2_M3");
+
+
+ CHECK_STATUS(status);
+
+
+ coorX[0] = strdup("149800");
+
+
+ coorY[0] = strdup("*");
+
+
+ coorValue[0] = strdup("8");
+
+
+ status = defwNetPathPoint(1, coorX, coorY, coorValue);
+
+
+ CHECK_STATUS(status);
+
+
+ free((char*)coorX[0]);
+
+
+ free((char*)coorY[0]);
+
+
+ free((char*)coorValue[0]);
+
+
+ status = defwNetPathVia("M2_M3");
+
+
+ CHECK_STATUS(status);
+
+
+ coorX[0] = strdup("*");
+
+
+ coorY[0] = strdup("35700");
+
+
+ coorValue[0] = NULL;
+
+
+ coorX[1] = strdup("*");
+
+
+ coorY[1] = strdup("37500");
+
+
+ coorValue[1] = NULL;
+
+
+ status = defwNetPathPoint(2, coorX, coorY, coorValue);
+
+
+ CHECK_STATUS(status);
+
+
+ free((char*)coorX[0]);
+
+
+ free((char*)coorY[0]);
+
+
+ free((char*)coorX[1]);
+
+
+ free((char*)coorY[1]);
+
+
+ status = defwNetPathVia("M2_M3");
+
+
+ CHECK_STATUS(status);
+
+
+ coorX[0] = strdup("*");
+
+
+ coorY[0] = strdup("*");
+
+
+ coorValue[0] = strdup("8");;
+
+
+ coorX[1] = strdup("170520");
+
+
+ coorY[1] = strdup("*");
+
+
+ coorValue[1] = strdup("0");
+
+
+ status = defwNetPathPoint(2, coorX, coorY, coorValue);
+
+
+ CHECK_STATUS(status);
+
+
+ free((char*)coorX[0]);
+
+
+ free((char*)coorY[0]);
+
+
+ free((char*)coorValue[0]);
+
+
+ free((char*)coorX[1]);
+
+
+ free((char*)coorY[1]);
+
+
+ free((char*)coorValue[1]);
+
+
+ status = defwNetPathVia("M2_M3");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetPathEnd();
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetEndOneNet();
+
+
+ CHECK_STATUS(status);
+
+
+
+
+
+ status = defwNet("SCAN");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetConnection("scancell1", "P10", 1);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetConnection("scancell2", "PA0", 1);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetSource("TEST");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetEndOneNet();
+
+
+ CHECK_STATUS(status);
+
+
+
+
+
+ status = defwNet("testBug");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetConnection("Z38A05", "G", 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetConnection("Z38A03", "G", 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetConnection("Z38A01", "G", 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetPathStart("ROUTED");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetPathLayer("M1", 0, NULL);
+
+
+ CHECK_STATUS(status);
+
+
+ coorX[0] = strdup("1288210");
+
+
+ coorY[0] = strdup("580930");
+
+
+ coorValue[0] = NULL;
+
+
+ status = defwNetPathPoint(1, coorX, coorY, coorValue);
+
+
+ CHECK_STATUS(status);
+
+
+ free((char*)coorX[0]);
+
+
+ free((char*)coorY[0]);
+
+
+ status = defwNetPathVia("GETH1W1W1");
+
+
+ CHECK_STATUS(status);
+
+
+ coorX[0] = strdup("*");
+
+
+ coorY[0] = strdup("582820");
+
+
+ status = defwNetPathPoint(1, coorX, coorY, coorValue);
+
+
+ CHECK_STATUS(status);
+
+
+ free((char*)coorX[0]);
+
+
+ free((char*)coorY[0]);
+
+
+ status = defwNetPathVia("GETH2W1W1");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetPathStart("NEW");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetPathLayer("M3", 0, NULL);
+
+
+ CHECK_STATUS(status);
+
+
+ coorX[0] = strdup("1141350");
+
+
+ coorY[0] = strdup("582820");
+
+
+ coorValue[0] = NULL;
+
+
+ status = defwNetPathPoint(1, coorX, coorY, coorValue);
+
+
+ CHECK_STATUS(status);
+
+
+ free((char*)coorX[0]);
+
+
+ free((char*)coorY[0]);
+
+
+ status = defwNetPathVia("GETH2W1W1");
+
+
+ CHECK_STATUS(status);
+
+
+ coorX[0] = strdup("*");
+
+
+ coorY[0] = strdup("580930");
+
+
+ status = defwNetPathPoint(1, coorX, coorY, coorValue);
+
+
+ CHECK_STATUS(status);
+
+
+ free((char*)coorX[0]);
+
+
+ free((char*)coorY[0]);
+
+
+ status = defwNetPathVia("GETH1W1W1");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetPathStart("NEW");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetPathLayer("M1", 0, NULL);
+
+
+ CHECK_STATUS(status);
+
+
+ coorX[0] = strdup("1278410");
+
+
+ coorY[0] = strdup("275170");
+
+
+ coorValue[0] = NULL;
+
+
+ status = defwNetPathPoint(1, coorX, coorY, coorValue);
+
+
+ CHECK_STATUS(status);
+
+
+ free((char*)coorX[0]);
+
+
+ free((char*)coorY[0]);
+
+
+ status = defwNetPathStart("NEW");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetPathLayer("M1", 0, NULL);
+
+
+ CHECK_STATUS(status);
+
+
+ coorX[0] = strdup("1141210");
+
+
+ coorY[0] = strdup("271250");
+
+
+ coorValue[0] = NULL;
+
+
+ status = defwNetPathPoint(1, coorX, coorY, coorValue);
+
+
+ CHECK_STATUS(status);
+
+
+ free((char*)coorX[0]);
+
+
+ free((char*)coorY[0]);
+
+
+ status = defwNetPathVia("GETH1W1W1");
+
+
+ CHECK_STATUS(status);
+
+
+ coorX[0] = strdup("*");
+
+
+ coorY[0] = strdup("271460");
+
+
+ coorValue[0] = NULL;
+
+
+ status = defwNetPathPoint(1, coorX, coorY, coorValue);
+
+
+ CHECK_STATUS(status);
+
+
+ free((char*)coorX[0]);
+
+
+ free((char*)coorY[0]);
+
+
+ status = defwNetPathVia("GETH2W1W1");
+
+
+ CHECK_STATUS(status);
+
+
+ coorX[0] = strdup("1142820");
+
+
+ coorY[0] = strdup("*");
+
+
+ coorValue[0] = NULL;
+
+
+ status = defwNetPathPoint(1, coorX, coorY, coorValue);
+
+
+ CHECK_STATUS(status);
+
+
+ free((char*)coorX[0]);
+
+
+ free((char*)coorY[0]);
+
+
+ status = defwNetPathVia("GETH3W1W1");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetPathEnd();
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetEndOneNet();
+
+
+ CHECK_STATUS(status);
+
+
+ free((char*)coorX);
+
+
+ free((char*)coorY);
+
+
+ free((char*)coorValue);
+
+
+
+
+
+ status = defwNet("n1");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetConnection("PIN", "n1", 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetConnection("driver1", "in", 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetConnection("bumpa1", "bumppin", 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetFixedbump();
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNetEndOneNet();
+
+
+ CHECK_STATUS(status);
+
+
+
+
+
+ status = defwEndNets();
+
+
+ CHECK_STATUS(status);
+
+
+
+
+
+ // SCANCHAIN
+
+
+ status = defwStartScanchains(4);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwScanchain("the_chain");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwScanchainCommonscanpins("IN", "PA1", "OUT", "PA2");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwScanchainStart("PIN", "scanpin");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwScanchainStop("cell4", "PA2");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwScanchainOrdered("cell2", "IN", "PA0", NULL, NULL,
+
+
+ "cell1", "OUT", "P10", NULL, NULL);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwScanchainFloating("scancell1", "IN", "PA0", NULL, NULL);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwScanchainFloating("scancell2", "OUT", "P10", NULL, NULL);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwScanchain("chain1_clock1");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwScanchainPartition("clock1", -1);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwScanchainStart("block1/current_state_reg_0_QZ", NULL);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwScanchainFloating("block1/pgm_cgm_en_reg", "IN", "SD", "OUT", "QZ");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwScanchainFloating("block1/start_reset_dd_reg", "IN", "SD", "OUT", "QZ");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwScanchainStop("block1/start_reset_d_reg", NULL);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwScanchain("chain2_clock2");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwScanchainPartition("clock2", 1000);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwScanchainStart("block1/current_state_reg_0_QZ", NULL);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwScanchainFloating("block1/port2_phy_addr_reg_0_", "IN", "SD", "OUT", "QZ ");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwScanchainFloating("block1/port2_phy_addr_reg_4_", "IN", "SD", "OUT", "QZ");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwScanchainFloatingBits("block1/port3_intfc", "IN", "SD", "OUT", "QZ", 4);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwScanchainOrderedBits("block1/mux1", "IN", "A", "OUT", "X", 0,
+
+
+ "block1/ff2", "IN", "SD", "OUT", "Q", -1);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwScanchain("chain4_clock3");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwScanchainPartition("clock3", -1);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwScanchainStart("block1/prescaler_IO/lfsr_reg1", NULL);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwScanchainFloating("block1/dp1_timers", NULL, NULL, NULL, NULL);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwScanchainFloatingBits("block1/bus8", NULL, NULL, NULL, NULL, 8);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwScanchainOrderedBits("block1/dsl/ffl", "IN", "SD", "OUT", "Q",
+
+
+ -1, "block1/dsl/mux1", "IN", "B", "OUT", "Y", 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwScanchainOrderedBits("block1/dsl/ff2", "IN", "SD", "OUT", "Q",
+
+
+ -1, "block1/dsl/mux2", "IN", "B", "OUT", "Y", 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwScanchainStop("block1/start_reset_d_reg", NULL);
+
+
+ CHECK_STATUS(status);
+
+
+
+
+
+ status = defwEndScanchain();
+
+
+ CHECK_STATUS(status);
+
+
+
+
+
+ // GROUPS
+
+
+ groupExpr = (const char**)malloc(sizeof(char*)*2);
+
+
+ status = defwStartGroups(2);
+
+
+ CHECK_STATUS(status);
+
+
+ groupExpr[0] = strdup("cell2");
+
+
+ groupExpr[1] = strdup("cell3");
+
+
+ status = defwGroup("group1", 2, groupExpr);
+
+
+ CHECK_STATUS(status);
+
+
+ free((char*)groupExpr[0]);
+
+
+ free((char*)groupExpr[1]);
+
+
+ status = defwGroupRegion(0, 0, 0, 0, "region1");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwStringProperty("ggrp", "xx");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwIntProperty("side", 2);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwRealProperty("maxarea", 5.6);
+
+
+ CHECK_STATUS(status);
+
+
+ groupExpr[0] = strdup("cell1");
+
+
+ status = defwGroup("group2", 1, groupExpr);
+
+
+ CHECK_STATUS(status);
+
+
+ free((char*)groupExpr[0]);
+
+
+ status = defwGroupRegion(0, 10, 1000, 1010, NULL);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwStringProperty("ggrp", "after the fall");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwGroupSoft("MAXHALFPERIMETER", 4000, "MAXX", 10000, 0, 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwEndGroups();
+
+
+ CHECK_STATUS(status);
+
+
+ free((char*)groupExpr);
+
+
+ status = defwNewLine();
+
+
+ CHECK_STATUS(status);
+
+
+
+
+
+ // BLOCKAGES
+
+
+ xP = (double*)malloc(sizeof(double)*7);
+
+
+ yP = (double*)malloc(sizeof(double)*7);
+
+
+ xP[0] = 2.1;
+
+
+ yP[0] = 2.1;
+
+
+ xP[1] = 3.1;
+
+
+ yP[1] = 3.1;
+
+
+ xP[2] = 4.1;
+
+
+ yP[2] = 4.1;
+
+
+ xP[3] = 5.1;
+
+
+ yP[3] = 5.1;
+
+
+ xP[4] = 6.1;
+
+
+ yP[4] = 6.1;
+
+
+ xP[5] = 7.1;
+
+
+ yP[5] = 7.1;
+
+
+ xP[6] = 8.1;
+
+
+ yP[6] = 8.1;
+
+
+
+
+
+ status = defwStartBlockages(12);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwBlockageLayer("m1", "comp1");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwBlockageRect(3456, 4535, 3000, 4000);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwBlockageRect(4500, 6500, 5500, 6000);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwBlockagePolygon(7, xP, yP);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwBlockagePolygon(6, xP, yP);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwBlockageRect(5000, 6000, 4000, 5000);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwBlockagePlacementComponent("m2");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwBlockageRect(4000, 6000, 8000, 4000);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwBlockageRect(8000, 400, 600, 800);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwBlockageLayer("m3", 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwBlockageSpacing(1000);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwBlockageRect(3000, 4000, 6000, 5000);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwBlockageLayerSlots("m4");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwBlockageDesignRuleWidth(1000);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwBlockageRect(3000, 4000, 6000, 5000);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwBlockageLayerFills("m5");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwBlockageRect(3000, 4000, 6000, 5000);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwBlockageLayerPushdown("m6");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwBlockageRect(3000, 4000, 6000, 5000);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwBlockagePolygon(7, xP, yP);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwBlockagePlacementComponent("m7");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwBlockageRect(3000, 4000, 6000, 5000);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwBlockagePlacementPushdown();
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwBlockageRect(3000, 4000, 6000, 5000);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwBlockagePlacement();
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwBlockageRect(3000, 4000, 6000, 5000);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwBlockagePlacementSoft();
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwBlockageRect(4000, 6000, 8000, 4000);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwBlockagePlacementPartial (1.1);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwBlockageRect(4000, 6000, 8000, 4000);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwBlockageLayerExceptpgnet("metal1");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwBlockageSpacing(4);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwBlockagePolygon(3, xP, yP);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwEndBlockages();
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNewLine();
+
+
+ CHECK_STATUS(status);
+
+
+ free((char*)xP);
+
+
+ free((char*)yP);
+
+
+
+
+
+ // SLOTS
+
+
+ xP = (double*)malloc(sizeof(double)*7);
+
+
+ yP = (double*)malloc(sizeof(double)*7);
+
+
+ xP[0] = 2.1;
+
+
+ yP[0] = 2.1;
+
+
+ xP[1] = 3.1;
+
+
+ yP[1] = 3.1;
+
+
+ xP[2] = 4.1;
+
+
+ yP[2] = 4.1;
+
+
+ xP[3] = 5.1;
+
+
+ yP[3] = 5.1;
+
+
+ xP[4] = 6.1;
+
+
+ yP[4] = 6.1;
+
+
+ xP[5] = 7.1;
+
+
+ yP[5] = 7.1;
+
+
+ xP[6] = 8.1;
+
+
+ yP[6] = 8.1;
+
+
+ status = defwStartSlots(2);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSlotLayer("MET1");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSlotPolygon(7, xP, yP);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSlotPolygon(3, xP, yP);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSlotRect(1000, 2000, 1500, 4000);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSlotRect(2000, 2000, 2500, 4000);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSlotRect(3000, 2000, 3500, 4000);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSlotLayer("MET2");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSlotRect(1000, 2000, 1500, 4000);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSlotPolygon(6, xP, yP);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwEndSlots();
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNewLine();
+
+
+ CHECK_STATUS(status);
+
+
+ free((char*)xP);
+
+
+ free((char*)yP);
+
+
+
+
+
+ // FILLS
+
+
+ xP = (double*)malloc(sizeof(double)*7);
+
+
+ yP = (double*)malloc(sizeof(double)*7);
+
+
+ xP[0] = 2.1;
+
+
+ yP[0] = 2.1;
+
+
+ xP[1] = 3.1;
+
+
+ yP[1] = 3.1;
+
+
+ xP[2] = 4.1;
+
+
+ yP[2] = 4.1;
+
+
+ xP[3] = 5.1;
+
+
+ yP[3] = 5.1;
+
+
+ xP[4] = 6.1;
+
+
+ yP[4] = 6.1;
+
+
+ xP[5] = 7.1;
+
+
+ yP[5] = 7.1;
+
+
+ xP[6] = 8.1;
+
+
+ yP[6] = 8.1;
+
+
+ status = defwStartFills(5);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwFillLayer("MET1");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwFillRect(1000, 2000, 1500, 4000);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwFillPolygon(5, xP, yP);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwFillRect(2000, 2000, 2500, 4000);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwFillPolygon(7, xP, yP);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwFillRect(3000, 2000, 3500, 4000);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwFillLayer("MET2");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwFillRect(1000, 2000, 1500, 4000);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwFillRect(1000, 4500, 1500, 6500);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwFillRect(1000, 7000, 1500, 9000);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwFillRect(1000, 9500, 1500, 11500);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwFillPolygon(7, xP, yP);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwFillPolygon(6, xP, yP);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwFillLayer("metal1");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwFillLayerOPC();
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwFillRect(100, 200, 150, 400);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwFillRect(300, 200, 350, 400);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwFillVia("via28");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwFillViaOPC();
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwFillPoints(1, xP, yP);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwFillVia("via26");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwFillPoints(3, xP, yP);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwEndFills();
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNewLine();
+
+
+ CHECK_STATUS(status);
+
+
+ free((char*)xP);
+
+
+ free((char*)yP);
+
+
+
+
+
+ // SLOTS
+
+
+ xP = (double*)malloc(sizeof(double)*7);
+
+
+ yP = (double*)malloc(sizeof(double)*7);
+
+
+ xP[0] = 2.1;
+
+
+ yP[0] = 2.1;
+
+
+ xP[1] = 3.1;
+
+
+ yP[1] = 3.1;
+
+
+ xP[2] = 4.1;
+
+
+ yP[2] = 4.1;
+
+
+ xP[3] = 5.1;
+
+
+ yP[3] = 5.1;
+
+
+ xP[4] = 6.1;
+
+
+ yP[4] = 6.1;
+
+
+ xP[5] = 7.1;
+
+
+ yP[5] = 7.1;
+
+
+ xP[6] = 8.1;
+
+
+ yP[6] = 8.1;
+
+
+ status = defwStartSlots(2);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSlotLayer("MET1");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSlotRect(1000, 2000, 1500, 4000);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSlotPolygon(5, xP, yP);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSlotRect(2000, 2000, 2500, 4000);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSlotPolygon(7, xP, yP);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSlotRect(3000, 2000, 3500, 4000);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSlotLayer("MET2");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSlotRect(1000, 2000, 1500, 4000);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSlotRect(1000, 4500, 1500, 6500);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSlotRect(1000, 7000, 1500, 9000);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSlotRect(1000, 9500, 1500, 11500);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSlotPolygon(7, xP, yP);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwSlotPolygon(6, xP, yP);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwEndSlots();
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNewLine();
+
+
+ CHECK_STATUS(status);
+
+
+ free((char*)xP);
+
+
+ free((char*)yP);
+
+
+
+
+
+ // NONDEFAULTRULES
+
+
+ status = defwStartNonDefaultRules(4);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNonDefaultRule("doubleSpaceRule", 1);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNonDefaultRuleLayer("metal1", 2, 0, 1, 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNonDefaultRuleLayer("metal2", 2, 0, 1, 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNonDefaultRuleLayer("metal3", 2, 0, 1, 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNonDefaultRule("lowerResistance", 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNonDefaultRuleLayer("metal1", 6, 0, 0, 5);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNonDefaultRuleLayer("metal2", 5, 1, 6, 4);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNonDefaultRuleLayer("metal3", 5, 0, 0, 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNonDefaultRuleMinCuts("cut12", 2);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNonDefaultRuleMinCuts("cut23", 2);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNonDefaultRule("myRule", 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNonDefaultRuleLayer("metal1", 2, 0, 0, 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNonDefaultRuleLayer("metal2", 2, 0, 0, 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNonDefaultRuleLayer("metal3", 2, 0, 0, 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNonDefaultRuleViaRule("myvia12rule");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNonDefaultRuleViaRule("myvia23rule");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwRealProperty("minlength", 50.5);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwStringProperty("firstName", "Only");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwIntProperty("idx", 1);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNonDefaultRule("myCustomRule", 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNonDefaultRuleLayer("metal1", 5, 0, 1, 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNonDefaultRuleLayer("metal2", 5, 0, 1, 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNonDefaultRuleLayer("metal3", 5, 0, 1, 0);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNonDefaultRuleVia("myvia12_custom1");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNonDefaultRuleVia("myvia12_custom2");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNonDefaultRuleVia("myvia23_custom1");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNonDefaultRuleVia("myvia23_custom2");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwEndNonDefaultRules();
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwNewLine();
+
+
+ CHECK_STATUS(status);
+
+
+
+
+
+ // STYLES
+
+
+ status = defwStartStyles(3);
+
+
+ CHECK_STATUS(status);
+
+
+ xP = (double*)malloc(sizeof(double)*6);
+
+
+ yP = (double*)malloc(sizeof(double)*6);
+
+
+ xP[0] = 30;
+
+
+ yP[0] = 10;
+
+
+ xP[1] = 10;
+
+
+ yP[1] = 30;
+
+
+ xP[2] = -10;
+
+
+ yP[2] = 30;
+
+
+ xP[3] = -30;
+
+
+ yP[3] = 10;
+
+
+ xP[4] = -30;
+
+
+ yP[4] = -10;
+
+
+ xP[5] = -10;
+
+
+ yP[5] = -30;
+
+
+ status = defwStyles(1, 6, xP, yP);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwStyles(2, 5, xP, yP);
+
+
+ CHECK_STATUS(status);
+
+
+ free((char*)xP);
+
+
+ free((char*)yP);
+
+
+ xP = (double*)malloc(sizeof(double)*8);
+
+
+ yP = (double*)malloc(sizeof(double)*8);
+
+
+ xP[0] = 30;
+
+
+ yP[0] = 10;
+
+
+ xP[1] = 10;
+
+
+ yP[1] = 30;
+
+
+ xP[2] = -10;
+
+
+ yP[2] = 30;
+
+
+ xP[3] = -30;
+
+
+ yP[3] = 10;
+
+
+ xP[4] = -30;
+
+
+ yP[4] = -10;
+
+
+ xP[5] = -10;
+
+
+ yP[5] = -30;
+
+
+ xP[6] = 10;
+
+
+ yP[6] = -30;
+
+
+ xP[7] = 30;
+
+
+ yP[7] = -10;
+
+
+ status = defwStyles(3, 8, xP, yP);
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwEndStyles();
+
+
+ CHECK_STATUS(status);
+
+
+ free((char*)xP);
+
+
+ free((char*)yP);
+
+
+ status = defwNewLine();
+
+
+ CHECK_STATUS(status);
+
+
+
+
+
+ // BEGINEXT
+
+
+ status = defwStartBeginext("tag");
+
+
+ CHECK_STATUS(status);
+
+
+ defwAddIndent();
+
+
+ status = defwBeginextCreator("CADENCE");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwBeginextSyntax("OTTER", "furry");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwStringProperty("arrg", "later");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwBeginextSyntax("SEAL", "cousin to WALRUS");
+
+
+ CHECK_STATUS(status);
+
+
+ status = defwEndBeginext();
+
+
+ CHECK_STATUS(status);
+
+
+
+
+
+
+
+
+ status = defwEnd();
+
+
+ CHECK_STATUS(status);
+
+
+
+
+
+ lineNumber = defwCurrentLineNumber();
+
+
+ if (lineNumber == 0)
+
+
+ fprintf(stderr, "ERROR: nothing has been read.\n");
+
+
+
+
+
+ fclose(fout);
+
+
+
+
+
+ return 0;
+
+
+ }
+
+
+
+
+
+
+ Return to top of page
+
+
+
+
+
+For support, see Cadence Online Support service.
+
+
+
+Copyright © 2016, Cadence Design Systems, Inc.
+
+
+
+All rights reserved.
+
+
+
+
diff --git a/lefdef/doc/defapi/ch1Intro.html b/lefdef/doc/defapi/ch1Intro.html
new file mode 100644
index 00000000..d7797abf
--- /dev/null
+++ b/lefdef/doc/defapi/ch1Intro.html
@@ -0,0 +1,404 @@
+
+
+
+
+ DEF 5.8 C/C++ Programming Interface -- 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ |
+
+
+
+
+ |
+
+
+ |
+
+
+
+ |
+
+
+ |
+
+
+ |
+
+
+
+
+ |
+
+
+ |
+
+
+ |
+
+
+ |
+
+
+ |
+
+
+
+
+
+
+
+
+
+ DEF 5.8 C/C++ Programming Interface (Open Licensing Program)
+
+
+
+
+
+
+
+
+
+
1
+
+
This chapter contains the following sections:
+
+
+
+
+
+
+
This manual describes the application programming interface (API) routines for the following Cadence® Design Exchange Format (DEF) components:
+
+
+
Cadence Design Systems, Inc. uses these routines internally with many tools that read and write DEF. The API supports DEF version 5.8, but also reads earlier versions of DEF.
+
You can use the API routines documented in this manual with tools that write these older versions, as long as none of the tools in an interdependent flow introduce newer constructs.
+
Note: The writer portion of the API does not always optimize the DEF output.
+
+
The DEF reader can work in two modes - compatibility mode and session-based mode.
+
+
+
+
+
+
+ |
+
+
+ a.
+
+ |
+ Parser initialization: Call defrInitSession() instead of defrInit() to start a new parsing session and close any old parsing session, if opened. |
+
+
+
+
+
+
+
+
+
+ |
+
+
+ d.
+
+ |
+ Cleaning of the parsing configuration: Call the defrClear() function (optional). The call releases all parsing session data and closes the parsing session. If this is skipped, the data cleaning and the session closing is done by the next defrInitSession() call. |
+
+
+
+
In the session-based mode, the properties once defined in PROPERTYDEFINITIONS remain active in all the DEF file parsing cycles in the session and the properties definition data is cleaned when the parsing session ends.
+
The session-based mode does not require you to call callbacks and property unsetter functions. All callbacks and properties are set to default by the next defrInitSession() call.
+
The session-based mode allows you to avoid the lasting PROPERTYDEFINITIONS data effect when not required as you can just configure your application to parse one file per session.
+
By default, the DEF parser works in the compatibility mode. To activate the session-based mode, you must use defrInitSession() instead of defrInit().
+
Note: Currently, the compatibility mode can be used in all old applications where the code has not been adjusted. The def2oa translator has already been adjusted to use the session-based parsing mode.
+
+
The DEF file comparison utility, lefdefdiff, helps you verify that your usage of the API is consistent and complete. This utility reads two DEF files, generally an initial file and the resulting file from reading in an application, then writes out a DEF file. The comparison utility reads and writes the data so that the UNIX diff utility can be used to compare the files.
+
Because the DEF file comparison utility works incrementally (writing out as it operates), the size of files it can process has no limitation. However, large files can have performance restrictions. In general, the utility is intended only to verify the use of the API; that is, the utility is not a component of a production design flow.
+
+
The DEF reader can parse compressed DEF files. To do so, you must link the libdef.a and libdefzlib.a libraries.
+
A zlib compression library is also required in order to read compressed DEF files. The zlib source code is free software that can be downloaded from www.gnu.com.
+
For information on compressed file routines, see "DEF Compressed File Routines."
+
+
Orientation codes are used throughout the DEF reader routines. The orientation codes are the same for all routines.
+
A number from 0 to 7, corresponding to the compass direction orientations, represents the orientation of a site or component. The following figure shows the combination of mirroring and rotation that is used for each of the eight possible orientations.
+
+
+
Note: The location given is the lower left corner of the resulting site or component after the mirroring and rotation are applied. It is not the location of the origin of the child cell.
+
+
+ Return to top of page
+
+
+
+
+
+For support, see Cadence Online Support service.
+
+
+
+Copyright © 2016, Cadence Design Systems, Inc.
+
+
+
+All rights reserved.
+
+
+
+
diff --git a/lefdef/doc/defapi/ch2DEFsetup.html b/lefdef/doc/defapi/ch2DEFsetup.html
new file mode 100644
index 00000000..0e70c990
--- /dev/null
+++ b/lefdef/doc/defapi/ch2DEFsetup.html
@@ -0,0 +1,484 @@
+
+
+
+
+ DEF 5.8 C/C++ Programming Interface -- 2
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ |
+
+
+
+
+ |
+
+
+ |
+
+
+
+ |
+
+
+ |
+
+
+ |
+
+
+
+
+ |
+
+
+ |
+
+
+ |
+
+
+ |
+
+
+ |
+
+
+
+
+
+
+
+
+
+ DEF 5.8 C/C++ Programming Interface (Open Licensing Program)
+
+
+
+
+
+
+
+
+
+
2
+
+
The Cadence® Design Exchange Format (DEF) reader provides several routines that initialize the reader and set global variables that are used by the reader.
+
The following routines described in this section set options for reading a DEF file.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
The following DEF reader setup and control routines are available in the API.
+
+
Initializes internal variables in the DEF reader. You must use this routine before using defrRead. You can use other routines to set callback functions before or after this routine.
+
+
+ int defrInit()
+
+
+
Starts a new parsing session and closes any old parsing session, if open. You must use this routine before using defrRead.
+
+
+ int defrInitSession (- int startSession = 1)
+
+
+
+
+ startSession
+
+
Boolean. If is non-zero, performs the parser initialization in session-based mode; otherwise, the function will initialize parsing in the compatibility mode, working exactly as a defrInit() call.
+
+
Releases all parsing session data and closes the parsing session. If the call to defrClear() is skipped, the data cleaning and the session closing is done by the next defrInitSession() call.
+
+
+ int defrClear()
+
+
+
Specifies the DEF file to read. Any callbacks that have been set are called from within this routine. If the file parses with no errors, that is, all callbacks return OK condition codes, this routine returns zero.
+
+
+ int defrRead(- FILE*
file,const char* fileName,defiUserData* data,int case_sensitive)
+
+
+
+
+ file
+
+
Specifies a pointer to an already open file. This allows the parser to work with either a disk file or a piped stream. This argument is required. Any callbacks that have been set will be called from within this routine.
+
+
+ fileName
+
+
Specifies a UNIX filename using either a complete or a relative path specification.
+
+
+ data
+
+
Specifies the data type.
+
+
+ case_sensitive
+
+
Specifies whether the data is case sensitive.
+
+
Sets the user-provided data. The DEF reader does not look at this data, but passes an opaque defiUserData pointer back to the application with each callback. You can set or change the user data at any time using the defrSetUserData and defrGetUserData routines. Every callback returns user data as the third argument.
+
+
+ void defrSetUserData(- defiUserData*
data)
+
+
+
+
+ data
+
+
Specifies the user-provided data.
+
+
Retrieves the user-provided data. The DEF reader returns an opaque defiUserData pointer, which you set using defrSetUserData. You can set or change the user data at any time with the defrSetUserData and defrGetUserData calls. Every callback returns the user data as the third argument.
+
+
+ defiUserData defrGetUserData()
+
+
+
Adds path data to the appropriate net data. When the net callback is used, the net class and structure information and the path information are returned. This statement does not require any additional arguments.
+
+
+ void defrSetAddPathToNet(void)
+
+
+
Ignores component net information. Component nets are valid DEF syntax but are no longer used. By default, the DEF reader reports component net data as a syntax error. This routine overrides the default so no error is reported. This statement does not require any additional arguments.
+
+
+ void defrSetAllowComponentNets(void)
+
+
+
Returns non-zero value if component nets are allowed.
+
+
+ int defrGetAllowComponentNets()
+
+
+
Changes the character used to indicate comments in the DEF file.
+
+
+ void defrSetCommentChar(char c)
+
+
+
+
+ c
+
+
Specifies the comment character. The default is a pound sign (#).
+
+
Keeps track of all the callback routines that are not set. You can use this routine to keep track of DEF constructs that are in the input file but do not trigger a callback. This statement does not require any additional arguments.
+
+
+ void defrSetRegisterUnusedCallbacks(void)
+
+
+
Prints all callback routines that are not set but have constructs in the DEF file.
+
+
+ void defrPrintUnusedCallbacks(FILE* log)
+
+
+
+
+ log
+
+
Specifies the file to which the unused callbacks are printed.
+
+
Returns the number of callback routines that are not set. That is, routines that have constructs in the input file but no callback trigger. This statement does not require any additional arguments.
+
+
+ int* defrUnusedCallbackCount(void)
+
+
+
The following example shows how to initialize the reader.
+
+ int setupRoutine() {- FILE* f;
- int res;
- int userData = 0x01020304;
- ...
+
+
+ - // Initialize the reader. This routine has to call first.
- defrInit();
+
+
+ - // Set user data
- defrSetUserData ((void *)3);
+
+
+ - // Open the def file for the reader to read
- if ((f = fopen("defInputFileName","r")) == 0) {
- printf("Couldn't open input file '%s'\n",
- "defInputFileName");
- return(2);
- }
- // Invoke the parser
- res = defrRead(f, "defInputFileName", (void*)userData);
- if (res != 0) {
- printf("DEF parser returns an error\n");
- return(2);
- }
- fclose(f);
- return 0;}
+
+
+
+
+ Return to top of page
+
+
+
+
+
+For support, see Cadence Online Support service.
+
+
+
+Copyright © 2016, Cadence Design Systems, Inc.
+
+
+
+All rights reserved.
+
+
+
+
diff --git a/lefdef/doc/defapi/ch3DEFcallback.html b/lefdef/doc/defapi/ch3DEFcallback.html
new file mode 100644
index 00000000..22d68196
--- /dev/null
+++ b/lefdef/doc/defapi/ch3DEFcallback.html
@@ -0,0 +1,2860 @@
+
+
+
+
+ DEF 5.8 C/C++ Programming Interface -- 3
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ |
+
+
+
+
+ |
+
+
+ |
+
+
+
+ |
+
+
+ |
+
+
+ |
+
+
+
+
+ |
+
+
+ |
+
+
+ |
+
+
+ |
+
+
+ |
+
+
+
+
+
+
+
+
+
+ DEF 5.8 C/C++ Programming Interface (Open Licensing Program)
+
+
+
+
+
+
+
+
+
+
3
+
+
The Cadence® Design Exchange Format (DEF) reader calls all callback routines when it reads in the appropriate part of the DEF file. Some routines, such as the design name callback, are called only once. Other routines, such as the net callback, can be called more than once.
+
This chapter contains the following sections:
+
+
+
+
+
All callback functions use the following format.
+
+ int UserCallbackFunction(- defrCallbackType_e
callBackTypeDEF_type DEF_data defiUserData data)
+
+
Each user-supplied callback routine is passed three arguments.
+
+
The callBackType argument is a list of objects that contains a unique number assignment for each callback from the parser. This list allows you to use the same callback routine for different types of DEF data.
+
+
The DEF_data argument provides the data specified by the callback. Data types returned by the callbacks vary for each callback. Examples of the types of arguments passed include const char*, double, int, and defiProp. Two points to note:
+
+
+
+
The data argument is a four-byte data item that is set by the user. Note that the DEF reader contains only user data. The user data is most often set to a pointer to the design data so that it can be passed to the routines. This is more effective than using a global variable.
+
The callback functions can be set or reset at any time. If you want a callback to be available when the DEF file parsing begins, you must set the callback before you call defrRead.
+
Note: You can unset a callback by using the set function with a null argument.
+
+
You must set a callback before you can use it. When you set a callback, the callback routine used for each type of DEF information is passed in the appropriate setting routine. Each callback routine returns a callback type.
+
The following table lists the DEF reader callback setting routines and the associated callback types. The contents of the setting routines are described in detail in the section "User Callback Routines".
+
+
+
The following example shows how to create a setup routine so the reader can parse the DEF file and call the callback routines you defined.
+
+ int setupRoutine() {- FILE* f;
- int res;
- int userData = 0x01020304;
- ...
+
+
+ - // Initialize the reader. This routine has to call first.
- defrInit();
+
+
+ - // Set the user callback routines
- defrSetDesignCbk(designCB);
- defrSetTechnologyCbk(technologyCB);
- defrSetDesignEndCbk(designEndCB);
- defrSetPropCbk(propertyDefCB);
- defrSetPropDefEndCbk(properyDefEndCB);
- defrSetNetCbk(netCB);
- ...
+
+
+ - defrSetRegisterUnusedCallback();
- // Open the def file for the reader to read
- if ((f = fopen("defInputFileName","r")) == 0) {
- printf("Couldn't open input file '%s'\n",
- "defInputFileName");
- return(2);
- }
- // Invoke the parser
- res = defrRead(f, "defInputFileName", (void*)userData);
- if (res != 0) {
- printf("DEF parser returns an error\n");
- return(2);
- }
- (void)defrPrintUnusedCallbacks(f);
- fclose(f);
- return 0;}
+
+
+
This section describes the following routines:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Retrieves data from the BLOCKAGES statement in the DEF file. Use the arguments defined in the defiBlockage class to retrieve the data. For syntax information about the DEF BLOCKAGES statement, see Blockages in the LEF/DEF Language Reference.
+
+
+ int defrBlockageCbkFnType(- defrCallbackType_e
typ,- defiBlockage* blockage,
- defiUserData* data)
+
+
+
+
+ typ
+
+
Returns the defrBlockageCbkType type, which indicates that the blockage callback was called.
+
+
+ blockage
+
+
Returns a pointer to a defiBlockage structure. For more information, see defiBlockage.
+
+
+ data
+
+
Returns four bytes of user-defined data. User data is most often set to a pointer to the design data.
+
+
Retrieves data from the DIEAREA statement in the DEF file. Use the arguments defined in the defiBox class to retrieve the data. For syntax information about the DEF DIEAREA statement, see Die Area in the LEF/DEF Language Reference.
+
+
+ int defrBoxCbkFnType(- defrCallbackType_e
typ,- defiBox* box,
- defiUserData* data)
+
+
+
+
+ typ
+
+
Returns the defrDieAreaCbkType type, which indicates that the die area callback was called.
+
+
+ box
+
+
Returns a pointer to a defiBox structure. For more information, see defiBox.
+
+
+ data
+
+
Returns four bytes of user-defined data. User data is most often set to a pointer to the design data.
+
+
Retrieves data from the COMPONENTS statement in the DEF file. Use the arguments defined in the defiComponent class to retrieve the data. For syntax information about the DEF COMPONENTS statement, see Components in the LEF/DEF Language Reference.
+
+
+ int defrComponentCbkFnType(- defrCallbackType_e
typ,- defiComponent* comp,
- defiUserData* data)
+
+
+
+
+ typ
+
+
Returns the defrComponentCbkType, which indicates that the component callback was called.
+
+
+ comp
+
+
Returns a pointer to a defiComponent structure. For more information, see defiComponent.
+
+
+ data
+
+
Returns four bytes of user-defined data. User data is most often set to a pointer to the design data.
+
+
Retrieves data from the COMPONENTMASKSHIFT statement of the DEF file. The format of the data returned is always the same, but the actual data represented varies depending on the calling routine.
+
For syntax information about the DEF COMPONENTMASKSHIFT statement, see "Component Mask Shift" in the LEF/DEF Language Reference.
+
+
+ int defrComponentMaskShiftLayerCbkFnType (- defrCallbackType_e
type,- defiComponentMaskShiftLayer* shiftLayers,
- defiUserData* data)
+
+
+
+
+ type
+
+
Returns the defrComponentMaskShiftLayerCbkFnType. This allows you to verity within your program that this is a correct callback.
+
+
+ shiftLayers
+
+
Returns a pointer to a defiComponentMaskShiftLayer. For more information, see defiComponentMaskShiftLayer.
+
+
+ data
+
+
Returns four bytes of user-defined data. User data is most often set to a pointer to the design data.
+
+
Retrieves data from the UNITS and VERSION statements of the DEF file. The format of the data returned is always the same, but the actual data represented varies depending on the calling routine.
+
For syntax information about the DEF UNITS and VERSION statements, see Units and Version in the LEF/DEF Language Reference.
+
Note: DEF version 5.1 and later always has a version number. Earlier versions of DEF will not have a version number.
+
+
+ int defrDoubleCbkFnType(- defrCallbackType_e
typ,- double* number,
- defiUserData* data)
+
+
+
+
+ typ
+
+
Returns a type that varies depending on the callback routine used. The following types can be returned.
+
+
+
+ number
+
+
Returns data that varies depending on the callback used. The following kinds of data can be returned.
+
+
+
+ data
+
+
Specifies four bytes of user-defined data. User data is set most often to a pointer to the design data.
+
+
The following example shows a callback routine with the type defrVersionCbkType.
+
+ int versionCB (defrCallbackType_e type,- double versionNum,
- defiUserData userData) {
- // Check if the type is correct
- if (type != defrVersionCbkType) {
- printf("Type is not defrVersionCbkType, terminate
- parsing.\n");
- return 1;
- }
+
+
+ // Write out the version number- printf("VERSION %g\n", versionNum);
- return 0;}
+
+
+
Retrieves data from the FILLS statement in the DEF file. Use the arguments defined in the defiFill class to retrieve the data. For syntax information about the DEF FILLS statement, see Fills in the LEF/DEF Language Reference.
+
+
+ int defrFillCbkFnType(- defrCallbackType_e
typ,- defiFill* fill,
- defiUserData* data)
+
+
+
+
+ typ
+
+
Returns the defrFillCbkFnType, which indicates that the fill callback was called.
+
+
+ fill
+
+
Returns a pointer to a defifill structure. For more information, see defiFill.
+
+
+ data
+
+
Specifies four bytes of user-defined data. User data is set most often to a pointer to the design data.
+
+
Retrieves data from the GCELLGRID statement in the DEF file. Use the arguments defined in the defiGcellGrid class to retrieve the data. For syntax information about the DEF GCELLGRID statement, see GCell Grid in the LEF/DEF Language Reference.
+
+
+ int defrGcellGridCbkFnType(- defrCallbackType_e
typ,- defiGcellGrid* grid,
- defiUserData* data)
+
+
+
+
+ typ
+
+
Returns the defrGcellGridCbkType, which indicates that the gcell grid callback was called.
+
+
+ grid
+
+
Returns a pointer to a defiGcellGrid structure. For more information, see defiGcellGrid.
+
+
+ data
+
+
Specifies four bytes of user-defined data. User data is set most often to a pointer to the design data.
+
+
Retrieves data from the GROUPS statement in the DEF file. Use the arguments defined in the defiGroup class to retrieve the data. For syntax information about the DEF GROUPS statement, see Groups in the LEF/DEF Language Reference.
+
+
+ int defrGroupCbkFnType(- defrCallbackType_e
typ, - defiGroup* group,
- defiUserData* data)
+
+
+
+
+ typ
+
+
Returns the defrGroupCbkType, which indicates that the group callback was called.
+
+
+ group
+
+
Returns a pointer to a defiGroup structure. For more information, see defiGroup.
+
+
+ data
+
+
Specifies four bytes of user-defined data. User data is set most often to a pointer to the design data.
+
+
Marks the beginning of sections of DEF statements. The format of the data returned is always the same, but the actual data represented varies depending on the calling routine.
+
+
+ int defrIntegerCbkFnType(- defrCallbackType_e
typ,- int number,
- defiUserData* data)
+
+
+
+
+ typ
+
+
Returns a type that varies depending on the callback routine used. The following types can be returned.
+
+
+
+ number
+
+
Returns data that varies depending on the callback used. The following kinds of data can be returned.
+
+
+
+ data
+
+
Specifies four bytes of user-defined data. User data is set most often to a pointer to the design data.
+
+
Retrieves data from the NETS and SPECIALNETS sections of the DEF file. Use the arguments defined in the defiNet class to retrieve the data.
+
For syntax information about the DEF NETS and SPECIALNETS statements, see Nets and Special Nets in the LEF/DEF Language Reference.
+
+
+ int defrNetCbkFnType(- defrCallbackType_e
typ,- defiNet* net,
- defiUserData* data)
+
+
+
+
+ typ
+
+
Returns a type that varies depending on the callback routine used. The following types can be returned.
+
+
+
+ net
+
+
Returns a pointer to a defiNet structure. For more information, see defiNet.
+
+
+ data
+
+
Specifies four bytes of user-defined data. User data is set most often to a pointer to the design data.
+
+
Retrieves data from the NONDEFAULTRULES statement in the DEF file. Use the arguments defined in the defiNonDefault class to retrieve the data. For syntax information about the DEF NONDEFAULTRULES statement, see "Nondefault Rules," in the LEF/DEF Language Reference.
+
+
+ int defrNonDefaultCbkFnType(- defrCallbackType_e
typ,- defiNonDefault* rule,
- defiUserData* data)
+
+
+
+
+ typ
+
+
Returns the defrNonDefaultCbkType type, which indicates that the nondefault rule callback was called.
+
+
+ rule
+
+
Returns a pointer to a defiNonDefault structure. For more information, see defiNonDefault.
+
+
+ data
+
+
Specifies four bytes of user-defined data. User data is set most often to a pointer to the design data.
+
+
Retrieves data from the regularWiring and specialWiring specifications in the NETS and SPECIALNETS statements of the DEF file. Use the arguments defined in the defiPath class to retrieve the data.
+
For syntax information about the DEF NETS and SPECIALNETS statements, see Nets and Special Nets in the LEF/DEF Language Reference.
+
+
+ int defrPathCbkFnType(- defrCallbackType_e
typ,- defiPath* path,
- defiUserData* data)
+
+
+
+
+ typ
+
+
Returns the defrPathCbkType type, which indicates that the path callback was called.
+
+
+ path
+
+
Returns a pointer to a defiPath structure. For more information, see defiPath.
+
+
+ data
+
+
Specifies four bytes of user-defined data. User data is set most often to a pointer to the design data.
+
+
Retrieves data from the PINS statement in the DEF file. Use the arguments defined in the defiPin class to retrieve the data. For syntax information about the DEF PINS statement, see Pins in the LEF/DEF Language Reference.
+
+
+ int defrPinCbkFnType(- defrCallbackType_e
typ,- defiPin* pin,
- defiUserData* data)
+
+
+
+
+ typ
+
+
Returns the defrPinCbkType type, which indicates that the Pin callback was called.
+
+
+ pin
+
+
Returns a pointer to a defiPin structure. For more information, see defiPin.
+
+
+ data
+
+
Specifies four bytes of user-defined data. User data is set most often to a pointer to the design data.
+
+
Retrieves data from the PINPROPERTIES statement in the DEF file. Use the arguments defined in the defiPinProp class to retrieve the data. For syntax information about the DEF PINPROPERTIES statement, see Pin Properties in the LEF/DEF Language Reference.
+
+
+ int defrPinPropCbkFnType(- defrCallbackType_e
typ,- defiPinProp* pp,
- defiUserData* data)
+
+
+
+
+ typ
+
+
Returns the defrPinPropCbkType type, which indicates that the pin property callback was called.
+
+
+ pp
+
+
Returns a pointer to a defiPinProp structure. For more information, see defiPinProp.
+
+
+ data
+
+
Specifies four bytes of user-defined data. User data is set most often to a pointer to the design data.
+
+
Retrieves data from the PROPERTYDEFINITIONS statement in the DEF file. Use the arguments defined in the defiProp class to retrieve the data. For syntax information about the DEF PROPERTYDEFINITIONS statement, see Property Definitions in the LEF/DEF Language Reference.
+
+
+ int defrPropCbkFnType(- defrCallbackType_e
typ,- defiProp* prop,
- defiUserData* data)
+
+
+
+
+ typ
+
+
Returns the defrPropCbkType type, which indicates that the property callback was called.
+
+
+ prop
+
+
Returns a pointer to a defiProp structure. For more information, see defiProp.
+
+
+ data
+
+
Specifies four bytes of user-defined data. User data is set most often to a pointer to the design data.
+
+
Retrieves data from the REGIONS statement in the DEF file. Use the arguments defined in the defiRegion class to retrieve the data. For syntax information about the DEF REGIONS statement, see Regions in the LEF/DEF Language Reference.
+
+
+ int defrRegionCbkFnType(- defrCallbackType_e
typ,- defiRegion* reg,defiUserData* data)
+
+
+
+
+ typ
+
+
Returns the defrRegionCbkType type, which indicates that the region callback was called.
+
+
+ reg
+
+
Returns a pointer to a defiRegion structure. For more information, see defiRegion.
+
+
+ data
+
+
Specifies four bytes of user-defined data. User data is set most often to a pointer to the design data.
+
+
Retrieves data from the ROWS statement in the DEF file. Use the arguments defined in the defiRow class to retrieve the data. For syntax information about the DEF ROWS statement, see Rows in the LEF/DEF Language Reference.
+
+
+ int defrRowCbkFnType(- defrCallbackType_e
typ,- defiRow* row,
- defiUserData* data)
+
+
+
+
+ typ
+
+
Returns the defrRowCbkType type, which indicates that the row callback was called.
+
+
+ row
+
+
Returns a pointer to a defiRow structure. For more information, see defiRow.
+
+
+ data
+
+
Specifies four bytes of user-defined data. User data is set most often to a pointer to the design data.
+
+
Retrieves data from the SCANCHAINS statement in the DEF file. Use the arguments defined in the defiScanchain class to retrieve the data. For syntax information about the DEF SCANCHAINS statement, see Scan Chains in the LEF/DEF Language Reference.
+
+
+ int defrScanchainCbkFnType(- defrCallbackType_e
typ,- defiScanchain* sc,
- defiUserData* data)
+
+
+
+
+ typ
+
+
Returns the defrScanchainCbkType type, which indicates that the scan chains callback was called.
+
+
+ sc
+
+
Returns a pointer to a defiScanchain structure. For more information, see defiScanchain.
+
+
+ data
+
+
Specifies four bytes of user-defined data. User data is set most often to a pointer to the design data.
+
+
Retrieves data from the SLOTS statement in the DEF file. Use the arguments defined in the defiSlot class to retrieve the data. For syntax information about the DEF SLOTS statement, see Slots in the LEF/DEF Language Reference.
+
+
+ int defrSlotCbkFnType(- defrCallbackType_e
typ,- defiSlot* slot,
- defiUserData* data)
+
+
+
+
+ typ
+
+
Returns the type, defrSlotCbkFnType, which indicates that the slot callback was called.
+
+
+ slot
+
+
Returns a pointer to a defiSlot structure. For more information, see defiSlot.
+
+
+ data
+
+
Specifies four bytes of user-defined data. User data is set most often to a pointer to the design data
+
+
Retrieves different kinds of LEF data. The format of the data returned is always the same, but the actual data represented varies depending on the calling routine.
+
+
+ int defrStringCbkFnType(- defrCallbackType_e
typ,- const char* string,
- defiUserData* data)
+
+
+
+
+ typ
+
+
Returns a type that varies depending on the callback routine used. The following types can be returned.
+
+
+
+ string
+
+
The data returned varies depending on the callback used.The following table shows the kinds of data returned.
+
+
+
+ data
+
+
Specifies four bytes of user-defined data. User data is set most often to a pointer to the design data.
+
+
Retrieves data from the STYLES statement in the DEF file. Use the arguments defined in the defiStyles class to retrieve the data. For syntax information about the DEF STYLES statement, see "Styles," in the LEF/DEF Language Reference.
+
+
+ defrStylesCbkFnType(- defCallbackType_e
typ,- defiStyles* style,
- defiUserData* data)
+
+
+
+
+ typ
+
+
Returns the defrStylesCbkType, which indicates that the style callback was called.
+
+
+ style
+
+
Returns a pointer to a defiStyles structure. For more information, see defiStyles.
+
+
+ data
+
+
Specifies four bytes of user-defined data. User data is set most often to a pointer to the design data.
+
+
Retrieves data from the TRACKS statement in the DEF file. Use the arguments defined in the defiTrack class to retrieve the data. For syntax information about the DEF TRACKS statement, see Tracks in the LEF/DEF Language Reference.
+
+
+ int defrTrackCbkFnType(- defrCallbackType_e
typ,- defiTrack* track,
- defiUserData* data)
+
+
+
+
+ typ
+
+
Returns the defrTrackCbkType, which indicates that the track callback was called.
+
+
+ sc
+
+
Returns a pointer to a defiTrack structure. For more information, see defiTrack.
+
+
+ data
+
+
Specifies four bytes of user-defined data. User data is set most often to a pointer to the design data.
+
+
Retrieves data from the VIAS statement in the DEF file. Use the arguments defined in the defiVia class to retrieve the data. For syntax information about the DEF VIAS statement, see Vias in the LEF/DEF Language Reference.
+
+
+ int defrViaCbkFnType(- defrCallbackType_e
typ,- defiVia* via,
- defiUserData* data)
+
+
+
+
+ typ
+
+
Returns the defrViaCbkType, which indicates that the via callback was called.
+
+
+ via
+
+
Returns a pointer to a defiVia structure. For more information, see defiVia.
+
+
+ data
+
+
Specifies four bytes of user-defined data. User data is set most often to a pointer to the design data.
+
+
Marks the end of DEF data sections. The format of the data returned is always the same, but the actual data represented varies depending on the calling routine.
+
+
+ int defrVoidCbkFnType(- defrCallbackType_e
typ,- void* variable,
- defiUserData* data)
+
+
+
+
+ typ
+
+
Returns a type that varies depending on the callback routine used. The following types can be returned.
+
+
+
+
+
+ DEF Data
+
+ |
+
+
+ Type Returned
+
+ |
+
+
+
+ Blockages, End
+ |
+
+ defrBlockageEndCbkType
+ |
+
+
+
+ Component, End
+ |
+
+ defrComponentEndCbkType
+ |
+
+
+
+ Design, End
+ |
+
+ defrDesignEndCbkType
+ |
+
+
+
+ Fills, End
+ |
+
+ defrFillEndCbkType
+ |
+
+
+
+ Groups, End
+ |
+
+ defrGroupsEndCbkType
+ |
+
+
+
+ Net, End
+ |
+
+ defrSNetEndCbkType
+ |
+
+
+
+ Nondefault Rules, End
+ |
+
+ defrNonDefaultEndCbkType
+ |
+
+
+
+ Pin Properties, End
+ |
+
+ defrPinPropEndCbkType
+ |
+
+
+
+ Pins, End
+ |
+
+ defrPinEndCbkType
+ |
+
+
+
+ Property Definitions, End
+ |
+
+ defrPropDefEndCbkType
+ |
+
+
+
+ Property Definitions, Start
+ |
+
+ defrPropDefStartCbkType
+ |
+
+
+
+ Region, End
+ |
+
+ defrRegionEndCbkType
+ |
+
+
+
+ Scan Chains, End
+ |
+
+ defrConstraintsEndCbkType
+ |
+
+
+
+ Slots, End
+ |
+
+ defrSlotEndCbkType
+ |
+
+
+
+ Special Nets, End
+ |
+
+ defrSNetEndCbkType
+ |
+
+
+
+ Styles, End
+ |
+
+ defrStylesEndCbkType
+ |
+
+
+
+ Via, End
+ |
+
+ defrViaEndCbkType
+ |
+
+
+
+
+ variable
+
+
Returns data that varies depending on the callback used. The following kinds of data can be returned. For all data types, the variable returns NULL.
+
+
+
+
+
+ DEF Data
+
+ |
+
+
+
+ Blockages, End
+ |
+
+
+ |
+
+
+
+ Component, End
+ |
+
+
+ |
+
+
+
+ Design, End
+ |
+
+
+ |
+
+
+
+ Fills, End
+ |
+
+
+ |
+
+
+
+ Groups, End
+ |
+
+
+ |
+
+
+
+ Net, End
+ |
+
+
+ |
+
+
+
+ Nondefault Rules, End
+ |
+
+
+ |
+
+
+
+ Pins, End
+ |
+
+
+ |
+
+
+
+ Pin Properties, End
+ |
+
+
+ |
+
+
+
+ Property Definitions, End
+ |
+
+
+ |
+
+
+
+ Property Definitions Start
+ |
+
+
+ |
+
+
+
+ Region, End
+ |
+
+
+ |
+
+
+
+ Scan Chains, End
+ |
+
+
+ |
+
+
+
+ Slots, End
+ |
+
+
+ |
+
+
+
+ Special Nets, End
+ |
+
+
+ |
+
+
+
+ Styles, End
+ |
+
+
+ |
+
+
+
+ Via, End
+ |
+
+
+ |
+
+
+
+
+ data
+
+
Specifies four bytes of user-defined data. User data is set most often to a pointer to the design data.
+
+
The following example shows a callback routine using the arguments for defrCallbackType_e, char*, and defiUserData.
+
+ int designCB (defrCallbackType_e type,- const char *designName,
- defiUserData userData) {
- // Incorrect type was passed in, expecting the type defrDesignStartCbk
- Type
- if (type != defrDesignStartCbkType) {
- printf("Type is not defrDesignStartCbkType,
- terminate parsing.\n");
- return 1;}
- // Expect a non null char* designName
- if (!designName || !*designName) {
- printf("Design name is null, terminate parsing.\n");
- return 1;}
- // Write out the design name
- printf("design name is %s\n", desginName);
- return 0;}
+
+
The following example shows a callback routine using the arguments for defrCallbackType_e, int, and defiUserData.
+
+ int viaStartCB (defrCallbackType_e c,- int numVias,
- defiUserData ud) {
- // Check if the type is correct
- if (type != defrViaStartCbkType) {
- printf("Type is not defrViaStartCbkType, terminate
- parsing.\n");
- return 1;}
- printf("VIA %d\n", numVias);
- return 0;}
+
+
The following example shows a callback routine using the arguments for defrCallbackType_e, defiVia, and defiUserData.
+
+ int viaCB (defrCallbackType_e type,- defiVia *viaInfo,
- defiUserData userData) {
- int i, xl, yl, xh, yh;
- char *name
- // Check if the type is correct
- if (type != defrViaCbkType) {
- printf("Type is not defrViaCbkType, terminate
- parsing.\n");
- return 1;}
- printf("VIA %s\n", viaInfo->name());
- if (viaInfo->hasPattern())
- printf(" PATTERNNAME %s\n", viaInfo->pattern());
- for (i = 0; i < viaInfo->numLayers(); i++) {
- viaInfo->layer(i, &name, &xl, &yl, &xh, &yh);
- printf(" RECT %s %d %d %d %d\n", name, xl, yl, xh, yh);}
- return 0;}
+
+
+
+
+ Return to top of page
+
+
+
+
+
+For support, see Cadence Online Support service.
+
+
+
+Copyright © 2016, Cadence Design Systems, Inc.
+
+
+
+All rights reserved.
+
+
+
+
diff --git a/lefdef/doc/defapi/ch4DEFclasses.html b/lefdef/doc/defapi/ch4DEFclasses.html
new file mode 100644
index 00000000..18ceeb05
--- /dev/null
+++ b/lefdef/doc/defapi/ch4DEFclasses.html
@@ -0,0 +1,841 @@
+
+
+
+
+ DEF 5.8 C/C++ Programming Interface -- 4
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ |
+
+
+
+
+ |
+
+
+ |
+
+
+
+ |
+
+
+ |
+
+
+ |
+
+
+
+
+ |
+
+
+ |
+
+
+ |
+
+
+ |
+
+
+ |
+
+
+
+
+
+
+
+
+
+ DEF 5.8 C/C++ Programming Interface (Open Licensing Program)
+
+
+
+
+
+
+
+
+
+
4
+
+
This chapter contains the following sections:
+
+
+
+
+
+
+
Every statement in the Cadence® Design Exchange Format (DEF) file is associated with a DEF reader class. When the DEF reader uses a callback, it passes a pointer to the appropriate class. You can use the member functions in each class to retrieve data defined in the DEF file.
+
+
This programming interface uses a callback style interface. You register for the constructs that interest you, and the reader calls your callback functions when one of those constructs is read. If you are not interested in a given set of information, you simply do not register the callback; the reader scans the information quickly and proceeds.
+
+
+
Many DEF objects contain repeating objects or specifications. The classes that correspond to these DEF objects contain an index and array of elements that let you retrieve the data iteratively.
+
You can use a for loop from 0 to the number of items specified in the index. In the loop, retrieve the data from the subsequent arrays. For example:
+
+
+ for(i=0; i< A->defiVia::numLayers(); i++) { - via -> defiVia::layer(i, &name, &x1, &y1, &xh, &yh);
- printf("+ RECT %s %d %d %d %d \n", name x1, y1, xh, yh);
+
+
+
The Cadence application programming interface (API) provides both C and C++ interfaces. The C API is generated from the C++ source, so there is no functional difference. The C API has been created in a pseudo object-oriented style. Examining a simple case should enable you to understand the API organization.
+
The following examples show the same objects in C and C++ syntax.
+
+
+ class defiVia {- const char* name() const;
- const char* pattern() const;
- int hasPattern() const;
- int numLayers() const;
- void layer(int index, char** layer, int* xl, int* yl,
- int* xh, int* yh) const;}
+
+
+
+ const char * defiVia)name- ( const defiVia * this );
+
+
+ const char * defiVia_hasPattern- ( const defiVia * this );
+
+
+ int defiVia_hasPattern- ( const defiVia * this );
+
+
+ int defiVia_numLayers- ( const defiVia * this );
+
+
+ void defiVia_layer- ( const defiVia * this,
- int index,
- char **layer,
- int *x1
- int *y1
- int *xh
- int *yh);
+
+
The C routine prototypes for the API functions can be found in the following files:
+
+
+
The following table lists the class routines that apply to the DEF information.
+
+
+
Retrieves data from the BLOCKAGES statement in the DEF file. For syntax information about the DEF BLOCKAGES statement, see "Blockages" in the LEF/DEF Language Reference.
+
+
+ class defiBlockage {- int hasLayer() const;
- int hasPlacement() const;
- int hasComponent() const;
- int hasSlots() const;
- int hasFills() const;
- int hasPushdown() const;
- int hasExceptpgnet() const;
- int hasSoft() const;
- int hasPartial() const;
- int hasSpacing() const;
- int hasDesignRuleWidth() const;
- int minSpacing() const;
- int designRuleWidth() const;
- double placementMaxDensity() const;
- const char* layerName() const;
- const char* layerComponentName() const;
- const char* placementComponentName() const;
- int numRectangles() const;
- int xl(int index) const;
- int yl(int index) const;
- int xh(int index) const;
- int yh(int index) const;
- int numPolygons() const;
- struct defiPoints getPolygon(int index) const;
- int hasMask() const;
- int mask() const;}
+
+
+
Retrieves data from the DIEAREA statement of the DEF file. For syntax information about the DEF DIEAREA statement, see "Die Area" in the LEF/DEF Language Reference.
+
+
+ class defiBox {- int xl() const;
- int yl() const;
- int xh() const;
- int yh() const;
- struct defiPoints getPoint() const;}
+
+
+
Retrieves data from the COMPONENTS statement in the DEF file. For syntax information about the DEF COMPONENTS statement, see "Components" in the LEF/DEF Language Reference.
+
+
+ class defiComponent {- const char* id() const;
- const char* name() const;
- int placementStatus() const;
- int isUnplaced() const;
- int isPlaced() const;
- int isFixed() const;
- int isCover() const;
- int placementX() const;
- int placementY() const;
- int placementOrient() const; // optional- For information,see
- //
"Orientation Codes" - const char* placementOrientStr() const;
- int hasRegionName() const;
- int hasRegionBounds() const;
- int hasEEQ() const;
- int hasGenerate() const;
- int hasSource() const;
- int hasWeight() const;
- int weight() const;
- int hasNets() const;
- int numNets() const;
- const char* net(int index) const;
- const char* regionName() const;
- const char* source() const;
- const char* EEQ() const;
- const char* generateName() const;
- const char* macroName() const;
- int hasHalo() const;
- int hasHaloSoft() const;
- int hasRouteHalo() const;
- int haloDist() const;
- const char* minLayer() const;
- const char* maxLayer() const;
- void haloEdges(int* left, int* bottom, int* right, int* top);
- void regionBounds(int* size, int** xl, int** yl, int** xh, int** yh);
- int hasForeignName() const;
- const char* foreignName() const;
- int foreignX() const;
- int foreignY() const;
- const char* foreignOri() const;
- int hasFori() const;
- int foreignOrient() const;
- int numProps() const;
- char* propName(int index) const;
- char* propValue(int index) const;
- double propNumber(int index) const;
- char propType(int index) const;
- int propIsNumber(int index) const;
- int propIsString (int index) const;
- int maskShiftSize();
- int maskShift(int index) const;}
+
+
+
The following example shows a callback routine with the type defrComponentCbkType. Callback routines for the type defrComponentStartCbkType and defrComponentEndCbkType are similar to the example for defrViaStartCbkType and defrViaEndCbkType in the Via section.
+
+ int componentCB (defrCallbackType_e type,- defiComponent* compInfo,
- defiUserData userData) {
- int i;
- // Check if the type is correct
- if ((type != defrComponentCbkType)) {
- printf("Type is not defrComponentCbkType terminate
- parsing.\n");
- return 1;
- }
- printf("%s %s ", compInfo->id(), compInfo->name());
- if (compInfo->hasNets()) {
- for (i = 0; i < compInfo->numNets(); i++)
- printf("%s ", compInfo->net(i));
- printf("\n");
- }
- if (compInfo->isFixed())
- printf(" FIXED %d %d %d\n", compInfo->placementX(),
- compInfo->placementY(),
- compInfo->placementOrient());
- if (compInfo->isCover())
- printf(" COVER %d %d %d\n", compInfo->placementX(),
- compInfo->placementY(),
- compInfo->placementOrient());
- if (compInfo->isPlaced())
- printf(fout," PLACED %d %d %d\n", compInfo->placementX(),
- compInfo->placementY(),
- compInfo->placementOrient());
- if (compInfo->hasSource())
- printf(" SOURCE %s\n", compInfo->source());
- if (compInfo->hasWeight())
- printf(" WEIGHT %d\n", compInfo->weight());
- if (compInfo->hasEEQ())
- printf(" EEQMASTER %s\n", compInfo->EEQ());
- if (compInfo->hasRegionName())
- printf(" REGION %s\n", compInfo->regionName());
- if (compInfo->hasRegionBounds()) {
- int *xl, *yl, *xh, *yh;
- int size;
- compInfo->regionBounds(&size, &xl, &yl, &xh, &yh);
for (i = 0; i < size; i++) {
printf(" REGION %d %d %d %d\n", xl[i], yl[i],
xh[i], yh[i]);
}
}
if (compInfo->hasForeignName()) {
printf(" FOREIGN %s %d %d %s\n", compInfo->foreignName(),
compInfo->foreignX(), compInfo->foreignY(),
compInfo->foreignOri());
}
// maskShiftArray[0] will always return the right most digit,since we // allow the leading 0 and also omit the leading 0's.
if (compInfo->maskShiftSize()) {
printf(" MASKSHIFT");
for (i = compInfo->maskShiftSize() -1; i >=0; i--) {
printf("%d ", compInfo->maskShift(i);
}
printf("\n");
}
return 0;
}
+
+
+
Retrieves data from the COMPONENTMASKSHIFT statement in the DEF file.
+
For syntax information about the DEF COMPONENTMASKSHIFT statement, see "Component Mask Shift" in the LEF/DEF Language Reference.
+
+
+ class defiComponentMaskShiftLayer {- public:
- defiComponentMaskShiftLayer();
- ~defiComponentMaskShiftLayer();
- void Init();
- void Destroy();
- void addMaskShiftLayer(const char* layer);
- int numMaskShiftLayers() const;
- void bumpLayers(int size);
- void clear();
- const char* maskShiftLayer(int index) const;};
+
+
+
Retrieves data from the FILLS statement in the DEF file. For syntax information about the DEF FILLS statement, see "Fills" in the LEF/DEF Language Reference.
+
+
+ class defiFill {- int hasLayer() const;
- const char* layerName() const;
- int hasLayerOpc() const;
- int numRectangles() const;
- int xl(int index) const;
- int yl(int index) const;
- int xh(int index) const;
- int yh(int index) const;
- int numPolygons() const;
- struct defiPoints getPolygon(int index) const;
- int hasVia() const;
- const char* viaName() const;
- int hasViaOpc() const;
- int numViaPts() const;
- struct defiPoints getViaPts(int index) const;
- void setMask(int colorMask);
- int layerMask() const
- int viaTopMask() const;
- int viaCutMask() const;
- int viaBottomMask() const;}
+
+
+
Retrieves data from the GCELLGRID statement in the DEF file. For syntax information about the DEF GCELLGRID statement, see "GCell Grid" in the LEF/DEF Language Reference.
+
+
+ class defiGcellGrid {- const char* macro() const;
- int x() const;
- int xNum() const;
- double xStep() const;}
+
+
+
The following example shows a callback routine with the type defrGcellGridCbkType, and the class defiGcellGrid.
+
+ int gcellCB (defrCallbackType_e type,- defiGcellGrid* gcellInfo,
- defiUserData userData) {
- int i;
- // Check if the type is correct
- if (type != defrGcellGridCbkType) {
- printf("Type is not defrGcellGridCbkType, terminate
- parsing.\n");
- return 1;
- }
- printf("GCELLGRID %s %d DO %d STEP %g\n", gcellInfo->macro(),
- gcellInfo->x(), gcellInfo->xNum(), gcellInfo->xStep());
- return 0;
- }
+
+
+
Retrieves geometry data from the BLOCKAGES, FILLS, NETS, and SLOTS statements of the DEF file. For syntax information, see "Blockages," "Fills," "Nets," and "Slots" in the LEF/DEF Language Reference.
+
+
+ class defiGeometries {- int numPoints() const;
- void points(int index, int* x, int* y);}
+
+
+
Retrieves data from the GROUPS statement in the DEF file. For syntax information about the DEF GROUPS statement, see "Groups" in the LEF/DEF Language Reference.
+
+
+ class defiGroup {- const char* name() const;
- const char* regionName() const;
- int hasRegionBox() const;
- int hasRegionName() const;
- int hasMaxX() const;
- int hasMaxY() const;
- int hasPerim() const;
- void regionRects(int* size, int** xl, int** yl, int** xh, int** yh);
- int maxX() const;
- int maxY() const;
- int perim() const;
- int numProps() const;
- const char* propName(int index) const;
- const char* propValue(int index) const;
- double propNumber(int index) const;
- const char propType(int index) const;
- int propIsNumber(int index) const;
- int propIsString(int index) const; }
+
+
+
The following example shows callback routines for the types defrGroupNameCbkType, defrGroupMemberCbkType, and defrGroupCbkType. Callback routines for the type defrGroupsStartCbkType and defrGroupsEndCbkType are similar to the example for defrViaStartCbkType and defrViaEndCbkType in the Via section.
+
+ int groupnameCB (defrCallbackType_e type,- const char* name,
- defiUserData userData) {
- // Check if the type is correct
- if ((type != defrGroupNameCbkType)) {
- printf("Type is not defrGroupNameCbkType terminate
- parsing.\n");
- return 1;
- }
- printf("Name is %s\n", name());
- return 0;
- }
+
+
+ int groupmemberCB (defrCallbackType_e type,- const char* name,
- defiUserData userData) {
- // Check if the type is correct
- if ((type != defrGroupMemberCbkType)) {
- printf("Type is not defrGroupMemberCbkType terminate
- parsing.\n");
- return 1;
- }
- printf(" %s\n", name());
- return 0;
- }
+
+
+ int groupCB (defrCallbackType_e type,- defiGroup grouInfo,
- defiUserData userData) {
- // Check if the type is correct
- if ((type != defrGroupCbkType)) {
- printf("Type is not defrGroupCbkType terminate
- parsing.\n");
- return 1;
- }
- if (group->hasMaxX() | group->hasMaxY() |
- group->hasPerim())
- {
- printf(" SOFT ");
- if (group->hasPerim())
- printf("MAXHALFPERIMETER %d ", group->perim());
- if (group->hasMaxX())
- printf("MAXX %d ", group->maxX());
- if (group->hasMaxY())
- printf("MAXY %d ", group->maxY());
- }
- if (group->hasRegionName())
- printf("REGION %s ", group->regionName());
- if (group->hasRegionBox()) {
- int *gxl, *gyl, *gxh, *gyh;
- int size;
- group->regionRects(&size, &gxl, &gyl, &gxh, &gyh);
- for (i = 0; i < size; i++)
- printf("REGION %d %d %d %d ", gxl[i], gyl[i], gxh[i],
- gyh[i]);
- }
- printf("\n");
- return 0;}
+
+
+
Retrieves data from the NETS statement in the DEF file. For syntax information about the DEF NETS statement, see "Nets" in the LEF/DEF Language Reference.
+
+
+ class defiNet {- const char* name() const;
- int weight() const;
- int numProps() const;
- const char* propName(int index) const;
- const char* propValue(int index) const;
- double propNumber(int index) const;
- const char propType(int index) const;
- int propIsNumber(int index) const;
- int propIsString(int index) const;
- int numConnections() const;
- const char* instance(int index) const;
- const char* pin(int index) const;
- int pinIsMustJoin(int index) const;
- int pinIsSynthesized(int index) const;
- int numSubnets() const;
defiSubnet* subnet(int index);- int isFixed() const;
- int isRouted() const;
- int isCover() const;
- int numWires() const;
- defiWire* wire(int index);
- int numVpins() const;
- defiVpin* vpin(int index) const;
- int hasProps() const;
- int hasWeight() const;
- int hasSubnets() const;
- int hasSource() const;
- int hasFixedbump() const;
- int hasFrequency() const;
- int hasPattern() const;
- int hasOriginal() const;
- int hasCap() const;
- int hasUse() const;
- int hasStyle() const;
- int hasNonDefaultRule() const;
- int hasVoltage() const;
- int hasSpacingRules() const;
- int hasWidthRules() const;
- int hasXTalk() const;
- int numSpacingRules() const;
- void spacingRule(int index, char** layer, double* dist,
- double* left, double* right);
- int numWidthRules() const;
- void widthRule(int index, char** layer, double* dist);
- double voltage() const;
- int XTalk() const;
- const char* source() const;
- double frequency() const;
- const char* original() const;
- const char* pattern() const;
- double cap() const;
- const char* use() const;
- int style() const;
- const char* nonDefaultRule() const;
- int numPaths() const;
defiPath* path(int index);
int numShields() const;
defiShield* shield(int index);
int numShieldNets() const;
const char* shieldNet(int index) const;
int numNoShields() const;
defiShield* noShield(int index);
int numPolygons() const;
const char* polygonName(int index) const;
struct defiPoints getPolygon(int index) const;
int numRectangles() const;
const char* rectName(int index) const;
int xl(int index) const;
int yl(int index) const;
int xh(int index) const;
int yh(int index) const;
int polyMask(int index) const;
int rectMask(int index) const;
int topMaskNum(int index) const;
int cutMaskNum(int index) const;
int bottomMask(int index) const;}
+
+
+
The following example shows a callback routine with the type defrSNetCbkType. Callback routines for the type defrSNetStartCbkType and defrSNetEndCbkType are similar to the example for defrViaStartCbkType and defrViaEndCbkType in the Via section. This example only shows how to retrieve part of the data from the defiNet class.
+
+ int snetCB (defrCallbackType_e type,- defiNet* snetInfo,
- defiUserData userData) {
- int i, x, y, newLayer;
- char* layerName;
- double dist, left, right;
- defiPath* p;
- int path;
- defiShield* shield;
- // Check if the type is correct
- if ((type != defrSNetCbkType)) {
- printf("Type is not defrSNetCbkType terminate
- parsing.\n");
- return 1;
- }
- // compName & pinName
- for (i = 0; i < net->numConnections(); i++)
- printf ("( %s %s )\n", net->instance(i), net->pin(i));
- // specialWiring
- if (net->isFixed()) {
- printf("FIXED\n");
- }
- if (net->numPaths()) {
- newLayer = 0;
- for (i = 0; i < net->numPaths(); i++) {
- p = net->path(i);
- p->initTraverse();
- while ((path = (int)p->next()) != DEFIPATH_DONE) {
- switch (path) {
- case DEFIPATH_LAYER:
- if (newLayer == 0) {
- printf("%s ", p->getLayer());
- newLayer = 1;
- } else
- printf("NEW %s ", p->getLayer());
- break;
+
+
+ case DEFIPATH_VIA:- printf("%s ", p->getVia());
- break;
+
+
+ case DEFIPATH_WIDTH:- printf("%d ", p->getWidth());
- break;
+
+
+ case DEFIPATH_POINT:- p->getPoint(&x, &y);
- printf("( %d %d ) ", x, y);
- break;
+
+
+ case DEFIPATH_TAPER:- printf("TAPER ");
- break;
+
+
+ case DEFIPATH_SHAPE:- printf(" SHAPE %s ", p->getShape());
- break;
- }
- }
- printf("\n");
- }
- }
- // SHIELD
- // testing the SHIELD for 5.3
- if (net->numShields()) {
- for (i = 0; i < net->numShields(); i++) {
- shield = net->shield(i);
- printf("\n+ SHIELD %s ",
- shield->defiShield::shieldName());
- newLayer = 0;
- for (j = 0; j < shield->defiShield::numPaths(); j++) {
- p = shield->defiShield::path(j);
- p->initTraverse();
- while ((path = (int)p->next()) != DEFIPATH_DONE) {
- switch (path) {
- case DEFIPATH_LAYER:
- if (newLayer == 0) {
- printf("%s ", p->getLayer());
- newLayer = 1;
- } else
- printf("NEW %s ", p->getLayer());
- break;
+
+
+ case DEFIPATH_VIA:- printf("%s ", p->getVia());
- break;
+
+
+ case DEFIPATH_WIDTH:- printf("%d ", p->getWidth());
- break;
+
+
+ case DEFIPATH_POINT:- p->getPoint(&x, &y);
- printf("( %d %d ) ", x, y);
- break;
+
+
+ case DEFIPATH_TAPER:- printf("TAPER ");
- break;
- }
- }
- printf("\n");
- }
- }
- }
- // layerName spacing
- if (net->hasSpacingRules()) {
- for (i = 0; i < net->numSpacingRules(); i++) {
- net->spacingRule(i, &layerName, &dist, &left, &right);
- if (left == right)
- printf("SPACING %s %g\n", layerName, dist);
- else
- printf("SPACING %s %g RANGE %g %g\n",
- layerName, dist, left, right);
- }
- }
- return 0;
- }
+
+
+
Retrieves data from the NONDEFAULTRULES statement in the DEF file. For syntax information about the DEF NONDEFAULTRULES statement, see "Nondefault Rules," in the LEF/DEF Language Reference.
+
+
+ class defiNonDefault {- const char* name() const;
- int hasHardspacing() const;
- int numProps() const;
- const char* propName(int index) const;
- const char* propValue(int index) const;
- double propNumber(int index) const;
- const char propType(int index) const;
- int propIsNumber(int index) const;
- int propIsString(int index) const;
- int numLayers() const;
- const char* layerName(int index) const;
- int hasLayerDiagWidth(int index) const;
- int hasLayerSpacing(int index) const;
- int hasLayerWireExt(int index) const;
- int numVias() const;
- const char* viaName(int index) const;
- int numViaRules() const;
- const char* viaRuleName(int index) const;
- int hasMinCuts() const;
- void minCuts(const char **cutLayerName, int *numCuts) const;}
+
+
+
Retrieves data from the ORDERED statement in the SCANCHAINS statement of the DEF file. For syntax information about the DEF SCANCHAINS statement, see "Scan Chains" in the
LEF/DEF Language Reference.
+
+
+ class defiOrdered {- int num() const;
- char** inst() const;
- char** in() const;
- char** out() const;
- int* bits() const; }
+
+
+
Retrieves data from the regularWiring and specialWiring specifications in the NETS and SPECIALNETS sections of the DEF file. For syntax information about the DEF SPECIALNETS and NETS statements, see "Special Nets" and "Nets" in the LEF/DEF Language Reference.
+
+
+ class defiPath {- void initTraverse();
- void initTraverseBackwards();
- int next();
- int prev();
- const char* getLayer(); .
- const char* getTaperRule();
- const char* getVia();
- const char* getShape();
- int getStyle();
- int getViaRotation();
- const char* getViaRotationStr();
- void getViaData(int* numX, int* numY, int* stepX, int* stepY);
- int getWidth();
- void getPoint(int* x, int* y);
- void getFlushPoint(int* x, int* y, int* ext);
- int getMask();
- int getViaTopMask();
- int getViaCutMask();
- int getViaBottomMask();
- int getRectMask();}
+
+
+
For a defiPath example, see the example in the defiNet section.
+
+
Retrieves data from the PINS statement in the DEF file. For syntax information about the DEF PINS statement, see "Pins" in the LEF/DEF Language Reference.
+
+
+ class defiPin {- const char* pinName() const;
- const char* netName() const;
- int hasDirection() const;
- int hasUse() const;
- int hasLayer() const;
- int hasPlacement() const;
- int isUnplaced() const;
- int isPlaced() const;
- int isCover() const;
- int isFixed() const;
- int placementX() const;
- int placementY() const;
- const char* direction() const;
- const char* use() const;
- int numLayer() const;
- const char* layer(int index) const;
- void bounds(int index, int* xl, int* yl, int* xh, int* yh) const;
- int hasLayerSpacing(int index) const;
- int hasLayerDesignRuleWidth(int index) const;
- int layerSpacing(int index) const;
- int layerDesignRuleWidth(int index) const;
- int numPolygons() const;
- const char* polygonName(int index) const;
- struct defiPoints getPolygon(int index) const;
- int hasPolygonSpacing(int index) const;
- int hasPolygonDesignRuleWidth(int index) const;
- int polygonSpacing(int index) const;
- int polygonDesignRuleWidth(int index) const;
- int hasNetExpr() const;
- int hasSupplySensitivity() const;
- int hasGroundSensitivity() const;
- const char* netExpr() const;
- const char* supplySensitivity() const;
- const char* groundSensitivity() const;
- int orient() const; // optional- For information, see
- //
"Orientation Codes" - const char* orientStr() const;
- int hasSpecial() const;
- int numVias() const;
- const char* viaName(int index) const;
- int viaPtX (int index) const;
- int viaPtY (int index) const;
- int hasAPinPartialMetalArea() const;
- int numAPinPartialMetalArea() const;
int APinPartialMetalArea(int index) const;
int hasAPinPartialMetalAreaLayer(int index) const;
const char* APinPartialMetalAreaLayer(int index) const;
int hasAPinPartialMetalSideArea() const;
int numAPinPartialMetalSideArea() const;
int APinPartialMetalSideArea(int index) const;
int hasAPin PartialMetalSideAreaLayer(int index) const;
const char* APinPartialMetalSideAreaLayer(int index) const;
int hasAPinDiffArea() const;
int numAPinDiffArea() const;
int APinDiffArea(int index) const;
int hasAPinDiffAreaLayer(int index) const;
const char* APinDiffAreaLayer(int index) const;
int hasAPinPartialCutArea() const;
int numAPinPartialCutArea() const;
int APinPartialCutArea(int index) const;
int hadAPinPartialCutAreaLayer(int index) const;
const char* APinPartialCutAreaLayer(int index) const;
int numAntennaModel() const;
defiPinAntennaModel* antennaModel(int index) const;
int hasPort() const;
int numPorts() const;
defiPinPort* pinPort(int index) const;
int layerMask(int index) const;
int polygonMask(int index) const;
int viaTopMask(int index) const;
int viaCutMask(int index) const;
int viaBottomMask(int index) const;}
+
+
+
The following example shows a callback routine with the type defrPinCbkType. Callback routines for the type defrStartPinsCbkType and defrPinEndCbkType are similar to the example for defrViaStartCbkType and defrViaEndCbkType in the Via section.
+
+ int pinCB (defrCallbackType_e type,- defiPin* pinInfo,
- defiUserData userData) {
- int i;
+
+
+ // Check if the type is correct- if ((type != defrPinCbkType)) {
- printf("Type is not defrPinCbkType terminate parsing.\n");
- return 1;
- }
- printf("%s NET %s\n", pinInfo->pinName(),
- pinInfo->netName());
- if (pinInfo->hasDirection())
- printf(" DIRECTION %s\n", pinInfo->direction());
- if (pinInfo->hasUse())
- printf(" USE %s\n", pinInfo->use());
- if (pinInfo->hasLayer()) {
- printf(" LAYER %s ", pinInfo->layer());
- pinInfo->bounds(&xl, &yl, &xh, &yh);
- printf("%d %d %d %d\n", xl, yl, xh, yh);
- }
- if (pinInfo->hasPlacement()) {
- if (pinInfo->isPlaced())
- printf(" PLACED\n");
- if (pinInfo->isCover())
- printf(" COVER\n");
- if (pinInfo->isFixed())
- printf(" FIXED\n");
- printf("( %d %d ) %d ", pinInfo->placementX(),
- pinInfo->placementY(),
- pinInfo->orient());
- }
- if (pinInfo->hasSpecial())
- printf(" SPECIAL\n");
- return 0;}
+
+
+
Retrieves antenna model information in the PINS statement in the DEF file. For syntax information about the DEF PINS statement, see "Pins" in the LEF/DEF Language Reference.
+
+
+ class defiPinAntennaModel {- char* antennaOxide() const;
- int hasAPinGateArea() const;
- int numAPinGateArea() const;
- int APinGateArea(int index) const;
- int hasAPinGateAreaLayer(int index) const;
- const char* APinGateAreaLayer(int index) const;
- int hasAPinMaxAreaCar() const;
- int numAPinMaxAreaCar() const;
- int APinMaxAreaCar(int index) const;
- int hasAPinMaxAreaCarLayer(int index) const;
- const char* APinMaxAreaCarLayer(int index) const;
- int hasAPinMaxSideAreaCar() const;
- int numAPinMaxSideAreaCar() const;
- int APinMaxSideAreaCar(int index) const;
- int hasAPinMaxSideAreaCarLayer(int index) const;
- const char* APinMaxSideAreaCarLayer(int index) const;
- int hasAPinMaxCutCar() const;
- int numAPinMaxCutCar() const;
- int APinMaxCutCar(int index) const;
- int hasAPinMaxCutCarLayer(int index) const;
- const char* APinMaxCutCarLayer(int index) const; }
+
+
+
Retrieves data from the PINS PORT statement in the DEF file. For syntax information about the DEF PINS PORT statement, see "Pins" in the LEF/DEF Language Reference.
+
+
+ class defiPinPort {- int numLayer() const;
- const char* layer(int index) const;
- int hasLayerSpacing(int index) const;
- int hasLayerDesignRuleWidth(int index) const;
- int layerSpacing(int index) const;
- int layerDesignRuleWidth(int index) const;
- int numPolygons() const;
- const char* polygonName(int index) const;
- struct defiPoints getPolygon(int index) const;
- int hasPolygonSpacing(int index) const;
- int hasPolygonDesignRuleWidth(int index) const;
- int polygonSpacing(int index) const;
- int polygonDesignRuleWidth(int index) const;
- int numVias() const;
- const char* viaName(int index) const;
- int viaPtX (int index) const;
- int viaPtY (int index) const;
- int hasPlacement() const;
- int isPlaced() const;
- int isCover() const;
- int isFixed() const;
- int placementX() const;
- int placementY() const;
- int orient() const;
- const char* orientStr() const;
- int layerMask(int index) const;
- int polygonMask(int index) const;
- int viaTopMask(int index) const;
- int viaCutMask(int index) const;
- int viaBottomMask(int index) const;};}
+
+
+
Retrieves data from the PINPROPERTIES statement in the DEF file. For syntax information about the DEF PINPROPERTIES statement, see "Pin Properties" in the LEF/DEF Language Reference.
+
+
+ class defiPinProp {- int isPin() const;
- const char* instName() const;
- const char* pinName() const;
- int numProps() const;
- const char* propName(int index) const;
- const char* propValue(int index) const;
- double propNumber(int index) const;
- const char propType(int index) const;
- int propIsNumber(int index) const;
- int propIsString(int index); }
+
+
+
The following example shows a callback routine with the type defrPinPropCbkType. Callback routines for the type defrPinPropStartCbkType and defrPinPropEndCbkType are similar to the example for defrViaStartCbkType and defrViaEndCbkType in the Via section.
+
+ int pinpropCB (defrCallbackType_e type,- defiPinProp* pinpropInfo,
- defiUserData userData) {
- int i;
- // Check if the type is correct
- if ((type != defrPinCbkType)) {
- printf("Type is not defrPinCbkType terminate parsing.\n");
- return 1;
- }
- if (pinpropInfo->isPin())
- printf("PIN %s\n", pinpropInfo->pinName());
- else
- printf("%s %s\n", pinpropInfo->instName(),
- pinpropInfo->pinName());
- if (pinpropInfo->numProps() > 0) {
- for (i = 0; i < pinpropInfo->numProps(); i++) {
- printf(" PROPERTY %s %s\n", pinpropInfo->propName(i),
- pinpropInfo->propValue(i));
- }
- }
- return 0;}
+
+
+
Retrieves a list of points for polygons in the DEF file.
+
+
+ struct defiPoints {- int numPoints;
- int* x;
- int* y;}
+
+
+
Retrieves data from the PROPERTYDEFINITIONS statement in the DEF file. For syntax information about the DEF PROPERTYDEFINITIONS statement, see "Property Definitions" in the LEF/DEF Language Reference.
+
The string of the property is returned by the C++ function string or the C function defiProp_string. A property can have a number and a range, which are returned by the function hasNumber and hasRange. The actual values are returned by the functions number, left, and right.
+
+
+ class defiProp {- const char* string() const;
- const char* propType() const;
- const char* propName() const;
- char dataType() const; // either I:integer, R:real, S:string,
- // Q:quotestring, or N:nameMapString
- int hasNumber() const;
- int hasRange() const;
- int hasString() const;
- int hasNameMapString() const;
- double number() const;
- double left() const;
- double right() const;}
+
+
+
The following example shows a callback routine with the type defrPropDefStartCbkType, and void *. This callback routine marks the beginning of the Property Definitions section.
+
+ int propDefStartCB (defrCallbackType_e type,- void* dummy,
- defiUserData userData) {
- // Check if the type is correct
- if (type != defrPropDefStartCbkType) {
- printf("Type is not defrPropDefStartCbkType,
- terminate parsing.\n");
- return 1;
- }
- printf("PROPERTYDEFINITIONS\n");
- return 0;}
+
+
The following example shows a callback routine with the type defrPropCbkType, and the class defiProp. This callback routine will be called for each defined property definition.
+
+ int propDefCB (defrCallbackType_e type,- defiProp* propInfo,
- defiUserData userData) {
- // Check if the type is correct
- if (type != defrPropCbkType) {
- printf("Type is not defrPropCbkType, terminate
- parsing.\n");
- return 1;
- }
- // Check the object type of the property definition
- if (strcmp(propInfo->propType(), "design") == 0)
- printf("DESIGN %s ", propInfo->propName());
- else if (strcmp(propInfo->propType(), "net") == 0)
- printf("NET %s ", propInfo->propName());
- else if (strcmp(propInfo->propType(), "component") == 0)
- printf("COMPONENT %s ", propInfo->propName());
- else if (strcmp(propInfo->propType(), "specialnet") == 0)
- printf("SPECIALNET %s ", propInfo->propName());
- else if (strcmp(propInfo->propType(), "group") == 0)
- printf("GROUP %s ", propInfo->propName());
- else if (strcmp(propInfo->propType(), "row") == 0)
- printf("ROW %s ", propInfo->propName());
- else if (strcmp(propInfo->propType(), "componentpin") == 0)
- printf("COMPONENTPIN %s ", propInfo->propName());
- else if (strcmp(propInfo->propType(), "region") == 0)
- printf("REGION %s ", propInfo->propName());
- if (propInfo->dataType() == 'I')
- printf("INTEGER ");
- if (propInfo->dataType() == 'R')
- printf("REAL ");
- if (propInfo->dataType() == 'S')
- printf("STRING ");
- if (propInfo->dataType() == 'Q')
- printf("STRING ");
- if (propInfo->hasRange()) {
printf("RANGE %g %g ", propInfo->left(),
propInfo->right());
}
if (propInfo->hasNumber())
printf("%g ", propInfo->number());
if (propInfo->hasString())
printf("'%s' ", propInfo->string());
printf("\n");
+
+
+ return 0;}
+
+
The following example shows a callback routine with the type defrPropDefEndCbkType, and void *. This callback routine marks the end of the Property Definitions section.
+
+ int propDefEndCB (defrCallbackType_e type,- void* dummy,
- defiUserData userData) {
- // Check if the type is correct
- if (type != defrPropDefEndCbkType) {
- printf("Type is not defrPropDefEndCbkType,
- terminate parsing.\n");
- return 1;
- }
+
+
+
Retrieves data from the REGIONS statement in the DEF file. For syntax information about the DEF REGIONS statement, see "Regions" in the LEF/DEF Language Reference.
+
+
+ class defiRegion {- const char* name() const;
- int numProps() const;
- const char* propName(int index) const;
- const char* propValue(int index) const;
- double propNumber(int index) const;
- const char propType(int index) const;
- int propIsNumber(int index) const;
- int propIsString(int index) const;
- int hasType() const;
- const char* type() const;
- int numRectangles() const;
- int xl(int index) const;
- int yl(int index) const;
- int xh(int index) const;
- int yh(int index) const;}
+
+
+
The following example shows a callback routine with the type defrRegionCbkType. Callback routines for the type defrRegionStartCbkType and defrRegionEndCbkType are similar to the example for defrViaStartCbkType and defrViaEndCbkType in the Via section.
+
+ int regionCB (defrCallbackType_e type,- defiRegion* regionInfo,
- defiUserData userData) {
- int i;
- char* name;
- // Check if the type is correct
- if ((type != defrRegionCbkType)) {
- printf("Type is not defrRegionCbkType terminate
- parsing.\n");
- return 1;
- }
- for (i = 0; i < regionInfo->numRectangles(); i++)
- printf("%d %d %d %d \n", regionInfo->xl(i),
- regionInfo->yl(i), regionInfo->xh(i),
- regionInfo->yh(i));
- return 0;}
+
+
+
Retrieves data from the ROW statement in the DEF file. For syntax information about the DEF ROW statement, see "Rows" in the LEF/DEF Language Reference.
+
+
+ class defiRow {- const char* name() const;
- const char* macro() const;
- double x() const;
- double y() const;
- int orient() const; // optional-For information,see
- //
"Orientation Codes" - const char* orientStr() const;
- int hasDo() const;
- double xNum() const;
- double yNum() const;
- int hasDoStep() const;
- double xStep() const;
- double yStep() const;
- int numProps() const;
- const char* propName(int index) const;
- const char* propValue(int index) const;
- double propNumber(int index) const;
- const char propType(int index) const;
- int propIsNumber(int index) const;
- int propIsString(int index) const;}
+
+
+
The following example shows a die area routine using a callback routine with the type defrDieAreaCbkType, and the class defiRow.
+
+ int diearea (defrCallbackType_e type,- defiRow* dieareaInfo,
- defiUserData userData) {
- // Check if the type is correct
- if (type != defrDieAreaCbkType) {
- printf("Type is not defrDieAreaCbkType, terminate
- parsing.\n");
- return 1;
- }
- printf("DIEAREA %d %d %d %d\n", diearea->xl(), diearea->yl(),
- diearea->xh(), diearea->yh());
- return 0;}
+
+
The following example shows a row routine using a callback routine with the type defrRowCbkType, and the class defiRow.
+
+ int rowCB (defrCallbackType_e type,- defiRow* rowInfo,
- defiUserData userData) {
- int i;
- // Check if the type is correct
- if (type != defrRowCbkType) {
- printf("Type is not defrRowCbkType, terminate
- parsing.\n");
- return 1;
- }
- printf("ROW %s %s %g %g %d ", rowInfo->name(),
- rowInfo->macro(), rowInfo->x(), rowInfo->y(),
- rowInfo->orient());
+
+
+ printf("DO %g BY %g STEP %g %g\n", rowInfo->xNum(), - rowInfo->yNum(),rowInfo->xStep(), row->yStep());
- if (rowInfo->numProps() > 0) {
- for (i = 0; i < rowInfo->numProps(); i++) {
- printf(" PROPERTY %s %s\n", rowInfo->propName(i),
- rowInfo->propValue(i));
- }
- }
- return 0;}
+
+
+
Retrieves data from the SCANCHAINS statement in the DEF file. For syntax information about the DEF SCANCHAINS statement, see "Scan Chains" in the LEF/DEF Language Reference.
+
+
+ class defiScanchain {- const char* name() const;
- int hasStart() const;
- int hasStop() const;
- int hasFloating() const;
- int hasOrdered() const;
- int hasCommonInPin() const;
- int hasCommonOutPin() const;
- int hasPartition() const;
- int hasPartitionMaxBits() const;
- void start(char** inst, char** pin) const;
- void stop(char** inst, char** pin) const;
- int numOrdered() const;
- void ordered(int index, int* size, char*** inst, char*** inPin,
- char*** outPin, int** bits) const;
- void floating(int* size, char*** inst, char*** inPin,
- char*** outPin, int** bits) const;
- const char* commonInPin() const;
- const char* commonOutPin() const;
- const char* partitionName() const;
- int partitionMaxBits(); }
+
+
+
The following example shows a callback routine with the type defrScanchainCbkType. Callback routines for the type defrScanchainsStartCbkType and defrScanchainsEndCbkType are similar to the example for defrViaStartCbkType and defrViaEndCbkType in the Via section.
+
+ int scanchainCB (defrCallbackType_e type,- defiScanchain* scanchainInfo,
- defiUserData userData) {
- // Check if the type is correct
- if ((type != defrScanchainCbkType)) {
- printf("Type is not defrScanchainCbkType
- terminate parsing.\n");
- return 1;
- }
- printf("%s\n", scanchainInfo->name());
- if (scanchainInfo->hasStart()) {
- scanchainInfo->start(&a1, &b1);
- printf(" START %s %s\n", a1, b1);
- }
- if (scanchainInfo->hasStop()) {
- scanchainInfo->stop(&a1, &b1);
- printf(" STOP %s %s\n", a1, b1);
- }
- if (scanchainInfo->hasCommonInPin() ||
- scanchainInfo->hasCommonOutPin()) {
- printf(" COMMONSCANPINS ");
- if (scanchainInfo->hasCommonInPin())
- printf(" ( IN %s ) ", scanchainInfo->commonInPin());
- if (scanchainInfo->hasCommonOutPin())
- printf(" ( OUT %s ) ",scanchainInfo->commonOutPin());
- printf("\n");
- }
- if (scanchainInfo->hasFloating()) {
- scanchainInfo->floating(&size, &inst, &inPin, &outPin);
- if (size > 0)
- printf(" + FLOATING\n");
- for (i = 0; i < size; i++) {
- printf(" %s ", inst[i]);
- if (inPin[i])
- printf("( IN %s ) ", inPin[i]);
- if (outPin[i])
- printf("( OUT %s ) ", outPin[i]);
- printf("\n");
- }
- printf("\n");
- }
- if (scanchainInfo->hasOrdered()) {
- for (i = 0; i < scanchainInfo->numOrderedLists(); i++) {
scanchainInfo->ordered(i, &size, &inst, &inPin,
&outPin);
if (size > 0)
printf(" + ORDERED\n");
for (i = 0; i < size; i++) {
printf(" %s ", inst[i]);
if (inPin[i])
printf("( IN %s ) ", inPin[i]);
if (outPin[i])
printf("( OUT %s ) ", outPin[i]);
printf("\n");
}
}
printf("\n");
}
return 0;}
+
+
+
Retrieves data from the SPECIALNETS statement in the DEF file. For syntax information about the DEF SPECIALNETS statement, see "Special Nets" in the LEF/DEF Language Reference.
+
+
+ class defiShield {- const char* shieldName() const;
- int numPaths() const;
defiPath* path(int index);}
+
+
+
For a defiShield example, see the example in the defiNet section.
+
+
Retrieves data from any obsolete SITE sections of the DEF file.
+
+
+ class defiSite {- double x_num() const;
- double y_num() const;
- double x_step() const;
- double y_step() const;
- double x_orig() const;
- double y_orig() const;
- int orient() const; // optional- For information, see
- //
"Orientation Codes" - const char* orientStr() const;
- const char* name() const;}
+
+
+
The following example shows a callback routine with the type defrCanplaceCbk and defrCannotOccupyCbk.
+
+ int siteCB (defrCallbackType_e type,- defiSite siteInfo,
- defiUserData userData) {
- // Check if the type is correct
- if ((type != defrCanplaceCbk) && (type !=
- defrCannotOccupyCbk)) {
- printf("Type is not defrCanplaceCbk and not
- defrCannotOccupyCbk,\n");
- printf("terminate parsing.\n");
- return 1;
- }
- printf("CANPLACE %s %g %g %s ", siteInfo->name(),
- siteInfo->x_orig(), siteInfo->y_orig(),
- orientStr(siteInfo->orient()));
- printf("DO %d BY %d STEP %g %g ;\n", siteInfo->x_num(),
- siteInfo->y_num(),
- siteInfo->x_step(), siteInfo->y_step());
- return 0;}
+
+
+
Retrieves data from the SLOTS statement in the DEF file. For syntax information about the DEF SLOTS statement, see "Slots" in the LEF/DEF Language Reference.
+
+
+ class defiSlot {- int hasLayer() const;
- const char* layerName() const;
- int numRectangles() const;
- int xl(int index) const;
- int yl(int index) const;
- int xh(int index) const;
- int yh(int index) const;
- int numPolygons() const;
- struct defiPoints getPolygon(int index) const;}
+
+
+
Retrieves data from the STYLES statement in the DEF file. For syntax information about the DEF STYLES statement, see "Styles," in the LEF/DEF Language Reference.
+
+
+ class defiStyles {- int style() const;
- struct defiPoints getPolygon() const;}
+
+
+
Retrieves data from the SUBNETS statement in the NETS statement in the DEF file. For syntax information about the DEF NETS statement, see "Nets" in the LEF/DEF Language Reference.
+
+
+ class defiSubnet {- const char* name() const;
- int numConnections();
- const char* instance(int index);
- const char* pin(int index);
- int pinIsSynthesized(int index);
- int pinIsMustJoin(int index);
- int isFixed() const;
- int isRouted() const;
- int isCover() const;
- int hasNonDefaultRule() const;
- int hasShield() const;
- int hasShieldNet() const;
- int hasNoShieldNet() const;
- int numPaths() const;
defiPath* path(int index);- const char* nonDefaultRule() const;
- int numWires() const;
- defiWire* wire(int index);}
+
+
+
Retrieves data from the TRACKS statement in the DEF file. For syntax information about the DEF TRACKS statement, see "Tracks" in the LEF/DEF Language Reference.
+
+
+ class defiTrack {- const char* macro() const;
- double x() const;
- double xNum() const;
- double xStep() const;
- int numLayers() const;
- const char* layer(int index) const;
- int firstTrackMask() const;
- int sameMask() const;}
+
+
+
The following example shows a callback routine with the type defrTrackCbkType, and the class defiTrack.
+
+ int trackCB (defrCallbackType_e type,- defiTrack* trackInfo,
- defiUserData userData) {
- int i;
- // Check if the type is correct
- if (type != defrTrackCbkType) {
- printf("Type is not defrTrackCbkType, terminate
- parsing.\n");
- return 1;
- }
- printf("TRACKS %s %g DO %g STEP %g LAYER ",
- trackInfo->macro(),
- trackInfo->x(), trackInfo->xNum(), trackInfo->xStep());
- for (i = 0; i < trackInfo->numLayers(); i++)
- printf("%s ", trackInfo->layer(i));
- printf("\n");
- return 0;}
+
+
+
Retrieves data from the VIAS statement in the DEF file. For syntax information about the DEF VIAS statement, see "Vias" in the LEF/DEF Language Reference.
+
+
+ class defiVia {- const char* name() const;
- const char* pattern() const;
- int hasPattern() const;
- int numLayers() const;
- void layer(int index, char** layer, int* xl, int* yl,
- int* xh, int* yh) const;
- int numPolygons() const;
- const char* polygonName(int index) const;
- struct defiPoints getPolygon(int index) const:
- int hasViaRule() const;
- void viaRule(char** viaRuleName, int* xSize, int* ySize,
- char** botLayer, char** cutLayer, char** topLayer,
- int* xCutSpacing, int* yCutSpacing, int* xBotEnc, int* yBotEnc,
- int* xTopEnc, int* yTopEnc) const;
- int hasRowCol() const;
- void rowCol(int* numCutRows, int* numCutCols) const;
- int hasOrigin() const;
- void origin(int* xOffset, int* yOffset) const;
- int hasOffset() const;
- void offset(int* xBotOffset, int* yBotOffset, int* xTopOffset
- int* yTopOffset) const;
- int hasCutPattern() const;
- const char* cutPattern() const;
- int rectMask(int index) const;
- int polyMask(int index) const; }
+
+
+
The following example shows a callback routine with the type defrViaStartCbkType.
+
+ int viaStartCB (defrCallbackType_e type,- int numVias,
- defiUserData userData) {
- // Check if the type is correct
- if ((type != defrViaStartCbkType)) {
- printf("Type is not defrViaStartCbkType terminate
- parsing.\n");
- return 1;
- }
- printf("VIAS %d\n", numVias);
- return 0;}
+
+
The following example shows a callback routine with the type defrViaCbkType.
+
+ int viaCB (defrCallbackType_e type,- defiVia* viaInfo,
- defiUserData userData) {
- int i, xl, yl, xh, yh;
- char* name;
- // Check if the type is correct
- if ((type != defrViaCbkType)) {
- printf("Type is not defrViaCbkType terminate parsing.\n");
- return 1;
- }
- printf("Via name is %s ", viaInfo->name());
- if (viaInfo->hasPattern())
- printf(" PATTERNNAME %s\n", viaInfo->pattern());
- for (i = 0; i < viaInfo->numLayers(); i++) {
- viaInfo->layer(i, &name, &xl, &yl, &xh, &yh);
- printf(" RECT %s %d %d %d %d \n", name, xl, yl, xh, yh);
- }
+
+
+ return 0;}
+
+
The following example shows a callback routine with the type defrViaEndCbkType.
+
+ int viaEndCB (defrCallbackType_e type,- void* ptr,
- defiUserData userData) {
- // Check if the type is correct
- if ((type != defrViaEndCbkType)) {
- printf("Type is not defrViaEndCbkType terminate
- parsing.\n");
- return 1;
- }
+
+
+ printf("END VIAS\n");- return 0;}
+
+
+
Retrieves via array data from the SPECIALNETS statement in the DEF file. For syntax information about the DEF SPECIALNETS statement, see "Special Nets" in the LEF/DEF Language Reference.
+
+
+ struct defiViaData {- int numX;
- int numY;
- int stepX;
- int stepY;}
+
+
+
Retrieves data from the VPIN statement in the NETS statement in the DEF file. For syntax information about the DEF NETS statement, see "Nets" and in the LEF/DEF Language Reference.
+
+
+ class defiVpin {- int xl() const;
- int yl() const;
- int xh() const;
- int yh() const;
- char status() const;
- int orient() const;
- const char* orientStr() const;
- int xLoc() const;
- int yLoc() const;
- const char* name() const;
- const char* layer() const;}
+
+
+
Retrieves data from the regularWiring or specialWiring section of the NETS or SPECIALNETS statements in the DEF file. For syntax information about the DEF NETS and SPECIALNETS statements, see "Nets" and "Special Nets" in the LEF/DEF Language Reference.
+
+
+ class defiWire {- const char* wireType() const;
- const char* wireShieldNetName() const;
- int numPaths() const;
defiPath* path(int index);}
+
+
+
+
+ Return to top of page
+
+
+
+
+
+For support, see Cadence Online Support service.
+
+
+
+Copyright © 2016, Cadence Design Systems, Inc.
+
+
+
+All rights reserved.
+
+
+
+
diff --git a/lefdef/doc/defapi/ch5DEFwritercallback.html b/lefdef/doc/defapi/ch5DEFwritercallback.html
new file mode 100644
index 00000000..2a43f511
--- /dev/null
+++ b/lefdef/doc/defapi/ch5DEFwritercallback.html
@@ -0,0 +1,737 @@
+
+
+
+
+ DEF 5.8 C/C++ Programming Interface -- 5
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ |
+
+
+
+
+ |
+
+
+ |
+
+
+
+ |
+
+
+ |
+
+
+ |
+
+
+
+
+ |
+
+
+ |
+
+
+ |
+
+
+ |
+
+
+ |
+
+
+
+
+
+
+
+
+
+ DEF 5.8 C/C++ Programming Interface (Open Licensing Program)
+
+
+
+
+
+
+
+
+
+
+ Return to top of page
+
+
+
+
+
+For support, see Cadence Online Support service.
+
+
+
+Copyright © 2016, Cadence Design Systems, Inc.
+
+
+
+All rights reserved.
+
+
+
+
diff --git a/lefdef/doc/defapi/ch6DEFwriter.html b/lefdef/doc/defapi/ch6DEFwriter.html
new file mode 100644
index 00000000..6065700c
--- /dev/null
+++ b/lefdef/doc/defapi/ch6DEFwriter.html
@@ -0,0 +1,5572 @@
+
+
+
+
+ DEF 5.8 C/C++ Programming Interface -- 6
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ |
+
+
+
+
+ |
+
+
+ |
+
+
+
+ |
+
+
+ |
+
+
+ |
+
+
+
+
+ |
+
+
+ |
+
+
+ |
+
+
+ |
+
+
+ |
+
+
+
+
+
+
+
+
+
+ DEF 5.8 C/C++ Programming Interface (Open Licensing Program)
+
+
+
+
+
+
+
+
+
+
6
+
+
You can use the Cadence® Design Exchange Format (DEF) writer routines to create a program that outputs a DEF file. The DEF writer routines correspond to the sections of the DEF file. This chapter describes the routines listed below that you need to write a particular DEF section.
+
+
+
The DEF writer setup and control routines initialize the reader and set global variables that are used by the DEF file. You must begin a DEF file with either the defwInit routine or the defwInitCbk routine. You must end a DEF file with the defwEnd routine. All other routines must be used between these routines. The remaining routines described in this section are provided as utilities.
+
For an example on how to set up the writer, see "Setup Examples".
+
All routines return 0 if successful.
+
+
Initializes the DEF writer. Use this routine if you do not want to use the callback mechanism.
+
+
+ int defwInit (- FILE*
file,- int vers1,
- int vers2,
- const char* caseSensitive,
- const char* dividerChar,
- const char* busBitChars,
- const char* designName,
- const char* technology,
- const char* array,
- const char* floorplan,
- double units)
+
+
+
+
+ file
+
+
Specifies the name of the DEF file to create.
+
+
+ vers1, vers2
+
+
Specifies which version of LEF/DEF is being used. vers1 specifies the major number. vers2 specifies the minor number.
+
+
+ caseSensitive
+
+
Note: The NAMECASESENSITIVE statement is obsolete; therefore the writer ignores this argument.
+
+
+ dividerChar
+
+
Writes the DIVIDERCHAR statement that specifies the character used to express hierarchy when DEF names are mapped to or from other databases. The character must be enclosed in double quotation marks.
+
+
+ busBitChars
+
+
Writes the BUSBITCHARS statement that specifies the pair of characters used to specify bus bits when DEF names are mapped to or from other databases. The characters must be enclosed in double quotation marks.
+
+
+ designName
+
+
Writes the DESIGN statement that specifies a name for the design.
+
+
+ technology
+
+
Writes the TECHNOLOGY statement that specifies a technology name for the design.
+
+
+ units
+
+
Writes the UNITS statement that specifies how to convert DEF units.
+
+
Also initializes the DEF writer. Use this routine if you want to use the callback mechanism. If you use this routine, you must also use the following routines:
+
+
+
+
+
If you do not include these routines, default values are used.
+
+
+ int defwInit(- FILE* file);
+
+
+
+
+ file
+
+
Specifies the name of the DEF file to create.
+
+
Ends the DEF file. This routine is required and must be used last.
+
+
+ int defwEnd(void)
+
+
+
Returns the line number of the last line written to the DEF file. This routine does not require any arguments.
+
+
+ int defwCurrentLineNumber(void)
+
+
+
Writes a blank line. This routine does not require any arguments.
+
+
+ int defwNewLine()
+
+
+
Allows you to enter any comment into the DEF file. This statement automatically adds a pound symbol (#) to the beginning of the comment statement.
+
+
+ int defwAddComment(- const char*
comment)
+
+
+
Automatically indents a statement by adding three blank spaces to the beginning of the statement. This routine does not require any arguments.
+
+
+ int defwAddIndent()
+
+
+
Prints the return status of the defw* routines.
+
+
+ void defwPrintError(- int
status)
+
+
+
+
+ status
+
+
Specifies the nonzero integer returned by the DEF writer routines.
+
+
The following examples show how to set up the writer. There are two ways to use the DEF writer:
+
+
+
This manual includes examples with and without callback routines.
+
The following example uses the writer without callbacks.
+
+ int setupRoutine() {- FILE* f;
- int res;
+
+
+ ...- // Open the def file for the writer to write
- if ((f = fopen("defOutputFileName","w")) == 0) {
- printf("Couldn't open output file '%s'\n",
- "defOutputFileName");
- return(2);
- }
+
+
+ // Initialize the writer. This routine has to call first.- // Call this routine instead of defwInitCbk(f)
- // if you are not using callback routines.
- res = defwInit(f);
- ...
+
+
+ res = defwEnd();- ...
+
+
+ fclose(f);- return 0;
- }
+
+
The following example uses the writer with callbacks.
+
+ int setupRoutine() {- FILE* f;
- int res;
- int userData = 0x01020304;
+
+
+ ...- // Open the def file for the writer to write
- if ((f = fopen("defOutputFileName","w")) == 0) {
- printf("Couldn't open output file '%s'\n",
- "defOutputFileName");
- return(2);
- }
+
+
+ // Initialize the writer. This routine has to call first.- // Call this routine instead of defwInit() if you are
- // using the writer with callbacks.
- res = defwInitCbk(f);
- ...
+
+
+ res = defwEncrypt(); // Set flag to write in encrypted format- ...
+
+
+ // Set the user callback routines- defwSetArrayCbk (arrayCB);
- defwSetBusBitCbk (busbitCB);
- defwSetCaseSensitiveCbk (casesensitiveCB);
- defwSetComponentCbk (componentCB);
- defwSetConstraintCbk (constraintCB);
- defwSetDefaultCapCbk (defaultCapCB);
- defwSetDesignCbk (designCB);
- defwSetDesignEndCbk (designendCB);
- ...
+
+
+ // Invoke the parser- res = defwWrite(f, "defInputFileName", (void*)userData);
- if (res != 0) {
- printf("DEF writer returns an error\n");
- return(2);
- }
+
+
+ res = defwCloseEncrypt(); // Clean up the encrypted buffer- ...
+
+
+ fclose(f);- return 0;
- }
+
+
The following example shows the callback routine to mark the end of the DEF design. The type is defwDesignEndCbkType.
+
+ #define CHECK_RES(res) \- if (res) { \
- defwPrintError(res); \
- return(res); \
- }
+
+
+ int designendCB (defwCallbackType_e type,- defiUserData userData) {
- int res;
+
+
+ // Check if the type is correct- if (type != defwDesignEndCbkType) {
- printf("Type is not defwDesignEndCbkType, terminate
- writing.\n");
- return 1;
- }
- res = defwEnd();
- CHECK_RES(res);
- return 0;
- }
+
+
+
Blockages routines write a DEF BLOCKAGES statement. The BLOCKAGES statement is optional and can be used only once in a DEF file. For syntax information about the DEF BLOCKAGES statement, see "Blockages" in the LEF/DEF Language Reference.
+
A BLOCKAGES statement must start and end with the defwStartBlockages and defwEndBlockages routines. All blockages must be defined between these routines.
+
+
Starts a BLOCKAGES statement.
+
+
+ int defwStartBlockages(- int
count)
+
+
+
+
+ count
+
+
Specifies the number of blockages defined in the BLOCKAGES statement.
+
+
Ends the BLOCKAGES statement.
+
+
+ int defwEndBlockages()
+
+
+
Writes a DESIGNRULEWIDTH statement for the blockage. Either a SPACING or a DESIGNRULEWIDTH statement can be specified for a routing blockage. The DESIGNRULEWIDTH statement is optional and can be used only once for each routing blockage in the BLOCKAGES statement.
+
Note: This function will become obsolete in the next parser release. Use defwBlockagesLayerDesignRuleWidth instead.
+
+
+ defwBlockageDesignRuleWidth( - int
effectiveWidth)
+
+
+
+
+ effectiveWidth
+
+
Specifies that the blockages have a width of effectiveWidth for the purposes of spacing calculations.
+
+
Writes a DESIGNRULEWIDTH statement for the blockage. Either a SPACING or a DESIGNRULEWIDTH statement can be specified for a routing blockage. The DESIGNRULEWIDTH statement is optional and can be used only once for each routing blockage in the BLOCKAGES statement.
+
+
+ defwBlockagesLayerDesignRuleWidth( - int
effectiveWidth)
+
+
+
+
+ effectiveWidth
+
+
Specifies that the blockages have a width of effectiveWidth for the purposes of spacing calculations.
+
+
Writes a LAYER statement that defines a routing blockage. When the compName argument is specified, writes a LAYER COMPONENT statement that defines a routing blockage that is associated with a component. Either a LAYER, LAYER COMPONENT, FILLS, SLOTS, or PUSHDOWN statement can be specified for each routing blockage in the BLOCKAGES statement. The LAYER and LAYER COMPONENT statements are optional and each can be used only once for each routing blockage in the BLOCKAGES statement.
+
Note: This function will become obsolete in the next parser release. Use defwBlockagesLayer and/or defwBlockagesLayerComponent instead.
+
+
+ int defwBlockageLayer(- const char*
layerName,- const char* compName)
+
+
+
+
+ layerName
+
+
Specifies the layer on which to create the routing blockage.
+
+
+ compName
+
+
Optional argument that specifies a component with which to associate the blockage. Specify NULL to ignore this argument.
+
+
Writes a LAYER statement that defines a routing blockage. Any one of the LAYER, LAYER COMPONENT, FILLS, SLOTS, or PUSHDOWN statements can be specified for each routing blockage in the BLOCKAGES statement. The LAYER statement is optional and can be used only once for each routing blockage in the BLOCKAGES statement.
+
+
+ int defwBlockagesLayer(- const char*
layerName)
+
+
+
+
+ layerName
+
+
Specifies the layer on which to create the routing blockage.
+
+
Writes a LAYER COMPONENT statement that defines a routing blockage that is associated with a component. Any one of the LAYER, LAYER COMPONENT, FILLS, SLOTS, or PUSHDOWN statements can be specified for each routing blockage in the BLOCKAGES statement. The LAYER COMPONENT statement is optional and can be used only once for each routing blockage in the BLOCKAGES statement.
+
+
+ int defwBlockagesLayerComponent(- const char*
compName)
+
+
+
+
+ compName
+
+
Specifies a component with which to associate the blockage.
+
+
Writes an EXCEPTPGNET statement for a routing blockage on the given layer, which specifies that the blockage only blocks signal net routing and does not block power or ground net routing. Either a COMPONENT, SLOTS, FILLS, PUSHDOWN, or EXCEPTPGNET statement can be specified for each routing blockage in the BLOCKAGES statement. The EXCEPTPGNET statement is optional and can be used only once for each routing blockage in the BLOCKAGES statement.
+
Note: This function will become obsolete in the next parser release. Use defwBlockagesLayerExceptpgnet instead.
+
+
+ int defwBlockageLayerExceptpgnet(- const char*
layerName)
+
+
+
+
+ layerName
+
+
Specifies the layer on which to create the routing blockage.
+
+
Writes an EXCEPTPGNET statement for a routing blockage on the given layer, which specifies that the blockage only blocks signal net routing and does not block power or ground net routing. Any one of the COMPONENT, SLOTS, FILLS, PUSHDOWN, or EXCEPTPGNET statements can be specified for each routing blockage in the BLOCKAGES statement. The EXCEPTPGNET statement is optional and can be used only once for each routing blockage in the BLOCKAGES statement.
+
+
+ int defwBlockagesLayerExceptpgnet(- const char*
layerName)
+
+
+
+
+ layerName
+
+
Specifies the layer on which to create the routing blockage.
+
+
Writes a FILLS statement, which defines a routing blockage on the specified layer where metal fills cannot be placed. Either a LAYER, LAYER COMPONENT, FILLS, SLOTS, PUSHDOWN, or EXCEPTPGNET statement can be specified for each routing blockage in the BLOCKAGES statement. The FILLS statement is optional and can be used only once for each routing blockage in the BLOCKAGES statement.
+
Note: This function will become obsolete in the next parser release. Use defwBlockagesLayerFills instead.
+
+
+ int defwBlockageLayerFills(- const char*
layerName)
+
+
+
+
+ layerName
+
+
Specifies the layer on which to create the blockage.
+
+
Writes a FILLS statement, which defines a routing blockage where metal fills cannot be placed. Any one of the LAYER, LAYER COMPONENT, FILLS, SLOTS, PUSHDOWN, or EXCEPTPGNET statements can be specified for each routing blockage in the BLOCKAGES statement. The FILLS statement is optional and can be used only once for each routing blockage in the BLOCKAGES statement.
+
+
+ int defwBlockagesLayerFills()
+
+
+
Writes a LAYER PUSHDOWN statement, which defines the routing blockage as being pushed down into the block from the top level of the design. Either a LAYER, LAYER COMPONENT, FILLS, SLOTS, PUSHDOWN, or EXCEPTPGNET statement can be specified for each routing blockage in the BLOCKAGES statement. The LAYER PUSHDOWN statement is optional and can be used only once for each routing blockage in the BLOCKAGES statement.
+
Note: This function will become obsolete in the next parser release. Use defwBlockagesLayerPushdown instead.
+
+
+ int defwBlockageLayerPushdown(- const char*
layerName)
+
+
+
+
+ layerName
+
+
Specifies the layer on which the blockage lies.
+
+
Writes a LAYER PUSHDOWN statement, which defines the routing blockage as being pushed down into the block from the top level of the design. Any one of the LAYER, LAYER COMPONENT, FILLS, SLOTS, PUSHDOWN, or EXCEPTPGNET statements can be specified for each routing blockage in the BLOCKAGES statement. The LAYER PUSHDOWN statement is optional and can be used only once for each routing blockage in the BLOCKAGES statement.
+
+
+ int defwBlockagesLayerPushdown(- const char*
layerName)
+
+
+
+
+ layerName
+
+
Specifies the layer on which the blockage lies.
+
+
Writes a SLOTS statement, which defines a routing blockage where slots cannot be placed. Either a LAYER, LAYER COMPONENT, FILLS, SLOTS, PUSHDOWN, or EXCEPTPGNET statement can be specified for each routing blockage in the BLOCKAGES statement. The SLOTS statement is optional and can be used only once for each routing blockage in the BLOCKAGES statement.
+
+
+ int defwBlockageLayerSlots(- const char*
layerName)
+
+
+
+
+ layerName
+
+
Specifies the layer on which to create the blockage.
+
+
Writes a PLACEMENT statement, which defines a placement blockage. Either a PLACEMENT, PLACEMENT COMPONENT, PLACEMENT PUSHDOWN, PLACEMENT PARTIAL, or PLACEMENT SOFT statement can be specified for each placement blockage in the BLOCKAGES statement. The PLACEMENT statement is optional and can be used only once for each placement blockage in the BLOCKAGES statement.
+
Note: This function will become obsolete in the next parser release. Use defwBlockagesPlacement instead.
+
+
+ defwBlockagePlacement()
+
+
+
Writes a PLACEMENT statement, which defines a placement blockage. Any one of the PLACEMENT, PLACEMENT COMPONENT, PLACEMENT PUSHDOWN, PLACEMENT PARTIAL, or PLACEMENT SOFT statements can be specified for each placement blockage in the BLOCKAGES statement. The PLACEMENT statement is optional and can be used only once for each placement blockage in the BLOCKAGES statement.
+
+
+ defwBlockagesPlacement()
+
+
+
Writes a PLACEMENT COMPONENT statement, which defines a placement blockage associated with a component. Either a PLACEMENT, PLACEMENT COMPONENT, PLACEMENT PUSHDOWN, PLACEMENT PARTIAL, or PLACEMENT SOFT statement can be specified for each placement blockage in the BLOCKAGES statement. The PLACEMENT COMPONENT statement is optional and can be used only once for each placement blockage in the BLOCKAGES statement.
+
Note: This function will become obsolete in the next parser release. Use defwBlockagesPlacementComponent instead.
+
+
+ int defwBlockagePlacementComponent(- const char*
compName)
+
+
+
+
+ compName
+
+
Specifies the component with which to associate the blockage.
+
+
Writes a PLACEMENT COMPONENT statement, which defines a placement blockage associated with a component. Any one of the PLACEMENT, PLACEMENT COMPONENT, PLACEMENT PUSHDOWN, PLACEMENT PARTIAL, or PLACEMENT SOFT statements can be specified for each placement blockage in the BLOCKAGES statement. The PLACEMENT COMPONENT statement is optional and can be used only once for each placement blockage in the BLOCKAGES statement.
+
+
+ int defwBlockagesPlacementComponent(- const char*
compName)
+
+
+
+
+ compName
+
+
Specifies the component with which to associate the blockage.
+
+
Writes a PLACEMENT PARTIAL statement, which specifies that the initial placement should not use more than maxDensity percentage of the blockage area for standard cells. Either a PLACEMENT, PLACEMENT PARTIAL, PLACEMENT COMPONENT, PLACEMENT SOFT, or PLACEMENT PUSHDOWN statement can be specified for each placement blockage. The PLACEMENT PARTIAL statement is optional and can be used only once for each placement blockage in the BLOCKAGES statement.
+
Note: This function will become obsolete in the next parser release. Use defwBlockagesPlacementPartial instead.
+
+
+ int defwBlockagePlacementPartial(- double
maxDensity)
+
+
+
+
+ maxDensity
+
+
Specifies the maximum density value. The initial placement will not use more than maxDensity percentage of the blockage area for standard cells.
Value: 0.0-100.0
+
+
Writes a PLACEMENT PARTIAL statement, which specifies that the initial placement should not use more than maxDensity percentage of the blockage area for standard cells. Any one of the PLACEMENT, PLACEMENT PARTIAL, PLACEMENT COMPONENT, PLACEMENT SOFT, or PLACEMENT PUSHDOWN statements can be specified for each placement blockage. The PLACEMENT PARTIAL statement is optional and can be used only once for each placement blockage in the BLOCKAGES statement.
+
+
+ int defwBlockagesPlacementPartial(- double
maxDensity)
+
+
+
+
+ maxDensity
+
+
Specifies the maximum density value. The initial placement will not use more than maxDensity percentage of the blockage area for standard cells.
Value: 0.0-100.0
+
+
Writes a PLACEMENT PUSHDOWN statement, which defines the placement blockage as being pushed down into the block from the top level of the design. Either a PLACEMENT, PLACEMENT COMPONENT, PLACEMENT PUSHDOWN, PLACEMENT PARTIAL, or PLACEMENT SOFT statement can be specified for each placement blockage in the BLOCKAGES statement. The PLACEMENT PUSHDOWN statement is optional and can be used only once for each placement blockage in a BLOCKAGES statement.
+
Note: This function will become obsolete in the next parser release. Use defwBlockagesPlacementPushdown instead.
+
+
+ int defwBlockagePlacementPushdown()
+
+
+
Writes a PLACEMENT PUSHDOWN statement, which defines the placement blockage as being pushed down into the block from the top level of the design. Any one of the PLACEMENT, PLACEMENT COMPONENT, PLACEMENT PUSHDOWN, PLACEMENT PARTIAL, or PLACEMENT SOFT statement can be specified for each placement blockage in the BLOCKAGES statement. The PLACEMENT PUSHDOWN statement is optional and can be used only once for each placement blockage in a BLOCKAGES statement.
+
+
+ int defwBlockagesPlacementPushdown()
+
+
+
Writes a PLACEMENT SOFT statement, which specifies that the initial placement should not use the blockage area, but later timing optimization phases can use the blockage area. Either a PLACEMENT, PLACEMENT PARTIAL, PLACEMENT COMPONENT, PLACEMENT SOFT, or PLACEMENT PUSHDOWN statement can be specified for each placement blockage. The PLACEMENT SOFT statement is optional and can be used only once for each placement blockage in the BLOCKAGES statement.
+
Note: This function will become obsolete in the next parser release. Use defwBlockagesPlacementSoft instead.
+
+
+ int defwBlockagePlacementSoft()
+
+
+
Writes a PLACEMENT SOFT statement, which specifies that the initial placement should not use the blockage area, but later timing optimization phases can use the blockage area. Any one of the PLACEMENT, PLACEMENT PARTIAL, PLACEMENT COMPONENT, PLACEMENT SOFT, or PLACEMENT PUSHDOWN statements can be specified for each placement blockage. The PLACEMENT SOFT statement is optional and can be used only once for each placement blockage in the BLOCKAGES statement.
+
+
+ int defwBlockagesPlacementSoft()
+
+
+
Writes a POLYGON statement. Either a RECT or a POLYGON statement is required with a LAYER, LAYER COMPONENT, FILLS, SLOTS, or PUSHDOWN statement. The POLYGON statement can be used more than once for each routing blockage in the BLOCKAGES statement.
+
Note: This function will become obsolete in the next parser release. Use defwBlockagesPolygon instead.
+
+
+ defwBlockagePolygon( - int
num_polys, - double* xl,
- double* yl)
+
+
+
+
+ num_polys
+
+
Specifies the number of polygon sides.
+
+
+ xl yl
+
+
Specifies a sequence of points to generate a polygon geometry. The polygon edges must be parallel to the x axis, to the y axis, or at a 45-degree angle.
+
+
Writes a POLYGON statement. Either a RECT or a POLYGON statement is required with a LAYER, LAYER COMPONENT, FILLS, SLOTS, or PUSHDOWN statement. The POLYGON statement can be used more than once for each routing blockage in the BLOCKAGES statement.
+
+
+ int defwBlockagesPolygon( - int
num_polys, - double* xl,
- double* yl)
+
+
+
+
+ num_polys
+
+
Specifies the number of polygon sides.
+
+
+ xl yl
+
+
Specifies a sequence of points to generate a polygon geometry. The polygon edges must be parallel to the x axis, to the y axis, or at a 45-degree angle.
+
+
Writes a RECT statement. Either a RECT or a POLYGON statement is required with a LAYER, LAYER COMPONENT, FILLS, SLOTS, or LAYER PUSHDOWN statement. A RECT statement is also required with a PLACEMENT COMPONENT or PLACEMENT PUSHDOWN statement. The RECT statement can be used more than once for each blockage in the BLOCKAGES statement.
+
Note: This function will become obsolete in the next parser release. Use defwBlockagesRect instead.
+
+
+ int defwBlockageRect(- int
xl,- int yl,
- int xh,
- int yh)
+
+
+
+
+ xl yl xh yh
+
+
Specifies the absolute coordinates of the blockage geometry.
+
+
Writes a RECT statement. Either a RECT or a POLYGON statement is required with a LAYER, LAYER COMPONENT, FILLS, SLOTS, or LAYER PUSHDOWN statement. A RECT statement is also required with a PLACEMENT COMPONENT or PLACEMENT PUSHDOWN statement. The RECT statement can be used more than once for each blockage in the BLOCKAGES statement.
+
+
+ int defwBlockagesRect(- int
xl,- int yl,
- int xh,
- int yh)
+
+
+
+
+ xl yl xh yh
+
+
Specifies the absolute coordinates of the blockage geometry.
+
+
Writes the blockage layer color mask.
+
+
+ int defwBlockagesLayerMask(- int
maskColor)
+
+
+
+
+ maskColor
+
+
Specifies the mask color.
+
+
Writes a SPACING statement for the blockage. Either a SPACING or a DESIGNRULEWIDTH statement can be specified for a routing blockage. The SPACING statement is optional and can be used only once for each routing blockage in the BLOCKAGES statement.
+
+
+ defwBlockageSpacing(- int
minSpacing)
+
+
+
+
+ minSpacing
+
+
Specifies the minimum spacing between this blockage and any other routing shape.
+
+
The Bus Bit Characters routine writes a DEF BUSBITCHARS statement. The BUSBITCHARS statement is required and can be used only once in a DEF file. For syntax information about the DEF BUSBITCHARS statement, see "Bus Bit Characters" in the LEF/DEF Language Reference.
+
This routine returns 0 if successful.
+
+
Writes a BUSBITCHARS statement.
+
+
+ int defwBusBitChars(- const char*
busBitChars)
+
+
+
+
+ busBitChars
+
+
Specifies the pair of characters used to specify bus bits when DEF names are mapped to or from other databases. The characters must be enclosed in double quotation marks.
If one of the bus bit characters appears in a DEF name as a regular character, you must use a backslash ( \) before the character to prevent the DEF reader from interpreting the character as a bus bit delimiter.
+
+
Components routines write a DEF COMPONENTS section. The COMPONENTS section is optional and can be used only once in a DEF file. For syntax information about the DEF COMPONENTS section, see "Components" in the LEF/DEF Language Reference.
+
The COMPONENTS section must start and end with the defwStartComponents and defwEndComponents routines. All components must be defined between these routines.
+
If the DEF file contains a REGIONS statement, the COMPONENTS statement must follow it. For more information about the DEF REGIONS routines, see "Regions".
+
For examples of the routines described here, see "Components Example".
+
Note: To write a PROPERTY statement for the component, you must use one of the property routines between the routines described here. For more information, see "Property Statements".
+
All routines return 0 if successful.
+
+
Starts the COMPONENTS section.
+
+
+ int defwStartComponents( - int
count)
+
+
+
+
+ count
+
+
Specifies the number of components defined in the COMPONENTS section.
+
+
Ends the COMPONENTS section.
+
If the count specified in defwStartComponents is not the same as the actual number of defwComponent routines used, this routine returns DEFW_BAD_DATA.
+
+
+ int defwEndComponents(void)
+
+
+
Writes a set of statements that define one component. This routine is required and can be used more than once in the COMPONENTS statement.
+
If you specify 0 for all optional arguments except weight, they are ignored. For weight, you must specify -1.0.
+
+
+ int defwComponent(- const char*
name,- const char* master,
- const char* eeq,
- const char* source,
- const char* status,
- int statusX,
- int statusY,
- int statusOrient,
- double weight,
- const char* region,)
+
+
+
+
+ eeq
+
+
Optional argument that specifies that the component being defined should be electrically equivalent to eeq (a previously defined component). Specify NULL to ignore this argument.
+
+
+ master
+
+
Specifies the name of a model defined in the library.
+
+
+ name
+
+
Specifies the component name, which is an instance of master.
+
+
+ region
+
+
Optional argument that specifies the name of a previously defined region in which the component must lie. Specify NULL to ignore this argument.
+
+
+ status
+
+
Optional argument that specifies the component state. Specify NULL to ignore this argument.
Value: Specify one of the following:
+
+
+
+ statusOrient
+
+
Optional argument that specifies the orientation of the component. Specify -1 to ignore this argument.
Value: 0 to 7. For more information, see "Orientation Codes".
+
+
+ statusX statusY
+
+
Optional arguments that specify the location of the component. Specify 0 to ignore these arguments.
+
+
+ source
+
+
Optional argument that specifies the source of the component. Specify NULL to ignore this argument.
Value: Specify one of the following:
+
+
+
+ weight
+
+
Optional argument that specifies the weight of the component, which determines if automatic placement attempts to keep the component near the specified location. weight is only meaningful when the component is placed. All non-zero weights have the same effect during automatic placement. Specify 0 to ignore this argument.
+
+
Also writes a set of statements that define one component. This routine is the same as the defwComponent routine, with the exception of the foreignOrients argument, which takes a string instead of an integer.This routine is required and can be used more than once in the COMPONENTS statement.
+
If you specify 0 for all optional arguments except weight, they are ignored. For weight, you must specify -1.0.
+
+
+ int defwComponent(- const char*
name,const char* master,const char* eeq,const char* source,const char* status,int statusX, - int statusY,const char* statusOrient,
- double weight,const char* region,)
+
+
+
+
+ eeq
+
+
Optional argument that specifies that the component being defined should be electrically equivalent to eeq (a previously defined component). Specify NULL to ignore this argument.
+
+
+ master
+
+
Specifies the name of a model defined in the library.
+
+
+ name
+
+
Specifies the component name, which is an instance of master.
+
+
+ region
+
+
Optional argument that specifies the name of a previously defined region in which the component must lie. Specify NULL to ignore this argument.
+
+
+ status
+
+
Optional argument that specifies the component state. Specify NULL to ignore this argument.
Value: Specify one of the following:
+
+
+
+ statusOrient
+
+
Optional argument that specifies the orientation of the component. Specify NULL to ignore this argument.
Value: N, W, S, E, FN, FW, FS, or FE
+
+
+ statusX statusY
+
+
Optional arguments that specify the location of the component. Specify 0 to ignore these arguments.
+
+
+ source
+
+
Optional argument that specifies the source of the component. Specify NULL to ignore this argument.
Value: Specify one of the following:
+
+
+
+ weight
+
+
Optional argument that specifies the weight of the component, which determines if automatic placement attempts to keep the component near the specified location. weight is only meaningful when the component is placed. All non-zero weights have the same effect during automatic placement. Specify 0 to ignore this argument.
+
+
Writes a HALO statement for a component. The HALO statement creates a placement blockage around the component. The HALO statement is optional and can be used only once for each component in the COMPONENT statement. If you call this routine, you cannot call defwComponentHaloSoft.
+
+
+ defwComponentHalo( - int
left, - int bottom,
- int right,
- int top)
+
+
+
+
+ left bottom right top
+
+
Specifies the amount the halo extends from the left, bottom, right, and top edges of the LEF macro.
+
+
Writes a HALO SOFT statement. This routine is similar to defwComponentHalo, except that it also writes the SOFT option. The HALO SOFT statement is optional and can be used only once for each component. If you call this routine, you cannot call defwComponentHalo.
+
+
+ int defwComponentHaloSoft(- int
left, - int bottom,
- int right,
- int top)
+
+
+
+
+ left bottom right top
+
+
Specifies the amount the halo extends from the left, bottom, right, and top edges of the LEF macro.
+
+
Writes a ROUTEHALO statement. The ROUTEHALO statement is optional and can be used only once for each component.
+
+
+ int defwComponentRouteHalo(- int
haloDist, - const char* minLayer,
- const char* maxLayer)
+
+
+
+
+ haloDist
+
+
Specifies the halo distance, as an integer in DEF database units.
+
+
+ minLayer
+
+
Specifies the minimum layer. The routing halo exists for the routing layers between minLayer and maxLayer. minLayer must be a lower routing layer than maxLayer. minLayer must be a string that matches a LEF routing layer name.
+
+
+ maxLayer
+
+
Specifies the maximum layer. The routing halo exists for the routing layers between minLayer and maxLayer. maxLayer must be a string that matches a LEF routing layer name.
+
+
The following example shows a callback routine with the type defwComponentCbkType. This example only shows the usage of some functions related to component.
+
+ int componentCB (defwCallbackType_e type,- defiUserData userData) {
- int res;
- const char** foreigns;
- int *foreignX, *foreignY, *foreignOrient;
+
+
+ // Check if the type is correct- if (type != defwComponentCbkType) {
- printf("Type is not defwComponentCbkType, terminate
- writing.\n");
- return 1;
- }
- foreigns = (const char**)malloc(sizeof(char*)*1);
- foreignX = (int*)malloc(sizeof(int)*1);
- foreignY = (int*)malloc(sizeof(int)*1);
- foreignOrient = (int*)malloc(sizeof(int)*1);
- res = defwStartComponents(2);
- CHECK_RES(res);
- res = defwComponent("Z38A01", "DFF3", 0, NULL, NULL, NULL,
- NULL, NULL, 0, NULL, NULL, NULL, NULL,
- "PLACED", 18592, 5400, 6, 0, NULL, 0, 0, 0,
- 0);
- CHECK_RES(res);
- foreigns[0] = strdup("gds2name");
- foreignX[0] = -500;
- foreignY[0] = -500;
- foreignOrient[0] = 3;
- res = defwComponent("cell3", "CHM6A", 0, NULL, NULL, NULL,
- NULL, "TIMING", 1, foreigns, foreignX,
- foreignY, foreignOrient, "PLACED", 240, 10,
- 0, 0, "region1", 0, 0, 0, 0);
- CHECK_RES(res);
- res = defwStringProperty("cc", "This is the copy list");
- CHECK_RES(res);
- res = defwIntProperty("index", 9);
- CHECK_RES(res);
- res = defwRealProperty("size", 7.8);
- CHECK_RES(res);
- res = defwEndComponents();
- CHECK_RES(res);
- free((char*)foreigns[0]);
- free((char*)foreigns);
- free((char*)foreignX);
- free((char*)foreignY);
- free((char*)foreignOrient);
- return 0;}
+
+
+
The Design routine writes a DEF DESIGN statement. The DESIGN statement is required and can be used only once in a DEF file. For syntax information about the DESIGN statement, see "Design" in the LEF/DEF Language Reference.
+
This routine returns 0 if successful.
+
+
Writes a DESIGN statement.
+
+
+ int defwDesignName(- const char*
name)
+
+
+
+
+ name
+
+
Specifies a name for the design.
+
+
Die Area routines write a DEF DIEAREA statement. The DIEAREA statement is optional and can be used only once in a DEF file. For syntax information about the DEF DIEAREA statement, see "Die Area" in the LEF/DEF Language Reference.
+
If the DEF file contains a PROPERTYDEFINITIONS statement, the DIEAREA statement must follow it. For more information about the DEF PROPERTYDEFINITIONS statement, see "Property Definitions".
+
This routine returns 0 if successful.
+
+
Writes a DIEAREA statement.
+
+
+ int defwDieArea (- int
xl,- int yl,
- int xh,
- int yh )
+
+
+
+
+ xl, yl, xh, yh
+
+
Specifies the points of two corners of the bounding rectangle for the design. Geometric shapes (such as blockages, pins, and special net routing) can be outside of the die area, to allow proper modeling of pushed down routing from top-level designs into sub blocks. However, routing tracks should still be inside the die area.
+
+
Writes a DIEAREA statement that includes more than two points.
+
+
+ defwDieAreaList( - int num_points,
- int* xl,
- int*yh)
+
+
+
+
+ num_points
+
+
Specifies the number of points specified.
+
+
+ xl yh
+
+
Specifies the points of a polygon that forms the die area. Geometric shapes (such as blockages, pins, and special net routing) can be outside of the die area, to allow proper modeling of pushed down routing from top-level designs into sub blocks. However, routing tracks should still be inside the die area.
+
+
The following example shows a callback routine with the type defwDieAreaCbkType.
+
+ int dieareaCB (defwCallbackType_e type,- defiUserData userData) {
- int res;
- // Check if the type is correct
- if (type != defwDieAreaCbkType) {
- printf("Type is not defwDieAreaCbkType, terminate
- writing.\n");
- return 1;
- }
- res = defwDieArea(-190000, -120000, 190000, 70000);
- CHECK_RES(res);
- return 0;}
+
+
+
The Divider Character routine writes a DEF DIVIDERCHAR statement. The DIVIDERCHAR statement is required and can be used only once in a DEF file. For syntax information about the DIVIDERCHAR statement, see "Divider Character" in the LEF/DEF Language Reference.
+
This routine returns 0 if successful.
+
+
Writes a DIVIDERCHAR statement.
+
+
+ int defwDividerChar(- const char*
dividerChar)
+
+
+
+
+ dividerChar
+
+
Specifies the character used to express hierarchy when DEF names are mapped to or from other databases. The character must be enclosed in double quotation marks.
If the divider character appears in a DEF name as a regular character, you must use a backslash (\) before the character to prevent the DEF reader from interpreting the character as a hierarchy delimiter.
+
+
The Extension routines write a series of statements that define the EXTENSIONS statement in the DEF file. The EXTENSIONS statement is optional and can be used only once in a DEF file. For syntax information about the EXTENSIONS statement, see "Extensions" in the LEF/DEF Language Reference.
+
You must use the defwStartBeginext and defwEndBeginext routines to create an EXTENSIONS statement. You must define all extensions between these routines.
+
For examples of the routines described here, see "Extensions Example".
+
All routines return 0 if successful.
+
+
Starts the EXTENSIONS statement.
+
+
+ int defwStartBeginext(- const char*
name)
+
+
+
+
+ name
+
+
Specifies the extension name.
+
+
Ends the BEGINEXT statement.
+
+
+ int defwEndBeginext()
+
+
+
Writes a CREATOR statement. The CREATOR statement is optional and can be used only once in an EXTENSIONS statement.
+
+
+ int defwBeginextCreator(- const char*
creatorName)
+
+
+
+
+ creatorName
+
+
Specifies a string value that defines the creator value.
+
+
Writes a DATE statement that specifies the current system time and date. The DATE statement is optional and can be used only once in an EXTENSIONS statement.
+
+
+ int defwBeginextDate()
+
+
+
Writes a REVISION statement. The REVISION statement is optional and can be used only once in an EXTENSIONS statement.
+
+
+ int defwBeginextRevision(- int
vers1,- int vers2)
+
+
+
+
+ vers1, vers2
+
+
Specifies the values used for the revision number string.
+
+
Adds customized syntax to the DEF file. This routine is optional and can be used more than once in an EXTENSIONS statement.
+
+
+ int lefwBeginextSyntax(- const char*
title,- const char* string)
+
+
+
+
+ title, string
+
+
Specify any values you need.
+
+
The following example shows a callback routine with the type defwExtCbkType. This example only shows the usage of some functions related to extensions.
+
+ int extensionCB (defwCallbackType_e type,- defiUserData userData) {
- int res;
- // Check if the type is correct
- if (type != defwExtCbkType) {
- printf("Type is not defwExtCbkType, terminate
- writing.\n");
- return 1;
- }
- res = defwStartBeginext("tag");
- CHECK_RES(res);
- res = defwBeginextCreator("CADENCE");
- CHECK_RES(res);
- res = defwBeginextDate();
- CHECK_RES(res);
- res = defwBeginextSyntax("OTTER", "furry");
- CHECK_RES(res);
- res = defwStringProperty("arrg", "later");
- CHECK_RES(res);
- res = defwBeginextSyntax("SEAL", "cousin to WALRUS");
- CHECK_RES(res);
- res = defwEndBeginext();
- CHECK_RES(res);
- return 0;}
+
+
+
Fills routines write a DEF FILLS statement. The FILLS statement is optional and can be used only once in a DEF file. For syntax information about the DEF FILLS statement, see "Fills" in the LEF/DEF Language Reference.
+
The DEF FILLS statement must start and end with the defwStartFills and defwEndFills routines. All fills must be defined between these routines.
+
All routines return 0 if successful.
+
+
Starts a FILLS statement.
+
+
+ int defwStartFills(- int
count)
+
+
+
+
+ count
+
+
Specifies the number of fills defined in the FILLS statement.
+
+
Ends the FILLS statement.
+
+
+ int defwEndFills()
+
+
+
Writes a LAYER statement. The LAYER statement is required for each fill and can be used more than once in a FILLS statement.
+
+
+ int defwFillLayer(- const char*
layerName)
+
+
+
+
+ layerName Specifies the layer on which to create the fill.
+
+
+
Writes an OPC keyword for a FILLS LAYER statement, which specifies that FILL shapes require OPC correction during mask generation. defwFillLayer must be called before this routine. This routine is optional and can be called only once after the defwFillLayer or defwFillVia routine.
+
+
+ int defwFillLayerOPC()
+
+
+
Specifies the points for a FILLS VIA statement. This routine is required after defwFillVia and can be called more than once.
+
+
+ int defwFillPoints(- int
num_points, - double* xl,
- double* yl)
+
+
+
+
+ num_points
+
+
Specifies the number of points provided.
+
+
+ x1 y1
+
+
Specify the placement locations (x y points) for the via.
+
+
Writes a POLYGON statement. Either a POLYGON or a RECT statement is required with a LAYER statement. The POLYGON statement is required and can be used more than once for each fill in the FILLS statement.
+
+
+ defwFillPolygon(- int
num_polys, - double* xl,
- double* yl)
+
+
+
+
+ num_polys
+
+
Specifies the number of polygon sides.
+
+
+ xl yl
+
+
Specifies a sequence of points to generate a polygon geometry. The polygon edges must be parallel to the x axis, the y axis, or at a 45-degree angle.
+
+
Writes a RECT statement. Either a POLYGON or a RECT statement is required with a LAYER statement. The RECT statement is required and can be used more than once for each fill in the FILLS statement.
+
+
+ int defwFillRect(- int
xl,- int yl,
- int xh,
- int yh)
+
+
+
+
+ xl, yl, xh, yh
+
+
Specifies the coordinates of the fill.
+
+
Writes a FILLS VIA statement. The FILLS VIA statement is optional and can be used more than once. Call defwFillPoints after this routine.
+
+
+ int defwFillVia(- const char*
viaName)
+
+
+
+
+ viaName
+
+
The name of the via, which must be previously defined in the DEF VIA or LEF VIA section.
+
+
Writes the OPC keyword for a FILLS VIA statement, which specifies that FILL shapes require OPC correction during mask generation. This routine is optional and can only be called after defwFillVia.
+
+
+ int defwFillViaOPC()
+
+
+
The Gcell Grid routine writes a DEF GCELLGRID statement. The GCELLGRID statement is optional and can be used only once in a DEF file. For syntax information about the DEF GCELLGRID statement, see GCell Grid in the LEF/DEF Language Reference.
+
If the DEF file contains a TRACKS statement, the GCELLGRID statement must follow it. For more information about the DEF TRACKS statement, see "Tracks".
+
This routine returns 0 if successful.
+
+
Writes a GCELLGRID statement.
+
+
+ int defwGcellGrid(- const char*
master,int doStart, - int doCount,int doStep)
+
+
+
+
+ doCount
+
+
Specifies the number of columns or rows in the grid.
+
+
+ doStart
+
+
Specifies the starting location of the grid (that is, the first column or row).
+
+
+ doStep
+
+
Specifies the step spacing between the grid units.
+
+
+ master
+
+
Specifies the direction of the tracks for the global router grid that overlays the array.
Value: Specify one of the following:
+
+
+
The following example shows a callback routine with the type defwGcellGridCbkType.
+
+ int gcellgridCB (defwCallbackType_e type,- defiUserData userData) {
- int res;
- // Check if the type is correct
- if (type != defwGcellGridCbkType) {
- printf("Type is not defwGcellGridCbkType, terminate
- writing.\n");
- return 1;
- }
- res = defwGcellGrid("X", 0, 100, 600);
- CHECK_RES(res);
- return 0;}
+
+
+
The Groups routines write a DEF GROUPS statement. The GROUPS statement is optional and can be used only once in a DEF file. For syntax information about the DEF GROUPS statement, see Groups in the LEF/DEF Language Reference.
+
You must begin and end a DEF GROUPS statement with the defwStartGroups and defwEndGroups routines. You must define all groups between these routines.
+
For examples of the routines described here, see "Groups Example".
+
Note: To write a PROPERTY statement for the component, you must use one of the property routines immediately following the defwGroup* routines that define the group. For more information, see "Property Statements".
+
All routines return 0 if successful.
+
+
Starts the GROUPS statement.
+
+
+ int defwStartGroups(- int
count)
+
+
+
+
+ count
+
+
Specifies the number of groups defined in the GROUPS statement.
+
+
Ends the GROUPS statement.
+
+
+ int defwEndGroups()
+
+
+
Writes a series of statements that define the specified group. This routine is required and can be used more than once in a GROUPS statement.
+
+
+ int defwGroup(- const char*
groupName,- int numExpr,const char** groupExpr)
+
+
+
+
+ groupExpr
+
+
Specifies a component name, a list of component names, or a regular expression for a set of components.
+
+
+ groupName
+
+
Specifies the name for a group of components.
+
+
+ numExpr
+
+
Specifies the number of components in the group.
+
+
Writes a REGION statement for the group defined. This statement is optional and can be used only once per group name.
+
+
+ int defwGroupRegion(- int
xl, - int yl,
- int xh,
- int yh,
- const char* regionName)
+
+
+
+
+ regionName
+
+
Specifies the name of a previously defined region in which the group must lie.
+
+
+ xl xh yl yh
+
+
Specifies the coordinates of a rectangular region in which the group must lie. Specify the coordinates or regionName; do not specify both.
+
+
The following example shows a callback routine with the type defwGroupCbkType.
+
+ int dividerCB (defwCallbackType_e type,- defiUserData userData) {
- int res;
- const char **groupExpr;
- // Check if the type is correct
- if (type != defwGroupCbkType) {
- printf("Type is not defwGroupCbkType, terminate
- writing.\n");
- return 1;
- }
- groupExpr = (const char**)malloc(sizeof(char*)*2);
- res = defwStartGroups(2);
- CHECK_RES(res);
- groupExpr[0] = strdup("cell2");
- groupExpr[1] = strdup("cell3");
- res = defwGroup("group1", 2, groupExpr);
- CHECK_RES(res);
- free((char*)groupExpr[0]);
- free((char*)groupExpr[1]);
- res = defwGroupRegion(0, 0, 0, 0, "region1");
- CHECK_RES(res);
- res = defwStringProperty("ggrp", "xx");
- CHECK_RES(res);
- res = defwIntProperty("side", 2);
- CHECK_RES(res);
- res = defwRealProperty("maxarea", 5.6);
- CHECK_RES(res);
- groupExpr[0] = strdup("cell1");
- res = defwGroup("group2", 1, groupExpr);
- CHECK_RES(res);
- free((char*)groupExpr[0]);
- res = defwGroupRegion(0, 10, 1000, 1010, NULL);
- CHECK_RES(res);
- res = defwGroupSoft("MAXHALFPERIMETER", 4000, "MAXX", 10000,
- NULL, NULL);
- CHECK_RES(res);
- res = defwEndGroups();
- CHECK_RES(res);
- free((char*)groupExpr);
- // Write a new line
- res = defwNewLine();
- CHECK_RES(res);
- return 0;}
+
+
+
The History routine writes a DEF HISTORY statement. The HISTORY statement is optional and can be used more than once in a DEF file. For syntax information about the DEF HISTORY statement, see History in the LEF/DEF Language Reference.
+
This routine returns 0 if successful.
+
+
Writes a HISTORY statement.
+
+
+ int defwHistory(- const char*
string)
+
+
+
+
+ string
+
+
Lists a historical record about the design. Each line indicates one historical record. Any text excluding a semicolon (;) can be included. Linefeed and Return do not terminate the statement.
+
+
The following example shows a callback routine with the type defwHistoryCbkType.
+
+ int historyCB (defwCallbackType_e type,- defiUserData userData) {
- int res;
- // Check if the type is correct
- if (type != defwHistoryCbkType) {
- printf("Type is not defwHistoryCbkType, terminate
- writing.\n");
- return 1;
- }
- res = defwHistory("DEF version 5.3");
- CHECK_RES(res);
- return 0;}
+
+
+
Nets routines write a DEF NETS statement. The NETS statement is optional and can be used only once in a DEF file. For syntax information about the DEF NETS statement, see "Nets" in the LEF/DEF Language Reference.
+
A NETS statement must start and end with the defwStartNets and defwEndNets routines. All nets must be defined between these routines. Each individual net must start and end with either defwNet or defwNetMustjoinConnection, and defwNetEndOneNet.
+
For examples of the routines described here, see "Nets Example".
+
In addition to the routines in this section, you can also include routines that form a regularWiring statement, a SUBNET statement, and a PROPERTY statement. For information about these routines, see "Regular Wiring" , "Subnet" , and "Property Statements".
+
All routines return 0 if successful.
+
+
Starts a NETS statement. A NET statement must start and end with defwStartNets and defwEndNets.
+
+
+ int defwStartNets(- int
count)
+
+
+
+
+ count
+
+
Specifies the number of nets defined in the NETS statement.
+
+
Ends the NETS statement. A NET statement must start and end with defwStartNets and defwEndNets.
+
+
+ int defwEndNets()
+
+
+
Starts a net description in the NETS statement. Each net description must start with either defwNet or defwNetMustJoinConnection, and end with defwNetEndOneNet.
+
If you specify this routine, you can optionally specify the following routine:
+
+
+
+ int defwNet(- const char*
netName)
+
+
+
+
+ netName
+
+
Specifies the name of the net.
+
+
Writes a MUSTJOIN statement in the NETS statement. Each net description must start with either defwNet or defwNetMustJoinConnection, and end with defwNetEndOneNet.
+
+
+ int defwNetMustjoinConnection( - const char*
compName, - const char* pinName)
+
+
+
+
+ compName, pinName
+
+
Identifies the net as a mustjoin by specifying one of its pins, using a component name and pin name.
+
+
Ends a net description in the NETS statement. Each net description must start with either defwNet or defwNetMustJoinConnection, and end with defwNetEndOneNet.
+
+
+ int defwNetEndOneNet()
+
+
+
Defines the net specified in defwNet. This routine can be used more than once for each net in a NETS statement.
+
Syntax
+
+ int defwNetConnection(- const char*
compName, - const char* pinName,
- int synthesized)
+
+
+
+
+ compName
+
+
Specifies the name of a regular component pin on the net. If you omit this value, the DEF writer writes the PIN statement.
+
+
+ pinName
+
+
Specifies the name of an I/O pin on the net.
+
+
+ synthesized
+
+
Optional argument that marks the pin as part of a synthesized scan chain.
Value: Specify one of the following:
+
+
+
Writes an ESTCAP statement. The ESTCAP statement is optional and can be used only once for each net in the NETS statement.
+
+
+ int defwNetEstCap(- double
wireCap)
+
+
+
+
+ wireCap
+
+
Specifies the estimated wire capacitance for the net. ESTCAP can be loaded with simulation data to generate net constraints for timing-driven layout.
+
+
Writes a FIXEDBUMP statement that indicates a bump cannot be assigned to a different pin. The FIXEDBUMP statement is optional and can be used only once for a net.
+
+
+ int defwNetFixedBump()
+
+
+
Writes a FREQUENCY statement. The FREQUENCY statement is optional and can be used only once for a net.
+
+
+ int defwNetFrequency(- double
frequency)
+
+
+
+
+ frequency
+
+
Specifies the frequency of the net, in hertz. The frequency value is used by the router to choose the correct number of via cuts required for a given net, and by validation tools to verify that the AC current density rules are met.
+
+
Writes a NONDEFAULTRULE statement. The NONDEFAULTRULE statement is optional and can be used only once for a net.
+
+
+ int defwNetNondefaultRule(- const char*
ruleName)
+
+
+
+
+ ruleName
+
+
Specifies that the net and wiring are created according to the specified nondefault rule defined in LEF.
+
+
Writes an ORIGINAL statement. The ORIGINAL statement is optional and can be used only once for a net.
+
+
+ int defwNetOriginal(- const char*
netName)
+
+
+
+
+ netName
+
+
Specifies the name of the original net partitioned to create multiple nets, including the net being defined.
+
+
Writes a PATTERN statement. The PATTERN statement is optional and can be used only once for a net.
+
+
+ int defwNetPattern(- const char*
name)
+
+
+
+
+ name
+
+
Specifies the routing pattern used for the net.
Value: Specify one of the following:
+
+
+
Writes a SOURCE statement. The SOURCE statement is optional and can be used only once for a net.
+
+
+ int defwNetSource(- const char*
name)
+
+
+
+
+ name
+
+
Specifies the source of the net.
Value: Specify one of the following:
+
+
+
Writes a USE statement. The USE statement is optional and can be used only once for a net.
+
+
+ int defwNetUse(- const char*
name)
+
+
+
+
+ name
+
+
Specifies how the net is used.
Value: Specify one of the following:
+
+
+
Writes a VPIN statement. The VPIN statement is optional and can be used more than once for a net.
+
+
+ int defwNetVpin(- const char*
vpinName,- const char* layerName,
- int layerXl,
- int layerYl,
- int layerXh,
- int layerYh,
- const char* status,
- int statusX,
- int statusY,
- int orient)
+
+
+
+
+ layerName
+
+
Optional argument that specifies the layer on which the virtual pin lies. Specify NULL to ignore this argument.
+
+
+ layerXl layerYl layerXh layerYh
+
+
Specifies the physical geometry of the virtual pin.
+
+
+ orient
+
+
Optional argument that specifies the orientation of the virtual pin. Specify -1 to ignore this argument.
Value: 0 to 7. For more information, see "Orientation Codes".
+
+
+ status
+
+
Optional argument that specifies the placement status of the virtual pin. Specify NULL to ignore this argument.
Value: specify one of the following:
+
+
+
+ statusX statusY
+
+
Optional arguments that specify the placement location of the virtual pin. If you specify status, you must specify these arguments. Specify 0 to ignore these arguments.
+
+
+ vpinName
+
+
Specifies the name of the virtual pin to define.
+
+
Also writes a VPIN statement. This routine is the same as the defwNetVpin routine, with the exception of the orient argument, which takes a string instead of an integer. The VPIN statement is optional and can be used more than once for a net.
+
+
+ int defwNetVpin(- const char*
vpinName,const char* layerName,int layerXl,int layerYl,int layerXh,int layerYh,const char* status,int statusX,int statusY, - const char* orient)
+
+
+
+
+ layerName
+
+
Optional argument that specifies the layer on which the virtual pin lies. Specify NULL to ignore this argument.
+
+
+ layerXl layerYl layerXh layerYh
+
+
Specifies the physical geometry of the virtual pin.
+
+
+ orient
+
+
Optional argument that specifies the orientation of the virtual pin. Specify NULL to ignore this argument.
Value: N, W, S, E, FN, FW, FS, or FE
+
+
+ status
+
+
Optional argument that specifies the placement status of the virtual pin. Specify NULL to ignore this argument.
Value: specify one of the following:
+
+
+
+ statusX statusY
+
+
Optional arguments that specify the placement location of the virtual pin. If you specify status, you must specify these arguments. Specify 0 to ignore these arguments.
+
+
+ vpinName
+
+
Specifies the name of the virtual pin to define.
+
+
Writes a WEIGHT statement. The WEIGHT statement is optional and can be used only once for a net.
+
+
+ int defwNetWeight(- double
weight)
+
+
+
+
+ weight
+
+
Specifies the weight of the net. Automatic layout tools attempt to shorten the lengths of nets with high weights. A value of 0 indicates that the net length for that net can be ignored. A value of 1 specifies that the net should be treated normally. A larger weight specifies that the tool should try harder to minimize the net length of that net.
For normal use, timing constraints are generally a better method to use for controlling net length than net weights. For the best results, you should typically limit the maximum weight to 10, and not add weights to more than 3 percent of the nets.
+
+
Writes a XTALK statement. The XTALK statement is optional and can be used only once for a net.
+
+
+ int defwNetXtalk(- int
num)
+
+
+
+
+ num
+
+
Specifies the crosstalk class number for the net. If you specify the default value (0), the XTALK statement will not be written to the DEF file.
Value: 0 to 200
+
+
The following example shows a callback routine with the type defwNetCbkType. This example only shows the usage of some functions related to net.
+
+ int netCB (defwCallbackType_e type,- defiUserData userData) {
- int res;
- const char **coorX, **coorY;
- const char **coorValue;
- // Check if the type is correct
- if (type != defwNetCbkType) {
- printf("Type is not defwNetCbkType, terminate
- writing.\n");
- return 1;
- }
- res = defwStartNets(3);
- CHECK_RES(res);
- coorX = (const char**)malloc(sizeof(char*)*5);
- coorY = (const char**)malloc(sizeof(char*)*5);
- coorValue = (const char**)malloc(sizeof(char*)*5);
- res = defwNet("my_net");
- CHECK_RES(res);
- res = defwNetConnection("I1", "A", 0);
- CHECK_RES(res);
- res = defwNetConnection("BUF", "Z", 0);
- CHECK_RES(res);
- res = defwNetNondefaultRule("RULE1");
- CHECK_RES(res);
- res = defwNetShieldnet("VSS");
- CHECK_RES(res);
- res = defwNetPathStart("ROUTED");
- CHECK_RES(res);
- ...
- = defwNetNoshieldStart("M2");
- CHECK_RES(res);
- coorX[0] = strdup("14100");
- coorY[0] = strdup("341440");
- coorX[1] = strdup("14000");
- coorY[1] = strdup("*");
- res = defwNetNoshieldPoint(2, coorX, coorY);
- CHECK_RES(res);
- res = defwNetNoshieldEnd();
- CHECK_RES(res);
- res = defwNetEndOneNet();
- CHECK_RES(res);
- res = defwNet("MUSTJOIN");
- CHECK_RES(res);
- res = defwNetConnection("cell4", "PA1", 0);
- CHECK_RES(res);
- res = defwNetEndOneNet();
- CHECK_RES(res);
- res = defwNet("XX100");
- CHECK_RES(res);
- res = defwNetConnection("Z38A05", "G", 0);
- CHECK_RES(res);
- res = defwNetConnection("Z38A03", "G", 0);
- CHECK_RES(res);
- res = defwNetConnection("Z38A01", "G", 0);
CHECK_RES(res);
res = defwNetVpin("V_SUB3_XX100", NULL, -333, -333, 333,
333, "PLACED", 189560, 27300, 0);
CHECK_RES(res);
res = defwNetSubnetStart("SUB1_XX100");
CHECK_RES(res);
...
// An example for Regular Wiring can be found in the
// Regular Wiring section.
res = defwNetPathEnd();
CHECK_RES(res);
res = defwNetNoshieldStart("M2");
CHECK_RES(res);
coorX[0] = strdup("14100");
coorY[0] = strdup("341440");
coorX[1] = strdup("14000");
coorY[1] = strdup("*");
res = defwNetNoshieldPoint(2, coorX, coorY);
CHECK_RES(res);
res = defwNetNoshieldEnd();
CHECK_RES(res);
res = defwNetEndOneNet();
CHECK_RES(res);
res = defwNet("MUSTJOIN");
CHECK_RES(res);
res = defwNetConnection("cell4", "PA1", 0);
CHECK_RES(res);
res = defwNetEndOneNet();
CHECK_RES(res);
res = defwNet("XX100");
CHECK_RES(res);
res = defwNetConnection("Z38A05", "G", 0);
CHECK_RES(res);
res = defwNetConnection("Z38A03", "G", 0);
CHECK_RES(res);
res = defwNetConnection("Z38A01", "G", 0);
CHECK_RES(res);
res = defwNetVpin("V_SUB3_XX100", NULL, -333, -333, 333,
333, "PLACED", 189560, 27300, 0);
CHECK_RES(res);
res = defwNetSubnetStart("SUB1_XX100");
CHECK_RES(res);
...
// An example for Subnet can be found in the Subnet section
CHECK_RES(res);
res = defwNetSubnetEnd();
CHECK_RES(res);
res = defwEndNets();
CHECK_RES(res);
return 0;}
+
+
+
Routines described in this section form a regularWiring statement that can be used to define regular wiring for a net or subnet. The regularWiring statement is optional and can be used more than once in a NETS statement. For syntax information about the DEF NETS statement, see "Nets" in the LEF/DEF Language Reference.
+
A regularWiring statement must start and end with the defwNetPathStart and defwNetPathEnd routines. All regular wiring must be defined between these routines.
+
For examples of the routines described here, see "Regular Wiring Example".
+
The regular wiring routines can be included between the following pairs of routines:
+
+
+
+
+
+
+
+
+
+ |
+ defwNet and defwEndOneNet |
+
+
+
+
+
+
All routines return 0 if successful.
+
+
Starts a regularWiring statement.
+
+
+ int defwNetPathStart(- const char*
type)
+
+
+
+
+ type
+
+
Specifies the regular wiring type.
Value: Specify one of the following:
+
+
+
Ends the regularWiring statement.
+
+
+ int defwNetPathEnd()
+
+
+
Writes a LAYER statement. The LAYER statement is required and can be used more than once in the regularWiring statement.
+
+
+ int defwNetPathLayer(- const char*
layerName,- int isTaper,
- const char* rulename)
+
+
+
+
+ layerName
+
+
Specifies the layer name on which the wire lies.
+
+
+ isTaper
+
+
Optional argument that writes the keyword TAPER, which specifies that the next contiguous wire segment is created using the default rule.
Value: Specify one of the following:
+
+
+
+ ruleName
+
+
Optional argument that specifies that the next contiguous wire segment is created using the specified nondefault rule (ruleName). Specify NULL to ignore this argument. If you specify a rulename, you must specify 0 for the isTaper argument.
+
+
Defines the center line coordinates of the route on the layer specified with defwNetPathLayer. This routine is required and can be used only once for each layer in the regularWiring statement.
+
+
+ int defwNetPathPoint(- int
numPts,- const char** pointX,
- const char** pointY,
- const char** value)
+
+
+
+
+ numPts
+
+
Specifies the number of points in the wire path (route)
+
+
+ pointX pointY
+
+
Specifies the coordinates of the path points.
+
+
+ value
+
+
Optional argument that specifies the amount by which the wire is extended past the end point of the segment. This value must be greater than or equal to 0 (zero). Specify NULL to ignore this argument.
+
+
Writes a STYLE statement for the layer specified with defwNetPathLayer. The STYLE statement is optional and can be used only once for each layer in the regularWiring statement.
+
+
+ defwNetPathStyle( - int
styleNum)
+
+
+
+
+ styleNum
+
+
Specifies a previously defined style from the STYLES section in this DEF file. If a style is specified, the wire's shape is defined by the center line coordinates and the style.
+
+
Specifies a via to place at the last point on the layer specified with defwNetPathLayer. This routine is optional and can be used only once for each layer in the regularWiring statement.
+
+
+ int defwNetPathVia(- const char*
viaName)
+
+
+
+
+ viaName
+
+
Specifies the via to place at the last specified path coordinate.
+
+
Specifies the orientation of the via specified with defwNetPathVia. This routine is optional and can be used only once for each via in the regularWiring statement.
+
+
+ defwNetPathViaWithOrient( - const char*
name, - int orient)
+
+
+
+
+ name
+
+
Specifies the via.
+
+
+ orient
+
+
Specifies the orientation.
Value: 0 to 7. For more information, see "Orientation Codes"
+
+
Also specifies the orientation of the via specified with defwNetPathVia. This routine is the same as the defwNetPathViaWithOrient routine, with the exception of the orient argument, which takes a string instead of an integer. The defwNetPathViaWithOrientStr is optional and can be used only once for each via in the regularWiring statement.
+
+
+ defwNetPathViaWithOrient( - const char*
name, - int orient)
+
+
+
+
+ name
+
+
Specifies the via.
+
+
+ orient
+
+
Specifies the orientation. Specify NULL to ignore this argument.
Value: N, W, S, E, FN, FW, FS, or FE
+
+
The following example only shows the usage of some functions related to regular wiring in a net. This example is part of the net callback routine.
+
+ int netCB (defwCallbackType_e type,- defiUserData userData) {
- int res;
- const char **coorX, **coorY;
- const char **coorValue;
- ...
- res = defwNetPathStart("NEW");
- CHECK_RES(res);
- res = defwNetPathLayer("M1", 1, NULL);
- CHECK_RES(res);
- coorX[0] = strdup("2400");
- coorY[0] = strdup("282400");
- coorValue[0] = NULL;
- coorX[1] = strdup("240");
- coorY[1] = strdup("*");
- coorValue[1] = NULL;
- res = defwNetPathPoint(2, coorX, coorY, coorValue);
- CHECK_RES(res);
- free((char*)coorX[0]);
- free((char*)coorY[0]);
- free((char*)coorX[1]);
- free((char*)coorY[1]);
- res = defwNetPathEnd();
- CHECK_RES(res);
- ...
- return 0;}
+
+
+
The Subnet routines write a SUBNET statement which further defines a net. A SUBNET statement is optional and can be used more than once in a NETS statement. For information about the DEF NETS statement, see "Nets" in the LEF/DEF Language Reference.
+
You must begin and end a SUBNET statement with the defwNetSubnetStart and defwSubnetEnd routines. You must define all subnets between these routines.
+
For examples of the routines described here, see "Subnet Example".
+
In addition to the routines described in this section, you can include a NONDEFAULTRULE statement and a regularWiring statement within a SUBNET statement. For more information about these routines, see defwNetNondefaultRule , or "Regular Wiring".
+
All routines return 0 if successful.
+
+
Starts a SUBNET statement. This statement is optional and can be used only once in a NETS statement.
+
+
+ int defwNetSubnetStart(- const char*
name)
+
+
+
+
+ name
+
+
Specifies the name of the subnet.
+
+
Ends a SUBNET statement.
+
+
+ int defwNetSubnetEnd()
+
+
+
Specifies a component for the SUBNET statement. This routine is optional and can be used more than once in a SUBNET statement.
+
+
+ int defwNetSubnetPin(- const char*
component,- const char* name)
+
+
+
+
+ component
+
+
Specifies either a component name, or the value PIN or VPIN.
+
+
+ name
+
+
Specifies either a pin name if component is set to PIN, or a virtual pin name if component is set to VPIN.
+
+
The following example only shows the usage of some functions related to subnet in a net. This example is part of the net callback routine.
+
+ int netCB (defwCallbackType_e type,- defiUserData userData) {
- int res;
- const char **coorX, **coorY;
- const char **coorValue;
- ...
- res = defwNetSubnetStart("SUB1_XX100");
- CHECK_RES(res);
- res = defwNetSubnetPin("Z38A05", "G");
- CHECK_RES(res);
- res = defwNetSubnetPin("VPIN", "V_SUB1_XX100");
- CHECK_RES(res);
- res = defwNetPathStart("ROUTED");
- CHECK_RES(res);
- res = defwNetPathLayer("M1", 0, "RULE1");
- CHECK_RES(res);
- coorX[0] = strdup("54040");
- coorY[0] = strdup("30300");
- coorValue[0] = strdup("0");
- coorX[1] = strdup("*");
- coorY[1] = strdup("30900");
- coorValue[1] = NULL;
- res = defwNetPathPoint(2, coorX, coorY, coorValue);
- CHECK_RES(res);
- free((char*)coorX[0]);
- free((char*)coorY[0]);
- free((char*)coorValue[0]);
- free((char*)coorX[1]);
- free((char*)coorY[1]);
- res = defwNetPathVia("nd1VIA12");
- CHECK_RES(res);
- ...
- res = defwNetPathEnd();
- CHECK_RES(res);
- res = defwNetSubnetEnd();
- ...
- return 0;}
+
+
+
Nondefault rule routines write a DEF NONDEFAULTRULES statement. The NONDEFAULTRULES statement is optional and can be used only once in a DEF file. For syntax information about the DEF NONDEFAULTRULES statement, see "Nondefault Rules" in the LEF/DEF Language Reference.
+
The NONDEFAULTRULES statement must start and end with the defwStartNonDefaultRules and defwEndNonDefaultRules routines. All nondefault rules must be defined between these two routines. Each individual nondefault rule must start with defwNonDefaultRule.
+
Note: To write a PROPERTY statement for the nondefault rule, you must use one of the property routines immediately following the defwNonDefaultRule routine. For more information, see "Property Statements".
+
All routines return 0 if successful.
+
+
Starts a NONDEFAULTRULES statement.
+
+
+ defwStartNonDefaultRules(- int
count)
+
+
+
+
+ count
+
+
Specifies the number of rules defined in the NONDEFAULTRULES statement.
+
+
Ends the NONDEFAULTRULES statement.
+
+
+ defwEndNonDefaultRules()
+
+
+
Starts a nondefault rule definition. This routine is required for each nondefault rule and can be used more than once in the NONDEFAULTRULES statement.
+
+
+ defwNonDefaultRule( - const char*
ruleName, - int hardSpacing)
+
+
+
+
+ ruleName
+
+
Specifies the name for this nondefault rule. This name can be used in the NETS section wherever a nondefault rule name is allowed. The reserved name DEFAULT can be used to indicate the default routing rule used in the NETS section.
+
+
+ hardSpacing
+
+
Optional argument that specifies that any spacing values that exceed the LEF LAYER ROUTING spacing requirements are "hard" rules instead of "soft" rules. Specify 0 to ignore this argument.
+
+
Writes a LAYER statement for the nondefault rule. The LAYER statement is required and can be used more than once for each nondefault rule in the NONDEFAULTRULES statement.
+
+
+ defwNonDefaultRuleLayer( - const char*
layerName, - double width,
- double diagWidth,
- double spacing,
- double wireExt)
+
+
+
+
+ layerName
+
+
`Specifies the layer for the various width and spacing values. layerName must be a routing layer.
+
+
+ width
+
+
Specifies the required minimum width allowed for layerName.
+
+
+ diagWidth
+
+
Optional argument that specifies the diagonal width for layerName, when 45-degree routing is used. Specify 0 to ignore this argument.
+
+
+ spacing
+
+
Optional argument that specifies the minimum spacing for layerName. The LEF LAYER SPACING or SPACINGTABLE definitions always apply; therefore it is only necessary to add a SPACING value if the desired spacing is larger than the LAYER rules already require. Specify 0 to ignore this argument.
+
+
+ wireExt
+
+
Optional argument that specifies the distance by which wires are extended at vias on layerName. Specify 0 to ignore this argument.
+
+
Writes a MINCUTS statement. The MINCUTS statement is optional and can be used more than once for each nondefault rule in the NONDEFAULTRULES statement.
+
+
+ defwNonDefaultRuleMinCuts( - const char*
cutLayerName, - int numCuts)
+
+
+
+
+ cutLayerName
+
+
Specifies the cut layer.
+
+
+ numCuts
+
+
Specifies the minimum number of cuts allowed for any via using cutLayerName. All vias (generated or fixed vias) used for this nondefault rule must have at least numCuts cuts in the via.
+
+
Writes a VIA statement for the nondefault rule. The VIA statement is optional and can be used more than once for each nondefault rule in the NONDEFAULTRULES statement.
+
+
+ defwNonDefaultRuleVia( - const char*
viaName)
+
+
+
+
+ viaName
+
+
Specifies a previously defined LEF or DEF via to use with this rule.
+
+
Writes a VIARULE statement. The VIARULE statement is optional and can be used more than once for each nondefault rule in the NONDEFAULTRULES statement.
+
+
+ defwNonDefaultRuleViaRule( - const char*
viaRuleName)
+
+
+
+
+ viaRuleName
+
+
Specifies a previously defined LEF VIARULE GENERATE to use with this routing rule. If no via or via rule is specified for a given routing-cut-routing layer combination, then a VIARULE GENERATE DEFAULT via rule must exist for that combination, and it is implicitly inherited.
+
+
Pin routines write a DEF PINS statement. The PINS statement is optional and can be used only once in a DEF file. For syntax information about the DEF PINS statement, see "Pins" in the LEF/DEF Language Reference.
+
A PINS statement must start and end with the defwStartPins and defwEndPins routines. All pins must be defined between these routines. Each individual pin must start with a defwPin routine.
+
If the DEF file contains a COMPONENTS statement, the PINS statement must follow it. For more information about DEF COMPONENTS routines, see "Components".
+
For examples of the routines described here, see "Pins Example".
+
Note: To write a PROPERTY statement for the pin, you must use one of the property routines immediately following the defwPin routine. For more information, see "Property Statements".
+
All routines return 0 if successful.
+
+
Starts a PINS statement.
+
+
+ int defwStartPins(- int
count)
+
+
+
+
+ count
+
+
Specifies the number of pins defined in the PINS statement.
+
+
Ends the PINS statement. If count is not the same as the actual number of defwPin routines used, defwEndPins returns DEFW_BAD_DATA.
+
+
+ int defwEndPins(void)
+
+
+
Starts a pin description in the PINS statement. Each pin description must start with defwPin. This routine is required and can be used more than once in a PINS statement.
+
+
+ int defwPin(- const char*
pinName, - const char* netName,
- int special,const char* direction,const char* use,const char* status,
- int statusX,int statusY,int orient)
+
+
+
+
+ direction
+
+
Optional argument that specifies the pin type. Specify NULL to ignore this argument.
Value: Specify one of the following:
+
+
+
+ netName
+
+
Specifies the corresponding internal net name.
+
+
+ orient
+
+
Optional argument that specifies the orientation for the pin. Specify -1 to ignore this argument.
Value: 0 to 7. For more information, see "Orientation Codes".
+
+
+ pinName
+
+
Specifies the name for the external pin.
+
+
+ special
+
+
Optional argument that identifies the pin as a special pin. Specify 0 to ignore this argument.
Value: Specify one of the following: I
+
+
+
+ status
+
+
Optional argument that specifies the placement status of the pin. Specify NULL to ignore this argument.
Value: Specify one of the following:
+
+
+
+ statusX statusY
+
+
Optional arguments that specify the placement location of the pin. If you specify status, you must specify these arguments.Specify 0 to ignore these arguments.
+
+
+ use
+
+
Optional argument that specifies how the pin is used. Specify NULL to ignore this argument.
Value: Specify one of the following:
+
+
+
Also starts a pin description in the PINS statement. This routine is the same as the defwPin routine, with the exception of the orient argument, which takes a string instead of an integer. Each pin description must start with defwPin. This routine is required and can be used more than once in a PINS statement.
+
+
+ int defwPin(- const char*
pinName, - const char* netName,
- int special,const char* direction,const char* use,const char* status,
- int statusX,int statusY,const char* orient)
+
+
+
+
+ direction
+
+
Optional argument that specifies the pin type. Specify NULL to ignore this argument.
Value: Specify one of the following:
+
+
+
+ netName
+
+
Specifies the corresponding internal net name.
+
+
+ orient
+
+
Optional argument that specifies the orientation for the pin. Specify NULL to ignore this argument.
Value: N, W, S, E, FN, FW, FS, or FE
+
+
+ pinName
+
+
Specifies the name for the external pin.
+
+
+ special
+
+
Optional argument that identifies the pin as a special pin. Specify 0 to ignore this argument.
Value: Specify one of the following: I
+
+
+
+ status
+
+
Optional argument that specifies the placement status of the pin. Specify NULL to ignore this argument.
Value: Specify one of the following:
+
+
+
+ statusX statusY
+
+
Optional arguments that specify the placement location of the pin. If you specify status, you must specify these arguments.Specify 0 to ignore these arguments.
+
+
+ use
+
+
Optional argument that specifies how the pin is used. Specify NULL to ignore this argument.
Value: Specify one of the following:
+
+
+
Writes an ANTENNAMODEL statement. The ANTENNAMODEL statement is optional and can be used more than once in a pin definition.
+
+
+ int defwPinAntennaModel(- const char*
oxide)
+
+
+
+
+ oxide
+
+
Specifies the oxide model for the pin. Each model can be specified once per layer. If you specify an ANTENNAMODEL statement, that value affects all ANTENNAGATEAREA and ANTENNA*CAR statements for the pin that follow it until you specify another ANTENNAMODEL statement.
Value: OXIDE1, OXIDE2, OXIDE3, or OXIDE4
Note: OXIDE3 and OXIDE4 are currently not supported. If you specify either of these models, the tool parses and ignores it.
+
+
Writes an ANTENNAPINDIFFAREA statement. The ANTENNAPINDIFFAREA statement is optional and can be used more than once in a PIN section.
+
+
+ int defwPinAntennaPinDiffArea(- int
value,const char* layerName)
+
+
+
+
+ value
+
+
Specifies the diffusion (diode) area to which the pin is connected on a layer.
+
+
+ layerName
+
+
Optional argument that specifies the layer. Specify NULL to ignore this argument.
+
+
Writes an ANTENNAPINGATEAREA statement. The ANTENNAPINGATEAREA statement is optional, and can be used once after each defwPinAntennaModel routine in a PINS section.
+
+
+ int defwPinAntennaPinGateArea(- int
value,const char* layerName)
+
+
+
+
+ value
+
+
Specifies the gate area to which the pin is connected on a layer.
+
+
+ layerName
+
+
Optional argument that specifies the layer. Specify NULL to ignore this argument.
+
+
Writes an ANTENNAPINMAXAREACAR statement. The ANTENNAPINMAXAREACAR statement is optional, and can be used once after each defwPinAntennaModel routine in a PINS section.
+
+
+ int defwPinAntennaPinMaxAreaCar(- int
value,const char* layerName)
+
+
+
+
+ value
+
+
Specifies the maximum cumulative antenna ratio, using the metal area below the current pin layer.
+
+
+ layerName
+
+
Specifies the pin layer.
+
+
Writes an ANTENNAPINMAXCUTCAR statement. The ANTENNAPINMAXCUTCAR statement is optional, and can be used once after each defwPinAntennaModel routine in a PINS section.
+
+
+ int defwPinAntennaPinMaxCutCar(- int
value,const char* layerName)
+
+
+
+
+ value
+
+
Specifies the maximum cumulative antenna ratio, using the cut area below the current pin layer.
+
+
+ layerName
+
+
Specifies the pin layer.
+
+
Writes an ANTENNAPINMAXSIDEAREACAR statement. The ANTENNAPINMAXSIDEAREACAR statement is optional, and can be used once after each defwPinAntennaModel routine in a PINS section.
+
+
+ int defwPinAntennaPinMaxSideAreaCar(- int
value,const char* layerName)
+
+
+
+
+ value
+
+
Specifies the maximum cumulative antenna ratio, using the metal side wall area below the current pin layer.
+
+
+ layerName
+
+
Specifies the pin layer.
+
+
Writes an ANTENNAPINPARTIALCUTAREA statement. The ANTENNAPINPARTIALCUTAREA statement is optional and can be used more than once in a PINS section.
+
+
+ int defwPinAntennaPinPartialCutArea(- int
value,const char* layerName)
+
+
+
+
+ value
+
+
Specifies the partial cut area, which is above the current pin layer and inside (or outside) the macro on a layer.
+
+
+ layerName
+
+
Optional argument that specifies the layer. Specify NULL to ignore this argument.
+
+
Writes an ANTENNAPINPARTIALMETALAREA statement. The ANTENNAPINPARTIALMETALAREA statement is optional and can be used more than once in a PINS section.
+
+
+ int defwPinAntennaPinPartialMetalArea(- int
value,const char* layerName)
+
+
+
+
+ value
+
+
Specifies the partial metal area, which is connected directly to the I/O pin and the inside (or outside) of the macro on a layer.
+
+
+ layerName
+
+
Optional argument that specifies the layer. Specify NULL to ignore this argument.
+
+
Writes an ANTENNAPINPARTIALMETALSIDEAREA statement. The ANTENNAPINPARTIALMETALSIDEAREA statement is optional and can be used more than once for each pin in a PINS statement.
+
+
+ int defwPinAntennaPinPartialMetalSideArea(- int
value,const char* layerName)
+
+
+
+
+ value
+
+
Specifies the partial metal side wall area, which is connected directly to the I/O pin and the inside (or outside) of the macro on a layer.
+
+
+ layerName
+
+
Optional argument that specifies the layer. Specify NULL to ignore this argument.
+
+
Writes a GROUNDSENSITIVITY statement for a pin in the PINS statement. The GROUNDSENSITIVITY statement is optional and can be used only once for each pin in the PINS statement.
+
+
+ defwPinGroundSensitivity( - const char*
pinName)
+
+
+
+
+ pinName
+
+
Specifies that if this pin is connected to a tie-low connection (such as 1'b0 in Verilog), it should connect to the same net to which pinName is connected.
+
+
Writes a LAYER statement for a pin in the PINS statement. Either a LAYER or a POLYGON statement can be specified for a pin. The LAYER statement is optional and can be used more than once for each pin in the PINS statement.
+
+
+ defwPinLayer(- const char*
layerName, - int spacing,
- int designRuleWidth,
- int xl,
- int yl,
- int xh,
- int yh)
+
+
+
+
+ layerName
+
+
Specifies the routing layer used for the pin.
+
+
+ spacing
+
+
Optional argument that specifies the minimum spacing allowed between this pin and any other routing shape. If you specify a minimum spacing, you must specify 0 for designRuleWidth. Specify 0 to ignore this argument.
+
+
+ designRuleWidth
+
+
Optional argument that specifies that this pin has a width of designRuleWidth for the purpose of spacing calculations. If you specify a designRuleWidth value, you must specify 0 for spacing. Specify 0 to ignore this argument.
+
+
+ xl yl xh yh
+
+
Specifies the physical geometry for the pin on the specified layer.
+
+
Writes a NETEXPR statement for a pin in the PINS statement. The NETEXPR statement is optional and can be used only once for each pin in the PINS statement.
+
+
+ defwPinNetExpr( - const char*
pinExpr)
+
+
+
+
+ pinExpr
+
+
Specifies a net expression property name (such as power1 or power2). If pinExpr matches a net expression property higher up in the netlist (for example, in Verilog, VHDL, or OpenAccess), then the property is evaluated, and the software identifies a net to which to connect this pin.
+
+
Writes a POLYGON statement for a pin in the PINS statement. Either a LAYER or a POLYGON statement can be specified for a pin. The POLYGON statement is optional and can be used more than once for each pin in the PINS statement.
+
+
+ defwPinPolygon( - const char*
layerName,- int spacing,
- int designRuleWidth,
- int num_polys,
- double* xl,
- double* yl)
+
+
+
+
+ layerName
+
+
Specifies the layer on which to generate a polygon.
+
+
+ spacing
+
+
Optional argument that specifies the minimum spacing allowed between this pin and any other routing shape. If you specify a minimum spacing, you must specify 0 for designRuleWidth. Specify 0 to ignore this argument.
+
+
+ designRuleWidth
+
+
Optional argument that specifies that this pin has a width of designRuleWidth for the purpose of spacing calculations. If you specify a designRuleWidth value, you must specify 0 for spacing. Specify 0 to ignore this argument.
+
+
+ num_polys
+
+
Specifies the number of polygon sides.
+
+
+ xl yl
+
+
Specifies a sequence of points to generate a polygon for the pin. The polygon edges must be parallel to the x axis, the y axis, or at a 45-degree angle.
+
+
Writes a PORT statement for a pin in the PINS statement. The PORT statement is optional and can be used more than once in a PINS statement.
+
+
+ int defwPinPort()
+
+
+
Writes a LAYER statement for a PINS PORT statement. Either a LAYER, POLYGON, or VIA statement can be specified for a pin port. This routine is optional and is called after defwPinPort.
+
+
+ int defwPinPortLayer(- const char*
layerName,- int spacing,
- int designRuleWidth,
- int xl,
- int yl,
- int xh,
- int yh)
+
+
+
+
+ layerName
+
+
Specifies the layer name.
+
+
+ spacing
+
+
Optional argument that specifies the minimum spacing allowed between this pin port and any other routing shape. If you specify spacing, you must specify 0 for designRuleWidth. Specify 0 to ignore this argument.
+
+
+ designRuleWidth
+
+
Optional argument that specifies that this pin port has a width of designRuleWidth for the purpose of spacing calculations. If you specify designRuleWidth, you must specify 0 for spacing. Specify 0 to ignore this argument.
+
+
+ xl yl xh yh
+
+
Specifies the physical geometry for the pin port on the specified layer.
+
+
Writes a FIXED, PLACED, or COVER statement for a PINS PORT statement. This routine is optional and is called after defwPinPort.
+
+
+ int defwPinPortLocation(- const char*
status,- int statusX,
- int statusY,
- const char* orient)
+
+
+
+
+ status
+
+
Specifies the placement status of the pin.
Value: specify one of the following:
+
+
+
+ statusX statusY
+
+
Specifies the placement location of the pin. If you specify status, you must specify these arguments.
+
+
+ orient
+
+
Specifies the orientation of the pin.
Value: 0 to 7. For more information, see "Orientation Codes".
+
+
Writes a POLYGON statement for a PINS PORT statement. Either a LAYER, POLYGON, or VIA statement can be specified for a pin port. This routine is optional and is called after defwPinPort.
+
+
+ int defwPinPortPolygon(- const char*
layerName,- int spacing,
- int designRuleWidth,
- int num_polys,
- double* xl,
- double* yl)
+
+
+
+
+ layerName
+
+
Specifies the layer name.
+
+
+ spacing
+
+
Optional argument that specifies the minimum spacing allowed between this pin port and any other routing shape. If you specify a minimum spacing, you must specify 0 for designRuleWidth. Specify 0 to ignore this argument.
+
+
+ designRuleWidth
+
+
Optional argument that specifies that this pin port has a width of designRuleWidth for the purpose of spacing calculations. If you specify designRuleWidth, you must specify 0 for spacing. Specify 0 to ignore this argument.
+
+
+ num_polys
+
+
Specifies the number of polygon sides.
+
+
+ xl yl
+
+
Specifies a sequence of points to generate a polygon for the pin port. The polygon edges must be parallel to the x axis, the y axis, or at a 45-degree angle.
+
+
Writes a VIA statement for a PINS PORT statement. Either a LAYER, POLYGON, or VIA statement can be specified for a pin port. This routine is optional and is called after defwPinPort.
+
+
+ int defwPinPortVia(- const char*
viaName, - int xl,
- int yl)
+
+
+
+
+ viaName
+
+
Specifies the via name. The via name must have been defined in the associated LEF files or this DEF file before this function is called.
+
+
+ x1 y1
+
+
Specifies the point at which the via is to be placed.
+
+
Writes a SUPPLYSENSITIVITY statement for a pin in the PINS statement. The SUPPLYSENSITIVITY statement is optional and can be used only once for each pin in the PINS statement.
+
+
+ defwPinSupplySensitivity( - const char*
pinName)
+
+
+
+
+ pinName
+
+
Specifies that if this pin is connected to a tie-high connection (such as 1'b1 in Verilog), it should connect to the same net to which pinName is connected.
+
+
Writes a VIA statement for a pin in the PINS statement. The VIA statement is optional and can be used more than once for a pin.
+
+
+ int defwPinVia(- const char*
viaName, - int xl,
- int yl)
+
+
+
+
+ viaName
+
+
Specifies the via name. The via name must have been defined in the associated LEF files or this DEF file before this function is called.
+
+
+ x1 y1
+
+
Specifies the point at which the via is to be placed.
+
+
The following example shows a callback routine with the type defwPinCbkType.
+
+ int pinCB (defwCallbackType_e type,- defiUserData userData) {
- int res;
- // Check if the type is correct
- if (type != defwPinCbkType) {
- printf("Type is not defwPinCbkType, terminate
- writing.\n");
- return 1;
- }
+
+
+ res = defwStartPins(1);- CHECK_RES(res);
- res = defwPin("scanpin", "SCAN", 0, "INPUT", NULL, NULL, 0,
- 0, -1, NULL, 0, 0, 0, 0);
- CHECK_RES(res);
- res = defwEndPins();
- CHECK_RES(res);
- return 0;}
+
+
+
The Pin Properties routines write a DEF PINPROPERTIES statement. The PINPROPERTIES statement is optional and can be used only once in a DEF file. For syntax information about the DEF PINPROPERTIES statement, see "Pin Properties" in the LEF/DEF Language Reference.
+
You must begin and end a DEF PINPROPERTIES statement with the defwStartPinProperties and defwEndPinProperties routines. You must define all pin properties between these routines. Each property definition must start with a defwPinProperty routine.
+
If the DEF file contains a PINS statement, the PINPROPERTIES statement must follow it. For more information about the DEF PINS writer routines, see "Pins".
+
For examples of the routines described here, see"Pin Properties Example".
+
Note: To write a PROPERTY statement for a pin, you must use one of the property routines immediately following the defwPinProperty routine, which specifies the pin name. For more information, see "Property Statements".
+
All routines return 0 if successful.
+
+
Starts a PINPROPERTIES statement.
+
+
+ int defwStartPinProperties(- int
count)
+
+
+
+
+ count
+
+
Specifies the number of pin properties defined in the PINPROPERTIES statement.
+
+
Ends the PINPROPERTIES statement. If count specified in defwStartPinProperties is not the same as the actual number of defwPinProperty routines used, defwEndPinProperties returns DEFW_BAD_DATA. This routine does not require any arguments.
+
+
+ int defwEndPinProperties(void)
+
+
+
Begins a property definition. This routine is required and can be used more than once in a PINPROPERTIES statement.
+
+
+ int defwPinProperty(- const char*
component, - const char* pinName)
+
+
+
+
+ component
+
+
Specifies either the string to use for the component pin name, or the keyword PIN.
+
+
+ pinName
+
+
Specifies the I/O pin name. Specify this value only when component is set to PIN.
+
+
The following example shows a callback routine with the type defwPinPropCbkType.
+
+ int pinpropCB (defwCallbackType_e type,- defiUserData userData) {
- int res;
- // Check if the type is correct
- if (type != defwPinPropCbkType) {
- printf("Type is not defwPinPropCbkType, terminate
- writing.\n");
- return 1;
- }
- res = defwStartPinProperties(2);
- CHECK_RES(res);
- res = defwPinProperty("cell1", "PB1");
- CHECK_RES(res);
- res = defwStringProperty("dpBit", "1");
- CHECK_RES(res);
- res = defwRealProperty("realProperty", 3.4);
- CHECK_RES(res);
- res = defwPinProperty("cell2", "vdd");
- CHECK_RES(res);
- res = defwIntProperty("dpIgnoreTerm", 2);
- CHECK_RES(res);
- res = defwEndPinProperties();
- CHECK_RES(res);
- return 0;}
+
+
+
The Property Definitions routines write a DEF PROPERTYDEFINITIONS statement. The PROPERTYDEFINITIONS statement is optional and can be used only once in a DEF file. For syntax information about the DEF PROPERTYDEFINITIONS statement, see Property Definitions in the LEF/DEF Language Reference.
+
You must begin and end a DEF PROPERTYDEFINITIONS statement with the defwStartPropDef and defwEndPropDef routines. You must define all properties between these routines.
+
If the DEF file contains a HISTORY statement, the PROPERTYDEFINITIONS statement must follow it. For more information about the DEF HISTORY routine, see "History".
+
For examples of the routines described here, see "Property Definitions Example".
+
All routines return 0 if successful.
+
+
Starts a PROPERTYDEFINITIONS statement. This routine does not require any arguments.
+
+
+ int defwStartPropDef(void)
+
+
+
Ends the PROPERTYDEFINITIONS statement. This routine does not require any arguments.
+
+
+ int defwEndPropDef(void)
+
+
+
Writes an integer property definition. This routine is optional and can be used more than once in a PROPERTYDEFINITIONS statement.
+
+
+ int defwIntPropDef(- const char*
objType,- const char* propName,
- double leftRange,
- double rightRange,
- const char* value)
+
+
+
+
+ objType
+
+
Specifies the type of object for which you can define properties.
Value: DESIGN, COMPONENT, NET, SPECIALNET, GROUP, ROW, COMPONENTPIN, NONDEFAULTRULE, or REGION
+
+
+ propName
+
+
Specifies a unique property name for the object type.
+
+
+ leftRange rightRange
+
+
Optional arguments that limit integer property values to a specified range. That is, the value must be greater than or equal to leftRange and less than or equal to rightRange. Specify 0 to ignore these arguments.
+
+
+ value
+
+
Optional argument that specifies a numeric value for an object. Specify NULL to ignore this argument.
+
+
Writes a real property definition. This routine is optional and can be used more than once in a PROPERTYDEFINITIONS statement.
+
+
+ int defwRealPropDef(- const char*
objType,- const char* propName,
- double leftRange,
- double rightRange,
- const char* value)
+
+
+
+
+ objType
+
+
Specifies the type of object for which you can define properties.
Value: Specify DESIGN, COMPONENT, NET, SPECIALNET, GROUP, ROW, COMPONENTPIN, NONDEFAULTRULE, or REGION
+
+
+ propName
+
+
Specifies a unique property name for the object type.
+
+
+ leftRange rightRange
+
+
Optional arguments that limit real number property values to a specified range. That is, the value must be greater than or equal to leftRange and less than or equal to rightRange. Specify 0 to ignore these arguments.
+
+
+ value
+
+
Optional argument that specifies a numeric value for an object. Specify NULL to ignore this argument.
+
+
Writes a string property definition. This routine is optional and can be used more than once in a PROPERTYDEFINITIONS statement.
+
+
+ int defwStringPropDef(- const char*
objType,- const char* propName,
- double leftRange,
- double rightRange,
- const char* value)
+
+
+
+
+ objType
+
+
Specifies the type of object for which you can define properties.
Value: DESIGN, COMPONENT, NET, SPECIALNET, GROUP, ROW, COMPONENTPIN, NONDEFAULTRULE, or REGION
+
+
+ propName
+
+
Specifies a unique property name for the object type.
+
+
+ leftRange rightRange
+
+
Optional arguments that limit string property values to a specified range. That is, the value must be greater than or equal to leftRange and less than or equal to rightRange. Specify 0 to ignore these arguments.
+
+
+ value
+
+
Optional argument that specifies a character value for an object. Specify NULL to ignore this argument.
+
+
The following example shows a callback routine with the type defwPropDefCbkType.
+
+ int pinCB (defwCallbackType_e type,- defiUserData userData) {
- int res;
- // Check if the type is correct
- if (type != defwPropDefCbkType) {
- printf("Type is not defwPropDefCbkType, terminate
- writing.\n");
- return 1;
- }
- res = defwStartPropDef();
- check_res(res);
- defwAddComment("defwPropDef is broken into 3 routines,
- defwStringPropDef");
- defwAddComment("defwIntPropDef, and defwRealPropDef");
- res = defwStringPropDef("REGION", "scum", 0, 0, NULL);
- CHECK_RES(res);
- res = defwIntPropDef("REGION", "center", 0, 0, NULL);
- CHECK_RES(res);
- res = defwRealPropDef("REGION", "area", 0, 0, NULL);
- CHECK_RES(res);
- res = defwStringPropDef("GROUP", "ggrp", 0, 0, NULL);
- CHECK_RES(res);
- res = defwEndPropDef();
- CHECK_RES(res);
- return 0;}
+
+
+
The Property Statements routines write PROPERTY statements when used after the defwRow, defwRegion, defwComponent, defwPin, defwPinProperty, defwSpecialNet, defwNet, defwNonDefaultRule, or defwGroup routines.
+
For examples of the routines described here, see "Property Statements Example".
+
+
Writes a PROPERTY statement with an integer value. This statement is optional and can be used more than once.
+
+
+ int defwIntProperty(- const char*
propName,- int propValue)
+
+
+
+
+ propName
+
+
Specifies a unique property name for the object.
+
+
+ propValue
+
+
Specifies an integer value for the object.
+
+
Writes a PROPERTY statement with a real number value. This statement is optional and can be used more than once.
+
+
+ int defwRealProperty(- const char*
propName,- double propValue)
+
+
+
+
+ propName
+
+
Specifies a unique property name for the object.
+
+
+ propValue
+
+
Specifies a real value for the object.
+
+
Writes a PROPERTY statement with a string value. This statement is optional and can be used more than once.
+
+
+ int defwStringProperty(- const char*
propName,- const char* propValue)
+
+
+
+ propName
+
+
Specifies a unique property name for the object.
+
+
+ propValue
+
+
Specifies a string value for the object.
+
+
The following example shows how to create a property inside a Rows callback routine.
+
+ int rowCB (defwCallbackType_e type,- defiUserData userData) {
- int res;
- ...
- res = defwRealProperty("minlength", 50.5);
- CHECK_RES(res);
- res = defwStringProperty("firstName", "Only");
- CHECK_RES(res);
- res = defwIntProperty("idx", 1);
- CHECK_RES(res);
- ...
- return 0;}
+
+
+
The Regions routines write a DEF REGIONS statement. The REGIONS statement is optional and can be used only once in a DEF file. For syntax information about the DEF REGIONS statement, see "Regions" in the LEF/DEF Language Reference.
+
You must begin and end a DEF REGIONS statement with the defwStartRegions and defwEndRegions routines. You must define all regions between these routines. Each region definition must start with a defwRegions routine.
+
If the DEF file contains a VIAS statement, the REGIONS statement must follow it. For more information about the DEF VIAS routines, see "Vias".
+
For examples of the routines described here, see "Regions Example".
+
Note: To write a PROPERTY statement for the region, you must use one of the property routines immediately following the defwRegion routines. For more information, see "Property Statements".
+
All routines return 0 if successful.
+
+
Starts a REGIONS statement.
+
+
+ int defwStartRegions(- int
count)
+
+
+
+
+ count
+
+
Specifies the number of regions defined in the REGIONS statement.
+
+
Ends the REGIONS statement. If count specified in defwStartRegions is not the same as the actual number of defwRegionName routines used, this routine returns DEFW_BAD_DATA. This routine does not require any arguments.
+
+
+ int defwEndRegions(void)
+
+
+
Starts a region description. This routine must be called the number of times specified in the defwStartRegions count argument.
+
+
+ int defwRegionName(- const char*
regionName)
+
+
+
+
+ regionName
+
+
Specifies the name of the region.
+
+
Specifies the set of points bounding the region. This routine is required and can be used more than once to define a region.
+
+
+ int defwRegionPoints(- int
xl,- int yl,
- int xh,
- int yh)
+
+
+
+
+ xl yl xh yh
+
+
Specifies the corner points of the region.
+
+
Writes a TYPE statement. The TYPE statement is optional and can be used only once per region.
+
+
+ int defwRegionType(- const char*
type)
+
+
+
+
+ type
+
+
Specifies the region type.
Value: Specify one of the following:
+
+
+
The following example shows a callback routine with the type defwRegionCbkType.
+
+ int regionCB (defwCallbackType_e type,- defiUserData userData) {
- int res;
- // Check if the type is correct
- if (type != defwRegionCbkType) {
- printf("Type is not defwRegionCbkType, terminate
- writing.\n");
- return 1;
- }
- res = defwStartRegions(1);
- CHECK_RES(res);
- res = defwRegionName("region2");
- CHECK_RES(res);
- res = defwRegionPoints(4000, 0, 5000, 1000);
- CHECK_RES(res);
- res = defwStringProperty("scum", "on bottom");
- CHECK_RES(res);
- res = defwEndRegions();
- CHECK_RES(res);
- return 0;}
+
+
+
The Row routines write a DEF ROWS statement. The ROWS statement is optional and can be used more than once in a DEF file. For syntax information about the DEF ROWS statement, see "Rows" in the LEF/DEF Language Reference.
+
If the DEF file contains a DIEAREA statement, the ROWS statement must follow it. For more information about the DEF DIEAREA writer routines, see "Die Area".
+
Note: To write a PROPERTY statement for the row, you must use one of the property routines immediately following the defwRow routine. For more information, see "Property Statements".
+
All routines return 0 if successful.
+
+
Writes a ROWS statement.
+
+
+ int defwRow(- const char*
rowName,- const char* rowType,
- int origX,
- int origY,
- int orient,
- int do_count,
- int do_increment,
- int xstep,
- int ystep)
+
+
+
+
+ do_count
+
+
Optional argument that specifies the number of columns in the array pattern. Specify 0 to ignore this argument.
+
+
+ do_increment
+
+
Optional argument that specifies the number of rows in the array pattern. Specify 0 to ignore this argument.
+
+
+ orient
+
+
Specifies the orientation of all sites in the row.
Value: 0 to 7. For more information, see "Orientation Codes"
+
+
+ rowName
+
+
Specifies the row name for this row.
+
+
+ rowType
+
+
Specifies the site to use for the row.
+
+
+ stepX stepY
+
+
Optional arguments that specify the spacing between the columns and rows. Specify 0 to ignore these arguments.
+
+
+ x_orig y_orig
+
+
Specifies the location in the design of the first site in the row.
+
+
Also writes a ROWS statement. This routine is the same as the defwRow routine, with the exception of the orient argument, which takes a string instead of an integer.
+
+
+ int defwRowStr (- const char*
rowName,- const char* rowType,
- int x_orig,
- int y_orig,
- const char* orient,
- int do_count,
- int do_increment,
- int xstep,
- int ystep)
+
+
+
+
+ do_count
+
+
Optional argument that specifies the number of columns in the array pattern. Specify 0 to ignore this argument.
+
+
+ do_increment
+
+
Optional argument that specifies the number of rows in the array pattern. Specify 0 to ignore this argument.
+
+
+ orient
+
+
Specifies the orientation of all sites in the row.
Value: N, W, S, E, FN, FW, FS, or FE
+
+
+ rowName
+
+
Specifies the row name for this row.
+
+
+ rowType
+
+
Specifies the site to use for the row.
+
+
+ stepX stepY
+
+
Optional argument that specifies the spacing between the columns and rows. Specify 0 to ignore these arguments.
+
+
+ x_orig y_orig
+
+
Specifies the location in the design of the first site in the row.
+
+
The following example shows a callback routine with the type defwRowCbkType.
+
+ int rowCB (defwCallbackType_e type,- defiUserData userData) {
- int res;
- nt regionCB (defwCallbackType_e type,
- defiUserData userData) {
- int res;
- // Check if the type is correct
- if (type != defwRowCbkType) {
- printf("Type is not defwRowCbkType, terminate
- writing.\n");
- return 1;
- }
- res = defwRow("ROW_9", "CORE", -177320, -111250, 5, 911, 1,
- 360, 0);
- CHECK_RES(res);
- res = defwRealProperty("minlength", 50.5);
- CHECK_RES(res);
- res = defwStringProperty("firstName", "Only");
- CHECK_RES(res);
- res = defwIntProperty("idx", 1);
- CHECK_RES(res);
- res = defwRow("ROW_10", "CORE1", -19000, -11000, 6, 1, 100,
- 0, 600);
- CHECK_RES(res);
- return 0;}
+
+
+
The Scan Chain routines write a DEF SCANCHAINS statement. The SCANCHAINS statement is optional and can be used only once in a DEF file. For syntax information about the DEF SCANCHAINS statement, see "Scan Chains" in the LEF/DEF Language Reference.
+
You must begin and end a DEF SCANCHAINS statement with the defwStartScanchains and defwEndScanchains routines. You must define all scan chains between these routines. Each scan chain specification must start with a defwScanchains routine.
+
For examples of the routines described here, see "Scan Chain Example".
+
Note: To write a PROPERTY statement for the region, you must use one of the property routines following defwScanchains. For more information, see "Property Statements".
+
All routines return 0 if successful.
+
+
Starts the SCANCHAINS statement.
+
+
+ int defwStartScanchains(- int
count)
+
+
+
+
+ count
+
+
Specifies the number of scan chains defined in the SCANCHAINS statement.
+
+
Ends the SCANCHAINS statement. If count specified in the defwStartScanChains routine is not the same as the actual number of defwScanChain routines used, this routine returns DEFW_BAD_DATA.
+
+
+ int defwEndScanchains()
+
+
+
Starts a scan chain specification. This routine must be used the number of times specified in the defwStartScanchains count argument.
+
+
+ int defwScanchain(- const char*
chainName)
+
+
+
+
+ chainName
+
+
Specifies the name of the scan chain.
+
+
Writes a COMMONSCANPINS statement. The COMMONSCANPINS statement is optional and can be used only once for each scan chain.
+
+
+ int defwScanchainCommonscanpins(- const char*
inst1,- const char* pin1,
- const char* inst2,
- const char* pin2)
+
+
+
+
+ inst1 inst2
+
+
Optional arguments that specify the common scan-in and scan-out pins. The inst1 argument can have the value IN or OUT. The inst2 argument can have the remaining IN or OUT value not specified in the inst1 argument. Specify NULL to ignore either of these arguments.
+
+
+ pin1 pin2
+
+
Specifies the names of the scan-in and scan-out pins that correspond with the value of inst1 and inst2. Specify NULL to ignore either of these arguments.
+
Note: The inst1/pin1 and inst2/pin2 arguments must be used as pairs. If you specify NULL for either inst1 or inst2, you must also specify NULL for the corresponding pin1 or pin2. Similarly, if you specify IN or OUT for inst1 or inst2, you must specify a pin name for the corresponding pin1 or pin2.
+
+
Writes a FLOATING statement. The FLOATING statement is optional and can be used more than once for each scan chain.
+
+
+ int defwScanchainFloating(- const char*
floatingComp, - const char* inst1,
- const char* pin1,
- const char* inst2,
- const char* pin2)
+
+
+
+
+ floatingComp
+
+
Specifies the floating component name.
+
+
+ inst1 inst2
+
+
Optional arguments that specify the in and out pins for the component. The inst1 argument can have the value IN or OUT. The inst2 argument can have the remaining IN or OUT value not specified in the inst1 argument. Specify NULL to ignore either of these arguments.
+
+
+ pin1 pin2
+
+
Specifies the names of the in and out pins that correspond with the value of inst1 and inst2. Specify NULL to ignore either of these arguments.
+
Note: The inst1/pin1 and inst2/pin2 arguments must be used as pairs. If you specify NULL for either inst1 or inst2, you must also specify NULL for the corresponding pin1 or pin2. Similarly, if you specify IN or OUT for inst1 or inst2, you must specify a pin name for the corresponding pin1 or pin2.
+
+
Writes a FLOATING statement that contains BITS information. The FLOATING statement is optional and can be used more than once for each scan chain.
+
+
+ int defwScanchainFloatingBits(- const char*
floatingComp, - const char* inst1,
- const char* pin1,
- const char* inst2,
- const char* pin2,int bits)
+
+
+
+
+ floatingComp
+
+
Specifies the floating component name.
+
+
+ inst1 inst2
+
+
Optional arguments that specify the in and out pins for the component. The inst1 argument can have the value IN or OUT. The inst2 argument can have the remaining IN or OUT value not specified in the inst1 argument. Specify NULL to ignore either of these arguments.
+
+
+ pin1 pin2
+
+
Specifies the names of the in and out pins that correspond with the value of inst1 and inst2. Specify NULL to ignore either of these arguments.
Note: The inst1/pin1 and inst2/pin2 arguments must be used as pairs. If you specify NULL for either inst1 or inst2, you must also specify NULL for the corresponding pin1 or pin2. Similarly, if you specify IN or OUT for inst1 or inst2, you must specify a pin name for the corresponding pin1 or pin2.
+
+
+ bits
+
+
Optional argument that specifies the sequential bit length of any chain element. Specify -1 to ignore this argument.
+
+
Writes an ORDERED statement. The ORDERED statement specifies an ordered list of scan chains. The ORDERED statement is optional and can be used more than once for each scan chain.
+
+
+ int defwScanchainOrdered(- const char*
name1,- const char* inst1,
- const char* pin1,
- const char* inst2,
- const char* pin2,
- const char* name2,
- const char* inst3,
- const char* pin3,
- const char* inst4,
- const char* pin4)
+
+
+
+
+ name1 name2
+
+
Specifies the fixed component names. You must specify both name1 and name2 the first time you call this routine within a scanchain. If you call this routine multiple times within a scanchain, you only need to specify name1.
+
+
+ inst1 inst2 inst3 inst4
+
+
Optional arguments that specify the scan-in and scan-out pins for the components. The inst1 and inst3 arguments can have the value IN or OUT. The inst2 and inst4 arguments can have the remaining IN or OUT not specified in the inst1 or inst3 arguments. Specify NULL to ignore any of these arguments.
+
+
+ pin1 pin2 pin3 pin4
+
+
Specifies the names of the scan-in and scan-out pins that correspond with the inst* values. Specify NULL to ignore any of these arguments.
Note: The inst*/pin* arguments must be used as pairs. If you specify NULL for inst1, you must also specify NULL for the corresponding pin1. Similarly, if you specify IN or OUT for inst1, you must specify a pin name for the corresponding pin1.
+
+
Writes an ORDERED statement that contains BITS information. The ORDERED statement specifies an ordered list of scan chains. The ORDERED statement is optional and can be used more than once for each scan chain.
+
+
+ int defwScanchainOrderedBits(- const char*
name1,- const char* inst1,
- const char* pin1,
- const char* inst2,
- const char* pin2,
- int bits1,
- const char* name2,
- const char* inst3,
- const char* pin3,
- const char* inst4,
- const char* pin4,
- int bits2)
+
+
+
+
+ name1 name2
+
+
Specifies the fixed component names. You must specify both name1 and name2 the first time you call this routine within a scanchain. If you call this routine multiple times within a scanchain, you only need to specify name1.
+
+
+ inst1 inst2 inst3 inst4
+
+
Optional arguments that specify the scan-in and scan-out pins for the components. The inst1 and inst3 arguments can have the value IN or OUT. The inst2 and inst4 arguments can have the remaining IN or OUT not specified in the inst1 or inst3 arguments. Specify NULL to ignore any of these arguments.
+
+
+ pin1 pin2 pin3 pin4
+
+
Specifies the names of the scan-in and scan-out pins that correspond with the inst* values. Specify NULL to ignore any of these arguments.
Note: The inst*/pin* arguments must be used as pairs. If you specify NULL for inst1, you must also specify NULL for the corresponding pin1. Similarly, if you specify IN or OUT for inst1, you must specify a pin name for the corresponding pin1.
+
+
+ bits*
+
+
Optional argument that specifies the sequential bit length of any chain element. Specify -1 to ignore this argument.
+
+
Writes a PARTITION statement. The PARTITION statement is optional and can be used only once to define a scan chain.
+
+
+ int defwScanchainPartition(- const char*
name,- int maxBits)
+
+
+
+
+ name
+
+
Specifies a partition name. A partition name associates each chain with a partition group, which determines their compatibility for repartitioning by swapping elements between them. Chains with matching PARTITION names constitute a swap-compatible group.
+
+
+ maxBits
+
+
Optional argument that specifies the maximum bit length that the chain can grow to in the partition. Specify -1 to ignore this argument.
+
+
Writes a START statement. The START statement is required and can be used only once to define a scan chain.
+
+
+ int defwScanchainStart(- const char*
inst,- const char* pin)
+
+
+
+
+ inst
+
+
Specifies the start of the scan chain. You can specify a component name, or the keyword PIN to specify an I/O pin.
+
+
+ pin
+
+
Specifies the out pin name. If you do not specify the out pin, DEF uses the out pin specified for common scan pins. If the scan chain starts at an I/O pin, you must specify the I/O pin name as the out pin.
+
+
Writes a STOP statement. The STOP statement is required and can be used only once to define a scan chain.
+
+
+ int defwScanchainStop(- const char*
inst,- const char* pin)
+
+
+
+
+ inst
+
+
Specifies the end point of the scan chain. You can specify a component name, or the keyword PIN to specify an I/O pin.
+
+
+ pin
+
+
Specifies the in pin name. If you do not specify the in pin, DEF uses the in pin specified for common scan pins. If the scan chain starts at an I/O pin, you must specify the I/O pin name as the in pin.
+
+
The following example shows a callback routine with the type defwScanchainCbkType.
+
+ int scanchainCB (defwCallbackType_e type,- defiUserData userData) {
- int res;
- // Check if the type is correct
- if (type != defwScanchainCbkType) {
- printf("Type is not defwScanchainCbkType, terminate
- writing.\n");
- return 1;
- }
+
+
+ res = defwStartScanchains(1);- CHECK_RES(res);
- res = defwScanchain("the_chain");
- CHECK_RES(res);
- res = defwScanchainCommonscanpins("IN", "PA1", "OUT", "PA2")
- CHECK_RES(res);
- res = defwScanchainStart("PIN", "scanpin");
- CHECK_RES(res);
- res = defwScanchainStop("cell4", "PA2");
- CHECK_RES(res);
- res = defwScanchainOrdered("cell2", "IN", "PA0", NULL
- NULL, "cell1", "OUT", "P10", NULL,
- NULL);
- CHECK_RES(res);
- res = defwScanchainFloating("scancell1", "IN", "PA0",
- NULL, NULL)
- CHECK_RES(res);
- res = defwEndScanchain();
- CHECK_RES(res);
- return 0;}
+
+
+
Special Nets routines write a DEF SPECIALNETS statement. The SPECIALNETS statement is optional and can be used only once in a DEF file. For syntax information about the DEF SPECIALNETS statement, see "Special Nets" in the LEF/DEF Language Reference.
+
A SPECIALNETS statement must start and end with the defwStartSpecialNets and defwEndSpecialNets routines. All special nets must be defined between these routines. Each individual special net must start and end with the defwSpecialNet and defwSpecialNetEndOneNet routines.
+
For examples of the routines described here, see "Special Nets Example".
+
In addition to the routines in this section, you can also include routines that form a specialWiring statement and a PROPERTY statement. For information about these routines, see "Special Wiring" and "Property Statements".
+
All routines return 0 if successful.
+
+
Starts the SPECIALNETS statement.
+
+
+ int defwStartSpecialNets(- int
count)
+
+
+
+
+ count
+
+
Specifies the number of special nets defined in the SPECIALNETS statement.
+
+
Ends the SPECIALNETS statement. If count specified in defwStartSpecialNets is not the same as the actual number of defwSpecialNet routines used, this routine returns DEFW_BAD_DATA.
+
+
+ int defwEndSpecialNets()
+
+
+
Starts a special net description. Each special net in the SPECIALNETS statement must start and end with defwSpecialNet and defwSpecialNetEndOneNet.
+
+
+ int defwSpecialNet(- const char*
netName)
+
+
+
+
+ netName
+
+
Specifies the name of the net to define.
+
+
Ends the special net description started with defwSpecialNet. Each special net in the SPECIALNETS statement must start and end with defwSpecialNet and defwSpecialNetEndOneNet.
+
+
+ int defwSpecialNetEndOneNet()
+
+
+
Specifies the special pin and component information for the special net. This routine is optional and can be used only once for each special net in the SPECIALNETS statement.
+
+
+ int defwSpecialNetConnection(- const char*
compNameRegExpr, - const char* pinName,
- int synthesized)
+
+
+
+
+ compNameRegExpr
+
+
Specifies a component name or a regular expression that specifies a set of component names.
+
+
+ pinName
+
+
Specifies the name of the special pin on the net that corresponds to the component. During evaluation of the regular expression, components that match the expression but do not have a pin named pinName are ignored.
+
+
+ synthesized
+
+
Optional argument that marks the pin as part of a synthesized scan chain.
Value: Specify one of the following:
+
+
+
Writes an ESTCAP statement. The ESTCAP statement is optional and can be used only once for each special net in the SPECIALNETS statement.
+
+
+ int defwSpecialNetEstCap(- double
wireCap)
+
+
+
+
+ wireCap
+
+
Specifies the estimated wire capacitance for the net. ESTCAP can be loaded with simulation data to generate net constraints for timing-driven layout.
+
+
Writes a FIXEDBUMP statement that indicates the bump cannot be assigned to a different pin. The FIXEDBUMP statement is optional and can be used only once for each special net in the SPECIALNETS statement.
+
+
+ defwSpecialNetFixedBump()
+
+
+
Writes an ORIGINAL statement. The ORIGINAL statement is optional and can be used only once for each special net in the SPECIALNETS statement.
+
+
+ int defwSpecialNetOriginal(- const char*
netName)
+
+
+
+
+ netName
+
+
Specifies the original net partitioned to create multiple nets, including the current net.
+
+
Writes a PATTERN statement. The PATTERN statement is optional and can be used only once for each special net in the SPECIALNETS statement.
+
+
+ int defwSpecialNetPattern(- const char*
name)
+
+
+
+
+ name
+
+
Specifies the routing pattern used for the net.
Value: Specify one of the following:
+
+
+
Writes a SOURCE statement. The SOURCE statement is optional and can only be used once for each special net in the SPECIALNETS statement.
+
+
+ int defwSpecialNetSource(- const char*
name)
+
+
+
+
+ name
+
+
Specifies the source of the net.
Value: Specify one of the following:
+
+
+
Writes a USE statement. The USE statement is optional and can be used only once for each special net in the SPECIALNETS statement.
+
+
+ int defwSpecialNetUse(- const char*
name)
+
+
+
+
+ name
+
+
Specifies how the net is used.
Value: Specify one of the following:
+
+
+
Writes a VOLTAGE statement. The VOLTAGE statement is optional and can be used only once for each special net in the SPECIALNETS statement.
+
+
+ int defwSpecialNetVoltage(- double
volts)
+
+
+
+
+ volts
+
+
Specifies the voltage for the net as an integer in units of .001 volts. For Example, 1.5 v is equal to 1500 in DEF.
+
+
Writes a WEIGHT statement. The WEIGHT statement is optional and can be used only once for each special net in the SPECIALNETS statement.
+
+
+ int defwSpecialNetWeight(- double
weight)
+
+
+
+
+ weight
+
+
Specifies the weight of the net. Automatic layout tools attempt to shorten the lengths of nets with high weights. Do not specify a net weight larger than 10, or assign weights to more than 3 percent of the nets in a design.
+
+
The following example shows a callback routine with the type defwSNetCbkType. This example only shows the usage of some functions related to special net.
+
+ int snetCB (defwCallbackType_e type,- defiUserData userData) {
- int res;
- const char **coorX, **coorY;
+
+
+ // Check if the type is correct- if (type != defwSNetCbkType) {
- printf("Type is not defwSNetCbkType, terminate
- writing.\n");
- return 1;
- }
- res = defwStartSpecialNets(2);
- CHECK_RES(res);
- res = defwSpecialNet("net1");
- CHECK_RES(res);
- res = defwSpecialNetConnection("cell1", "VDD", 0);
- CHECK_RES(res);
- res = defwSpecialNetWidth("M1", 200);
- CHECK_RES(res);
- res = defwSpecialNetVoltage(3.2);
- CHECK_RES(res);
- res = defwSpecialNetSpacing("M1", 200, 190, 210);
- CHECK_RES(res);
- res = defwSpecialNetSource("TIMING");
- CHECK_RES(res);
- res = defwSpecialNetOriginal("VDD");
- CHECK_RES(res);
- res = defwSpecialNetUse("POWER");
- CHECK_RES(res);
- res = defwSpecialNetWeight(30);
- CHECK_RES(res);
- res = defwStringProperty("contype", "star");
- CHECK_RES(res);
- res = defwIntProperty("ind", 1);
- CHECK_RES(res);
- res = defwRealProperty("maxlength", 12.13);
- CHECK_RES(res);
- res = defwSpecialNetEndOneNet();
- CHECK_RES(res);
- res = defwSpecialNet("VSS");
- CHECK_RES(res);
- res = defwSpecialNetConnection("cell1", "GND", 0);
- CHECK_RES(res);
- ...
- // An example on Special Wiring can be found under the
- // Special Wiring section.
- ...
- // An example on SpecialNet Shield can be found under the
- // Shielded Routing section.
- res = defwSpecialNetPattern("STEINER");
- CHECK_RES(res);
- res = defwSpecialNetEstCap(100);
- CHECK_RES(res);
- res = defwSpecialNetEndOneNet();
- CHECK_RES(res);
- res = defwEndSpecialNets();
- CHECK_RES(res);
- return 0;}
+
+
+
Special wiring routines form a specialWiring statement that can be used to define the wiring for both routed and shielded nets.The specialWiring statement is optional and can be used more than once in a SPECIALNET statement. For syntax information about the DEF SPECIALNETS statement, see "Special Nets" in the LEF/DEF Language Reference.
+
A specialWiring statement can include routines to define either rectangles, polygons, or a path of points to create the routing for the nets. Each path of points must start and end with the defwSpecialNetPathStart and defwSpecialNetPathEnd routines. If defined, a specialWiring statement must be included between the defwSpecialNet and defwEndOneNet routines.
+
For examples of the routines described here, see "Special Wiring Example".
+
All routines return 0 if successful.
+
+
Starts a specialWiring statement. Each specialWiring statement must start and end with defwSpecialNetPathStart and defwSpecialNetPathEnd.
+
+
+ int defwSpecialNetPathStart(- const char*
type)
+
+
+
+
+ type
+
+
Specifies the special wiring type. If no wiring is specified for a particular net, the net is unrouted.
Value: Specify one of the following:
+
+
+
Ends the specialWiring statement. Each specialWiring statement must start and end with defwSpecialNetPathStart and defwSpecialNetPathEnd.
+
+
+ int defwSpecialNetPathEnd()
+
+
+
Writes a LAYER statement. Either a LAYER, POLYGON, or RECT statement is required for each specialWiring statement.The LAYER statement can be used more than once for each specialWiring statement.
+
+
+ int defwSpecialNetPathLayer(- const char*
layerName)
+
+
+
+
+ layerName
+
+
Specifies the layer on which the wire lies.
+
+
Defines the center line coordinates of the route on the layer specified with defwSpecialNetPathLayer. Either this routine or defwSpecialNetPathPointWithWireExt is required with a LAYER statement, and can be used only once for each LAYER statement in a specialWiring statement.
+
+
+ int defwSpecialNetPathPoint(- int
numPts, - const char** pointX,
- const char** pointY)
+
+
+
+
+ numPts
+
+
Specifies the number of points in the route.
+
+
+ pointX pointY
+
+
Specifies the route coordinates.
+
+
Defines the center line coordinates and wire extension value of the route on the layer specified with defwSpecialNetPathLayer. Either this routine or defwSpecialNetPathPoint is required with a LAYER statement, and can be used only once for each LAYER statement in a specialWiring statement.
+
+
+ defwSpecialNetPathPointWithWireExt( - int
numPoints,- const char** pointX,
- const char** pointY,
- const char** value)
+
+
+
+
+ numPoints
+
+
Specifies the number of points in the route.
+
+
+ pointX pointY
+
+
Specifies the route coordinates.
+
+
+ value
+
+
Optional argument that specifies the amount by which the wire is extended past the endpoint of the segment. Specify NULL to ignore this argument.
+
+
Writes a SHAPE statement. The SHAPE statement is optional with a LAYER statement, and can be used only once for each LAYER statement in a specialWiring statement.
+
+
+ int defwSpecialNetPathShape(- const char*
shapeType)
+
+
+
+
+ shapeType
+
+
Specifies a wire with special connection requirements because of its shape.
Value: RING, PADRING, BLOCKRING, STRIPE, FOLLOWPIN, IOWIRE, COREWIRE, BLOCKWIRE, FILLWIRE, BLOCKAGEWIRE, or DRCFILL
+
+
Writes a STYLE statement. A STYLE statement is optional with a LAYER statement, and can be used only once for each LAYER statement in a specialWiring statement.
+
+
+ defwSpecialNetStyle( - int
styleNum)
+
+
+
+
+ styleNum
+
+
Specifies a previously defined style number from the STYLES section in this DEF file.
+
+
Specifies a via for the special wiring. This routine is optional with a LAYER statement, and can be used only once for each LAYER statement in a specialWiring statement.
+
+
+ int defwSpecialNetPathVia(- const char*
viaName)
+
+
+
+
+ viaName
+
+
Specifies a via to place at the last point of the route.
+
+
Creates an array of power vias of the via specified with defwSpecialNetPathVia. This routine is optional with a LAYER statement, and can be used only once for each LAYER statement in a specialWiring statement.
+
+
+ int defwSpecialNetPathViaData(- int
numX,- int numY,
- int stepX,
- int stepY)
+
+
+
+
+ numX numY
+
+
Specifies the number of vias to create in the x and y directions.
+
+
+ stepX stepY
+
+
Specifies the step distance between vias, in the x and y directions
+
+
Writes a WIDTH statement. The WIDTH statement is required with a LAYER statement, and can be used only once for each LAYER statement in a specialWiring statement.
+
+
+ int defwSpecialNetPathWidth(- int
width)
+
+
+
+
+ width
+
+
Specifies the width for wires on the layer specified with defwSpecialNetPathLayer.
+
+
Specifies the name of a regular net to be shielded by the special net being defined. This routine is required if SHIELD is specified in the defwSpecialNetPathStart routine and can be used only once for each specialWiring statement.
+
+
+ int defwSpecialNetShieldNetName(- const char*
name)
+
+
+
+
+ name
+
+
Specifies the name of the regular net to be shielded.
+
+
Writes a POLYGON statement. Either a LAYER, POLYGON, or RECT statement is required for each specialWiring statement. The POLYGON statement can be used only once for each specialWiring statement.
+
+
+ defwSpecialNetPolygon( - const char*
layerName, - int num_polys,
- double* xl,
- double* yl)
+
+
+
+
+ layerName
+
+
Specifies the layer on which to generate the polygon.
+
+
+ num_polys
+
+
Specifies the number of polygon sides.
+
+
+ xl yl
+
+
Specifies a sequence of points to generate a polygon geometry on layerName. The polygon edges must be parallel to the x axis, the y axis, or at a 45-degree angle.
+
+
Writes a RECT statement. Either a LAYER, POLYGON, or RECT statement is required for each specialWiring statement. The RECT statement can be used only once for each specialWiring statement.
+
+
+ defwSpecialNetRect( - const char*
layerName, - int xl,
- int yl,
- int xh,
- int yh)
+
+
+
+
+ layerName
+
+
Specifies the layer on which to create the rectangle.
+
+
+ xl yl xh yh
+
+
Specifies the coordinates of two points which define the opposite corners of the rectangle.
+
+
The following example only shows the usage of some functions related to special wiring in a special net. This example is part of the special net callback routine.
+
+ int snetCB (defwCallbackType_e type,- defiUserData userData) {
- int res;
- const char **coorX, **coorY;
+
+
+ ...- res = defwSpecialNetPathStart("ROUTED");
- CHECK_RES(res);
- res = defwSpecialNetPathLayer("M1");
- CHECK_RES(res);
- res = defwSpecialNetPathWidth(250);
- CHECK_RES(res);
- res = defwSpecialNetPathShape("IOWIRE");
- CHECK_RES(res);
- coorX = (const char**)malloc(sizeof(char*)*3);
- coorY = (const char**)malloc(sizeof(char*)*3);
- coorX[0] = strdup("5");
- coorY[0] = strdup("15");
- coorX[1] = strdup("125");
- coorY[1] = strdup("*");
- coorX[2] = strdup("245");
- coorY[2] = strdup("*");
- res = defwSpecialNetPathPoint(3, coorX, coorY);
- CHECK_RES(res);
- res = defwSpecialNetPathEnd();
- free((char*)coorX[0]);
- free((char*)coorY[0]);
- free((char*)coorX[1]);
- free((char*)coorY[1]);
- ...
- return 0;}
+
+
+
The shielded routing routines form a shielded routing specification that can be used to define a special net. The shielded routing specification is optional and can be used more than once in a SPECIALNET statement. For syntax information about the DEF SPECIALNETS statement, see Special Nets in the LEF/DEF Language Reference.
+
You must begin and end a shielded routing specification with the defwSpecialNetShieldStart and defwSpecialNetShieldEnd routines. You must define all shielded routing between these routines. The shielded routing routines must be included between the defwSpecialNet and defwEndOneNet routines.
+
For examples of the routines described here, see "Shielded Routing Example".
+
+
Starts the shielded routing specification. This routine is optional and can be used only once to define each special net shield.
+
+
+ int defwSpecialNetShieldStart(- const char*
name)
+
+
+
+
+ name
+
+
Specifies the net shield name.
+
+
Ends the shielded routing specification.
+
+
+ int defwSpecialNetShieldEnd()
+
+
+
Writes a LAYER statement. The LAYER statement is required and can be used only once per special net shield.
+
+
+ int defwSpecialNetShieldLayer(- const char*
name)
+
+
+
+
+ name
+
+
Specifies the layer on which the wire lies.
+
+
Specifies the points of the wire path in the special net shield. This routine is optional and can be used more than once per special net shield.
+
+
+ int defwSpecialNetShieldPoint(- int
numPts,- const char** pointx,
- const char** pointy)
+
+
+
+
+ numPts
+
+
Specifies the number of points in the special net shield.
+
+
+ pointx pointy
+
+
Specifies the coordinate locations for the path points.
+
+
Writes a SHAPE statement. The SHAPE statement is optional and can be used only once per special net shield.
+
+
+ int defwSpecialNetShieldShape(- const char*
shapeType)
+
+
+
+
+ shapeType
+
+
Specifies a wire with special connection requirements because of its shape.
Value: RING, PADRING, BLOCKRING, STRIPE, FOLLOWPIN, IOWIRE, COREWIRE, BLOCKWIRE, FILLWIRE, or BLOCKAGEWIRE
+
+
Specifies a via name for the special net shield. This routine is optional and can be used more than once per special net shield.
+
+
+ int defwSpecialNetShieldVia(- const char*
name)
+
+
+
+
+ name
+
+
Specifies the via to place at the last specified path coordinate.
+
+
Creates an array of power vias of the via specified with the defwSpecialNetShieldVia routine. This routine is optional and can be used more than once for a special net.
+
+
+ int defwSpecialNetShieldViaData(- int
numX,- int numY,
- int stepX,
- int stepY)
+
+
+
+
+ numX numY
+
+
Specifies the number of vias to create in the x and y directions.
+
+
+ stepX stepY
+
+
Specifies the step distance in the x and y directions.
+
+
Writes a WIDTH statement. The WIDTH statement is required and can be used only once per special net shield.
+
+
+ int defwSpecialNetShieldWidth(- int
width)
+
+
+
+
+ width
+
+
Specifies the wire width.
+
+
The following example only shows the usage of some functions related to shielded routing in a special net. This example is part of the special net callback routine.
+
+ int snetCB (defwCallbackType_e type,- defiUserData userData) {
- int res;
- const char **coorX, **coorY;
- ...
- res = defwSpecialNetShieldStart("my_net");
- CHECK_RES(res);
- res = defwSpecialNetShieldLayer("M2");
- CHECK_RES(res);
- res = defwSpecialNetShieldWidth(90);
- CHECK_RES(res);
- coorX[0] = strdup("14100");
- coorY[0] = strdup("342440");
- coorX[1] = strdup("13920");
- coorY[1] = strdup("*");
- res = defwSpecialNetShieldPoint(2, coorX, coorY);
- CHECK_RES(res);
- res = defwSpecialNetShieldVia("M2_TURN");
- CHECK_RES(res);
- free((char*)coorX[0]);
- free((char*)coorY[0]);
- coorX[0] = strdup("*");
- coorY[0] = strdup("263200");
- res = defwSpecialNetShieldPoint(1, coorX, coorY);
- CHECK_RES(res);
- res = defwSpecialNetShieldVia("M1_M2");
- CHECK_RES(res);
- free((char*)coorX[0]);
- free((char*)coorY[0]);
- coorX[0] = strdup("2400");
- coorY[0] = strdup("*");
- res = defwSpecialNetShieldPoint(1, coorX, coorY);
- CHECK_RES(res);
- res = defwSpecialNetShieldEnd();
- ...
- return 0;}
+
+
+
Slots routines write a DEF SLOTS statement. The SLOTS statement is optional and can be used only once in a DEF file. For syntax information about the DEF SLOTS statement, see "Slots" in the LEF/DEF Language Reference.
+
The SLOTS statement must start and end with the defwStartSlots and defwEndSlots routines. All slots must be defined between these routines.
+
All routines return 0 if successful.
+
+
Starts a SLOTS statement.
+
+
+ int defwStartSlots(- int
count)
+
+
+
+
+ count
+
+
Specifies the number of defwSlotLayer routines in the SLOTS statement.
+
+
Ends the SLOTS statement.
+
+
+ int defwEndSlots()
+
+
+
Writes a LAYER statement. The LAYER statement is required for each slot and can be used more than once in a SLOTS statement.
+
+
+ int defwSlotLayer(- const char*
layerName)
+
+
+
+
+ layerName
+
+
Specifies the layer on which to create the slot.
+
+
Writes a POLYGON statement. Either a POLYGON or RECT statement is required with a LAYER statement. The POLYGON statement can be used more than once for each slot in the SLOTS statement.
+
+
+ defwSlotPolygon( - int
num_polys, - double* xl,
- double* yl)
+
+
+
+
+ num_polys
+
+
Specifies the number of polygon sides.
+
+
+ xl yl
+
+
Specifies a sequence of points to generate a polygon geometry. The polygon edges must be parallel to the x axis, the y axis, or at a 45-degree angle.
+
+
Writes a RECT statement. The RECT statement is required and can be used more than once for each slot in the SLOTS statement.
+
+
+ int defwSlotRect(- int
xl,- int yl,
- int xh,
- int yh)
+
+
+
+
+ xl yl xh yh
+
+
Specifies the coordinates of the slot geometry.
+
+
Styles routines write a DEF STYLES statement. The STYLES statement is optional and can be used only once in a DEF file. For syntax information about the STYLES statement, see "Styles" in the LEF/DEF Language Reference.
+
The STYLES statement must start and end with the defwStartStyles and defwEndStyles routines.
+
All routines return 0 if successful.
+
+
Starts the STYLES statement.
+
+
+ defwStartStyles(- int
count)
+
+
+
+
+ count
+
+
Specifies the number of styles defined in the STYLES statement.
+
+
Ends the STYLES statement.
+
+
+ defwEndStyles()
+
+
+
Defines a style. This routine is required and can be used more than once in the STYLES statement.
+
+
+ defwStyles( - int
styleNums, - int num_points,
- double* xp,
- double* yp)
+
+
+
+
+ styleNums
+
+
Defines a style. styleNums is a positive integer that is greater than or equal to 0 (zero), and is used to reference the style later in the DEF file. When defining multiple styles, the first styleNums must be 0 (zero), and any following styleNums should be numbered consecutively so that a table lookup can be used to find them easily.
+
+
+ num_points
+
+
Specifies the number of points in the style.
+
+
+ xp yp
+
+
Specifies a sequence of points to generate a polygon geometry. The syntax corresponds to a coordinate pair, such as x y. Specify an asterisk (*) to repeat the same value as the previous x or y value from the last point. The polygon must be convex. The polygon edges must be parallel to the x axis, the y axis, or at a 45-degree angle, and must enclose the point (0 0).
+
+
The Technology routine writes a DEF TECHNOLOGY statement. The TECHNOLOGY statement is optional and can be used only once in a DEF file. For syntax information about the TECHNOLOGY statement, see "Technology" in the LEF/DEF Language Reference.
+
This routine returns 0 if successful.
+
+
Writes a TECHNOLOGY statement.
+
+
+ int defwTechnology(- const char*
technology)
+
+
+
+
+ technology
+
+
Specifies a technology name for the design in the database.
+
+
The Tracks routine writes a DEF TRACKS statement. The TRACKS statement is optional and can be used only once in a DEF file. For syntax information about the DEF TRACKS statement, see Tracks in the LEF/DEF Language Reference.
+
If the DEF file contains a ROWS statement, the TRACKS statement must follow it. For more information about the DEF ROWS writer routine, see "Rows".
+
For examples of the routines described here, see "Tracks Example".
+
This routine returns 0 if successful.
+
+
Writes a TRACKS statement.
+
+
+ int defwTracks(- const char*
master,- int doStart,
- int doCount,
- int doStep,
- int numLayers,
- const char** layers)
+
+
+
+
+ doCount
+
+
Specifies the number of tracks to create.
+
+
+ doStep
+
+
Specifies the step spacing between the tracks.
+
+
+ doStart
+
+
Specifies the coordinate of the first line.
+
+
+ layers
+
+
Specifies the routing layers used for the tracks.
+
+
+ master
+
+
Specifies the direction for the first track defined.
Value: Specify one of the following:
+
+
+
+ numLayers
+
+
Specifies the number of routing layers to use for tracks.
+
+
The following example shows a callback routine with the type defwTrackCbkType.
+
+ int trackCB (defwCallbackType_e type,- defiUserData userData) {
- int res;
- const char** layers;
- // Check if the type is correct
- if (type != defwTrackCbkType) {
- printf("Type is not defwTrackCbkType, terminate
- writing.\n");
- return 1;
- }
+
+
+ layers = (const char**)malloc(sizeof(char*)*1);- layers[0] = strdup("M1");
- res = defwTracks("X", 3000, 40, 120, 1, layers);
- CHECK_RES(res);
- free((char*)layers[0]);
- layers[0] = strdup("M2");
- res = defwTracks("Y", 5000, 10, 20, 1,layers);
- CHECK_RES(res);
- free((char*)layers[0]);
- free((char*)layers);
- res = defwNewLine();
- CHECK_RES(res);
- return 0;}
+
+
+
The Units routine writes a DEF UNITS statement. The UNITS statement is optional and can be used only once in a DEF file. For syntax information about the UNITS statement, see "Units" in the LEF/DEF Language Reference.
+
This routine returns 0 if successful.
+
+
Writes a UNITS statement.
+
+
+ int defwUnits(- int
units)
+
+
+
+
+ units
+
+
Specifies the convert factor used to convert DEF distance units into LEF distance units.
+
+
The Version routine writes a DEF VERSION statement. The VERSION statement is required and can be used only once in a DEF file. For syntax information about the DEF VERSION statement, see "Version" in the LEF/DEF Language Reference.
+
This routine returns 0 if successful.
+
+
Writes a VERSION statement.
+
+
+ int defwVersion(- int
vers1,- int vers2)
+
+
+
+
+ version1
+
+
Specifies the major number.
+
+
+ version2
+
+
Specifies the minor number.
+
+
Vias routines write a DEF VIAS statement. The VIAS statement is optional and can be used only once in a DEF file. For syntax information about the DEF VIAS statement, see "Vias" in the LEF/DEF Language Reference.
+
The VIAS statement must start and end with the defwStartVias and defwEndVias routines. All vias must be defined between these routines. Each individual via must start and end with the defwViaName and defwOneViaEnd routines.
+
For examples of the routines described here, see "Vias Example".
+
All routines return 0 if successful.
+
+
Starts a VIAS statement.
+
+
+ int defwStartVias(- int
count)
+
+
+
+
+ count
+
+
Specifies the number of vias defined in the VIAS statement.
+
+
Ends the VIAS statement.
+
If the count specified in defwStartVias is not the same as the actual number of defwViaName routines used, this routine returns DEFW_BAD_DATA.
+
+
+ int defwEndVias(void)
+
+
+
Starts a via description in the VIAS statement. Each via in the VIAS statement must start and end with defwViaName and defwOneViaEnd. This routine must be used the exact number of times specified with count in defwStartVias.
+
Each via can include one of the following routines:
+
+
+
+
+
+ int defwViaName(- const char*
name)
+
+
+
+
+ name
+
+
Specifies the name of the via. Via names are generated by appending a number after the rule name. Vias are numbered in the order in which they are created.
+
+
Ends a via description in the VIAS statement. Each via in the VIAS statement must start and end with defwViaName and defwOneViaEnd. This routine must be used the exact number of times specified with count in defwStartVias.
+
+
+ int defwOneViaEnd()
+
+
+
Writes a POLYGON statement for a via in the VIAS statement. Either a POLYGON, RECT, or VIARULE statement can be specified for a via. The POLYGON statement is optional and can be used more than once for each via in the VIAS statement.
+
+
+ int defwViaPolygon( - const char*
layerName, - int num_polys,
- double* xl,
- double* yl)
+
+
+
+
+ layerName
+
+
Specifies the layer on which to generate a polygon.
+
+
+ num_polys
+
+
Specifies the number of polygon sides.
+
+
+ xl yl
+
+
Specifies a sequence of points to generate a polygon geometry. The polygon edges must be parallel to the x axis, to the y axis, or at a 45-degree angle.
+
+
Writes a RECT statement for a via in the VIAS statement. Either a POLYGON, RECT, or VIARULE statement can be specified for a via. The RECT statement is optional and can be used more than once for each via in the VIAS statement.
+
+
+ int defwViaRect(- const char*
layerName,- int xl,
- int yl,
- int xh,
- int yh)
+
+
+
+
+ layerName
+
+
Specifies the layer on which the via geometry lies. All geometries for the via, including the cut layers, are output by the DEF writer.
+
+
+ xl yl xh yh
+
+
Defines the via geometry for the specified layer. The points are specified with respect to the via origin. In most cases, the via origin is the center of the via bounding box.
+
+
Writes a VIARULE statement for a via in the VIAS statement. Either a POLYGON, RECT, or VIARULE statement can be specified for a via. The VIARULE statement is optional and can be used only once for each via in the VIAS statement.
+
If you specify this routine, you can optionally specify the following routines:
+
+
+
+
+
+
+ defwViaViarule( - const char*
viaRuleName, - double xCutSize,
- double yCutSize,
- const char* botMetalLayer,
- const char* cutLayer,
- const char* topMetalLayer,
- double xCutSpacing,
- double yCutSpacing,
- double xBotEnc,
- double yBotEnc,
- double xTopEnc,
- double yTopEnc)
+
+
+
+
+ viaRuleName
+
+
Specifies the name of the LEF VIARULE that produced this via. The VIARULE must be a VIARULE GENERATE via rule; it cannot refer to a VIARULE without a GENERATE keyword.
+
+
+ xCutSize yCutSize
+
+
Specifies the required width (xCutSize) and height (yCutSize) of the cut layer rectangles.
+
+
+ botMetalLayer cutLayer topMetalLayer
+
+
Specifies the required names of the bottom routing layer, cut layer, and top routing layer. These layer names must be previously defined in layer definitions, and must match the layer names defined in the specified LEF viaRuleName.
+
+
+ xCutSpacing yCutSpacing
+
+
Specifies the required x and y spacing between cuts. The spacing is measured form one cut edge to the next cut edge.
+
+
+ xBotEnc yBotEnc xTopEnc yTopEnc
+
+
Specifies the required x and y enclosure values for the bottom and top metal layers. The enclosure measures the distance from the cut array edge to the metal edge that encloses the cut array.
+
+
Writes a ROWCOL statement in the VIARULE for a via. The ROWCOL statement is optional and can be used only once for each via in the VIAS statement.
+
+
+ defwViaViaruleRowCol( - int
numCutRows, - int numCutCols)
+
+
+
+
+ numCutRows numCutCols
+
+
Specifies the number of cut rows and columns that make up the cut array.
+
+
Writes an ORIGIN statement in a VIARULE statement for a via. The ORIGIN statement is optional and can be used only once for each via in the VIAS statement.
+
+
+ defwViaViaruleOrigin( - int
xOffset, - int yOffset)
+
+
+
+
+ xOffset yOffset
+
+
Specifies the x and y offset for all of the via shapes. By default, the 0,0 origin of the via is the center of the cut array and the enclosing metal rectangles. After the non-shifted via is computed, all cut and metal rectangles are offset by adding these values.
+
+
Writes an OFFSET statement in a VIARULE statement for a via. The OFFSET statement is optional and can be used only once for each via in the VIAS statement.
+
+
+ defwViaViaruleOffset( - int
xBotOffset, - int yBotOffset,
- int xTopOffset,
- int yTopOffset)
+
+
+
+
+ xBotOffset yBotOffset xTopOffset yTopOffset
+
+
Specifies the x and y offset for the bottom and top metal layers. These values allow each metal layer to be offset independently.
By default, the 0,0 origin of the via is the center of the cut array and the enclosing metal rectangles. After the non-shifted via is computed, the metal layer rectangles are offset by adding the appropriate values--the x/y BotOffset values to the metal layer below the cut layer, and the x/y TopOffset values to the metal layer above the cut layer.
+
+
Writes a PATTERN statement in a VIARULE statement for a via. The PATTERN statement is optional and can be used only once for each via in the VIAS statement.
+
+
+ defwViaViarulePattern( - const char*
cutPattern)
+
+
+
+
+ cutPattern
+
+
Specifies the cut pattern encoded as an ASCII string.
+
+
The following example shows a callback routine with the type defwViaCbkType.
+
+ int viaCB (defwCallbackType_e type,- defiUserData userData) {
- int res;
+
+
+ // Check if the type is correct- if (type != defwViaCbkType) {
- printf("Type is not defwViaCbkType, terminate
- writing.\n");
- return 1;
- }
+
+
+ res = defwStartVias(1);- CHECK_RES(res);
- res = defwViaName("VIA_ARRAY");
- CHECK_RES(res);
- res = defwViaRect("M1", -40, -40, 40, 40);
- CHECK_RES(res);
- res = defwViaRect("V1", -40, -40, 40, 40);
- CHECK_RES(res);
- res = defwViaRect("M2", -50, -50, 50, 50);
- CHECK_RES(res);
- res = defwOneViaEnd();
- CHECK_RES(res);
- res = defwEndVias();
- CHECK_RES(res);
- return 0;}
+
+
+
+
+
+
+ Return to top of page
+
+
+
+
+
+For support, see Cadence Online Support service.
+
+
+
+Copyright © 2016, Cadence Design Systems, Inc.
+
+
+
+All rights reserved.
+
+
+
+
diff --git a/lefdef/doc/defapi/ch7DEFcompressed.html b/lefdef/doc/defapi/ch7DEFcompressed.html
new file mode 100644
index 00000000..0abb6c86
--- /dev/null
+++ b/lefdef/doc/defapi/ch7DEFcompressed.html
@@ -0,0 +1,320 @@
+
+
+
+
+ DEF 5.8 C/C++ Programming Interface -- 7
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ |
+
+
+
+
+ |
+
+
+ |
+
+
+
+ |
+
+
+ |
+
+
+ |
+
+
+
+
+ |
+
+
+ |
+
+
+ |
+
+
+ |
+
+
+ |
+
+
+
+
+
+
+
+
+
+ DEF 5.8 C/C++ Programming Interface (Open Licensing Program)
+
+
+
+
+
+
+
+
+
+
7
+
+
The Cadence® Design Exchange Format (DEF) reader provides the following routines for opening and closing compressed DEF files. These routines are used instead of the fopen and fclose routines that are used for regular DEF files.
+
+
+
+
+
Opens a compressed DEF file. If the file opens with no errors, this routine returns a pointer to the file.
+
+
+ defGZFile defGZipOpen(- const char*
gzipFile,- const char* mode);
+
+
+
+
+ gzipFile
+
+
Specifies the compressed file to open.
+
+
+ mode
+
+
Specifies how to open the file. Compressed files should be opened as read only; therefore, specify "r".
+
+
Closes the compressed DEF file. If the file closes with no errors, this routine returns zero.
+
+
+ int defGZipClose(- defGZFile
filePtr) ;
+
+
+
+
+ filePtr
+
+
Specifies a pointer to the compressed file to close.
+
+
The following example uses the defGZipOpen and defGZipClose routines to open and close a compressed file.
+
+ defrInit() ;
+
+
+
+
+
+ for (fileCt = 0; fileCt < numInFile; fileCt++) {
+
+
+
+ defrReset();
+
+
+
+ // Open the compressed DEF file for the reader to read
+
+
+
+ if ((f = defGZipOpen(inFile[fileCt], "r")) == 0) {
+
+
+
+ fprintf(stderr, "Couldn't open input file '%s'\n", inFile[fileCt]);
+
+
+
+ return(2) ;
+
+
+
+ }
+
+
+
+ // Set case sensitive to 0 to start with, in History and PropertyDefinition
+
+
+
+ // reset it to 1.
+
+
+
+ res = defrRead((FILE*)f, inFile[fileCt], (void*)userData, 1);
+
+
+
+
+
+
+
+ if (res)
+
+
+
+ fprintf(stderr, "Reader returns bad status.\n", inFile[fileCt]);
+
+
+
+
+
+
+
+ // Close the compressed DEF file.
+
+
+
+ defGZipClose(f);
+
+
+
+ (void)defrPrintUnusedCallbacks(fout);
+
+
+ }
+
+
+ fclose(fout);
+
+
+
+
+
+ return 0;}
+
+
+
+
+ Return to top of page
+
+
+
+
+
+For support, see Cadence Online Support service.
+
+
+
+Copyright © 2016, Cadence Design Systems, Inc.
+
+
+
+All rights reserved.
+
+
+
+
diff --git a/lefdef/doc/defapi/ch8lefdiff.html b/lefdef/doc/defapi/ch8lefdiff.html
new file mode 100644
index 00000000..07f034f9
--- /dev/null
+++ b/lefdef/doc/defapi/ch8lefdiff.html
@@ -0,0 +1,381 @@
+
+
+
+
+ DEF 5.8 C/C++ Programming Interface -- 8
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ |
+
+
+
+
+ |
+
+
+ |
+
+
+
+ |
+
+
+ |
+
+
+ |
+
+
+
+
+ |
+
+
+ |
+
+
+ |
+
+
+ |
+
+
+ |
+
+
+
+
+
+
+
+
+
+ DEF 5.8 C/C++ Programming Interface (Open Licensing Program)
+
+
+
+
+
+
+
+
+
+
+ Return to top of page
+
+
+
+
+
+For support, see Cadence Online Support service.
+
+
+
+Copyright © 2016, Cadence Design Systems, Inc.
+
+
+
+All rights reserved.
+
+
+
+
diff --git a/lefdef/doc/defapi/defapi.pdf b/lefdef/doc/defapi/defapi.pdf
new file mode 100644
index 00000000..0637d42c
--- /dev/null
+++ b/lefdef/doc/defapi/defapi.pdf
@@ -0,0 +1,9477 @@
+%PDF-1.4
%âãÏÓ
+5635 0 obj
<>
endobj
+xref
+5635 779
+0000000016 00000 n
+0000019754 00000 n
+0000019954 00000 n
+0000019983 00000 n
+0000020035 00000 n
+0000020073 00000 n
+0000020223 00000 n
+0000020307 00000 n
+0000020388 00000 n
+0000020472 00000 n
+0000020556 00000 n
+0000020640 00000 n
+0000020724 00000 n
+0000020808 00000 n
+0000020892 00000 n
+0000020976 00000 n
+0000021060 00000 n
+0000021144 00000 n
+0000021228 00000 n
+0000021312 00000 n
+0000021396 00000 n
+0000021480 00000 n
+0000021564 00000 n
+0000021648 00000 n
+0000021732 00000 n
+0000021816 00000 n
+0000021900 00000 n
+0000021984 00000 n
+0000022068 00000 n
+0000022152 00000 n
+0000022236 00000 n
+0000022320 00000 n
+0000022404 00000 n
+0000022488 00000 n
+0000022572 00000 n
+0000022656 00000 n
+0000022740 00000 n
+0000022824 00000 n
+0000022908 00000 n
+0000022992 00000 n
+0000023076 00000 n
+0000023160 00000 n
+0000023244 00000 n
+0000023328 00000 n
+0000023412 00000 n
+0000023496 00000 n
+0000023580 00000 n
+0000023664 00000 n
+0000023748 00000 n
+0000023832 00000 n
+0000023916 00000 n
+0000024000 00000 n
+0000024084 00000 n
+0000024168 00000 n
+0000024252 00000 n
+0000024336 00000 n
+0000024420 00000 n
+0000024504 00000 n
+0000024588 00000 n
+0000024672 00000 n
+0000024756 00000 n
+0000024840 00000 n
+0000024924 00000 n
+0000025008 00000 n
+0000025092 00000 n
+0000025176 00000 n
+0000025260 00000 n
+0000025344 00000 n
+0000025428 00000 n
+0000025512 00000 n
+0000025596 00000 n
+0000025680 00000 n
+0000025764 00000 n
+0000025848 00000 n
+0000025932 00000 n
+0000026016 00000 n
+0000026100 00000 n
+0000026184 00000 n
+0000026268 00000 n
+0000026352 00000 n
+0000026436 00000 n
+0000026520 00000 n
+0000026604 00000 n
+0000026688 00000 n
+0000026772 00000 n
+0000026856 00000 n
+0000026940 00000 n
+0000027024 00000 n
+0000027108 00000 n
+0000027192 00000 n
+0000027276 00000 n
+0000027360 00000 n
+0000027444 00000 n
+0000027528 00000 n
+0000027612 00000 n
+0000027696 00000 n
+0000027780 00000 n
+0000027864 00000 n
+0000027948 00000 n
+0000028032 00000 n
+0000028116 00000 n
+0000028200 00000 n
+0000028284 00000 n
+0000028368 00000 n
+0000028452 00000 n
+0000028536 00000 n
+0000028620 00000 n
+0000028704 00000 n
+0000028788 00000 n
+0000028872 00000 n
+0000028956 00000 n
+0000029040 00000 n
+0000029124 00000 n
+0000029208 00000 n
+0000029292 00000 n
+0000029376 00000 n
+0000029460 00000 n
+0000029544 00000 n
+0000029628 00000 n
+0000029712 00000 n
+0000029796 00000 n
+0000029880 00000 n
+0000029964 00000 n
+0000030048 00000 n
+0000030132 00000 n
+0000030216 00000 n
+0000030300 00000 n
+0000030384 00000 n
+0000030468 00000 n
+0000030552 00000 n
+0000030636 00000 n
+0000030720 00000 n
+0000030804 00000 n
+0000030888 00000 n
+0000030972 00000 n
+0000031056 00000 n
+0000031140 00000 n
+0000031224 00000 n
+0000031308 00000 n
+0000031392 00000 n
+0000031476 00000 n
+0000031560 00000 n
+0000031644 00000 n
+0000031728 00000 n
+0000031812 00000 n
+0000031896 00000 n
+0000031980 00000 n
+0000032064 00000 n
+0000032148 00000 n
+0000032232 00000 n
+0000032316 00000 n
+0000032400 00000 n
+0000032484 00000 n
+0000032568 00000 n
+0000032652 00000 n
+0000032736 00000 n
+0000032820 00000 n
+0000032904 00000 n
+0000032988 00000 n
+0000033072 00000 n
+0000033156 00000 n
+0000033240 00000 n
+0000033324 00000 n
+0000033408 00000 n
+0000033492 00000 n
+0000033576 00000 n
+0000033660 00000 n
+0000033744 00000 n
+0000033828 00000 n
+0000033912 00000 n
+0000033996 00000 n
+0000034080 00000 n
+0000034164 00000 n
+0000034248 00000 n
+0000034332 00000 n
+0000034416 00000 n
+0000034500 00000 n
+0000034584 00000 n
+0000034668 00000 n
+0000034752 00000 n
+0000034836 00000 n
+0000034920 00000 n
+0000035004 00000 n
+0000035088 00000 n
+0000035172 00000 n
+0000035256 00000 n
+0000035340 00000 n
+0000035424 00000 n
+0000035508 00000 n
+0000035592 00000 n
+0000035676 00000 n
+0000035760 00000 n
+0000035844 00000 n
+0000035928 00000 n
+0000036012 00000 n
+0000036096 00000 n
+0000036180 00000 n
+0000036264 00000 n
+0000036348 00000 n
+0000036432 00000 n
+0000036516 00000 n
+0000036600 00000 n
+0000036684 00000 n
+0000036768 00000 n
+0000036852 00000 n
+0000036936 00000 n
+0000037020 00000 n
+0000037104 00000 n
+0000037188 00000 n
+0000037272 00000 n
+0000037356 00000 n
+0000037440 00000 n
+0000037524 00000 n
+0000037608 00000 n
+0000037692 00000 n
+0000037776 00000 n
+0000037860 00000 n
+0000037944 00000 n
+0000038028 00000 n
+0000038112 00000 n
+0000038196 00000 n
+0000038280 00000 n
+0000038364 00000 n
+0000038448 00000 n
+0000038532 00000 n
+0000038616 00000 n
+0000038700 00000 n
+0000038784 00000 n
+0000038868 00000 n
+0000038952 00000 n
+0000039036 00000 n
+0000039120 00000 n
+0000039204 00000 n
+0000039288 00000 n
+0000039372 00000 n
+0000039456 00000 n
+0000039540 00000 n
+0000039624 00000 n
+0000039708 00000 n
+0000039792 00000 n
+0000039876 00000 n
+0000039960 00000 n
+0000040044 00000 n
+0000040128 00000 n
+0000040212 00000 n
+0000040296 00000 n
+0000040380 00000 n
+0000040464 00000 n
+0000040548 00000 n
+0000040632 00000 n
+0000040716 00000 n
+0000040800 00000 n
+0000040884 00000 n
+0000040968 00000 n
+0000041052 00000 n
+0000041136 00000 n
+0000041220 00000 n
+0000041304 00000 n
+0000041388 00000 n
+0000041472 00000 n
+0000041556 00000 n
+0000041640 00000 n
+0000041724 00000 n
+0000041808 00000 n
+0000041892 00000 n
+0000041976 00000 n
+0000042060 00000 n
+0000042144 00000 n
+0000042228 00000 n
+0000042312 00000 n
+0000042396 00000 n
+0000042480 00000 n
+0000042564 00000 n
+0000042648 00000 n
+0000042732 00000 n
+0000042816 00000 n
+0000042900 00000 n
+0000042984 00000 n
+0000043068 00000 n
+0000043152 00000 n
+0000043236 00000 n
+0000043320 00000 n
+0000043403 00000 n
+0000043486 00000 n
+0000043569 00000 n
+0000043652 00000 n
+0000043735 00000 n
+0000043818 00000 n
+0000043901 00000 n
+0000043984 00000 n
+0000044067 00000 n
+0000044150 00000 n
+0000044233 00000 n
+0000044316 00000 n
+0000044399 00000 n
+0000044482 00000 n
+0000044565 00000 n
+0000044648 00000 n
+0000044731 00000 n
+0000044814 00000 n
+0000044897 00000 n
+0000044980 00000 n
+0000045063 00000 n
+0000045146 00000 n
+0000045229 00000 n
+0000045312 00000 n
+0000045395 00000 n
+0000045478 00000 n
+0000045561 00000 n
+0000045644 00000 n
+0000045727 00000 n
+0000045810 00000 n
+0000045893 00000 n
+0000045976 00000 n
+0000046059 00000 n
+0000046142 00000 n
+0000046225 00000 n
+0000046308 00000 n
+0000046391 00000 n
+0000046474 00000 n
+0000046557 00000 n
+0000046640 00000 n
+0000046723 00000 n
+0000046806 00000 n
+0000046889 00000 n
+0000046972 00000 n
+0000047055 00000 n
+0000047138 00000 n
+0000047221 00000 n
+0000047304 00000 n
+0000047387 00000 n
+0000047470 00000 n
+0000047553 00000 n
+0000047636 00000 n
+0000047719 00000 n
+0000047802 00000 n
+0000047885 00000 n
+0000047968 00000 n
+0000048051 00000 n
+0000048134 00000 n
+0000048217 00000 n
+0000048300 00000 n
+0000048383 00000 n
+0000048466 00000 n
+0000048549 00000 n
+0000048632 00000 n
+0000048715 00000 n
+0000048798 00000 n
+0000048881 00000 n
+0000048964 00000 n
+0000049047 00000 n
+0000049130 00000 n
+0000049213 00000 n
+0000049296 00000 n
+0000049379 00000 n
+0000049462 00000 n
+0000049545 00000 n
+0000049628 00000 n
+0000049711 00000 n
+0000049794 00000 n
+0000049877 00000 n
+0000049960 00000 n
+0000050043 00000 n
+0000050126 00000 n
+0000050209 00000 n
+0000050292 00000 n
+0000050375 00000 n
+0000050458 00000 n
+0000050541 00000 n
+0000050624 00000 n
+0000050707 00000 n
+0000050790 00000 n
+0000050873 00000 n
+0000050956 00000 n
+0000051039 00000 n
+0000051122 00000 n
+0000051205 00000 n
+0000051288 00000 n
+0000051371 00000 n
+0000051454 00000 n
+0000051537 00000 n
+0000051620 00000 n
+0000051702 00000 n
+0000051784 00000 n
+0000051865 00000 n
+0000052022 00000 n
+0000052074 00000 n
+0000052178 00000 n
+0000052593 00000 n
+0000053114 00000 n
+0000053555 00000 n
+0000057685 00000 n
+0000058410 00000 n
+0000060420 00000 n
+0000060481 00000 n
+0000060574 00000 n
+0000060753 00000 n
+0000060870 00000 n
+0000060987 00000 n
+0000061174 00000 n
+0000061275 00000 n
+0000061370 00000 n
+0000061559 00000 n
+0000061662 00000 n
+0000061757 00000 n
+0000061928 00000 n
+0000062102 00000 n
+0000062229 00000 n
+0000062417 00000 n
+0000062583 00000 n
+0000062733 00000 n
+0000062901 00000 n
+0000063005 00000 n
+0000063174 00000 n
+0000063362 00000 n
+0000063528 00000 n
+0000063691 00000 n
+0000063897 00000 n
+0000064034 00000 n
+0000064190 00000 n
+0000064286 00000 n
+0000064400 00000 n
+0000064546 00000 n
+0000064646 00000 n
+0000064794 00000 n
+0000064922 00000 n
+0000065056 00000 n
+0000065186 00000 n
+0000065328 00000 n
+0000065424 00000 n
+0000065518 00000 n
+0000065658 00000 n
+0000065800 00000 n
+0000065954 00000 n
+0000066084 00000 n
+0000066228 00000 n
+0000066372 00000 n
+0000066504 00000 n
+0000066628 00000 n
+0000066752 00000 n
+0000066862 00000 n
+0000066974 00000 n
+0000067098 00000 n
+0000067220 00000 n
+0000067316 00000 n
+0000067518 00000 n
+0000067600 00000 n
+0000067728 00000 n
+0000067854 00000 n
+0000067984 00000 n
+0000068116 00000 n
+0000068248 00000 n
+0000068376 00000 n
+0000068514 00000 n
+0000068640 00000 n
+0000068772 00000 n
+0000068900 00000 n
+0000069034 00000 n
+0000069160 00000 n
+0000069288 00000 n
+0000069428 00000 n
+0000069554 00000 n
+0000069688 00000 n
+0000069818 00000 n
+0000069956 00000 n
+0000070084 00000 n
+0000070216 00000 n
+0000070382 00000 n
+0000070520 00000 n
+0000070646 00000 n
+0000070752 00000 n
+0000070850 00000 n
+0000070960 00000 n
+0000071064 00000 n
+0000071160 00000 n
+0000071358 00000 n
+0000071458 00000 n
+0000071554 00000 n
+0000071706 00000 n
+0000071848 00000 n
+0000071958 00000 n
+0000072074 00000 n
+0000072182 00000 n
+0000072294 00000 n
+0000072408 00000 n
+0000072522 00000 n
+0000072632 00000 n
+0000072742 00000 n
+0000072856 00000 n
+0000072976 00000 n
+0000073084 00000 n
+0000073198 00000 n
+0000073308 00000 n
+0000073422 00000 n
+0000073538 00000 n
+0000073654 00000 n
+0000073786 00000 n
+0000073894 00000 n
+0000074004 00000 n
+0000074120 00000 n
+0000074242 00000 n
+0000074350 00000 n
+0000074462 00000 n
+0000074584 00000 n
+0000074704 00000 n
+0000074814 00000 n
+0000074962 00000 n
+0000075082 00000 n
+0000075190 00000 n
+0000075296 00000 n
+0000075394 00000 n
+0000075500 00000 n
+0000075604 00000 n
+0000075750 00000 n
+0000075838 00000 n
+0000075980 00000 n
+0000076064 00000 n
+0000076208 00000 n
+0000076308 00000 n
+0000076416 00000 n
+0000076568 00000 n
+0000076662 00000 n
+0000076806 00000 n
+0000076916 00000 n
+0000077016 00000 n
+0000077158 00000 n
+0000077266 00000 n
+0000077370 00000 n
+0000077534 00000 n
+0000077664 00000 n
+0000077792 00000 n
+0000077953 00000 n
+0000078079 00000 n
+0000078203 00000 n
+0000078360 00000 n
+0000078480 00000 n
+0000078600 00000 n
+0000078755 00000 n
+0000078873 00000 n
+0000078989 00000 n
+0000079129 00000 n
+0000079223 00000 n
+0000079327 00000 n
+0000079473 00000 n
+0000079585 00000 n
+0000079695 00000 n
+0000079865 00000 n
+0000079975 00000 n
+0000080109 00000 n
+0000080281 00000 n
+0000080393 00000 n
+0000080529 00000 n
+0000080689 00000 n
+0000080813 00000 n
+0000080937 00000 n
+0000081078 00000 n
+0000081184 00000 n
+0000081288 00000 n
+0000081452 00000 n
+0000081580 00000 n
+0000081710 00000 n
+0000081854 00000 n
+0000081970 00000 n
+0000082078 00000 n
+0000082238 00000 n
+0000082350 00000 n
+0000082474 00000 n
+0000082615 00000 n
+0000082721 00000 n
+0000082825 00000 n
+0000082971 00000 n
+0000083059 00000 n
+0000083203 00000 n
+0000083313 00000 n
+0000083423 00000 n
+0000083575 00000 n
+0000083681 00000 n
+0000083797 00000 n
+0000083939 00000 n
+0000084047 00000 n
+0000084155 00000 n
+0000084307 00000 n
+0000084421 00000 n
+0000084537 00000 n
+0000084703 00000 n
+0000084799 00000 n
+0000084947 00000 n
+0000085049 00000 n
+0000085161 00000 n
+0000085315 00000 n
+0000085409 00000 n
+0000085561 00000 n
+0000085679 00000 n
+0000085803 00000 n
+0000085971 00000 n
+0000086067 00000 n
+0000086218 00000 n
+0000086334 00000 n
+0000086452 00000 n
+0000086590 00000 n
+0000086718 00000 n
+0000086844 00000 n
+0000086978 00000 n
+0000087110 00000 n
+0000087256 00000 n
+0000087400 00000 n
+0000087554 00000 n
+0000087706 00000 n
+0000087858 00000 n
+0000088008 00000 n
+0000088164 00000 n
+0000088318 00000 n
+0000088456 00000 n
+0000088592 00000 n
+0000088730 00000 n
+0000088876 00000 n
+0000089020 00000 n
+0000089160 00000 n
+0000089298 00000 n
+0000089450 00000 n
+0000089600 00000 n
+0000089748 00000 n
+0000089878 00000 n
+0000090006 00000 n
+0000090166 00000 n
+0000090314 00000 n
+0000090440 00000 n
+0000090576 00000 n
+0000090704 00000 n
+0000090830 00000 n
+0000090950 00000 n
+0000091078 00000 n
+0000091202 00000 n
+0000091332 00000 n
+0000091466 00000 n
+0000091592 00000 n
+0000091724 00000 n
+0000091848 00000 n
+0000091964 00000 n
+0000092082 00000 n
+0000092206 00000 n
+0000092328 00000 n
+0000092454 00000 n
+0000092574 00000 n
+0000092692 00000 n
+0000092804 00000 n
+0000092924 00000 n
+0000093042 00000 n
+0000093162 00000 n
+0000093284 00000 n
+0000093400 00000 n
+0000093514 00000 n
+0000093634 00000 n
+0000093756 00000 n
+0000093880 00000 n
+0000094016 00000 n
+0000094142 00000 n
+0000094268 00000 n
+0000094388 00000 n
+0000094516 00000 n
+0000094642 00000 n
+0000094786 00000 n
+0000094894 00000 n
+0000095010 00000 n
+0000095158 00000 n
+0000095300 00000 n
+0000095422 00000 n
+0000095548 00000 n
+0000095674 00000 n
+0000095800 00000 n
+0000095922 00000 n
+0000096048 00000 n
+0000096174 00000 n
+0000096310 00000 n
+0000096454 00000 n
+0000096594 00000 n
+0000096724 00000 n
+0000096862 00000 n
+0000096976 00000 n
+0000097118 00000 n
+0000097240 00000 n
+0000097370 00000 n
+0000097502 00000 n
+0000097628 00000 n
+0000097744 00000 n
+0000097866 00000 n
+0000097988 00000 n
+0000098106 00000 n
+0000098248 00000 n
+0000098416 00000 n
+0000098576 00000 n
+0000098732 00000 n
+0000098888 00000 n
+0000099034 00000 n
+0000099182 00000 n
+0000099326 00000 n
+0000099470 00000 n
+0000099602 00000 n
+0000099716 00000 n
+0000099824 00000 n
+0000099940 00000 n
+0000100064 00000 n
+0000100198 00000 n
+0000100326 00000 n
+0000100450 00000 n
+0000100572 00000 n
+0000100694 00000 n
+0000100824 00000 n
+0000100950 00000 n
+0000101072 00000 n
+0000101198 00000 n
+0000101320 00000 n
+0000101442 00000 n
+0000101556 00000 n
+0000101684 00000 n
+0000101814 00000 n
+0000101952 00000 n
+0000102094 00000 n
+0000102228 00000 n
+0000102372 00000 n
+0000102508 00000 n
+0000102656 00000 n
+0000102776 00000 n
+0000102904 00000 n
+0000103038 00000 n
+0000103174 00000 n
+0000103302 00000 n
+0000103436 00000 n
+0000103572 00000 n
+0000103710 00000 n
+0000103850 00000 n
+0000103984 00000 n
+0000104126 00000 n
+0000104266 00000 n
+0000104388 00000 n
+0000104518 00000 n
+0000104648 00000 n
+0000104784 00000 n
+0000104932 00000 n
+0000105072 00000 n
+0000105216 00000 n
+0000105352 00000 n
+0000105492 00000 n
+0000105632 00000 n
+0000105794 00000 n
+0000105934 00000 n
+0000106074 00000 n
+0000106210 00000 n
+0000106354 00000 n
+0000106502 00000 n
+0000106642 00000 n
+0000106786 00000 n
+0000106930 00000 n
+0000107074 00000 n
+0000107214 00000 n
+0000107338 00000 n
+0000107458 00000 n
+0000107576 00000 n
+0000107696 00000 n
+0000107832 00000 n
+0000107966 00000 n
+0000108100 00000 n
+0000108234 00000 n
+0000108356 00000 n
+0000108472 00000 n
+0000108594 00000 n
+0000108714 00000 n
+0000108830 00000 n
+0000108946 00000 n
+0000109042 00000 n
+0000109150 00000 n
+0000109272 00000 n
+0000109392 00000 n
+0000109514 00000 n
+0000109630 00000 n
+0000109766 00000 n
+0000109874 00000 n
+0000109990 00000 n
+0000015876 00000 n
+trailer
+<<4B8F8C127D33F04DB0D7275E53B6FD6E>]/Prev 1179716>>
+startxref
+0
+%%EOF
+
+6413 0 obj
<>stream
+hÞìZtÕ¾3;›l^°›M–
,ÉfÃ#@6Âò¨Ù@$±¤ÔÈ6!Æ`),Ôêl B
ÑÓbªÈCc G†WšJŠŠÁRÙÅG9= z,ÓÚ;³3ÙÿÞ‰¶Ö>ôæœÍüsïýÿïß;9ƒÒ ts
+Cˆ½€(xðXâî$£)O4Wä‹ãÊ3uéáˆå*Ušõ–¡ŸÇ[×iy>2œc—ÇŠ"uŒ´&éÄãÅf ]$‹\.¤C,‹Yõº1È*1„qá"/Ì.rãKäâ˜]Zä§äÅ2«Ušñ/VbËP^¢gEªo’‚—xç¬j¤b̺Ðâ:°—[:ÍS¸P8Øí6§¶j‰øbÝUöjçB}N2žd»¹åv§?¦þŽjCVÄî]v¸/E¹ÿMÞäU±õá³´7³;2§
+«ë–›¿0¼§{K3¡Ü‘©ñdT§{Û£ß×禔ßæê¶.õ³Zék´ÍÌtݵ¤Õe ¦œ5ÑØ}ÓÑ£®ñö”v#§‘ý³f;†¶zÆI{âruéš6v+ƒX§ ‡w ^ÒÀfìüƒ|A^ZrLrT¯v³ÓwÄuõðJCUÈ{lJhøÚJa·'S¼'ÎR¥=Φù¶ó/ 7b+ÂÏq»Ù—˜:t¤nnw|µÉ“Ã= ‰÷u¢u÷¶'–™Nëþ®ÝÆv0ÂvÏO<öÆðº°kÜ}š,&õø§ä%6š¾0¶q‡Øq¾èQ~:Ÿ¬7GFx´û4yüÓ®L´ÜnsÅö†{´ašTß1W…°Ò5Ú=ètØ{a{Ù
+ßã®ç=™Þ‘¥±WBwi.±‘¾‰Â1ë¼ö1ƒÚ”„°ìÏʳ\[øja˜wP]ädí›Ì³åfþ ?Å“T–X9UkäF¡^¡™¿Ï>Á?tXÄÜWÜmüÇü‹(›Oü$¦;Ô͹5Ǥ!ËçQm¬Œx’»Ê®f–óOºøëbì‡BâÙl&?ˆ2P²ßìÑíÔ&³n¦šç]u#<Ñíá«BòØß2>$ …h´7Æ«ÓqçÙÌ,Ôˆò…8¯¾:Ì«Me™íüvþvOrž©Lwš{Ÿ]Çãw s…ÑþØêðjn<S$MóFÑÝ᫸*æ,ÆW¬q®ˆn];w…éEã}(ÃcÉ‹*
ÕkôL zÍåGq®¨<íÎÉìFgùE‚ÝWUrša~Šö£b4΃Wè>äÚÙô*v¥Z|Ä'!ˆ½Ì<€>F£\ÇÙLÜvp³á¤þcµtÃ×—:MŒ¯Í5EhËO¢ú,