565 lines
11 KiB
C
565 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 "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;
|
|||
|
|
{
|
|||
|
|
SearchContext *scx = cxp->tc_scx;
|
|||
|
|
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 %x (x: %d to %d, y: %d to %d)\n",
|
|||
|
|
(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;
|
|||
|
|
}
|
|||
|
|
|