Implemented an idea from Staf Verhaegen to have "labels" options
"port" and "noport" in the cifoutput section to distinguish between layer:purpose pairs for port text vs. other kinds of text. This allows a closer correspondence between GDS read and write. Note that the port writing is currently only in the GDS write routine, not in the CIF routine.
This commit is contained in:
parent
b964f9d33a
commit
9eb406ffba
|
|
@ -892,7 +892,7 @@ calmaOutFunc(def, f, cliprect)
|
||||||
for (lab = def->cd_labels; lab; lab = lab->lab_next)
|
for (lab = def->cd_labels; lab; lab = lab->lab_next)
|
||||||
{
|
{
|
||||||
type = CIFCurStyle->cs_labelLayer[lab->lab_type];
|
type = CIFCurStyle->cs_labelLayer[lab->lab_type];
|
||||||
if ((lab->lab_flags & PORT_DIR_MASK) == 0)
|
if ((type >= 0) && (lab->lab_flags & PORT_DIR_MASK) == 0)
|
||||||
{
|
{
|
||||||
calmaWriteLabelFunc(lab, type, f);
|
calmaWriteLabelFunc(lab, type, f);
|
||||||
}
|
}
|
||||||
|
|
@ -906,8 +906,8 @@ calmaOutFunc(def, f, cliprect)
|
||||||
for (i = 0; i <= maxport; i++)
|
for (i = 0; i <= maxport; i++)
|
||||||
for (lab = def->cd_labels; lab; lab = lab->lab_next)
|
for (lab = def->cd_labels; lab; lab = lab->lab_next)
|
||||||
{
|
{
|
||||||
type = CIFCurStyle->cs_labelLayer[lab->lab_type];
|
type = CIFCurStyle->cs_portLayer[lab->lab_type];
|
||||||
if (((lab->lab_flags & PORT_DIR_MASK) != 0) &&
|
if ((type >= 0) && ((lab->lab_flags & PORT_DIR_MASK) != 0) &&
|
||||||
((lab->lab_flags & PORT_NUM_MASK) == i))
|
((lab->lab_flags & PORT_NUM_MASK) == i))
|
||||||
{
|
{
|
||||||
calmaWriteLabelFunc(lab, type, f);
|
calmaWriteLabelFunc(lab, type, f);
|
||||||
|
|
@ -2470,6 +2470,9 @@ calmaWriteLabelFunc(lab, type, f)
|
||||||
/* and the label rectangle is not degenerate, then output the label */
|
/* and the label rectangle is not degenerate, then output the label */
|
||||||
/* rectangle as a boundary with the label's layer:purpose pair. */
|
/* rectangle as a boundary with the label's layer:purpose pair. */
|
||||||
|
|
||||||
|
/* Note that the check for whether the CIF_LABEL_NOPORT flag has */
|
||||||
|
/* been set is done outside of this routine. */
|
||||||
|
|
||||||
if ((CIFCurStyle->cs_layers[type]->cl_ops == NULL) &&
|
if ((CIFCurStyle->cs_layers[type]->cl_ops == NULL) &&
|
||||||
(lab->lab_rect.r_xtop > lab->lab_rect.r_xbot) &&
|
(lab->lab_rect.r_xtop > lab->lab_rect.r_xbot) &&
|
||||||
(lab->lab_rect.r_ytop > lab->lab_rect.r_ybot))
|
(lab->lab_rect.r_ytop > lab->lab_rect.r_ybot))
|
||||||
|
|
|
||||||
|
|
@ -208,8 +208,8 @@ typedef struct
|
||||||
* only be generated if the cell is a top-level cell.
|
* only be generated if the cell is a top-level cell.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define CIF_TEMP 1
|
#define CIF_TEMP 1
|
||||||
#define CIF_BBOX_TOP 2
|
#define CIF_BBOX_TOP 2
|
||||||
|
|
||||||
/* The following data structure describes a complete set of CIF
|
/* The following data structure describes a complete set of CIF
|
||||||
* layers. The number of CIF layers (MAXCIFLAYERS) must not be
|
* layers. The number of CIF layers (MAXCIFLAYERS) must not be
|
||||||
|
|
@ -271,6 +271,11 @@ typedef struct cifstyle
|
||||||
* -1 means no known CIF layer for this Magic
|
* -1 means no known CIF layer for this Magic
|
||||||
* layer.
|
* layer.
|
||||||
*/
|
*/
|
||||||
|
int cs_portLayer[TT_MAXTYPES];
|
||||||
|
/* Similar to cs_labelLayer, to distinguish
|
||||||
|
* between output types used for "normal"
|
||||||
|
* text and those used specifically for ports.
|
||||||
|
*/
|
||||||
CIFLayer *cs_layers[MAXCIFLAYERS];
|
CIFLayer *cs_layers[MAXCIFLAYERS];
|
||||||
/* Describes how to generate each layer.*/
|
/* Describes how to generate each layer.*/
|
||||||
int cs_flags; /* bitmask of boolean-valued output options */
|
int cs_flags; /* bitmask of boolean-valued output options */
|
||||||
|
|
|
||||||
|
|
@ -179,7 +179,10 @@ cifTechStyleInit()
|
||||||
CIFCurStyle->cs_hierLayers = DBZeroTypeBits;
|
CIFCurStyle->cs_hierLayers = DBZeroTypeBits;
|
||||||
CIFCurStyle->cs_flags = 0;
|
CIFCurStyle->cs_flags = 0;
|
||||||
for (i=0; i<TT_MAXTYPES; i+=1)
|
for (i=0; i<TT_MAXTYPES; i+=1)
|
||||||
|
{
|
||||||
CIFCurStyle->cs_labelLayer[i] = -1;
|
CIFCurStyle->cs_labelLayer[i] = -1;
|
||||||
|
CIFCurStyle->cs_portLayer[i] = -1;
|
||||||
|
}
|
||||||
for (i = 0; i < MAXCIFLAYERS; i++)
|
for (i = 0; i < MAXCIFLAYERS; i++)
|
||||||
CIFCurStyle->cs_layers[i] = NULL;
|
CIFCurStyle->cs_layers[i] = NULL;
|
||||||
}
|
}
|
||||||
|
|
@ -859,6 +862,8 @@ CIFTechLine(sectionName, argc, argv)
|
||||||
|
|
||||||
if (strcmp(argv[0], "labels") == 0)
|
if (strcmp(argv[0], "labels") == 0)
|
||||||
{
|
{
|
||||||
|
bool portOnly = FALSE, noPort = FALSE;
|
||||||
|
|
||||||
if (cifCurLayer == NULL)
|
if (cifCurLayer == NULL)
|
||||||
{
|
{
|
||||||
TechError("Must define layer before giving labels it holds.\n");
|
TechError("Must define layer before giving labels it holds.\n");
|
||||||
|
|
@ -866,12 +871,29 @@ CIFTechLine(sectionName, argc, argv)
|
||||||
}
|
}
|
||||||
if (cifCurLayer->cl_flags & CIF_TEMP)
|
if (cifCurLayer->cl_flags & CIF_TEMP)
|
||||||
TechError("Why are you attaching labels to a temporary layer?\n");
|
TechError("Why are you attaching labels to a temporary layer?\n");
|
||||||
if (argc != 2) goto wrongNumArgs;
|
if (argc == 3)
|
||||||
|
{
|
||||||
|
if (!strncmp(argv[2], "port", 4))
|
||||||
|
portOnly = TRUE;
|
||||||
|
else if (!strncmp(argv[2], "noport", 6))
|
||||||
|
noPort = TRUE;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
TechError("Unknown option %s for labels statement.\n", argv[2]);
|
||||||
|
goto wrongNumArgs;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (argc != 2) goto wrongNumArgs;
|
||||||
DBTechNoisyNameMask(argv[1], &mask);
|
DBTechNoisyNameMask(argv[1], &mask);
|
||||||
for (i=0; i<TT_MAXTYPES; i+=1)
|
for (i=0; i<TT_MAXTYPES; i+=1)
|
||||||
{
|
{
|
||||||
if (TTMaskHasType(&mask, i))
|
if (TTMaskHasType(&mask, i))
|
||||||
CIFCurStyle->cs_labelLayer[i] = CIFCurStyle->cs_nLayers-1;
|
{
|
||||||
|
if (noPort == FALSE)
|
||||||
|
CIFCurStyle->cs_labelLayer[i] = CIFCurStyle->cs_nLayers-1;
|
||||||
|
if (portOnly == TRUE)
|
||||||
|
CIFCurStyle->cs_portLayer[i] = CIFCurStyle->cs_nLayers-1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
cifGotLabels = TRUE;
|
cifGotLabels = TRUE;
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue