Files
magic/mzrouter/mzDebug.c
T
Patrick Kurth ea03883829 Fixed unused-parameters/unused-variables warnings
Added a ARG_UNUSED macro in utils/magic.h, which
produces a simple cast to void to silence the warnings.
The reasons this is used as opposed to an attribute is
that most compilers should support this.
Besides this, the macro can be easily searched for in
the future to potentially remove (where possible) the
unused parameters.
2025-10-10 22:12:19 +02:00

566 lines
11 KiB
C

/*
* mzDebug.c --
*
* Routines for debugging.
*
* *********************************************************************
* * Copyright (C) 1988, 1990 Michael H. Arnold and the Regents of the *
* * University of California. *
* * Permission to use, copy, modify, and distribute this *
* * software and its documentation for any purpose and without *
* * fee is hereby granted, provided that the above copyright *
* * notice appear in all copies. The University of California *
* * makes no representations about the suitability of this *
* * software for any purpose. It is provided "as is" without *
* * express or implied warranty. Export of this software outside *
* * of the United States of America may require an export license. *
* *********************************************************************
*/
#ifndef lint
static char rcsid[] __attribute__ ((unused)) = "$$";
#endif /* not lint */
#include <stdio.h>
#include <stdint.h>
#include "utils/magic.h"
#include "utils/signals.h"
#include "textio/textio.h"
#include "utils/hash.h"
#include "utils/geometry.h"
#include "tiles/tile.h"
#include "database/database.h"
#include "utils/malloc.h"
#include "utils/list.h"
#include "utils/heap.h"
#include "mzrouter/mzrouter.h"
#include "mzrouter/mzInternal.h"
/* extra variables for use with dbx */
RoutePath *mzDPath;
Tile *mzTile;
int mz;
/* Forward declarations */
extern void mzPrintRL();
extern void mzPrintRT();
extern void mzPrintRC();
extern void mzPrintRP();
extern void mzPrintPathHead();
/*
* ----------------------------------------------------------------------------
*
* MZPrintRCListNames --
*
* Print names of route contacts linked together by external "list"
*
* Results:
* None.
*
* Side effects:
* None
*
* ----------------------------------------------------------------------------
*/
void
MZPrintRCListNames(l)
List *l;
{
RouteContact *rC;
TxPrintf("\t");
for(;l!=NULL; l=LIST_TAIL(l))
{
rC = (RouteContact *) LIST_FIRST(l);
TxPrintf("%s ",DBTypeLongNameTbl[rC->rc_routeType.rt_tileType]);
}
TxPrintf("\n");
return;
}
/*
* ----------------------------------------------------------------------------
*
* MZPrintRLListNames --
*
* Print names of route Layers linked together by external "list"
*
* Results:
* None.
*
* Side effects:
* None
*
* ----------------------------------------------------------------------------
*/
void
MZPrintRLListNames(l)
List *l;
{
RouteLayer *rL;
TxPrintf("\t");
for(;l!=NULL; l=LIST_TAIL(l))
{
rL = (RouteLayer *) LIST_FIRST(l);
TxPrintf("%s ",DBTypeLongNameTbl[rL->rl_routeType.rt_tileType]);
}
TxPrintf("\n");
return;
}
/*
* ----------------------------------------------------------------------------
*
* MZPrintRLs --
*
* Print list of RouteLayer strucs.
*
* Results:
* None.
*
* Side effects:
* None
*
* ----------------------------------------------------------------------------
*/
void
MZPrintRLs(rL)
RouteLayer *rL;
{
while(rL!=NULL)
{
mzPrintRL(rL);
rL = rL->rl_next;
if(rL!=NULL) TxMore("");
}
return;
}
/*
* ----------------------------------------------------------------------------
*
* mzPrintRL --
*
* Print single RouteLayer struc.
*
* Results:
* None.
*
* Side effects:
* None
*
* ----------------------------------------------------------------------------
*/
void
mzPrintRL(rL)
RouteLayer *rL;
{
List *cL;
TxPrintf("ROUTE LAYER:\n");
mzPrintRT(&(rL->rl_routeType));
TxPrintf("\tplaneNum = %d (%s)\n",rL->rl_planeNum,
DBPlaneLongNameTbl[rL->rl_planeNum]);
TxPrintf("\tcontactL = ");
for (cL=rL->rl_contactL; cL!=NULL; cL=LIST_TAIL(cL))
{
TxPrintf("%s",
DBTypeLongNameTbl[
((RouteContact*) LIST_FIRST(cL))->
rc_routeType.rt_tileType]);
if(((RouteContact*) LIST_FIRST(cL))->rc_rLayer1 == rL)
TxPrintf("(to %s) ", DBTypeLongNameTbl[
((RouteContact*) LIST_FIRST(cL))->
rc_rLayer2->rl_routeType.rt_tileType]);
else
TxPrintf("(to %s) ", DBTypeLongNameTbl[
((RouteContact*) LIST_FIRST(cL))->
rc_rLayer1->rl_routeType.rt_tileType]);
}
TxPrintf("\n");
TxPrintf("\thCost = %d\n",
rL->rl_hCost);
TxPrintf("\tvCost = %d\n",
rL->rl_vCost);
TxPrintf("\tjogCost = %d\n",
rL->rl_jogCost);
TxPrintf("\thintCost = %d\n",rL->rl_hintCost);
return;
}
/*
* ----------------------------------------------------------------------------
*
* mzPrintRouteType --
*
* Print routeType struc.
*
* Results:
* None.
*
* Side effects:
* None
*
* ----------------------------------------------------------------------------
*/
void
mzPrintRT(rT)
RouteType *rT;
{
int i;
TxPrintf("\tROUTETYPE:\n");
TxPrintf("\t\ttileType = %s\n", DBTypeLongNameTbl[rT->rt_tileType]);
TxPrintf("\t\tactive = %s\n", (rT->rt_active ? "TRUE" : "FALSE"));
TxPrintf("\t\twidth = %d\n",rT->rt_width);
TxPrintf("\t\tspacing = ");
for (i=0;i<TT_MAXTYPES;i++)
if(rT->rt_spacing[i]>=0)
TxPrintf("%s(%d) ",DBTypeLongNameTbl[i],rT->rt_spacing[i]);
if(rT->rt_spacing[TT_SUBCELL]>=0)
TxPrintf("%s(%d) ","SUBCELL",rT->rt_spacing[TT_SUBCELL]);
TxPrintf("\n");
TxPrintf("\t\teffWidth = %d\n",rT->rt_effWidth);
for (i=0;i<TT_MAXTYPES;i++)
if(rT->rt_bloatBot[i]>=0)
TxPrintf("%s(%d) ",DBTypeLongNameTbl[i],rT->rt_bloatBot[i]);
if(rT->rt_spacing[TT_SUBCELL]>=0)
TxPrintf("%s(%d) ","SUBCELL",rT->rt_bloatBot[TT_SUBCELL]);
TxPrintf("\n");
for (i=0;i<TT_MAXTYPES;i++)
if(rT->rt_bloatTop[i]>=0)
TxPrintf("%s(%d) ",DBTypeLongNameTbl[i],rT->rt_bloatTop[i]);
if(rT->rt_spacing[TT_SUBCELL]>=0)
TxPrintf("%s(%d) ","SUBCELL",rT->rt_bloatTop[TT_SUBCELL]);
TxPrintf("\n");
TxPrintf("\t\tnext = %s\n",
(rT->rt_next ? DBTypeLongNameTbl[rT->rt_next->rt_tileType] : "(nil)"));
return;
}
/*
* ----------------------------------------------------------------------------
*
* MZPrintRCs --
*
* Print list of RouteLayer strucs.
*
* Results:
* None.
*
* Side effects:
* None
*
* ----------------------------------------------------------------------------
*/
void
MZPrintRCs(rC)
RouteContact *rC;
{
while(rC!=NULL)
{
mzPrintRC(rC);
rC = rC->rc_next;
if(rC!=NULL) TxMore("");
}
return;
}
/*
* ----------------------------------------------------------------------------
*
* mzPrintRC --
*
* Print single RouteContact struc.
*
* Results:
* None.
*
* Side effects:
* None
*
* ----------------------------------------------------------------------------
*/
void
mzPrintRC(rC)
RouteContact *rC;
{
TxPrintf("ROUTE CONTACT:\n");
mzPrintRT(&(rC->rc_routeType));
TxPrintf("\trLayer1 = %s\n",
DBTypeLongNameTbl[rC->rc_rLayer1->rl_routeType.rt_tileType]);
TxPrintf("\trLayer2 = %s\n",
DBTypeLongNameTbl[rC->rc_rLayer2->rl_routeType.rt_tileType]);
TxPrintf("\tcost = %d\n",
rC->rc_cost);
return;
}
/*
* ----------------------------------------------------------------------------
*
* mzPrintRPs --
*
* Print list of RoutePath strucs.
*
* Results:
* None.
*
* Side effects:
* None
*
* ----------------------------------------------------------------------------
*/
void
mzPrintRPs(path)
RoutePath *path;
{
while(path!=NULL)
{
mzPrintRP(path);
path = path->rp_back;
}
return;
}
/*
* ----------------------------------------------------------------------------
*
* mzPrintRP --
*
* Print single RoutePath struc.
*
* Results:
* None.
*
* Side effects:
* None
*
* ----------------------------------------------------------------------------
*/
void
mzPrintRP(path)
RoutePath *path;
{
TxPrintf("ROUTE PATH:");
TxPrintf(" layer = %s",
DBTypeLongNameTbl[path->rp_rLayer->rl_routeType.rt_tileType]);
TxPrintf(" entry = (%d, %d)", path->rp_entry.p_x, path->rp_entry.p_y);
TxPrintf(" cost = %.0f",
(double)(path->rp_cost));
TxPrintf(" extCode = { ");
if (path->rp_extendCode & EC_RIGHT)
{
TxPrintf("right ");
}
if (path->rp_extendCode & EC_LEFT)
{
TxPrintf("left ");
}
if (path->rp_extendCode & EC_UP)
{
TxPrintf("up");
}
if (path->rp_extendCode & EC_DOWN)
{
TxPrintf("down ");
}
if (path->rp_extendCode & (EC_UDCONTACTS | EC_LRCONTACTS))
{
TxPrintf("contacts ");
}
TxPrintf("}\n");
return;
}
/* mzPrintPathHead -- */
void
mzPrintPathHead(path)
RoutePath *path;
{
if(path==NULL)
{
TxPrintf(" NULL Path.\n");
}
else
{
TxPrintf(" point=(%d,%d), layer=%s, orient = '%c'",
path->rp_entry.p_x,
path->rp_entry.p_y,
DBTypeLongNameTbl[path->rp_rLayer->rl_routeType.rt_tileType],
path->rp_orient);
TxPrintf(", togo=%.0f",
(double)(path->rp_togo));
TxPrintf(", cost=%.0f\n",
(double)(path->rp_cost));
TxPrintf(" extendCode = { ");
if (path->rp_extendCode & EC_RIGHT)
{
TxPrintf("right ");
}
if (path->rp_extendCode & EC_LEFT)
{
TxPrintf("left ");
}
if (path->rp_extendCode & EC_UP)
{
TxPrintf("up ");
}
if (path->rp_extendCode & EC_DOWN)
{
TxPrintf("down ");
}
if (path->rp_extendCode & (EC_LRCONTACTS | EC_UDCONTACTS))
{
TxPrintf("contacts ");
}
TxPrintf("}\n");
}
return;
}
/*
* ----------------------------------------------------------------------------
*
* mzDumpTags --
*
* Dump tags on data tiles (for debugging).
*
* Results:
* None.
*
* Side effects:
* info written to file or via TxPrintf()
*
* ----------------------------------------------------------------------------
*/
void
mzDumpTags(area)
Rect *area;
{
int mzDumpTagsFunc();
SearchContext scx;
/* mzke sure mzRouteUse is initialed */
if(mzRouteUse == NULL)
{
TxPrintf("Can not dump tags, until mzRouteUse is initialed.\n");
TxPrintf("(Do an iroute first.)\n");
return;
}
/* look at all data tiles under box. */
scx.scx_area = *area;
scx.scx_trans = GeoIdentityTransform;
scx.scx_use = mzRouteUse;
(void) DBTreeSrTiles(
&scx,
&DBAllTypeBits,
0, /* look inside all subcells */
mzDumpTagsFunc,
(ClientData) NULL);
return;
}
/*
* ----------------------------------------------------------------------------
*
* mzDumpTagsFunc --
*
* Filter function called above, dumps tag info for all tiles in search area.
*
* Results:
* Returns 0 always.
*
* Side effects:
* Dumps info associated with tile.
*
* ----------------------------------------------------------------------------
*/
int
mzDumpTagsFunc(tile, cxp)
Tile *tile;
TreeContext *cxp;
{
ARG_UNUSED(cxp);
Rect r;
/* if tile has no client data attached, skip it */
if (tile->ti_client == (ClientData)CLIENTDEFAULT)
return 0;
/* Get boundary of tile */
TITORECT(tile, &r);
/* print tile bounds */
TxPrintf("tile %lx (x: %d to %d, y: %d to %d)\n",
(intmax_t) (pointertype) tile, r.r_xbot, r.r_xtop, r.r_ybot, r.r_ytop);
/* dump rects attached to client field */
{
List *l;
for(l=(List *) (tile->ti_client); l!=NULL; l=LIST_TAIL(l))
{
Rect *rTerm = (Rect *) LIST_FIRST(l);
TxPrintf("\tattached dest area (x: %d to %d, y: %d to %d)\n",
rTerm->r_xbot,
rTerm->r_xtop,
rTerm->r_ybot,
rTerm->r_ytop);
}
}
/* continue search */
return 0;
}