75 lines
2.9 KiB
C
75 lines
2.9 KiB
C
/*
|
|
* 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) (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 = (ClientData) (((int) (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 = (ClientData) (((int) (t)->ti_client)&(!s)))
|
|
|
|
/* Private Procedures */
|
|
int rtrSrPaint();
|
|
int rtrSrClear();
|
|
int rtrSrFunc();
|
|
|
|
/* Exported Procedures */
|
|
CellDef * RtrDecompose();
|
|
|
|
#endif /* _RTRDECOMPOSE_H */
|