magic/router/rtrDcmpose.h

75 lines
2.9 KiB
C
Raw Normal View History

/*
* rtrDecompose.h --
*
* Routines to do channel decomposition.
*
* *********************************************************************
* * Copyright (C) 1985, 1990 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. *
* *********************************************************************
*
* rcsid="$Header: /usr/cvsroot/magic-8.0/router/rtrDcmpose.h,v 1.1.1.1 2008/02/03 20:43:50 tim Exp $"
*/
#ifndef _RTRDECOMPOSE_H
#define _RTRDECOMPOSE_H
#define rtrNW 1 /* Corner codes : */
#define rtrSW 2 /* NW=1 ______ NE=8 */
#define rtrSE 4 /* | | */
#define rtrNE 8 /* SW=2 |____| SE=4 */
/* One horizontal space tile edge may touch an arbitrary number of other tiles:
* _______________________________________________
* |CELL| |CELL|
* ________**********|____|====|____|****_________
* |CELL| SPACE |CELL|
* __|____|**********______**************|____|___
* |CELL|
* __________________|____|_______________________
*
* Flags indicate permanently marked edges. There are 4 flags, one for each
* overlapping corner edge marked above (*). Test a horizontal edge by
* looking at the tiles on both sides of the edge. If one edge is completely
* spanned by the other marked above (=), then use either of its tile's two
* lower flag bits (they should be identical).
*
* Edge spans can only overlap (*), at the extreme leftmost and/or rightmost
* horizontal tile-to-tile edges. Four flag bits: topLeft, topRight,
* bottomLeft, and bottomRight, are used to test a particular edge.
*/
/* rtrMARKED(t,s) Tile * t; int s;
* Return 1 if the indicated horizontal boundary of a tile is marked.
*/
#define rtrMARKED(t,s) (((int) CD2INT((t)->ti_client)) & (s))
/* rtrMARK(t,s) Tile * t; int s;
* Mark the indicated horizontal tile edge as a valid channel boundary.
*/
#define rtrMARK(t,s) \
((t)->ti_client = INT2CD((((int) CD2INT((t)->ti_client))&(s))))
/* rtrCLEAR(t,s) Tile * t; int s;
* Clear the indicated horizontal tile edge as a valid channel boundary.
*/
#define rtrCLEAR(t,s) \
((t)->ti_client = INT2CD((((int) CD2INT((t)->ti_client))&(!s))))
/* Private Procedures */
int rtrSrPaint();
int rtrSrClear();
int rtrSrFunc();
/* Exported Procedures */
CellDef * RtrDecompose();
#endif /* _RTRDECOMPOSE_H */